lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250120090256.54382-1-marex@denx.de>
Date: Mon, 20 Jan 2025 10:02:46 +0100
From: Marek Vasut <marex@...x.de>
To: linux-leds@...r.kernel.org
Cc: Marek Vasut <marex@...x.de>,
	"David S. Miller" <davem@...emloft.net>,
	Andrew Lunn <andrew@...n.ch>,
	Eric Dumazet <edumazet@...gle.com>,
	Heiner Kallweit <hkallweit1@...il.com>,
	Jakub Kicinski <kuba@...nel.org>,
	Paolo Abeni <pabeni@...hat.com>,
	Russell King <linux@...linux.org.uk>,
	netdev@...r.kernel.org
Subject: [PATCH v2] net: phy: Handle both led@0 and led subnode name for single-LED PHYs

In case a PHY supports only one LED in total, like ADIN1300, and this LED
is described in DT, it is currently necessary to include unit address in
the LED node name and the address-cells have to be set to 1:

leds {
  #address-cells = <1>;
  ...
  led@0 {
    reg = <0>;
    ...
  };
};

For a single LED PHY, this should not be necessary and plain 'led' node
without unit should be acceptable as well:

leds {
  ...
  led {
    ...
  };
};

Handle this special case. In case reg property is not present in the leds
node subnode, test whether the leds node contains exactly one subnode, and
if so, assume this is the one single LED with reg property set to 0.

Signed-off-by: Marek Vasut <marex@...x.de>
---
Cc: "David S. Miller" <davem@...emloft.net>
Cc: Andrew Lunn <andrew@...n.ch>
Cc: Eric Dumazet <edumazet@...gle.com>
Cc: Heiner Kallweit <hkallweit1@...il.com>
Cc: Jakub Kicinski <kuba@...nel.org>
Cc: Paolo Abeni <pabeni@...hat.com>
Cc: Russell King <linux@...linux.org.uk>
Cc: netdev@...r.kernel.org
---
V2: Fix up variable rename
---
 drivers/net/phy/phy_device.c | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 5b34d39d1d52a..e36e65e672e79 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -3346,6 +3346,7 @@ static int of_phy_led(struct phy_device *phydev,
 	struct led_classdev *cdev;
 	unsigned long modes = 0;
 	struct phy_led *phyled;
+	int led_count;
 	u32 index;
 	int err;
 
@@ -3357,8 +3358,18 @@ static int of_phy_led(struct phy_device *phydev,
 	phyled->phydev = phydev;
 
 	err = of_property_read_u32(led, "reg", &index);
-	if (err)
-		return err;
+	if (err) {
+		led_count = of_get_available_child_count(of_get_parent(led));
+
+		/*
+		 * If there is one PHY LED in total, accept 'led' subnode
+		 * in addition to 'led@0' subnode, and assume reg = <0>;
+		 */
+		if (led_count != 1)
+			return err;
+		index = 0;
+		err = 0;
+	}
 	if (index > U8_MAX)
 		return -EINVAL;
 
-- 
2.45.2


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