From: Rakuram Eswaran <rakuram.e96@gmail.com>
To: rakuram.e96@gmail.com, Marc Kleine-Budde <mkl@pengutronix.de>,
Vincent Mailhol <mailhol@kernel.org>,
Oliver Hartkopp <socketcan@hartkopp.net>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>, Jonathan Corbet <corbet@lwn.net>
Cc: linux-can@vger.kernel.org, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org, linux-doc@vger.kernel.org
Subject: [PATCH 1/2] can: dummy_can: add CAN termination support
Date: Wed, 31 Dec 2025 23:43:15 +0530 [thread overview]
Message-ID: <20251231-can_doc_update_v1-v1-1-97aac5c20a35@gmail.com> (raw)
In-Reply-To: <20251231-can_doc_update_v1-v1-0-97aac5c20a35@gmail.com>
Add support for configuring bus termination in the dummy_can driver.
This allows users to emulate a properly terminated CAN bus when
setting up virtual test environments.
Signed-off-by: Rakuram Eswaran <rakuram.e96@gmail.com>
---
Tested the termination setting using below iproute commands:
ip link set can0 type can termination 120
ip link set can0 type can termination off
ip link set can0 type can termination potato
ip link set can0 type can termination 10000
drivers/net/can/dummy_can.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/dummy_can.c b/drivers/net/can/dummy_can.c
index 41953655e3d3c9187d6574710e6aa90fc01c92a7..418d9e25bfca1c7af924ad451c8dd8ae1bca78a3 100644
--- a/drivers/net/can/dummy_can.c
+++ b/drivers/net/can/dummy_can.c
@@ -86,6 +86,11 @@ static const struct can_pwm_const dummy_can_pwm_const = {
.pwmo_max = 16,
};
+static const u16 dummy_can_termination_const[] = {
+ CAN_TERMINATION_DISABLED, /* 0 = off */
+ 120, /* 120 Ohms */
+};
+
static void dummy_can_print_bittiming(struct net_device *dev,
struct can_bittiming *bt)
{
@@ -179,6 +184,16 @@ static void dummy_can_print_bittiming_info(struct net_device *dev)
netdev_dbg(dev, "\n");
}
+static int dummy_can_set_termination(struct net_device *dev, u16 term)
+{
+ struct dummy_can *priv = netdev_priv(dev);
+
+ netdev_dbg(dev, "set termination to %u Ohms\n", term);
+ priv->can.termination = term;
+
+ return 0;
+}
+
static int dummy_can_netdev_open(struct net_device *dev)
{
int ret;
@@ -243,17 +258,23 @@ static int __init dummy_can_init(void)
dev->ethtool_ops = &dummy_can_ethtool_ops;
priv = netdev_priv(dev);
priv->can.bittiming_const = &dummy_can_bittiming_const;
- priv->can.bitrate_max = 20 * MEGA /* BPS */;
- priv->can.clock.freq = 160 * MEGA /* Hz */;
priv->can.fd.data_bittiming_const = &dummy_can_fd_databittiming_const;
priv->can.fd.tdc_const = &dummy_can_fd_tdc_const;
priv->can.xl.data_bittiming_const = &dummy_can_xl_databittiming_const;
priv->can.xl.tdc_const = &dummy_can_xl_tdc_const;
priv->can.xl.pwm_const = &dummy_can_pwm_const;
+ priv->can.bitrate_max = 20 * MEGA /* BPS */;
+ priv->can.clock.freq = 160 * MEGA /* Hz */;
+ priv->can.termination_const_cnt = ARRAY_SIZE(dummy_can_termination_const);
+ priv->can.termination_const = dummy_can_termination_const;
+
priv->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY |
CAN_CTRLMODE_FD | CAN_CTRLMODE_TDC_AUTO |
CAN_CTRLMODE_RESTRICTED | CAN_CTRLMODE_XL |
CAN_CTRLMODE_XL_TDC_AUTO | CAN_CTRLMODE_XL_TMS;
+
+ priv->can.do_set_termination = dummy_can_set_termination;
+
priv->dev = dev;
ret = register_candev(priv->dev);
--
2.51.0
next prev parent reply other threads:[~2025-12-31 18:17 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-31 18:13 [PATCH 0/2] can: add dummy_can termination and update SocketCAN docs Rakuram Eswaran
2025-12-31 18:13 ` Rakuram Eswaran [this message]
2026-01-01 12:12 ` [PATCH 1/2] can: dummy_can: add CAN termination support Vincent Mailhol
2026-01-12 17:43 ` Rakuram Eswaran
2025-12-31 18:13 ` [PATCH 2/2] docs: can: update SocketCAN documentation for CAN XL Rakuram Eswaran
2026-01-12 17:50 ` Rakuram Eswaran
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=20251231-can_doc_update_v1-v1-1-97aac5c20a35@gmail.com \
--to=rakuram.e96@gmail.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-can@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mailhol@kernel.org \
--cc=mkl@pengutronix.de \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=socketcan@hartkopp.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®