The default m88e1510 LED configuration is 0x1177, used LED[0]
for 1000M link, LED[1] for 100M link, and LED[2] for active.
But for our boards, we want to use 0x1040, which use LED[0] for
link, and LED[1] for active.

This patch adds a new m88e1510 LED configuration for it.

Signed-off-by: Jian Shen <shenjia...@huawei.com>
---
 drivers/net/phy/marvell.c   | 22 +++++++++++++++++++++-
 include/linux/marvell_phy.h |  1 +
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index 3ccba37..c195286 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -128,6 +128,10 @@
 #define MII_PHY_LED_CTRL               16
 #define MII_88E1121_PHY_LED_DEF                0x0030
 #define MII_88E1510_PHY_LED_DEF                0x1177
+#define MII_88E1510_PHY_HNS3_LED_DEF   0x1040
+
+#define MII_88E1510_PHY_LED_POLARITY_CTRL      0x11
+#define MII_88E1510_PHY_HNS3_LED_POLARITY      0x4415
 
 #define MII_M1011_PHY_STATUS           0x11
 #define MII_M1011_PHY_STATUS_1000      0x8000
@@ -619,12 +623,19 @@ static void marvell_config_led(struct phy_device *phydev)
                def_config = MII_88E1121_PHY_LED_DEF;
                break;
        /* Default PHY LED config:
+        * For hns3:
+        * LED[0] .. Link
+        * LED[1] .. Activity
+        * For others:
         * LED[0] .. 1000Mbps Link
         * LED[1] .. 100Mbps Link
         * LED[2] .. Blink, Activity
         */
        case MARVELL_PHY_FAMILY_ID(MARVELL_PHY_ID_88E1510):
-               def_config = MII_88E1510_PHY_LED_DEF;
+               if (phydev->dev_flags & MARVELL_PHY_M1510_HNS3_LEDS)
+                       def_config = MII_88E1510_PHY_HNS3_LED_DEF;
+               else
+                       def_config = MII_88E1510_PHY_LED_DEF;
                break;
        default:
                return;
@@ -634,6 +645,15 @@ static void marvell_config_led(struct phy_device *phydev)
                              def_config);
        if (err < 0)
                phydev_warn(phydev, "Fail to config marvell phy LED.\n");
+
+       if (phydev->dev_flags & MARVELL_PHY_M1510_HNS3_LEDS) {
+               err = phy_write_paged(phydev, MII_MARVELL_LED_PAGE,
+                                     MII_88E1510_PHY_LED_POLARITY_CTRL,
+                                     MII_88E1510_PHY_HNS3_LED_POLARITY);
+               if (err < 0)
+                       phydev_warn(phydev,
+                                   "Fail to config marvell phy LED 
polarity.\n");
+       }
 }
 
 static int marvell_config_init(struct phy_device *phydev)
diff --git a/include/linux/marvell_phy.h b/include/linux/marvell_phy.h
index 1eb6f24..99e0bbb 100644
--- a/include/linux/marvell_phy.h
+++ b/include/linux/marvell_phy.h
@@ -32,5 +32,6 @@
 /* struct phy_device dev_flags definitions */
 #define MARVELL_PHY_M1145_FLAGS_RESISTANCE     0x00000001
 #define MARVELL_PHY_M1118_DNS323_LEDS          0x00000002
+#define MARVELL_PHY_M1510_HNS3_LEDS            0x00000004
 
 #endif /* _MARVELL_PHY_H */
-- 
1.9.1

Reply via email to