aboutsummaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-04-02 16:35:22 +0000
committerFelix Fietkau <nbd@openwrt.org>2011-04-02 16:35:22 +0000
commitef8917bb798b83223eb804e800421d576621e770 (patch)
treee7771c125963f711b9e9eea6b85631022fd0d5b5 /target
parentd31f5b429d510331a5ef9915e7f9ba76d3c70174 (diff)
downloadupstream-ef8917bb798b83223eb804e800421d576621e770.tar.gz
upstream-ef8917bb798b83223eb804e800421d576621e770.tar.bz2
upstream-ef8917bb798b83223eb804e800421d576621e770.zip
rtl8306: do not overwrite registers in the phy fixup, it could mess up other switches (fixes #8911)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@26410 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target')
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8306.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/rtl8306.c b/target/linux/generic/files/drivers/net/phy/rtl8306.c
index 4fa910a6f2..78ded0ace4 100644
--- a/target/linux/generic/files/drivers/net/phy/rtl8306.c
+++ b/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);