Lines Matching full:phydev

65 static int rtl821x_read_page(struct phy_device *phydev)  in rtl821x_read_page()  argument
67 return __phy_read(phydev, RTL821x_PAGE_SELECT); in rtl821x_read_page()
70 static int rtl821x_write_page(struct phy_device *phydev, int page) in rtl821x_write_page() argument
72 return __phy_write(phydev, RTL821x_PAGE_SELECT, page); in rtl821x_write_page()
75 static int rtl8201_ack_interrupt(struct phy_device *phydev) in rtl8201_ack_interrupt() argument
79 err = phy_read(phydev, RTL8201F_ISR); in rtl8201_ack_interrupt()
84 static int rtl821x_ack_interrupt(struct phy_device *phydev) in rtl821x_ack_interrupt() argument
88 err = phy_read(phydev, RTL821x_INSR); in rtl821x_ack_interrupt()
93 static int rtl8211f_ack_interrupt(struct phy_device *phydev) in rtl8211f_ack_interrupt() argument
97 err = phy_read_paged(phydev, 0xa43, RTL8211F_INSR); in rtl8211f_ack_interrupt()
102 static int rtl8201_config_intr(struct phy_device *phydev) in rtl8201_config_intr() argument
106 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in rtl8201_config_intr()
111 return phy_write_paged(phydev, 0x7, RTL8201F_IER, val); in rtl8201_config_intr()
114 static int rtl8211b_config_intr(struct phy_device *phydev) in rtl8211b_config_intr() argument
118 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in rtl8211b_config_intr()
119 err = phy_write(phydev, RTL821x_INER, in rtl8211b_config_intr()
122 err = phy_write(phydev, RTL821x_INER, 0); in rtl8211b_config_intr()
127 static int rtl8211e_config_intr(struct phy_device *phydev) in rtl8211e_config_intr() argument
131 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in rtl8211e_config_intr()
132 err = phy_write(phydev, RTL821x_INER, in rtl8211e_config_intr()
135 err = phy_write(phydev, RTL821x_INER, 0); in rtl8211e_config_intr()
140 static int rtl8211f_config_intr(struct phy_device *phydev) in rtl8211f_config_intr() argument
144 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in rtl8211f_config_intr()
149 return phy_write_paged(phydev, 0xa42, RTL821x_INER, val); in rtl8211f_config_intr()
152 static int rtl8211_config_aneg(struct phy_device *phydev) in rtl8211_config_aneg() argument
156 ret = genphy_config_aneg(phydev); in rtl8211_config_aneg()
163 if (phydev->speed == SPEED_100 && phydev->autoneg == AUTONEG_DISABLE) { in rtl8211_config_aneg()
164 phy_write(phydev, 0x17, 0x2138); in rtl8211_config_aneg()
165 phy_write(phydev, 0x0e, 0x0260); in rtl8211_config_aneg()
167 phy_write(phydev, 0x17, 0x2108); in rtl8211_config_aneg()
168 phy_write(phydev, 0x0e, 0x0000); in rtl8211_config_aneg()
174 static int rtl8211c_config_init(struct phy_device *phydev) in rtl8211c_config_init() argument
177 return phy_set_bits(phydev, MII_CTRL1000, in rtl8211c_config_init()
181 static int rtl8211f_config_init(struct phy_device *phydev) in rtl8211f_config_init() argument
183 struct device *dev = &phydev->mdio.dev; in rtl8211f_config_init()
189 phy_modify_paged_changed(phydev, 0xa43, RTL8211F_PHYCR1, val, val); in rtl8211f_config_init()
191 switch (phydev->interface) { in rtl8211f_config_init()
216 ret = phy_modify_paged_changed(phydev, 0xd08, 0x11, RTL8211F_TX_DELAY, in rtl8211f_config_init()
231 ret = phy_modify_paged_changed(phydev, 0xd08, 0x15, RTL8211F_RX_DELAY, in rtl8211f_config_init()
249 static int rtl8211e_config_init(struct phy_device *phydev) in rtl8211e_config_init() argument
255 switch (phydev->interface) { in rtl8211e_config_init()
281 oldpage = phy_select_page(phydev, 0x7); in rtl8211e_config_init()
285 ret = __phy_write(phydev, RTL821x_EXT_PAGE_SELECT, 0xa4); in rtl8211e_config_init()
289 ret = __phy_modify(phydev, 0x1c, RTL8211E_CTRL_DELAY in rtl8211e_config_init()
294 return phy_restore_page(phydev, oldpage, ret); in rtl8211e_config_init()
297 static int rtl8211b_suspend(struct phy_device *phydev) in rtl8211b_suspend() argument
299 phy_write(phydev, MII_MMD_DATA, BIT(9)); in rtl8211b_suspend()
301 return genphy_suspend(phydev); in rtl8211b_suspend()
304 static int rtl8211b_resume(struct phy_device *phydev) in rtl8211b_resume() argument
306 phy_write(phydev, MII_MMD_DATA, 0); in rtl8211b_resume()
308 return genphy_resume(phydev); in rtl8211b_resume()
311 static int rtl8366rb_config_init(struct phy_device *phydev) in rtl8366rb_config_init() argument
315 ret = phy_set_bits(phydev, RTL8366RB_POWER_SAVE, in rtl8366rb_config_init()
318 dev_err(&phydev->mdio.dev, in rtl8366rb_config_init()
326 static int rtlgen_get_speed(struct phy_device *phydev) in rtlgen_get_speed() argument
330 if (!phydev->link) in rtlgen_get_speed()
333 val = phy_read_paged(phydev, 0xa43, 0x12); in rtlgen_get_speed()
339 phydev->speed = SPEED_10; in rtlgen_get_speed()
342 phydev->speed = SPEED_100; in rtlgen_get_speed()
345 phydev->speed = SPEED_1000; in rtlgen_get_speed()
348 phydev->speed = SPEED_10000; in rtlgen_get_speed()
351 phydev->speed = SPEED_2500; in rtlgen_get_speed()
354 phydev->speed = SPEED_5000; in rtlgen_get_speed()
363 static int rtlgen_read_status(struct phy_device *phydev) in rtlgen_read_status() argument
367 ret = genphy_read_status(phydev); in rtlgen_read_status()
371 return rtlgen_get_speed(phydev); in rtlgen_read_status()
374 static int rtlgen_read_mmd(struct phy_device *phydev, int devnum, u16 regnum) in rtlgen_read_mmd() argument
379 rtl821x_write_page(phydev, 0xa5c); in rtlgen_read_mmd()
380 ret = __phy_read(phydev, 0x12); in rtlgen_read_mmd()
381 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
383 rtl821x_write_page(phydev, 0xa5d); in rtlgen_read_mmd()
384 ret = __phy_read(phydev, 0x10); in rtlgen_read_mmd()
385 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
387 rtl821x_write_page(phydev, 0xa5d); in rtlgen_read_mmd()
388 ret = __phy_read(phydev, 0x11); in rtlgen_read_mmd()
389 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
397 static int rtlgen_write_mmd(struct phy_device *phydev, int devnum, u16 regnum, in rtlgen_write_mmd() argument
403 rtl821x_write_page(phydev, 0xa5d); in rtlgen_write_mmd()
404 ret = __phy_write(phydev, 0x10, val); in rtlgen_write_mmd()
405 rtl821x_write_page(phydev, 0); in rtlgen_write_mmd()
413 static int rtl822x_read_mmd(struct phy_device *phydev, int devnum, u16 regnum) in rtl822x_read_mmd() argument
415 int ret = rtlgen_read_mmd(phydev, devnum, regnum); in rtl822x_read_mmd()
421 rtl821x_write_page(phydev, 0xa6e); in rtl822x_read_mmd()
422 ret = __phy_read(phydev, 0x16); in rtl822x_read_mmd()
423 rtl821x_write_page(phydev, 0); in rtl822x_read_mmd()
425 rtl821x_write_page(phydev, 0xa6d); in rtl822x_read_mmd()
426 ret = __phy_read(phydev, 0x12); in rtl822x_read_mmd()
427 rtl821x_write_page(phydev, 0); in rtl822x_read_mmd()
429 rtl821x_write_page(phydev, 0xa6d); in rtl822x_read_mmd()
430 ret = __phy_read(phydev, 0x10); in rtl822x_read_mmd()
431 rtl821x_write_page(phydev, 0); in rtl822x_read_mmd()
437 static int rtl822x_write_mmd(struct phy_device *phydev, int devnum, u16 regnum, in rtl822x_write_mmd() argument
440 int ret = rtlgen_write_mmd(phydev, devnum, regnum, val); in rtl822x_write_mmd()
446 rtl821x_write_page(phydev, 0xa6d); in rtl822x_write_mmd()
447 ret = __phy_write(phydev, 0x12, val); in rtl822x_write_mmd()
448 rtl821x_write_page(phydev, 0); in rtl822x_write_mmd()
454 static int rtl822x_get_features(struct phy_device *phydev) in rtl822x_get_features() argument
458 val = phy_read_paged(phydev, 0xa61, 0x13); in rtl822x_get_features()
463 phydev->supported, val & RTL_SUPPORTS_2500FULL); in rtl822x_get_features()
465 phydev->supported, val & RTL_SUPPORTS_5000FULL); in rtl822x_get_features()
467 phydev->supported, val & RTL_SUPPORTS_10000FULL); in rtl822x_get_features()
469 return genphy_read_abilities(phydev); in rtl822x_get_features()
472 static int rtl822x_config_aneg(struct phy_device *phydev) in rtl822x_config_aneg() argument
476 if (phydev->autoneg == AUTONEG_ENABLE) { in rtl822x_config_aneg()
480 phydev->advertising)) in rtl822x_config_aneg()
483 ret = phy_modify_paged_changed(phydev, 0xa5d, 0x12, in rtl822x_config_aneg()
489 return __genphy_config_aneg(phydev, ret); in rtl822x_config_aneg()
492 static int rtl822x_read_status(struct phy_device *phydev) in rtl822x_read_status() argument
496 if (phydev->autoneg == AUTONEG_ENABLE) { in rtl822x_read_status()
497 int lpadv = phy_read_paged(phydev, 0xa5d, 0x13); in rtl822x_read_status()
503 phydev->lp_advertising, lpadv & RTL_LPADV_10000FULL); in rtl822x_read_status()
505 phydev->lp_advertising, lpadv & RTL_LPADV_5000FULL); in rtl822x_read_status()
507 phydev->lp_advertising, lpadv & RTL_LPADV_2500FULL); in rtl822x_read_status()
510 ret = genphy_read_status(phydev); in rtl822x_read_status()
514 return rtlgen_get_speed(phydev); in rtl822x_read_status()
517 static bool rtlgen_supports_2_5gbps(struct phy_device *phydev) in rtlgen_supports_2_5gbps() argument
521 phy_write(phydev, RTL821x_PAGE_SELECT, 0xa61); in rtlgen_supports_2_5gbps()
522 val = phy_read(phydev, 0x13); in rtlgen_supports_2_5gbps()
523 phy_write(phydev, RTL821x_PAGE_SELECT, 0); in rtlgen_supports_2_5gbps()
528 static int rtlgen_match_phy_device(struct phy_device *phydev) in rtlgen_match_phy_device() argument
530 return phydev->phy_id == RTL_GENERIC_PHYID && in rtlgen_match_phy_device()
531 !rtlgen_supports_2_5gbps(phydev); in rtlgen_match_phy_device()
534 static int rtl8226_match_phy_device(struct phy_device *phydev) in rtl8226_match_phy_device() argument
536 return phydev->phy_id == RTL_GENERIC_PHYID && in rtl8226_match_phy_device()
537 rtlgen_supports_2_5gbps(phydev); in rtl8226_match_phy_device()
540 static int rtlgen_resume(struct phy_device *phydev) in rtlgen_resume() argument
542 int ret = genphy_resume(phydev); in rtlgen_resume()