* Tony Lindgren <tony@xxxxxxxxxxx> [131119 18:57]: > We have some device tree properties where the ti,hwmod has multiple > values: > > am33xx.dtsi: ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2"; > am4372.dtsi: ti,hwmods = "tpcc", "tptc0", "tptc1", "tptc2"; > dra7.dtsi: ti,hwmods = "l3_main_1", "l3_main_2"; > omap3.dtsi: ti,hwmods = "mcbsp2", "mcbsp2_sidetone"; > omap3.dtsi: ti,hwmods = "mcbsp3", "mcbsp3_sidetone"; > omap4.dtsi: ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3"; > omap5.dtsi: ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3"; > > So we need to handle the whole string array instead of just the > first string to find the related hwmod entry. > > Cc: "Benoît Cousson" <bcousson@xxxxxxxxxxxx> > Cc: Paul Walmsley <paul@xxxxxxxxx> > Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx> > > --- a/arch/arm/mach-omap2/omap_hwmod.c > +++ b/arch/arm/mach-omap2/omap_hwmod.c > @@ -2228,11 +2228,23 @@ static struct device_node *of_dev_hwmod_lookup(struct device_node *np, > struct omap_hwmod *oh) > { > struct device_node *np0 = NULL, *np1 = NULL; > - const char *p; > > for_each_child_of_node(np, np0) { > - if (of_find_property(np0, "ti,hwmods", NULL)) { > - p = of_get_property(np0, "ti,hwmods", NULL); > + int count, i; > + > + count = of_property_count_strings(np0, "ti,hwmods"); > + if (count < 1) > + continue; > + > + for (i = 0; i < count; i++) { > + const char *p; > + int res; > + > + res = of_property_read_string_index(np0, "ti,hwmods", > + i, &p); > + if (res) > + continue; > + > if (!strcmp(p, oh->name)) > return np0; > np1 = of_dev_hwmod_lookup(np0, oh); Hmm I think this also needs part two to it to populate the right IO space based on the index, this probably now wrongly populates the first IO space for all the hwmod instances in the group. Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html