123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- From cc225d163b5a4f7a0d1968298bf7927306646a47 Mon Sep 17 00:00:00 2001
- From: David Bauer <[email protected]>
- Date: Fri, 28 Apr 2023 01:53:01 +0200
- Subject: [PATCH] net: phy: mediatek-ge: add LED configuration interface
- This adds a small hack similar to the one used for ar8xxx switches to
- read a reg:value map for configuring the LED configuration registers.
- This allows OpenWrt to write device-specific LED action as well as blink
- configurations. It is unlikely to be accepted upstream, as upstream
- plans on integrating their own framework for handling these LEDs.
- Signed-off-by: David Bauer <[email protected]>
- ---
- drivers/net/phy/mediatek-ge.c | 33 +++++++++++++++++++++++++++++++++
- 1 file changed, 33 insertions(+)
- --- a/drivers/net/phy/mediatek-ge.c
- +++ b/drivers/net/phy/mediatek-ge.c
- @@ -1,4 +1,5 @@
- // SPDX-License-Identifier: GPL-2.0+
- +#include <linux/of.h>
- #include <linux/bitfield.h>
- #include <linux/module.h>
- #include <linux/phy.h>
- @@ -53,6 +54,36 @@ static int mt7530_phy_config_init(struct
- return 0;
- }
-
- +static int mt7530_led_config_of(struct phy_device *phydev)
- +{
- + struct device_node *np = phydev->mdio.dev.of_node;
- + const __be32 *paddr;
- + int len;
- + int i;
- +
- + paddr = of_get_property(np, "mediatek,led-config", &len);
- + if (!paddr)
- + return 0;
- +
- + if (len < (2 * sizeof(*paddr)))
- + return -EINVAL;
- +
- + len /= sizeof(*paddr);
- +
- + phydev_warn(phydev, "Configure LED registers (num=%d)\n", len);
- + for (i = 0; i < len - 1; i += 2) {
- + u32 reg;
- + u32 val;
- +
- + reg = be32_to_cpup(paddr + i);
- + val = be32_to_cpup(paddr + i + 1);
- +
- + phy_write_mmd(phydev, MDIO_MMD_VEND2, reg, val);
- + }
- +
- + return 0;
- +}
- +
- static int mt7531_phy_config_init(struct phy_device *phydev)
- {
- mtk_gephy_config_init(phydev);
- @@ -65,6 +96,9 @@ static int mt7531_phy_config_init(struct
- phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x13, 0x404);
- phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x14, 0x404);
-
- + /* LED Config*/
- + mt7530_led_config_of(phydev);
- +
- return 0;
- }
-
|