1
0
Fork 0

MLK-23173-01 net: phy: realtek: add support for RX delay enable on RTL8211F

Add RX delay enable support for RTL8211F PHY.

Reviewed-by: Richard Zhu <hongxing.zhu@nxp.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
5.4-rM2-2.2.x-imx-squashed
Fugang Duan 2019-12-30 16:16:42 +08:00
parent 7fc02a74f2
commit b610eb69f2
1 changed files with 24 additions and 7 deletions

View File

@ -28,6 +28,7 @@
#define RTL8211F_INSR 0x1d
#define RTL8211F_RX_DELAY BIT(3)
#define RTL8211F_TX_DELAY BIT(8)
#define RTL8211E_TX_DELAY BIT(1)
#define RTL8211E_RX_DELAY BIT(2)
@ -171,25 +172,41 @@ static int rtl8211c_config_init(struct phy_device *phydev)
static int rtl8211f_config_init(struct phy_device *phydev)
{
u16 val;
u16 txdly = 0;
u16 rxdly = 0;
int ret;
/* enable TX-delay for rgmii-{id,txid}, and disable it for rgmii and
* rgmii-rxid. The RX-delay can be enabled by the external RXDLY pin.
*/
switch (phydev->interface) {
case PHY_INTERFACE_MODE_RGMII:
case PHY_INTERFACE_MODE_RGMII_RXID:
val = 0;
break;
case PHY_INTERFACE_MODE_RGMII_ID:
rxdly = RTL8211F_RX_DELAY;
txdly = RTL8211F_TX_DELAY;
break;
case PHY_INTERFACE_MODE_RGMII_RXID:
rxdly = RTL8211F_RX_DELAY;
break;
case PHY_INTERFACE_MODE_RGMII_TXID:
val = RTL8211F_TX_DELAY;
txdly = RTL8211F_TX_DELAY;
break;
default: /* the rest of the modes imply leaving delay as is. */
return 0;
}
return phy_modify_paged(phydev, 0xd08, 0x11, RTL8211F_TX_DELAY, val);
ret = phy_modify_paged(phydev, 0xd08, 0x11, RTL8211F_TX_DELAY, txdly);
if (ret < 0) {
dev_err(&phydev->mdio.dev, "tx delay set failed\n");
return ret;
}
ret = phy_modify_paged(phydev, 0xd08, 0x15, RTL8211F_RX_DELAY, rxdly);
if (ret < 0) {
dev_err(&phydev->mdio.dev, "rx delay set failed\n");
return ret;
}
return ret;
}
static int rtl8211e_config_init(struct phy_device *phydev)