Commit af1fee98 authored by Raju Lakkaraju's avatar Raju Lakkaraju Committed by David S. Miller

net: phy: Add support for Microsemi VSC 8530/40 Fast Ethernet PHY

Signed-off-by: default avatarRaju Lakkaraju <Raju.Lakkaraju@microsemi.com>
Signed-off-by: default avatarAllan W. Nielsen <allan.nielsen@microsemi.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 32ab0a38
...@@ -290,7 +290,7 @@ config MICROCHIP_PHY ...@@ -290,7 +290,7 @@ config MICROCHIP_PHY
config MICROSEMI_PHY config MICROSEMI_PHY
tristate "Microsemi PHYs" tristate "Microsemi PHYs"
---help--- ---help---
Currently supports the VSC8531 and VSC8541 PHYs Currently supports VSC8530, VSC8531, VSC8540 and VSC8541 PHYs
config NATIONAL_PHY config NATIONAL_PHY
tristate "National Semiconductor PHYs" tristate "National Semiconductor PHYs"
......
...@@ -65,7 +65,9 @@ enum rgmii_rx_clock_delay { ...@@ -65,7 +65,9 @@ enum rgmii_rx_clock_delay {
#define SECURE_ON_PASSWD_LEN_4 0x4000 #define SECURE_ON_PASSWD_LEN_4 0x4000
/* Microsemi PHY ID's */ /* Microsemi PHY ID's */
#define PHY_ID_VSC8530 0x00070560
#define PHY_ID_VSC8531 0x00070570 #define PHY_ID_VSC8531 0x00070570
#define PHY_ID_VSC8540 0x00070760
#define PHY_ID_VSC8541 0x00070770 #define PHY_ID_VSC8541 0x00070770
#define MSCC_VDDMAC_1500 1500 #define MSCC_VDDMAC_1500 1500
...@@ -398,6 +400,25 @@ static int vsc85xx_probe(struct phy_device *phydev) ...@@ -398,6 +400,25 @@ static int vsc85xx_probe(struct phy_device *phydev)
/* Microsemi VSC85xx PHYs */ /* Microsemi VSC85xx PHYs */
static struct phy_driver vsc85xx_driver[] = { static struct phy_driver vsc85xx_driver[] = {
{
.phy_id = PHY_ID_VSC8530,
.name = "Microsemi FE VSC8530",
.phy_id_mask = 0xfffffff0,
.features = PHY_BASIC_FEATURES,
.flags = PHY_HAS_INTERRUPT,
.soft_reset = &genphy_soft_reset,
.config_init = &vsc85xx_config_init,
.config_aneg = &genphy_config_aneg,
.aneg_done = &genphy_aneg_done,
.read_status = &genphy_read_status,
.ack_interrupt = &vsc85xx_ack_interrupt,
.config_intr = &vsc85xx_config_intr,
.suspend = &genphy_suspend,
.resume = &genphy_resume,
.probe = &vsc85xx_probe,
.set_wol = &vsc85xx_wol_set,
.get_wol = &vsc85xx_wol_get,
},
{ {
.phy_id = PHY_ID_VSC8531, .phy_id = PHY_ID_VSC8531,
.name = "Microsemi VSC8531", .name = "Microsemi VSC8531",
...@@ -417,6 +438,25 @@ static struct phy_driver vsc85xx_driver[] = { ...@@ -417,6 +438,25 @@ static struct phy_driver vsc85xx_driver[] = {
.set_wol = &vsc85xx_wol_set, .set_wol = &vsc85xx_wol_set,
.get_wol = &vsc85xx_wol_get, .get_wol = &vsc85xx_wol_get,
}, },
{
.phy_id = PHY_ID_VSC8540,
.name = "Microsemi FE VSC8540 SyncE",
.phy_id_mask = 0xfffffff0,
.features = PHY_BASIC_FEATURES,
.flags = PHY_HAS_INTERRUPT,
.soft_reset = &genphy_soft_reset,
.config_init = &vsc85xx_config_init,
.config_aneg = &genphy_config_aneg,
.aneg_done = &genphy_aneg_done,
.read_status = &genphy_read_status,
.ack_interrupt = &vsc85xx_ack_interrupt,
.config_intr = &vsc85xx_config_intr,
.suspend = &genphy_suspend,
.resume = &genphy_resume,
.probe = &vsc85xx_probe,
.set_wol = &vsc85xx_wol_set,
.get_wol = &vsc85xx_wol_get,
},
{ {
.phy_id = PHY_ID_VSC8541, .phy_id = PHY_ID_VSC8541,
.name = "Microsemi VSC8541 SyncE", .name = "Microsemi VSC8541 SyncE",
...@@ -442,7 +482,9 @@ static struct phy_driver vsc85xx_driver[] = { ...@@ -442,7 +482,9 @@ static struct phy_driver vsc85xx_driver[] = {
module_phy_driver(vsc85xx_driver); module_phy_driver(vsc85xx_driver);
static struct mdio_device_id __maybe_unused vsc85xx_tbl[] = { static struct mdio_device_id __maybe_unused vsc85xx_tbl[] = {
{ PHY_ID_VSC8530, 0xfffffff0, },
{ PHY_ID_VSC8531, 0xfffffff0, }, { PHY_ID_VSC8531, 0xfffffff0, },
{ PHY_ID_VSC8540, 0xfffffff0, },
{ PHY_ID_VSC8541, 0xfffffff0, }, { PHY_ID_VSC8541, 0xfffffff0, },
{ } { }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment