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

SVN-Revision: 26410
This commit is contained in:
Felix Fietkau 2011-04-02 16:35:22 +00:00
parent f5eeb3f74d
commit 0508ee0c00

View file

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