|
@@ -993,24 +993,24 @@ static void pcan_usb_fd_free(struct peak_usb_device *dev)
|
|
|
static const struct can_bittiming_const pcan_usb_fd_const = {
|
|
|
.name = "pcan_usb_fd",
|
|
|
.tseg1_min = 1,
|
|
|
- .tseg1_max = 64,
|
|
|
+ .tseg1_max = (1 << PUCAN_TSLOW_TSGEG1_BITS),
|
|
|
.tseg2_min = 1,
|
|
|
- .tseg2_max = 16,
|
|
|
- .sjw_max = 16,
|
|
|
+ .tseg2_max = (1 << PUCAN_TSLOW_TSGEG2_BITS),
|
|
|
+ .sjw_max = (1 << PUCAN_TSLOW_SJW_BITS),
|
|
|
.brp_min = 1,
|
|
|
- .brp_max = 1024,
|
|
|
+ .brp_max = (1 << PUCAN_TSLOW_BRP_BITS),
|
|
|
.brp_inc = 1,
|
|
|
};
|
|
|
|
|
|
static const struct can_bittiming_const pcan_usb_fd_data_const = {
|
|
|
.name = "pcan_usb_fd",
|
|
|
.tseg1_min = 1,
|
|
|
- .tseg1_max = 16,
|
|
|
+ .tseg1_max = (1 << PUCAN_TFAST_TSGEG1_BITS),
|
|
|
.tseg2_min = 1,
|
|
|
- .tseg2_max = 8,
|
|
|
- .sjw_max = 4,
|
|
|
+ .tseg2_max = (1 << PUCAN_TFAST_TSGEG2_BITS),
|
|
|
+ .sjw_max = (1 << PUCAN_TFAST_SJW_BITS),
|
|
|
.brp_min = 1,
|
|
|
- .brp_max = 1024,
|
|
|
+ .brp_max = (1 << PUCAN_TFAST_BRP_BITS),
|
|
|
.brp_inc = 1,
|
|
|
};
|
|
|
|
|
@@ -1065,24 +1065,24 @@ const struct peak_usb_adapter pcan_usb_fd = {
|
|
|
static const struct can_bittiming_const pcan_usb_pro_fd_const = {
|
|
|
.name = "pcan_usb_pro_fd",
|
|
|
.tseg1_min = 1,
|
|
|
- .tseg1_max = 64,
|
|
|
+ .tseg1_max = (1 << PUCAN_TSLOW_TSGEG1_BITS),
|
|
|
.tseg2_min = 1,
|
|
|
- .tseg2_max = 16,
|
|
|
- .sjw_max = 16,
|
|
|
+ .tseg2_max = (1 << PUCAN_TSLOW_TSGEG2_BITS),
|
|
|
+ .sjw_max = (1 << PUCAN_TSLOW_SJW_BITS),
|
|
|
.brp_min = 1,
|
|
|
- .brp_max = 1024,
|
|
|
+ .brp_max = (1 << PUCAN_TSLOW_BRP_BITS),
|
|
|
.brp_inc = 1,
|
|
|
};
|
|
|
|
|
|
static const struct can_bittiming_const pcan_usb_pro_fd_data_const = {
|
|
|
.name = "pcan_usb_pro_fd",
|
|
|
.tseg1_min = 1,
|
|
|
- .tseg1_max = 16,
|
|
|
+ .tseg1_max = (1 << PUCAN_TFAST_TSGEG1_BITS),
|
|
|
.tseg2_min = 1,
|
|
|
- .tseg2_max = 8,
|
|
|
- .sjw_max = 4,
|
|
|
+ .tseg2_max = (1 << PUCAN_TFAST_TSGEG2_BITS),
|
|
|
+ .sjw_max = (1 << PUCAN_TFAST_SJW_BITS),
|
|
|
.brp_min = 1,
|
|
|
- .brp_max = 1024,
|
|
|
+ .brp_max = (1 << PUCAN_TFAST_BRP_BITS),
|
|
|
.brp_inc = 1,
|
|
|
};
|
|
|
|
|
@@ -1132,3 +1132,75 @@ const struct peak_usb_adapter pcan_usb_pro_fd = {
|
|
|
|
|
|
.do_get_berr_counter = pcan_usb_fd_get_berr_counter,
|
|
|
};
|
|
|
+
|
|
|
+/* describes the PCAN-USB X6 adapter */
|
|
|
+static const struct can_bittiming_const pcan_usb_x6_const = {
|
|
|
+ .name = "pcan_usb_x6",
|
|
|
+ .tseg1_min = 1,
|
|
|
+ .tseg1_max = (1 << PUCAN_TSLOW_TSGEG1_BITS),
|
|
|
+ .tseg2_min = 1,
|
|
|
+ .tseg2_max = (1 << PUCAN_TSLOW_TSGEG2_BITS),
|
|
|
+ .sjw_max = (1 << PUCAN_TSLOW_SJW_BITS),
|
|
|
+ .brp_min = 1,
|
|
|
+ .brp_max = (1 << PUCAN_TSLOW_BRP_BITS),
|
|
|
+ .brp_inc = 1,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct can_bittiming_const pcan_usb_x6_data_const = {
|
|
|
+ .name = "pcan_usb_x6",
|
|
|
+ .tseg1_min = 1,
|
|
|
+ .tseg1_max = (1 << PUCAN_TFAST_TSGEG1_BITS),
|
|
|
+ .tseg2_min = 1,
|
|
|
+ .tseg2_max = (1 << PUCAN_TFAST_TSGEG2_BITS),
|
|
|
+ .sjw_max = (1 << PUCAN_TFAST_SJW_BITS),
|
|
|
+ .brp_min = 1,
|
|
|
+ .brp_max = (1 << PUCAN_TFAST_BRP_BITS),
|
|
|
+ .brp_inc = 1,
|
|
|
+};
|
|
|
+
|
|
|
+const struct peak_usb_adapter pcan_usb_x6 = {
|
|
|
+ .name = "PCAN-USB X6",
|
|
|
+ .device_id = PCAN_USBX6_PRODUCT_ID,
|
|
|
+ .ctrl_count = PCAN_USBPROFD_CHANNEL_COUNT,
|
|
|
+ .ctrlmode_supported = CAN_CTRLMODE_FD |
|
|
|
+ CAN_CTRLMODE_3_SAMPLES | CAN_CTRLMODE_LISTENONLY,
|
|
|
+ .clock = {
|
|
|
+ .freq = PCAN_UFD_CRYSTAL_HZ,
|
|
|
+ },
|
|
|
+ .bittiming_const = &pcan_usb_x6_const,
|
|
|
+ .data_bittiming_const = &pcan_usb_x6_data_const,
|
|
|
+
|
|
|
+ /* size of device private data */
|
|
|
+ .sizeof_dev_private = sizeof(struct pcan_usb_fd_device),
|
|
|
+
|
|
|
+ /* timestamps usage */
|
|
|
+ .ts_used_bits = 32,
|
|
|
+ .ts_period = 1000000, /* calibration period in ts. */
|
|
|
+ .us_per_ts_scale = 1, /* us = (ts * scale) >> shift */
|
|
|
+ .us_per_ts_shift = 0,
|
|
|
+
|
|
|
+ /* give here messages in/out endpoints */
|
|
|
+ .ep_msg_in = PCAN_USBPRO_EP_MSGIN,
|
|
|
+ .ep_msg_out = {PCAN_USBPRO_EP_MSGOUT_0, PCAN_USBPRO_EP_MSGOUT_1},
|
|
|
+
|
|
|
+ /* size of rx/tx usb buffers */
|
|
|
+ .rx_buffer_size = PCAN_UFD_RX_BUFFER_SIZE,
|
|
|
+ .tx_buffer_size = PCAN_UFD_TX_BUFFER_SIZE,
|
|
|
+
|
|
|
+ /* device callbacks */
|
|
|
+ .intf_probe = pcan_usb_pro_probe, /* same as PCAN-USB Pro */
|
|
|
+ .dev_init = pcan_usb_fd_init,
|
|
|
+
|
|
|
+ .dev_exit = pcan_usb_fd_exit,
|
|
|
+ .dev_free = pcan_usb_fd_free,
|
|
|
+ .dev_set_bus = pcan_usb_fd_set_bus,
|
|
|
+ .dev_set_bittiming = pcan_usb_fd_set_bittiming_slow,
|
|
|
+ .dev_set_data_bittiming = pcan_usb_fd_set_bittiming_fast,
|
|
|
+ .dev_decode_buf = pcan_usb_fd_decode_buf,
|
|
|
+ .dev_start = pcan_usb_fd_start,
|
|
|
+ .dev_stop = pcan_usb_fd_stop,
|
|
|
+ .dev_restart_async = pcan_usb_fd_restart_async,
|
|
|
+ .dev_encode_msg = pcan_usb_fd_encode_msg,
|
|
|
+
|
|
|
+ .do_get_berr_counter = pcan_usb_fd_get_berr_counter,
|
|
|
+};
|