The node of led need add new property: rules,
and rules can be set as:
BIT(TRIGGER_NETDEV_LINK) | BIT(TRIGGER_NETDEV_RX)
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
---
drivers/net/phy/phy_device.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index c5ce057f88ff..65bd0bf11e78 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -3208,6 +3208,26 @@ static void phy_leds_unregister(struct phy_device *phydev)
}
}
+static int fwnode_phy_led_set_rules(struct phy_device *phydev,
+ struct fwnode_handle *led, u32 index)
+{
+ u32 rules;
+ int err;
+
+ if (!fwnode_property_present(led, "rules"))
+ return 0;
+
+ err = fwnode_property_read_u32(led, "rules", &rules);
+ if (err)
+ return err;
+
+ err = phydev->drv->led_hw_is_supported(phydev, index, rules);
+ if (err)
+ return err;
+
+ return phydev->drv->led_hw_control_set(phydev, index, rules);
+}
+
static int fwnode_phy_led(struct phy_device *phydev,
struct fwnode_handle *led)
{
@@ -3253,6 +3273,11 @@ static int fwnode_phy_led(struct phy_device *phydev,
return err;
}
+ err = fwnode_phy_led_set_rules(phydev, led, index);
+ if (err)
+ phydev_warn(phydev, "failed to set rules for led%u, err = %d\n",
+ index, err);
+
phyled->index = index;
if (phydev->drv->led_brightness_set)
cdev->brightness_set_blocking = phy_led_set_brightness;
--
2.33.0