Skip to content

Commit 9704fab

Browse files
James Hughespopcornmix
authored andcommitted
net: phy: broadcom: Allow ethernet LED mode to be set via device tree
Add device tree entries and code to allow the specification of the lighting modes for the LED's on the ethernet connector. Signed-off-by: James Hughes <[email protected]> net:phy:2711 Change the default ethernet LED actions This should return default behaviour back to that of previous releases. net: phy: broadcom: Make LEDs 3+4 shadow LEDs 1+2 CM4 uses BCM54210PE, which supports 2 additional LEDs, choosing LED3 for the amber LED because it shows activity by default (LED4 is not connected). However, this makes it uncontrollable by the eth_led<n> dtparams which target LEDs 1+2. Solve the problem by making LEDs 3+4 mirror LEDs 1+2 (which is much simpler than adding baseboard-specific overrides, but comes with a risk of making one of the LEDs redundant). See: raspberrypi#5289 Signed-off-by: Phil Elwell <[email protected]>
1 parent 8d0586f commit 9704fab

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

drivers/net/phy/broadcom.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,9 @@ static int bcm54811_config_init(struct phy_device *phydev)
430430
static int bcm54xx_config_init(struct phy_device *phydev)
431431
{
432432
int reg, err, val;
433+
u32 led_modes[] = {BCM_LED_MULTICOLOR_LINK_ACT,
434+
BCM_LED_MULTICOLOR_LINK};
435+
struct device_node *np = phydev->mdio.dev.of_node;
433436

434437
reg = phy_read(phydev, MII_BCM54XX_ECR);
435438
if (reg < 0)
@@ -488,10 +491,10 @@ static int bcm54xx_config_init(struct phy_device *phydev)
488491

489492
bcm54xx_phydsp_config(phydev);
490493

494+
of_property_read_u32_array(np, "led-modes", led_modes, 2);
495+
491496
/* For non-SFP setups, encode link speed into LED1 and LED3 pair
492497
* (green/amber).
493-
* Also flash these two LEDs on activity. This means configuring
494-
* them for MULTICOLOR and encoding link/activity into them.
495498
* Don't do this for devices on an SFP module, since some of these
496499
* use the LED outputs to control the SFP LOS signal, and changing
497500
* these settings will cause LOS to malfunction.
@@ -500,10 +503,15 @@ static int bcm54xx_config_init(struct phy_device *phydev)
500503
val = BCM54XX_SHD_LEDS1_LED1(BCM_LED_SRC_MULTICOLOR1) |
501504
BCM54XX_SHD_LEDS1_LED3(BCM_LED_SRC_MULTICOLOR1);
502505
bcm_phy_write_shadow(phydev, BCM54XX_SHD_LEDS1, val);
506+
/* BCM54210PE controls two extra LEDs with the next register.
507+
* Make them shadow the first pair of LEDs - useful on CM4 which
508+
* uses LED3 for ETH_LEDY instead of LED1.
509+
*/
510+
bcm_phy_write_shadow(phydev, BCM54XX_SHD_LEDS1 + 1, val);
503511

504512
val = BCM_LED_MULTICOLOR_IN_PHASE |
505-
BCM54XX_SHD_LEDS1_LED1(BCM_LED_MULTICOLOR_LINK_ACT) |
506-
BCM54XX_SHD_LEDS1_LED3(BCM_LED_MULTICOLOR_LINK_ACT);
513+
BCM54XX_SHD_LEDS1_LED1(led_modes[0]) |
514+
BCM54XX_SHD_LEDS1_LED3(led_modes[1]);
507515
bcm_phy_write_exp(phydev, BCM_EXP_MULTICOLOR, val);
508516
}
509517

0 commit comments

Comments
 (0)