rtl8306: do not overwrite registers in the phy fixup, it could mess up other switches...
authorFelix Fietkau <nbd@openwrt.org>
Sat, 2 Apr 2011 16:35:22 +0000 (16:35 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sat, 2 Apr 2011 16:35:22 +0000 (16:35 +0000)
SVN-Revision: 26410

target/linux/generic/files/drivers/net/phy/rtl8306.c

index 4fa910a6f27662c42dede9528f7ba052a9320182..78ded0ace4859c3daa94f08b42d32d2e33e886d4 100644 (file)
@@ -56,6 +56,7 @@ struct rtl_priv {
        int do_cpu;
        struct mii_bus *bus;
        char hwname[sizeof(RTL_NAME_UNKNOWN)];
+       bool fixup;
 };
 
 struct rtl_phyregs {
@@ -256,6 +257,9 @@ rtl_set_page(struct rtl_priv *priv, unsigned int page)
        struct mii_bus *bus = priv->bus;
        u16 pgsel;
 
+       if (priv->fixup)
+               return;
+
        if (priv->page == page)
                return;
 
@@ -923,6 +927,8 @@ rtl8306_fixup(struct phy_device *pdev)
        if (pdev->addr != 0 && pdev->addr != 4)
                return 0;
 
+       memset(&priv, 0, sizeof(priv));
+       priv.fixup = true;
        priv.page = -1;
        priv.bus = pdev->bus;
        chipid = rtl_get(&priv.dev, RTL_REG_CHIPID);