The OF LED configuration patch fails on MT7621, as the necessary headers
were only included for the mediatek subtarget with an additional patch.
Fixes: 242fe8634e ("generic: add hack for MT753x LED configuration")
Signed-off-by: David Bauer <mail@david-bauer.net>
		
	
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From cc225d163b5a4f7a0d1968298bf7927306646a47 Mon Sep 17 00:00:00 2001
 | 
						|
From: David Bauer <mail@david-bauer.net>
 | 
						|
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 <mail@david-bauer.net>
 | 
						|
---
 | 
						|
 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;
 | 
						|
 }
 | 
						|
 
 |