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
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) · 5 unmodified lines
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 device69/* Register CAN LED triggers for a CAN device
@@ -76,11 +85,15 @@ void devm_can_led_init(struct net_device *netdev) · 15 unmodified lines
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, · 10 unmodified lines
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, · 2 unmodified lines
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;
include/linux/can/dev.h+2−0
@@ -61,6 +61,8 @@ struct can_priv { · 60 unmodified lines
61 char tx_led_trig_name[CAN_LED_NAME_SZ];61 char tx_led_trig_name[CAN_LED_NAME_SZ];
62 struct led_trigger *rx_led_trig;62 struct led_trigger *rx_led_trig;
63 char rx_led_trig_name[CAN_LED_NAME_SZ];63 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];
64#endif66#endif
65};67};
66 68
include/linux/can/led.h+4−2
@@ -21,8 +21,10 @@ enum can_led_event { · 20 unmodified lines
21 21
22#ifdef CONFIG_CAN_LEDS22#ifdef CONFIG_CAN_LEDS
23 23
24/* keep space for interface name + "-tx"/"-rx" suffix and null terminator */24/* keep space for interface name + "-tx"/"-rx"/"-rxtx"
25#define CAN_LED_NAME_SZ (IFNAMSIZ + 4)25 * suffix and null terminator
26 */
27#define CAN_LED_NAME_SZ (IFNAMSIZ + 6)
26 28
27void can_led_event(struct net_device *netdev, enum can_led_event event);29void can_led_event(struct net_device *netdev, enum can_led_event event);
28void devm_can_led_init(struct net_device *netdev);30void devm_can_led_init(struct net_device *netdev);