mirror of
https://github.com/torvalds/linux.git
synced 2024-12-12 06:02:38 +00:00
broadcom: Make the 57780 IEEE compliant
This brings the 57780's phy into IEEE compliance by suppressing the common mode oscillation. Signed-off-by: Matt Carlson <mcarlson@broadcom.com> Reviewed-by: Michael Chan <mchan@broadcom.com> Reviewed-by: Benjamin Li <benli@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d7a2ed9248
commit
d9221e6600
@ -19,6 +19,11 @@
|
||||
|
||||
#define PHY_ID_BCM50610 0x0143bd60
|
||||
#define PHY_ID_BCM50610M 0x0143bd70
|
||||
#define PHY_ID_BCM57780 0x03625d90
|
||||
|
||||
#define BRCM_PHY_MODEL(phydev) \
|
||||
((phydev)->drv->phy_id & (phydev)->drv->phy_id_mask)
|
||||
|
||||
|
||||
#define MII_BCM54XX_ECR 0x10 /* BCM54xx extended control register */
|
||||
#define MII_BCM54XX_ECR_IM 0x1000 /* Interrupt mask */
|
||||
@ -118,6 +123,7 @@
|
||||
#define MII_BCM54XX_EXP_EXP08_EARLY_DAC_WAKE 0x0200
|
||||
#define MII_BCM54XX_EXP_EXP75 0x0f75
|
||||
#define MII_BCM54XX_EXP_EXP75_VDACCTRL 0x003c
|
||||
#define MII_BCM54XX_EXP_EXP75_CM_OSC 0x0001
|
||||
#define MII_BCM54XX_EXP_EXP96 0x0f96
|
||||
#define MII_BCM54XX_EXP_EXP96_MYST 0x0010
|
||||
#define MII_BCM54XX_EXP_EXP97 0x0f97
|
||||
@ -194,7 +200,7 @@ static int bcm54xx_shadow_write(struct phy_device *phydev, u16 shadow, u16 val)
|
||||
}
|
||||
|
||||
/* Indirect register access functions for the Expansion Registers */
|
||||
static int bcm54xx_exp_read(struct phy_device *phydev, u8 regnum)
|
||||
static int bcm54xx_exp_read(struct phy_device *phydev, u16 regnum)
|
||||
{
|
||||
int val;
|
||||
|
||||
@ -308,6 +314,33 @@ static int bcm54xx_config_init(struct phy_device *phydev)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM57780) {
|
||||
int err2;
|
||||
|
||||
err = bcm54xx_auxctl_write(phydev,
|
||||
MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL,
|
||||
MII_BCM54XX_AUXCTL_ACTL_SMDSP_ENA |
|
||||
MII_BCM54XX_AUXCTL_ACTL_TX_6DB);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
reg = bcm54xx_exp_read(phydev, MII_BCM54XX_EXP_EXP75);
|
||||
if (reg < 0)
|
||||
goto error;
|
||||
|
||||
reg |= MII_BCM54XX_EXP_EXP75_CM_OSC;
|
||||
err = bcm54xx_exp_write(phydev, MII_BCM54XX_EXP_EXP75, reg);
|
||||
|
||||
error:
|
||||
err2 = bcm54xx_auxctl_write(phydev,
|
||||
MII_BCM54XX_AUXCTL_SHDWSEL_AUXCTL,
|
||||
MII_BCM54XX_AUXCTL_ACTL_TX_6DB);
|
||||
if (err)
|
||||
return err;
|
||||
if (err2)
|
||||
return err2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -694,7 +727,7 @@ static struct phy_driver bcm50610m_driver = {
|
||||
};
|
||||
|
||||
static struct phy_driver bcm57780_driver = {
|
||||
.phy_id = 0x03625d90,
|
||||
.phy_id = PHY_ID_BCM57780,
|
||||
.phy_id_mask = 0xfffffff0,
|
||||
.name = "Broadcom BCM57780",
|
||||
.features = PHY_GBIT_FEATURES |
|
||||
|
Loading…
Reference in New Issue
Block a user