All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jimmy Assarsson <extja@kvaser.com>
To: stable@vger.kernel.org, linux-can@vger.kernel.org,
	Marc Kleine-Budde <mkl@pengutronix.de>
Cc: Jimmy Assarsson <jimmyassarsson@gmail.com>,
	Jimmy Assarsson <extja@kvaser.com>
Subject: [PATCH 4.14 1/4] can: kvaser_usb: Add struct kvaser_usb_dev_cfg
Date: Fri,  8 Jul 2022 20:46:50 +0200	[thread overview]
Message-ID: <20220708184653.280882-2-extja@kvaser.com> (raw)
In-Reply-To: <20220708184653.280882-1-extja@kvaser.com>

Add struct kvaser_usb_dev_cfg to ease backporting of upstream commits:
49f274c72357 (can: kvaser_usb: replace run-time checks with struct kvaser_usb_driver_info)
e6c80e601053 (can: kvaser_usb: kvaser_usb_leaf: fix CAN clock frequency regression)
b3b6df2c56d8 (can: kvaser_usb: kvaser_usb_leaf: fix bittiming limits)

Cc: stable@vger.kernel.org
Signed-off-by: Jimmy Assarsson <extja@kvaser.com>
---
 drivers/net/can/usb/kvaser_usb.c | 76 ++++++++++++++++++++++----------
 1 file changed, 52 insertions(+), 24 deletions(-)

diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c
index 9742e32d5cd5..6759868924b2 100644
--- a/drivers/net/can/usb/kvaser_usb.c
+++ b/drivers/net/can/usb/kvaser_usb.c
@@ -31,10 +31,6 @@
 #define USB_SEND_TIMEOUT		1000 /* msecs */
 #define USB_RECV_TIMEOUT		1000 /* msecs */
 #define RX_BUFFER_SIZE			3072
-#define KVASER_USB_CAN_CLOCK_8MHZ	8000000
-#define KVASER_USB_CAN_CLOCK_16MHZ	16000000
-#define KVASER_USB_CAN_CLOCK_24MHZ	24000000
-#define KVASER_USB_CAN_CLOCK_32MHZ	32000000
 #define MAX_NET_DEVICES			3
 #define MAX_USBCAN_NET_DEVICES		2
 
