1 /* CAN driver for Geschwister Schneider USB/CAN devices
2 * and bytewerk.org candleLight USB CAN interfaces.
4 * Copyright (C) 2013-2016 Geschwister Schneider Technologie-,
5 * Entwicklungs- und Vertriebs UG (Haftungsbeschränkt).
6 * Copyright (C) 2016 Hubert Denkmair
8 * Many thanks to all socketcan devs!
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published
12 * by the Free Software Foundation; version 2 of the License.
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
20 #include <linux/init.h>
21 #include <linux/signal.h>
22 #include <linux/module.h>
23 #include <linux/netdevice.h>
24 #include <linux/usb.h>
26 #include <linux/can.h>
27 #include <linux/can/dev.h>
28 #include <linux/can/error.h>
30 /* Device specific constants */
31 #define USB_GSUSB_1_VENDOR_ID 0x1d50
32 #define USB_GSUSB_1_PRODUCT_ID 0x606f
34 #define USB_CANDLELIGHT_VENDOR_ID 0x1209
35 #define USB_CANDLELIGHT_PRODUCT_ID 0x2323
37 #define GSUSB_ENDPOINT_IN 1
38 #define GSUSB_ENDPOINT_OUT 2
40 /* Device specific constants */
42 GS_USB_BREQ_HOST_FORMAT
= 0,
43 GS_USB_BREQ_BITTIMING
,
47 GS_USB_BREQ_DEVICE_CONFIG
,
48 GS_USB_BREQ_TIMESTAMP
,
53 /* reset a channel. turns it off */
54 GS_CAN_MODE_RESET
= 0,
55 /* starts a channel */
60 GS_CAN_STATE_ERROR_ACTIVE
= 0,
61 GS_CAN_STATE_ERROR_WARNING
,
62 GS_CAN_STATE_ERROR_PASSIVE
,
68 enum gs_can_identify_mode
{
69 GS_CAN_IDENTIFY_OFF
= 0,
73 /* data types passed between host and device */
74 struct gs_host_config
{
77 /* All data exchanged between host and device is exchanged in host byte order,
78 * thanks to the struct gs_host_config byte_order member, which is sent first
79 * to indicate the desired byte order.
82 struct gs_device_config
{
91 #define GS_CAN_MODE_NORMAL 0
92 #define GS_CAN_MODE_LISTEN_ONLY BIT(0)
93 #define GS_CAN_MODE_LOOP_BACK BIT(1)
94 #define GS_CAN_MODE_TRIPLE_SAMPLE BIT(2)
95 #define GS_CAN_MODE_ONE_SHOT BIT(3)
97 struct gs_device_mode
{
102 struct gs_device_state
{
108 struct gs_device_bittiming
{
116 struct gs_identify_mode
{
120 #define GS_CAN_FEATURE_LISTEN_ONLY BIT(0)
121 #define GS_CAN_FEATURE_LOOP_BACK BIT(1)
122 #define GS_CAN_FEATURE_TRIPLE_SAMPLE BIT(2)
123 #define GS_CAN_FEATURE_ONE_SHOT BIT(3)
124 #define GS_CAN_FEATURE_HW_TIMESTAMP BIT(4)
125 #define GS_CAN_FEATURE_IDENTIFY BIT(5)
127 struct gs_device_bt_const
{
140 #define GS_CAN_FLAG_OVERFLOW 1
142 struct gs_host_frame
{
153 /* The GS USB devices make use of the same flags and masks as in
154 * linux/can.h and linux/can/error.h, and no additional mapping is necessary.
157 /* Only send a max of GS_MAX_TX_URBS frames per channel at a time. */
158 #define GS_MAX_TX_URBS 10
159 /* Only launch a max of GS_MAX_RX_URBS usb requests at a time. */
160 #define GS_MAX_RX_URBS 30
161 /* Maximum number of interfaces the driver supports per device.
162 * Current hardware only supports 2 interfaces. The future may vary.
164 #define GS_MAX_INTF 2
166 struct gs_tx_context
{
168 unsigned int echo_id
;
172 struct can_priv can
; /* must be the first member */
174 struct gs_usb
*parent
;
176 struct net_device
*netdev
;
177 struct usb_device
*udev
;
178 struct usb_interface
*iface
;
180 struct can_bittiming_const bt_const
;
181 unsigned int channel
; /* channel number */
183 /* This lock prevents a race condition between xmit and receive. */
184 spinlock_t tx_ctx_lock
;
185 struct gs_tx_context tx_context
[GS_MAX_TX_URBS
];
187 struct usb_anchor tx_submitted
;
188 atomic_t active_tx_urbs
;
191 /* usb interface struct */
193 struct gs_can
*canch
[GS_MAX_INTF
];
194 struct usb_anchor rx_submitted
;
195 atomic_t active_channels
;
196 struct usb_device
*udev
;
199 /* 'allocate' a tx context.
200 * returns a valid tx context or NULL if there is no space.
202 static struct gs_tx_context
*gs_alloc_tx_context(struct gs_can
*dev
)
207 spin_lock_irqsave(&dev
->tx_ctx_lock
, flags
);
209 for (; i
< GS_MAX_TX_URBS
; i
++) {
210 if (dev
->tx_context
[i
].echo_id
== GS_MAX_TX_URBS
) {
211 dev
->tx_context
[i
].echo_id
= i
;
212 spin_unlock_irqrestore(&dev
->tx_ctx_lock
, flags
);
213 return &dev
->tx_context
[i
];
217 spin_unlock_irqrestore(&dev
->tx_ctx_lock
, flags
);
221 /* releases a tx context
223 static void gs_free_tx_context(struct gs_tx_context
*txc
)
225 txc
->echo_id
= GS_MAX_TX_URBS
;
228 /* Get a tx context by id.
230 static struct gs_tx_context
*gs_get_tx_context(struct gs_can
*dev
,
235 if (id
< GS_MAX_TX_URBS
) {
236 spin_lock_irqsave(&dev
->tx_ctx_lock
, flags
);
237 if (dev
->tx_context
[id
].echo_id
== id
) {
238 spin_unlock_irqrestore(&dev
->tx_ctx_lock
, flags
);
239 return &dev
->tx_context
[id
];
241 spin_unlock_irqrestore(&dev
->tx_ctx_lock
, flags
);
246 static int gs_cmd_reset(struct gs_can
*gsdev
)
248 struct gs_device_mode
*dm
;
249 struct usb_interface
*intf
= gsdev
->iface
;
252 dm
= kzalloc(sizeof(*dm
), GFP_KERNEL
);
256 dm
->mode
= GS_CAN_MODE_RESET
;
258 rc
= usb_control_msg(interface_to_usbdev(intf
),
259 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
261 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
273 static void gs_update_state(struct gs_can
*dev
, struct can_frame
*cf
)
275 struct can_device_stats
*can_stats
= &dev
->can
.can_stats
;
277 if (cf
->can_id
& CAN_ERR_RESTARTED
) {
278 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
279 can_stats
->restarts
++;
280 } else if (cf
->can_id
& CAN_ERR_BUSOFF
) {
281 dev
->can
.state
= CAN_STATE_BUS_OFF
;
282 can_stats
->bus_off
++;
283 } else if (cf
->can_id
& CAN_ERR_CRTL
) {
284 if ((cf
->data
[1] & CAN_ERR_CRTL_TX_WARNING
) ||
285 (cf
->data
[1] & CAN_ERR_CRTL_RX_WARNING
)) {
286 dev
->can
.state
= CAN_STATE_ERROR_WARNING
;
287 can_stats
->error_warning
++;
288 } else if ((cf
->data
[1] & CAN_ERR_CRTL_TX_PASSIVE
) ||
289 (cf
->data
[1] & CAN_ERR_CRTL_RX_PASSIVE
)) {
290 dev
->can
.state
= CAN_STATE_ERROR_PASSIVE
;
291 can_stats
->error_passive
++;
293 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
298 static void gs_usb_receive_bulk_callback(struct urb
*urb
)
300 struct gs_usb
*usbcan
= urb
->context
;
302 struct net_device
*netdev
;
304 struct net_device_stats
*stats
;
305 struct gs_host_frame
*hf
= urb
->transfer_buffer
;
306 struct gs_tx_context
*txc
;
307 struct can_frame
*cf
;
312 switch (urb
->status
) {
313 case 0: /* success */
319 /* do not resubmit aborted urbs. eg: when device goes down */
323 /* device reports out of range channel id */
324 if (hf
->channel
>= GS_MAX_INTF
)
327 dev
= usbcan
->canch
[hf
->channel
];
329 netdev
= dev
->netdev
;
330 stats
= &netdev
->stats
;
332 if (!netif_device_present(netdev
))
335 if (hf
->echo_id
== -1) { /* normal rx */
336 skb
= alloc_can_skb(dev
->netdev
, &cf
);
340 cf
->can_id
= hf
->can_id
;
342 cf
->can_dlc
= get_can_dlc(hf
->can_dlc
);
343 memcpy(cf
->data
, hf
->data
, 8);
345 /* ERROR frames tell us information about the controller */
346 if (hf
->can_id
& CAN_ERR_FLAG
)
347 gs_update_state(dev
, cf
);
349 netdev
->stats
.rx_packets
++;
350 netdev
->stats
.rx_bytes
+= hf
->can_dlc
;
353 } else { /* echo_id == hf->echo_id */
354 if (hf
->echo_id
>= GS_MAX_TX_URBS
) {
356 "Unexpected out of range echo id %d\n",
361 netdev
->stats
.tx_packets
++;
362 netdev
->stats
.tx_bytes
+= hf
->can_dlc
;
364 txc
= gs_get_tx_context(dev
, hf
->echo_id
);
366 /* bad devices send bad echo_ids. */
369 "Unexpected unused echo id %d\n",
374 can_get_echo_skb(netdev
, hf
->echo_id
);
376 gs_free_tx_context(txc
);
378 atomic_dec(&dev
->active_tx_urbs
);
380 netif_wake_queue(netdev
);
383 if (hf
->flags
& GS_CAN_FLAG_OVERFLOW
) {
384 skb
= alloc_can_err_skb(netdev
, &cf
);
388 cf
->can_id
|= CAN_ERR_CRTL
;
389 cf
->can_dlc
= CAN_ERR_DLC
;
390 cf
->data
[1] = CAN_ERR_CRTL_RX_OVERFLOW
;
391 stats
->rx_over_errors
++;
397 usb_fill_bulk_urb(urb
,
399 usb_rcvbulkpipe(usbcan
->udev
, GSUSB_ENDPOINT_IN
),
401 sizeof(struct gs_host_frame
),
402 gs_usb_receive_bulk_callback
,
406 rc
= usb_submit_urb(urb
, GFP_ATOMIC
);
408 /* USB failure take down all interfaces */
410 for (rc
= 0; rc
< GS_MAX_INTF
; rc
++) {
411 if (usbcan
->canch
[rc
])
412 netif_device_detach(usbcan
->canch
[rc
]->netdev
);
417 static int gs_usb_set_bittiming(struct net_device
*netdev
)
419 struct gs_can
*dev
= netdev_priv(netdev
);
420 struct can_bittiming
*bt
= &dev
->can
.bittiming
;
421 struct usb_interface
*intf
= dev
->iface
;
423 struct gs_device_bittiming
*dbt
;
425 dbt
= kmalloc(sizeof(*dbt
), GFP_KERNEL
);
429 dbt
->prop_seg
= bt
->prop_seg
;
430 dbt
->phase_seg1
= bt
->phase_seg1
;
431 dbt
->phase_seg2
= bt
->phase_seg2
;
435 /* request bit timings */
436 rc
= usb_control_msg(interface_to_usbdev(intf
),
437 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
438 GS_USB_BREQ_BITTIMING
,
439 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
449 dev_err(netdev
->dev
.parent
, "Couldn't set bittimings (err=%d)",
452 return (rc
> 0) ? 0 : rc
;
455 static void gs_usb_xmit_callback(struct urb
*urb
)
457 struct gs_tx_context
*txc
= urb
->context
;
458 struct gs_can
*dev
= txc
->dev
;
459 struct net_device
*netdev
= dev
->netdev
;
462 netdev_info(netdev
, "usb xmit fail %d\n", txc
->echo_id
);
464 usb_free_coherent(urb
->dev
,
465 urb
->transfer_buffer_length
,
466 urb
->transfer_buffer
,
470 static netdev_tx_t
gs_can_start_xmit(struct sk_buff
*skb
,
471 struct net_device
*netdev
)
473 struct gs_can
*dev
= netdev_priv(netdev
);
474 struct net_device_stats
*stats
= &dev
->netdev
->stats
;
476 struct gs_host_frame
*hf
;
477 struct can_frame
*cf
;
480 struct gs_tx_context
*txc
;
482 if (can_dropped_invalid_skb(netdev
, skb
))
485 /* find an empty context to keep track of transmission */
486 txc
= gs_alloc_tx_context(dev
);
488 return NETDEV_TX_BUSY
;
490 /* create a URB, and a buffer for it */
491 urb
= usb_alloc_urb(0, GFP_ATOMIC
);
495 hf
= usb_alloc_coherent(dev
->udev
, sizeof(*hf
), GFP_ATOMIC
,
498 netdev_err(netdev
, "No memory left for USB buffer\n");
504 if (idx
>= GS_MAX_TX_URBS
) {
505 netdev_err(netdev
, "Invalid tx context %d\n", idx
);
510 hf
->channel
= dev
->channel
;
512 cf
= (struct can_frame
*)skb
->data
;
514 hf
->can_id
= cf
->can_id
;
515 hf
->can_dlc
= cf
->can_dlc
;
516 memcpy(hf
->data
, cf
->data
, cf
->can_dlc
);
518 usb_fill_bulk_urb(urb
, dev
->udev
,
519 usb_sndbulkpipe(dev
->udev
, GSUSB_ENDPOINT_OUT
),
522 gs_usb_xmit_callback
,
525 urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
526 usb_anchor_urb(urb
, &dev
->tx_submitted
);
528 can_put_echo_skb(skb
, netdev
, idx
);
530 atomic_inc(&dev
->active_tx_urbs
);
532 rc
= usb_submit_urb(urb
, GFP_ATOMIC
);
533 if (unlikely(rc
)) { /* usb send failed */
534 atomic_dec(&dev
->active_tx_urbs
);
536 can_free_echo_skb(netdev
, idx
);
537 gs_free_tx_context(txc
);
539 usb_unanchor_urb(urb
);
540 usb_free_coherent(dev
->udev
,
546 netif_device_detach(netdev
);
548 netdev_err(netdev
, "usb_submit failed (err=%d)\n", rc
);
552 /* Slow down tx path */
553 if (atomic_read(&dev
->active_tx_urbs
) >= GS_MAX_TX_URBS
)
554 netif_stop_queue(netdev
);
557 /* let usb core take care of this urb */
563 usb_free_coherent(dev
->udev
,
571 gs_free_tx_context(txc
);
577 static int gs_can_open(struct net_device
*netdev
)
579 struct gs_can
*dev
= netdev_priv(netdev
);
580 struct gs_usb
*parent
= dev
->parent
;
582 struct gs_device_mode
*dm
;
585 rc
= open_candev(netdev
);
589 if (atomic_add_return(1, &parent
->active_channels
) == 1) {
590 for (i
= 0; i
< GS_MAX_RX_URBS
; i
++) {
595 urb
= usb_alloc_urb(0, GFP_KERNEL
);
599 /* alloc rx buffer */
600 buf
= usb_alloc_coherent(dev
->udev
,
601 sizeof(struct gs_host_frame
),
606 "No memory left for USB buffer\n");
611 /* fill, anchor, and submit rx urb */
612 usb_fill_bulk_urb(urb
,
614 usb_rcvbulkpipe(dev
->udev
,
617 sizeof(struct gs_host_frame
),
618 gs_usb_receive_bulk_callback
,
620 urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
622 usb_anchor_urb(urb
, &parent
->rx_submitted
);
624 rc
= usb_submit_urb(urb
, GFP_KERNEL
);
627 netif_device_detach(dev
->netdev
);
630 "usb_submit failed (err=%d)\n",
633 usb_unanchor_urb(urb
);
638 * USB core will take care of freeing it
644 dm
= kmalloc(sizeof(*dm
), GFP_KERNEL
);
649 ctrlmode
= dev
->can
.ctrlmode
;
652 if (ctrlmode
& CAN_CTRLMODE_LOOPBACK
)
653 dm
->flags
|= GS_CAN_MODE_LOOP_BACK
;
654 else if (ctrlmode
& CAN_CTRLMODE_LISTENONLY
)
655 dm
->flags
|= GS_CAN_MODE_LISTEN_ONLY
;
657 /* Controller is not allowed to retry TX
658 * this mode is unavailable on atmels uc3c hardware
660 if (ctrlmode
& CAN_CTRLMODE_ONE_SHOT
)
661 dm
->flags
|= GS_CAN_MODE_ONE_SHOT
;
663 if (ctrlmode
& CAN_CTRLMODE_3_SAMPLES
)
664 dm
->flags
|= GS_CAN_MODE_TRIPLE_SAMPLE
;
666 /* finally start device */
667 dm
->mode
= GS_CAN_MODE_START
;
668 rc
= usb_control_msg(interface_to_usbdev(dev
->iface
),
669 usb_sndctrlpipe(interface_to_usbdev(dev
->iface
), 0),
671 USB_DIR_OUT
| USB_TYPE_VENDOR
|
680 netdev_err(netdev
, "Couldn't start device (err=%d)\n", rc
);
687 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
689 if (!(dev
->can
.ctrlmode
& CAN_CTRLMODE_LISTENONLY
))
690 netif_start_queue(netdev
);
695 static int gs_can_close(struct net_device
*netdev
)
698 struct gs_can
*dev
= netdev_priv(netdev
);
699 struct gs_usb
*parent
= dev
->parent
;
701 netif_stop_queue(netdev
);
704 if (atomic_dec_and_test(&parent
->active_channels
))
705 usb_kill_anchored_urbs(&parent
->rx_submitted
);
707 /* Stop sending URBs */
708 usb_kill_anchored_urbs(&dev
->tx_submitted
);
709 atomic_set(&dev
->active_tx_urbs
, 0);
711 /* reset the device */
712 rc
= gs_cmd_reset(dev
);
714 netdev_warn(netdev
, "Couldn't shutdown device (err=%d)", rc
);
716 /* reset tx contexts */
717 for (rc
= 0; rc
< GS_MAX_TX_URBS
; rc
++) {
718 dev
->tx_context
[rc
].dev
= dev
;
719 dev
->tx_context
[rc
].echo_id
= GS_MAX_TX_URBS
;
722 /* close the netdev */
723 close_candev(netdev
);
728 static const struct net_device_ops gs_usb_netdev_ops
= {
729 .ndo_open
= gs_can_open
,
730 .ndo_stop
= gs_can_close
,
731 .ndo_start_xmit
= gs_can_start_xmit
,
732 .ndo_change_mtu
= can_change_mtu
,
735 static int gs_usb_set_identify(struct net_device
*netdev
, bool do_identify
)
737 struct gs_can
*dev
= netdev_priv(netdev
);
738 struct gs_identify_mode
*imode
;
741 imode
= kmalloc(sizeof(*imode
), GFP_KERNEL
);
747 imode
->mode
= GS_CAN_IDENTIFY_ON
;
749 imode
->mode
= GS_CAN_IDENTIFY_OFF
;
751 rc
= usb_control_msg(interface_to_usbdev(dev
->iface
),
752 usb_sndctrlpipe(interface_to_usbdev(dev
->iface
),
754 GS_USB_BREQ_IDENTIFY
,
755 USB_DIR_OUT
| USB_TYPE_VENDOR
|
765 return (rc
> 0) ? 0 : rc
;
768 /* blink LED's for finding the this interface */
769 static int gs_usb_set_phys_id(struct net_device
*dev
,
770 enum ethtool_phys_id_state state
)
775 case ETHTOOL_ID_ACTIVE
:
776 rc
= gs_usb_set_identify(dev
, GS_CAN_IDENTIFY_ON
);
778 case ETHTOOL_ID_INACTIVE
:
779 rc
= gs_usb_set_identify(dev
, GS_CAN_IDENTIFY_OFF
);
788 static const struct ethtool_ops gs_usb_ethtool_ops
= {
789 .set_phys_id
= gs_usb_set_phys_id
,
792 static struct gs_can
*gs_make_candev(unsigned int channel
,
793 struct usb_interface
*intf
,
794 struct gs_device_config
*dconf
)
797 struct net_device
*netdev
;
799 struct gs_device_bt_const
*bt_const
;
801 bt_const
= kmalloc(sizeof(*bt_const
), GFP_KERNEL
);
803 return ERR_PTR(-ENOMEM
);
805 /* fetch bit timing constants */
806 rc
= usb_control_msg(interface_to_usbdev(intf
),
807 usb_rcvctrlpipe(interface_to_usbdev(intf
), 0),
808 GS_USB_BREQ_BT_CONST
,
809 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
818 "Couldn't get bit timing const for channel (err=%d)\n",
825 netdev
= alloc_candev(sizeof(struct gs_can
), GS_MAX_TX_URBS
);
827 dev_err(&intf
->dev
, "Couldn't allocate candev\n");
829 return ERR_PTR(-ENOMEM
);
832 dev
= netdev_priv(netdev
);
834 netdev
->netdev_ops
= &gs_usb_netdev_ops
;
836 netdev
->flags
|= IFF_ECHO
; /* we support full roundtrip echo */
839 strcpy(dev
->bt_const
.name
, "gs_usb");
840 dev
->bt_const
.tseg1_min
= bt_const
->tseg1_min
;
841 dev
->bt_const
.tseg1_max
= bt_const
->tseg1_max
;
842 dev
->bt_const
.tseg2_min
= bt_const
->tseg2_min
;
843 dev
->bt_const
.tseg2_max
= bt_const
->tseg2_max
;
844 dev
->bt_const
.sjw_max
= bt_const
->sjw_max
;
845 dev
->bt_const
.brp_min
= bt_const
->brp_min
;
846 dev
->bt_const
.brp_max
= bt_const
->brp_max
;
847 dev
->bt_const
.brp_inc
= bt_const
->brp_inc
;
849 dev
->udev
= interface_to_usbdev(intf
);
851 dev
->netdev
= netdev
;
852 dev
->channel
= channel
;
854 init_usb_anchor(&dev
->tx_submitted
);
855 atomic_set(&dev
->active_tx_urbs
, 0);
856 spin_lock_init(&dev
->tx_ctx_lock
);
857 for (rc
= 0; rc
< GS_MAX_TX_URBS
; rc
++) {
858 dev
->tx_context
[rc
].dev
= dev
;
859 dev
->tx_context
[rc
].echo_id
= GS_MAX_TX_URBS
;
863 dev
->can
.state
= CAN_STATE_STOPPED
;
864 dev
->can
.clock
.freq
= bt_const
->fclk_can
;
865 dev
->can
.bittiming_const
= &dev
->bt_const
;
866 dev
->can
.do_set_bittiming
= gs_usb_set_bittiming
;
868 dev
->can
.ctrlmode_supported
= 0;
870 if (bt_const
->feature
& GS_CAN_FEATURE_LISTEN_ONLY
)
871 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_LISTENONLY
;
873 if (bt_const
->feature
& GS_CAN_FEATURE_LOOP_BACK
)
874 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_LOOPBACK
;
876 if (bt_const
->feature
& GS_CAN_FEATURE_TRIPLE_SAMPLE
)
877 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_3_SAMPLES
;
879 if (bt_const
->feature
& GS_CAN_FEATURE_ONE_SHOT
)
880 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_ONE_SHOT
;
882 SET_NETDEV_DEV(netdev
, &intf
->dev
);
884 if (dconf
->sw_version
> 1)
885 if (bt_const
->feature
& GS_CAN_FEATURE_IDENTIFY
)
886 netdev
->ethtool_ops
= &gs_usb_ethtool_ops
;
890 rc
= register_candev(dev
->netdev
);
892 free_candev(dev
->netdev
);
893 dev_err(&intf
->dev
, "Couldn't register candev (err=%d)\n", rc
);
900 static void gs_destroy_candev(struct gs_can
*dev
)
902 unregister_candev(dev
->netdev
);
903 usb_kill_anchored_urbs(&dev
->tx_submitted
);
904 free_candev(dev
->netdev
);
907 static int gs_usb_probe(struct usb_interface
*intf
,
908 const struct usb_device_id
*id
)
912 unsigned int icount
, i
;
913 struct gs_host_config
*hconf
;
914 struct gs_device_config
*dconf
;
916 hconf
= kmalloc(sizeof(*hconf
), GFP_KERNEL
);
920 hconf
->byte_order
= 0x0000beef;
922 /* send host config */
923 rc
= usb_control_msg(interface_to_usbdev(intf
),
924 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
925 GS_USB_BREQ_HOST_FORMAT
,
926 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
928 intf
->altsetting
[0].desc
.bInterfaceNumber
,
936 dev_err(&intf
->dev
, "Couldn't send data format (err=%d)\n",
941 dconf
= kmalloc(sizeof(*dconf
), GFP_KERNEL
);
945 /* read device config */
946 rc
= usb_control_msg(interface_to_usbdev(intf
),
947 usb_rcvctrlpipe(interface_to_usbdev(intf
), 0),
948 GS_USB_BREQ_DEVICE_CONFIG
,
949 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
951 intf
->altsetting
[0].desc
.bInterfaceNumber
,
956 dev_err(&intf
->dev
, "Couldn't get device config: (err=%d)\n",
962 icount
= dconf
->icount
+ 1;
963 dev_info(&intf
->dev
, "Configuring for %d interfaces\n", icount
);
965 if (icount
> GS_MAX_INTF
) {
967 "Driver cannot handle more that %d CAN interfaces\n",
973 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
979 init_usb_anchor(&dev
->rx_submitted
);
981 atomic_set(&dev
->active_channels
, 0);
983 usb_set_intfdata(intf
, dev
);
984 dev
->udev
= interface_to_usbdev(intf
);
986 for (i
= 0; i
< icount
; i
++) {
987 dev
->canch
[i
] = gs_make_candev(i
, intf
, dconf
);
988 if (IS_ERR_OR_NULL(dev
->canch
[i
])) {
989 /* save error code to return later */
990 rc
= PTR_ERR(dev
->canch
[i
]);
992 /* on failure destroy previously created candevs */
994 for (i
= 0; i
< icount
; i
++)
995 gs_destroy_candev(dev
->canch
[i
]);
997 usb_kill_anchored_urbs(&dev
->rx_submitted
);
1002 dev
->canch
[i
]->parent
= dev
;
1010 static void gs_usb_disconnect(struct usb_interface
*intf
)
1013 struct gs_usb
*dev
= usb_get_intfdata(intf
);
1014 usb_set_intfdata(intf
, NULL
);
1017 dev_err(&intf
->dev
, "Disconnect (nodata)\n");
1021 for (i
= 0; i
< GS_MAX_INTF
; i
++)
1023 gs_destroy_candev(dev
->canch
[i
]);
1025 usb_kill_anchored_urbs(&dev
->rx_submitted
);
1029 static const struct usb_device_id gs_usb_table
[] = {
1030 { USB_DEVICE_INTERFACE_NUMBER(USB_GSUSB_1_VENDOR_ID
,
1031 USB_GSUSB_1_PRODUCT_ID
, 0) },
1032 { USB_DEVICE_INTERFACE_NUMBER(USB_CANDLELIGHT_VENDOR_ID
,
1033 USB_CANDLELIGHT_PRODUCT_ID
, 0) },
1034 {} /* Terminating entry */
1037 MODULE_DEVICE_TABLE(usb
, gs_usb_table
);
1039 static struct usb_driver gs_usb_driver
= {
1041 .probe
= gs_usb_probe
,
1042 .disconnect
= gs_usb_disconnect
,
1043 .id_table
= gs_usb_table
,
1046 module_usb_driver(gs_usb_driver
);
1048 MODULE_AUTHOR("Maximilian Schneider <mws@schneidersoft.net>");
1050 "Socket CAN device driver for Geschwister Schneider Technologie-, "
1051 "Entwicklungs- und Vertriebs UG. USB2.0 to CAN interfaces\n"
1052 "and bytewerk.org candleLight USB CAN interfaces.");
1053 MODULE_LICENSE("GPL v2");