Browse Source

rtl8306: do not overwrite registers in the phy fixup, it could mess up other switches (fixes #8911)

SVN-Revision: 26410
Felix Fietkau 15 years ago
parent
commit
0508ee0c00
1 changed files with 6 additions and 0 deletions
  1. 6 0
      target/linux/generic/files/drivers/net/phy/rtl8306.c

+ 6 - 0
target/linux/generic/files/drivers/net/phy/rtl8306.c

@@ -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);