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
);
639 * USB core will take care of freeing it
645 dm
= kmalloc(sizeof(*dm
), GFP_KERNEL
);
650 ctrlmode
= dev
->can
.ctrlmode
;
653 if (ctrlmode
& CAN_CTRLMODE_LOOPBACK
)
654 dm
->flags
|= GS_CAN_MODE_LOOP_BACK
;
655 else if (ctrlmode
& CAN_CTRLMODE_LISTENONLY
)
656 dm
->flags
|= GS_CAN_MODE_LISTEN_ONLY
;
658 /* Controller is not allowed to retry TX
659 * this mode is unavailable on atmels uc3c hardware
661 if (ctrlmode
& CAN_CTRLMODE_ONE_SHOT
)
662 dm
->flags
|= GS_CAN_MODE_ONE_SHOT
;
664 if (ctrlmode
& CAN_CTRLMODE_3_SAMPLES
)
665 dm
->flags
|= GS_CAN_MODE_TRIPLE_SAMPLE
;
667 /* finally start device */
668 dm
->mode
= GS_CAN_MODE_START
;
669 rc
= usb_control_msg(interface_to_usbdev(dev
->iface
),
670 usb_sndctrlpipe(interface_to_usbdev(dev
->iface
), 0),
672 USB_DIR_OUT
| USB_TYPE_VENDOR
|
681 netdev_err(netdev
, "Couldn't start device (err=%d)\n", rc
);
688 dev
->can
.state
= CAN_STATE_ERROR_ACTIVE
;
690 if (!(dev
->can
.ctrlmode
& CAN_CTRLMODE_LISTENONLY
))
691 netif_start_queue(netdev
);
696 static int gs_can_close(struct net_device
*netdev
)
699 struct gs_can
*dev
= netdev_priv(netdev
);
700 struct gs_usb
*parent
= dev
->parent
;
702 netif_stop_queue(netdev
);
705 if (atomic_dec_and_test(&parent
->active_channels
))
706 usb_kill_anchored_urbs(&parent
->rx_submitted
);
708 /* Stop sending URBs */
709 usb_kill_anchored_urbs(&dev
->tx_submitted
);
710 atomic_set(&dev
->active_tx_urbs
, 0);
712 /* reset the device */
713 rc
= gs_cmd_reset(dev
);
715 netdev_warn(netdev
, "Couldn't shutdown device (err=%d)", rc
);
717 /* reset tx contexts */
718 for (rc
= 0; rc
< GS_MAX_TX_URBS
; rc
++) {
719 dev
->tx_context
[rc
].dev
= dev
;
720 dev
->tx_context
[rc
].echo_id
= GS_MAX_TX_URBS
;
723 /* close the netdev */
724 close_candev(netdev
);
729 static const struct net_device_ops gs_usb_netdev_ops
= {
730 .ndo_open
= gs_can_open
,
731 .ndo_stop
= gs_can_close
,
732 .ndo_start_xmit
= gs_can_start_xmit
,
733 .ndo_change_mtu
= can_change_mtu
,
736 static int gs_usb_set_identify(struct net_device
*netdev
, bool do_identify
)
738 struct gs_can
*dev
= netdev_priv(netdev
);
739 struct gs_identify_mode
*imode
;
742 imode
= kmalloc(sizeof(*imode
), GFP_KERNEL
);
748 imode
->mode
= GS_CAN_IDENTIFY_ON
;
750 imode
->mode
= GS_CAN_IDENTIFY_OFF
;
752 rc
= usb_control_msg(interface_to_usbdev(dev
->iface
),
753 usb_sndctrlpipe(interface_to_usbdev(dev
->iface
),
755 GS_USB_BREQ_IDENTIFY
,
756 USB_DIR_OUT
| USB_TYPE_VENDOR
|
766 return (rc
> 0) ? 0 : rc
;
769 /* blink LED's for finding the this interface */
770 static int gs_usb_set_phys_id(struct net_device
*dev
,
771 enum ethtool_phys_id_state state
)
776 case ETHTOOL_ID_ACTIVE
:
777 rc
= gs_usb_set_identify(dev
, GS_CAN_IDENTIFY_ON
);
779 case ETHTOOL_ID_INACTIVE
:
780 rc
= gs_usb_set_identify(dev
, GS_CAN_IDENTIFY_OFF
);
789 static const struct ethtool_ops gs_usb_ethtool_ops
= {
790 .set_phys_id
= gs_usb_set_phys_id
,
793 static struct gs_can
*gs_make_candev(unsigned int channel
,
794 struct usb_interface
*intf
,
795 struct gs_device_config
*dconf
)
798 struct net_device
*netdev
;
800 struct gs_device_bt_const
*bt_const
;
802 bt_const
= kmalloc(sizeof(*bt_const
), GFP_KERNEL
);
804 return ERR_PTR(-ENOMEM
);
806 /* fetch bit timing constants */
807 rc
= usb_control_msg(interface_to_usbdev(intf
),
808 usb_rcvctrlpipe(interface_to_usbdev(intf
), 0),
809 GS_USB_BREQ_BT_CONST
,
810 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
819 "Couldn't get bit timing const for channel (err=%d)\n",
826 netdev
= alloc_candev(sizeof(struct gs_can
), GS_MAX_TX_URBS
);
828 dev_err(&intf
->dev
, "Couldn't allocate candev\n");
830 return ERR_PTR(-ENOMEM
);
833 dev
= netdev_priv(netdev
);
835 netdev
->netdev_ops
= &gs_usb_netdev_ops
;
837 netdev
->flags
|= IFF_ECHO
; /* we support full roundtrip echo */
840 strcpy(dev
->bt_const
.name
, "gs_usb");
841 dev
->bt_const
.tseg1_min
= bt_const
->tseg1_min
;
842 dev
->bt_const
.tseg1_max
= bt_const
->tseg1_max
;
843 dev
->bt_const
.tseg2_min
= bt_const
->tseg2_min
;
844 dev
->bt_const
.tseg2_max
= bt_const
->tseg2_max
;
845 dev
->bt_const
.sjw_max
= bt_const
->sjw_max
;
846 dev
->bt_const
.brp_min
= bt_const
->brp_min
;
847 dev
->bt_const
.brp_max
= bt_const
->brp_max
;
848 dev
->bt_const
.brp_inc
= bt_const
->brp_inc
;
850 dev
->udev
= interface_to_usbdev(intf
);
852 dev
->netdev
= netdev
;
853 dev
->channel
= channel
;
855 init_usb_anchor(&dev
->tx_submitted
);
856 atomic_set(&dev
->active_tx_urbs
, 0);
857 spin_lock_init(&dev
->tx_ctx_lock
);
858 for (rc
= 0; rc
< GS_MAX_TX_URBS
; rc
++) {
859 dev
->tx_context
[rc
].dev
= dev
;
860 dev
->tx_context
[rc
].echo_id
= GS_MAX_TX_URBS
;
864 dev
->can
.state
= CAN_STATE_STOPPED
;
865 dev
->can
.clock
.freq
= bt_const
->fclk_can
;
866 dev
->can
.bittiming_const
= &dev
->bt_const
;
867 dev
->can
.do_set_bittiming
= gs_usb_set_bittiming
;
869 dev
->can
.ctrlmode_supported
= 0;
871 if (bt_const
->feature
& GS_CAN_FEATURE_LISTEN_ONLY
)
872 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_LISTENONLY
;
874 if (bt_const
->feature
& GS_CAN_FEATURE_LOOP_BACK
)
875 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_LOOPBACK
;
877 if (bt_const
->feature
& GS_CAN_FEATURE_TRIPLE_SAMPLE
)
878 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_3_SAMPLES
;
880 if (bt_const
->feature
& GS_CAN_FEATURE_ONE_SHOT
)
881 dev
->can
.ctrlmode_supported
|= CAN_CTRLMODE_ONE_SHOT
;
883 SET_NETDEV_DEV(netdev
, &intf
->dev
);
885 if (dconf
->sw_version
> 1)
886 if (bt_const
->feature
& GS_CAN_FEATURE_IDENTIFY
)
887 netdev
->ethtool_ops
= &gs_usb_ethtool_ops
;
891 rc
= register_candev(dev
->netdev
);
893 free_candev(dev
->netdev
);
894 dev_err(&intf
->dev
, "Couldn't register candev (err=%d)\n", rc
);
901 static void gs_destroy_candev(struct gs_can
*dev
)
903 unregister_candev(dev
->netdev
);
904 usb_kill_anchored_urbs(&dev
->tx_submitted
);
905 free_candev(dev
->netdev
);
908 static int gs_usb_probe(struct usb_interface
*intf
,
909 const struct usb_device_id
*id
)
913 unsigned int icount
, i
;
914 struct gs_host_config
*hconf
;
915 struct gs_device_config
*dconf
;
917 hconf
= kmalloc(sizeof(*hconf
), GFP_KERNEL
);
921 hconf
->byte_order
= 0x0000beef;
923 /* send host config */
924 rc
= usb_control_msg(interface_to_usbdev(intf
),
925 usb_sndctrlpipe(interface_to_usbdev(intf
), 0),
926 GS_USB_BREQ_HOST_FORMAT
,
927 USB_DIR_OUT
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
929 intf
->cur_altsetting
->desc
.bInterfaceNumber
,
937 dev_err(&intf
->dev
, "Couldn't send data format (err=%d)\n",
942 dconf
= kmalloc(sizeof(*dconf
), GFP_KERNEL
);
946 /* read device config */
947 rc
= usb_control_msg(interface_to_usbdev(intf
),
948 usb_rcvctrlpipe(interface_to_usbdev(intf
), 0),
949 GS_USB_BREQ_DEVICE_CONFIG
,
950 USB_DIR_IN
| USB_TYPE_VENDOR
| USB_RECIP_INTERFACE
,
952 intf
->cur_altsetting
->desc
.bInterfaceNumber
,
957 dev_err(&intf
->dev
, "Couldn't get device config: (err=%d)\n",
963 icount
= dconf
->icount
+ 1;
964 dev_info(&intf
->dev
, "Configuring for %d interfaces\n", icount
);
966 if (icount
> GS_MAX_INTF
) {
968 "Driver cannot handle more that %d CAN interfaces\n",
974 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
980 init_usb_anchor(&dev
->rx_submitted
);
982 atomic_set(&dev
->active_channels
, 0);
984 usb_set_intfdata(intf
, dev
);
985 dev
->udev
= interface_to_usbdev(intf
);
987 for (i
= 0; i
< icount
; i
++) {
988 dev
->canch
[i
] = gs_make_candev(i
, intf
, dconf
);
989 if (IS_ERR_OR_NULL(dev
->canch
[i
])) {
990 /* save error code to return later */
991 rc
= PTR_ERR(dev
->canch
[i
]);
993 /* on failure destroy previously created candevs */
995 for (i
= 0; i
< icount
; i
++)
996 gs_destroy_candev(dev
->canch
[i
]);
998 usb_kill_anchored_urbs(&dev
->rx_submitted
);
1003 dev
->canch
[i
]->parent
= dev
;
1011 static void gs_usb_disconnect(struct usb_interface
*intf
)
1014 struct gs_usb
*dev
= usb_get_intfdata(intf
);
1015 usb_set_intfdata(intf
, NULL
);
1018 dev_err(&intf
->dev
, "Disconnect (nodata)\n");
1022 for (i
= 0; i
< GS_MAX_INTF
; i
++)
1024 gs_destroy_candev(dev
->canch
[i
]);
1026 usb_kill_anchored_urbs(&dev
->rx_submitted
);
1030 static const struct usb_device_id gs_usb_table
[] = {
1031 { USB_DEVICE_INTERFACE_NUMBER(USB_GSUSB_1_VENDOR_ID
,
1032 USB_GSUSB_1_PRODUCT_ID
, 0) },
1033 { USB_DEVICE_INTERFACE_NUMBER(USB_CANDLELIGHT_VENDOR_ID
,
1034 USB_CANDLELIGHT_PRODUCT_ID
, 0) },
1035 {} /* Terminating entry */
1038 MODULE_DEVICE_TABLE(usb
, gs_usb_table
);
1040 static struct usb_driver gs_usb_driver
= {
1042 .probe
= gs_usb_probe
,
1043 .disconnect
= gs_usb_disconnect
,
1044 .id_table
= gs_usb_table
,
1047 module_usb_driver(gs_usb_driver
);
1049 MODULE_AUTHOR("Maximilian Schneider <mws@schneidersoft.net>");
1051 "Socket CAN device driver for Geschwister Schneider Technologie-, "
1052 "Entwicklungs- und Vertriebs UG. USB2.0 to CAN interfaces\n"
1053 "and bytewerk.org candleLight USB CAN interfaces.");
1054 MODULE_LICENSE("GPL v2");