网口指示灯驱动IO口做GPIO使用的修改

PAD_PM_LED0 和 PAD_PM_LED1做GPIO使用的修改

公版默认使用PAD_PM_LED0 (绿色灯)和 PAD_PM_LED1(橙色灯) 做网口指示灯,在boot里面会默认设置为LED mode (HW 控制模式):

Mhal_emac.c 的MHal_EMAC_ClkGen 函数:

//enable LED //16'0x0e_28[5:4]=01

uRegVal = MHal_EMAC_ReadReg8(REG_BANK_PMSLEEP, 0x50);

uRegVal = (uRegVal&~0x30)|0x10;

MHal_EMAC_WritReg8(REG_BANK_PMSLEEP, 0x50, uRegVal);

PAD_PM_LED0 和 PAD_PM_LED1 是共享bit mode 控制,也就是说不能单独设置IO口的功能mode;

但是些客户不需要网口的橙色灯,所以他们希望PAD_PM_LED1 做GPIO使用的同时,PAD_PM_LED0仍然用于控制网口的绿色指示灯;此时就需要在DTS 的emac节点中把“led-green = <PAD_PM_LED0>;”加上;PAD_PM_LED0设置为GPIO功能,由emac 驱动会控制绿色灯亮灭(软件控制模式)

同理,添加led-orange = <PAD_PM_LED1> ,橙色灯也会由emac驱动控制

DTS 参考:

emac0: emac0 {

compatible = "sstar-emac";

interrupts = <GIC_SPI INT_IRQ_EMAC IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI INT_FIQ_LAN_ESD IRQ_TYPE_LEVEL_HIGH>;

clocks = <&CLK_emac_ahb>,<&CLK_emac_tx>,<&CLK_emac_rx>; //for MII & RMII

#ifdef CONFIG_CAM_CLK

camclk = <CAMCLK_emac_ahb CAMCLK_emac_tx CAMCLK_emac_rx>;

#endif

reg = <0x1F2A2000 0x800>, <0x1F343C00 0x600>, <0x1F006200 0x600>; //for MII

//reg = <0x1F2A2000 0x800>, <0x1F343C00 0x600>, <0 0>; // for RMII

pad = <0x1F203DD4 0x0100 0x0100>;

led-green = <PAD_PM_LED0>;

phy-handle = <&phy0>;

status = "ok";

mdio-bus {

phy0: ethernet-phy@0 {

phy-mode = "mii"; //for MII

//phy-mode = "rmii";//for RMII

};

};

};