Takashi Iwai 686ab3
From 00e5786177649c1e3110f9454fdd34e336597265 Mon Sep 17 00:00:00 2001
Takashi Iwai 686ab3
From: Jimmy Assarsson <extja@kvaser.com>
Takashi Iwai 686ab3
Date: Mon, 10 Oct 2022 20:52:36 +0200
Takashi Iwai 686ab3
Subject: [PATCH] can: kvaser_usb: Add struct kvaser_usb_busparams
Takashi Iwai 686ab3
Git-commit: 00e5786177649c1e3110f9454fdd34e336597265
Takashi Iwai 686ab3
Patch-mainline: v6.2-rc1
Takashi Iwai 686ab3
References: git-fixes
Takashi Iwai 686ab3
Takashi Iwai 686ab3
Add struct kvaser_usb_busparams containing the busparameters used in
Takashi Iwai 686ab3
CMD_{SET,GET}_BUSPARAMS* commands.
Takashi Iwai 686ab3
Takashi Iwai 686ab3
Tested-by: Anssi Hannula <anssi.hannula@bitwise.fi>
Takashi Iwai 686ab3
Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
Takashi Iwai 686ab3
Link: https://lore.kernel.org/all/20221010185237.319219-11-extja@kvaser.com
Takashi Iwai 686ab3
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Takashi Iwai 686ab3
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 686ab3
Takashi Iwai 686ab3
---
Takashi Iwai 686ab3
 drivers/net/can/usb/kvaser_usb/kvaser_usb.h       |    8 +++++
Takashi Iwai 686ab3
 drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c |   32 ++++++++--------------
Takashi Iwai 686ab3
 drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c  |   18 ++++--------
Takashi Iwai 686ab3
 3 files changed, 27 insertions(+), 31 deletions(-)
Takashi Iwai 686ab3
Takashi Iwai 686ab3
--- a/drivers/net/can/usb/kvaser_usb/kvaser_usb.h
Takashi Iwai 686ab3
+++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb.h
Takashi Iwai 686ab3
@@ -76,6 +76,14 @@ struct kvaser_usb_tx_urb_context {
Takashi Iwai 686ab3
 	int dlc;
Takashi Iwai 686ab3
 };
Takashi Iwai 686ab3
 
