Lines Matching refs:phydev
30 static int lan88xx_read_page(struct phy_device *phydev) in lan88xx_read_page() argument
32 return __phy_read(phydev, LAN88XX_EXT_PAGE_ACCESS); in lan88xx_read_page()
35 static int lan88xx_write_page(struct phy_device *phydev, int page) in lan88xx_write_page() argument
37 return __phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, page); in lan88xx_write_page()
40 static int lan88xx_suspend(struct phy_device *phydev) in lan88xx_suspend() argument
42 struct lan88xx_priv *priv = phydev->priv; in lan88xx_suspend()
46 genphy_suspend(phydev); in lan88xx_suspend()
51 static int lan88xx_TR_reg_set(struct phy_device *phydev, u16 regaddr, in lan88xx_TR_reg_set() argument
58 save_page = phy_save_page(phydev); in lan88xx_TR_reg_set()
60 phydev_warn(phydev, "Failed to get current page\n"); in lan88xx_TR_reg_set()
65 lan88xx_write_page(phydev, LAN88XX_EXT_PAGE_ACCESS_TR); in lan88xx_TR_reg_set()
67 ret = __phy_write(phydev, LAN88XX_EXT_PAGE_TR_LOW_DATA, in lan88xx_TR_reg_set()
70 phydev_warn(phydev, "Failed to write TR low data\n"); in lan88xx_TR_reg_set()
74 ret = __phy_write(phydev, LAN88XX_EXT_PAGE_TR_HIGH_DATA, in lan88xx_TR_reg_set()
77 phydev_warn(phydev, "Failed to write TR high data\n"); in lan88xx_TR_reg_set()
85 ret = __phy_write(phydev, LAN88XX_EXT_PAGE_TR_CR, buf); in lan88xx_TR_reg_set()
87 phydev_warn(phydev, "Failed to write data in reg\n"); in lan88xx_TR_reg_set()
92 val = __phy_read(phydev, LAN88XX_EXT_PAGE_TR_CR); in lan88xx_TR_reg_set()
94 phydev_warn(phydev, "TR Register[0x%X] configuration failed\n", in lan88xx_TR_reg_set()
97 return phy_restore_page(phydev, save_page, ret); in lan88xx_TR_reg_set()
100 static void lan88xx_config_TR_regs(struct phy_device *phydev) in lan88xx_config_TR_regs() argument
108 err = lan88xx_TR_reg_set(phydev, 0x0F82, 0x12B00A); in lan88xx_config_TR_regs()
110 phydev_warn(phydev, "Failed to Set Register[0x0F82]\n"); in lan88xx_config_TR_regs()
116 err = lan88xx_TR_reg_set(phydev, 0x168C, 0xD2C46F); in lan88xx_config_TR_regs()
118 phydev_warn(phydev, "Failed to Set Register[0x168C]\n"); in lan88xx_config_TR_regs()
124 err = lan88xx_TR_reg_set(phydev, 0x17A2, 0x620); in lan88xx_config_TR_regs()
126 phydev_warn(phydev, "Failed to Set Register[0x17A2]\n"); in lan88xx_config_TR_regs()
133 err = lan88xx_TR_reg_set(phydev, 0x16A0, 0xEEFFDD); in lan88xx_config_TR_regs()
135 phydev_warn(phydev, "Failed to Set Register[0x16A0]\n"); in lan88xx_config_TR_regs()
141 err = lan88xx_TR_reg_set(phydev, 0x16A6, 0x071448); in lan88xx_config_TR_regs()
143 phydev_warn(phydev, "Failed to Set Register[0x16A6]\n"); in lan88xx_config_TR_regs()
149 err = lan88xx_TR_reg_set(phydev, 0x16A4, 0x13132F); in lan88xx_config_TR_regs()
151 phydev_warn(phydev, "Failed to Set Register[0x16A4]\n"); in lan88xx_config_TR_regs()
157 err = lan88xx_TR_reg_set(phydev, 0x16A8, 0x0); in lan88xx_config_TR_regs()
159 phydev_warn(phydev, "Failed to Set Register[0x16A8]\n"); in lan88xx_config_TR_regs()
166 err = lan88xx_TR_reg_set(phydev, 0x0FE8, 0x91B06C); in lan88xx_config_TR_regs()
168 phydev_warn(phydev, "Failed to Set Register[0x0FE8]\n"); in lan88xx_config_TR_regs()
175 err = lan88xx_TR_reg_set(phydev, 0x0FFC, 0xC0A028); in lan88xx_config_TR_regs()
177 phydev_warn(phydev, "Failed to Set Register[0x0FFC]\n"); in lan88xx_config_TR_regs()
184 err = lan88xx_TR_reg_set(phydev, 0x0FEA, 0x041600); in lan88xx_config_TR_regs()
186 phydev_warn(phydev, "Failed to Set Register[0x0FEA]\n"); in lan88xx_config_TR_regs()
191 err = lan88xx_TR_reg_set(phydev, 0x1686, 0x000004); in lan88xx_config_TR_regs()
193 phydev_warn(phydev, "Failed to Set Register[0x1686]\n"); in lan88xx_config_TR_regs()
196 static int lan88xx_probe(struct phy_device *phydev) in lan88xx_probe() argument
198 struct device *dev = &phydev->mdio.dev; in lan88xx_probe()
225 (void)phy_write(phydev, LAN78XX_PHY_LED_MODE_SELECT, reg); in lan88xx_probe()
231 priv->chip_id = phy_read_mmd(phydev, 3, LAN88XX_MMD3_CHIP_ID); in lan88xx_probe()
232 priv->chip_rev = phy_read_mmd(phydev, 3, LAN88XX_MMD3_CHIP_REV); in lan88xx_probe()
234 phydev->priv = priv; in lan88xx_probe()
239 static void lan88xx_remove(struct phy_device *phydev) in lan88xx_remove() argument
241 struct device *dev = &phydev->mdio.dev; in lan88xx_remove()
242 struct lan88xx_priv *priv = phydev->priv; in lan88xx_remove()
248 static int lan88xx_set_wol(struct phy_device *phydev, in lan88xx_set_wol() argument
251 struct lan88xx_priv *priv = phydev->priv; in lan88xx_set_wol()
258 static void lan88xx_set_mdix(struct phy_device *phydev) in lan88xx_set_mdix() argument
263 switch (phydev->mdix_ctrl) { in lan88xx_set_mdix()
277 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_1); in lan88xx_set_mdix()
278 buf = phy_read(phydev, LAN88XX_EXT_MODE_CTRL); in lan88xx_set_mdix()
281 phy_write(phydev, LAN88XX_EXT_MODE_CTRL, buf); in lan88xx_set_mdix()
282 phy_write(phydev, LAN88XX_EXT_PAGE_ACCESS, LAN88XX_EXT_PAGE_SPACE_0); in lan88xx_set_mdix()
285 static int lan88xx_config_init(struct phy_device *phydev) in lan88xx_config_init() argument
290 val = phy_read_mmd(phydev, MDIO_MMD_PCS, in lan88xx_config_init()
294 phy_write_mmd(phydev, MDIO_MMD_PCS, PHY_ARDENNES_MMD_DEV_3_PHY_CFG, in lan88xx_config_init()
298 lan88xx_config_TR_regs(phydev); in lan88xx_config_init()
303 static int lan88xx_config_aneg(struct phy_device *phydev) in lan88xx_config_aneg() argument
305 lan88xx_set_mdix(phydev); in lan88xx_config_aneg()
307 return genphy_config_aneg(phydev); in lan88xx_config_aneg()
310 static void lan88xx_link_change_notify(struct phy_device *phydev) in lan88xx_link_change_notify() argument
320 if (phydev->state == PHY_NOLINK) { in lan88xx_link_change_notify()
321 ret = phy_init_hw(phydev); in lan88xx_link_change_notify()
325 ret = _phy_start_aneg(phydev); in lan88xx_link_change_notify()
335 if (phydev->state == PHY_NOLINK && !phydev->autoneg && phydev->speed == 100) { in lan88xx_link_change_notify()
337 temp = phy_read(phydev, LAN88XX_INT_MASK); in lan88xx_link_change_notify()
339 phy_write(phydev, LAN88XX_INT_MASK, temp); in lan88xx_link_change_notify()
341 temp = phy_read(phydev, MII_BMCR); in lan88xx_link_change_notify()
343 phy_write(phydev, MII_BMCR, temp); /* set to 10 first */ in lan88xx_link_change_notify()
345 phy_write(phydev, MII_BMCR, temp); /* set to 100 later */ in lan88xx_link_change_notify()
348 temp = phy_read(phydev, LAN88XX_INT_STS); in lan88xx_link_change_notify()
351 temp = phy_read(phydev, LAN88XX_INT_MASK); in lan88xx_link_change_notify()
353 phy_write(phydev, LAN88XX_INT_MASK, temp); in lan88xx_link_change_notify()
359 phydev_err(phydev, "Link change process failed %pe\n", ERR_PTR(ret)); in lan88xx_link_change_notify()
373 static int lan937x_tx_read_mdix_status(struct phy_device *phydev) in lan937x_tx_read_mdix_status() argument
377 ret = phy_read(phydev, LAN937X_MODE_CTRL_STATUS_REG); in lan937x_tx_read_mdix_status()
382 phydev->mdix_ctrl = ETH_TP_MDI_AUTO; in lan937x_tx_read_mdix_status()
384 phydev->mdix = ETH_TP_MDI_INVALID; in lan937x_tx_read_mdix_status()
386 phydev->mdix_ctrl = ETH_TP_MDI_X; in lan937x_tx_read_mdix_status()
387 phydev->mdix = ETH_TP_MDI_X; in lan937x_tx_read_mdix_status()
389 phydev->mdix_ctrl = ETH_TP_MDI; in lan937x_tx_read_mdix_status()
390 phydev->mdix = ETH_TP_MDI; in lan937x_tx_read_mdix_status()
405 static int lan937x_tx_read_status(struct phy_device *phydev) in lan937x_tx_read_status() argument
409 ret = genphy_read_status(phydev); in lan937x_tx_read_status()
413 return lan937x_tx_read_mdix_status(phydev); in lan937x_tx_read_status()
427 static int lan937x_tx_set_mdix(struct phy_device *phydev) in lan937x_tx_set_mdix() argument
431 switch (phydev->mdix_ctrl) { in lan937x_tx_set_mdix()
445 return phy_modify(phydev, LAN937X_MODE_CTRL_STATUS_REG, in lan937x_tx_set_mdix()
460 static int lan937x_tx_config_aneg(struct phy_device *phydev) in lan937x_tx_config_aneg() argument
464 ret = lan937x_tx_set_mdix(phydev); in lan937x_tx_config_aneg()
468 return genphy_config_aneg(phydev); in lan937x_tx_config_aneg()