mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-30 02:29:01 +00:00
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>
113 lines
3.8 KiB
Diff
113 lines
3.8 KiB
Diff
From 2d3960e58ef7c83fe1dbf952f056b9e906cb6df8 Mon Sep 17 00:00:00 2001
|
|
From: Andrew Lunn <andrew@lunn.ch>
|
|
Date: Mon, 17 Apr 2023 17:17:29 +0200
|
|
Subject: [PATCH 7/9] net: phy: marvell: Add software control of the LEDs
|
|
|
|
Add a brightness function, so the LEDs can be controlled from
|
|
software using the standard Linux LED infrastructure.
|
|
|
|
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 | 45 ++++++++++++++++++++++++++++++++++-----
|
|
1 file changed, 40 insertions(+), 5 deletions(-)
|
|
|
|
--- a/drivers/net/phy/marvell.c
|
|
+++ b/drivers/net/phy/marvell.c
|
|
@@ -144,11 +144,13 @@
|
|
/* WOL Event Interrupt Enable */
|
|
#define MII_88E1318S_PHY_CSIER_WOL_EIE BIT(7)
|
|
|
|
-/* LED Timer Control Register */
|
|
-#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)
|
|
-#define MII_88E1318S_PHY_LED_TCR_INT_ACTIVE_LOW BIT(11)
|
|
+#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_TCR 0x12
|
|
+#define MII_88E1318S_PHY_LED_TCR_FORCE_INT BIT(15)
|
|
+#define MII_88E1318S_PHY_LED_TCR_INTn_ENABLE BIT(7)
|
|
+#define MII_88E1318S_PHY_LED_TCR_INT_ACTIVE_LOW BIT(11)
|
|
|
|
/* Magic Packet MAC address registers */
|
|
#define MII_88E1318S_PHY_MAGIC_PACKET_WORD2 0x17
|
|
@@ -2793,6 +2795,34 @@ static int marvell_hwmon_probe(struct ph
|
|
}
|
|
#endif
|
|
|
|
+static int m88e1318_led_brightness_set(struct phy_device *phydev,
|
|
+ u8 index, enum led_brightness value)
|
|
+{
|
|
+ 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));
|
|
+ if (value == LED_OFF)
|
|
+ reg |= MII_88E1318S_PHY_LED_FUNC_OFF << (4 * index);
|
|
+ else
|
|
+ reg |= MII_88E1318S_PHY_LED_FUNC_ON << (4 * index);
|
|
+ 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;
|
|
@@ -3041,6 +3071,7 @@ static struct phy_driver marvell_drivers
|
|
.get_sset_count = marvell_get_sset_count,
|
|
.get_strings = marvell_get_strings,
|
|
.get_stats = marvell_get_stats,
|
|
+ .led_brightness_set = m88e1318_led_brightness_set,
|
|
},
|
|
{
|
|
.phy_id = MARVELL_PHY_ID_88E1145,
|
|
@@ -3147,6 +3178,7 @@ static struct phy_driver marvell_drivers
|
|
.cable_test_start = marvell_vct7_cable_test_start,
|
|
.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,
|
|
},
|
|
{
|
|
.phy_id = MARVELL_PHY_ID_88E1540,
|
|
@@ -3173,6 +3205,7 @@ static struct phy_driver marvell_drivers
|
|
.cable_test_start = marvell_vct7_cable_test_start,
|
|
.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,
|
|
},
|
|
{
|
|
.phy_id = MARVELL_PHY_ID_88E1545,
|
|
@@ -3199,6 +3232,7 @@ static struct phy_driver marvell_drivers
|
|
.cable_test_start = marvell_vct7_cable_test_start,
|
|
.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,
|
|
},
|
|
{
|
|
.phy_id = MARVELL_PHY_ID_88E3016,
|
|
@@ -3340,6 +3374,7 @@ static struct phy_driver marvell_drivers
|
|
.get_stats = marvell_get_stats,
|
|
.get_tunable = m88e1540_get_tunable,
|
|
.set_tunable = m88e1540_set_tunable,
|
|
+ .led_brightness_set = m88e1318_led_brightness_set,
|
|
},
|
|
};
|
|
|