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

问题描述

我想在TI AM3352的DUAL EMAC内部的2个PHY芯片上进行GPIO驱动的复位。 由于驱动程序不具备此功能,因此我在 mdio_bus.c 驱动程序中做了一个mod,功能mdiobus_register_gpiod()

if (gpiod == NULL && mdiodev->bus && mdiodev->bus->dev.of_node) {           
    gpiod = fwnode_get_named_gpiod(&mdiodev->bus->dev.of_node->fwnode,"phy-reset-gpios",mdiodev->addr,GPIOD_OUT_LOW,"PHY reset");                        
    if (gpiod)
        printk("found gpiod for addr=%d\n",mdiodev->addr);                         
}

mdiodev->reset = gpiod;

这是我具有附加功能的设备树:

&cpsw_emac0 {
    status = "okay";
    phy_id = <&davinci_mdio>,<0>;
    phy-mode = "mii";
    dual_emac_res_vlan = <1>;   
};

&cpsw_emac1 {
    status = "okay";
    phy_id = <&davinci_mdio>,<1>;
    phy-mode = "mii";
    dual_emac_res_vlan = <2>;   
};

&davinci_mdio {
    status = "okay";
    phy-reset-gpios = <&gpio1 0 GPIO_ACTIVE_LOW>,<&gpio1 1 GPIO_ACTIVE_LOW>;
    pinctrl-names = "default";
    pinctrl-0 = <&mdio_pins_default>;
};

&mac {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&phy1_pins_default>,<&phy2_pins_default>;
    dual_emac = <1>;
};

然而,GPIO控制器在Mdio驱动程序之后很长时间就初始化了,因此,mdio总线找不到GPIO芯片。

是否可以更早初始化GPIO?在哪里配置此优先级?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)