mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 07:03:03 +02:00
net: usb: lan78xx: move LED DT configuration to helper
Extract the LED enable logic based on the "microchip,led-modes" property into a new helper function lan78xx_configure_leds_from_dt(). This simplifies lan78xx_phy_init() and improves modularity. No functional changes intended. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Reviewed-by: Thangaraj Samynathan <thangaraj.s@microchip.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d39f339d26
commit
8ba1f33c55
|
|
@ -2649,6 +2649,49 @@ static int lan78xx_mac_prepare_for_phy(struct lan78xx_net *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* lan78xx_configure_leds_from_dt() - Configure LED enables based on DT
|
||||
* @dev: LAN78xx device
|
||||
* @phydev: PHY device (must be valid)
|
||||
*
|
||||
* Reads "microchip,led-modes" property from the PHY's DT node and enables
|
||||
* the corresponding number of LEDs by writing to HW_CFG.
|
||||
*
|
||||
* This helper preserves the original logic, enabling up to 4 LEDs.
|
||||
* If the property is not present, this function does nothing.
|
||||
*
|
||||
* Return: 0 on success or a negative error code.
|
||||
*/
|
||||
static int lan78xx_configure_leds_from_dt(struct lan78xx_net *dev,
|
||||
struct phy_device *phydev)
|
||||
{
|
||||
struct device_node *np = phydev->mdio.dev.of_node;
|
||||
u32 reg;
|
||||
int len, ret;
|
||||
|
||||
if (!np)
|
||||
return 0;
|
||||
|
||||
len = of_property_count_elems_of_size(np, "microchip,led-modes",
|
||||
sizeof(u32));
|
||||
if (len < 0)
|
||||
return 0;
|
||||
|
||||
ret = lan78xx_read_reg(dev, HW_CFG, ®);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
reg &= ~(HW_CFG_LED0_EN_ | HW_CFG_LED1_EN_ |
|
||||
HW_CFG_LED2_EN_ | HW_CFG_LED3_EN_);
|
||||
|
||||
reg |= (len > 0) * HW_CFG_LED0_EN_ |
|
||||
(len > 1) * HW_CFG_LED1_EN_ |
|
||||
(len > 2) * HW_CFG_LED2_EN_ |
|
||||
(len > 3) * HW_CFG_LED3_EN_;
|
||||
|
||||
return lan78xx_write_reg(dev, HW_CFG, reg);
|
||||
}
|
||||
|
||||
static int lan78xx_phy_init(struct lan78xx_net *dev)
|
||||
{
|
||||
__ETHTOOL_DECLARE_LINK_MODE_MASK(fc) = { 0, };
|
||||
|
|
@ -2704,32 +2747,9 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
|
|||
|
||||
phy_support_eee(phydev);
|
||||
|
||||
if (phydev->mdio.dev.of_node) {
|
||||
u32 reg;
|
||||
int len;
|
||||
|
||||
len = of_property_count_elems_of_size(phydev->mdio.dev.of_node,
|
||||
"microchip,led-modes",
|
||||
sizeof(u32));
|
||||
if (len >= 0) {
|
||||
/* Ensure the appropriate LEDs are enabled */
|
||||
ret = lan78xx_read_reg(dev, HW_CFG, ®);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
reg &= ~(HW_CFG_LED0_EN_ |
|
||||
HW_CFG_LED1_EN_ |
|
||||
HW_CFG_LED2_EN_ |
|
||||
HW_CFG_LED3_EN_);
|
||||
reg |= (len > 0) * HW_CFG_LED0_EN_ |
|
||||
(len > 1) * HW_CFG_LED1_EN_ |
|
||||
(len > 2) * HW_CFG_LED2_EN_ |
|
||||
(len > 3) * HW_CFG_LED3_EN_;
|
||||
ret = lan78xx_write_reg(dev, HW_CFG, reg);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
ret = lan78xx_configure_leds_from_dt(dev, phydev);
|
||||
if (ret)
|
||||
goto free_phy;
|
||||
|
||||
genphy_config_aneg(phydev);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user