mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 05:48:40 +00:00
phylib: Modify Vitesse RGMII skew settings
The Vitesse driver was using the RGMII_ID interface type to determine if skew was necessary. However, we want to move away from using that interface type, as it's really a property of the board's PHY connection. However, some boards depend on it, so we want to support it, while allowing new boards to use the more flexible "fixups" approach. To do this, we extract the code which adds skew into its own function, and call that function when RGMII_ID has been selected. Another side-effect of this change is that if your PHY has skew set already, it doesn't clear it. This way, the fixup code can modify the register without config_init then clearing it. Signed-off-by: Andy Fleming <afleming@freescale.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3d153a7c8b
commit
fddf86fc46
1 changed files with 24 additions and 14 deletions
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Author: Kriston Carson
|
||||
*
|
||||
* Copyright (c) 2005 Freescale Semiconductor, Inc.
|
||||
* Copyright (c) 2005, 2009 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
|
@ -61,9 +61,30 @@ MODULE_DESCRIPTION("Vitesse PHY driver");
|
|||
MODULE_AUTHOR("Kriston Carson");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
int vsc824x_add_skew(struct phy_device *phydev)
|
||||
{
|
||||
int err;
|
||||
int extcon;
|
||||
|
||||
extcon = phy_read(phydev, MII_VSC8244_EXT_CON1);
|
||||
|
||||
if (extcon < 0)
|
||||
return extcon;
|
||||
|
||||
extcon &= ~(MII_VSC8244_EXTCON1_TX_SKEW_MASK |
|
||||
MII_VSC8244_EXTCON1_RX_SKEW_MASK);
|
||||
|
||||
extcon |= (MII_VSC8244_EXTCON1_TX_SKEW |
|
||||
MII_VSC8244_EXTCON1_RX_SKEW);
|
||||
|
||||
err = phy_write(phydev, MII_VSC8244_EXT_CON1, extcon);
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(vsc824x_add_skew);
|
||||
|
||||
static int vsc824x_config_init(struct phy_device *phydev)
|
||||
{
|
||||
int extcon;
|
||||
int err;
|
||||
|
||||
err = phy_write(phydev, MII_VSC8244_AUX_CONSTAT,
|
||||
|
@ -71,19 +92,8 @@ static int vsc824x_config_init(struct phy_device *phydev)
|
|||
if (err < 0)
|
||||
return err;
|
||||
|
||||
extcon = phy_read(phydev, MII_VSC8244_EXT_CON1);
|
||||
|
||||
if (extcon < 0)
|
||||
return err;
|
||||
|
||||
extcon &= ~(MII_VSC8244_EXTCON1_TX_SKEW_MASK |
|
||||
MII_VSC8244_EXTCON1_RX_SKEW_MASK);
|
||||
|
||||
if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)
|
||||
extcon |= (MII_VSC8244_EXTCON1_TX_SKEW |
|
||||
MII_VSC8244_EXTCON1_RX_SKEW);
|
||||
|
||||
err = phy_write(phydev, MII_VSC8244_EXT_CON1, extcon);
|
||||
err = vsc824x_add_skew(phydev);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue