rtl8306: do not overwrite registers in the phy fixup, it could mess up other switches...
[openwrt-10.03/.git] / target / linux / generic-2.6 / files / drivers / net / phy / rtl8306.c
index 87c661a77a3b1b3310cb2039e5743723febfcaef..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;
 
@@ -829,7 +833,7 @@ static struct switch_attr rtl_vlan[] = {
        {
                RTL_VLAN_REGATTR(VID),
                .name = "vid",
-               .description = "VLAN ID",
+               .description = "VLAN ID (1-4095)",
                .max = 4095,
        },
 };
@@ -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);