Takashi Iwai 686ab3
+struct kvaser_usb_busparams {
Takashi Iwai 686ab3
+	__le32 bitrate;
Takashi Iwai 686ab3
+	u8 tseg1;
Takashi Iwai 686ab3
+	u8 tseg2;
Takashi Iwai 686ab3
+	u8 sjw;
Takashi Iwai 686ab3
+	u8 nsamples;
Takashi Iwai 686ab3
+} __packed;
Takashi Iwai 686ab3
+
Takashi Iwai 686ab3
 struct kvaser_usb {
Takashi Iwai 686ab3
 	struct usb_device *udev;
Takashi Iwai 686ab3
 	struct usb_interface *intf;
Takashi Iwai 686ab3
--- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
Takashi Iwai 686ab3
+++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
Takashi Iwai 686ab3
@@ -196,17 +196,9 @@ struct kvaser_cmd_chip_state_event {
Takashi Iwai 686ab3
 #define KVASER_USB_HYDRA_BUS_MODE_CANFD_ISO	0x01
Takashi Iwai 686ab3
 #define KVASER_USB_HYDRA_BUS_MODE_NONISO	0x02
Takashi Iwai 686ab3
 struct kvaser_cmd_set_busparams {
Takashi Iwai 686ab3
-	__le32 bitrate;
Takashi Iwai 686ab3
-	u8 tseg1;
Takashi Iwai 686ab3
-	u8 tseg2;
Takashi Iwai 686ab3
-	u8 sjw;
Takashi Iwai 686ab3
-	u8 nsamples;
Takashi Iwai 686ab3
+	struct kvaser_usb_busparams busparams_arb;
Takashi Iwai 686ab3
 	u8 reserved0[4];
Takashi Iwai 686ab3
-	__le32 bitrate_d;
Takashi Iwai 686ab3
-	u8 tseg1_d;
Takashi Iwai 686ab3
-	u8 tseg2_d;
Takashi Iwai 686ab3
-	u8 sjw_d;
Takashi Iwai 686ab3
-	u8 nsamples_d;
Takashi Iwai 686ab3
+	struct kvaser_usb_busparams busparams_data;
Takashi Iwai 686ab3
 	u8 canfd_mode;
Takashi Iwai 686ab3
 	u8 reserved1[7];
Takashi Iwai 686ab3
 } __packed;
Takashi Iwai 686ab3
@@ -1538,11 +1530,11 @@ static int kvaser_usb_hydra_set_bittimin
Takashi Iwai 686ab3
 		return -ENOMEM;
Takashi Iwai 686ab3
 
Takashi Iwai 686ab3
 	cmd->header.cmd_no = CMD_SET_BUSPARAMS_REQ;
Takashi Iwai 686ab3
-	cmd->set_busparams_req.bitrate = cpu_to_le32(bt->bitrate);
Takashi Iwai 686ab3
-	cmd->set_busparams_req.sjw = (u8)sjw;
Takashi Iwai 686ab3
-	cmd->set_busparams_req.tseg1 = (u8)tseg1;
Takashi Iwai 686ab3
-	cmd->set_busparams_req.tseg2 = (u8)tseg2;
Takashi Iwai 686ab3
-	cmd->set_busparams_req.nsamples = 1;
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_arb.bitrate = cpu_to_le32(bt->bitrate);
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_arb.sjw = (u8)sjw;
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_arb.tseg1 = (u8)tseg1;
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_arb.tseg2 = (u8)tseg2;
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_arb.nsamples = 1;
Takashi Iwai 686ab3
 
Takashi Iwai 686ab3
 	kvaser_usb_hydra_set_cmd_dest_he
Takashi Iwai 686ab3
 		(cmd, dev->card_data.hydra.channel_to_he[priv->channel]);
Takashi Iwai 686ab3
@@ -1572,11 +1564,11 @@ static int kvaser_usb_hydra_set_data_bit
Takashi Iwai 686ab3
 		return -ENOMEM;
Takashi Iwai 686ab3
 
Takashi Iwai 686ab3
 	cmd->header.cmd_no = CMD_SET_BUSPARAMS_FD_REQ;
Takashi Iwai 686ab3
-	cmd->set_busparams_req.bitrate_d = cpu_to_le32(dbt->bitrate);
Takashi Iwai 686ab3
-	cmd->set_busparams_req.sjw_d = (u8)sjw;
Takashi Iwai 686ab3
-	cmd->set_busparams_req.tseg1_d = (u8)tseg1;
Takashi Iwai 686ab3
-	cmd->set_busparams_req.tseg2_d = (u8)tseg2;
Takashi Iwai 686ab3
-	cmd->set_busparams_req.nsamples_d = 1;
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_data.bitrate = cpu_to_le32(dbt->bitrate);
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_data.sjw = (u8)sjw;
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_data.tseg1 = (u8)tseg1;
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_data.tseg2 = (u8)tseg2;
Takashi Iwai 686ab3
+	cmd->set_busparams_req.busparams_data.nsamples = 1;
Takashi Iwai 686ab3
 
Takashi Iwai 686ab3
 	if (priv->can.ctrlmode & CAN_CTRLMODE_FD) {
Takashi Iwai 686ab3
 		if (priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO)
Takashi Iwai 686ab3
--- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
Takashi Iwai 686ab3
+++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
Takashi Iwai 686ab3
@@ -162,11 +162,7 @@ struct usbcan_cmd_softinfo {
Takashi Iwai 686ab3
 struct kvaser_cmd_busparams {
Takashi Iwai 686ab3
 	u8 tid;
Takashi Iwai 686ab3
 	u8 channel;
Takashi Iwai 686ab3
-	__le32 bitrate;
Takashi Iwai 686ab3
-	u8 tseg1;
Takashi Iwai 686ab3
-	u8 tseg2;
Takashi Iwai 686ab3
-	u8 sjw;
Takashi Iwai 686ab3
-	u8 no_samp;
Takashi Iwai 686ab3
+	struct kvaser_usb_busparams busparams;
Takashi Iwai 686ab3
 } __packed;
Takashi Iwai 686ab3
 
Takashi Iwai 686ab3
 struct kvaser_cmd_tx_can {
Takashi Iwai 686ab3
@@ -1645,15 +1641,15 @@ static int kvaser_usb_leaf_set_bittiming
Takashi Iwai 686ab3
 	cmd->len = CMD_HEADER_LEN + sizeof(struct kvaser_cmd_busparams);
Takashi Iwai 686ab3
 	cmd->u.busparams.channel = priv->channel;
Takashi Iwai 686ab3
 	cmd->u.busparams.tid = 0xff;
Takashi Iwai 686ab3
-	cmd->u.busparams.bitrate = cpu_to_le32(bt->bitrate);
Takashi Iwai 686ab3
-	cmd->u.busparams.sjw = bt->sjw;
Takashi Iwai 686ab3
-	cmd->u.busparams.tseg1 = bt->prop_seg + bt->phase_seg1;
Takashi Iwai 686ab3
-	cmd->u.busparams.tseg2 = bt->phase_seg2;
Takashi Iwai 686ab3
+	cmd->u.busparams.busparams.bitrate = cpu_to_le32(bt->bitrate);
Takashi Iwai 686ab3
+	cmd->u.busparams.busparams.sjw = bt->sjw;
Takashi Iwai 686ab3
+	cmd->u.busparams.busparams.tseg1 = bt->prop_seg + bt->phase_seg1;
Takashi Iwai 686ab3
+	cmd->u.busparams.busparams.tseg2 = bt->phase_seg2;
Takashi Iwai 686ab3
 
Takashi Iwai 686ab3
 	if (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES)
Takashi Iwai 686ab3
-		cmd->u.busparams.no_samp = 3;
Takashi Iwai 686ab3
+		cmd->u.busparams.busparams.nsamples = 3;
Takashi Iwai 686ab3
 	else
Takashi Iwai 686ab3
-		cmd->u.busparams.no_samp = 1;
Takashi Iwai 686ab3
+		cmd->u.busparams.busparams.nsamples = 1;
Takashi Iwai 686ab3
 
Takashi Iwai 686ab3
 	rc = kvaser_usb_send_cmd(dev, cmd, cmd->len);
Takashi Iwai 686ab3