28
28
29
29
#include "kvaser_usb.h"
30
30
31
- /* Forward declaration */
32
- static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg ;
33
-
34
- #define CAN_USB_CLOCK 8000000
35
31
#define MAX_USBCAN_NET_DEVICES 2
36
32
37
33
/* Command header size */
@@ -80,6 +76,12 @@ static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg;
80
76
81
77
#define CMD_LEAF_LOG_MESSAGE 106
82
78
79
+ /* Leaf frequency options */
80
+ #define KVASER_USB_LEAF_SWOPTION_FREQ_MASK 0x60
81
+ #define KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK 0
82
+ #define KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK BIT(5)
83
+ #define KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK BIT(6)
84
+
83
85
/* error factors */
84
86
#define M16C_EF_ACKE BIT(0)
85
87
#define M16C_EF_CRCE BIT(1)
@@ -340,6 +342,50 @@ struct kvaser_usb_err_summary {
340
342
};
341
343
};
342
344
345
+ static const struct can_bittiming_const kvaser_usb_leaf_bittiming_const = {
346
+ .name = "kvaser_usb" ,
347
+ .tseg1_min = KVASER_USB_TSEG1_MIN ,
348
+ .tseg1_max = KVASER_USB_TSEG1_MAX ,
349
+ .tseg2_min = KVASER_USB_TSEG2_MIN ,
350
+ .tseg2_max = KVASER_USB_TSEG2_MAX ,
351
+ .sjw_max = KVASER_USB_SJW_MAX ,
352
+ .brp_min = KVASER_USB_BRP_MIN ,
353
+ .brp_max = KVASER_USB_BRP_MAX ,
354
+ .brp_inc = KVASER_USB_BRP_INC ,
355
+ };
356
+
357
+ static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_8mhz = {
358
+ .clock = {
359
+ .freq = 8000000 ,
360
+ },
361
+ .timestamp_freq = 1 ,
362
+ .bittiming_const = & kvaser_usb_leaf_bittiming_const ,
363
+ };
364
+
365
+ static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_16mhz = {
366
+ .clock = {
367
+ .freq = 16000000 ,
368
+ },
369
+ .timestamp_freq = 1 ,
370
+ .bittiming_const = & kvaser_usb_leaf_bittiming_const ,
371
+ };
372
+
373
+ static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_24mhz = {
374
+ .clock = {
375
+ .freq = 24000000 ,
376
+ },
377
+ .timestamp_freq = 1 ,
378
+ .bittiming_const = & kvaser_usb_leaf_bittiming_const ,
379
+ };
380
+
381
+ static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_32mhz = {
382
+ .clock = {
383
+ .freq = 32000000 ,
384
+ },
385
+ .timestamp_freq = 1 ,
386
+ .bittiming_const = & kvaser_usb_leaf_bittiming_const ,
387
+ };
388
+
343
389
static void *
344
390
kvaser_usb_leaf_frame_to_cmd (const struct kvaser_usb_net_priv * priv ,
345
391
const struct sk_buff * skb , int * frame_len ,
@@ -471,6 +517,27 @@ static int kvaser_usb_leaf_send_simple_cmd(const struct kvaser_usb *dev,
471
517
return rc ;
472
518
}
473
519
520
+ static void kvaser_usb_leaf_get_software_info_leaf (struct kvaser_usb * dev ,
521
+ const struct leaf_cmd_softinfo * softinfo )
522
+ {
523
+ u32 sw_options = le32_to_cpu (softinfo -> sw_options );
524
+
525
+ dev -> fw_version = le32_to_cpu (softinfo -> fw_version );
526
+ dev -> max_tx_urbs = le16_to_cpu (softinfo -> max_outstanding_tx );
527
+
528
+ switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK ) {
529
+ case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK :
530
+ dev -> cfg = & kvaser_usb_leaf_dev_cfg_16mhz ;
531
+ break ;
532
+ case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK :
533
+ dev -> cfg = & kvaser_usb_leaf_dev_cfg_24mhz ;
534
+ break ;
535
+ case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK :
536
+ dev -> cfg = & kvaser_usb_leaf_dev_cfg_32mhz ;
537
+ break ;
538
+ }
539
+ }
540
+
474
541
static int kvaser_usb_leaf_get_software_info_inner (struct kvaser_usb * dev )
475
542
{
476
543
struct kvaser_cmd cmd ;
@@ -486,14 +553,13 @@ static int kvaser_usb_leaf_get_software_info_inner(struct kvaser_usb *dev)
486
553
487
554
switch (dev -> card_data .leaf .family ) {
488
555
case KVASER_LEAF :
489
- dev -> fw_version = le32_to_cpu (cmd .u .leaf .softinfo .fw_version );
490
- dev -> max_tx_urbs =
491
- le16_to_cpu (cmd .u .leaf .softinfo .max_outstanding_tx );
556
+ kvaser_usb_leaf_get_software_info_leaf (dev , & cmd .u .leaf .softinfo );
492
557
break ;
493
558
case KVASER_USBCAN :
494
559
dev -> fw_version = le32_to_cpu (cmd .u .usbcan .softinfo .fw_version );
495
560
dev -> max_tx_urbs =
496
561
le16_to_cpu (cmd .u .usbcan .softinfo .max_outstanding_tx );
562
+ dev -> cfg = & kvaser_usb_leaf_dev_cfg_8mhz ;
497
563
break ;
498
564
}
499
565
@@ -1225,24 +1291,11 @@ static int kvaser_usb_leaf_init_card(struct kvaser_usb *dev)
1225
1291
{
1226
1292
struct kvaser_usb_dev_card_data * card_data = & dev -> card_data ;
1227
1293
1228
- dev -> cfg = & kvaser_usb_leaf_dev_cfg ;
1229
1294
card_data -> ctrlmode_supported |= CAN_CTRLMODE_3_SAMPLES ;
1230
1295
1231
1296
return 0 ;
1232
1297
}
1233
1298
1234
- static const struct can_bittiming_const kvaser_usb_leaf_bittiming_const = {
1235
- .name = "kvaser_usb" ,
1236
- .tseg1_min = KVASER_USB_TSEG1_MIN ,
1237
- .tseg1_max = KVASER_USB_TSEG1_MAX ,
1238
- .tseg2_min = KVASER_USB_TSEG2_MIN ,
1239
- .tseg2_max = KVASER_USB_TSEG2_MAX ,
1240
- .sjw_max = KVASER_USB_SJW_MAX ,
1241
- .brp_min = KVASER_USB_BRP_MIN ,
1242
- .brp_max = KVASER_USB_BRP_MAX ,
1243
- .brp_inc = KVASER_USB_BRP_INC ,
1244
- };
1245
-
1246
1299
static int kvaser_usb_leaf_set_bittiming (struct net_device * netdev )
1247
1300
{
1248
1301
struct kvaser_usb_net_priv * priv = netdev_priv (netdev );
@@ -1348,11 +1401,3 @@ const struct kvaser_usb_dev_ops kvaser_usb_leaf_dev_ops = {
1348
1401
.dev_read_bulk_callback = kvaser_usb_leaf_read_bulk_callback ,
1349
1402
.dev_frame_to_cmd = kvaser_usb_leaf_frame_to_cmd ,
1350
1403
};
1351
-
1352
- static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg = {
1353
- .clock = {
1354
- .freq = CAN_USB_CLOCK ,
1355
- },
1356
- .timestamp_freq = 1 ,
1357
- .bittiming_const = & kvaser_usb_leaf_bittiming_const ,
1358
- };
0 commit comments