forked from Openwrt/openwrt
0a4b309f41
Backport initial LEDs hw control support. Currently this is limited to only rx/tx and link events for the netdev trigger but the API got accepted and the additional modes are working on and will be backported later. Refresh every patch and add the additional config flag for QCA8K new LEDs support. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
105 lines
3.4 KiB
Diff
105 lines
3.4 KiB
Diff
From ea9e86485decb2ac1750005bd96c166c9b780406 Mon Sep 17 00:00:00 2001
|
|
From: Andrew Lunn <andrew@lunn.ch>
|
|
Date: Mon, 17 Apr 2023 17:17:31 +0200
|
|
Subject: [PATCH 9/9] net: phy: marvell: Implement led_blink_set()
|
|
|
|
The Marvell PHY can blink the LEDs, simple on/off. All LEDs blink at
|
|
the same rate, and the reset default is 84ms per blink, which is
|
|
around 12Hz.
|
|
|
|
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
|
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/phy/marvell.c | 36 ++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 36 insertions(+)
|
|
|
|
--- a/drivers/net/phy/marvell.c
|
|
+++ b/drivers/net/phy/marvell.c
|
|
@@ -147,6 +147,8 @@
|
|
#define MII_88E1318S_PHY_LED_FUNC 0x10
|
|
#define MII_88E1318S_PHY_LED_FUNC_OFF (0x8)
|
|
#define MII_88E1318S_PHY_LED_FUNC_ON (0x9)
|
|
+#define MII_88E1318S_PHY_LED_FUNC_HI_Z (0xa)
|
|
+#define MII_88E1318S_PHY_LED_FUNC_BLINK (0xb)
|
|
#define MII_88E1318S_PHY_LED_TCR 0x12
|
|
#define MII_88E1318S_PHY_LED_TCR_FORCE_INT BIT(15)
|
|
#define MII_88E1318S_PHY_LED_TCR_INTn_ENABLE BIT(7)
|
|
@@ -2862,6 +2864,35 @@ static int m88e1318_led_brightness_set(s
|
|
MII_88E1318S_PHY_LED_FUNC, reg);
|
|
}
|
|
|
|
+static int m88e1318_led_blink_set(struct phy_device *phydev, u8 index,
|
|
+ unsigned long *delay_on,
|
|
+ unsigned long *delay_off)
|
|
+{
|
|
+ int reg;
|
|
+
|
|
+ reg = phy_read_paged(phydev, MII_MARVELL_LED_PAGE,
|
|
+ MII_88E1318S_PHY_LED_FUNC);
|
|
+ if (reg < 0)
|
|
+ return reg;
|
|
+
|
|
+ switch (index) {
|
|
+ case 0:
|
|
+ case 1:
|
|
+ case 2:
|
|
+ reg &= ~(0xf << (4 * index));
|
|
+ reg |= MII_88E1318S_PHY_LED_FUNC_BLINK << (4 * index);
|
|
+ /* Reset default is 84ms */
|
|
+ *delay_on = 84 / 2;
|
|
+ *delay_off = 84 / 2;
|
|
+ break;
|
|
+ default:
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ return phy_write_paged(phydev, MII_MARVELL_LED_PAGE,
|
|
+ MII_88E1318S_PHY_LED_FUNC, reg);
|
|
+}
|
|
+
|
|
static int marvell_probe(struct phy_device *phydev)
|
|
{
|
|
struct marvell_priv *priv;
|
|
@@ -3112,6 +3143,7 @@ static struct phy_driver marvell_drivers
|
|
.get_strings = marvell_get_strings,
|
|
.get_stats = marvell_get_stats,
|
|
.led_brightness_set = m88e1318_led_brightness_set,
|
|
+ .led_blink_set = m88e1318_led_blink_set,
|
|
},
|
|
{
|
|
.phy_id = MARVELL_PHY_ID_88E1145,
|
|
@@ -3219,6 +3251,7 @@ static struct phy_driver marvell_drivers
|
|
.cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
|
|
.cable_test_get_status = marvell_vct7_cable_test_get_status,
|
|
.led_brightness_set = m88e1318_led_brightness_set,
|
|
+ .led_blink_set = m88e1318_led_blink_set,
|
|
},
|
|
{
|
|
.phy_id = MARVELL_PHY_ID_88E1540,
|
|
@@ -3246,6 +3279,7 @@ static struct phy_driver marvell_drivers
|
|
.cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
|
|
.cable_test_get_status = marvell_vct7_cable_test_get_status,
|
|
.led_brightness_set = m88e1318_led_brightness_set,
|
|
+ .led_blink_set = m88e1318_led_blink_set,
|
|
},
|
|
{
|
|
.phy_id = MARVELL_PHY_ID_88E1545,
|
|
@@ -3273,6 +3307,7 @@ static struct phy_driver marvell_drivers
|
|
.cable_test_tdr_start = marvell_vct5_cable_test_tdr_start,
|
|
.cable_test_get_status = marvell_vct7_cable_test_get_status,
|
|
.led_brightness_set = m88e1318_led_brightness_set,
|
|
+ .led_blink_set = m88e1318_led_blink_set,
|
|
},
|
|
{
|
|
.phy_id = MARVELL_PHY_ID_88E3016,
|
|
@@ -3415,6 +3450,7 @@ static struct phy_driver marvell_drivers
|
|
.get_tunable = m88e1540_get_tunable,
|
|
.set_tunable = m88e1540_set_tunable,
|
|
.led_brightness_set = m88e1318_led_brightness_set,
|
|
+ .led_blink_set = m88e1318_led_blink_set,
|
|
},
|
|
};
|
|
|