can: kvaser_usb: kvaser_usb_hydra: Add support for new device variant
authorChrister Beskow <chbe@kvaser.com>
Sun, 15 Nov 2020 16:30:26 +0000 (17:30 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 20 Nov 2020 11:06:46 +0000 (12:06 +0100)
Add support for a new variant of devices using the hydra platform, based on
NXP i.MX RT (flexcan).

Signed-off-by: Christer Beskow <chbe@kvaser.com>
Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
Link: https://lore.kernel.org/r/20201115163027.16851-5-jimmyassarsson@gmail.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c

index 107b205..480bd2e 100644 (file)
@@ -34,6 +34,7 @@
 /* Forward declarations */
 static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_kcan;
 static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_flexc;
+static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_rt;
 
 #define KVASER_USB_HYDRA_BULK_EP_IN_ADDR       0x82
 #define KVASER_USB_HYDRA_BULK_EP_OUT_ADDR      0x02
@@ -135,6 +136,7 @@ struct kvaser_cmd_sw_detail_req {
 #define KVASER_USB_HYDRA_SW_FLAG_CANFD         BIT(10)
 #define KVASER_USB_HYDRA_SW_FLAG_NONISO                BIT(11)
 #define KVASER_USB_HYDRA_SW_FLAG_EXT_CAP       BIT(12)
+#define KVASER_USB_HYDRA_SW_FLAG_CAN_FREQ_80M  BIT(13)
 struct kvaser_cmd_sw_detail_res {
        __le32 sw_flags;
        __le32 sw_version;
@@ -383,6 +385,30 @@ static const struct can_bittiming_const kvaser_usb_hydra_flexc_bittiming_c = {
        .brp_inc = 1,
 };
 
+static const struct can_bittiming_const kvaser_usb_hydra_rt_bittiming_c = {
+       .name = "kvaser_usb_rt",
+       .tseg1_min = 2,
+       .tseg1_max = 96,
+       .tseg2_min = 2,
+       .tseg2_max = 32,
+       .sjw_max = 32,
+       .brp_min = 1,
+       .brp_max = 1024,
+       .brp_inc = 1,
+};
+
+static const struct can_bittiming_const kvaser_usb_hydra_rtd_bittiming_c = {
+       .name = "kvaser_usb_rt",
+       .tseg1_min = 2,
+       .tseg1_max = 39,
+       .tseg2_min = 2,
+       .tseg2_max = 8,
+       .sjw_max = 8,
+       .brp_min = 1,
+       .brp_max = 1024,
+       .brp_inc = 1,
+};
+
 #define KVASER_USB_HYDRA_TRANSID_BITS          12
 #define KVASER_USB_HYDRA_TRANSID_MASK \
                                GENMASK(KVASER_USB_HYDRA_TRANSID_BITS - 1, 0)
@@ -1727,6 +1753,8 @@ static int kvaser_usb_hydra_get_software_details(struct kvaser_usb *dev)
 
        if (flags &  KVASER_USB_HYDRA_SW_FLAG_FREQ_80M)
                dev->cfg = &kvaser_usb_hydra_dev_cfg_kcan;
+       else if (flags & KVASER_USB_HYDRA_SW_FLAG_CAN_FREQ_80M)
+               dev->cfg = &kvaser_usb_hydra_dev_cfg_rt;
        else
                dev->cfg = &kvaser_usb_hydra_dev_cfg_flexc;
 
@@ -2026,3 +2054,12 @@ static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_flexc = {
        .timestamp_freq = 1,
        .bittiming_const = &kvaser_usb_hydra_flexc_bittiming_c,
 };
+
+static const struct kvaser_usb_dev_cfg kvaser_usb_hydra_dev_cfg_rt = {
+       .clock = {
+               .freq = 80000000,
+       },
+       .timestamp_freq = 24,
+       .bittiming_const = &kvaser_usb_hydra_rt_bittiming_c,
+       .data_bittiming_const = &kvaser_usb_hydra_rtd_bittiming_c,
+};