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_usb
*gsusb
, 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
,
271 static void gs_update_state(struct gs_can
*dev
, struct can_frame
*cf
)
273 struct can_device_stats
*can_stats
= &dev
->can
.can_stats
;
275 if (cf
->can_id
& CAN_ERR_RESTARTED
) {
276 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
277 can_stats
->restarts
++;
278 } else if (cf
->can_id
& CAN_ERR_BUSOFF
) {
279 dev
->can
.state
= CAN_STATE_BUS_OFF
;
280 can_stats
->bus_off
++;
281 } else if (cf
->can_id
& CAN_ERR_CRTL
) {
282 if ((cf
->data
[1] & CAN_ERR_CRTL_TX_WARNING
) ||
283 (cf
->data
[1] & CAN_ERR_CRTL_RX_WARNING
)) {
284 dev
->can
.state
= CAN_STATE_ERROR_WARNING
;
285 can_stats
->error_warning
++;
286 } else if ((cf
->data
[1] & CAN_ERR_CRTL_TX_PASSIVE
) ||
287 (cf
->data
[1] & CAN_ERR_CRTL_RX_PASSIVE
)) {
288 dev
->can
.state
= CAN_STATE_ERROR_PASSIVE
;
289 can_stats
->error_passive
++;
291 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
296 static void gs_usb_receive_bulk_callback(struct urb
*urb
)
298 struct gs_usb
*usbcan
= urb
->context
;
300 struct net_device
*netdev
;
302 struct net_device_stats
*stats
;
303 struct gs_host_frame
*hf
= urb
->transfer_buffer
;
304 struct gs_tx_context
*txc
;
305 struct can_frame
*cf
;
310 switch (urb
->status
) {
311 case 0: /* success */
317 /* do not resubmit aborted urbs. eg: when device goes down */
321 /* device reports out of range channel id */
322 if (hf
->channel
>= GS_MAX_INTF
)
325 dev
= usbcan
->canch
[hf
->channel
];
327 netdev
= dev
->netdev
;
328 stats
= &netdev
->stats
;
330 if (!netif_device_present(netdev
))
333 if (hf
->echo_id
== -1) { /* normal rx */
334 skb
= alloc_can_skb(dev
->netdev
, &cf
);
338 cf
->can_id
= hf
->can_id
;
340 cf
->can_dlc
= get_can_dlc(hf
->can_dlc
);
341 memcpy(cf
->data
, hf
->data
, 8);
343 /* ERROR frames tell us information about the controller */
344 if (hf
->can_id
& CAN_ERR_FLAG
)
345 gs_update_state(dev
, cf
);
347 netdev
->stats
.rx_packets
++;
348 netdev
->stats
.rx_bytes
+= hf
->can_dlc
;
351 } else { /* echo_id == hf->echo_id */
352 if (hf
->echo_id
>= GS_MAX_TX_URBS
) {
354 "Unexpected out of range echo id %d\n",
359 netdev
->stats
.tx_packets
++;
360 netdev
->stats
.tx_bytes
+= hf
->can_dlc
;
362 txc
= gs_get_tx_context(dev
, hf
->echo_id
);
364 /* bad devices send bad echo_ids. */
367 "Unexpected unused echo id %d\n",
372 can_get_echo_skb(netdev
, hf
->echo_id
);
374 gs_free_tx_context(txc
);
376 netif_wake_queue(netdev
);
379 if (hf
->flags
& GS_CAN_FLAG_OVERFLOW
) {
380 skb
= alloc_can_err_skb(netdev
, &cf
);
384 cf
->can_id
|= CAN_ERR_CRTL
;
385 cf
->can_dlc
= CAN_ERR_DLC
;
386 cf
->data
[1] = CAN_ERR_CRTL_RX_OVERFLOW
;
387 stats
->rx_over_errors
++;
393 usb_fill_bulk_urb(urb
,
395 usb_rcvbulkpipe(usbcan
->udev
, GSUSB_ENDPOINT_IN
),
397 sizeof(struct gs_host_frame
),
398 gs_usb_receive_bulk_callback
,
402 rc
= usb_submit_urb(urb
, GFP_ATOMIC
);
404 /* USB failure take down all interfaces */
406 for (rc
= 0; rc
< GS_MAX_INTF
; rc
++) {
407 if (usbcan
->canch
[rc
])
408 netif_device_detach(usbcan
->canch
[rc
]->netdev
);
413 static int gs_usb_set_bittiming(struct net_device
*netdev
)
415 struct gs_can
*dev
= netdev_priv(netdev
);
416 struct can_bittiming
*bt
= &dev
->can
.bittiming
;
417 struct usb_interface
*intf
= dev
->iface
;
419 struct gs_device_bittiming
*dbt
;
421 dbt
= kmalloc(sizeof(*dbt
), GFP_KERNEL
);
425 dbt
->prop_seg
= bt
->prop_seg
;
426 dbt
->phase_seg1
= bt
->phase_seg1
;
427 dbt
->phase_seg2
= bt
->phase_seg2
;
431 /* request bit timings */
432 rc
= usb_control_msg(interface_to_usbdev(intf
),
433 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
434 GS_USB_BREQ_BITTIMING
,
435 USB_DIR_OUT
|USB_TYPE_VENDOR
|USB_RECIP_INTERFACE
,
445 dev_err(netdev
->dev
.parent
, "Couldn't set bittimings (err=%d)",
451 static void gs_usb_xmit_callback(struct urb
*urb
)
453 struct gs_tx_context
*txc
= urb
->context
;
454 struct gs_can
*dev
= txc
->dev
;
455 struct net_device
*netdev
= dev
->netdev
;
458 netdev_info(netdev
, "usb xmit fail %d\n", txc
->echo_id
);
460 usb_free_coherent(urb
->dev
,
461 urb
->transfer_buffer_length
,
462 urb
->transfer_buffer
,
465 atomic_dec(&dev
->active_tx_urbs
);
467 if (!netif_device_present(netdev
))
470 if (netif_queue_stopped(netdev
))
471 netif_wake_queue(netdev
);
474 static netdev_tx_t
gs_can_start_xmit(struct sk_buff
*skb
,
475 struct net_device
*netdev
)
477 struct gs_can
*dev
= netdev_priv(netdev
);
478 struct net_device_stats
*stats
= &dev
->netdev
->stats
;
480 struct gs_host_frame
*hf
;
481 struct can_frame
*cf
;
484 struct gs_tx_context
*txc
;
486 if (can_dropped_invalid_skb(netdev
, skb
))
489 /* find an empty context to keep track of transmission */
490 txc
= gs_alloc_tx_context(dev
);
492 return NETDEV_TX_BUSY
;
494 /* create a URB, and a buffer for it */
495 urb
= usb_alloc_urb(0, GFP_ATOMIC
);
499 hf
= usb_alloc_coherent(dev
->udev
, sizeof(*hf
), GFP_ATOMIC
,
502 netdev_err(netdev
, "No memory left for USB buffer\n");
508 if (idx
>= GS_MAX_TX_URBS
) {
509 netdev_err(netdev
, "Invalid tx context %d\n", idx
);
514 hf
->channel
= dev
->channel
;
516 cf
= (struct can_frame
*)skb
->data
;
518 hf
->can_id
= cf
->can_id
;
519 hf
->can_dlc
= cf
->can_dlc
;
520 memcpy(hf
->data
, cf
->data
, cf
->can_dlc
);
522 usb_fill_bulk_urb(urb
, dev
->udev
,
523 usb_sndbulkpipe(dev
->udev
, GSUSB_ENDPOINT_OUT
),
526 gs_usb_xmit_callback
,
529 urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
530 usb_anchor_urb(urb
, &dev
->tx_submitted
);
532 can_put_echo_skb(skb
, netdev
, idx
);
534 atomic_inc(&dev
->active_tx_urbs
);
536 rc
= usb_submit_urb(urb
, GFP_ATOMIC
);
537 if (unlikely(rc
)) { /* usb send failed */
538 atomic_dec(&dev
->active_tx_urbs
);
540 can_free_echo_skb(netdev
, idx
);
541 gs_free_tx_context(txc
);
543 usb_unanchor_urb(urb
);
544 usb_free_coherent(dev
->udev
,
551 netif_device_detach(netdev
);
553 netdev_err(netdev
, "usb_submit failed (err=%d)\n", rc
);
557 /* Slow down tx path */
558 if (atomic_read(&dev
->active_tx_urbs
) >= GS_MAX_TX_URBS
)
559 netif_stop_queue(netdev
);
562 /* let usb core take care of this urb */
568 usb_free_coherent(dev
->udev
,
576 gs_free_tx_context(txc
);
582 static int gs_can_open(struct net_device
*netdev
)
584 struct gs_can
*dev
= netdev_priv(netdev
);
585 struct gs_usb
*parent
= dev
->parent
;
587 struct gs_device_mode
*dm
;
590 rc
= open_candev(netdev
);
594 if (atomic_add_return(1, &parent
->active_channels
) == 1) {
595 for (i
= 0; i
< GS_MAX_RX_URBS
; i
++) {
600 urb
= usb_alloc_urb(0, GFP_KERNEL
);
604 /* alloc rx buffer */
605 buf
= usb_alloc_coherent(dev
->udev
,
606 sizeof(struct gs_host_frame
),
611 "No memory left for USB buffer\n");
616 /* fill, anchor, and submit rx urb */
617 usb_fill_bulk_urb(urb
,
619 usb_rcvbulkpipe(dev
->udev
,
622 sizeof(struct gs_host_frame
),
623 gs_usb_receive_bulk_callback
,
625 urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
627 usb_anchor_urb(urb
, &parent
->rx_submitted
);
629 rc
= usb_submit_urb(urb
, GFP_KERNEL
);
632 netif_device_detach(dev
->netdev
);
635 "usb_submit failed (err=%d)\n",
638 usb_unanchor_urb(urb
);
643 * USB core will take care of freeing it
649 dm
= kmalloc(sizeof(*dm
), GFP_KERNEL
);
654 ctrlmode
= dev
->can
.ctrlmode
;
657 if (ctrlmode
& CAN_CTRLMODE_LOOPBACK
)
658 dm
->flags
|= GS_CAN_MODE_LOOP_BACK
;
659 else if (ctrlmode
& CAN_CTRLMODE_LISTENONLY
)
660 dm
->flags
|= GS_CAN_MODE_LISTEN_ONLY
;
662 /* Controller is not allowed to retry TX
663 * this mode is unavailable on atmels uc3c hardware
665 if (ctrlmode
& CAN_CTRLMODE_ONE_SHOT
)
666 dm
->flags
|= GS_CAN_MODE_ONE_SHOT
;
668 if (ctrlmode
& CAN_CTRLMODE_3_SAMPLES
)
669 dm
->flags
|= GS_CAN_MODE_TRIPLE_SAMPLE
;
671 /* finally start device */
672 dm
->mode
= GS_CAN_MODE_START
;
673 rc
= usb_control_msg(interface_to_usbdev(dev
->iface
),
674 usb_sndctrlpipe(interface_to_usbdev(dev
->iface
), 0),
676 USB_DIR_OUT
| USB_TYPE_VENDOR
|
685 netdev_err(netdev
, "Couldn't start device (err=%d)\n", rc
);
692 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
694 if (!(dev
->can
.ctrlmode
& CAN_CTRLMODE_LISTENONLY
))
695 netif_start_queue(netdev
);
700 static int gs_can_close(struct net_device
*netdev
)
703 struct gs_can
*dev
= netdev_priv(netdev
);
704 struct gs_usb
*parent
= dev
->parent
;
706 netif_stop_queue(netdev
);
709 if (atomic_dec_and_test(&parent
->active_channels
))
710 usb_kill_anchored_urbs(&parent
->rx_submitted
);
712 /* Stop sending URBs */
713 usb_kill_anchored_urbs(&dev
->tx_submitted
);
714 atomic_set(&dev
->active_tx_urbs
, 0);
716 /* reset the device */
717 rc
= gs_cmd_reset(parent
, dev
);
719 netdev_warn(netdev
, "Couldn't shutdown device (err=%d)", rc
);
721 /* reset tx contexts */
722 for (rc
= 0; rc
< GS_MAX_TX_URBS
; rc
++) {
723 dev
->tx_context
[rc
].dev
= dev
;
724 dev
->tx_context
[rc
].echo_id
= GS_MAX_TX_URBS
;
727 /* close the netdev */
728 close_candev(netdev
);
733 static const struct net_device_ops gs_usb_netdev_ops
= {
734 .ndo_open
= gs_can_open
,
735 .ndo_stop
= gs_can_close
,
736 .ndo_start_xmit
= gs_can_start_xmit
,
737 .ndo_change_mtu
= can_change_mtu
,
740 static int gs_usb_set_identify(struct net_device
*netdev
, bool do_identify
)
742 struct gs_can
*dev
= netdev_priv(netdev
);
743 struct gs_identify_mode imode
;
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
|
763 return (rc
> 0) ? 0 : rc
;
766 /* blink LED's for finding the this interface */
767 static int gs_usb_set_phys_id(struct net_device
*dev
,
768 enum ethtool_phys_id_state state
)
773 case ETHTOOL_ID_ACTIVE
:
774 rc
= gs_usb_set_identify(dev
, GS_CAN_IDENTIFY_ON
);
776 case ETHTOOL_ID_INACTIVE
:
777 rc
= gs_usb_set_identify(dev
, GS_CAN_IDENTIFY_OFF
);
786 static const struct ethtool_ops gs_usb_ethtool_ops
= {
787 .set_phys_id
= gs_usb_set_phys_id
,
790 static struct gs_can
*gs_make_candev(unsigned int channel
,
791 struct usb_interface
*intf
,
792 struct gs_device_config
*dconf
)
795 struct net_device
*netdev
;
797 struct gs_device_bt_const
*bt_const
;
799 bt_const
= kmalloc(sizeof(*bt_const
), GFP_KERNEL
);
801 return ERR_PTR(-ENOMEM
);
803 /* fetch bit timing constants */
804 rc
= usb_control_msg(interface_to_usbdev(intf
),
805 usb_rcvctrlpipe(interface_to_usbdev(intf
), 0),
806 GS_USB_BREQ_BT_CONST
,
807 USB_DIR_IN
|USB_TYPE_VENDOR
|USB_RECIP_INTERFACE
,
816 "Couldn't get bit timing const for channel (err=%d)\n",
823 netdev
= alloc_candev(sizeof(struct gs_can
), GS_MAX_TX_URBS
);
825 dev_err(&intf
->dev
, "Couldn't allocate candev\n");
827 return ERR_PTR(-ENOMEM
);
830 dev
= netdev_priv(netdev
);
832 netdev
->netdev_ops
= &gs_usb_netdev_ops
;
834 netdev
->flags
|= IFF_ECHO
; /* we support full roundtrip echo */
837 strcpy(dev
->bt_const
.name
, "gs_usb");
838 dev
->bt_const
.tseg1_min
= bt_const
->tseg1_min
;
839 dev
->bt_const
.tseg1_max
= bt_const
->tseg1_max
;
840 dev
->bt_const
.tseg2_min
= bt_const
->tseg2_min
;
841 dev
->bt_const
.tseg2_max
= bt_const
->tseg2_max
;
842 dev
->bt_const
.sjw_max
= bt_const
->sjw_max
;
843 dev
->bt_const
.brp_min
= bt_const
->brp_min
;
844 dev
->bt_const
.brp_max
= bt_const
->brp_max
;
845 dev
->bt_const
.brp_inc
= bt_const
->brp_inc
;
847 dev
->udev
= interface_to_usbdev(intf
);
849 dev
->netdev
= netdev
;
850 dev
->channel
= channel
;
852 init_usb_anchor(&dev
->tx_submitted
);
853 atomic_set(&dev
->active_tx_urbs
, 0);
854 spin_lock_init(&dev
->tx_ctx_lock
);
855 for (rc
= 0; rc
< GS_MAX_TX_URBS
; rc
++) {
856 dev
->tx_context
[rc
].dev
= dev
;
857 dev
->tx_context
[rc
].echo_id
= GS_MAX_TX_URBS
;
861 dev
->can
.state
= CAN_STATE_STOPPED
;
862 dev
->can
.clock
.freq
= bt_const
->fclk_can
;
863 dev
->can
.bittiming_const
= &dev
->bt_const
;
864 dev
->can
.do_set_bittiming
= gs_usb_set_bittiming
;
866 dev
->can
.ctrlmode_supported
= 0;
868 if (bt_const
->feature
& GS_CAN_FEATURE_LISTEN_ONLY
)
869 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_LISTENONLY
;
871 if (bt_const
->feature
& GS_CAN_FEATURE_LOOP_BACK
)
872 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_LOOPBACK
;
874 if (bt_const
->feature
& GS_CAN_FEATURE_TRIPLE_SAMPLE
)
875 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_3_SAMPLES
;
877 if (bt_const
->feature
& GS_CAN_FEATURE_ONE_SHOT
)
878 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_ONE_SHOT
;
880 SET_NETDEV_DEV(netdev
, &intf
->dev
);
882 if (dconf
->sw_version
> 1)
883 if (bt_const
->feature
& GS_CAN_FEATURE_IDENTIFY
)
884 netdev
->ethtool_ops
= &gs_usb_ethtool_ops
;
888 rc
= register_candev(dev
->netdev
);
890 free_candev(dev
->netdev
);
891 dev_err(&intf
->dev
, "Couldn't register candev (err=%d)\n", rc
);
898 static void gs_destroy_candev(struct gs_can
*dev
)
900 unregister_candev(dev
->netdev
);
901 usb_kill_anchored_urbs(&dev
->tx_submitted
);
902 free_candev(dev
->netdev
);
905 static int gs_usb_probe(struct usb_interface
*intf
,
906 const struct usb_device_id
*id
)
910 unsigned int icount
, i
;
911 struct gs_host_config hconf
= {
912 .byte_order
= 0x0000beef,
914 struct gs_device_config dconf
;
916 /* send host config */
917 rc
= usb_control_msg(interface_to_usbdev(intf
),
918 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
919 GS_USB_BREQ_HOST_FORMAT
,
920 USB_DIR_OUT
|USB_TYPE_VENDOR
|USB_RECIP_INTERFACE
,
922 intf
->altsetting
[0].desc
.bInterfaceNumber
,
928 dev_err(&intf
->dev
, "Couldn't send data format (err=%d)\n",
933 /* read device config */
934 rc
= usb_control_msg(interface_to_usbdev(intf
),
935 usb_rcvctrlpipe(interface_to_usbdev(intf
), 0),
936 GS_USB_BREQ_DEVICE_CONFIG
,
937 USB_DIR_IN
|USB_TYPE_VENDOR
|USB_RECIP_INTERFACE
,
939 intf
->altsetting
[0].desc
.bInterfaceNumber
,
944 dev_err(&intf
->dev
, "Couldn't get device config: (err=%d)\n",
949 icount
= dconf
.icount
+ 1;
950 dev_info(&intf
->dev
, "Configuring for %d interfaces\n", icount
);
952 if (icount
> GS_MAX_INTF
) {
954 "Driver cannot handle more that %d CAN interfaces\n",
959 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
962 init_usb_anchor(&dev
->rx_submitted
);
964 atomic_set(&dev
->active_channels
, 0);
966 usb_set_intfdata(intf
, dev
);
967 dev
->udev
= interface_to_usbdev(intf
);
969 for (i
= 0; i
< icount
; i
++) {
970 dev
->canch
[i
] = gs_make_candev(i
, intf
, &dconf
);
971 if (IS_ERR_OR_NULL(dev
->canch
[i
])) {
972 /* save error code to return later */
973 rc
= PTR_ERR(dev
->canch
[i
]);
975 /* on failure destroy previously created candevs */
977 for (i
= 0; i
< icount
; i
++)
978 gs_destroy_candev(dev
->canch
[i
]);
980 usb_kill_anchored_urbs(&dev
->rx_submitted
);
984 dev
->canch
[i
]->parent
= dev
;
990 static void gs_usb_disconnect(struct usb_interface
*intf
)
993 struct gs_usb
*dev
= usb_get_intfdata(intf
);
994 usb_set_intfdata(intf
, NULL
);
997 dev_err(&intf
->dev
, "Disconnect (nodata)\n");
1001 for (i
= 0; i
< GS_MAX_INTF
; i
++)
1003 gs_destroy_candev(dev
->canch
[i
]);
1005 usb_kill_anchored_urbs(&dev
->rx_submitted
);
1009 static const struct usb_device_id gs_usb_table
[] = {
1010 { USB_DEVICE_INTERFACE_NUMBER(USB_GSUSB_1_VENDOR_ID
,
1011 USB_GSUSB_1_PRODUCT_ID
, 0) },
1012 { USB_DEVICE_INTERFACE_NUMBER(USB_CANDLELIGHT_VENDOR_ID
,
1013 USB_CANDLELIGHT_PRODUCT_ID
, 0) },
1014 {} /* Terminating entry */
1017 MODULE_DEVICE_TABLE(usb
, gs_usb_table
);
1019 static struct usb_driver gs_usb_driver
= {
1021 .probe
= gs_usb_probe
,
1022 .disconnect
= gs_usb_disconnect
,
1023 .id_table
= gs_usb_table
,
1026 module_usb_driver(gs_usb_driver
);
1028 MODULE_AUTHOR("Maximilian Schneider <mws@schneidersoft.net>");
1030 "Socket CAN device driver for Geschwister Schneider Technologie-, "
1031 "Entwicklungs- und Vertriebs UG. USB2.0 to CAN interfaces\n"
1032 "and bytewerk.org candleLight USB CAN interfaces.");
1033 MODULE_LICENSE("GPL v2");