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 --- 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