Commit 0e41b0af authored by Christophe Leroy's avatar Christophe Leroy Committed by Jakub Kicinski
Browse files

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: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Link: https://patch.msgid.link/77a27941d6924b1009df0162ed9f0fa07ed6e431.1758726302.git.christophe.leroy@csgroup.eu


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 231889d9
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
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
+19 −5
Original line number Diff line number Diff line
@@ -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[] = {