Lines Matching full:phydev
78 /* RTL822X_VND2_XXXXX registers are only accessible when phydev->is_c45
118 static int rtl821x_read_page(struct phy_device *phydev) in rtl821x_read_page() argument
120 return __phy_read(phydev, RTL821x_PAGE_SELECT); in rtl821x_read_page()
123 static int rtl821x_write_page(struct phy_device *phydev, int page) in rtl821x_write_page() argument
125 return __phy_write(phydev, RTL821x_PAGE_SELECT, page); in rtl821x_write_page()
128 static int rtl821x_probe(struct phy_device *phydev) in rtl821x_probe() argument
130 struct device *dev = &phydev->mdio.dev; in rtl821x_probe()
132 u32 phy_id = phydev->drv->phy_id; in rtl821x_probe()
144 ret = phy_read_paged(phydev, 0xa43, RTL8211F_PHYCR1); in rtl821x_probe()
154 ret = phy_read_paged(phydev, 0xa43, RTL8211F_PHYCR2); in rtl821x_probe()
163 phydev->priv = priv; in rtl821x_probe()
168 static int rtl8201_ack_interrupt(struct phy_device *phydev) in rtl8201_ack_interrupt() argument
172 err = phy_read(phydev, RTL8201F_ISR); in rtl8201_ack_interrupt()
177 static int rtl821x_ack_interrupt(struct phy_device *phydev) in rtl821x_ack_interrupt() argument
181 err = phy_read(phydev, RTL821x_INSR); in rtl821x_ack_interrupt()
186 static int rtl8211f_ack_interrupt(struct phy_device *phydev) in rtl8211f_ack_interrupt() argument
190 err = phy_read_paged(phydev, 0xa43, RTL8211F_INSR); in rtl8211f_ack_interrupt()
195 static int rtl8201_config_intr(struct phy_device *phydev) in rtl8201_config_intr() argument
200 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in rtl8201_config_intr()
201 err = rtl8201_ack_interrupt(phydev); in rtl8201_config_intr()
206 err = phy_write_paged(phydev, 0x7, RTL8201F_IER, val); in rtl8201_config_intr()
209 err = phy_write_paged(phydev, 0x7, RTL8201F_IER, val); in rtl8201_config_intr()
213 err = rtl8201_ack_interrupt(phydev); in rtl8201_config_intr()
219 static int rtl8211b_config_intr(struct phy_device *phydev) in rtl8211b_config_intr() argument
223 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in rtl8211b_config_intr()
224 err = rtl821x_ack_interrupt(phydev); in rtl8211b_config_intr()
228 err = phy_write(phydev, RTL821x_INER, in rtl8211b_config_intr()
231 err = phy_write(phydev, RTL821x_INER, 0); in rtl8211b_config_intr()
235 err = rtl821x_ack_interrupt(phydev); in rtl8211b_config_intr()
241 static int rtl8211e_config_intr(struct phy_device *phydev) in rtl8211e_config_intr() argument
245 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in rtl8211e_config_intr()
246 err = rtl821x_ack_interrupt(phydev); in rtl8211e_config_intr()
250 err = phy_write(phydev, RTL821x_INER, in rtl8211e_config_intr()
253 err = phy_write(phydev, RTL821x_INER, 0); in rtl8211e_config_intr()
257 err = rtl821x_ack_interrupt(phydev); in rtl8211e_config_intr()
263 static int rtl8211f_config_intr(struct phy_device *phydev) in rtl8211f_config_intr() argument
268 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in rtl8211f_config_intr()
269 err = rtl8211f_ack_interrupt(phydev); in rtl8211f_config_intr()
274 err = phy_write_paged(phydev, 0xa42, RTL821x_INER, val); in rtl8211f_config_intr()
277 err = phy_write_paged(phydev, 0xa42, RTL821x_INER, val); in rtl8211f_config_intr()
281 err = rtl8211f_ack_interrupt(phydev); in rtl8211f_config_intr()
287 static irqreturn_t rtl8201_handle_interrupt(struct phy_device *phydev) in rtl8201_handle_interrupt() argument
291 irq_status = phy_read(phydev, RTL8201F_ISR); in rtl8201_handle_interrupt()
293 phy_error(phydev); in rtl8201_handle_interrupt()
300 phy_trigger_machine(phydev); in rtl8201_handle_interrupt()
305 static irqreturn_t rtl821x_handle_interrupt(struct phy_device *phydev) in rtl821x_handle_interrupt() argument
309 irq_status = phy_read(phydev, RTL821x_INSR); in rtl821x_handle_interrupt()
311 phy_error(phydev); in rtl821x_handle_interrupt()
315 irq_enabled = phy_read(phydev, RTL821x_INER); in rtl821x_handle_interrupt()
317 phy_error(phydev); in rtl821x_handle_interrupt()
324 phy_trigger_machine(phydev); in rtl821x_handle_interrupt()
329 static irqreturn_t rtl8211f_handle_interrupt(struct phy_device *phydev) in rtl8211f_handle_interrupt() argument
333 irq_status = phy_read_paged(phydev, 0xa43, RTL8211F_INSR); in rtl8211f_handle_interrupt()
335 phy_error(phydev); in rtl8211f_handle_interrupt()
342 phy_trigger_machine(phydev); in rtl8211f_handle_interrupt()
347 static int rtl8211_config_aneg(struct phy_device *phydev) in rtl8211_config_aneg() argument
351 ret = genphy_config_aneg(phydev); in rtl8211_config_aneg()
358 if (phydev->speed == SPEED_100 && phydev->autoneg == AUTONEG_DISABLE) { in rtl8211_config_aneg()
359 phy_write(phydev, 0x17, 0x2138); in rtl8211_config_aneg()
360 phy_write(phydev, 0x0e, 0x0260); in rtl8211_config_aneg()
362 phy_write(phydev, 0x17, 0x2108); in rtl8211_config_aneg()
363 phy_write(phydev, 0x0e, 0x0000); in rtl8211_config_aneg()
369 static int rtl8211c_config_init(struct phy_device *phydev) in rtl8211c_config_init() argument
372 return phy_set_bits(phydev, MII_CTRL1000, in rtl8211c_config_init()
376 static int rtl8211f_config_init(struct phy_device *phydev) in rtl8211f_config_init() argument
378 struct rtl821x_priv *priv = phydev->priv; in rtl8211f_config_init()
379 struct device *dev = &phydev->mdio.dev; in rtl8211f_config_init()
383 ret = phy_modify_paged_changed(phydev, 0xa43, RTL8211F_PHYCR1, in rtl8211f_config_init()
392 switch (phydev->interface) { in rtl8211f_config_init()
417 ret = phy_modify_paged_changed(phydev, 0xd08, 0x11, RTL8211F_TX_DELAY, in rtl8211f_config_init()
432 ret = phy_modify_paged_changed(phydev, 0xd08, 0x15, RTL8211F_RX_DELAY, in rtl8211f_config_init()
448 ret = phy_modify_paged(phydev, 0xa43, RTL8211F_PHYCR2, in rtl8211f_config_init()
456 return genphy_soft_reset(phydev); in rtl8211f_config_init()
462 static int rtl821x_suspend(struct phy_device *phydev) in rtl821x_suspend() argument
464 struct rtl821x_priv *priv = phydev->priv; in rtl821x_suspend()
467 if (!phydev->wol_enabled) { in rtl821x_suspend()
468 ret = genphy_suspend(phydev); in rtl821x_suspend()
479 static int rtl821x_resume(struct phy_device *phydev) in rtl821x_resume() argument
481 struct rtl821x_priv *priv = phydev->priv; in rtl821x_resume()
484 if (!phydev->wol_enabled) in rtl821x_resume()
487 ret = genphy_resume(phydev); in rtl821x_resume()
496 static int rtl8211f_led_hw_is_supported(struct phy_device *phydev, u8 index, in rtl8211f_led_hw_is_supported() argument
531 static int rtl8211f_led_hw_control_get(struct phy_device *phydev, u8 index, in rtl8211f_led_hw_control_get() argument
539 val = phy_read_paged(phydev, 0xd04, RTL8211F_LEDCR); in rtl8211f_led_hw_control_get()
563 static int rtl8211f_led_hw_control_set(struct phy_device *phydev, u8 index, in rtl8211f_led_hw_control_set() argument
589 return phy_modify_paged(phydev, 0xd04, RTL8211F_LEDCR, mask, reg); in rtl8211f_led_hw_control_set()
592 static int rtl8211e_config_init(struct phy_device *phydev) in rtl8211e_config_init() argument
598 switch (phydev->interface) { in rtl8211e_config_init()
624 oldpage = phy_select_page(phydev, 0x7); in rtl8211e_config_init()
628 ret = __phy_write(phydev, RTL821x_EXT_PAGE_SELECT, 0xa4); in rtl8211e_config_init()
632 ret = __phy_modify(phydev, 0x1c, RTL8211E_CTRL_DELAY in rtl8211e_config_init()
637 return phy_restore_page(phydev, oldpage, ret); in rtl8211e_config_init()
640 static int rtl8211b_suspend(struct phy_device *phydev) in rtl8211b_suspend() argument
642 phy_write(phydev, MII_MMD_DATA, BIT(9)); in rtl8211b_suspend()
644 return genphy_suspend(phydev); in rtl8211b_suspend()
647 static int rtl8211b_resume(struct phy_device *phydev) in rtl8211b_resume() argument
649 phy_write(phydev, MII_MMD_DATA, 0); in rtl8211b_resume()
651 return genphy_resume(phydev); in rtl8211b_resume()
654 static int rtl8366rb_config_init(struct phy_device *phydev) in rtl8366rb_config_init() argument
658 ret = phy_set_bits(phydev, RTL8366RB_POWER_SAVE, in rtl8366rb_config_init()
661 dev_err(&phydev->mdio.dev, in rtl8366rb_config_init()
669 static void rtlgen_decode_physr(struct phy_device *phydev, int val) in rtlgen_decode_physr() argument
676 phydev->duplex = DUPLEX_FULL; in rtlgen_decode_physr()
678 phydev->duplex = DUPLEX_HALF; in rtlgen_decode_physr()
682 phydev->speed = SPEED_10; in rtlgen_decode_physr()
685 phydev->speed = SPEED_100; in rtlgen_decode_physr()
688 phydev->speed = SPEED_1000; in rtlgen_decode_physr()
691 phydev->speed = SPEED_10000; in rtlgen_decode_physr()
694 phydev->speed = SPEED_2500; in rtlgen_decode_physr()
697 phydev->speed = SPEED_5000; in rtlgen_decode_physr()
707 if (phydev->speed >= 1000) { in rtlgen_decode_physr()
709 phydev->master_slave_state = MASTER_SLAVE_STATE_MASTER; in rtlgen_decode_physr()
711 phydev->master_slave_state = MASTER_SLAVE_STATE_SLAVE; in rtlgen_decode_physr()
713 phydev->master_slave_state = MASTER_SLAVE_STATE_UNSUPPORTED; in rtlgen_decode_physr()
717 static int rtlgen_read_status(struct phy_device *phydev) in rtlgen_read_status() argument
721 ret = genphy_read_status(phydev); in rtlgen_read_status()
725 if (!phydev->link) in rtlgen_read_status()
728 val = phy_read_paged(phydev, 0xa43, 0x12); in rtlgen_read_status()
732 rtlgen_decode_physr(phydev, val); in rtlgen_read_status()
737 static int rtlgen_read_mmd(struct phy_device *phydev, int devnum, u16 regnum) in rtlgen_read_mmd() argument
742 rtl821x_write_page(phydev, regnum >> 4); in rtlgen_read_mmd()
743 ret = __phy_read(phydev, 0x10 + ((regnum & 0xf) >> 1)); in rtlgen_read_mmd()
744 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
746 rtl821x_write_page(phydev, 0xa5c); in rtlgen_read_mmd()
747 ret = __phy_read(phydev, 0x12); in rtlgen_read_mmd()
748 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
750 rtl821x_write_page(phydev, 0xa5d); in rtlgen_read_mmd()
751 ret = __phy_read(phydev, 0x10); in rtlgen_read_mmd()
752 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
754 rtl821x_write_page(phydev, 0xa5d); in rtlgen_read_mmd()
755 ret = __phy_read(phydev, 0x11); in rtlgen_read_mmd()
756 rtl821x_write_page(phydev, 0); in rtlgen_read_mmd()
764 static int rtlgen_write_mmd(struct phy_device *phydev, int devnum, u16 regnum, in rtlgen_write_mmd() argument
770 rtl821x_write_page(phydev, regnum >> 4); in rtlgen_write_mmd()
771 ret = __phy_write(phydev, 0x10 + ((regnum & 0xf) >> 1), val); in rtlgen_write_mmd()
772 rtl821x_write_page(phydev, 0); in rtlgen_write_mmd()
774 rtl821x_write_page(phydev, 0xa5d); in rtlgen_write_mmd()
775 ret = __phy_write(phydev, 0x10, val); in rtlgen_write_mmd()
776 rtl821x_write_page(phydev, 0); in rtlgen_write_mmd()
784 static int rtl822x_read_mmd(struct phy_device *phydev, int devnum, u16 regnum) in rtl822x_read_mmd() argument
786 int ret = rtlgen_read_mmd(phydev, devnum, regnum); in rtl822x_read_mmd()
792 rtl821x_write_page(phydev, 0xa6e); in rtl822x_read_mmd()
793 ret = __phy_read(phydev, 0x16); in rtl822x_read_mmd()
794 rtl821x_write_page(phydev, 0); in rtl822x_read_mmd()
796 rtl821x_write_page(phydev, 0xa6d); in rtl822x_read_mmd()
797 ret = __phy_read(phydev, 0x12); in rtl822x_read_mmd()
798 rtl821x_write_page(phydev, 0); in rtl822x_read_mmd()
800 rtl821x_write_page(phydev, 0xa6d); in rtl822x_read_mmd()
801 ret = __phy_read(phydev, 0x10); in rtl822x_read_mmd()
802 rtl821x_write_page(phydev, 0); in rtl822x_read_mmd()
808 static int rtl822x_write_mmd(struct phy_device *phydev, int devnum, u16 regnum, in rtl822x_write_mmd() argument
811 int ret = rtlgen_write_mmd(phydev, devnum, regnum, val); in rtl822x_write_mmd()
817 rtl821x_write_page(phydev, 0xa6d); in rtl822x_write_mmd()
818 ret = __phy_write(phydev, 0x12, val); in rtl822x_write_mmd()
819 rtl821x_write_page(phydev, 0); in rtl822x_write_mmd()
825 static int rtl822x_probe(struct phy_device *phydev) in rtl822x_probe() argument
828 phydev->phy_id != RTL_GENERIC_PHYID) in rtl822x_probe()
829 return rtl822x_hwmon_init(phydev); in rtl822x_probe()
834 static int rtl822xb_config_init(struct phy_device *phydev) in rtl822xb_config_init() argument
841 phydev->host_interfaces) || in rtl822xb_config_init()
842 phydev->interface == PHY_INTERFACE_MODE_2500BASEX; in rtl822xb_config_init()
845 phydev->host_interfaces) || in rtl822xb_config_init()
846 phydev->interface == PHY_INTERFACE_MODE_SGMII; in rtl822xb_config_init()
849 __assign_bit(PHY_INTERFACE_MODE_2500BASEX, phydev->possible_interfaces, in rtl822xb_config_init()
851 __assign_bit(PHY_INTERFACE_MODE_SGMII, phydev->possible_interfaces, in rtl822xb_config_init()
860 phydev->rate_matching = RATE_MATCH_PAUSE; in rtl822xb_config_init()
863 phydev->rate_matching = RATE_MATCH_NONE; in rtl822xb_config_init()
869 ret = phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x75f3, 0); in rtl822xb_config_init()
873 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_VEND1, in rtl822xb_config_init()
880 ret = phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x6a04, 0x0503); in rtl822xb_config_init()
884 ret = phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x6f10, 0xd455); in rtl822xb_config_init()
888 return phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x6f11, 0x8020); in rtl822xb_config_init()
891 static int rtl822xb_get_rate_matching(struct phy_device *phydev, in rtl822xb_get_rate_matching() argument
900 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, RTL822X_VND1_SERDES_OPTION); in rtl822xb_get_rate_matching()
912 static int rtl822x_get_features(struct phy_device *phydev) in rtl822x_get_features() argument
916 val = phy_read_paged(phydev, 0xa61, 0x13); in rtl822x_get_features()
921 phydev->supported, val & MDIO_PMA_SPEED_2_5G); in rtl822x_get_features()
923 phydev->supported, val & MDIO_PMA_SPEED_5G); in rtl822x_get_features()
925 phydev->supported, val & MDIO_SPEED_10G); in rtl822x_get_features()
927 return genphy_read_abilities(phydev); in rtl822x_get_features()
930 static int rtl822x_config_aneg(struct phy_device *phydev) in rtl822x_config_aneg() argument
934 if (phydev->autoneg == AUTONEG_ENABLE) { in rtl822x_config_aneg()
935 u16 adv = linkmode_adv_to_mii_10gbt_adv_t(phydev->advertising); in rtl822x_config_aneg()
937 ret = phy_modify_paged_changed(phydev, 0xa5d, 0x12, in rtl822x_config_aneg()
945 return __genphy_config_aneg(phydev, ret); in rtl822x_config_aneg()
948 static void rtl822xb_update_interface(struct phy_device *phydev) in rtl822xb_update_interface() argument
952 if (!phydev->link) in rtl822xb_update_interface()
956 val = phy_read_mmd(phydev, MDIO_MMD_VEND1, RTL822X_VND1_SERDES_CTRL3); in rtl822xb_update_interface()
962 phydev->interface = PHY_INTERFACE_MODE_2500BASEX; in rtl822xb_update_interface()
965 phydev->interface = PHY_INTERFACE_MODE_SGMII; in rtl822xb_update_interface()
970 static int rtl822x_read_status(struct phy_device *phydev) in rtl822x_read_status() argument
974 mii_10gbt_stat_mod_linkmode_lpa_t(phydev->lp_advertising, 0); in rtl822x_read_status()
976 ret = rtlgen_read_status(phydev); in rtl822x_read_status()
980 if (phydev->autoneg == AUTONEG_DISABLE || in rtl822x_read_status()
981 !phydev->autoneg_complete) in rtl822x_read_status()
984 lpadv = phy_read_paged(phydev, 0xa5d, 0x13); in rtl822x_read_status()
988 mii_10gbt_stat_mod_linkmode_lpa_t(phydev->lp_advertising, lpadv); in rtl822x_read_status()
993 static int rtl822xb_read_status(struct phy_device *phydev) in rtl822xb_read_status() argument
997 ret = rtl822x_read_status(phydev); in rtl822xb_read_status()
1001 rtl822xb_update_interface(phydev); in rtl822xb_read_status()
1006 static int rtl822x_c45_get_features(struct phy_device *phydev) in rtl822x_c45_get_features() argument
1009 phydev->supported); in rtl822x_c45_get_features()
1011 return genphy_c45_pma_read_abilities(phydev); in rtl822x_c45_get_features()
1014 static int rtl822x_c45_config_aneg(struct phy_device *phydev) in rtl822x_c45_config_aneg() argument
1019 if (phydev->autoneg == AUTONEG_DISABLE) in rtl822x_c45_config_aneg()
1020 return genphy_c45_pma_setup_forced(phydev); in rtl822x_c45_config_aneg()
1022 ret = genphy_c45_an_config_aneg(phydev); in rtl822x_c45_config_aneg()
1028 val = linkmode_adv_to_mii_ctrl1000_t(phydev->advertising); in rtl822x_c45_config_aneg()
1031 ret = phy_modify_mmd_changed(phydev, MDIO_MMD_VEND2, RTL822X_VND2_GBCR, in rtl822x_c45_config_aneg()
1038 return genphy_c45_check_and_restart_aneg(phydev, changed); in rtl822x_c45_config_aneg()
1041 static int rtl822x_c45_read_status(struct phy_device *phydev) in rtl822x_c45_read_status() argument
1046 if (phydev->autoneg == AUTONEG_ENABLE && genphy_c45_aneg_done(phydev)) { in rtl822x_c45_read_status()
1047 val = phy_read_mmd(phydev, MDIO_MMD_VEND2, in rtl822x_c45_read_status()
1054 mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, val); in rtl822x_c45_read_status()
1056 ret = genphy_c45_read_status(phydev); in rtl822x_c45_read_status()
1060 if (!phydev->link) { in rtl822x_c45_read_status()
1061 phydev->master_slave_state = MASTER_SLAVE_STATE_UNKNOWN; in rtl822x_c45_read_status()
1066 val = phy_read_mmd(phydev, MDIO_MMD_VEND2, RTL_VND2_PHYSR); in rtl822x_c45_read_status()
1070 rtlgen_decode_physr(phydev, val); in rtl822x_c45_read_status()
1075 static int rtl822xb_c45_read_status(struct phy_device *phydev) in rtl822xb_c45_read_status() argument
1079 ret = rtl822x_c45_read_status(phydev); in rtl822xb_c45_read_status()
1083 rtl822xb_update_interface(phydev); in rtl822xb_c45_read_status()
1088 static bool rtlgen_supports_2_5gbps(struct phy_device *phydev) in rtlgen_supports_2_5gbps() argument
1092 phy_write(phydev, RTL821x_PAGE_SELECT, 0xa61); in rtlgen_supports_2_5gbps()
1093 val = phy_read(phydev, 0x13); in rtlgen_supports_2_5gbps()
1094 phy_write(phydev, RTL821x_PAGE_SELECT, 0); in rtlgen_supports_2_5gbps()
1102 static bool rtlgen_supports_mmd(struct phy_device *phydev) in rtlgen_supports_mmd() argument
1106 phy_lock_mdio_bus(phydev); in rtlgen_supports_mmd()
1107 __phy_write(phydev, MII_MMD_CTRL, MDIO_MMD_PCS); in rtlgen_supports_mmd()
1108 __phy_write(phydev, MII_MMD_DATA, MDIO_PCS_EEE_ABLE); in rtlgen_supports_mmd()
1109 __phy_write(phydev, MII_MMD_CTRL, MDIO_MMD_PCS | MII_MMD_CTRL_NOINCR); in rtlgen_supports_mmd()
1110 val = __phy_read(phydev, MII_MMD_DATA); in rtlgen_supports_mmd()
1111 phy_unlock_mdio_bus(phydev); in rtlgen_supports_mmd()
1116 static int rtlgen_match_phy_device(struct phy_device *phydev) in rtlgen_match_phy_device() argument
1118 return phydev->phy_id == RTL_GENERIC_PHYID && in rtlgen_match_phy_device()
1119 !rtlgen_supports_2_5gbps(phydev); in rtlgen_match_phy_device()
1122 static int rtl8226_match_phy_device(struct phy_device *phydev) in rtl8226_match_phy_device() argument
1124 return phydev->phy_id == RTL_GENERIC_PHYID && in rtl8226_match_phy_device()
1125 rtlgen_supports_2_5gbps(phydev) && in rtl8226_match_phy_device()
1126 rtlgen_supports_mmd(phydev); in rtl8226_match_phy_device()
1129 static int rtlgen_is_c45_match(struct phy_device *phydev, unsigned int id, in rtlgen_is_c45_match() argument
1132 if (phydev->is_c45) in rtlgen_is_c45_match()
1133 return is_c45 && (id == phydev->c45_ids.device_ids[1]); in rtlgen_is_c45_match()
1135 return !is_c45 && (id == phydev->phy_id); in rtlgen_is_c45_match()
1138 static int rtl8221b_match_phy_device(struct phy_device *phydev) in rtl8221b_match_phy_device() argument
1140 return phydev->phy_id == RTL_8221B && rtlgen_supports_mmd(phydev); in rtl8221b_match_phy_device()
1143 static int rtl8221b_vb_cg_c22_match_phy_device(struct phy_device *phydev) in rtl8221b_vb_cg_c22_match_phy_device() argument
1145 return rtlgen_is_c45_match(phydev, RTL_8221B_VB_CG, false); in rtl8221b_vb_cg_c22_match_phy_device()
1148 static int rtl8221b_vb_cg_c45_match_phy_device(struct phy_device *phydev) in rtl8221b_vb_cg_c45_match_phy_device() argument
1150 return rtlgen_is_c45_match(phydev, RTL_8221B_VB_CG, true); in rtl8221b_vb_cg_c45_match_phy_device()
1153 static int rtl8221b_vn_cg_c22_match_phy_device(struct phy_device *phydev) in rtl8221b_vn_cg_c22_match_phy_device() argument
1155 return rtlgen_is_c45_match(phydev, RTL_8221B_VN_CG, false); in rtl8221b_vn_cg_c22_match_phy_device()
1158 static int rtl8221b_vn_cg_c45_match_phy_device(struct phy_device *phydev) in rtl8221b_vn_cg_c45_match_phy_device() argument
1160 return rtlgen_is_c45_match(phydev, RTL_8221B_VN_CG, true); in rtl8221b_vn_cg_c45_match_phy_device()
1163 static int rtl_internal_nbaset_match_phy_device(struct phy_device *phydev) in rtl_internal_nbaset_match_phy_device() argument
1165 if (phydev->is_c45) in rtl_internal_nbaset_match_phy_device()
1168 switch (phydev->phy_id) { in rtl_internal_nbaset_match_phy_device()
1178 return rtlgen_supports_2_5gbps(phydev) && !rtlgen_supports_mmd(phydev); in rtl_internal_nbaset_match_phy_device()
1181 static int rtl8251b_c45_match_phy_device(struct phy_device *phydev) in rtl8251b_c45_match_phy_device() argument
1183 return rtlgen_is_c45_match(phydev, RTL_8251B, true); in rtl8251b_c45_match_phy_device()
1186 static int rtlgen_resume(struct phy_device *phydev) in rtlgen_resume() argument
1188 int ret = genphy_resume(phydev); in rtlgen_resume()
1196 static int rtlgen_c45_resume(struct phy_device *phydev) in rtlgen_c45_resume() argument
1198 int ret = genphy_c45_pma_resume(phydev); in rtlgen_c45_resume()
1205 static int rtl9000a_config_init(struct phy_device *phydev) in rtl9000a_config_init() argument
1207 phydev->autoneg = AUTONEG_DISABLE; in rtl9000a_config_init()
1208 phydev->speed = SPEED_100; in rtl9000a_config_init()
1209 phydev->duplex = DUPLEX_FULL; in rtl9000a_config_init()
1214 static int rtl9000a_config_aneg(struct phy_device *phydev) in rtl9000a_config_aneg() argument
1219 switch (phydev->master_slave_set) { in rtl9000a_config_aneg()
1229 phydev_warn(phydev, "Unsupported Master/Slave mode\n"); in rtl9000a_config_aneg()
1233 ret = phy_modify_changed(phydev, MII_CTRL1000, CTL1000_AS_MASTER, ctl); in rtl9000a_config_aneg()
1235 ret = genphy_soft_reset(phydev); in rtl9000a_config_aneg()
1240 static int rtl9000a_read_status(struct phy_device *phydev) in rtl9000a_read_status() argument
1244 phydev->master_slave_get = MASTER_SLAVE_CFG_UNKNOWN; in rtl9000a_read_status()
1245 phydev->master_slave_state = MASTER_SLAVE_STATE_UNKNOWN; in rtl9000a_read_status()
1247 ret = genphy_update_link(phydev); in rtl9000a_read_status()
1251 ret = phy_read(phydev, MII_CTRL1000); in rtl9000a_read_status()
1255 phydev->master_slave_get = MASTER_SLAVE_CFG_MASTER_FORCE; in rtl9000a_read_status()
1257 phydev->master_slave_get = MASTER_SLAVE_CFG_SLAVE_FORCE; in rtl9000a_read_status()
1259 ret = phy_read(phydev, MII_STAT1000); in rtl9000a_read_status()
1263 phydev->master_slave_state = MASTER_SLAVE_STATE_MASTER; in rtl9000a_read_status()
1265 phydev->master_slave_state = MASTER_SLAVE_STATE_SLAVE; in rtl9000a_read_status()
1270 static int rtl9000a_ack_interrupt(struct phy_device *phydev) in rtl9000a_ack_interrupt() argument
1274 err = phy_read(phydev, RTL8211F_INSR); in rtl9000a_ack_interrupt()
1279 static int rtl9000a_config_intr(struct phy_device *phydev) in rtl9000a_config_intr() argument
1284 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in rtl9000a_config_intr()
1285 err = rtl9000a_ack_interrupt(phydev); in rtl9000a_config_intr()
1290 err = phy_write_paged(phydev, 0xa42, RTL9000A_GINMR, val); in rtl9000a_config_intr()
1293 err = phy_write_paged(phydev, 0xa42, RTL9000A_GINMR, val); in rtl9000a_config_intr()
1297 err = rtl9000a_ack_interrupt(phydev); in rtl9000a_config_intr()
1300 return phy_write_paged(phydev, 0xa42, RTL9000A_GINMR, val); in rtl9000a_config_intr()
1303 static irqreturn_t rtl9000a_handle_interrupt(struct phy_device *phydev) in rtl9000a_handle_interrupt() argument
1307 irq_status = phy_read(phydev, RTL8211F_INSR); in rtl9000a_handle_interrupt()
1309 phy_error(phydev); in rtl9000a_handle_interrupt()
1316 phy_trigger_machine(phydev); in rtl9000a_handle_interrupt()