From b67f47f2429e2bdbd3c6edf676beab0535e6e7fc Mon Sep 17 00:00:00 2001 From: David Wu Date: Wed, 24 May 2023 17:34:50 +0800 Subject: [PATCH] net: phy: rk630phy: Add adc performance Increase ad gain and vcm voltage to get better performance, If it was 10M speed, also increase eq gain. Signed-off-by: David Wu Change-Id: I7bad65f14a753c4d3de18c702394d1f91d47dc4a --- drivers/net/phy/rk630phy.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/rk630phy.c b/drivers/net/phy/rk630phy.c index 3579397410b9..b0da4525e3e9 100644 --- a/drivers/net/phy/rk630phy.c +++ b/drivers/net/phy/rk630phy.c @@ -219,7 +219,7 @@ static void rk630_phy_t22_config_init(struct phy_device *phydev) /* Switch to page 6 */ phy_write(phydev, REG_PAGE_SEL, 0x0600); /* PHYAFE ADC optimization */ - phy_write(phydev, REG_PAGE6_ADC_ANONTROL, 0x5540); + phy_write(phydev, REG_PAGE6_ADC_ANONTROL, 0x555e); /* PHYAFE Gain optimization */ phy_write(phydev, REG_PAGE6_GAIN_ANONTROL, 0x0400); /* PHYAFE EQ optimization */ @@ -284,6 +284,23 @@ static int rk630_phy_config_init(struct phy_device *phydev) return 0; } +static void rk630_link_change_notify(struct phy_device *phydev) +{ + unsigned int val; + + if (phydev->state == PHY_RUNNING || phydev->state == PHY_NOLINK) { + /* Switch to page 6 */ + phy_write(phydev, REG_PAGE_SEL, 0x0600); + val = phy_read(phydev, REG_PAGE6_AFE_TX_CTRL); + val &= ~GENMASK(14, 13); + if (phydev->speed == SPEED_10 && phydev->link) + val |= BIT(13); + phy_write(phydev, REG_PAGE6_AFE_TX_CTRL, val); + /* Switch to page 0 */ + phy_write(phydev, REG_PAGE_SEL, 0x0000); + } +} + static irqreturn_t rk630_wol_irq_thread(int irq, void *dev_id) { struct rk630_phy_priv *priv = (struct rk630_phy_priv *)dev_id; @@ -369,6 +386,7 @@ static struct phy_driver rk630_phy_driver[] = { .name = "RK630 PHY", .features = PHY_BASIC_FEATURES, .flags = 0, + .link_change_notify = rk630_link_change_notify, .probe = rk630_phy_probe, .remove = rk630_phy_remove, .soft_reset = genphy_soft_reset,