History

can: add combined rx/tx LED trigger support

Add <ifname>-rxtx trigger, that will be activated both for tx as rx events. This trigger mimics "activity" LED for Ethernet devices.

Yegor Yefremov committed 11 years ago

Commit c54eb701 parent fba6f913 files · +25 −5Browse files

Unified · Split

3 files
  1. drivers/net/can/led.c +19 −3
  2. include/linux/can/dev.h +2 −0
  3. include/linux/can/led.h +4 −2
drivers/net/can/led.c+19−3
@@ -30,20 +30,28 @@ void can_led_event(struct net_device *netdev, enum can_led_event event) · 29 unmodified lines
3030 case CAN_LED_EVENT_OPEN:
3131 led_trigger_event(priv->tx_led_trig, LED_FULL);
3232 led_trigger_event(priv->rx_led_trig, LED_FULL);
33+ led_trigger_event(priv->rxtx_led_trig, LED_FULL);
3334 break;
3435 case CAN_LED_EVENT_STOP:
3536 led_trigger_event(priv->tx_led_trig, LED_OFF);
3637 led_trigger_event(priv->rx_led_trig, LED_OFF);
38+ led_trigger_event(priv->rxtx_led_trig, LED_OFF);
3739 break;
3840 case CAN_LED_EVENT_TX:
39− if (led_delay)
41+ if (led_delay) {
4042 led_trigger_blink_oneshot(priv->tx_led_trig,
4143 &led_delay, &led_delay, 1);
44+ led_trigger_blink_oneshot(priv->rxtx_led_trig,
45+ &led_delay, &led_delay, 1);
46+ }
4247 break;
4348 case CAN_LED_EVENT_RX:
44− if (led_delay)
49+ if (led_delay) {
4550 led_trigger_blink_oneshot(priv->rx_led_trig,
4651 &led_delay, &led_delay, 1);
52+ led_trigger_blink_oneshot(priv->rxtx_led_trig,
53+ &led_delay, &led_delay, 1);
54+ }
4755 break;
4856 }
4957 }
@@ -55,6 +63,7 @@ static void can_led_release(struct device *gendev, void *res) · 5 unmodified lines
5563
5664 led_trigger_unregister_simple(priv->tx_led_trig);
5765 led_trigger_unregister_simple(priv->rx_led_trig);
66+ led_trigger_unregister_simple(priv->rxtx_led_trig);
5867 }
5968
6069 /* Register CAN LED triggers for a CAN device
@@ -76,11 +85,15 @@ void devm_can_led_init(struct net_device *netdev) · 15 unmodified lines
7685 "%s-tx", netdev->name);
7786 snprintf(priv->rx_led_trig_name, sizeof(priv->rx_led_trig_name),
7887 "%s-rx", netdev->name);
88+ snprintf(priv->rxtx_led_trig_name, sizeof(priv->rxtx_led_trig_name),
89+ "%s-rxtx", netdev->name);
7990
8091 led_trigger_register_simple(priv->tx_led_trig_name,
8192 &priv->tx_led_trig);
8293 led_trigger_register_simple(priv->rx_led_trig_name,
8394 &priv->rx_led_trig);
95+ led_trigger_register_simple(priv->rxtx_led_trig_name,
96+ &priv->rxtx_led_trig);
8497
8598 devres_add(&netdev->dev, res);
8699 }
@@ -97,7 +110,7 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg, · 10 unmodified lines
97110 if (!priv)
98111 return NOTIFY_DONE;
99112
100− if (!priv->tx_led_trig || !priv->rx_led_trig)
113+ if (!priv->tx_led_trig || !priv->rx_led_trig || !priv->rxtx_led_trig)
101114 return NOTIFY_DONE;
102115
103116 if (msg == NETDEV_CHANGENAME) {
@@ -106,6 +119,9 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg, · 2 unmodified lines
106119
107120 snprintf(name, sizeof(name), "%s-rx", netdev->name);
108121 led_trigger_rename_static(name, priv->rx_led_trig);
122+
123+ snprintf(name, sizeof(name), "%s-rxtx", netdev->name);
124+ led_trigger_rename_static(name, priv->rxtx_led_trig);
109125 }
110126
111127 return NOTIFY_DONE;
include/linux/can/dev.h+2−0
@@ -61,6 +61,8 @@ struct can_priv { · 60 unmodified lines
6161 char tx_led_trig_name[CAN_LED_NAME_SZ];
6262 struct led_trigger *rx_led_trig;
6363 char rx_led_trig_name[CAN_LED_NAME_SZ];
64+ struct led_trigger *rxtx_led_trig;
65+ char rxtx_led_trig_name[CAN_LED_NAME_SZ];
6466 #endif
6567 };
6668
include/linux/can/led.h+4−2
@@ -21,8 +21,10 @@ enum can_led_event { · 20 unmodified lines
2121
2222 #ifdef CONFIG_CAN_LEDS
2323
24−/* keep space for interface name + "-tx"/"-rx" suffix and null terminator */
25−#define CAN_LED_NAME_SZ (IFNAMSIZ + 4)
24+/* keep space for interface name + "-tx"/"-rx"/"-rxtx"
25+ * suffix and null terminator
26+ */
27+#define CAN_LED_NAME_SZ (IFNAMSIZ + 6)
2628
2729 void can_led_event(struct net_device *netdev, enum can_led_event event);
2830 void devm_can_led_init(struct net_device *netdev);