Lines Matching refs:phydev
56 static int rtl821x_read_page(struct phy_device *phydev) in rtl821x_read_page() argument
58 return __phy_read(phydev, RTL821x_PAGE_SELECT); in rtl821x_read_page()
61 static int rtl821x_write_page(struct phy_device *phydev, int page) in rtl821x_write_page() argument
63 return __phy_write(phydev, RTL821x_PAGE_SELECT, page); in rtl821x_write_page()
66 static int rtl8201_ack_interrupt(struct phy_device *phydev) in rtl8201_ack_interrupt() argument
70 err = phy_read(phydev, RTL8201F_ISR); in rtl8201_ack_interrupt()
75 static int rtl821x_ack_interrupt(struct phy_device *phydev) in rtl821x_ack_interrupt() argument
79 err = phy_read(phydev, RTL821x_INSR); in rtl821x_ack_interrupt()
84 static int rtl8211f_ack_interrupt(struct phy_device *phydev) in rtl8211f_ack_interrupt() argument
88 err = phy_read_paged(phydev, 0xa43, RTL8211F_INSR); in rtl8211f_ack_interrupt()
93 static int rtl8201_config_intr(struct phy_device *phydev) in rtl8201_config_intr() argument
97 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in rtl8201_config_intr()
102 return phy_write_paged(phydev, 0x7, RTL8201F_IER, val); in rtl8201_config_intr()
105 static int rtl8211b_config_intr(struct phy_device *phydev) in rtl8211b_config_intr() argument
109 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in rtl8211b_config_intr()
110 err = phy_write(phydev, RTL821x_INER, in rtl8211b_config_intr()
113 err = phy_write(phydev, RTL821x_INER, 0); in rtl8211b_config_intr()
118 static int rtl8211e_config_intr(struct phy_device *phydev) in rtl8211e_config_intr() argument
122 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in rtl8211e_config_intr()
123 err = phy_write(phydev, RTL821x_INER, in rtl8211e_config_intr()
126 err = phy_write(phydev, RTL821x_INER, 0); in rtl8211e_config_intr()
131 static int rtl8211f_config_intr(struct phy_device *phydev) in rtl8211f_config_intr() argument
135 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in rtl8211f_config_intr()
140 return phy_write_paged(phydev, 0xa42, RTL821x_INER, val); in rtl8211f_config_intr()
143 static int rtl8211_config_aneg(struct phy_device *phydev) in rtl8211_config_aneg() argument
147 ret = genphy_config_aneg(phydev); in rtl8211_config_aneg()
154 if (phydev->speed == SPEED_100 && phydev->autoneg == AUTONEG_DISABLE) { in rtl8211_config_aneg()
155 phy_write(phydev, 0x17, 0x2138); in rtl8211_config_aneg()
156 phy_write(phydev, 0x0e, 0x0260); in rtl8211_config_aneg()
158 phy_write(phydev, 0x17, 0x2108); in rtl8211_config_aneg()
159 phy_write(phydev, 0x0e, 0x0000); in rtl8211_config_aneg()
165 static int rtl8211c_config_init(struct phy_device *phydev) in rtl8211c_config_init() argument
168 return phy_set_bits(phydev, MII_CTRL1000, in rtl8211c_config_init()
172 static int rtl8211f_config_init(struct phy_device *phydev) in rtl8211f_config_init() argument
179 switch (phydev->interface) { in rtl8211f_config_init()
192 return phy_modify_paged(phydev, 0xd08, 0x11, RTL8211F_TX_DELAY, val); in rtl8211f_config_init()
195 static int rtl8211e_config_init(struct phy_device *phydev) in rtl8211e_config_init() argument
201 switch (phydev->interface) { in rtl8211e_config_init()
226 oldpage = phy_select_page(phydev, 0x7); in rtl8211e_config_init()
230 ret = __phy_write(phydev, RTL821x_EXT_PAGE_SELECT, 0xa4); in rtl8211e_config_init()
234 ret = __phy_modify(phydev, 0x1c, RTL8211E_TX_DELAY | RTL8211E_RX_DELAY, in rtl8211e_config_init()
238 return phy_restore_page(phydev, oldpage, ret); in rtl8211e_config_init()
241 static int rtl8211b_suspend(struct phy_device *phydev) in rtl8211b_suspend() argument
243 phy_write(phydev, MII_MMD_DATA, BIT(9)); in rtl8211b_suspend()
245 return genphy_suspend(phydev); in rtl8211b_suspend()
248 static int rtl8211b_resume(struct phy_device *phydev) in rtl8211b_resume() argument
250 phy_write(phydev, MII_MMD_DATA, 0); in rtl8211b_resume()
252 return genphy_resume(phydev); in rtl8211b_resume()
255 static int rtl8366rb_config_init(struct phy_device *phydev) in rtl8366rb_config_init() argument
259 ret = phy_set_bits(phydev, RTL8366RB_POWER_SAVE, in rtl8366rb_config_init()
262 dev_err(&phydev->mdio.dev, in rtl8366rb_config_init()
269 static int rtlgen_read_mmd(struct phy_device *phydev, int devnum, u16 regnum) in rtlgen_read_mmd() argument
274 rtl821x_write_page(phydev, 0xa5c); in rtlgen_read_mmd()
275 ret = __phy_read(phydev, 0x12); in rtlgen_read_mmd()
276 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
278 rtl821x_write_page(phydev, 0xa5d); in rtlgen_read_mmd()
279 ret = __phy_read(phydev, 0x10); in rtlgen_read_mmd()
280 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
282 rtl821x_write_page(phydev, 0xa5d); in rtlgen_read_mmd()
283 ret = __phy_read(phydev, 0x11); in rtlgen_read_mmd()
284 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
292 static int rtlgen_write_mmd(struct phy_device *phydev, int devnum, u16 regnum, in rtlgen_write_mmd() argument
298 rtl821x_write_page(phydev, 0xa5d); in rtlgen_write_mmd()
299 ret = __phy_write(phydev, 0x10, val); in rtlgen_write_mmd()
300 rtl821x_write_page(phydev, 0); in rtlgen_write_mmd()
308 static int rtl8125_read_mmd(struct phy_device *phydev, int devnum, u16 regnum) in rtl8125_read_mmd() argument
310 int ret = rtlgen_read_mmd(phydev, devnum, regnum); in rtl8125_read_mmd()
316 rtl821x_write_page(phydev, 0xa6e); in rtl8125_read_mmd()
317 ret = __phy_read(phydev, 0x16); in rtl8125_read_mmd()
318 rtl821x_write_page(phydev, 0); in rtl8125_read_mmd()
320 rtl821x_write_page(phydev, 0xa6d); in rtl8125_read_mmd()
321 ret = __phy_read(phydev, 0x12); in rtl8125_read_mmd()
322 rtl821x_write_page(phydev, 0); in rtl8125_read_mmd()
324 rtl821x_write_page(phydev, 0xa6d); in rtl8125_read_mmd()
325 ret = __phy_read(phydev, 0x10); in rtl8125_read_mmd()
326 rtl821x_write_page(phydev, 0); in rtl8125_read_mmd()
332 static int rtl8125_write_mmd(struct phy_device *phydev, int devnum, u16 regnum, in rtl8125_write_mmd() argument
335 int ret = rtlgen_write_mmd(phydev, devnum, regnum, val); in rtl8125_write_mmd()
341 rtl821x_write_page(phydev, 0xa6d); in rtl8125_write_mmd()
342 ret = __phy_write(phydev, 0x12, val); in rtl8125_write_mmd()
343 rtl821x_write_page(phydev, 0); in rtl8125_write_mmd()
349 static int rtl8125_get_features(struct phy_device *phydev) in rtl8125_get_features() argument
353 val = phy_read_paged(phydev, 0xa61, 0x13); in rtl8125_get_features()
358 phydev->supported, val & RTL_SUPPORTS_2500FULL); in rtl8125_get_features()
360 phydev->supported, val & RTL_SUPPORTS_5000FULL); in rtl8125_get_features()
362 phydev->supported, val & RTL_SUPPORTS_10000FULL); in rtl8125_get_features()
364 return genphy_read_abilities(phydev); in rtl8125_get_features()
367 static int rtl8125_config_aneg(struct phy_device *phydev) in rtl8125_config_aneg() argument
371 if (phydev->autoneg == AUTONEG_ENABLE) { in rtl8125_config_aneg()
375 phydev->advertising)) in rtl8125_config_aneg()
378 ret = phy_modify_paged_changed(phydev, 0xa5d, 0x12, in rtl8125_config_aneg()
384 return __genphy_config_aneg(phydev, ret); in rtl8125_config_aneg()
387 static int rtl8125_read_status(struct phy_device *phydev) in rtl8125_read_status() argument
389 if (phydev->autoneg == AUTONEG_ENABLE) { in rtl8125_read_status()
390 int lpadv = phy_read_paged(phydev, 0xa5d, 0x13); in rtl8125_read_status()
396 phydev->lp_advertising, lpadv & RTL_LPADV_10000FULL); in rtl8125_read_status()
398 phydev->lp_advertising, lpadv & RTL_LPADV_5000FULL); in rtl8125_read_status()
400 phydev->lp_advertising, lpadv & RTL_LPADV_2500FULL); in rtl8125_read_status()
403 return genphy_read_status(phydev); in rtl8125_read_status()
406 static bool rtlgen_supports_2_5gbps(struct phy_device *phydev) in rtlgen_supports_2_5gbps() argument
410 phy_write(phydev, RTL821x_PAGE_SELECT, 0xa61); in rtlgen_supports_2_5gbps()
411 val = phy_read(phydev, 0x13); in rtlgen_supports_2_5gbps()
412 phy_write(phydev, RTL821x_PAGE_SELECT, 0); in rtlgen_supports_2_5gbps()
417 static int rtlgen_match_phy_device(struct phy_device *phydev) in rtlgen_match_phy_device() argument
419 return phydev->phy_id == RTL_GENERIC_PHYID && in rtlgen_match_phy_device()
420 !rtlgen_supports_2_5gbps(phydev); in rtlgen_match_phy_device()
423 static int rtl8125_match_phy_device(struct phy_device *phydev) in rtl8125_match_phy_device() argument
425 return phydev->phy_id == RTL_GENERIC_PHYID && in rtl8125_match_phy_device()
426 rtlgen_supports_2_5gbps(phydev); in rtl8125_match_phy_device()