Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 351685
b: refs/heads/master
c: a1ef7bd
h: refs/heads/master
i:
  351683: 8e6b3cd
v: v3
  • Loading branch information
Kurt Van Dijck authored and Marc Kleine-Budde committed Jan 26, 2013
1 parent 36c7751 commit c042e9d
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: bf03a5379cd3492fbeca42111340581ba9dee0b8
refs/heads/master: a1ef7bd9fce8aba8e4701e60208148fb3bc9bdd4
5 changes: 5 additions & 0 deletions trunk/drivers/net/can/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <linux/can.h>
#include <linux/can/dev.h>
#include <linux/can/netlink.h>
#include <linux/can/led.h>
#include <net/rtnetlink.h>

#define MOD_DESC "CAN device driver interface"
Expand Down Expand Up @@ -811,6 +812,8 @@ static __init int can_dev_init(void)
{
int err;

can_led_notifier_init();

err = rtnl_link_register(&can_link_ops);
if (!err)
printk(KERN_INFO MOD_DESC "\n");
Expand All @@ -822,6 +825,8 @@ module_init(can_dev_init);
static __exit void can_dev_exit(void)
{
rtnl_link_unregister(&can_link_ops);

can_led_notifier_exit();
}
module_exit(can_dev_exit);

Expand Down
38 changes: 38 additions & 0 deletions trunk/drivers/net/can/led.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* Copyright 2012, Fabio Baltieri <fabio.baltieri@gmail.com>
* Copyright 2012, Kurt Van Dijck <kurt.van.dijck@eia.be>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
Expand Down Expand Up @@ -84,3 +85,40 @@ void devm_can_led_init(struct net_device *netdev)
devres_add(&netdev->dev, res);
}
EXPORT_SYMBOL_GPL(devm_can_led_init);

/* NETDEV rename notifier to rename the associated led triggers too */
static int can_led_notifier(struct notifier_block *nb, unsigned long msg,
void *data)
{
struct net_device *netdev = data;
struct can_priv *priv = safe_candev_priv(netdev);
char name[CAN_LED_NAME_SZ];

if (!priv)
return NOTIFY_DONE;

if (msg == NETDEV_CHANGENAME) {
snprintf(name, sizeof(name), "%s-tx", netdev->name);
led_trigger_rename_static(name, priv->tx_led_trig);

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

return NOTIFY_DONE;
}

/* notifier block for netdevice event */
static struct notifier_block can_netdev_notifier __read_mostly = {
.notifier_call = can_led_notifier,
};

int __init can_led_notifier_init(void)
{
return register_netdevice_notifier(&can_netdev_notifier);
}

void __exit can_led_notifier_exit(void)
{
unregister_netdevice_notifier(&can_netdev_notifier);
}
9 changes: 9 additions & 0 deletions trunk/include/linux/can/led.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ enum can_led_event {

void can_led_event(struct net_device *netdev, enum can_led_event event);
void devm_can_led_init(struct net_device *netdev);
int __init can_led_notifier_init(void);
void __exit can_led_notifier_exit(void);

#else

Expand All @@ -36,6 +38,13 @@ static inline void can_led_event(struct net_device *netdev,
static inline void devm_can_led_init(struct net_device *netdev)
{
}
static inline int can_led_notifier_init(void)
{
return 0;
}
static inline void can_led_notifier_exit(void)
{
}

#endif

Expand Down

0 comments on commit c042e9d

Please sign in to comment.