Skip to content

Commit 8720aed

Browse files
Jimmy Assarssonmarckleinebudde
authored andcommitted
can: kvaser_usb: Expose device information via devlink info_get()
Expose device information via devlink info_get(): * Serial number * Firmware version * Hardware revision * EAN (product number) Example output: $ devlink dev usb/1-1.2:1.0 $ devlink dev info usb/1-1.2:1.0: driver kvaser_usb serial_number 1020 versions: fixed: board.rev 1 board.id 7330130009653 running: fw 3.22.527 Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr> Signed-off-by: Jimmy Assarsson <extja@kvaser.com> Link: https://patch.msgid.link/20250725123452.41-10-extja@kvaser.com Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
1 parent 9505a83 commit 8720aed

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

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

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,56 @@
77

88
#include <net/devlink.h>
99

10+
#define KVASER_USB_EAN_MSB 0x00073301
11+
12+
static int kvaser_usb_devlink_info_get(struct devlink *devlink,
13+
struct devlink_info_req *req,
14+
struct netlink_ext_ack *extack)
15+
{
16+
struct kvaser_usb *dev = devlink_priv(devlink);
17+
char buf[] = "73301XXXXXXXXXX";
18+
int ret;
19+
20+
if (dev->serial_number) {
21+
snprintf(buf, sizeof(buf), "%u", dev->serial_number);
22+
ret = devlink_info_serial_number_put(req, buf);
23+
if (ret)
24+
return ret;
25+
}
26+
27+
if (dev->fw_version.major) {
28+
snprintf(buf, sizeof(buf), "%u.%u.%u",
29+
dev->fw_version.major,
30+
dev->fw_version.minor,
31+
dev->fw_version.build);
32+
ret = devlink_info_version_running_put(req,
33+
DEVLINK_INFO_VERSION_GENERIC_FW,
34+
buf);
35+
if (ret)
36+
return ret;
37+
}
38+
39+
if (dev->hw_revision) {
40+
snprintf(buf, sizeof(buf), "%u", dev->hw_revision);
41+
ret = devlink_info_version_fixed_put(req,
42+
DEVLINK_INFO_VERSION_GENERIC_BOARD_REV,
43+
buf);
44+
if (ret)
45+
return ret;
46+
}
47+
48+
if (dev->ean[1] == KVASER_USB_EAN_MSB) {
49+
snprintf(buf, sizeof(buf), "%x%08x", dev->ean[1], dev->ean[0]);
50+
ret = devlink_info_version_fixed_put(req,
51+
DEVLINK_INFO_VERSION_GENERIC_BOARD_ID,
52+
buf);
53+
if (ret)
54+
return ret;
55+
}
56+
57+
return 0;
58+
}
59+
1060
const struct devlink_ops kvaser_usb_devlink_ops = {
61+
.info_get = kvaser_usb_devlink_info_get,
1162
};

0 commit comments

Comments
 (0)