Skip to content

Commit 843b846

Browse files
CaSchmidtmarckleinebudde
authored andcommitted
can: kvaser_usb: Add len8_dlc support
Add support for the Classical CAN raw DLC functionality to send and receive DLC values from 9 .. 15. v1: https://lore.kernel.org/all/[email protected] Signed-off-by: Carsten Schmidt <[email protected]> Tested-by: Jimmy Assarsson <[email protected]> Signed-off-by: Jimmy Assarsson <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Marc Kleine-Budde <[email protected]>
1 parent d49b9b0 commit 843b846

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,7 @@ static int kvaser_usb_init_one(struct kvaser_usb *dev, int channel)
816816
init_completion(&priv->stop_comp);
817817
init_completion(&priv->flush_comp);
818818
init_completion(&priv->get_busparams_comp);
819-
priv->can.ctrlmode_supported = 0;
819+
priv->can.ctrlmode_supported = CAN_CTRLMODE_CC_LEN8_DLC;
820820

821821
priv->dev = dev;
822822
priv->netdev = netdev;

drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,7 +1263,7 @@ static void kvaser_usb_hydra_rx_msg_std(const struct kvaser_usb *dev,
12631263
if (flags & KVASER_USB_HYDRA_CF_FLAG_OVERRUN)
12641264
kvaser_usb_can_rx_over_error(priv->netdev);
12651265

1266-
cf->len = can_cc_dlc2len(cmd->rx_can.dlc);
1266+
can_frame_set_cc_len((struct can_frame *)cf, cmd->rx_can.dlc, priv->can.ctrlmode);
12671267

12681268
if (flags & KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME) {
12691269
cf->can_id |= CAN_RTR_FLAG;
@@ -1342,7 +1342,7 @@ static void kvaser_usb_hydra_rx_msg_ext(const struct kvaser_usb *dev,
13421342
if (flags & KVASER_USB_HYDRA_CF_FLAG_ESI)
13431343
cf->flags |= CANFD_ESI;
13441344
} else {
1345-
cf->len = can_cc_dlc2len(dlc);
1345+
can_frame_set_cc_len((struct can_frame *)cf, dlc, priv->can.ctrlmode);
13461346
}
13471347

13481348
if (flags & KVASER_USB_HYDRA_CF_FLAG_REMOTE_FRAME) {
@@ -1442,7 +1442,7 @@ kvaser_usb_hydra_frame_to_cmd_ext(const struct kvaser_usb_net_priv *priv,
14421442
struct kvaser_usb *dev = priv->dev;
14431443
struct kvaser_cmd_ext *cmd;
14441444
struct canfd_frame *cf = (struct canfd_frame *)skb->data;
1445-
u8 dlc = can_fd_len2dlc(cf->len);
1445+
u8 dlc;
14461446
u8 nbr_of_bytes = cf->len;
14471447
u32 flags;
14481448
u32 id;
@@ -1467,6 +1467,11 @@ kvaser_usb_hydra_frame_to_cmd_ext(const struct kvaser_usb_net_priv *priv,
14671467

14681468
cmd->len = cpu_to_le16(*cmd_len);
14691469

1470+
if (can_is_canfd_skb(skb))
1471+
dlc = can_fd_len2dlc(cf->len);
1472+
else
1473+
dlc = can_get_cc_dlc((struct can_frame *)cf, priv->can.ctrlmode);
1474+
14701475
cmd->tx_can.databytes = nbr_of_bytes;
14711476
cmd->tx_can.dlc = dlc;
14721477

@@ -1542,7 +1547,7 @@ kvaser_usb_hydra_frame_to_cmd_std(const struct kvaser_usb_net_priv *priv,
15421547
id = cf->can_id & CAN_SFF_MASK;
15431548
}
15441549

1545-
cmd->tx_can.dlc = cf->len;
1550+
cmd->tx_can.dlc = can_get_cc_dlc(cf, priv->can.ctrlmode);
15461551

15471552
flags = (cf->can_id & CAN_EFF_FLAG ?
15481553
KVASER_USB_HYDRA_CF_FLAG_EXTENDED_ID : 0);

drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ kvaser_usb_leaf_frame_to_cmd(const struct kvaser_usb_net_priv *priv,
573573
cmd->u.tx_can.data[1] = cf->can_id & 0x3f;
574574
}
575575

576-
cmd->u.tx_can.data[5] = cf->len;
576+
cmd->u.tx_can.data[5] = can_get_cc_dlc(cf, priv->can.ctrlmode);
577577
memcpy(&cmd->u.tx_can.data[6], cf->data, cf->len);
578578

579579
if (cf->can_id & CAN_RTR_FLAG)
@@ -1349,7 +1349,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev,
13491349
else
13501350
cf->can_id &= CAN_SFF_MASK;
13511351

1352-
cf->len = can_cc_dlc2len(cmd->u.leaf.log_message.dlc);
1352+
can_frame_set_cc_len(cf, cmd->u.leaf.log_message.dlc & 0xF, priv->can.ctrlmode);
13531353

13541354
if (cmd->u.leaf.log_message.flags & MSG_FLAG_REMOTE_FRAME)
13551355
cf->can_id |= CAN_RTR_FLAG;
@@ -1367,7 +1367,7 @@ static void kvaser_usb_leaf_rx_can_msg(const struct kvaser_usb *dev,
13671367
cf->can_id |= CAN_EFF_FLAG;
13681368
}
13691369

1370-
cf->len = can_cc_dlc2len(rx_data[5]);
1370+
can_frame_set_cc_len(cf, rx_data[5] & 0xF, priv->can.ctrlmode);
13711371

13721372
if (cmd->u.rx_can_header.flag & MSG_FLAG_REMOTE_FRAME)
13731373
cf->can_id |= CAN_RTR_FLAG;

0 commit comments

Comments
 (0)