@@ -465,6 +461,7 @@ struct kvaser_usb_tx_urb_context {
 struct kvaser_usb {
 	struct usb_device *udev;
 	struct kvaser_usb_net_priv *nets[MAX_NET_DEVICES];
+	const struct kvaser_usb_dev_cfg *cfg;
 
 	struct usb_endpoint_descriptor *bulk_in, *bulk_out;
 	struct usb_anchor rx_submitted;
@@ -481,8 +478,6 @@ struct kvaser_usb {
 	bool rxinitdone;
 	void *rxbuf[MAX_RX_URBS];
 	dma_addr_t rxbuf_dma[MAX_RX_URBS];
-
-	struct can_clock clock;
 };
 
 struct kvaser_usb_net_priv {
@@ -501,6 +496,51 @@ struct kvaser_usb_net_priv {
 	struct kvaser_usb_tx_urb_context tx_contexts[];
 };
 
+struct kvaser_usb_dev_cfg {
+	const struct can_clock clock;
+	const struct can_bittiming_const * const bittiming_const;
+};
+
+static const struct can_bittiming_const kvaser_usb_bittiming_const = {
+	.name = "kvaser_usb",
+	.tseg1_min = KVASER_USB_TSEG1_MIN,
+	.tseg1_max = KVASER_USB_TSEG1_MAX,
+	.tseg2_min = KVASER_USB_TSEG2_MIN,
+	.tseg2_max = KVASER_USB_TSEG2_MAX,
+	.sjw_max = KVASER_USB_SJW_MAX,
+	.brp_min = KVASER_USB_BRP_MIN,
+	.brp_max = KVASER_USB_BRP_MAX,
+	.brp_inc = KVASER_USB_BRP_INC,
+};
+
+static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_8mhz = {
+	.clock = {
+		.freq = 8000000,
+	},
+	.bittiming_const = &kvaser_usb_bittiming_const,
+};
+
+static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_16mhz = {
+	.clock = {
+		.freq = 16000000,
+	},
+	.bittiming_const = &kvaser_usb_bittiming_const,
+};
+
+static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_24mhz = {
+	.clock = {
+		.freq = 24000000,
+	},
+	.bittiming_const = &kvaser_usb_bittiming_const,
+};
+
+static const struct kvaser_usb_dev_cfg kvaser_usb_leaf_dev_cfg_32mhz = {
+	.clock = {
+		.freq = 32000000,
+	},
+	.bittiming_const = &kvaser_usb_bittiming_const,
+};
+
 static const struct usb_device_id kvaser_usb_table[] = {
 	/* Leaf family IDs */
 	{ USB_DEVICE(KVASER_VENDOR_ID, USB_LEAF_DEVEL_PRODUCT_ID) },
@@ -673,13 +713,13 @@ static void kvaser_usb_get_software_info_leaf(struct kvaser_usb *dev,
 
 	switch (sw_options & KVASER_USB_LEAF_SWOPTION_FREQ_MASK) {
 	case KVASER_USB_LEAF_SWOPTION_FREQ_16_MHZ_CLK:
-		dev->clock.freq = KVASER_USB_CAN_CLOCK_16MHZ;
+		dev->cfg = &kvaser_usb_leaf_dev_cfg_16mhz;
 		break;
 	case KVASER_USB_LEAF_SWOPTION_FREQ_24_MHZ_CLK:
-		dev->clock.freq = KVASER_USB_CAN_CLOCK_24MHZ;
+		dev->cfg = &kvaser_usb_leaf_dev_cfg_24mhz;
 		break;
 	case KVASER_USB_LEAF_SWOPTION_FREQ_32_MHZ_CLK:
-		dev->clock.freq = KVASER_USB_CAN_CLOCK_32MHZ;
+		dev->cfg = &kvaser_usb_leaf_dev_cfg_32mhz;
 		break;
 	}
 }
@@ -705,7 +745,7 @@ static int kvaser_usb_get_software_info(struct kvaser_usb *dev)
 		dev->fw_version = le32_to_cpu(msg.u.usbcan.softinfo.fw_version);
 		dev->max_tx_urbs =
 			le16_to_cpu(msg.u.usbcan.softinfo.max_outstanding_tx);
-		dev->clock.freq = KVASER_USB_CAN_CLOCK_8MHZ;
+		dev->cfg = &kvaser_usb_leaf_dev_cfg_8mhz;
 		break;
 	}
 
@@ -1829,18 +1869,6 @@ static const struct net_device_ops kvaser_usb_netdev_ops = {
 	.ndo_change_mtu = can_change_mtu,
 };
 
-static const struct can_bittiming_const kvaser_usb_bittiming_const = {
-	.name = "kvaser_usb",
-	.tseg1_min = KVASER_USB_TSEG1_MIN,
-	.tseg1_max = KVASER_USB_TSEG1_MAX,
-	.tseg2_min = KVASER_USB_TSEG2_MIN,
-	.tseg2_max = KVASER_USB_TSEG2_MAX,
-	.sjw_max = KVASER_USB_SJW_MAX,
-	.brp_min = KVASER_USB_BRP_MIN,
-	.brp_max = KVASER_USB_BRP_MAX,
-	.brp_inc = KVASER_USB_BRP_INC,
-};
-
 static int kvaser_usb_set_bittiming(struct net_device *netdev)
 {
 	struct kvaser_usb_net_priv *priv = netdev_priv(netdev);
@@ -1957,8 +1985,8 @@ static int kvaser_usb_init_one(struct usb_interface *intf,
 	kvaser_usb_reset_tx_urb_contexts(priv);
 
 	priv->can.state = CAN_STATE_STOPPED;
-	priv->can.clock.freq = dev->clock.freq;
-	priv->can.bittiming_const = &kvaser_usb_bittiming_const;
+	priv->can.clock.freq = dev->cfg->clock.freq;
+	priv->can.bittiming_const = dev->cfg->bittiming_const;
 	priv->can.do_set_bittiming = kvaser_usb_set_bittiming;
 	priv->can.do_set_mode = kvaser_usb_set_mode;
 	if (id->driver_info & KVASER_HAS_TXRX_ERRORS)
-- 
2.36.1


  reply	other threads:[~2022-07-08 18:47 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-08 18:46 [PATCH 4.14 0/4] can: kvaser_usb: CAN clock frequency regression Jimmy Assarsson
2022-07-08 18:46 ` Jimmy Assarsson [this message]
2022-07-10 14:21   ` [PATCH 4.14 1/4] can: kvaser_usb: Add struct kvaser_usb_dev_cfg Greg KH
2022-07-10 18:40     ` Jimmy Assarsson
2022-07-12 19:18       ` Greg KH
2022-07-08 18:46 ` [PATCH 4.14 2/4] can: kvaser_usb: replace run-time checks with struct kvaser_usb_driver_info Jimmy Assarsson
2022-07-08 18:46 ` [PATCH 4.14 3/4] can: kvaser_usb: fix CAN clock frequency regression Jimmy Assarsson
2022-07-08 18:46 ` [PATCH 4.14 4/4] can: kvaser_usb: fix bittiming limits Jimmy Assarsson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220708184653.280882-2-extja@kvaser.com \
    --to=extja@kvaser.com \
    --cc=jimmyassarsson@gmail.com \
    --cc=linux-can@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.