Skip to content

Commit

Permalink
net: add micrel KSZ8873MLL switch support
Browse files Browse the repository at this point in the history
this will allow to detect the link between the switch and the soc

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: netdev@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jean-Christophe PLAGNIOL-VILLARD authored and David S. Miller committed Nov 23, 2012
1 parent 0b545a6 commit 93272e0
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
44 changes: 44 additions & 0 deletions drivers/net/phy/micrel.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,39 @@ static int ks8051_config_init(struct phy_device *phydev)
return 0;
}

#define KSZ8873MLL_GLOBAL_CONTROL_4 0x06
#define KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX (1 << 6)
#define KSZ8873MLL_GLOBAL_CONTROL_4_SPEED (1 << 4)
int ksz8873mll_read_status(struct phy_device *phydev)
{
int regval;

/* dummy read */
regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);

regval = phy_read(phydev, KSZ8873MLL_GLOBAL_CONTROL_4);

if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_DUPLEX)
phydev->duplex = DUPLEX_HALF;
else
phydev->duplex = DUPLEX_FULL;

if (regval & KSZ8873MLL_GLOBAL_CONTROL_4_SPEED)
phydev->speed = SPEED_10;
else
phydev->speed = SPEED_100;

phydev->link = 1;
phydev->pause = phydev->asym_pause = 0;

return 0;
}

static int ksz8873mll_config_aneg(struct phy_device *phydev)
{
return 0;
}

static struct phy_driver ksphy_driver[] = {
{
.phy_id = PHY_ID_KS8737,
Expand Down Expand Up @@ -204,6 +237,16 @@ static struct phy_driver ksphy_driver[] = {
.ack_interrupt = kszphy_ack_interrupt,
.config_intr = ksz9021_config_intr,
.driver = { .owner = THIS_MODULE, },
}, {
.phy_id = PHY_ID_KSZ8873MLL,
.phy_id_mask = 0x00fffff0,
.name = "Micrel KSZ8873MLL Switch",
.features = (SUPPORTED_Pause | SUPPORTED_Asym_Pause),
.flags = PHY_HAS_MAGICANEG,
.config_init = kszphy_config_init,
.config_aneg = ksz8873mll_config_aneg,
.read_status = ksz8873mll_read_status,
.driver = { .owner = THIS_MODULE, },
} };

static int __init ksphy_init(void)
Expand Down Expand Up @@ -232,6 +275,7 @@ static struct mdio_device_id __maybe_unused micrel_tbl[] = {
{ PHY_ID_KSZ8021, 0x00ffffff },
{ PHY_ID_KSZ8041, 0x00fffff0 },
{ PHY_ID_KSZ8051, 0x00fffff0 },
{ PHY_ID_KSZ8873MLL, 0x00fffff0 },
{ }
};

Expand Down
1 change: 1 addition & 0 deletions include/linux/micrel_phy.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

#define MICREL_PHY_ID_MASK 0x00fffff0

#define PHY_ID_KSZ8873MLL 0x000e7237
#define PHY_ID_KSZ9021 0x00221610
#define PHY_ID_KS8737 0x00221720
#define PHY_ID_KSZ8021 0x00221555
Expand Down

0 comments on commit 93272e0

Please sign in to comment.