]> www.infradead.org Git - users/hch/misc.git/commitdiff
net: wan: framer: Add version sysfs attribute for the Lantiq PEF2256 framer
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Wed, 24 Sep 2025 15:06:47 +0000 (17:06 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 26 Sep 2025 22:13:01 +0000 (15:13 -0700)
Lantiq PEF2256 framer has some little differences in behaviour
depending on its version.

Add a sysfs attribute to allow user applications to know the
version.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Link: https://patch.msgid.link/77a27941d6924b1009df0162ed9f0fa07ed6e431.1758726302.git.christophe.leroy@csgroup.eu
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/ABI/testing/sysfs-driver-framer-pef2256 [new file with mode: 0644]
drivers/net/wan/framer/pef2256/pef2256.c

diff --git a/Documentation/ABI/testing/sysfs-driver-framer-pef2256 b/Documentation/ABI/testing/sysfs-driver-framer-pef2256
new file mode 100644 (file)
index 0000000..29f9778
--- /dev/null
@@ -0,0 +1,8 @@
+What:          /sys/bus/platform/devices/xxx/version
+Date:          Sep 2025
+Contact:       netdev@vger.kernel.org
+Description:   Reports the version of the PEF2256 framer
+
+               Access: Read
+
+               Valid values: Represented as string
index 2a25cbd3f13b3c7bffa62d4373ab6ff728511890..c5501826db1eb9ca6d5776b156204898480ab4b2 100644 (file)
@@ -37,6 +37,7 @@ struct pef2256 {
        struct device *dev;
        struct regmap *regmap;
        enum pef2256_version version;
+       const char *version_txt;
        struct clk *mclk;
        struct clk *sclkr;
        struct clk *sclkx;
@@ -114,6 +115,16 @@ enum pef2256_version pef2256_get_version(struct pef2256 *pef2256)
 }
 EXPORT_SYMBOL_GPL(pef2256_get_version);
 
+static ssize_t version_show(struct device *dev, struct device_attribute *attr,
+                           char *buf)
+{
+       struct pef2256 *pef2256 = dev_get_drvdata(dev);
+
+       return sysfs_emit(buf, "%s\n", pef2256->version_txt);
+}
+
+static DEVICE_ATTR_RO(version);
+
 enum pef2256_gcm_config_item {
        PEF2256_GCM_CONFIG_1544000 = 0,
        PEF2256_GCM_CONFIG_2048000,
@@ -697,7 +708,6 @@ static int pef2256_probe(struct platform_device *pdev)
        unsigned long sclkr_rate, sclkx_rate;
        struct framer_provider *framer_provider;
        struct pef2256 *pef2256;
-       const char *version_txt;
        void __iomem *iomem;
        int ret;
        int irq;
@@ -763,18 +773,18 @@ static int pef2256_probe(struct platform_device *pdev)
        pef2256->version = pef2256_get_version(pef2256);
        switch (pef2256->version) {
        case PEF2256_VERSION_1_2:
-               version_txt = "1.2";
+               pef2256->version_txt = "1.2";
                break;
        case PEF2256_VERSION_2_1:
-               version_txt = "2.1";
+               pef2256->version_txt = "2.1";
                break;
        case PEF2256_VERSION_2_2:
-               version_txt = "2.2";
+               pef2256->version_txt = "2.2";
                break;
        default:
                return -ENODEV;
        }
-       dev_info(pef2256->dev, "Version %s detected\n", version_txt);
+       dev_info(pef2256->dev, "Version %s detected\n", pef2256->version_txt);
 
        ret = pef2556_of_parse(pef2256, np);
        if (ret)
@@ -835,6 +845,8 @@ static int pef2256_probe(struct platform_device *pdev)
                return ret;
        }
 
+       device_create_file(pef2256->dev, &dev_attr_version);
+
        return 0;
 }
 
@@ -849,6 +861,8 @@ static void pef2256_remove(struct platform_device *pdev)
        pef2256_write8(pef2256, PEF2256_IMR3, 0xff);
        pef2256_write8(pef2256, PEF2256_IMR4, 0xff);
        pef2256_write8(pef2256, PEF2256_IMR5, 0xff);
+
+       device_remove_file(pef2256->dev, &dev_attr_version);
 }
 
 static const struct of_device_id pef2256_id_table[] = {