summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@armlinux.org.uk>2017-01-07 20:47:36 +0000
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>2021-06-29 15:50:26 +0100
commit4f57705dd9bbc7de263dcac4a818a03f9b198c1a (patch)
tree0864c522cfb6e1c591f18aac1c7674d5d65fea68
parente046c4f24e2fcdaf171bc4bd80c840b706c94b1d (diff)
net: dsa: program 6176 LED registers
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
-rw-r--r--drivers/net/dsa/mv88e6xxx/chip.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 66f8ccc7a5e4..3620b5d17b7e 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -2720,6 +2720,20 @@ static int mv88e6xxx_setup_upstream_port(struct mv88e6xxx_chip *chip, int port)
return 0;
}
+static int mv88e6xxx_setup_led(struct mv88e6xxx_chip *chip, int port)
+{
+ int err;
+
+ /* LED0 = link/activity, LED1 = 10/100 */
+ err = mv88e6xxx_wait_bit(chip, chip->info->port_base_addr + port,
+ MV88E6XXX_PORT_LED_CONTROL, 15, 0);
+ if (err)
+ return err;
+
+ return mv88e6xxx_write(chip, chip->info->port_base_addr + port,
+ MV88E6XXX_PORT_LED_CONTROL, 0x80b3);
+}
+
static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
{
struct dsa_switch *ds = chip->ds;
@@ -2775,6 +2789,12 @@ static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
if (err)
return err;
+ if (chip->info->num_gpio) {
+ err = mv88e6xxx_setup_led(chip, port);
+ if (err)
+ return err;
+ }
+
/* Port Control 2: don't force a good FCS, set the maximum frame size to
* 10240 bytes, disable 802.1q tags checking, don't discard tagged or
* untagged frames on this port, do a destination address lookup on all