mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 07:23:14 +00:00
can: can-dev: remove obsolete CAN LED support
Since commit 30f3b42147
("can: mark led trigger as broken") the
CAN specific LED support was disabled and marked as BROKEN. As the
common LED support with CONFIG_LEDS_TRIGGER_NETDEV should do this work
now the code can be removed as preparation for a CAN netdevice Kconfig
rework.
Link: https://lore.kernel.org/all/20220518154527.29046-1-socketcan@hartkopp.net
Suggested-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
[mkl: remove led.h from MAINTAINERS]
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
caf6b7f81e
commit
6c1e423a3c
@ -4376,7 +4376,6 @@ F: drivers/net/can/
|
|||||||
F: drivers/phy/phy-can-transceiver.c
|
F: drivers/phy/phy-can-transceiver.c
|
||||||
F: include/linux/can/bittiming.h
|
F: include/linux/can/bittiming.h
|
||||||
F: include/linux/can/dev.h
|
F: include/linux/can/dev.h
|
||||||
F: include/linux/can/led.h
|
|
||||||
F: include/linux/can/length.h
|
F: include/linux/can/length.h
|
||||||
F: include/linux/can/platform/
|
F: include/linux/can/platform/
|
||||||
F: include/linux/can/rx-offload.h
|
F: include/linux/can/rx-offload.h
|
||||||
|
@ -71,23 +71,6 @@ config CAN_CALC_BITTIMING
|
|||||||
arguments "tq", "prop_seg", "phase_seg1", "phase_seg2" and "sjw".
|
arguments "tq", "prop_seg", "phase_seg1", "phase_seg2" and "sjw".
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
config CAN_LEDS
|
|
||||||
bool "Enable LED triggers for Netlink based drivers"
|
|
||||||
depends on LEDS_CLASS
|
|
||||||
# The netdev trigger (LEDS_TRIGGER_NETDEV) should be able to do
|
|
||||||
# everything that this driver is doing. This is marked as broken
|
|
||||||
# because it uses stuff that is intended to be changed or removed.
|
|
||||||
# Please consider switching to the netdev trigger and confirm it
|
|
||||||
# fulfills your needs instead of fixing this driver.
|
|
||||||
depends on BROKEN
|
|
||||||
select LEDS_TRIGGERS
|
|
||||||
help
|
|
||||||
This option adds two LED triggers for packet receive and transmit
|
|
||||||
events on each supported CAN device.
|
|
||||||
|
|
||||||
Say Y here if you are working on a system with led-class supported
|
|
||||||
LEDs and you want to use them as canbus activity indicators.
|
|
||||||
|
|
||||||
config CAN_AT91
|
config CAN_AT91
|
||||||
tristate "Atmel AT91 onchip CAN controller"
|
tristate "Atmel AT91 onchip CAN controller"
|
||||||
depends on (ARCH_AT91 || COMPILE_TEST) && HAS_IOMEM
|
depends on (ARCH_AT91 || COMPILE_TEST) && HAS_IOMEM
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
|
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
|
|
||||||
#define AT91_MB_MASK(i) ((1 << (i)) - 1)
|
#define AT91_MB_MASK(i) ((1 << (i)) - 1)
|
||||||
|
|
||||||
@ -618,8 +617,6 @@ static void at91_read_msg(struct net_device *dev, unsigned int mb)
|
|||||||
stats->rx_bytes += cf->len;
|
stats->rx_bytes += cf->len;
|
||||||
|
|
||||||
netif_receive_skb(skb);
|
netif_receive_skb(skb);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_RX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -854,7 +851,6 @@ static void at91_irq_tx(struct net_device *dev, u32 reg_sr)
|
|||||||
mb - get_mb_tx_first(priv),
|
mb - get_mb_tx_first(priv),
|
||||||
NULL);
|
NULL);
|
||||||
dev->stats.tx_packets++;
|
dev->stats.tx_packets++;
|
||||||
can_led_event(dev, CAN_LED_EVENT_TX);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1101,8 +1097,6 @@ static int at91_open(struct net_device *dev)
|
|||||||
goto out_close;
|
goto out_close;
|
||||||
}
|
}
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_OPEN);
|
|
||||||
|
|
||||||
/* start chip and queuing */
|
/* start chip and queuing */
|
||||||
at91_chip_start(dev);
|
at91_chip_start(dev);
|
||||||
napi_enable(&priv->napi);
|
napi_enable(&priv->napi);
|
||||||
@ -1133,8 +1127,6 @@ static int at91_close(struct net_device *dev)
|
|||||||
|
|
||||||
close_candev(dev);
|
close_candev(dev);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1331,8 +1323,6 @@ static int at91_can_probe(struct platform_device *pdev)
|
|||||||
goto exit_free;
|
goto exit_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
devm_can_led_init(dev);
|
|
||||||
|
|
||||||
dev_info(&pdev->dev, "device registered (reg_base=%p, irq=%d)\n",
|
dev_info(&pdev->dev, "device registered (reg_base=%p, irq=%d)\n",
|
||||||
priv->reg_base, dev->irq);
|
priv->reg_base, dev->irq);
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@
|
|||||||
#include <linux/can.h>
|
#include <linux/can.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
|
|
||||||
#include "c_can.h"
|
#include "c_can.h"
|
||||||
|
|
||||||
@ -759,7 +758,6 @@ static void c_can_do_tx(struct net_device *dev)
|
|||||||
|
|
||||||
stats->tx_bytes += bytes;
|
stats->tx_bytes += bytes;
|
||||||
stats->tx_packets += pkts;
|
stats->tx_packets += pkts;
|
||||||
can_led_event(dev, CAN_LED_EVENT_TX);
|
|
||||||
|
|
||||||
tail = c_can_get_tx_tail(tx_ring);
|
tail = c_can_get_tx_tail(tx_ring);
|
||||||
|
|
||||||
@ -906,9 +904,6 @@ static int c_can_do_rx_poll(struct net_device *dev, int quota)
|
|||||||
quota -= n;
|
quota -= n;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pkts)
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_RX);
|
|
||||||
|
|
||||||
return pkts;
|
return pkts;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1182,8 +1177,6 @@ static int c_can_open(struct net_device *dev)
|
|||||||
if (err)
|
if (err)
|
||||||
goto exit_start_fail;
|
goto exit_start_fail;
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_OPEN);
|
|
||||||
|
|
||||||
napi_enable(&priv->napi);
|
napi_enable(&priv->napi);
|
||||||
/* enable status change, error and module interrupts */
|
/* enable status change, error and module interrupts */
|
||||||
c_can_irq_control(priv, true);
|
c_can_irq_control(priv, true);
|
||||||
@ -1214,8 +1207,6 @@ static int c_can_close(struct net_device *dev)
|
|||||||
c_can_reset_ram(priv, false);
|
c_can_reset_ram(priv, false);
|
||||||
c_can_pm_runtime_put_sync(priv);
|
c_can_pm_runtime_put_sync(priv);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1365,8 +1356,6 @@ static const struct net_device_ops c_can_netdev_ops = {
|
|||||||
|
|
||||||
int register_c_can_dev(struct net_device *dev)
|
int register_c_can_dev(struct net_device *dev)
|
||||||
{
|
{
|
||||||
int err;
|
|
||||||
|
|
||||||
/* Deactivate pins to prevent DRA7 DCAN IP from being
|
/* Deactivate pins to prevent DRA7 DCAN IP from being
|
||||||
* stuck in transition when module is disabled.
|
* stuck in transition when module is disabled.
|
||||||
* Pins are activated in c_can_start() and deactivated
|
* Pins are activated in c_can_start() and deactivated
|
||||||
@ -1378,10 +1367,7 @@ int register_c_can_dev(struct net_device *dev)
|
|||||||
dev->netdev_ops = &c_can_netdev_ops;
|
dev->netdev_ops = &c_can_netdev_ops;
|
||||||
c_can_set_ethtool_ops(dev);
|
c_can_set_ethtool_ops(dev);
|
||||||
|
|
||||||
err = register_candev(dev);
|
return register_candev(dev);
|
||||||
if (!err)
|
|
||||||
devm_can_led_init(dev);
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(register_c_can_dev);
|
EXPORT_SYMBOL_GPL(register_c_can_dev);
|
||||||
|
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/pm_runtime.h>
|
#include <linux/pm_runtime.h>
|
||||||
|
|
||||||
#include "ctucanfd.h"
|
#include "ctucanfd.h"
|
||||||
@ -957,9 +956,6 @@ static int ctucan_rx_poll(struct napi_struct *napi, int quota)
|
|||||||
ctucan_write32(priv, CTUCANFD_COMMAND, REG_COMMAND_CDO);
|
ctucan_write32(priv, CTUCANFD_COMMAND, REG_COMMAND_CDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (work_done)
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_RX);
|
|
||||||
|
|
||||||
if (!framecnt && res != 0) {
|
if (!framecnt && res != 0) {
|
||||||
if (napi_complete_done(napi, work_done)) {
|
if (napi_complete_done(napi, work_done)) {
|
||||||
/* Clear and enable RBNEI. It is level-triggered, so
|
/* Clear and enable RBNEI. It is level-triggered, so
|
||||||
@ -1079,8 +1075,6 @@ static void ctucan_tx_interrupt(struct net_device *ndev)
|
|||||||
}
|
}
|
||||||
} while (some_buffers_processed);
|
} while (some_buffers_processed);
|
||||||
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_TX);
|
|
||||||
|
|
||||||
spin_lock_irqsave(&priv->tx_lock, flags);
|
spin_lock_irqsave(&priv->tx_lock, flags);
|
||||||
|
|
||||||
/* Check if at least one TX buffer is free */
|
/* Check if at least one TX buffer is free */
|
||||||
@ -1236,7 +1230,6 @@ static int ctucan_open(struct net_device *ndev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
netdev_info(ndev, "ctu_can_fd device registered\n");
|
netdev_info(ndev, "ctu_can_fd device registered\n");
|
||||||
can_led_event(ndev, CAN_LED_EVENT_OPEN);
|
|
||||||
napi_enable(&priv->napi);
|
napi_enable(&priv->napi);
|
||||||
netif_start_queue(ndev);
|
netif_start_queue(ndev);
|
||||||
|
|
||||||
@ -1269,7 +1262,6 @@ static int ctucan_close(struct net_device *ndev)
|
|||||||
free_irq(ndev->irq, ndev);
|
free_irq(ndev->irq, ndev);
|
||||||
close_candev(ndev);
|
close_candev(ndev);
|
||||||
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_STOP);
|
|
||||||
pm_runtime_put(priv->dev);
|
pm_runtime_put(priv->dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1434,8 +1426,6 @@ int ctucan_probe_common(struct device *dev, void __iomem *addr, int irq, unsigne
|
|||||||
goto err_deviceoff;
|
goto err_deviceoff;
|
||||||
}
|
}
|
||||||
|
|
||||||
devm_can_led_init(ndev);
|
|
||||||
|
|
||||||
pm_runtime_put(dev);
|
pm_runtime_put(dev);
|
||||||
|
|
||||||
netdev_dbg(ndev, "mem_base=0x%p irq=%d clock=%d, no. of txt buffers:%d\n",
|
netdev_dbg(ndev, "mem_base=0x%p irq=%d clock=%d, no. of txt buffers:%d\n",
|
||||||
|
@ -7,5 +7,3 @@ can-dev-y += length.o
|
|||||||
can-dev-y += netlink.o
|
can-dev-y += netlink.o
|
||||||
can-dev-y += rx-offload.o
|
can-dev-y += rx-offload.o
|
||||||
can-dev-y += skb.o
|
can-dev-y += skb.o
|
||||||
|
|
||||||
can-dev-$(CONFIG_CAN_LEDS) += led.o
|
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
#include <linux/can/can-ml.h>
|
#include <linux/can/can-ml.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/skb.h>
|
#include <linux/can/skb.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/gpio/consumer.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
|
||||||
@ -512,8 +511,6 @@ static __init int can_dev_init(void)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
can_led_notifier_init();
|
|
||||||
|
|
||||||
err = can_netlink_register();
|
err = can_netlink_register();
|
||||||
if (!err)
|
if (!err)
|
||||||
pr_info(MOD_DESC "\n");
|
pr_info(MOD_DESC "\n");
|
||||||
@ -525,8 +522,6 @@ module_init(can_dev_init);
|
|||||||
static __exit void can_dev_exit(void)
|
static __exit void can_dev_exit(void)
|
||||||
{
|
{
|
||||||
can_netlink_unregister();
|
can_netlink_unregister();
|
||||||
|
|
||||||
can_led_notifier_exit();
|
|
||||||
}
|
}
|
||||||
module_exit(can_dev_exit);
|
module_exit(can_dev_exit);
|
||||||
|
|
||||||
|
@ -70,8 +70,6 @@ static int can_rx_offload_napi_poll(struct napi_struct *napi, int quota)
|
|||||||
napi_reschedule(&offload->napi);
|
napi_reschedule(&offload->napi);
|
||||||
}
|
}
|
||||||
|
|
||||||
can_led_event(offload->dev, CAN_LED_EVENT_RX);
|
|
||||||
|
|
||||||
return work_done;
|
return work_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
#include <linux/can.h>
|
#include <linux/can.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/firmware/imx/sci.h>
|
#include <linux/firmware/imx/sci.h>
|
||||||
@ -1081,7 +1080,6 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id)
|
|||||||
can_rx_offload_get_echo_skb(&priv->offload, 0,
|
can_rx_offload_get_echo_skb(&priv->offload, 0,
|
||||||
reg_ctrl << 16, NULL);
|
reg_ctrl << 16, NULL);
|
||||||
stats->tx_packets++;
|
stats->tx_packets++;
|
||||||
can_led_event(dev, CAN_LED_EVENT_TX);
|
|
||||||
|
|
||||||
/* after sending a RTR frame MB is in RX mode */
|
/* after sending a RTR frame MB is in RX mode */
|
||||||
priv->write(FLEXCAN_MB_CODE_TX_INACTIVE,
|
priv->write(FLEXCAN_MB_CODE_TX_INACTIVE,
|
||||||
@ -1738,8 +1736,6 @@ static int flexcan_open(struct net_device *dev)
|
|||||||
|
|
||||||
flexcan_chip_interrupts_enable(dev);
|
flexcan_chip_interrupts_enable(dev);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_OPEN);
|
|
||||||
|
|
||||||
netif_start_queue(dev);
|
netif_start_queue(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1785,8 +1781,6 @@ static int flexcan_close(struct net_device *dev)
|
|||||||
|
|
||||||
pm_runtime_put(priv->dev);
|
pm_runtime_put(priv->dev);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2189,7 +2183,6 @@ static int flexcan_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
of_can_transceiver(dev);
|
of_can_transceiver(dev);
|
||||||
devm_can_led_init(dev);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -345,9 +345,6 @@ static int ifi_canfd_do_rx_poll(struct net_device *ndev, int quota)
|
|||||||
rxst = readl(priv->base + IFI_CANFD_RXSTCMD);
|
rxst = readl(priv->base + IFI_CANFD_RXSTCMD);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pkts)
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_RX);
|
|
||||||
|
|
||||||
return pkts;
|
return pkts;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -626,7 +623,6 @@ static irqreturn_t ifi_canfd_isr(int irq, void *dev_id)
|
|||||||
if (isr & IFI_CANFD_INTERRUPT_TXFIFO_REMOVE) {
|
if (isr & IFI_CANFD_INTERRUPT_TXFIFO_REMOVE) {
|
||||||
stats->tx_bytes += can_get_echo_skb(ndev, 0, NULL);
|
stats->tx_bytes += can_get_echo_skb(ndev, 0, NULL);
|
||||||
stats->tx_packets++;
|
stats->tx_packets++;
|
||||||
can_led_event(ndev, CAN_LED_EVENT_TX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isr & tx_irq_mask)
|
if (isr & tx_irq_mask)
|
||||||
@ -830,7 +826,6 @@ static int ifi_canfd_open(struct net_device *ndev)
|
|||||||
|
|
||||||
ifi_canfd_start(ndev);
|
ifi_canfd_start(ndev);
|
||||||
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_OPEN);
|
|
||||||
napi_enable(&priv->napi);
|
napi_enable(&priv->napi);
|
||||||
netif_start_queue(ndev);
|
netif_start_queue(ndev);
|
||||||
|
|
||||||
@ -853,8 +848,6 @@ static int ifi_canfd_close(struct net_device *ndev)
|
|||||||
|
|
||||||
close_candev(ndev);
|
close_candev(ndev);
|
||||||
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1004,8 +997,6 @@ static int ifi_canfd_plat_probe(struct platform_device *pdev)
|
|||||||
goto err_reg;
|
goto err_reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
devm_can_led_init(ndev);
|
|
||||||
|
|
||||||
dev_info(dev, "Driver registered: regs=%p, irq=%d, clock=%d\n",
|
dev_info(dev, "Driver registered: regs=%p, irq=%d, clock=%d\n",
|
||||||
priv->base, ndev->irq, priv->can.clock.freq);
|
priv->base, ndev->irq, priv->can.clock.freq);
|
||||||
|
|
||||||
|
@ -1,140 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
/*
|
|
||||||
* Copyright 2012, Fabio Baltieri <fabio.baltieri@gmail.com>
|
|
||||||
* Copyright 2012, Kurt Van Dijck <kurt.van.dijck@eia.be>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/device.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/netdevice.h>
|
|
||||||
#include <linux/can/dev.h>
|
|
||||||
|
|
||||||
#include <linux/can/led.h>
|
|
||||||
|
|
||||||
static unsigned long led_delay = 50;
|
|
||||||
module_param(led_delay, ulong, 0644);
|
|
||||||
MODULE_PARM_DESC(led_delay,
|
|
||||||
"blink delay time for activity leds (msecs, default: 50).");
|
|
||||||
|
|
||||||
/* Trigger a LED event in response to a CAN device event */
|
|
||||||
void can_led_event(struct net_device *netdev, enum can_led_event event)
|
|
||||||
{
|
|
||||||
struct can_priv *priv = netdev_priv(netdev);
|
|
||||||
|
|
||||||
switch (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) {
|
|
||||||
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) {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(can_led_event);
|
|
||||||
|
|
||||||
static void can_led_release(struct device *gendev, void *res)
|
|
||||||
{
|
|
||||||
struct can_priv *priv = netdev_priv(to_net_dev(gendev));
|
|
||||||
|
|
||||||
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
|
|
||||||
*
|
|
||||||
* This is normally called from a driver's probe function
|
|
||||||
*/
|
|
||||||
void devm_can_led_init(struct net_device *netdev)
|
|
||||||
{
|
|
||||||
struct can_priv *priv = netdev_priv(netdev);
|
|
||||||
void *res;
|
|
||||||
|
|
||||||
res = devres_alloc(can_led_release, 0, GFP_KERNEL);
|
|
||||||
if (!res) {
|
|
||||||
netdev_err(netdev, "cannot register LED triggers\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf(priv->tx_led_trig_name, sizeof(priv->tx_led_trig_name),
|
|
||||||
"%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);
|
|
||||||
}
|
|
||||||
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 *ptr)
|
|
||||||
{
|
|
||||||
struct net_device *netdev = netdev_notifier_info_to_dev(ptr);
|
|
||||||
struct can_priv *priv = safe_candev_priv(netdev);
|
|
||||||
char name[CAN_LED_NAME_SZ];
|
|
||||||
|
|
||||||
if (!priv)
|
|
||||||
return NOTIFY_DONE;
|
|
||||||
|
|
||||||
if (!priv->tx_led_trig || !priv->rx_led_trig || !priv->rxtx_led_trig)
|
|
||||||
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);
|
|
||||||
|
|
||||||
snprintf(name, sizeof(name), "%s-rxtx", netdev->name);
|
|
||||||
led_trigger_rename_static(name, priv->rxtx_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);
|
|
||||||
}
|
|
@ -565,9 +565,6 @@ static int m_can_do_rx_poll(struct net_device *dev, int quota)
|
|||||||
rxfs = m_can_read(cdev, M_CAN_RXF0S);
|
rxfs = m_can_read(cdev, M_CAN_RXF0S);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pkts)
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_RX);
|
|
||||||
|
|
||||||
return pkts;
|
return pkts;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1087,8 +1084,6 @@ static irqreturn_t m_can_isr(int irq, void *dev_id)
|
|||||||
if (cdev->is_peripheral)
|
if (cdev->is_peripheral)
|
||||||
timestamp = m_can_get_timestamp(cdev);
|
timestamp = m_can_get_timestamp(cdev);
|
||||||
m_can_tx_update_stats(cdev, 0, timestamp);
|
m_can_tx_update_stats(cdev, 0, timestamp);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_TX);
|
|
||||||
netif_wake_queue(dev);
|
netif_wake_queue(dev);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -1097,7 +1092,6 @@ static irqreturn_t m_can_isr(int irq, void *dev_id)
|
|||||||
if (m_can_echo_tx_event(dev) != 0)
|
if (m_can_echo_tx_event(dev) != 0)
|
||||||
goto out_fail;
|
goto out_fail;
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_TX);
|
|
||||||
if (netif_queue_stopped(dev) &&
|
if (netif_queue_stopped(dev) &&
|
||||||
!m_can_tx_fifo_full(cdev))
|
!m_can_tx_fifo_full(cdev))
|
||||||
netif_wake_queue(dev);
|
netif_wake_queue(dev);
|
||||||
@ -1562,7 +1556,6 @@ static int m_can_close(struct net_device *dev)
|
|||||||
can_rx_offload_disable(&cdev->offload);
|
can_rx_offload_disable(&cdev->offload);
|
||||||
|
|
||||||
close_candev(dev);
|
close_candev(dev);
|
||||||
can_led_event(dev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
phy_power_off(cdev->transceiver);
|
phy_power_off(cdev->transceiver);
|
||||||
|
|
||||||
@ -1806,8 +1799,6 @@ static int m_can_open(struct net_device *dev)
|
|||||||
/* start the m_can controller */
|
/* start the m_can controller */
|
||||||
m_can_start(dev);
|
m_can_start(dev);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_OPEN);
|
|
||||||
|
|
||||||
if (!cdev->is_peripheral)
|
if (!cdev->is_peripheral)
|
||||||
napi_enable(&cdev->napi);
|
napi_enable(&cdev->napi);
|
||||||
|
|
||||||
@ -1995,8 +1986,6 @@ int m_can_class_register(struct m_can_classdev *cdev)
|
|||||||
goto rx_offload_del;
|
goto rx_offload_del;
|
||||||
}
|
}
|
||||||
|
|
||||||
devm_can_led_init(cdev->net);
|
|
||||||
|
|
||||||
of_can_transceiver(cdev->net);
|
of_can_transceiver(cdev->net);
|
||||||
|
|
||||||
dev_info(cdev->dev, "%s device registered (irq=%d, version=%d)\n",
|
dev_info(cdev->dev, "%s device registered (irq=%d, version=%d)\n",
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#define _CAN_M_CAN_H_
|
#define _CAN_M_CAN_H_
|
||||||
|
|
||||||
#include <linux/can/core.h>
|
#include <linux/can/core.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/can/rx-offload.h>
|
#include <linux/can/rx-offload.h>
|
||||||
#include <linux/completion.h>
|
#include <linux/completion.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
@ -389,7 +388,6 @@ static void rcar_can_tx_done(struct net_device *ndev)
|
|||||||
/* Clear interrupt */
|
/* Clear interrupt */
|
||||||
isr = readb(&priv->regs->isr);
|
isr = readb(&priv->regs->isr);
|
||||||
writeb(isr & ~RCAR_CAN_ISR_TXFF, &priv->regs->isr);
|
writeb(isr & ~RCAR_CAN_ISR_TXFF, &priv->regs->isr);
|
||||||
can_led_event(ndev, CAN_LED_EVENT_TX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t rcar_can_interrupt(int irq, void *dev_id)
|
static irqreturn_t rcar_can_interrupt(int irq, void *dev_id)
|
||||||
@ -531,7 +529,6 @@ static int rcar_can_open(struct net_device *ndev)
|
|||||||
ndev->irq, err);
|
ndev->irq, err);
|
||||||
goto out_close;
|
goto out_close;
|
||||||
}
|
}
|
||||||
can_led_event(ndev, CAN_LED_EVENT_OPEN);
|
|
||||||
rcar_can_start(ndev);
|
rcar_can_start(ndev);
|
||||||
netif_start_queue(ndev);
|
netif_start_queue(ndev);
|
||||||
return 0;
|
return 0;
|
||||||
@ -581,7 +578,6 @@ static int rcar_can_close(struct net_device *ndev)
|
|||||||
clk_disable_unprepare(priv->can_clk);
|
clk_disable_unprepare(priv->can_clk);
|
||||||
clk_disable_unprepare(priv->clk);
|
clk_disable_unprepare(priv->clk);
|
||||||
close_candev(ndev);
|
close_candev(ndev);
|
||||||
can_led_event(ndev, CAN_LED_EVENT_STOP);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -666,8 +662,6 @@ static void rcar_can_rx_pkt(struct rcar_can_priv *priv)
|
|||||||
}
|
}
|
||||||
stats->rx_packets++;
|
stats->rx_packets++;
|
||||||
|
|
||||||
can_led_event(priv->ndev, CAN_LED_EVENT_RX);
|
|
||||||
|
|
||||||
netif_receive_skb(skb);
|
netif_receive_skb(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -812,8 +806,6 @@ static int rcar_can_probe(struct platform_device *pdev)
|
|||||||
goto fail_candev;
|
goto fail_candev;
|
||||||
}
|
}
|
||||||
|
|
||||||
devm_can_led_init(ndev);
|
|
||||||
|
|
||||||
dev_info(&pdev->dev, "device registered (IRQ%d)\n", ndev->irq);
|
dev_info(&pdev->dev, "device registered (IRQ%d)\n", ndev->irq);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
@ -1128,7 +1127,6 @@ static void rcar_canfd_tx_done(struct net_device *ndev)
|
|||||||
/* Clear interrupt */
|
/* Clear interrupt */
|
||||||
rcar_canfd_write(priv->base, RCANFD_CFSTS(gpriv, ch, RCANFD_CFFIFO_IDX),
|
rcar_canfd_write(priv->base, RCANFD_CFSTS(gpriv, ch, RCANFD_CFFIFO_IDX),
|
||||||
sts & ~RCANFD_CFSTS_CFTXIF);
|
sts & ~RCANFD_CFSTS_CFTXIF);
|
||||||
can_led_event(ndev, CAN_LED_EVENT_TX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rcar_canfd_handle_global_err(struct rcar_canfd_global *gpriv, u32 ch)
|
static void rcar_canfd_handle_global_err(struct rcar_canfd_global *gpriv, u32 ch)
|
||||||
@ -1419,7 +1417,6 @@ static int rcar_canfd_open(struct net_device *ndev)
|
|||||||
if (err)
|
if (err)
|
||||||
goto out_close;
|
goto out_close;
|
||||||
netif_start_queue(ndev);
|
netif_start_queue(ndev);
|
||||||
can_led_event(ndev, CAN_LED_EVENT_OPEN);
|
|
||||||
return 0;
|
return 0;
|
||||||
out_close:
|
out_close:
|
||||||
napi_disable(&priv->napi);
|
napi_disable(&priv->napi);
|
||||||
@ -1469,7 +1466,6 @@ static int rcar_canfd_close(struct net_device *ndev)
|
|||||||
napi_disable(&priv->napi);
|
napi_disable(&priv->napi);
|
||||||
clk_disable_unprepare(gpriv->can_clk);
|
clk_disable_unprepare(gpriv->can_clk);
|
||||||
close_candev(ndev);
|
close_candev(ndev);
|
||||||
can_led_event(ndev, CAN_LED_EVENT_STOP);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1619,8 +1615,6 @@ static void rcar_canfd_rx_pkt(struct rcar_canfd_channel *priv)
|
|||||||
*/
|
*/
|
||||||
rcar_canfd_write(priv->base, RCANFD_RFPCTR(gpriv, ridx), 0xff);
|
rcar_canfd_write(priv->base, RCANFD_RFPCTR(gpriv, ridx), 0xff);
|
||||||
|
|
||||||
can_led_event(priv->ndev, CAN_LED_EVENT_RX);
|
|
||||||
|
|
||||||
if (!(cf->can_id & CAN_RTR_FLAG))
|
if (!(cf->can_id & CAN_RTR_FLAG))
|
||||||
stats->rx_bytes += cf->len;
|
stats->rx_bytes += cf->len;
|
||||||
stats->rx_packets++;
|
stats->rx_packets++;
|
||||||
@ -1792,7 +1786,6 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
|
|||||||
netif_napi_add_weight(ndev, &priv->napi, rcar_canfd_rx_poll,
|
netif_napi_add_weight(ndev, &priv->napi, rcar_canfd_rx_poll,
|
||||||
RCANFD_NAPI_WEIGHT);
|
RCANFD_NAPI_WEIGHT);
|
||||||
spin_lock_init(&priv->tx_lock);
|
spin_lock_init(&priv->tx_lock);
|
||||||
devm_can_led_init(ndev);
|
|
||||||
gpriv->ch[priv->channel] = priv;
|
gpriv->ch[priv->channel] = priv;
|
||||||
err = register_candev(ndev);
|
err = register_candev(ndev);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -60,7 +60,6 @@
|
|||||||
|
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
|
|
||||||
#include "sja1000.h"
|
#include "sja1000.h"
|
||||||
|
|
||||||
@ -383,8 +382,6 @@ static void sja1000_rx(struct net_device *dev)
|
|||||||
sja1000_write_cmdreg(priv, CMD_RRB);
|
sja1000_write_cmdreg(priv, CMD_RRB);
|
||||||
|
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_RX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
|
static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
|
||||||
@ -531,7 +528,6 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
|
|||||||
stats->tx_packets++;
|
stats->tx_packets++;
|
||||||
}
|
}
|
||||||
netif_wake_queue(dev);
|
netif_wake_queue(dev);
|
||||||
can_led_event(dev, CAN_LED_EVENT_TX);
|
|
||||||
}
|
}
|
||||||
if (isrc & IRQ_RI) {
|
if (isrc & IRQ_RI) {
|
||||||
/* receive interrupt */
|
/* receive interrupt */
|
||||||
@ -587,8 +583,6 @@ static int sja1000_open(struct net_device *dev)
|
|||||||
/* init and start chi */
|
/* init and start chi */
|
||||||
sja1000_start(dev);
|
sja1000_start(dev);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_OPEN);
|
|
||||||
|
|
||||||
netif_start_queue(dev);
|
netif_start_queue(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -606,8 +600,6 @@ static int sja1000_close(struct net_device *dev)
|
|||||||
|
|
||||||
close_candev(dev);
|
close_candev(dev);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -673,9 +665,6 @@ int register_sja1000dev(struct net_device *dev)
|
|||||||
|
|
||||||
ret = register_candev(dev);
|
ret = register_candev(dev);
|
||||||
|
|
||||||
if (!ret)
|
|
||||||
devm_can_led_init(dev);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(register_sja1000dev);
|
EXPORT_SYMBOL_GPL(register_sja1000dev);
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
#include <linux/can/core.h>
|
#include <linux/can/core.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/completion.h>
|
#include <linux/completion.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
@ -354,8 +353,6 @@ static void hi3110_hw_rx(struct spi_device *spi)
|
|||||||
}
|
}
|
||||||
priv->net->stats.rx_packets++;
|
priv->net->stats.rx_packets++;
|
||||||
|
|
||||||
can_led_event(priv->net, CAN_LED_EVENT_RX);
|
|
||||||
|
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,8 +564,6 @@ static int hi3110_stop(struct net_device *net)
|
|||||||
|
|
||||||
mutex_unlock(&priv->hi3110_lock);
|
mutex_unlock(&priv->hi3110_lock);
|
||||||
|
|
||||||
can_led_event(net, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -725,7 +720,6 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
|
|||||||
if (priv->tx_busy && statf & HI3110_STAT_TXMTY) {
|
if (priv->tx_busy && statf & HI3110_STAT_TXMTY) {
|
||||||
net->stats.tx_packets++;
|
net->stats.tx_packets++;
|
||||||
net->stats.tx_bytes += can_get_echo_skb(net, 0, NULL);
|
net->stats.tx_bytes += can_get_echo_skb(net, 0, NULL);
|
||||||
can_led_event(net, CAN_LED_EVENT_TX);
|
|
||||||
priv->tx_busy = false;
|
priv->tx_busy = false;
|
||||||
netif_wake_queue(net);
|
netif_wake_queue(net);
|
||||||
}
|
}
|
||||||
@ -783,7 +777,6 @@ static int hi3110_open(struct net_device *net)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto out_free_wq;
|
goto out_free_wq;
|
||||||
|
|
||||||
can_led_event(net, CAN_LED_EVENT_OPEN);
|
|
||||||
netif_wake_queue(net);
|
netif_wake_queue(net);
|
||||||
mutex_unlock(&priv->hi3110_lock);
|
mutex_unlock(&priv->hi3110_lock);
|
||||||
|
|
||||||
@ -931,7 +924,6 @@ static int hi3110_can_probe(struct spi_device *spi)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto error_probe;
|
goto error_probe;
|
||||||
|
|
||||||
devm_can_led_init(net);
|
|
||||||
netdev_info(net, "%x successfully initialized.\n", priv->model);
|
netdev_info(net, "%x successfully initialized.\n", priv->model);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include <linux/bitfield.h>
|
#include <linux/bitfield.h>
|
||||||
#include <linux/can/core.h>
|
#include <linux/can/core.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/completion.h>
|
#include <linux/completion.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
@ -738,8 +737,6 @@ static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx)
|
|||||||
}
|
}
|
||||||
priv->net->stats.rx_packets++;
|
priv->net->stats.rx_packets++;
|
||||||
|
|
||||||
can_led_event(priv->net, CAN_LED_EVENT_RX);
|
|
||||||
|
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -973,8 +970,6 @@ static int mcp251x_stop(struct net_device *net)
|
|||||||
|
|
||||||
mutex_unlock(&priv->mcp_lock);
|
mutex_unlock(&priv->mcp_lock);
|
||||||
|
|
||||||
can_led_event(net, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1177,7 +1172,6 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
if (intf & CANINTF_TX) {
|
if (intf & CANINTF_TX) {
|
||||||
can_led_event(net, CAN_LED_EVENT_TX);
|
|
||||||
if (priv->tx_busy) {
|
if (priv->tx_busy) {
|
||||||
net->stats.tx_packets++;
|
net->stats.tx_packets++;
|
||||||
net->stats.tx_bytes += can_get_echo_skb(net, 0,
|
net->stats.tx_bytes += can_get_echo_skb(net, 0,
|
||||||
@ -1232,8 +1226,6 @@ static int mcp251x_open(struct net_device *net)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto out_free_irq;
|
goto out_free_irq;
|
||||||
|
|
||||||
can_led_event(net, CAN_LED_EVENT_OPEN);
|
|
||||||
|
|
||||||
netif_wake_queue(net);
|
netif_wake_queue(net);
|
||||||
mutex_unlock(&priv->mcp_lock);
|
mutex_unlock(&priv->mcp_lock);
|
||||||
|
|
||||||
@ -1403,8 +1395,6 @@ static int mcp251x_can_probe(struct spi_device *spi)
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto error_probe;
|
goto error_probe;
|
||||||
|
|
||||||
devm_can_led_init(net);
|
|
||||||
|
|
||||||
ret = mcp251x_gpio_setup(priv);
|
ret = mcp251x_gpio_setup(priv);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error_probe;
|
goto error_probe;
|
||||||
|
@ -51,7 +51,6 @@
|
|||||||
#include <linux/can.h>
|
#include <linux/can.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
@ -516,8 +515,6 @@ static void sun4i_can_rx(struct net_device *dev)
|
|||||||
sun4i_can_write_cmdreg(priv, SUN4I_CMD_RELEASE_RBUF);
|
sun4i_can_write_cmdreg(priv, SUN4I_CMD_RELEASE_RBUF);
|
||||||
|
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_RX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sun4i_can_err(struct net_device *dev, u8 isrc, u8 status)
|
static int sun4i_can_err(struct net_device *dev, u8 isrc, u8 status)
|
||||||
@ -664,7 +661,6 @@ static irqreturn_t sun4i_can_interrupt(int irq, void *dev_id)
|
|||||||
stats->tx_bytes += can_get_echo_skb(dev, 0, NULL);
|
stats->tx_bytes += can_get_echo_skb(dev, 0, NULL);
|
||||||
stats->tx_packets++;
|
stats->tx_packets++;
|
||||||
netif_wake_queue(dev);
|
netif_wake_queue(dev);
|
||||||
can_led_event(dev, CAN_LED_EVENT_TX);
|
|
||||||
}
|
}
|
||||||
if ((isrc & SUN4I_INT_RBUF_VLD) &&
|
if ((isrc & SUN4I_INT_RBUF_VLD) &&
|
||||||
!(isrc & SUN4I_INT_DATA_OR)) {
|
!(isrc & SUN4I_INT_DATA_OR)) {
|
||||||
@ -729,7 +725,6 @@ static int sun4ican_open(struct net_device *dev)
|
|||||||
goto exit_can_start;
|
goto exit_can_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
can_led_event(dev, CAN_LED_EVENT_OPEN);
|
|
||||||
netif_start_queue(dev);
|
netif_start_queue(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -756,7 +751,6 @@ static int sun4ican_close(struct net_device *dev)
|
|||||||
|
|
||||||
free_irq(dev->irq, dev);
|
free_irq(dev->irq, dev);
|
||||||
close_candev(dev);
|
close_candev(dev);
|
||||||
can_led_event(dev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -883,7 +877,6 @@ static int sun4ican_probe(struct platform_device *pdev)
|
|||||||
DRV_NAME, err);
|
DRV_NAME, err);
|
||||||
goto exit_free;
|
goto exit_free;
|
||||||
}
|
}
|
||||||
devm_can_led_init(dev);
|
|
||||||
|
|
||||||
dev_info(&pdev->dev, "device registered (base=%p, irq=%d)\n",
|
dev_info(&pdev->dev, "device registered (base=%p, irq=%d)\n",
|
||||||
priv->base, dev->irq);
|
priv->base, dev->irq);
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
|
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/can/rx-offload.h>
|
#include <linux/can/rx-offload.h>
|
||||||
|
|
||||||
#define DRV_NAME "ti_hecc"
|
#define DRV_NAME "ti_hecc"
|
||||||
@ -759,7 +758,6 @@ static irqreturn_t ti_hecc_interrupt(int irq, void *dev_id)
|
|||||||
can_rx_offload_get_echo_skb(&priv->offload,
|
can_rx_offload_get_echo_skb(&priv->offload,
|
||||||
mbxno, stamp, NULL);
|
mbxno, stamp, NULL);
|
||||||
stats->tx_packets++;
|
stats->tx_packets++;
|
||||||
can_led_event(ndev, CAN_LED_EVENT_TX);
|
|
||||||
--priv->tx_tail;
|
--priv->tx_tail;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,8 +812,6 @@ static int ti_hecc_open(struct net_device *ndev)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_OPEN);
|
|
||||||
|
|
||||||
ti_hecc_start(ndev);
|
ti_hecc_start(ndev);
|
||||||
can_rx_offload_enable(&priv->offload);
|
can_rx_offload_enable(&priv->offload);
|
||||||
netif_start_queue(ndev);
|
netif_start_queue(ndev);
|
||||||
@ -834,8 +830,6 @@ static int ti_hecc_close(struct net_device *ndev)
|
|||||||
close_candev(ndev);
|
close_candev(ndev);
|
||||||
ti_hecc_transceiver_switch(priv, 0);
|
ti_hecc_transceiver_switch(priv, 0);
|
||||||
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -954,8 +948,6 @@ static int ti_hecc_probe(struct platform_device *pdev)
|
|||||||
goto probe_exit_offload;
|
goto probe_exit_offload;
|
||||||
}
|
}
|
||||||
|
|
||||||
devm_can_led_init(ndev);
|
|
||||||
|
|
||||||
dev_info(&pdev->dev, "device registered (reg_base=%p, irq=%u)\n",
|
dev_info(&pdev->dev, "device registered (reg_base=%p, irq=%u)\n",
|
||||||
priv->base, (u32)ndev->irq);
|
priv->base, (u32)ndev->irq);
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#include <linux/can.h>
|
#include <linux/can.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
#include <linux/signal.h>
|
#include <linux/signal.h>
|
||||||
@ -232,8 +231,6 @@ static void mcba_usb_write_bulk_callback(struct urb *urb)
|
|||||||
netdev->stats.tx_packets++;
|
netdev->stats.tx_packets++;
|
||||||
netdev->stats.tx_bytes += can_get_echo_skb(netdev, ctx->ndx,
|
netdev->stats.tx_bytes += can_get_echo_skb(netdev, ctx->ndx,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
can_led_event(netdev, CAN_LED_EVENT_TX);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (urb->status)
|
if (urb->status)
|
||||||
@ -452,7 +449,6 @@ static void mcba_usb_process_can(struct mcba_priv *priv,
|
|||||||
}
|
}
|
||||||
stats->rx_packets++;
|
stats->rx_packets++;
|
||||||
|
|
||||||
can_led_event(priv->netdev, CAN_LED_EVENT_RX);
|
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -700,7 +696,6 @@ static int mcba_usb_open(struct net_device *netdev)
|
|||||||
priv->can_speed_check = true;
|
priv->can_speed_check = true;
|
||||||
priv->can.state = CAN_STATE_ERROR_ACTIVE;
|
priv->can.state = CAN_STATE_ERROR_ACTIVE;
|
||||||
|
|
||||||
can_led_event(netdev, CAN_LED_EVENT_OPEN);
|
|
||||||
netif_start_queue(netdev);
|
netif_start_queue(netdev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -732,7 +727,6 @@ static int mcba_usb_close(struct net_device *netdev)
|
|||||||
mcba_urb_unlink(priv);
|
mcba_urb_unlink(priv);
|
||||||
|
|
||||||
close_candev(netdev);
|
close_candev(netdev);
|
||||||
can_led_event(netdev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -857,8 +851,6 @@ static int mcba_usb_probe(struct usb_interface *intf,
|
|||||||
priv->rx_pipe = usb_rcvbulkpipe(priv->udev, in->bEndpointAddress);
|
priv->rx_pipe = usb_rcvbulkpipe(priv->udev, in->bEndpointAddress);
|
||||||
priv->tx_pipe = usb_sndbulkpipe(priv->udev, out->bEndpointAddress);
|
priv->tx_pipe = usb_sndbulkpipe(priv->udev, out->bEndpointAddress);
|
||||||
|
|
||||||
devm_can_led_init(netdev);
|
|
||||||
|
|
||||||
/* Start USB dev only if we have successfully registered CAN device */
|
/* Start USB dev only if we have successfully registered CAN device */
|
||||||
err = mcba_usb_start(priv);
|
err = mcba_usb_start(priv);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
#include <linux/can.h>
|
#include <linux/can.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
|
|
||||||
/* driver constants */
|
/* driver constants */
|
||||||
#define MAX_RX_URBS 20
|
#define MAX_RX_URBS 20
|
||||||
@ -480,8 +479,6 @@ static void usb_8dev_rx_can_msg(struct usb_8dev_priv *priv,
|
|||||||
stats->rx_packets++;
|
stats->rx_packets++;
|
||||||
|
|
||||||
netif_rx(skb);
|
netif_rx(skb);
|
||||||
|
|
||||||
can_led_event(priv->netdev, CAN_LED_EVENT_RX);
|
|
||||||
} else {
|
} else {
|
||||||
netdev_warn(priv->netdev, "frame type %d unknown",
|
netdev_warn(priv->netdev, "frame type %d unknown",
|
||||||
msg->type);
|
msg->type);
|
||||||
@ -582,8 +579,6 @@ static void usb_8dev_write_bulk_callback(struct urb *urb)
|
|||||||
netdev->stats.tx_packets++;
|
netdev->stats.tx_packets++;
|
||||||
netdev->stats.tx_bytes += can_get_echo_skb(netdev, context->echo_index, NULL);
|
netdev->stats.tx_bytes += can_get_echo_skb(netdev, context->echo_index, NULL);
|
||||||
|
|
||||||
can_led_event(netdev, CAN_LED_EVENT_TX);
|
|
||||||
|
|
||||||
/* Release context */
|
/* Release context */
|
||||||
context->echo_index = MAX_TX_URBS;
|
context->echo_index = MAX_TX_URBS;
|
||||||
|
|
||||||
@ -807,8 +802,6 @@ static int usb_8dev_open(struct net_device *netdev)
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
can_led_event(netdev, CAN_LED_EVENT_OPEN);
|
|
||||||
|
|
||||||
/* finally start device */
|
/* finally start device */
|
||||||
err = usb_8dev_start(priv);
|
err = usb_8dev_start(priv);
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -865,8 +858,6 @@ static int usb_8dev_close(struct net_device *netdev)
|
|||||||
|
|
||||||
close_candev(netdev);
|
close_candev(netdev);
|
||||||
|
|
||||||
can_led_event(netdev, CAN_LED_EVENT_STOP);
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -974,8 +965,6 @@ static int usb_8dev_probe(struct usb_interface *intf,
|
|||||||
(version>>8) & 0xff, version & 0xff);
|
(version>>8) & 0xff, version & 0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
devm_can_led_init(netdev);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
cleanup_unregister_candev:
|
cleanup_unregister_candev:
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/can/dev.h>
|
#include <linux/can/dev.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/pm_runtime.h>
|
#include <linux/pm_runtime.h>
|
||||||
|
|
||||||
#define DRIVER_NAME "xilinx_can"
|
#define DRIVER_NAME "xilinx_can"
|
||||||
@ -1209,10 +1208,8 @@ static int xcan_rx_poll(struct napi_struct *napi, int quota)
|
|||||||
XCAN_IXR_RXNEMP_MASK);
|
XCAN_IXR_RXNEMP_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (work_done) {
|
if (work_done)
|
||||||
can_led_event(ndev, CAN_LED_EVENT_RX);
|
|
||||||
xcan_update_error_state_after_rxtx(ndev);
|
xcan_update_error_state_after_rxtx(ndev);
|
||||||
}
|
|
||||||
|
|
||||||
if (work_done < quota) {
|
if (work_done < quota) {
|
||||||
if (napi_complete_done(napi, work_done)) {
|
if (napi_complete_done(napi, work_done)) {
|
||||||
@ -1298,7 +1295,6 @@ static void xcan_tx_interrupt(struct net_device *ndev, u32 isr)
|
|||||||
|
|
||||||
spin_unlock_irqrestore(&priv->tx_lock, flags);
|
spin_unlock_irqrestore(&priv->tx_lock, flags);
|
||||||
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_TX);
|
|
||||||
xcan_update_error_state_after_rxtx(ndev);
|
xcan_update_error_state_after_rxtx(ndev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1420,7 +1416,6 @@ static int xcan_open(struct net_device *ndev)
|
|||||||
goto err_candev;
|
goto err_candev;
|
||||||
}
|
}
|
||||||
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_OPEN);
|
|
||||||
napi_enable(&priv->napi);
|
napi_enable(&priv->napi);
|
||||||
netif_start_queue(ndev);
|
netif_start_queue(ndev);
|
||||||
|
|
||||||
@ -1452,7 +1447,6 @@ static int xcan_close(struct net_device *ndev)
|
|||||||
free_irq(ndev->irq, ndev);
|
free_irq(ndev->irq, ndev);
|
||||||
close_candev(ndev);
|
close_candev(ndev);
|
||||||
|
|
||||||
can_led_event(ndev, CAN_LED_EVENT_STOP);
|
|
||||||
pm_runtime_put(priv->dev);
|
pm_runtime_put(priv->dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1812,8 +1806,6 @@ static int xcan_probe(struct platform_device *pdev)
|
|||||||
goto err_disableclks;
|
goto err_disableclks;
|
||||||
}
|
}
|
||||||
|
|
||||||
devm_can_led_init(ndev);
|
|
||||||
|
|
||||||
pm_runtime_put(&pdev->dev);
|
pm_runtime_put(&pdev->dev);
|
||||||
|
|
||||||
if (priv->devtype.flags & XCAN_FLAG_CANFD_2) {
|
if (priv->devtype.flags & XCAN_FLAG_CANFD_2) {
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
#include <linux/can.h>
|
#include <linux/can.h>
|
||||||
#include <linux/can/bittiming.h>
|
#include <linux/can/bittiming.h>
|
||||||
#include <linux/can/error.h>
|
#include <linux/can/error.h>
|
||||||
#include <linux/can/led.h>
|
|
||||||
#include <linux/can/length.h>
|
#include <linux/can/length.h>
|
||||||
#include <linux/can/netlink.h>
|
#include <linux/can/netlink.h>
|
||||||
#include <linux/can/skb.h>
|
#include <linux/can/skb.h>
|
||||||
@ -85,15 +84,6 @@ struct can_priv {
|
|||||||
int (*do_get_berr_counter)(const struct net_device *dev,
|
int (*do_get_berr_counter)(const struct net_device *dev,
|
||||||
struct can_berr_counter *bec);
|
struct can_berr_counter *bec);
|
||||||
int (*do_get_auto_tdcv)(const struct net_device *dev, u32 *tdcv);
|
int (*do_get_auto_tdcv)(const struct net_device *dev, u32 *tdcv);
|
||||||
|
|
||||||
#ifdef CONFIG_CAN_LEDS
|
|
||||||
struct led_trigger *tx_led_trig;
|
|
||||||
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
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline bool can_tdc_is_enabled(const struct can_priv *priv)
|
static inline bool can_tdc_is_enabled(const struct can_priv *priv)
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
||||||
/*
|
|
||||||
* Copyright 2012, Fabio Baltieri <fabio.baltieri@gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _CAN_LED_H
|
|
||||||
#define _CAN_LED_H
|
|
||||||
|
|
||||||
#include <linux/if.h>
|
|
||||||
#include <linux/leds.h>
|
|
||||||
#include <linux/netdevice.h>
|
|
||||||
|
|
||||||
enum can_led_event {
|
|
||||||
CAN_LED_EVENT_OPEN,
|
|
||||||
CAN_LED_EVENT_STOP,
|
|
||||||
CAN_LED_EVENT_TX,
|
|
||||||
CAN_LED_EVENT_RX,
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_CAN_LEDS
|
|
||||||
|
|
||||||
/* 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);
|
|
||||||
int __init can_led_notifier_init(void);
|
|
||||||
void __exit can_led_notifier_exit(void);
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
static inline void can_led_event(struct net_device *netdev,
|
|
||||||
enum can_led_event event)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
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
|
|
||||||
|
|
||||||
#endif /* !_CAN_LED_H */
|
|
Loading…
Reference in New Issue
Block a user