diff options
author | Fabio Baltieri <fabio.baltieri@gmail.com> | 2012-12-18 12:51:01 -0500 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2013-01-26 10:59:00 -0500 |
commit | 5090f805600ff7dccca358f9986a92dd34185326 (patch) | |
tree | 357ba36b7b0c9db1cd67f5d278b5cc7656ff44ca | |
parent | d7ff5aae6ce3670afc1e000c08ea238712d70fae (diff) |
can: c_can: add LED trigger support
Add support for canbus activity led indicators on c_can devices by
calling appropriate can_led functions.
These are only enabled when CONFIG_CAN_LEDS is Y, becomes no-op
otherwise.
Cc: Bhupesh Sharma <bhupesh.sharma@st.com>
Cc: AnilKumar Ch <anilkumar@ti.com>
Cc: Wolfgang Grandegger <wg@grandegger.com>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Fabio Baltieri <fabio.baltieri@gmail.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
-rw-r--r-- | drivers/net/can/c_can/c_can.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c index 5233b8f58d77..57eb1e77865d 100644 --- a/drivers/net/can/c_can/c_can.c +++ b/drivers/net/can/c_can/c_can.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/can.h> | 39 | #include <linux/can.h> |
40 | #include <linux/can/dev.h> | 40 | #include <linux/can/dev.h> |
41 | #include <linux/can/error.h> | 41 | #include <linux/can/error.h> |
42 | #include <linux/can/led.h> | ||
42 | 43 | ||
43 | #include "c_can.h" | 44 | #include "c_can.h" |
44 | 45 | ||
@@ -477,6 +478,8 @@ static int c_can_read_msg_object(struct net_device *dev, int iface, int ctrl) | |||
477 | stats->rx_packets++; | 478 | stats->rx_packets++; |
478 | stats->rx_bytes += frame->can_dlc; | 479 | stats->rx_bytes += frame->can_dlc; |
479 | 480 | ||
481 | can_led_event(dev, CAN_LED_EVENT_RX); | ||
482 | |||
480 | return 0; | 483 | return 0; |
481 | } | 484 | } |
482 | 485 | ||
@@ -751,6 +754,7 @@ static void c_can_do_tx(struct net_device *dev) | |||
751 | C_CAN_IFACE(MSGCTRL_REG, 0)) | 754 | C_CAN_IFACE(MSGCTRL_REG, 0)) |
752 | & IF_MCONT_DLC_MASK; | 755 | & IF_MCONT_DLC_MASK; |
753 | stats->tx_packets++; | 756 | stats->tx_packets++; |
757 | can_led_event(dev, CAN_LED_EVENT_TX); | ||
754 | c_can_inval_msg_object(dev, 0, msg_obj_no); | 758 | c_can_inval_msg_object(dev, 0, msg_obj_no); |
755 | } else { | 759 | } else { |
756 | break; | 760 | break; |
@@ -1115,6 +1119,8 @@ static int c_can_open(struct net_device *dev) | |||
1115 | 1119 | ||
1116 | napi_enable(&priv->napi); | 1120 | napi_enable(&priv->napi); |
1117 | 1121 | ||
1122 | can_led_event(dev, CAN_LED_EVENT_OPEN); | ||
1123 | |||
1118 | /* start the c_can controller */ | 1124 | /* start the c_can controller */ |
1119 | c_can_start(dev); | 1125 | c_can_start(dev); |
1120 | 1126 | ||
@@ -1143,6 +1149,8 @@ static int c_can_close(struct net_device *dev) | |||
1143 | c_can_reset_ram(priv, false); | 1149 | c_can_reset_ram(priv, false); |
1144 | c_can_pm_runtime_put_sync(priv); | 1150 | c_can_pm_runtime_put_sync(priv); |
1145 | 1151 | ||
1152 | can_led_event(dev, CAN_LED_EVENT_STOP); | ||
1153 | |||
1146 | return 0; | 1154 | return 0; |
1147 | } | 1155 | } |
1148 | 1156 | ||
@@ -1268,6 +1276,8 @@ int register_c_can_dev(struct net_device *dev) | |||
1268 | err = register_candev(dev); | 1276 | err = register_candev(dev); |
1269 | if (err) | 1277 | if (err) |
1270 | c_can_pm_runtime_disable(priv); | 1278 | c_can_pm_runtime_disable(priv); |
1279 | else | ||
1280 | devm_can_led_init(dev); | ||
1271 | 1281 | ||
1272 | return err; | 1282 | return err; |
1273 | } | 1283 | } |