aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/can
diff options
context:
space:
mode:
authorYegor Yefremov <yegorslists@googlemail.com>2015-03-16 04:38:13 -0400
committerMarc Kleine-Budde <mkl@pengutronix.de>2015-03-22 18:50:11 -0400
commitc54eb70e3bb8cd0d7b8564bedab63e834656c567 (patch)
treea910f5408ea2f0bf9c7aab2d100348e14b5ce559 /drivers/net/can
parentfba6f9117a3d87a269fc3b174127c99f25f4979e (diff)
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. Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'drivers/net/can')
-rw-r--r--drivers/net/can/led.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/drivers/net/can/led.c b/drivers/net/can/led.c
index ab7f1b01be49..c1b667675fa1 100644
--- a/drivers/net/can/led.c
+++ b/drivers/net/can/led.c
@@ -30,20 +30,28 @@ void can_led_event(struct net_device *netdev, enum can_led_event event)
30 case CAN_LED_EVENT_OPEN: 30 case CAN_LED_EVENT_OPEN:
31 led_trigger_event(priv->tx_led_trig, LED_FULL); 31 led_trigger_event(priv->tx_led_trig, LED_FULL);
32 led_trigger_event(priv->rx_led_trig, LED_FULL); 32 led_trigger_event(priv->rx_led_trig, LED_FULL);
33 led_trigger_event(priv->rxtx_led_trig, LED_FULL);
33 break; 34 break;
34 case CAN_LED_EVENT_STOP: 35 case CAN_LED_EVENT_STOP:
35 led_trigger_event(priv->tx_led_trig, LED_OFF); 36 led_trigger_event(priv->tx_led_trig, LED_OFF);
36 led_trigger_event(priv->rx_led_trig, LED_OFF); 37 led_trigger_event(priv->rx_led_trig, LED_OFF);
38 led_trigger_event(priv->rxtx_led_trig, LED_OFF);
37 break; 39 break;
38 case CAN_LED_EVENT_TX: 40 case CAN_LED_EVENT_TX:
39 if (led_delay) 41 if (led_delay) {
40 led_trigger_blink_oneshot(priv->tx_led_trig, 42 led_trigger_blink_oneshot(priv->tx_led_trig,
41 &led_delay, &led_delay, 1); 43 &led_delay, &led_delay, 1);
44 led_trigger_blink_oneshot(priv->rxtx_led_trig,
45 &led_delay, &led_delay, 1);
46 }
42 break; 47 break;
43 case CAN_LED_EVENT_RX: 48 case CAN_LED_EVENT_RX:
44 if (led_delay) 49 if (led_delay) {
45 led_trigger_blink_oneshot(priv->rx_led_trig, 50 led_trigger_blink_oneshot(priv->rx_led_trig,
46 &led_delay, &led_delay, 1); 51 &led_delay, &led_delay, 1);
52 led_trigger_blink_oneshot(priv->rxtx_led_trig,
53 &led_delay, &led_delay, 1);
54 }
47 break; 55 break;
48 } 56 }
49} 57}
@@ -55,6 +63,7 @@ static void can_led_release(struct device *gendev, void *res)
55 63
56 led_trigger_unregister_simple(priv->tx_led_trig); 64 led_trigger_unregister_simple(priv->tx_led_trig);
57 led_trigger_unregister_simple(priv->rx_led_trig); 65 led_trigger_unregister_simple(priv->rx_led_trig);
66 led_trigger_unregister_simple(priv->rxtx_led_trig);
58} 67}
59 68
60/* Register CAN LED triggers for a CAN device 69/* Register CAN LED triggers for a CAN device
@@ -76,11 +85,15 @@ void devm_can_led_init(struct net_device *netdev)
76 "%s-tx", netdev->name); 85 "%s-tx", netdev->name);
77 snprintf(priv->rx_led_trig_name, sizeof(priv->rx_led_trig_name), 86 snprintf(priv->rx_led_trig_name, sizeof(priv->rx_led_trig_name),
78 "%s-rx", netdev->name); 87 "%s-rx", netdev->name);
88 snprintf(priv->rxtx_led_trig_name, sizeof(priv->rxtx_led_trig_name),
89 "%s-rxtx", netdev->name);
79 90
80 led_trigger_register_simple(priv->tx_led_trig_name, 91 led_trigger_register_simple(priv->tx_led_trig_name,
81 &priv->tx_led_trig); 92 &priv->tx_led_trig);
82 led_trigger_register_simple(priv->rx_led_trig_name, 93 led_trigger_register_simple(priv->rx_led_trig_name,
83 &priv->rx_led_trig); 94 &priv->rx_led_trig);
95 led_trigger_register_simple(priv->rxtx_led_trig_name,
96 &priv->rxtx_led_trig);
84 97
85 devres_add(&netdev->dev, res); 98 devres_add(&netdev->dev, res);
86} 99}
@@ -97,7 +110,7 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg,
97 if (!priv) 110 if (!priv)
98 return NOTIFY_DONE; 111 return NOTIFY_DONE;
99 112
100 if (!priv->tx_led_trig || !priv->rx_led_trig) 113 if (!priv->tx_led_trig || !priv->rx_led_trig || !priv->rxtx_led_trig)
101 return NOTIFY_DONE; 114 return NOTIFY_DONE;
102 115
103 if (msg == NETDEV_CHANGENAME) { 116 if (msg == NETDEV_CHANGENAME) {
@@ -106,6 +119,9 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg,
106 119
107 snprintf(name, sizeof(name), "%s-rx", netdev->name); 120 snprintf(name, sizeof(name), "%s-rx", netdev->name);
108 led_trigger_rename_static(name, priv->rx_led_trig); 121 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);
109 } 125 }
110 126
111 return NOTIFY_DONE; 127 return NOTIFY_DONE;