[openwrt/openwrt] realtek: rtl83xx-phy: fix RTL8214FC media change

LEDE Commits lede-commits at lists.infradead.org
Thu Jul 28 05:11:31 PDT 2022


dangole pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/bac50e39a7b4f109bb5efed0738c9a896a1c140e

commit bac50e39a7b4f109bb5efed0738c9a896a1c140e
Author: Jan Hoffmann <jan at 3e8.eu>
AuthorDate: Sat Jul 23 22:53:13 2022 +0200

    realtek: rtl83xx-phy: fix RTL8214FC media change
    
    Toggle power on the individual PHY instead of the package. Otherwise
    a media change always toggles power on the first port, and not the one
    that is being configured.
    
    Signed-off-by: Jan Hoffmann <jan at 3e8.eu>
---
 .../files-5.10/drivers/net/phy/rtl83xx-phy.c       | 32 +++++++++++-----------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/target/linux/realtek/files-5.10/drivers/net/phy/rtl83xx-phy.c b/target/linux/realtek/files-5.10/drivers/net/phy/rtl83xx-phy.c
index f0c30b3655..2523894891 100644
--- a/target/linux/realtek/files-5.10/drivers/net/phy/rtl83xx-phy.c
+++ b/target/linux/realtek/files-5.10/drivers/net/phy/rtl83xx-phy.c
@@ -949,19 +949,20 @@ static void rtl8380_rtl8214fc_media_set(struct phy_device *phydev, bool set_fibr
 	pr_info("Current media %x\n", media);
 	if (media & 0x2) {
 		pr_info("Powering off COPPER\n");
-		phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
+		phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
 		/* Ensure power is off */
-		power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
+		power = phy_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
 		if (!(power & (1 << 11)))
-			phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
+			phy_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
 	} else {
-		pr_info("Powering off FIBRE");
-		phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
+		pr_info("Powering off FIBRE\n");
+		phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
 		/* Ensure power is off */
-		power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
+		power = phy_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
 		if (!(power & (1 << 11)))
-			phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
+			phy_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
 	}
+	phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
 
 	if (set_fibre) {
 		val |= 1 << 10;
@@ -975,22 +976,21 @@ static void rtl8380_rtl8214fc_media_set(struct phy_device *phydev, bool set_fibr
 	phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
 
 	if (set_fibre) {
-		pr_info("Powering on FIBRE");
-		phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
+		pr_info("Powering on FIBRE\n");
+		phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
 		/* Ensure power is off */
-		power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
+		power = phy_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
 		if (power & (1 << 11))
-			phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
+			phy_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
 	} else {
 		pr_info("Powering on COPPER\n");
-		phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
+		phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
 		/* Ensure power is off */
-		power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
+		power = phy_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
 		if (power & (1 << 11))
-			phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
+			phy_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
 	}
-
-	phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
+	phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
 }
 
 static bool rtl8380_rtl8214fc_media_is_fibre(struct phy_device *phydev)




More information about the lede-commits mailing list