diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 00:04:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 00:04:44 -0400 |
commit | f8965467f366fd18f01feafb5db10512d7b4422c (patch) | |
tree | 3706a9cd779859271ca61b85c63a1bc3f82d626e /drivers/net/can | |
parent | a26272e5200765691e67d6780e52b32498fdb659 (diff) | |
parent | 2ec8c6bb5d8f3a62a79f463525054bae1e3d4487 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1674 commits)
qlcnic: adding co maintainer
ixgbe: add support for active DA cables
ixgbe: dcb, do not tag tc_prio_control frames
ixgbe: fix ixgbe_tx_is_paused logic
ixgbe: always enable vlan strip/insert when DCB is enabled
ixgbe: remove some redundant code in setting FCoE FIP filter
ixgbe: fix wrong offset to fc_frame_header in ixgbe_fcoe_ddp
ixgbe: fix header len when unsplit packet overflows to data buffer
ipv6: Never schedule DAD timer on dead address
ipv6: Use POSTDAD state
ipv6: Use state_lock to protect ifa state
ipv6: Replace inet6_ifaddr->dead with state
cxgb4: notify upper drivers if the device is already up when they load
cxgb4: keep interrupts available when the ports are brought down
cxgb4: fix initial addition of MAC address
cnic: Return SPQ credit to bnx2x after ring setup and shutdown.
cnic: Convert cnic_local_flags to atomic ops.
can: Fix SJA1000 command register writes on SMP systems
bridge: fix build for CONFIG_SYSFS disabled
ARCNET: Limit com20020 PCI ID matches for SOHARD cards
...
Fix up various conflicts with pcmcia tree drivers/net/
{pcmcia/3c589_cs.c, wireless/orinoco/orinoco_cs.c and
wireless/orinoco/spectrum_cs.c} and feature removal
(Documentation/feature-removal-schedule.txt).
Also fix a non-content conflict due to pm_qos_requirement getting
renamed in the PM tree (now pm_qos_request) in net/mac80211/scan.c
Diffstat (limited to 'drivers/net/can')
-rw-r--r-- | drivers/net/can/at91_can.c | 4 | ||||
-rw-r--r-- | drivers/net/can/bfin_can.c | 3 | ||||
-rw-r--r-- | drivers/net/can/mcp251x.c | 16 | ||||
-rw-r--r-- | drivers/net/can/mscan/mpc5xxx_can.c | 1 | ||||
-rw-r--r-- | drivers/net/can/mscan/mscan.c | 1 | ||||
-rw-r--r-- | drivers/net/can/sja1000/Kconfig | 4 | ||||
-rw-r--r-- | drivers/net/can/sja1000/ems_pci.c | 1 | ||||
-rw-r--r-- | drivers/net/can/sja1000/kvaser_pci.c | 1 | ||||
-rw-r--r-- | drivers/net/can/sja1000/plx_pci.c | 154 | ||||
-rw-r--r-- | drivers/net/can/sja1000/sja1000.c | 23 | ||||
-rw-r--r-- | drivers/net/can/sja1000/sja1000.h | 1 | ||||
-rw-r--r-- | drivers/net/can/sja1000/sja1000_isa.c | 1 | ||||
-rw-r--r-- | drivers/net/can/sja1000/sja1000_of_platform.c | 1 | ||||
-rw-r--r-- | drivers/net/can/sja1000/sja1000_platform.c | 48 | ||||
-rw-r--r-- | drivers/net/can/ti_hecc.c | 1 | ||||
-rw-r--r-- | drivers/net/can/usb/ems_usb.c | 4 |
16 files changed, 218 insertions, 46 deletions
diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c index a2f29a38798a..2d8bd86bc5e2 100644 --- a/drivers/net/can/at91_can.c +++ b/drivers/net/can/at91_can.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <linux/string.h> | 35 | #include <linux/string.h> |
36 | #include <linux/types.h> | 36 | #include <linux/types.h> |
37 | 37 | ||
38 | #include <linux/can.h> | ||
39 | #include <linux/can/dev.h> | 38 | #include <linux/can/dev.h> |
40 | #include <linux/can/error.h> | 39 | #include <linux/can/error.h> |
41 | 40 | ||
@@ -376,7 +375,6 @@ static netdev_tx_t at91_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
376 | at91_write(priv, AT91_MCR(mb), reg_mcr); | 375 | at91_write(priv, AT91_MCR(mb), reg_mcr); |
377 | 376 | ||
378 | stats->tx_bytes += cf->can_dlc; | 377 | stats->tx_bytes += cf->can_dlc; |
379 | dev->trans_start = jiffies; | ||
380 | 378 | ||
381 | /* _NOTE_: substract AT91_MB_TX_FIRST offset from mb! */ | 379 | /* _NOTE_: substract AT91_MB_TX_FIRST offset from mb! */ |
382 | can_put_echo_skb(skb, dev, mb - AT91_MB_TX_FIRST); | 380 | can_put_echo_skb(skb, dev, mb - AT91_MB_TX_FIRST); |
@@ -662,7 +660,6 @@ static int at91_poll_err(struct net_device *dev, int quota, u32 reg_sr) | |||
662 | at91_poll_err_frame(dev, cf, reg_sr); | 660 | at91_poll_err_frame(dev, cf, reg_sr); |
663 | netif_receive_skb(skb); | 661 | netif_receive_skb(skb); |
664 | 662 | ||
665 | dev->last_rx = jiffies; | ||
666 | dev->stats.rx_packets++; | 663 | dev->stats.rx_packets++; |
667 | dev->stats.rx_bytes += cf->can_dlc; | 664 | dev->stats.rx_bytes += cf->can_dlc; |
668 | 665 | ||
@@ -899,7 +896,6 @@ static void at91_irq_err(struct net_device *dev) | |||
899 | at91_irq_err_state(dev, cf, new_state); | 896 | at91_irq_err_state(dev, cf, new_state); |
900 | netif_rx(skb); | 897 | netif_rx(skb); |
901 | 898 | ||
902 | dev->last_rx = jiffies; | ||
903 | dev->stats.rx_packets++; | 899 | dev->stats.rx_packets++; |
904 | dev->stats.rx_bytes += cf->can_dlc; | 900 | dev->stats.rx_bytes += cf->can_dlc; |
905 | 901 | ||
diff --git a/drivers/net/can/bfin_can.c b/drivers/net/can/bfin_can.c index 03489864376d..b6e890d28366 100644 --- a/drivers/net/can/bfin_can.c +++ b/drivers/net/can/bfin_can.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <linux/skbuff.h> | 18 | #include <linux/skbuff.h> |
19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
20 | 20 | ||
21 | #include <linux/can.h> | ||
22 | #include <linux/can/dev.h> | 21 | #include <linux/can/dev.h> |
23 | #include <linux/can/error.h> | 22 | #include <linux/can/error.h> |
24 | 23 | ||
@@ -270,8 +269,6 @@ static int bfin_can_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
270 | /* fill data length code */ | 269 | /* fill data length code */ |
271 | bfin_write16(®->chl[TRANSMIT_CHL].dlc, dlc); | 270 | bfin_write16(®->chl[TRANSMIT_CHL].dlc, dlc); |
272 | 271 | ||
273 | dev->trans_start = jiffies; | ||
274 | |||
275 | can_put_echo_skb(skb, dev, 0); | 272 | can_put_echo_skb(skb, dev, 0); |
276 | 273 | ||
277 | /* set transmit request */ | 274 | /* set transmit request */ |
diff --git a/drivers/net/can/mcp251x.c b/drivers/net/can/mcp251x.c index b39b108318b4..b11a0cb5ed81 100644 --- a/drivers/net/can/mcp251x.c +++ b/drivers/net/can/mcp251x.c | |||
@@ -58,7 +58,6 @@ | |||
58 | * | 58 | * |
59 | */ | 59 | */ |
60 | 60 | ||
61 | #include <linux/can.h> | ||
62 | #include <linux/can/core.h> | 61 | #include <linux/can/core.h> |
63 | #include <linux/can/dev.h> | 62 | #include <linux/can/dev.h> |
64 | #include <linux/can/platform/mcp251x.h> | 63 | #include <linux/can/platform/mcp251x.h> |
@@ -476,7 +475,6 @@ static netdev_tx_t mcp251x_hard_start_xmit(struct sk_buff *skb, | |||
476 | 475 | ||
477 | netif_stop_queue(net); | 476 | netif_stop_queue(net); |
478 | priv->tx_skb = skb; | 477 | priv->tx_skb = skb; |
479 | net->trans_start = jiffies; | ||
480 | queue_work(priv->wq, &priv->tx_work); | 478 | queue_work(priv->wq, &priv->tx_work); |
481 | 479 | ||
482 | return NETDEV_TX_OK; | 480 | return NETDEV_TX_OK; |
@@ -923,12 +921,16 @@ static int __devinit mcp251x_can_probe(struct spi_device *spi) | |||
923 | struct net_device *net; | 921 | struct net_device *net; |
924 | struct mcp251x_priv *priv; | 922 | struct mcp251x_priv *priv; |
925 | struct mcp251x_platform_data *pdata = spi->dev.platform_data; | 923 | struct mcp251x_platform_data *pdata = spi->dev.platform_data; |
924 | int model = spi_get_device_id(spi)->driver_data; | ||
926 | int ret = -ENODEV; | 925 | int ret = -ENODEV; |
927 | 926 | ||
928 | if (!pdata) | 927 | if (!pdata) |
929 | /* Platform data is required for osc freq */ | 928 | /* Platform data is required for osc freq */ |
930 | goto error_out; | 929 | goto error_out; |
931 | 930 | ||
931 | if (model) | ||
932 | pdata->model = model; | ||
933 | |||
932 | /* Allocate can/net device */ | 934 | /* Allocate can/net device */ |
933 | net = alloc_candev(sizeof(struct mcp251x_priv), TX_ECHO_SKB_MAX); | 935 | net = alloc_candev(sizeof(struct mcp251x_priv), TX_ECHO_SKB_MAX); |
934 | if (!net) { | 936 | if (!net) { |
@@ -1118,6 +1120,15 @@ static int mcp251x_can_resume(struct spi_device *spi) | |||
1118 | #define mcp251x_can_resume NULL | 1120 | #define mcp251x_can_resume NULL |
1119 | #endif | 1121 | #endif |
1120 | 1122 | ||
1123 | static struct spi_device_id mcp251x_id_table[] = { | ||
1124 | { "mcp251x", 0 /* Use pdata.model */ }, | ||
1125 | { "mcp2510", CAN_MCP251X_MCP2510 }, | ||
1126 | { "mcp2515", CAN_MCP251X_MCP2515 }, | ||
1127 | { }, | ||
1128 | }; | ||
1129 | |||
1130 | MODULE_DEVICE_TABLE(spi, mcp251x_id_table); | ||
1131 | |||
1121 | static struct spi_driver mcp251x_can_driver = { | 1132 | static struct spi_driver mcp251x_can_driver = { |
1122 | .driver = { | 1133 | .driver = { |
1123 | .name = DEVICE_NAME, | 1134 | .name = DEVICE_NAME, |
@@ -1125,6 +1136,7 @@ static struct spi_driver mcp251x_can_driver = { | |||
1125 | .owner = THIS_MODULE, | 1136 | .owner = THIS_MODULE, |
1126 | }, | 1137 | }, |
1127 | 1138 | ||
1139 | .id_table = mcp251x_id_table, | ||
1128 | .probe = mcp251x_can_probe, | 1140 | .probe = mcp251x_can_probe, |
1129 | .remove = __devexit_p(mcp251x_can_remove), | 1141 | .remove = __devexit_p(mcp251x_can_remove), |
1130 | .suspend = mcp251x_can_suspend, | 1142 | .suspend = mcp251x_can_suspend, |
diff --git a/drivers/net/can/mscan/mpc5xxx_can.c b/drivers/net/can/mscan/mpc5xxx_can.c index 03e7c48465a2..225fd147774a 100644 --- a/drivers/net/can/mscan/mpc5xxx_can.c +++ b/drivers/net/can/mscan/mpc5xxx_can.c | |||
@@ -25,7 +25,6 @@ | |||
25 | #include <linux/interrupt.h> | 25 | #include <linux/interrupt.h> |
26 | #include <linux/platform_device.h> | 26 | #include <linux/platform_device.h> |
27 | #include <linux/netdevice.h> | 27 | #include <linux/netdevice.h> |
28 | #include <linux/can.h> | ||
29 | #include <linux/can/dev.h> | 28 | #include <linux/can/dev.h> |
30 | #include <linux/of_platform.h> | 29 | #include <linux/of_platform.h> |
31 | #include <sysdev/fsl_soc.h> | 30 | #include <sysdev/fsl_soc.h> |
diff --git a/drivers/net/can/mscan/mscan.c b/drivers/net/can/mscan/mscan.c index 6b7dd578d417..64c378cd0c34 100644 --- a/drivers/net/can/mscan/mscan.c +++ b/drivers/net/can/mscan/mscan.c | |||
@@ -28,7 +28,6 @@ | |||
28 | #include <linux/if_arp.h> | 28 | #include <linux/if_arp.h> |
29 | #include <linux/if_ether.h> | 29 | #include <linux/if_ether.h> |
30 | #include <linux/list.h> | 30 | #include <linux/list.h> |
31 | #include <linux/can.h> | ||
32 | #include <linux/can/dev.h> | 31 | #include <linux/can/dev.h> |
33 | #include <linux/can/error.h> | 32 | #include <linux/can/error.h> |
34 | #include <linux/io.h> | 33 | #include <linux/io.h> |
diff --git a/drivers/net/can/sja1000/Kconfig b/drivers/net/can/sja1000/Kconfig index 9e277d64a318..ae3505afd682 100644 --- a/drivers/net/can/sja1000/Kconfig +++ b/drivers/net/can/sja1000/Kconfig | |||
@@ -53,7 +53,9 @@ config CAN_PLX_PCI | |||
53 | Driver supports now: | 53 | Driver supports now: |
54 | - Adlink PCI-7841/cPCI-7841 card (http://www.adlinktech.com/) | 54 | - Adlink PCI-7841/cPCI-7841 card (http://www.adlinktech.com/) |
55 | - Adlink PCI-7841/cPCI-7841 SE card | 55 | - Adlink PCI-7841/cPCI-7841 SE card |
56 | - esd CAN-PCI/CPCI/PCI104/200 (http://www.esd.eu/) | ||
57 | - esd CAN-PCI/PMC/266 | ||
58 | - esd CAN-PCIe/2000 | ||
56 | - Marathon CAN-bus-PCI card (http://www.marathon.ru/) | 59 | - Marathon CAN-bus-PCI card (http://www.marathon.ru/) |
57 | - TEWS TECHNOLOGIES TPMC810 card (http://www.tews.com/) | 60 | - TEWS TECHNOLOGIES TPMC810 card (http://www.tews.com/) |
58 | |||
59 | endif | 61 | endif |
diff --git a/drivers/net/can/sja1000/ems_pci.c b/drivers/net/can/sja1000/ems_pci.c index 5f53da0bc40c..36f4f9780c30 100644 --- a/drivers/net/can/sja1000/ems_pci.c +++ b/drivers/net/can/sja1000/ems_pci.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
26 | #include <linux/pci.h> | 26 | #include <linux/pci.h> |
27 | #include <linux/can.h> | ||
28 | #include <linux/can/dev.h> | 27 | #include <linux/can/dev.h> |
29 | #include <linux/io.h> | 28 | #include <linux/io.h> |
30 | 29 | ||
diff --git a/drivers/net/can/sja1000/kvaser_pci.c b/drivers/net/can/sja1000/kvaser_pci.c index 441e776a7f59..ed004cebd31f 100644 --- a/drivers/net/can/sja1000/kvaser_pci.c +++ b/drivers/net/can/sja1000/kvaser_pci.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <linux/netdevice.h> | 36 | #include <linux/netdevice.h> |
37 | #include <linux/delay.h> | 37 | #include <linux/delay.h> |
38 | #include <linux/pci.h> | 38 | #include <linux/pci.h> |
39 | #include <linux/can.h> | ||
40 | #include <linux/can/dev.h> | 39 | #include <linux/can/dev.h> |
41 | #include <linux/io.h> | 40 | #include <linux/io.h> |
42 | 41 | ||
diff --git a/drivers/net/can/sja1000/plx_pci.c b/drivers/net/can/sja1000/plx_pci.c index 4aff4070db96..437b5c716a24 100644 --- a/drivers/net/can/sja1000/plx_pci.c +++ b/drivers/net/can/sja1000/plx_pci.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/delay.h> | 27 | #include <linux/delay.h> |
28 | #include <linux/slab.h> | 28 | #include <linux/slab.h> |
29 | #include <linux/pci.h> | 29 | #include <linux/pci.h> |
30 | #include <linux/can.h> | ||
31 | #include <linux/can/dev.h> | 30 | #include <linux/can/dev.h> |
32 | #include <linux/io.h> | 31 | #include <linux/io.h> |
33 | 32 | ||
@@ -41,7 +40,10 @@ MODULE_DESCRIPTION("Socket-CAN driver for PLX90xx PCI-bridge cards with " | |||
41 | MODULE_SUPPORTED_DEVICE("Adlink PCI-7841/cPCI-7841, " | 40 | MODULE_SUPPORTED_DEVICE("Adlink PCI-7841/cPCI-7841, " |
42 | "Adlink PCI-7841/cPCI-7841 SE, " | 41 | "Adlink PCI-7841/cPCI-7841 SE, " |
43 | "Marathon CAN-bus-PCI, " | 42 | "Marathon CAN-bus-PCI, " |
44 | "TEWS TECHNOLOGIES TPMC810"); | 43 | "TEWS TECHNOLOGIES TPMC810, " |
44 | "esd CAN-PCI/CPCI/PCI104/200, " | ||
45 | "esd CAN-PCI/PMC/266, " | ||
46 | "esd CAN-PCIe/2000") | ||
45 | MODULE_LICENSE("GPL v2"); | 47 | MODULE_LICENSE("GPL v2"); |
46 | 48 | ||
47 | #define PLX_PCI_MAX_CHAN 2 | 49 | #define PLX_PCI_MAX_CHAN 2 |
@@ -50,11 +52,14 @@ struct plx_pci_card { | |||
50 | int channels; /* detected channels count */ | 52 | int channels; /* detected channels count */ |
51 | struct net_device *net_dev[PLX_PCI_MAX_CHAN]; | 53 | struct net_device *net_dev[PLX_PCI_MAX_CHAN]; |
52 | void __iomem *conf_addr; | 54 | void __iomem *conf_addr; |
55 | |||
56 | /* Pointer to device-dependent reset function */ | ||
57 | void (*reset_func)(struct pci_dev *pdev); | ||
53 | }; | 58 | }; |
54 | 59 | ||
55 | #define PLX_PCI_CAN_CLOCK (16000000 / 2) | 60 | #define PLX_PCI_CAN_CLOCK (16000000 / 2) |
56 | 61 | ||
57 | /* PLX90xx registers */ | 62 | /* PLX9030/9050/9052 registers */ |
58 | #define PLX_INTCSR 0x4c /* Interrupt Control/Status */ | 63 | #define PLX_INTCSR 0x4c /* Interrupt Control/Status */ |
59 | #define PLX_CNTRL 0x50 /* User I/O, Direct Slave Response, | 64 | #define PLX_CNTRL 0x50 /* User I/O, Direct Slave Response, |
60 | * Serial EEPROM, and Initialization | 65 | * Serial EEPROM, and Initialization |
@@ -66,6 +71,14 @@ struct plx_pci_card { | |||
66 | #define PLX_PCI_INT_EN (1 << 6) /* PCI Interrupt Enable */ | 71 | #define PLX_PCI_INT_EN (1 << 6) /* PCI Interrupt Enable */ |
67 | #define PLX_PCI_RESET (1 << 30) /* PCI Adapter Software Reset */ | 72 | #define PLX_PCI_RESET (1 << 30) /* PCI Adapter Software Reset */ |
68 | 73 | ||
74 | /* PLX9056 registers */ | ||
75 | #define PLX9056_INTCSR 0x68 /* Interrupt Control/Status */ | ||
76 | #define PLX9056_CNTRL 0x6c /* Control / Software Reset */ | ||
77 | |||
78 | #define PLX9056_LINTI (1 << 11) | ||
79 | #define PLX9056_PCI_INT_EN (1 << 8) | ||
80 | #define PLX9056_PCI_RCR (1 << 29) /* Read Configuration Registers */ | ||
81 | |||
69 | /* | 82 | /* |
70 | * The board configuration is probably following: | 83 | * The board configuration is probably following: |
71 | * RX1 is connected to ground. | 84 | * RX1 is connected to ground. |
@@ -101,6 +114,13 @@ struct plx_pci_card { | |||
101 | #define ADLINK_PCI_VENDOR_ID 0x144A | 114 | #define ADLINK_PCI_VENDOR_ID 0x144A |
102 | #define ADLINK_PCI_DEVICE_ID 0x7841 | 115 | #define ADLINK_PCI_DEVICE_ID 0x7841 |
103 | 116 | ||
117 | #define ESD_PCI_SUB_SYS_ID_PCI200 0x0004 | ||
118 | #define ESD_PCI_SUB_SYS_ID_PCI266 0x0009 | ||
119 | #define ESD_PCI_SUB_SYS_ID_PMC266 0x000e | ||
120 | #define ESD_PCI_SUB_SYS_ID_CPCI200 0x010b | ||
121 | #define ESD_PCI_SUB_SYS_ID_PCIE2000 0x0200 | ||
122 | #define ESD_PCI_SUB_SYS_ID_PCI104200 0x0501 | ||
123 | |||
104 | #define MARATHON_PCI_DEVICE_ID 0x2715 | 124 | #define MARATHON_PCI_DEVICE_ID 0x2715 |
105 | 125 | ||
106 | #define TEWS_PCI_VENDOR_ID 0x1498 | 126 | #define TEWS_PCI_VENDOR_ID 0x1498 |
@@ -108,6 +128,7 @@ struct plx_pci_card { | |||
108 | 128 | ||
109 | static void plx_pci_reset_common(struct pci_dev *pdev); | 129 | static void plx_pci_reset_common(struct pci_dev *pdev); |
110 | static void plx_pci_reset_marathon(struct pci_dev *pdev); | 130 | static void plx_pci_reset_marathon(struct pci_dev *pdev); |
131 | static void plx9056_pci_reset_common(struct pci_dev *pdev); | ||
111 | 132 | ||
112 | struct plx_pci_channel_map { | 133 | struct plx_pci_channel_map { |
113 | u32 bar; | 134 | u32 bar; |
@@ -148,6 +169,30 @@ static struct plx_pci_card_info plx_pci_card_info_adlink_se __devinitdata = { | |||
148 | /* based on PLX9052 */ | 169 | /* based on PLX9052 */ |
149 | }; | 170 | }; |
150 | 171 | ||
172 | static struct plx_pci_card_info plx_pci_card_info_esd200 __devinitdata = { | ||
173 | "esd CAN-PCI/CPCI/PCI104/200", 2, | ||
174 | PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, | ||
175 | {0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} }, | ||
176 | &plx_pci_reset_common | ||
177 | /* based on PLX9030/9050 */ | ||
178 | }; | ||
179 | |||
180 | static struct plx_pci_card_info plx_pci_card_info_esd266 __devinitdata = { | ||
181 | "esd CAN-PCI/PMC/266", 2, | ||
182 | PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, | ||
183 | {0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} }, | ||
184 | &plx9056_pci_reset_common | ||
185 | /* based on PLX9056 */ | ||
186 | }; | ||
187 | |||
188 | static struct plx_pci_card_info plx_pci_card_info_esd2000 __devinitdata = { | ||
189 | "esd CAN-PCIe/2000", 2, | ||
190 | PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, | ||
191 | {0, 0x00, 0x00}, { {2, 0x00, 0x80}, {2, 0x100, 0x80} }, | ||
192 | &plx9056_pci_reset_common | ||
193 | /* based on PEX8311 */ | ||
194 | }; | ||
195 | |||
151 | static struct plx_pci_card_info plx_pci_card_info_marathon __devinitdata = { | 196 | static struct plx_pci_card_info plx_pci_card_info_marathon __devinitdata = { |
152 | "Marathon CAN-bus-PCI", 2, | 197 | "Marathon CAN-bus-PCI", 2, |
153 | PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, | 198 | PLX_PCI_CAN_CLOCK, PLX_PCI_OCR, PLX_PCI_CDR, |
@@ -180,6 +225,48 @@ static DEFINE_PCI_DEVICE_TABLE(plx_pci_tbl) = { | |||
180 | (kernel_ulong_t)&plx_pci_card_info_adlink_se | 225 | (kernel_ulong_t)&plx_pci_card_info_adlink_se |
181 | }, | 226 | }, |
182 | { | 227 | { |
228 | /* esd CAN-PCI/200 */ | ||
229 | PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | ||
230 | PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PCI200, | ||
231 | 0, 0, | ||
232 | (kernel_ulong_t)&plx_pci_card_info_esd200 | ||
233 | }, | ||
234 | { | ||
235 | /* esd CAN-CPCI/200 */ | ||
236 | PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030, | ||
237 | PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_CPCI200, | ||
238 | 0, 0, | ||
239 | (kernel_ulong_t)&plx_pci_card_info_esd200 | ||
240 | }, | ||
241 | { | ||
242 | /* esd CAN-PCI104/200 */ | ||
243 | PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030, | ||
244 | PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PCI104200, | ||
245 | 0, 0, | ||
246 | (kernel_ulong_t)&plx_pci_card_info_esd200 | ||
247 | }, | ||
248 | { | ||
249 | /* esd CAN-PCI/266 */ | ||
250 | PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9056, | ||
251 | PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PCI266, | ||
252 | 0, 0, | ||
253 | (kernel_ulong_t)&plx_pci_card_info_esd266 | ||
254 | }, | ||
255 | { | ||
256 | /* esd CAN-PMC/266 */ | ||
257 | PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9056, | ||
258 | PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PMC266, | ||
259 | 0, 0, | ||
260 | (kernel_ulong_t)&plx_pci_card_info_esd266 | ||
261 | }, | ||
262 | { | ||
263 | /* esd CAN-PCIE/2000 */ | ||
264 | PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9056, | ||
265 | PCI_VENDOR_ID_ESDGMBH, ESD_PCI_SUB_SYS_ID_PCIE2000, | ||
266 | 0, 0, | ||
267 | (kernel_ulong_t)&plx_pci_card_info_esd2000 | ||
268 | }, | ||
269 | { | ||
183 | /* Marathon CAN-bus-PCI card */ | 270 | /* Marathon CAN-bus-PCI card */ |
184 | PCI_VENDOR_ID_PLX, MARATHON_PCI_DEVICE_ID, | 271 | PCI_VENDOR_ID_PLX, MARATHON_PCI_DEVICE_ID, |
185 | PCI_ANY_ID, PCI_ANY_ID, | 272 | PCI_ANY_ID, PCI_ANY_ID, |
@@ -242,7 +329,7 @@ static inline int plx_pci_check_sja1000(const struct sja1000_priv *priv) | |||
242 | } | 329 | } |
243 | 330 | ||
244 | /* | 331 | /* |
245 | * PLX90xx software reset | 332 | * PLX9030/50/52 software reset |
246 | * Also LRESET# asserts and brings to reset device on the Local Bus (if wired). | 333 | * Also LRESET# asserts and brings to reset device on the Local Bus (if wired). |
247 | * For most cards it's enough for reset the SJA1000 chips. | 334 | * For most cards it's enough for reset the SJA1000 chips. |
248 | */ | 335 | */ |
@@ -259,6 +346,38 @@ static void plx_pci_reset_common(struct pci_dev *pdev) | |||
259 | iowrite32(cntrl, card->conf_addr + PLX_CNTRL); | 346 | iowrite32(cntrl, card->conf_addr + PLX_CNTRL); |
260 | }; | 347 | }; |
261 | 348 | ||
349 | /* | ||
350 | * PLX9056 software reset | ||
351 | * Assert LRESET# and reset device(s) on the Local Bus (if wired). | ||
352 | */ | ||
353 | static void plx9056_pci_reset_common(struct pci_dev *pdev) | ||
354 | { | ||
355 | struct plx_pci_card *card = pci_get_drvdata(pdev); | ||
356 | u32 cntrl; | ||
357 | |||
358 | /* issue a local bus reset */ | ||
359 | cntrl = ioread32(card->conf_addr + PLX9056_CNTRL); | ||
360 | cntrl |= PLX_PCI_RESET; | ||
361 | iowrite32(cntrl, card->conf_addr + PLX9056_CNTRL); | ||
362 | udelay(100); | ||
363 | cntrl ^= PLX_PCI_RESET; | ||
364 | iowrite32(cntrl, card->conf_addr + PLX9056_CNTRL); | ||
365 | |||
366 | /* reload local configuration from EEPROM */ | ||
367 | cntrl |= PLX9056_PCI_RCR; | ||
368 | iowrite32(cntrl, card->conf_addr + PLX9056_CNTRL); | ||
369 | |||
370 | /* | ||
371 | * There is no safe way to poll for the end | ||
372 | * of reconfiguration process. Waiting for 10ms | ||
373 | * is safe. | ||
374 | */ | ||
375 | mdelay(10); | ||
376 | |||
377 | cntrl ^= PLX9056_PCI_RCR; | ||
378 | iowrite32(cntrl, card->conf_addr + PLX9056_CNTRL); | ||
379 | }; | ||
380 | |||
262 | /* Special reset function for Marathon card */ | 381 | /* Special reset function for Marathon card */ |
263 | static void plx_pci_reset_marathon(struct pci_dev *pdev) | 382 | static void plx_pci_reset_marathon(struct pci_dev *pdev) |
264 | { | 383 | { |
@@ -302,13 +421,16 @@ static void plx_pci_del_card(struct pci_dev *pdev) | |||
302 | free_sja1000dev(dev); | 421 | free_sja1000dev(dev); |
303 | } | 422 | } |
304 | 423 | ||
305 | plx_pci_reset_common(pdev); | 424 | card->reset_func(pdev); |
306 | 425 | ||
307 | /* | 426 | /* |
308 | * Disable interrupts from PCI-card (PLX90xx) and disable Local_1, | 427 | * Disable interrupts from PCI-card and disable local |
309 | * Local_2 interrupts | 428 | * interrupts |
310 | */ | 429 | */ |
311 | iowrite32(0x0, card->conf_addr + PLX_INTCSR); | 430 | if (pdev->device != PCI_DEVICE_ID_PLX_9056) |
431 | iowrite32(0x0, card->conf_addr + PLX_INTCSR); | ||
432 | else | ||
433 | iowrite32(0x0, card->conf_addr + PLX9056_INTCSR); | ||
312 | 434 | ||
313 | if (card->conf_addr) | 435 | if (card->conf_addr) |
314 | pci_iounmap(pdev, card->conf_addr); | 436 | pci_iounmap(pdev, card->conf_addr); |
@@ -367,6 +489,7 @@ static int __devinit plx_pci_add_card(struct pci_dev *pdev, | |||
367 | card->conf_addr = addr + ci->conf_map.offset; | 489 | card->conf_addr = addr + ci->conf_map.offset; |
368 | 490 | ||
369 | ci->reset_func(pdev); | 491 | ci->reset_func(pdev); |
492 | card->reset_func = ci->reset_func; | ||
370 | 493 | ||
371 | /* Detect available channels */ | 494 | /* Detect available channels */ |
372 | for (i = 0; i < ci->channel_count; i++) { | 495 | for (i = 0; i < ci->channel_count; i++) { |
@@ -438,10 +561,17 @@ static int __devinit plx_pci_add_card(struct pci_dev *pdev, | |||
438 | * Enable interrupts from PCI-card (PLX90xx) and enable Local_1, | 561 | * Enable interrupts from PCI-card (PLX90xx) and enable Local_1, |
439 | * Local_2 interrupts from the SJA1000 chips | 562 | * Local_2 interrupts from the SJA1000 chips |
440 | */ | 563 | */ |
441 | val = ioread32(card->conf_addr + PLX_INTCSR); | 564 | if (pdev->device != PCI_DEVICE_ID_PLX_9056) { |
442 | val |= PLX_LINT1_EN | PLX_LINT2_EN | PLX_PCI_INT_EN; | 565 | val = ioread32(card->conf_addr + PLX_INTCSR); |
443 | iowrite32(val, card->conf_addr + PLX_INTCSR); | 566 | if (pdev->subsystem_vendor == PCI_VENDOR_ID_ESDGMBH) |
444 | 567 | val |= PLX_LINT1_EN | PLX_PCI_INT_EN; | |
568 | else | ||
569 | val |= PLX_LINT1_EN | PLX_LINT2_EN | PLX_PCI_INT_EN; | ||
570 | iowrite32(val, card->conf_addr + PLX_INTCSR); | ||
571 | } else { | ||
572 | iowrite32(PLX9056_LINTI | PLX9056_PCI_INT_EN, | ||
573 | card->conf_addr + PLX9056_INTCSR); | ||
574 | } | ||
445 | return 0; | 575 | return 0; |
446 | 576 | ||
447 | failure_cleanup: | 577 | failure_cleanup: |
diff --git a/drivers/net/can/sja1000/sja1000.c b/drivers/net/can/sja1000/sja1000.c index 145b1a731a53..85f7cbfe8e5f 100644 --- a/drivers/net/can/sja1000/sja1000.c +++ b/drivers/net/can/sja1000/sja1000.c | |||
@@ -60,7 +60,6 @@ | |||
60 | #include <linux/skbuff.h> | 60 | #include <linux/skbuff.h> |
61 | #include <linux/delay.h> | 61 | #include <linux/delay.h> |
62 | 62 | ||
63 | #include <linux/can.h> | ||
64 | #include <linux/can/dev.h> | 63 | #include <linux/can/dev.h> |
65 | #include <linux/can/error.h> | 64 | #include <linux/can/error.h> |
66 | 65 | ||
@@ -84,6 +83,20 @@ static struct can_bittiming_const sja1000_bittiming_const = { | |||
84 | .brp_inc = 1, | 83 | .brp_inc = 1, |
85 | }; | 84 | }; |
86 | 85 | ||
86 | static void sja1000_write_cmdreg(struct sja1000_priv *priv, u8 val) | ||
87 | { | ||
88 | unsigned long flags; | ||
89 | |||
90 | /* | ||
91 | * The command register needs some locking and time to settle | ||
92 | * the write_reg() operation - especially on SMP systems. | ||
93 | */ | ||
94 | spin_lock_irqsave(&priv->cmdreg_lock, flags); | ||
95 | priv->write_reg(priv, REG_CMR, val); | ||
96 | priv->read_reg(priv, REG_SR); | ||
97 | spin_unlock_irqrestore(&priv->cmdreg_lock, flags); | ||
98 | } | ||
99 | |||
87 | static int sja1000_probe_chip(struct net_device *dev) | 100 | static int sja1000_probe_chip(struct net_device *dev) |
88 | { | 101 | { |
89 | struct sja1000_priv *priv = netdev_priv(dev); | 102 | struct sja1000_priv *priv = netdev_priv(dev); |
@@ -293,11 +306,9 @@ static netdev_tx_t sja1000_start_xmit(struct sk_buff *skb, | |||
293 | for (i = 0; i < dlc; i++) | 306 | for (i = 0; i < dlc; i++) |
294 | priv->write_reg(priv, dreg++, cf->data[i]); | 307 | priv->write_reg(priv, dreg++, cf->data[i]); |
295 | 308 | ||
296 | dev->trans_start = jiffies; | ||
297 | |||
298 | can_put_echo_skb(skb, dev, 0); | 309 | can_put_echo_skb(skb, dev, 0); |
299 | 310 | ||
300 | priv->write_reg(priv, REG_CMR, CMD_TR); | 311 | sja1000_write_cmdreg(priv, CMD_TR); |
301 | 312 | ||
302 | return NETDEV_TX_OK; | 313 | return NETDEV_TX_OK; |
303 | } | 314 | } |
@@ -346,7 +357,7 @@ static void sja1000_rx(struct net_device *dev) | |||
346 | cf->can_id = id; | 357 | cf->can_id = id; |
347 | 358 | ||
348 | /* release receive buffer */ | 359 | /* release receive buffer */ |
349 | priv->write_reg(priv, REG_CMR, CMD_RRB); | 360 | sja1000_write_cmdreg(priv, CMD_RRB); |
350 | 361 | ||
351 | netif_rx(skb); | 362 | netif_rx(skb); |
352 | 363 | ||
@@ -374,7 +385,7 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status) | |||
374 | cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; | 385 | cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; |
375 | stats->rx_over_errors++; | 386 | stats->rx_over_errors++; |
376 | stats->rx_errors++; | 387 | stats->rx_errors++; |
377 | priv->write_reg(priv, REG_CMR, CMD_CDO); /* clear bit */ | 388 | sja1000_write_cmdreg(priv, CMD_CDO); /* clear bit */ |
378 | } | 389 | } |
379 | 390 | ||
380 | if (isrc & IRQ_EI) { | 391 | if (isrc & IRQ_EI) { |
diff --git a/drivers/net/can/sja1000/sja1000.h b/drivers/net/can/sja1000/sja1000.h index 97a622b9302f..de8e778f6832 100644 --- a/drivers/net/can/sja1000/sja1000.h +++ b/drivers/net/can/sja1000/sja1000.h | |||
@@ -167,6 +167,7 @@ struct sja1000_priv { | |||
167 | 167 | ||
168 | void __iomem *reg_base; /* ioremap'ed address to registers */ | 168 | void __iomem *reg_base; /* ioremap'ed address to registers */ |
169 | unsigned long irq_flags; /* for request_irq() */ | 169 | unsigned long irq_flags; /* for request_irq() */ |
170 | spinlock_t cmdreg_lock; /* lock for concurrent cmd register writes */ | ||
170 | 171 | ||
171 | u16 flags; /* custom mode flags */ | 172 | u16 flags; /* custom mode flags */ |
172 | u8 ocr; /* output control register */ | 173 | u8 ocr; /* output control register */ |
diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c index a6a51f155962..496223e9e2fc 100644 --- a/drivers/net/can/sja1000/sja1000_isa.c +++ b/drivers/net/can/sja1000/sja1000_isa.c | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
24 | #include <linux/irq.h> | 24 | #include <linux/irq.h> |
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/can.h> | ||
27 | #include <linux/can/dev.h> | 26 | #include <linux/can/dev.h> |
28 | #include <linux/can/platform/sja1000.h> | 27 | #include <linux/can/platform/sja1000.h> |
29 | 28 | ||
diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c index 9dd076a626a5..34e79efbd2fc 100644 --- a/drivers/net/can/sja1000/sja1000_of_platform.c +++ b/drivers/net/can/sja1000/sja1000_of_platform.c | |||
@@ -38,7 +38,6 @@ | |||
38 | #include <linux/interrupt.h> | 38 | #include <linux/interrupt.h> |
39 | #include <linux/netdevice.h> | 39 | #include <linux/netdevice.h> |
40 | #include <linux/delay.h> | 40 | #include <linux/delay.h> |
41 | #include <linux/can.h> | ||
42 | #include <linux/can/dev.h> | 41 | #include <linux/can/dev.h> |
43 | 42 | ||
44 | #include <linux/of_platform.h> | 43 | #include <linux/of_platform.h> |
diff --git a/drivers/net/can/sja1000/sja1000_platform.c b/drivers/net/can/sja1000/sja1000_platform.c index 628374c2a05f..d9fadc489b32 100644 --- a/drivers/net/can/sja1000/sja1000_platform.c +++ b/drivers/net/can/sja1000/sja1000_platform.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <linux/pci.h> | 24 | #include <linux/pci.h> |
25 | #include <linux/platform_device.h> | 25 | #include <linux/platform_device.h> |
26 | #include <linux/irq.h> | 26 | #include <linux/irq.h> |
27 | #include <linux/can.h> | ||
28 | #include <linux/can/dev.h> | 27 | #include <linux/can/dev.h> |
29 | #include <linux/can/platform/sja1000.h> | 28 | #include <linux/can/platform/sja1000.h> |
30 | #include <linux/io.h> | 29 | #include <linux/io.h> |
@@ -37,16 +36,36 @@ MODULE_AUTHOR("Sascha Hauer <s.hauer@pengutronix.de>"); | |||
37 | MODULE_DESCRIPTION("Socket-CAN driver for SJA1000 on the platform bus"); | 36 | MODULE_DESCRIPTION("Socket-CAN driver for SJA1000 on the platform bus"); |
38 | MODULE_LICENSE("GPL v2"); | 37 | MODULE_LICENSE("GPL v2"); |
39 | 38 | ||
40 | static u8 sp_read_reg(const struct sja1000_priv *priv, int reg) | 39 | static u8 sp_read_reg8(const struct sja1000_priv *priv, int reg) |
41 | { | 40 | { |
42 | return ioread8(priv->reg_base + reg); | 41 | return ioread8(priv->reg_base + reg); |
43 | } | 42 | } |
44 | 43 | ||
45 | static void sp_write_reg(const struct sja1000_priv *priv, int reg, u8 val) | 44 | static void sp_write_reg8(const struct sja1000_priv *priv, int reg, u8 val) |
46 | { | 45 | { |
47 | iowrite8(val, priv->reg_base + reg); | 46 | iowrite8(val, priv->reg_base + reg); |
48 | } | 47 | } |
49 | 48 | ||
49 | static u8 sp_read_reg16(const struct sja1000_priv *priv, int reg) | ||
50 | { | ||
51 | return ioread8(priv->reg_base + reg * 2); | ||
52 | } | ||
53 | |||
54 | static void sp_write_reg16(const struct sja1000_priv *priv, int reg, u8 val) | ||
55 | { | ||
56 | iowrite8(val, priv->reg_base + reg * 2); | ||
57 | } | ||
58 | |||
59 | static u8 sp_read_reg32(const struct sja1000_priv *priv, int reg) | ||
60 | { | ||
61 | return ioread8(priv->reg_base + reg * 4); | ||
62 | } | ||
63 | |||
64 | static void sp_write_reg32(const struct sja1000_priv *priv, int reg, u8 val) | ||
65 | { | ||
66 | iowrite8(val, priv->reg_base + reg * 4); | ||
67 | } | ||
68 | |||
50 | static int sp_probe(struct platform_device *pdev) | 69 | static int sp_probe(struct platform_device *pdev) |
51 | { | 70 | { |
52 | int err; | 71 | int err; |
@@ -90,14 +109,29 @@ static int sp_probe(struct platform_device *pdev) | |||
90 | priv = netdev_priv(dev); | 109 | priv = netdev_priv(dev); |
91 | 110 | ||
92 | dev->irq = res_irq->start; | 111 | dev->irq = res_irq->start; |
93 | priv->irq_flags = res_irq->flags & IRQF_TRIGGER_MASK; | 112 | priv->irq_flags = res_irq->flags & (IRQF_TRIGGER_MASK | IRQF_SHARED); |
94 | priv->reg_base = addr; | 113 | priv->reg_base = addr; |
95 | priv->read_reg = sp_read_reg; | 114 | /* The CAN clock frequency is half the oscillator clock frequency */ |
96 | priv->write_reg = sp_write_reg; | 115 | priv->can.clock.freq = pdata->osc_freq / 2; |
97 | priv->can.clock.freq = pdata->clock; | ||
98 | priv->ocr = pdata->ocr; | 116 | priv->ocr = pdata->ocr; |
99 | priv->cdr = pdata->cdr; | 117 | priv->cdr = pdata->cdr; |
100 | 118 | ||
119 | switch (res_mem->flags & IORESOURCE_MEM_TYPE_MASK) { | ||
120 | case IORESOURCE_MEM_32BIT: | ||
121 | priv->read_reg = sp_read_reg32; | ||
122 | priv->write_reg = sp_write_reg32; | ||
123 | break; | ||
124 | case IORESOURCE_MEM_16BIT: | ||
125 | priv->read_reg = sp_read_reg16; | ||
126 | priv->write_reg = sp_write_reg16; | ||
127 | break; | ||
128 | case IORESOURCE_MEM_8BIT: | ||
129 | default: | ||
130 | priv->read_reg = sp_read_reg8; | ||
131 | priv->write_reg = sp_write_reg8; | ||
132 | break; | ||
133 | } | ||
134 | |||
101 | dev_set_drvdata(&pdev->dev, dev); | 135 | dev_set_drvdata(&pdev->dev, dev); |
102 | SET_NETDEV_DEV(dev, &pdev->dev); | 136 | SET_NETDEV_DEV(dev, &pdev->dev); |
103 | 137 | ||
diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c index 0c3d2ba0d178..4d07f1ee7168 100644 --- a/drivers/net/can/ti_hecc.c +++ b/drivers/net/can/ti_hecc.c | |||
@@ -47,7 +47,6 @@ | |||
47 | #include <linux/platform_device.h> | 47 | #include <linux/platform_device.h> |
48 | #include <linux/clk.h> | 48 | #include <linux/clk.h> |
49 | 49 | ||
50 | #include <linux/can.h> | ||
51 | #include <linux/can/dev.h> | 50 | #include <linux/can/dev.h> |
52 | #include <linux/can/error.h> | 51 | #include <linux/can/error.h> |
53 | #include <linux/can/platform/ti_hecc.h> | 52 | #include <linux/can/platform/ti_hecc.h> |
diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c index d800b598ae3d..df0a6369d2f2 100644 --- a/drivers/net/can/usb/ems_usb.c +++ b/drivers/net/can/usb/ems_usb.c | |||
@@ -300,8 +300,6 @@ static void ems_usb_read_interrupt_callback(struct urb *urb) | |||
300 | else if (err) | 300 | else if (err) |
301 | dev_err(netdev->dev.parent, | 301 | dev_err(netdev->dev.parent, |
302 | "failed resubmitting intr urb: %d\n", err); | 302 | "failed resubmitting intr urb: %d\n", err); |
303 | |||
304 | return; | ||
305 | } | 303 | } |
306 | 304 | ||
307 | static void ems_usb_rx_can_msg(struct ems_usb *dev, struct ems_cpc_msg *msg) | 305 | static void ems_usb_rx_can_msg(struct ems_usb *dev, struct ems_cpc_msg *msg) |
@@ -497,8 +495,6 @@ resubmit_urb: | |||
497 | else if (retval) | 495 | else if (retval) |
498 | dev_err(netdev->dev.parent, | 496 | dev_err(netdev->dev.parent, |
499 | "failed resubmitting read bulk urb: %d\n", retval); | 497 | "failed resubmitting read bulk urb: %d\n", retval); |
500 | |||
501 | return; | ||
502 | } | 498 | } |
503 | 499 | ||
504 | /* | 500 | /* |