[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20221031154406.259857-7-mkl@pengutronix.de>
Date: Mon, 31 Oct 2022 16:43:58 +0100
From: Marc Kleine-Budde <mkl@...gutronix.de>
To: netdev@...r.kernel.org
Cc: davem@...emloft.net, kuba@...nel.org, linux-can@...r.kernel.org,
kernel@...gutronix.de, Lukas Magel <lukas.magel@...teo.net>,
Stephane Grosjean <s.grosjean@...k-system.com>,
Marc Kleine-Budde <mkl@...gutronix.de>
Subject: [PATCH net-next 06/14] can: peak_usb: export PCAN user device ID as sysfs device attribute
From: Lukas Magel <lukas.magel@...teo.net>
This patch exports the user device ID as a sysfs attribute. This allows
users to easily read the ID and to write udev rules that can match against
the ID.
Signed-off-by: Stephane Grosjean <s.grosjean@...k-system.com>
Signed-off-by: Lukas Magel <lukas.magel@...teo.net>
Link: https://lore.kernel.org/all/20221030105939.87658-7-lukas.magel@posteo.net
Signed-off-by: Marc Kleine-Budde <mkl@...gutronix.de>
---
.../ABI/testing/sysfs-class-net-peak_usb | 15 ++++++++++
drivers/net/can/usb/peak_usb/pcan_usb_core.c | 30 +++++++++++++++++--
2 files changed, 42 insertions(+), 3 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-class-net-peak_usb
diff --git a/Documentation/ABI/testing/sysfs-class-net-peak_usb b/Documentation/ABI/testing/sysfs-class-net-peak_usb
new file mode 100644
index 000000000000..f7f23f9bdfde
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-class-net-peak_usb
@@ -0,0 +1,15 @@
+
+What: /sys/class/net/<iface>/peak_usb/user_devid
+Date: October 2022
+KernelVersion: 6.1
+Contact: Stephane Grosjean <s.grosjean@...k-system.com>
+Description:
+ PEAK PCAN-USB devices support a user-configurable device
+ identifier. This attribute provides read-only access to the
+ currently configured value of the device identifier. Depending
+ on the device type, the identifier has a length of 8 or 32 bit.
+ The value read from this attribute is always an 8 digit 32 bit
+ hexadecimal value in big endian format. If the device only
+ supports an 8 bit identifier, the upper 24 bit of the value are
+ set to zero.
+
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
index d8af448058fa..e558746a0252 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
@@ -8,13 +8,15 @@
*
* Many thanks to Klaus Hitschler <klaus.hitschler@....de>
*/
+#include <linux/device.h>
+#include <linux/ethtool.h>
#include <linux/init.h>
-#include <linux/signal.h>
-#include <linux/slab.h>
#include <linux/module.h>
#include <linux/netdevice.h>
+#include <linux/signal.h>
+#include <linux/slab.h>
+#include <linux/sysfs.h>
#include <linux/usb.h>
-#include <linux/ethtool.h>
#include <linux/can.h>
#include <linux/can/dev.h>
@@ -53,6 +55,25 @@ static const struct usb_device_id peak_usb_table[] = {
MODULE_DEVICE_TABLE(usb, peak_usb_table);
+static ssize_t user_devid_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ struct net_device *netdev = to_net_dev(dev);
+ struct peak_usb_device *peak_dev = netdev_priv(netdev);
+
+ return sysfs_emit(buf, "%08X\n", peak_dev->user_devid);
+}
+static DEVICE_ATTR_RO(user_devid);
+
+static const struct attribute *peak_usb_sysfs_attrs[] = {
+ &dev_attr_user_devid.attr,
+ NULL,
+};
+
+static const struct attribute_group peak_usb_sysfs_group = {
+ .name = "peak_usb",
+ .attrs = (struct attribute **)peak_usb_sysfs_attrs,
+};
+
/*
* dump memory
*/
@@ -961,6 +982,9 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,
/* add ethtool support */
netdev->ethtool_ops = peak_usb_adapter->ethtool_ops;
+ /* register peak_usb sysfs files */
+ netdev->sysfs_groups[0] = &peak_usb_sysfs_group;
+
init_usb_anchor(&dev->rx_submitted);
init_usb_anchor(&dev->tx_submitted);
--
2.35.1
Powered by blists - more mailing lists