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 rtl821x_resume(struct phy_device *phydev) in rtl821x_resume() argument
253 ret = genphy_resume(phydev); in rtl821x_resume()
262 static int rtl8211e_config_init(struct phy_device *phydev) in rtl8211e_config_init() argument
268 switch (phydev->interface) { in rtl8211e_config_init()
294 oldpage = phy_select_page(phydev, 0x7); in rtl8211e_config_init()
298 ret = __phy_write(phydev, RTL821x_EXT_PAGE_SELECT, 0xa4); in rtl8211e_config_init()
302 ret = __phy_modify(phydev, 0x1c, RTL8211E_CTRL_DELAY in rtl8211e_config_init()
307 return phy_restore_page(phydev, oldpage, ret); in rtl8211e_config_init()
310 static int rtl8211b_suspend(struct phy_device *phydev) in rtl8211b_suspend() argument
312 phy_write(phydev, MII_MMD_DATA, BIT(9)); in rtl8211b_suspend()
314 return genphy_suspend(phydev); in rtl8211b_suspend()
317 static int rtl8211b_resume(struct phy_device *phydev) in rtl8211b_resume() argument
319 phy_write(phydev, MII_MMD_DATA, 0); in rtl8211b_resume()
321 return genphy_resume(phydev); in rtl8211b_resume()
324 static int rtl8366rb_config_init(struct phy_device *phydev) in rtl8366rb_config_init() argument
328 ret = phy_set_bits(phydev, RTL8366RB_POWER_SAVE, in rtl8366rb_config_init()
331 dev_err(&phydev->mdio.dev, in rtl8366rb_config_init()
339 static int rtlgen_get_speed(struct phy_device *phydev) in rtlgen_get_speed() argument
343 if (!phydev->link) in rtlgen_get_speed()
346 val = phy_read_paged(phydev, 0xa43, 0x12); in rtlgen_get_speed()
352 phydev->speed = SPEED_10; in rtlgen_get_speed()
355 phydev->speed = SPEED_100; in rtlgen_get_speed()
358 phydev->speed = SPEED_1000; in rtlgen_get_speed()
361 phydev->speed = SPEED_10000; in rtlgen_get_speed()
364 phydev->speed = SPEED_2500; in rtlgen_get_speed()
367 phydev->speed = SPEED_5000; in rtlgen_get_speed()
376 static int rtlgen_read_status(struct phy_device *phydev) in rtlgen_read_status() argument
380 ret = genphy_read_status(phydev); in rtlgen_read_status()
384 return rtlgen_get_speed(phydev); in rtlgen_read_status()
387 static int rtlgen_read_mmd(struct phy_device *phydev, int devnum, u16 regnum) in rtlgen_read_mmd() argument
392 rtl821x_write_page(phydev, 0xa5c); in rtlgen_read_mmd()
393 ret = __phy_read(phydev, 0x12); in rtlgen_read_mmd()
394 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
396 rtl821x_write_page(phydev, 0xa5d); in rtlgen_read_mmd()
397 ret = __phy_read(phydev, 0x10); in rtlgen_read_mmd()
398 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
400 rtl821x_write_page(phydev, 0xa5d); in rtlgen_read_mmd()
401 ret = __phy_read(phydev, 0x11); in rtlgen_read_mmd()
402 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
410 static int rtlgen_write_mmd(struct phy_device *phydev, int devnum, u16 regnum, in rtlgen_write_mmd() argument
416 rtl821x_write_page(phydev, 0xa5d); in rtlgen_write_mmd()
417 ret = __phy_write(phydev, 0x10, val); in rtlgen_write_mmd()
418 rtl821x_write_page(phydev, 0); in rtlgen_write_mmd()
426 static int rtl822x_read_mmd(struct phy_device *phydev, int devnum, u16 regnum) in rtl822x_read_mmd() argument
428 int ret = rtlgen_read_mmd(phydev, devnum, regnum); in rtl822x_read_mmd()
434 rtl821x_write_page(phydev, 0xa6e); in rtl822x_read_mmd()
435 ret = __phy_read(phydev, 0x16); in rtl822x_read_mmd()
436 rtl821x_write_page(phydev, 0); in rtl822x_read_mmd()
438 rtl821x_write_page(phydev, 0xa6d); in rtl822x_read_mmd()
439 ret = __phy_read(phydev, 0x12); in rtl822x_read_mmd()
440 rtl821x_write_page(phydev, 0); in rtl822x_read_mmd()
442 rtl821x_write_page(phydev, 0xa6d); in rtl822x_read_mmd()
443 ret = __phy_read(phydev, 0x10); in rtl822x_read_mmd()
444 rtl821x_write_page(phydev, 0); in rtl822x_read_mmd()
450 static int rtl822x_write_mmd(struct phy_device *phydev, int devnum, u16 regnum, in rtl822x_write_mmd() argument
453 int ret = rtlgen_write_mmd(phydev, devnum, regnum, val); in rtl822x_write_mmd()
459 rtl821x_write_page(phydev, 0xa6d); in rtl822x_write_mmd()
460 ret = __phy_write(phydev, 0x12, val); in rtl822x_write_mmd()
461 rtl821x_write_page(phydev, 0); in rtl822x_write_mmd()
467 static int rtl822x_get_features(struct phy_device *phydev) in rtl822x_get_features() argument
471 val = phy_read_paged(phydev, 0xa61, 0x13); in rtl822x_get_features()
476 phydev->supported, val & RTL_SUPPORTS_2500FULL); in rtl822x_get_features()
478 phydev->supported, val & RTL_SUPPORTS_5000FULL); in rtl822x_get_features()
480 phydev->supported, val & RTL_SUPPORTS_10000FULL); in rtl822x_get_features()
482 return genphy_read_abilities(phydev); in rtl822x_get_features()
485 static int rtl822x_config_aneg(struct phy_device *phydev) in rtl822x_config_aneg() argument
489 if (phydev->autoneg == AUTONEG_ENABLE) { in rtl822x_config_aneg()
493 phydev->advertising)) in rtl822x_config_aneg()
496 ret = phy_modify_paged_changed(phydev, 0xa5d, 0x12, in rtl822x_config_aneg()
502 return __genphy_config_aneg(phydev, ret); in rtl822x_config_aneg()
505 static int rtl822x_read_status(struct phy_device *phydev) in rtl822x_read_status() argument
509 if (phydev->autoneg == AUTONEG_ENABLE) { in rtl822x_read_status()
510 int lpadv = phy_read_paged(phydev, 0xa5d, 0x13); in rtl822x_read_status()
516 phydev->lp_advertising, lpadv & RTL_LPADV_10000FULL); in rtl822x_read_status()
518 phydev->lp_advertising, lpadv & RTL_LPADV_5000FULL); in rtl822x_read_status()
520 phydev->lp_advertising, lpadv & RTL_LPADV_2500FULL); in rtl822x_read_status()
523 ret = genphy_read_status(phydev); in rtl822x_read_status()
527 return rtlgen_get_speed(phydev); in rtl822x_read_status()
530 static bool rtlgen_supports_2_5gbps(struct phy_device *phydev) in rtlgen_supports_2_5gbps() argument
534 phy_write(phydev, RTL821x_PAGE_SELECT, 0xa61); in rtlgen_supports_2_5gbps()
535 val = phy_read(phydev, 0x13); in rtlgen_supports_2_5gbps()
536 phy_write(phydev, RTL821x_PAGE_SELECT, 0); in rtlgen_supports_2_5gbps()
541 static int rtlgen_match_phy_device(struct phy_device *phydev) in rtlgen_match_phy_device() argument
543 return phydev->phy_id == RTL_GENERIC_PHYID && in rtlgen_match_phy_device()
544 !rtlgen_supports_2_5gbps(phydev); in rtlgen_match_phy_device()
547 static int rtl8226_match_phy_device(struct phy_device *phydev) in rtl8226_match_phy_device() argument
549 return phydev->phy_id == RTL_GENERIC_PHYID && in rtl8226_match_phy_device()
550 rtlgen_supports_2_5gbps(phydev); in rtl8226_match_phy_device()
553 static int rtlgen_resume(struct phy_device *phydev) in rtlgen_resume() argument
555 int ret = genphy_resume(phydev); in rtlgen_resume()