mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
net: dsa: mv88e6xxx: Support LED control
This adds control over the hardware LEDs in the Marvell
MV88E6xxx DSA switch and enables it for MV88E6352.
This fixes an imminent problem on the Inteno XG6846 which
has a WAN LED that simply do not work with hardware
defaults: driver amendment is necessary.
The patch is modeled after Christian Marangis LED support
code for the QCA8k DSA switch, I got help with the register
definitions from Tim Harvey.
After this patch it is possible to activate hardware link
indication like this (or with a similar script):
cd /sys/class/leds/Marvell\ 88E6352:05:00:green:wan/
echo netdev > trigger
echo 1 > link
This makes the green link indicator come up on any link
speed. It is also possible to be more elaborate, like this:
cd /sys/class/leds/Marvell\ 88E6352:05:00:green:wan/
echo netdev > trigger
echo 1 > link_1000
cd /sys/class/leds/Marvell\ 88E6352:05:01:amber:wan/
echo netdev > trigger
echo 1 > link_100
Making the green LED come on for a gigabit link and the
amber LED come on for a 100 mbit link.
Each port has 2 LED slots (the hardware may use just one or
none) and the hardware triggers are specified in four bits per
LED, and some of the hardware triggers are only available on the
SFP (fiber) uplink. The restrictions are described in the
port.h header file where the registers are described. For
example, selector 1 set for LED 1 on port 5 or 6 will indicate
Fiber 1000 (gigabit) and activity with a blinking LED, but
ONLY for an SFP connection. If port 5/6 is used with something
not SFP, this selector is a noop: something else need to be
selected.
After the previous series rewriting the MV88E6xxx DT
bindings to use YAML a "leds" subnode is already valid
for each port, in my scratch device tree it looks like
this:
leds {
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
default-state = "off";
linux,default-trigger = "netdev";
};
led@1 {
reg = <1>;
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_LAN;
default-state = "off";
};
};
This DT config is not yet configuring everything: when the netdev
default trigger is assigned the hw acceleration callbacks are
not called, and there is no way to set the netdev sub-trigger
type (such as link_1000) from the device tree, such as if you want
a gigabit link indicator. This has to be done from userspace at
this point.
We add LED operations to all switches in the 6352 family:
6172, 6176, 6240 and 6352.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20241001-mv88e6xxx-leds-v4-1-cc11c4f49b18@linaro.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
c86ab60b92
commit
94a2a84f5e
@@ -17,3 +17,13 @@ config NET_DSA_MV88E6XXX_PTP
|
||||
help
|
||||
Say Y to enable PTP hardware timestamping on Marvell 88E6xxx switch
|
||||
chips that support it.
|
||||
|
||||
config NET_DSA_MV88E6XXX_LEDS
|
||||
bool "LED support for Marvell 88E6xxx"
|
||||
default y
|
||||
depends on NET_DSA_MV88E6XXX
|
||||
depends on LEDS_CLASS=y || LEDS_CLASS=NET_DSA_MV88E6XXX
|
||||
depends on LEDS_TRIGGERS
|
||||
help
|
||||
This enabled support for controlling the LEDs attached to the
|
||||
Marvell 88E6xxx switch chips.
|
||||
|
||||
@@ -9,6 +9,7 @@ mv88e6xxx-objs += global2.o
|
||||
mv88e6xxx-objs += global2_avb.o
|
||||
mv88e6xxx-objs += global2_scratch.o
|
||||
mv88e6xxx-$(CONFIG_NET_DSA_MV88E6XXX_PTP) += hwtstamp.o
|
||||
mv88e6xxx-$(CONFIG_NET_DSA_MV88E6XXX_LEDS) += leds.o
|
||||
mv88e6xxx-objs += pcs-6185.o
|
||||
mv88e6xxx-objs += pcs-6352.o
|
||||
mv88e6xxx-objs += pcs-639x.o
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_mdio.h>
|
||||
#include <linux/platform_data/mv88e6xxx.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/phylink.h>
|
||||
@@ -3371,14 +3372,43 @@ static int mv88e6xxx_setup_upstream_port(struct mv88e6xxx_chip *chip, int port)
|
||||
static int mv88e6xxx_setup_port(struct mv88e6xxx_chip *chip, int port)
|
||||
{
|
||||
struct device_node *phy_handle = NULL;
|
||||
struct fwnode_handle *ports_fwnode;
|
||||
struct fwnode_handle *port_fwnode;
|
||||
struct dsa_switch *ds = chip->ds;
|
||||
struct mv88e6xxx_port *p;
|
||||
struct dsa_port *dp;
|
||||
int tx_amp;
|
||||
int err;
|
||||
u16 reg;
|
||||
u32 val;
|
||||
|
||||
chip->ports[port].chip = chip;
|
||||
chip->ports[port].port = port;
|
||||
p = &chip->ports[port];
|
||||
p->chip = chip;
|
||||
p->port = port;
|
||||
|
||||
/* Look up corresponding fwnode if any */
|
||||
ports_fwnode = device_get_named_child_node(chip->dev, "ethernet-ports");
|
||||
if (!ports_fwnode)
|
||||
ports_fwnode = device_get_named_child_node(chip->dev, "ports");
|
||||
if (ports_fwnode) {
|
||||
fwnode_for_each_child_node(ports_fwnode, port_fwnode) {
|
||||
if (fwnode_property_read_u32(port_fwnode, "reg", &val))
|
||||
continue;
|
||||
if (val == port) {
|
||||
p->fwnode = port_fwnode;
|
||||
p->fiber = fwnode_property_present(port_fwnode, "sfp");
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dev_dbg(chip->dev, "no ethernet ports node defined for the device\n");
|
||||
}
|
||||
|
||||
if (chip->info->ops->port_setup_leds) {
|
||||
err = chip->info->ops->port_setup_leds(chip, port);
|
||||
if (err && err != -EOPNOTSUPP)
|
||||
return err;
|
||||
}
|
||||
|
||||
err = mv88e6xxx_port_setup_mac(chip, port, LINK_UNFORCED,
|
||||
SPEED_UNFORCED, DUPLEX_UNFORCED,
|
||||
@@ -4597,6 +4627,7 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
|
||||
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
|
||||
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
|
||||
.port_get_cmode = mv88e6352_port_get_cmode,
|
||||
.port_setup_leds = mv88e6xxx_port_setup_leds,
|
||||
.port_setup_message_port = mv88e6xxx_setup_message_port,
|
||||
.stats_snapshot = mv88e6320_g1_stats_snapshot,
|
||||
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
|
||||
@@ -4699,6 +4730,7 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
|
||||
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
|
||||
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
|
||||
.port_get_cmode = mv88e6352_port_get_cmode,
|
||||
.port_setup_leds = mv88e6xxx_port_setup_leds,
|
||||
.port_setup_message_port = mv88e6xxx_setup_message_port,
|
||||
.stats_snapshot = mv88e6320_g1_stats_snapshot,
|
||||
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
|
||||
@@ -4974,6 +5006,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
|
||||
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
|
||||
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
|
||||
.port_get_cmode = mv88e6352_port_get_cmode,
|
||||
.port_setup_leds = mv88e6xxx_port_setup_leds,
|
||||
.port_setup_message_port = mv88e6xxx_setup_message_port,
|
||||
.stats_snapshot = mv88e6320_g1_stats_snapshot,
|
||||
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
|
||||
@@ -5396,6 +5429,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
|
||||
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
|
||||
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
|
||||
.port_get_cmode = mv88e6352_port_get_cmode,
|
||||
.port_setup_leds = mv88e6xxx_port_setup_leds,
|
||||
.port_setup_message_port = mv88e6xxx_setup_message_port,
|
||||
.stats_snapshot = mv88e6320_g1_stats_snapshot,
|
||||
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
|
||||
|
||||
@@ -13,7 +13,9 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/ptp_clock_kernel.h>
|
||||
#include <linux/timecounter.h>
|
||||
#include <net/dsa.h>
|
||||
@@ -275,6 +277,7 @@ struct mv88e6xxx_vlan {
|
||||
struct mv88e6xxx_port {
|
||||
struct mv88e6xxx_chip *chip;
|
||||
int port;
|
||||
struct fwnode_handle *fwnode;
|
||||
struct mv88e6xxx_vlan bridge_pvid;
|
||||
u64 serdes_stats[2];
|
||||
u64 atu_member_violation;
|
||||
@@ -289,6 +292,11 @@ struct mv88e6xxx_port {
|
||||
struct devlink_region *region;
|
||||
void *pcs_private;
|
||||
|
||||
/* LED related information */
|
||||
bool fiber;
|
||||
struct led_classdev led0;
|
||||
struct led_classdev led1;
|
||||
|
||||
/* MacAuth Bypass control flag */
|
||||
bool mab;
|
||||
};
|
||||
@@ -572,6 +580,9 @@ struct mv88e6xxx_ops {
|
||||
phy_interface_t mode);
|
||||
int (*port_get_cmode)(struct mv88e6xxx_chip *chip, int port, u8 *cmode);
|
||||
|
||||
/* LED control */
|
||||
int (*port_setup_leds)(struct mv88e6xxx_chip *chip, int port);
|
||||
|
||||
/* Some devices have a per port register indicating what is
|
||||
* the upstream port this port should forward to.
|
||||
*/
|
||||
|
||||
839
drivers/net/dsa/mv88e6xxx/leds.c
Normal file
839
drivers/net/dsa/mv88e6xxx/leds.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -12,6 +12,7 @@
|
||||
#include <linux/if_bridge.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/phylink.h>
|
||||
#include <linux/property.h>
|
||||
|
||||
#include "chip.h"
|
||||
#include "global2.h"
|
||||
|
||||
@@ -309,6 +309,130 @@
|
||||
/* Offset 0x13: OutFiltered Counter */
|
||||
#define MV88E6XXX_PORT_OUT_FILTERED 0x13
|
||||
|
||||
/* Offset 0x16: LED Control */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL 0x16
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_UPDATE BIT(15)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_POINTER_MASK GENMASK(14, 12)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_POINTER_LED01_CTRL (0x00 << 12) /* Control for LED 0 and 1 */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_POINTER_STRETCH_BLINK (0x06 << 12) /* Stetch and Blink Rate */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_POINTER_CNTL_SPECIAL (0x07 << 12) /* Control for the Port's Special LED */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_DATA_MASK GENMASK(10, 0)
|
||||
/* Selection masks valid for either port 1,2,3,4 or 5 */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL_MASK GENMASK(3, 0)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL_MASK GENMASK(7, 4)
|
||||
/* Selection control for LED 0 and 1, ports 5 and 6 only has LED 0
|
||||
* Bits Function
|
||||
* 0..3 LED 0 control selector on ports 1-5
|
||||
* 4..7 LED 1 control selector on ports 1-4 on port 5 this controls LED 0 of port 6
|
||||
*
|
||||
* Sel Port LED Function for the 6352 family:
|
||||
* 0 1-4 0 Link/Act/Speed by Blink Rate (off=no link, on=link, blink=activity, blink speed=link speed)
|
||||
* 1-4 1 Port 2's Special LED
|
||||
* 5-6 0 Port 5 Link/Act (off=no link, on=link, blink=activity)
|
||||
* 5-6 1 Port 6 Link/Act (off=no link, on=link 1000, blink=activity)
|
||||
* 1 1-4 0 100/1000 Link/Act (off=no link, on=100 or 1000 link, blink=activity)
|
||||
* 1-4 1 10/100 Link Act (off=no link, on=10 or 100 link, blink=activity)
|
||||
* 5-6 0 Fiber 100 Link/Act (off=no link, on=link 100, blink=activity)
|
||||
* 5-6 1 Fiber 1000 Link/Act (off=no link, on=link 1000, blink=activity)
|
||||
* 2 1-4 0 1000 Link/Act (off=no link, on=link 1000, blink=activity)
|
||||
* 1-4 1 10/100 Link/Act (off=no link, on=10 or 100 link, blink=activity)
|
||||
* 5-6 0 Fiber 1000 Link/Act (off=no link, on=link 1000, blink=activity)
|
||||
* 5-6 1 Fiber 100 Link/Act (off=no link, on=link 100, blink=activity)
|
||||
* 3 1-4 0 Link/Act (off=no link, on=link, blink=activity)
|
||||
* 1-4 1 1000 Link (off=no link, on=1000 link)
|
||||
* 5-6 0 Port 0's Special LED
|
||||
* 5-6 1 Fiber Link (off=no link, on=link)
|
||||
* 4 1-4 0 Port 0's Special LED
|
||||
* 1-4 1 Port 1's Special LED
|
||||
* 5-6 0 Port 1's Special LED
|
||||
* 5-6 1 Port 5 Link/Act (off=no link, on=link, blink=activity)
|
||||
* 5 1-4 0 Reserved
|
||||
* 1-4 1 Reserved
|
||||
* 5-6 0 Port 2's Special LED
|
||||
* 5-6 1 Port 6 Link (off=no link, on=link)
|
||||
* 6 1-4 0 Duplex/Collision (off=half-duplex,on=full-duplex,blink=collision)
|
||||
* 1-4 1 10/1000 Link/Act (off=no link, on=10 or 1000 link, blink=activity)
|
||||
* 5-6 0 Port 5 Duplex/Collision (off=half-duplex, on=full-duplex, blink=col)
|
||||
* 5-6 1 Port 6 Duplex/Collision (off=half-duplex, on=full-duplex, blink=col)
|
||||
* 7 1-4 0 10/1000 Link/Act (off=no link, on=10 or 1000 link, blink=activity)
|
||||
* 1-4 1 10/1000 Link (off=no link, on=10 or 1000 link)
|
||||
* 5-6 0 Port 5 Link/Act/Speed by Blink rate (off=no link, on=link, blink=activity, blink speed=link speed)
|
||||
* 5-6 1 Port 6 Link/Act/Speed by Blink rate (off=no link, on=link, blink=activity, blink speed=link speed)
|
||||
* 8 1-4 0 Link (off=no link, on=link)
|
||||
* 1-4 1 Activity (off=no link, blink on=activity)
|
||||
* 5-6 0 Port 6 Link/Act (off=no link, on=link, blink=activity)
|
||||
* 5-6 1 Port 0's Special LED
|
||||
* 9 1-4 0 10 Link (off=no link, on=10 link)
|
||||
* 1-4 1 100 Link (off=no link, on=100 link)
|
||||
* 5-6 0 Reserved
|
||||
* 5-6 1 Port 1's Special LED
|
||||
* a 1-4 0 10 Link/Act (off=no link, on=10 link, blink=activity)
|
||||
* 1-4 1 100 Link/Act (off=no link, on=100 link, blink=activity)
|
||||
* 5-6 0 Reserved
|
||||
* 5-6 1 Port 2's Special LED
|
||||
* b 1-4 0 100/1000 Link (off=no link, on=100 or 1000 link)
|
||||
* 1-4 1 10/100 Link (off=no link, on=100 link, blink=activity)
|
||||
* 5-6 0 Reserved
|
||||
* 5-6 1 Reserved
|
||||
* c * * PTP Act (blink on=PTP activity)
|
||||
* d * * Force Blink
|
||||
* e * * Force Off
|
||||
* f * * Force On
|
||||
*/
|
||||
/* Select LED0 output */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL0 0x0
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL1 0x1
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL2 0x2
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL3 0x3
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL4 0x4
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL5 0x5
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL6 0x6
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL7 0x7
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL8 0x8
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SEL9 0x9
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SELA 0xa
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SELB 0xb
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SELC 0xc
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SELD 0xd
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SELE 0xe
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED0_SELF 0xf
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL0 (0x0 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL1 (0x1 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL2 (0x2 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL3 (0x3 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL4 (0x4 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL5 (0x5 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL6 (0x6 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL7 (0x7 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL8 (0x8 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SEL9 (0x9 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SELA (0xa << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SELB (0xb << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SELC (0xc << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SELD (0xd << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SELE (0xe << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_LED1_SELF (0xf << 4)
|
||||
/* Stretch and Blink Rate Control (Index 0x06 of LED Control) */
|
||||
/* Pulse Stretch Selection for all LED's on this port */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_PULSE_STRETCH_NONE (0 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_PULSE_STRETCH_21MS (1 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_PULSE_STRETCH_42MS (2 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_PULSE_STRETCH_84MS (3 << 4)
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_PULSE_STRETCH_168MS (4 << 4)
|
||||
/* Blink Rate Selection for all LEDs on this port */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_BLINK_RATE_21MS 0
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_BLINK_RATE_42MS 1
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_BLINK_RATE_84MS 2
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_BLINK_RATE_168MS 3
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_BLINK_RATE_336MS 4
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x06_BLINK_RATE_672MS 5
|
||||
/* Control for Special LED (Index 0x7 of LED Control on Port0) */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x07_P0_LAN_LINKACT_SHIFT 0 /* bits 6:0 LAN Link Activity LED */
|
||||
/* Control for Special LED (Index 0x7 of LED Control on Port 1) */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x07_P1_WAN_LINKACT_SHIFT 0 /* bits 6:0 WAN Link Activity LED */
|
||||
/* Control for Special LED (Index 0x7 of LED Control on Port 2) */
|
||||
#define MV88E6XXX_PORT_LED_CONTROL_0x07_P2_PTP_ACT 0 /* bits 6:0 PTP Activity */
|
||||
|
||||
/* Offset 0x18: IEEE Priority Mapping Table */
|
||||
#define MV88E6390_PORT_IEEE_PRIO_MAP_TABLE 0x18
|
||||
#define MV88E6390_PORT_IEEE_PRIO_MAP_TABLE_UPDATE 0x8000
|
||||
@@ -457,6 +581,15 @@ int mv88e6393x_port_set_cmode(struct mv88e6xxx_chip *chip, int port,
|
||||
phy_interface_t mode);
|
||||
int mv88e6185_port_get_cmode(struct mv88e6xxx_chip *chip, int port, u8 *cmode);
|
||||
int mv88e6352_port_get_cmode(struct mv88e6xxx_chip *chip, int port, u8 *cmode);
|
||||
#ifdef CONFIG_NET_DSA_MV88E6XXX_LEDS
|
||||
int mv88e6xxx_port_setup_leds(struct mv88e6xxx_chip *chip, int port);
|
||||
#else
|
||||
static inline int mv88e6xxx_port_setup_leds(struct mv88e6xxx_chip *chip,
|
||||
int port)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
int mv88e6xxx_port_drop_untagged(struct mv88e6xxx_chip *chip, int port,
|
||||
bool drop_untagged);
|
||||
int mv88e6xxx_port_set_map_da(struct mv88e6xxx_chip *chip, int port, bool map);
|
||||
|
||||
Reference in New Issue
Block a user