Linux kernel 如何在MII初始化之前进行GPIO初始化

Linux kernel 如何在MII初始化之前进行GPIO初始化,linux-kernel,linux-device-driver,device-tree,Linux Kernel,Linux Device Driver,Device Tree,我想在TI AM3352上的双EMAC内的2个PHY芯片上进行GPIO驱动复位。 因为驱动程序没有这种能力,我在mdio_bus.c驱动程序中做了一个mod,functionmdiobus_register\u gpiod(): if(gpiod==NULL&&mdiodev->bus&&mdiodev->bus->dev.of_节点){ gpiod=fwnode\u获取\u命名\u gpiod(&mdiodev->bus->dev.of\u node->fwnode, “物理层重置gpios”

我想在TI AM3352上的双EMAC内的2个PHY芯片上进行GPIO驱动复位。 因为驱动程序没有这种能力,我在mdio_bus.c驱动程序中做了一个mod,function
mdiobus_register\u gpiod()

if(gpiod==NULL&&mdiodev->bus&&mdiodev->bus->dev.of_节点){
gpiod=fwnode\u获取\u命名\u gpiod(&mdiodev->bus->dev.of\u node->fwnode,
“物理层重置gpios”,mdiodev->addr,GPIOD输出低,
“物理重置”);
如果(gpiod)
printk(“找到地址的gpiod=%d\n”,mdiodev->addr);
}
mdiodev->reset=gpiod;
这是我的设备树,添加了以下功能:

&cpsw\u emac0{
status=“好”;
phy_id=;
phy mode=“mii”;
双_emac_res_vlan=;
};
&cpsw_emac1{
status=“好”;
phy_id=;
phy mode=“mii”;
双_emac_res_vlan=;
};
&达芬奇{
status=“好”;
phy重置gpios=;
pinctrl names=“默认”;
pinctrl-0=;
};
&苹果{
status=“好”;
pinctrl names=“默认”;
pinctrl-0=,;
双_emac=;
};
但是,GPIO控制器在MDIO驱动程序之后很长时间才初始化,因此MDIO总线无法找到GPIO芯片


是否可以提前初始化GPIO?此优先级在何处配置?

如果正在查找的某些资源尚不可用,则驱动程序探测请求函数可以返回(或传播)一个
-EPROBE\u DEFER
错误。probe函数在发生任何其他错误后仍应进行清理。请参阅的一节中关于
-EPROBE\u DEFER
的讨论。使用simple
devm\u gpiod\u get(&mdodev->bus->dev,…)驱动程序探测请求函数可以返回(或传播)一个
-EPROBE\u DEFER
错误,如果它正在寻找的某些资源还不可用。probe函数在发生任何其他错误后仍应进行清理。请参阅的一节中关于
-EPROBE\u DEFER
的讨论。使用simple
devm\u gpiod\u get(&mdodev->bus->dev,…)