Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Yegor Yefremov and committed by
Marc Kleine-Budde
c54eb70e fba6f911

+25 -5
+19 -3
drivers/net/can/led.c
··· 30 30 case CAN_LED_EVENT_OPEN: 31 31 led_trigger_event(priv->tx_led_trig, LED_FULL); 32 32 led_trigger_event(priv->rx_led_trig, LED_FULL); 33 + led_trigger_event(priv->rxtx_led_trig, LED_FULL); 33 34 break; 34 35 case CAN_LED_EVENT_STOP: 35 36 led_trigger_event(priv->tx_led_trig, LED_OFF); 36 37 led_trigger_event(priv->rx_led_trig, LED_OFF); 38 + led_trigger_event(priv->rxtx_led_trig, LED_OFF); 37 39 break; 38 40 case CAN_LED_EVENT_TX: 39 - if (led_delay) 41 + if (led_delay) { 40 42 led_trigger_blink_oneshot(priv->tx_led_trig, 41 43 &led_delay, &led_delay, 1); 44 + led_trigger_blink_oneshot(priv->rxtx_led_trig, 45 + &led_delay, &led_delay, 1); 46 + } 42 47 break; 43 48 case CAN_LED_EVENT_RX: 44 - if (led_delay) 49 + if (led_delay) { 45 50 led_trigger_blink_oneshot(priv->rx_led_trig, 46 51 &led_delay, &led_delay, 1); 52 + led_trigger_blink_oneshot(priv->rxtx_led_trig, 53 + &led_delay, &led_delay, 1); 54 + } 47 55 break; 48 56 } 49 57 } ··· 63 55 64 56 led_trigger_unregister_simple(priv->tx_led_trig); 65 57 led_trigger_unregister_simple(priv->rx_led_trig); 58 + led_trigger_unregister_simple(priv->rxtx_led_trig); 66 59 } 67 60 68 61 /* Register CAN LED triggers for a CAN device ··· 85 76 "%s-tx", netdev->name); 86 77 snprintf(priv->rx_led_trig_name, sizeof(priv->rx_led_trig_name), 87 78 "%s-rx", netdev->name); 79 + snprintf(priv->rxtx_led_trig_name, sizeof(priv->rxtx_led_trig_name), 80 + "%s-rxtx", netdev->name); 88 81 89 82 led_trigger_register_simple(priv->tx_led_trig_name, 90 83 &priv->tx_led_trig); 91 84 led_trigger_register_simple(priv->rx_led_trig_name, 92 85 &priv->rx_led_trig); 86 + led_trigger_register_simple(priv->rxtx_led_trig_name, 87 + &priv->rxtx_led_trig); 93 88 94 89 devres_add(&netdev->dev, res); 95 90 } ··· 110 97 if (!priv) 111 98 return NOTIFY_DONE; 112 99 113 - if (!priv->tx_led_trig || !priv->rx_led_trig) 100 + if (!priv->tx_led_trig || !priv->rx_led_trig || !priv->rxtx_led_trig) 114 101 return NOTIFY_DONE; 115 102 116 103 if (msg == NETDEV_CHANGENAME) { ··· 119 106 120 107 snprintf(name, sizeof(name), "%s-rx", netdev->name); 121 108 led_trigger_rename_static(name, priv->rx_led_trig); 109 + 110 + snprintf(name, sizeof(name), "%s-rxtx", netdev->name); 111 + led_trigger_rename_static(name, priv->rxtx_led_trig); 122 112 } 123 113 124 114 return NOTIFY_DONE;
+2
include/linux/can/dev.h
··· 61 61 char tx_led_trig_name[CAN_LED_NAME_SZ]; 62 62 struct led_trigger *rx_led_trig; 63 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 66 #endif 65 67 }; 66 68
+4 -2
include/linux/can/led.h
··· 21 21 22 22 #ifdef CONFIG_CAN_LEDS 23 23 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) 26 28 27 29 void can_led_event(struct net_device *netdev, enum can_led_event event); 28 30 void devm_can_led_init(struct net_device *netdev);