diff options
| author | Christophe Leroy <christophe.leroy@csgroup.eu> | 2025-09-24 17:06:47 +0200 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2025-09-26 15:13:01 -0700 |
| commit | 0e41b0af4743761a5994b9a538146ea2adea72e6 (patch) | |
| tree | 7137aa624e2dce9f2615cd688ace381ab457d58c | |
| parent | 231889d9b62650a2242b8b752565892a6cd18372 (diff) | |
| download | linux-0e41b0af4743761a5994b9a538146ea2adea72e6.tar.gz linux-0e41b0af4743761a5994b9a538146ea2adea72e6.zip | |
net: wan: framer: Add version sysfs attribute for the Lantiq PEF2256 framer
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>
| -rw-r--r-- | Documentation/ABI/testing/sysfs-driver-framer-pef2256 | 8 | ||||
| -rw-r--r-- | drivers/net/wan/framer/pef2256/pef2256.c | 24 |
2 files changed, 27 insertions, 5 deletions
diff --git a/Documentation/ABI/testing/sysfs-driver-framer-pef2256 b/Documentation/ABI/testing/sysfs-driver-framer-pef2256 new file mode 100644 index 000000000000..29f97783bf07 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-driver-framer-pef2256 @@ -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 diff --git a/drivers/net/wan/framer/pef2256/pef2256.c b/drivers/net/wan/framer/pef2256/pef2256.c index 2a25cbd3f13b..c5501826db1e 100644 --- a/drivers/net/wan/framer/pef2256/pef2256.c +++ b/drivers/net/wan/framer/pef2256/pef2256.c @@ -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[] = { |
