@@ -226,15 +226,21 @@ static struct device_node *scan_OF_for_p
unsigned int devfn)
{
struct device_node *np;
+ struct device_node *np_sub = NULL;
const u32 *reg;
unsigned int psize;
for_each_child_of_node(parent, np) {
reg = of_get_property(np, "reg", &psize);
- if (reg == NULL || psize < 4)
- continue;
- if (((reg[0] >> 8) & 0xff) == devfn)
- return np;
+ if (reg && psize >= 4) {
+ if (((reg[0] >> 8) & 0xff) == devfn)
+ return np;
+ }
+ if (!strcmp(np->name, "multifunc-device")) {
+ np_sub = scan_OF_for_pci_dev(np, devfn);
+ if (np_sub)
+ return np_sub;
+ }
}
return NULL;
}