summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Firago <alexey_firago@mentor.com>2016-05-26 13:28:44 (GMT)
committerJoe Hershberger <joe.hershberger@ni.com>2016-06-21 22:01:52 (GMT)
commit79887749f802af5c30ef019bd13f299f79a1530a (patch)
treecd812e195cea6b9db65e0653defd5ecdd3a3ea7a
parentdad7b74045929ff10d93ec1dd60d0fd36fd9a527 (diff)
downloadu-boot-79887749f802af5c30ef019bd13f299f79a1530a.tar.xz
net: phy: micrel: add support for KSZ886x switches in MIIM mode
This patch adds a phy driver for the Micrel KSZ886x switches. Similarly to the KSZ8895, SoC MAC is directly connected to the switch MAC on the switch CPU port, so the link to the switch is always up. KSZ886x switches can be used in the following configuration modes: - Unmanaged mode with config stored in external EEPROM - Managed mode over SPI - Managed mode over I2C - Managed mode over mdio/mdc (aka MIIM or SMI) This patch supports only unmanaged and MIIM modes. Based on Micrel KSZ886x driver from Linux kernel and Micrel KSZ8895 driver from U-Boot. Verified with the KSZ8863MLL. Signed-off-by: Alexey Firago <alexey_firago@mentor.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
-rw-r--r--drivers/net/phy/micrel.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index b08788a..6b313a9 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -487,6 +487,31 @@ static struct phy_driver ksz9031_driver = {
.readext = &ksz9031_phy_extread,
};
+int ksz886x_config(struct phy_device *phydev)
+{
+ /* we are connected directly to the switch without
+ * dedicated PHY. */
+ phydev->link = 1;
+ phydev->duplex = DUPLEX_FULL;
+ phydev->speed = SPEED_100;
+ return 0;
+}
+
+static int ksz886x_startup(struct phy_device *phydev)
+{
+ return 0;
+}
+
+static struct phy_driver ksz886x_driver = {
+ .name = "Micrel KSZ886x Switch",
+ .uid = 0x00221430,
+ .mask = 0xfffff0,
+ .features = PHY_BASIC_FEATURES,
+ .config = &ksz886x_config,
+ .startup = &ksz886x_startup,
+ .shutdown = &genphy_shutdown,
+};
+
int phy_micrel_init(void)
{
phy_register(&KSZ804_driver);
@@ -500,5 +525,6 @@ int phy_micrel_init(void)
#endif
phy_register(&ksz9031_driver);
phy_register(&ksz8895_driver);
+ phy_register(&ksz886x_driver);
return 0;
}