1 // SPDX-License-Identifier: GPL-2.0-only
2 /* CAN driver for Geschwister Schneider USB/CAN devices
3 * and bytewerk.org candleLight USB CAN interfaces.
5 * Copyright (C) 2013-2016 Geschwister Schneider Technologie-,
6 * Entwicklungs- und Vertriebs UG (Haftungsbeschränkt).
7 * Copyright (C) 2016 Hubert Denkmair
9 * Many thanks to all socketcan devs!
12 #include <linux/init.h>
13 #include <linux/signal.h>
14 #include <linux/module.h>
15 #include <linux/netdevice.h>
16 #include <linux/usb.h>
18 #include <linux/can.h>
19 #include <linux/can/dev.h>
20 #include <linux/can/error.h>
22 /* Device specific constants */
23 #define USB_GSUSB_1_VENDOR_ID 0x1d50
24 #define USB_GSUSB_1_PRODUCT_ID 0x606f
26 #define USB_CANDLELIGHT_VENDOR_ID 0x1209
27 #define USB_CANDLELIGHT_PRODUCT_ID 0x2323
29 #define GSUSB_ENDPOINT_IN 1
30 #define GSUSB_ENDPOINT_OUT 2
32 /* Device specific constants */
34 GS_USB_BREQ_HOST_FORMAT
= 0,
35 GS_USB_BREQ_BITTIMING
,
39 GS_USB_BREQ_DEVICE_CONFIG
,
40 GS_USB_BREQ_TIMESTAMP
,
45 /* reset a channel. turns it off */
46 GS_CAN_MODE_RESET
= 0,
47 /* starts a channel */
52 GS_CAN_STATE_ERROR_ACTIVE
= 0,
53 GS_CAN_STATE_ERROR_WARNING
,
54 GS_CAN_STATE_ERROR_PASSIVE
,
60 enum gs_can_identify_mode
{
61 GS_CAN_IDENTIFY_OFF
= 0,
65 /* data types passed between host and device */
66 struct gs_host_config
{
69 /* All data exchanged between host and device is exchanged in host byte order,
70 * thanks to the struct gs_host_config byte_order member, which is sent first
71 * to indicate the desired byte order.
74 struct gs_device_config
{
83 #define GS_CAN_MODE_NORMAL 0
84 #define GS_CAN_MODE_LISTEN_ONLY BIT(0)
85 #define GS_CAN_MODE_LOOP_BACK BIT(1)
86 #define GS_CAN_MODE_TRIPLE_SAMPLE BIT(2)
87 #define GS_CAN_MODE_ONE_SHOT BIT(3)
89 struct gs_device_mode
{
94 struct gs_device_state
{
100 struct gs_device_bittiming
{
108 struct gs_identify_mode
{
112 #define GS_CAN_FEATURE_LISTEN_ONLY BIT(0)
113 #define GS_CAN_FEATURE_LOOP_BACK BIT(1)
114 #define GS_CAN_FEATURE_TRIPLE_SAMPLE BIT(2)
115 #define GS_CAN_FEATURE_ONE_SHOT BIT(3)
116 #define GS_CAN_FEATURE_HW_TIMESTAMP BIT(4)
117 #define GS_CAN_FEATURE_IDENTIFY BIT(5)
119 struct gs_device_bt_const
{
132 #define GS_CAN_FLAG_OVERFLOW 1
134 struct gs_host_frame
{
145 /* The GS USB devices make use of the same flags and masks as in
146 * linux/can.h and linux/can/error.h, and no additional mapping is necessary.
149 /* Only send a max of GS_MAX_TX_URBS frames per channel at a time. */
150 #define GS_MAX_TX_URBS 10
151 /* Only launch a max of GS_MAX_RX_URBS usb requests at a time. */
152 #define GS_MAX_RX_URBS 30
153 /* Maximum number of interfaces the driver supports per device.
154 * Current hardware only supports 2 interfaces. The future may vary.
156 #define GS_MAX_INTF 2
158 struct gs_tx_context
{
160 unsigned int echo_id
;
164 struct can_priv can
; /* must be the first member */
166 struct gs_usb
*parent
;
168 struct net_device
*netdev
;
169 struct usb_device
*udev
;
170 struct usb_interface
*iface
;
172 struct can_bittiming_const bt_const
;
173 unsigned int channel
; /* channel number */
175 /* This lock prevents a race condition between xmit and receive. */
176 spinlock_t tx_ctx_lock
;
177 struct gs_tx_context tx_context
[GS_MAX_TX_URBS
];
179 struct usb_anchor tx_submitted
;
180 atomic_t active_tx_urbs
;
183 /* usb interface struct */
185 struct gs_can
*canch
[GS_MAX_INTF
];
186 struct usb_anchor rx_submitted
;
187 atomic_t active_channels
;
188 struct usb_device
*udev
;
191 /* 'allocate' a tx context.
192 * returns a valid tx context or NULL if there is no space.
194 static struct gs_tx_context
*gs_alloc_tx_context(struct gs_can
*dev
)
199 spin_lock_irqsave(&dev
->tx_ctx_lock
, flags
);
201 for (; i
< GS_MAX_TX_URBS
; i
++) {
202 if (dev
->tx_context
[i
].echo_id
== GS_MAX_TX_URBS
) {
203 dev
->tx_context
[i
].echo_id
= i
;
204 spin_unlock_irqrestore(&dev
->tx_ctx_lock
, flags
);
205 return &dev
->tx_context
[i
];
209 spin_unlock_irqrestore(&dev
->tx_ctx_lock
, flags
);
213 /* releases a tx context
215 static void gs_free_tx_context(struct gs_tx_context
*txc
)
217 txc
->echo_id
= GS_MAX_TX_URBS
;
220 /* Get a tx context by id.
222 static struct gs_tx_context
*gs_get_tx_context(struct gs_can
*dev
,
227 if (id
< GS_MAX_TX_URBS
) {
228 spin_lock_irqsave(&dev
->tx_ctx_lock
, flags
);
229 if (dev
->tx_context
[id
].echo_id
== id
) {
230 spin_unlock_irqrestore(&dev
->tx_ctx_lock
, flags
);
231 return &dev
->tx_context
[id
];
233 spin_unlock_irqrestore(&dev
->tx_ctx_lock
, flags
);
238 static int gs_cmd_reset(struct gs_can
*gsdev
)
240 struct gs_device_mode
*dm
;
241 struct usb_interface
*intf
= gsdev
->iface
;
244 dm
= kzalloc(sizeof(*dm
), GFP_KERNEL
);
248 dm
->mode
= GS_CAN_MODE_RESET
;
250 rc
= usb_control_msg(interface_to_usbdev(intf
),
251 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
253 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
265 static void gs_update_state(struct gs_can
*dev
, struct can_frame
*cf
)
267 struct can_device_stats
*can_stats
= &dev
->can
.can_stats
;
269 if (cf
->can_id
& CAN_ERR_RESTARTED
) {
270 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
271 can_stats
->restarts
++;
272 } else if (cf
->can_id
& CAN_ERR_BUSOFF
) {
273 dev
->can
.state
= CAN_STATE_BUS_OFF
;
274 can_stats
->bus_off
++;
275 } else if (cf
->can_id
& CAN_ERR_CRTL
) {
276 if ((cf
->data
[1] & CAN_ERR_CRTL_TX_WARNING
) ||
277 (cf
->data
[1] & CAN_ERR_CRTL_RX_WARNING
)) {
278 dev
->can
.state
= CAN_STATE_ERROR_WARNING
;
279 can_stats
->error_warning
++;
280 } else if ((cf
->data
[1] & CAN_ERR_CRTL_TX_PASSIVE
) ||
281 (cf
->data
[1] & CAN_ERR_CRTL_RX_PASSIVE
)) {
282 dev
->can
.state
= CAN_STATE_ERROR_PASSIVE
;
283 can_stats
->error_passive
++;
285 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
290 static void gs_usb_receive_bulk_callback(struct urb
*urb
)
292 struct gs_usb
*usbcan
= urb
->context
;
294 struct net_device
*netdev
;
296 struct net_device_stats
*stats
;
297 struct gs_host_frame
*hf
= urb
->transfer_buffer
;
298 struct gs_tx_context
*txc
;
299 struct can_frame
*cf
;
304 switch (urb
->status
) {
305 case 0: /* success */
311 /* do not resubmit aborted urbs. eg: when device goes down */
315 /* device reports out of range channel id */
316 if (hf
->channel
>= GS_MAX_INTF
)
319 dev
= usbcan
->canch
[hf
->channel
];
321 netdev
= dev
->netdev
;
322 stats
= &netdev
->stats
;
324 if (!netif_device_present(netdev
))
327 if (hf
->echo_id
== -1) { /* normal rx */
328 skb
= alloc_can_skb(dev
->netdev
, &cf
);
332 cf
->can_id
= hf
->can_id
;
334 cf
->can_dlc
= get_can_dlc(hf
->can_dlc
);
335 memcpy(cf
->data
, hf
->data
, 8);
337 /* ERROR frames tell us information about the controller */
338 if (hf
->can_id
& CAN_ERR_FLAG
)
339 gs_update_state(dev
, cf
);
341 netdev
->stats
.rx_packets
++;
342 netdev
->stats
.rx_bytes
+= hf
->can_dlc
;
345 } else { /* echo_id == hf->echo_id */
346 if (hf
->echo_id
>= GS_MAX_TX_URBS
) {
348 "Unexpected out of range echo id %d\n",
353 netdev
->stats
.tx_packets
++;
354 netdev
->stats
.tx_bytes
+= hf
->can_dlc
;
356 txc
= gs_get_tx_context(dev
, hf
->echo_id
);
358 /* bad devices send bad echo_ids. */
361 "Unexpected unused echo id %d\n",
366 can_get_echo_skb(netdev
, hf
->echo_id
);
368 gs_free_tx_context(txc
);
370 atomic_dec(&dev
->active_tx_urbs
);
372 netif_wake_queue(netdev
);
375 if (hf
->flags
& GS_CAN_FLAG_OVERFLOW
) {
376 skb
= alloc_can_err_skb(netdev
, &cf
);
380 cf
->can_id
|= CAN_ERR_CRTL
;
381 cf
->can_dlc
= CAN_ERR_DLC
;
382 cf
->data
[1] = CAN_ERR_CRTL_RX_OVERFLOW
;
383 stats
->rx_over_errors
++;
389 usb_fill_bulk_urb(urb
,
391 usb_rcvbulkpipe(usbcan
->udev
, GSUSB_ENDPOINT_IN
),
393 sizeof(struct gs_host_frame
),
394 gs_usb_receive_bulk_callback
,
398 rc
= usb_submit_urb(urb
, GFP_ATOMIC
);
400 /* USB failure take down all interfaces */
402 for (rc
= 0; rc
< GS_MAX_INTF
; rc
++) {
403 if (usbcan
->canch
[rc
])
404 netif_device_detach(usbcan
->canch
[rc
]->netdev
);
409 static int gs_usb_set_bittiming(struct net_device
*netdev
)
411 struct gs_can
*dev
= netdev_priv(netdev
);
412 struct can_bittiming
*bt
= &dev
->can
.bittiming
;
413 struct usb_interface
*intf
= dev
->iface
;
415 struct gs_device_bittiming
*dbt
;
417 dbt
= kmalloc(sizeof(*dbt
), GFP_KERNEL
);
421 dbt
->prop_seg
= bt
->prop_seg
;
422 dbt
->phase_seg1
= bt
->phase_seg1
;
423 dbt
->phase_seg2
= bt
->phase_seg2
;
427 /* request bit timings */
428 rc
= usb_control_msg(interface_to_usbdev(intf
),
429 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
430 GS_USB_BREQ_BITTIMING
,
431 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
441 dev_err(netdev
->dev
.parent
, "Couldn't set bittimings (err=%d)",
444 return (rc
> 0) ? 0 : rc
;
447 static void gs_usb_xmit_callback(struct urb
*urb
)
449 struct gs_tx_context
*txc
= urb
->context
;
450 struct gs_can
*dev
= txc
->dev
;
451 struct net_device
*netdev
= dev
->netdev
;
454 netdev_info(netdev
, "usb xmit fail %d\n", txc
->echo_id
);
456 usb_free_coherent(urb
->dev
,
457 urb
->transfer_buffer_length
,
458 urb
->transfer_buffer
,
462 static netdev_tx_t
gs_can_start_xmit(struct sk_buff
*skb
,
463 struct net_device
*netdev
)
465 struct gs_can
*dev
= netdev_priv(netdev
);
466 struct net_device_stats
*stats
= &dev
->netdev
->stats
;
468 struct gs_host_frame
*hf
;
469 struct can_frame
*cf
;
472 struct gs_tx_context
*txc
;
474 if (can_dropped_invalid_skb(netdev
, skb
))
477 /* find an empty context to keep track of transmission */
478 txc
= gs_alloc_tx_context(dev
);
480 return NETDEV_TX_BUSY
;
482 /* create a URB, and a buffer for it */
483 urb
= usb_alloc_urb(0, GFP_ATOMIC
);
487 hf
= usb_alloc_coherent(dev
->udev
, sizeof(*hf
), GFP_ATOMIC
,
490 netdev_err(netdev
, "No memory left for USB buffer\n");
496 if (idx
>= GS_MAX_TX_URBS
) {
497 netdev_err(netdev
, "Invalid tx context %d\n", idx
);
502 hf
->channel
= dev
->channel
;
504 cf
= (struct can_frame
*)skb
->data
;
506 hf
->can_id
= cf
->can_id
;
507 hf
->can_dlc
= cf
->can_dlc
;
508 memcpy(hf
->data
, cf
->data
, cf
->can_dlc
);
510 usb_fill_bulk_urb(urb
, dev
->udev
,
511 usb_sndbulkpipe(dev
->udev
, GSUSB_ENDPOINT_OUT
),
514 gs_usb_xmit_callback
,
517 urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
518 usb_anchor_urb(urb
, &dev
->tx_submitted
);
520 can_put_echo_skb(skb
, netdev
, idx
);
522 atomic_inc(&dev
->active_tx_urbs
);
524 rc
= usb_submit_urb(urb
, GFP_ATOMIC
);
525 if (unlikely(rc
)) { /* usb send failed */
526 atomic_dec(&dev
->active_tx_urbs
);
528 can_free_echo_skb(netdev
, idx
);
529 gs_free_tx_context(txc
);
531 usb_unanchor_urb(urb
);
532 usb_free_coherent(dev
->udev
,
538 netif_device_detach(netdev
);
540 netdev_err(netdev
, "usb_submit failed (err=%d)\n", rc
);
544 /* Slow down tx path */
545 if (atomic_read(&dev
->active_tx_urbs
) >= GS_MAX_TX_URBS
)
546 netif_stop_queue(netdev
);
549 /* let usb core take care of this urb */
555 usb_free_coherent(dev
->udev
,
563 gs_free_tx_context(txc
);
569 static int gs_can_open(struct net_device
*netdev
)
571 struct gs_can
*dev
= netdev_priv(netdev
);
572 struct gs_usb
*parent
= dev
->parent
;
574 struct gs_device_mode
*dm
;
577 rc
= open_candev(netdev
);
581 if (atomic_add_return(1, &parent
->active_channels
) == 1) {
582 for (i
= 0; i
< GS_MAX_RX_URBS
; i
++) {
587 urb
= usb_alloc_urb(0, GFP_KERNEL
);
591 /* alloc rx buffer */
592 buf
= usb_alloc_coherent(dev
->udev
,
593 sizeof(struct gs_host_frame
),
598 "No memory left for USB buffer\n");
603 /* fill, anchor, and submit rx urb */
604 usb_fill_bulk_urb(urb
,
606 usb_rcvbulkpipe(dev
->udev
,
609 sizeof(struct gs_host_frame
),
610 gs_usb_receive_bulk_callback
,
612 urb
->transfer_flags
|= URB_NO_TRANSFER_DMA_MAP
;
614 usb_anchor_urb(urb
, &parent
->rx_submitted
);
616 rc
= usb_submit_urb(urb
, GFP_KERNEL
);
619 netif_device_detach(dev
->netdev
);
622 "usb_submit failed (err=%d)\n",
625 usb_unanchor_urb(urb
);
631 * USB core will take care of freeing it
637 dm
= kmalloc(sizeof(*dm
), GFP_KERNEL
);
642 ctrlmode
= dev
->can
.ctrlmode
;
645 if (ctrlmode
& CAN_CTRLMODE_LOOPBACK
)
646 dm
->flags
|= GS_CAN_MODE_LOOP_BACK
;
647 else if (ctrlmode
& CAN_CTRLMODE_LISTENONLY
)
648 dm
->flags
|= GS_CAN_MODE_LISTEN_ONLY
;
650 /* Controller is not allowed to retry TX
651 * this mode is unavailable on atmels uc3c hardware
653 if (ctrlmode
& CAN_CTRLMODE_ONE_SHOT
)
654 dm
->flags
|= GS_CAN_MODE_ONE_SHOT
;
656 if (ctrlmode
& CAN_CTRLMODE_3_SAMPLES
)
657 dm
->flags
|= GS_CAN_MODE_TRIPLE_SAMPLE
;
659 /* finally start device */
660 dm
->mode
= GS_CAN_MODE_START
;
661 rc
= usb_control_msg(interface_to_usbdev(dev
->iface
),
662 usb_sndctrlpipe(interface_to_usbdev(dev
->iface
), 0),
664 USB_DIR_OUT
| USB_TYPE_VENDOR
|
673 netdev_err(netdev
, "Couldn't start device (err=%d)\n", rc
);
680 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
682 if (!(dev
->can
.ctrlmode
& CAN_CTRLMODE_LISTENONLY
))
683 netif_start_queue(netdev
);
688 static int gs_can_close(struct net_device
*netdev
)
691 struct gs_can
*dev
= netdev_priv(netdev
);
692 struct gs_usb
*parent
= dev
->parent
;
694 netif_stop_queue(netdev
);
697 if (atomic_dec_and_test(&parent
->active_channels
))
698 usb_kill_anchored_urbs(&parent
->rx_submitted
);
700 /* Stop sending URBs */
701 usb_kill_anchored_urbs(&dev
->tx_submitted
);
702 atomic_set(&dev
->active_tx_urbs
, 0);
704 /* reset the device */
705 rc
= gs_cmd_reset(dev
);
707 netdev_warn(netdev
, "Couldn't shutdown device (err=%d)", rc
);
709 /* reset tx contexts */
710 for (rc
= 0; rc
< GS_MAX_TX_URBS
; rc
++) {
711 dev
->tx_context
[rc
].dev
= dev
;
712 dev
->tx_context
[rc
].echo_id
= GS_MAX_TX_URBS
;
715 /* close the netdev */
716 close_candev(netdev
);
721 static const struct net_device_ops gs_usb_netdev_ops
= {
722 .ndo_open
= gs_can_open
,
723 .ndo_stop
= gs_can_close
,
724 .ndo_start_xmit
= gs_can_start_xmit
,
725 .ndo_change_mtu
= can_change_mtu
,
728 static int gs_usb_set_identify(struct net_device
*netdev
, bool do_identify
)
730 struct gs_can
*dev
= netdev_priv(netdev
);
731 struct gs_identify_mode
*imode
;
734 imode
= kmalloc(sizeof(*imode
), GFP_KERNEL
);
740 imode
->mode
= GS_CAN_IDENTIFY_ON
;
742 imode
->mode
= GS_CAN_IDENTIFY_OFF
;
744 rc
= usb_control_msg(interface_to_usbdev(dev
->iface
),
745 usb_sndctrlpipe(interface_to_usbdev(dev
->iface
),
747 GS_USB_BREQ_IDENTIFY
,
748 USB_DIR_OUT
| USB_TYPE_VENDOR
|
758 return (rc
> 0) ? 0 : rc
;
761 /* blink LED's for finding the this interface */
762 static int gs_usb_set_phys_id(struct net_device
*dev
,
763 enum ethtool_phys_id_state state
)
768 case ETHTOOL_ID_ACTIVE
:
769 rc
= gs_usb_set_identify(dev
, GS_CAN_IDENTIFY_ON
);
771 case ETHTOOL_ID_INACTIVE
:
772 rc
= gs_usb_set_identify(dev
, GS_CAN_IDENTIFY_OFF
);
781 static const struct ethtool_ops gs_usb_ethtool_ops
= {
782 .set_phys_id
= gs_usb_set_phys_id
,
785 static struct gs_can
*gs_make_candev(unsigned int channel
,
786 struct usb_interface
*intf
,
787 struct gs_device_config
*dconf
)
790 struct net_device
*netdev
;
792 struct gs_device_bt_const
*bt_const
;
794 bt_const
= kmalloc(sizeof(*bt_const
), GFP_KERNEL
);
796 return ERR_PTR(-ENOMEM
);
798 /* fetch bit timing constants */
799 rc
= usb_control_msg(interface_to_usbdev(intf
),
800 usb_rcvctrlpipe(interface_to_usbdev(intf
), 0),
801 GS_USB_BREQ_BT_CONST
,
802 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
811 "Couldn't get bit timing const for channel (err=%d)\n",
818 netdev
= alloc_candev(sizeof(struct gs_can
), GS_MAX_TX_URBS
);
820 dev_err(&intf
->dev
, "Couldn't allocate candev\n");
822 return ERR_PTR(-ENOMEM
);
825 dev
= netdev_priv(netdev
);
827 netdev
->netdev_ops
= &gs_usb_netdev_ops
;
829 netdev
->flags
|= IFF_ECHO
; /* we support full roundtrip echo */
832 strcpy(dev
->bt_const
.name
, "gs_usb");
833 dev
->bt_const
.tseg1_min
= bt_const
->tseg1_min
;
834 dev
->bt_const
.tseg1_max
= bt_const
->tseg1_max
;
835 dev
->bt_const
.tseg2_min
= bt_const
->tseg2_min
;
836 dev
->bt_const
.tseg2_max
= bt_const
->tseg2_max
;
837 dev
->bt_const
.sjw_max
= bt_const
->sjw_max
;
838 dev
->bt_const
.brp_min
= bt_const
->brp_min
;
839 dev
->bt_const
.brp_max
= bt_const
->brp_max
;
840 dev
->bt_const
.brp_inc
= bt_const
->brp_inc
;
842 dev
->udev
= interface_to_usbdev(intf
);
844 dev
->netdev
= netdev
;
845 dev
->channel
= channel
;
847 init_usb_anchor(&dev
->tx_submitted
);
848 atomic_set(&dev
->active_tx_urbs
, 0);
849 spin_lock_init(&dev
->tx_ctx_lock
);
850 for (rc
= 0; rc
< GS_MAX_TX_URBS
; rc
++) {
851 dev
->tx_context
[rc
].dev
= dev
;
852 dev
->tx_context
[rc
].echo_id
= GS_MAX_TX_URBS
;
856 dev
->can
.state
= CAN_STATE_STOPPED
;
857 dev
->can
.clock
.freq
= bt_const
->fclk_can
;
858 dev
->can
.bittiming_const
= &dev
->bt_const
;
859 dev
->can
.do_set_bittiming
= gs_usb_set_bittiming
;
861 dev
->can
.ctrlmode_supported
= 0;
863 if (bt_const
->feature
& GS_CAN_FEATURE_LISTEN_ONLY
)
864 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_LISTENONLY
;
866 if (bt_const
->feature
& GS_CAN_FEATURE_LOOP_BACK
)
867 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_LOOPBACK
;
869 if (bt_const
->feature
& GS_CAN_FEATURE_TRIPLE_SAMPLE
)
870 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_3_SAMPLES
;
872 if (bt_const
->feature
& GS_CAN_FEATURE_ONE_SHOT
)
873 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_ONE_SHOT
;
875 SET_NETDEV_DEV(netdev
, &intf
->dev
);
877 if (dconf
->sw_version
> 1)
878 if (bt_const
->feature
& GS_CAN_FEATURE_IDENTIFY
)
879 netdev
->ethtool_ops
= &gs_usb_ethtool_ops
;
883 rc
= register_candev(dev
->netdev
);
885 free_candev(dev
->netdev
);
886 dev_err(&intf
->dev
, "Couldn't register candev (err=%d)\n", rc
);
893 static void gs_destroy_candev(struct gs_can
*dev
)
895 unregister_candev(dev
->netdev
);
896 usb_kill_anchored_urbs(&dev
->tx_submitted
);
897 free_candev(dev
->netdev
);
900 static int gs_usb_probe(struct usb_interface
*intf
,
901 const struct usb_device_id
*id
)
905 unsigned int icount
, i
;
906 struct gs_host_config
*hconf
;
907 struct gs_device_config
*dconf
;
909 hconf
= kmalloc(sizeof(*hconf
), GFP_KERNEL
);
913 hconf
->byte_order
= 0x0000beef;
915 /* send host config */
916 rc
= usb_control_msg(interface_to_usbdev(intf
),
917 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
918 GS_USB_BREQ_HOST_FORMAT
,
919 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
921 intf
->cur_altsetting
->desc
.bInterfaceNumber
,
929 dev_err(&intf
->dev
, "Couldn't send data format (err=%d)\n",
934 dconf
= kmalloc(sizeof(*dconf
), GFP_KERNEL
);
938 /* read device config */
939 rc
= usb_control_msg(interface_to_usbdev(intf
),
940 usb_rcvctrlpipe(interface_to_usbdev(intf
), 0),
941 GS_USB_BREQ_DEVICE_CONFIG
,
942 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
944 intf
->cur_altsetting
->desc
.bInterfaceNumber
,
949 dev_err(&intf
->dev
, "Couldn't get device config: (err=%d)\n",
955 icount
= dconf
->icount
+ 1;
956 dev_info(&intf
->dev
, "Configuring for %d interfaces\n", icount
);
958 if (icount
> GS_MAX_INTF
) {
960 "Driver cannot handle more that %d CAN interfaces\n",
966 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
972 init_usb_anchor(&dev
->rx_submitted
);
974 atomic_set(&dev
->active_channels
, 0);
976 usb_set_intfdata(intf
, dev
);
977 dev
->udev
= interface_to_usbdev(intf
);
979 for (i
= 0; i
< icount
; i
++) {
980 dev
->canch
[i
] = gs_make_candev(i
, intf
, dconf
);
981 if (IS_ERR_OR_NULL(dev
->canch
[i
])) {
982 /* save error code to return later */
983 rc
= PTR_ERR(dev
->canch
[i
]);
985 /* on failure destroy previously created candevs */
987 for (i
= 0; i
< icount
; i
++)
988 gs_destroy_candev(dev
->canch
[i
]);
990 usb_kill_anchored_urbs(&dev
->rx_submitted
);
995 dev
->canch
[i
]->parent
= dev
;
1003 static void gs_usb_disconnect(struct usb_interface
*intf
)
1006 struct gs_usb
*dev
= usb_get_intfdata(intf
);
1007 usb_set_intfdata(intf
, NULL
);
1010 dev_err(&intf
->dev
, "Disconnect (nodata)\n");
1014 for (i
= 0; i
< GS_MAX_INTF
; i
++)
1016 gs_destroy_candev(dev
->canch
[i
]);
1018 usb_kill_anchored_urbs(&dev
->rx_submitted
);
1022 static const struct usb_device_id gs_usb_table
[] = {
1023 { USB_DEVICE_INTERFACE_NUMBER(USB_GSUSB_1_VENDOR_ID
,
1024 USB_GSUSB_1_PRODUCT_ID
, 0) },
1025 { USB_DEVICE_INTERFACE_NUMBER(USB_CANDLELIGHT_VENDOR_ID
,
1026 USB_CANDLELIGHT_PRODUCT_ID
, 0) },
1027 {} /* Terminating entry */
1030 MODULE_DEVICE_TABLE(usb
, gs_usb_table
);
1032 static struct usb_driver gs_usb_driver
= {
1034 .probe
= gs_usb_probe
,
1035 .disconnect
= gs_usb_disconnect
,
1036 .id_table
= gs_usb_table
,
1039 module_usb_driver(gs_usb_driver
);
1041 MODULE_AUTHOR("Maximilian Schneider <mws@schneidersoft.net>");
1043 "Socket CAN device driver for Geschwister Schneider Technologie-, "
1044 "Entwicklungs- und Vertriebs UG. USB2.0 to CAN interfaces\n"
1045 "and bytewerk.org candleLight USB CAN interfaces.");
1046 MODULE_LICENSE("GPL v2");