Skip to content

Commit

Permalink
can: add combined rx/tx LED trigger support
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Yegor Yefremov authored and Marc Kleine-Budde committed Mar 22, 2015
1 parent fba6f91 commit c54eb70
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 5 deletions.
22 changes: 19 additions & 3 deletions drivers/net/can/led.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,28 @@ void can_led_event(struct net_device *netdev, enum can_led_event event)
case CAN_LED_EVENT_OPEN:
led_trigger_event(priv->tx_led_trig, LED_FULL);
led_trigger_event(priv->rx_led_trig, LED_FULL);
led_trigger_event(priv->rxtx_led_trig, LED_FULL);
break;
case CAN_LED_EVENT_STOP:
led_trigger_event(priv->tx_led_trig, LED_OFF);
led_trigger_event(priv->rx_led_trig, LED_OFF);
led_trigger_event(priv->rxtx_led_trig, LED_OFF);
break;
case CAN_LED_EVENT_TX:
if (led_delay)
if (led_delay) {
led_trigger_blink_oneshot(priv->tx_led_trig,
&led_delay, &led_delay, 1);
led_trigger_blink_oneshot(priv->rxtx_led_trig,
&led_delay, &led_delay, 1);
}
break;
case CAN_LED_EVENT_RX:
if (led_delay)
if (led_delay) {
led_trigger_blink_oneshot(priv->rx_led_trig,
&led_delay, &led_delay, 1);
led_trigger_blink_oneshot(priv->rxtx_led_trig,
&led_delay, &led_delay, 1);
}
break;
}
}
Expand All @@ -55,6 +63,7 @@ static void can_led_release(struct device *gendev, void *res)

led_trigger_unregister_simple(priv->tx_led_trig);
led_trigger_unregister_simple(priv->rx_led_trig);
led_trigger_unregister_simple(priv->rxtx_led_trig);
}

/* Register CAN LED triggers for a CAN device
Expand All @@ -76,11 +85,15 @@ void devm_can_led_init(struct net_device *netdev)
"%s-tx", netdev->name);
snprintf(priv->rx_led_trig_name, sizeof(priv->rx_led_trig_name),
"%s-rx", netdev->name);
snprintf(priv->rxtx_led_trig_name, sizeof(priv->rxtx_led_trig_name),
"%s-rxtx", netdev->name);

led_trigger_register_simple(priv->tx_led_trig_name,
&priv->tx_led_trig);
led_trigger_register_simple(priv->rx_led_trig_name,
&priv->rx_led_trig);
led_trigger_register_simple(priv->rxtx_led_trig_name,
&priv->rxtx_led_trig);

devres_add(&netdev->dev, res);
}
Expand All @@ -97,7 +110,7 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg,
if (!priv)
return NOTIFY_DONE;

if (!priv->tx_led_trig || !priv->rx_led_trig)
if (!priv->tx_led_trig || !priv->rx_led_trig || !priv->rxtx_led_trig)
return NOTIFY_DONE;

if (msg == NETDEV_CHANGENAME) {
Expand All @@ -106,6 +119,9 @@ static int can_led_notifier(struct notifier_block *nb, unsigned long msg,

snprintf(name, sizeof(name), "%s-rx", netdev->name);
led_trigger_rename_static(name, priv->rx_led_trig);

snprintf(name, sizeof(name), "%s-rxtx", netdev->name);
led_trigger_rename_static(name, priv->rxtx_led_trig);
}

return NOTIFY_DONE;
Expand Down
2 changes: 2 additions & 0 deletions include/linux/can/dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ struct can_priv {
char tx_led_trig_name[CAN_LED_NAME_SZ];
struct led_trigger *rx_led_trig;
char rx_led_trig_name[CAN_LED_NAME_SZ];
struct led_trigger *rxtx_led_trig;
char rxtx_led_trig_name[CAN_LED_NAME_SZ];
#endif
};

Expand Down
6 changes: 4 additions & 2 deletions include/linux/can/led.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ enum can_led_event {

#ifdef CONFIG_CAN_LEDS

/* keep space for interface name + "-tx"/"-rx" suffix and null terminator */
#define CAN_LED_NAME_SZ (IFNAMSIZ + 4)
/* keep space for interface name + "-tx"/"-rx"/"-rxtx"
* suffix and null terminator
*/
#define CAN_LED_NAME_SZ (IFNAMSIZ + 6)

void can_led_event(struct net_device *netdev, enum can_led_event event);
void devm_can_led_init(struct net_device *netdev);
Expand Down

0 comments on commit c54eb70

Please sign in to comment.