12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- From 4f53c27f772e27e4cf4e5507d6f4d5980002cb6a Mon Sep 17 00:00:00 2001
- From: Andrew Lunn <[email protected]>
- Date: Mon, 29 May 2023 18:32:43 +0200
- Subject: [PATCH 13/13] net: dsa: qca8k: add op to get ports netdev
- In order that the LED trigger can blink the switch MAC ports LED, it
- needs to know the netdev associated to the port. Add the callback to
- return the struct device of the netdev.
- Add an helper function qca8k_phy_to_port() to convert the phy back to
- dsa_port index, as we reference LED port based on the internal PHY
- index and needs to be converted back.
- Signed-off-by: Andrew Lunn <[email protected]>
- Signed-off-by: Christian Marangi <[email protected]>
- Signed-off-by: David S. Miller <[email protected]>
- ---
- drivers/net/dsa/qca/qca8k-leds.c | 27 +++++++++++++++++++++++++++
- 1 file changed, 27 insertions(+)
- --- a/drivers/net/dsa/qca/qca8k-leds.c
- +++ b/drivers/net/dsa/qca/qca8k-leds.c
- @@ -5,6 +5,18 @@
- #include "qca8k.h"
- #include "qca8k_leds.h"
-
- +static u32 qca8k_phy_to_port(int phy)
- +{
- + /* Internal PHY 0 has port at index 1.
- + * Internal PHY 1 has port at index 2.
- + * Internal PHY 2 has port at index 3.
- + * Internal PHY 3 has port at index 4.
- + * Internal PHY 4 has port at index 5.
- + */
- +
- + return phy + 1;
- +}
- +
- static int
- qca8k_get_enable_led_reg(int port_num, int led_num, struct qca8k_led_pattern_en *reg_info)
- {
- @@ -314,6 +326,20 @@ qca8k_cled_hw_control_get(struct led_cla
- return 0;
- }
-
- +static struct device *qca8k_cled_hw_control_get_device(struct led_classdev *ldev)
- +{
- + struct qca8k_led *led = container_of(ldev, struct qca8k_led, cdev);
- + struct qca8k_priv *priv = led->priv;
- + struct dsa_port *dp;
- +
- + dp = dsa_to_port(priv->ds, qca8k_phy_to_port(led->port_num));
- + if (!dp)
- + return NULL;
- + if (dp->slave)
- + return &dp->slave->dev;
- + return NULL;
- +}
- +
- static int
- qca8k_parse_port_leds(struct qca8k_priv *priv, struct fwnode_handle *port, int port_num)
- {
- @@ -377,6 +403,7 @@ qca8k_parse_port_leds(struct qca8k_priv
- port_led->cdev.hw_control_is_supported = qca8k_cled_hw_control_is_supported;
- port_led->cdev.hw_control_set = qca8k_cled_hw_control_set;
- port_led->cdev.hw_control_get = qca8k_cled_hw_control_get;
- + port_led->cdev.hw_control_get_device = qca8k_cled_hw_control_get_device;
- port_led->cdev.hw_control_trigger = "netdev";
- init_data.default_label = ":port";
- init_data.fwnode = led;
|