net: phy: adin: enable configuration of the LP Termination Register

The ADIN1200/ADIN1300 provide a control bit that selects between normal
receive termination and the lowest common mode impedance for 100BASE-TX
operation. This behavior is controlled through the Low Power Termination
register (B_100_ZPTM_EN_DIMRX).

Bit 0 of this register enables normal termination when set (this is the
default), and selects the lowest common mode impedance when cleared.

Signed-off-by: Osose Itua <osose.itua@savoirfairelinux.com>
Acked-by: Nuno Sá <nuno.sa@analog.com>
Link: https://patch.msgid.link/20260107221913.1334157-3-osose.itua@savoirfairelinux.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Osose Itua 2026-01-07 17:16:53 -05:00 committed by Jakub Kicinski
parent 7376ba2db1
commit a673383652
1 changed files with 20 additions and 0 deletions

View File

@ -89,6 +89,9 @@
#define ADIN1300_CLOCK_STOP_REG 0x9400
#define ADIN1300_LPI_WAKE_ERR_CNT_REG 0xa000
#define ADIN1300_B_100_ZPTM_DIMRX 0xB685
#define ADIN1300_B_100_ZPTM_EN_DIMRX BIT(0)
#define ADIN1300_CDIAG_RUN 0xba1b
#define ADIN1300_CDIAG_RUN_EN BIT(0)
@ -522,6 +525,19 @@ static int adin_config_clk_out(struct phy_device *phydev)
ADIN1300_GE_CLK_CFG_MASK, sel);
}
static int adin_config_zptm100(struct phy_device *phydev)
{
struct device *dev = &phydev->mdio.dev;
if (!(device_property_read_bool(dev, "adi,low-cmode-impedance")))
return 0;
/* clear bit 0 to configure for lowest common-mode impedance */
return phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1,
ADIN1300_B_100_ZPTM_DIMRX,
ADIN1300_B_100_ZPTM_EN_DIMRX);
}
static int adin_config_init(struct phy_device *phydev)
{
int rc;
@ -548,6 +564,10 @@ static int adin_config_init(struct phy_device *phydev)
if (rc < 0)
return rc;
rc = adin_config_zptm100(phydev);
if (rc < 0)
return rc;
phydev_dbg(phydev, "PHY is using mode '%s'\n",
phy_modes(phydev->interface));