Jiri Slaby c769f2
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Jiri Slaby c769f2
Date: Wed, 18 Jan 2023 12:06:23 +0200
Jiri Slaby c769f2
Subject: [PATCH] iio: adc: qcom-spmi-adc5: Fix the channel name
Jiri Slaby c769f2
References: bsc#1012628
Jiri Slaby c769f2
Patch-mainline: 6.2.11
Jiri Slaby c769f2
Git-commit: 701c875aded880013aacac608832995c4b052257
Jiri Slaby c769f2
Jiri Slaby c769f2
commit 701c875aded880013aacac608832995c4b052257 upstream.
Jiri Slaby c769f2
Jiri Slaby c769f2
The node name can contain an address part which is unused
Jiri Slaby c769f2
by the driver. Moreover, this string is propagated into
Jiri Slaby c769f2
the userspace label, sysfs filenames *and breaking ABI*.
Jiri Slaby c769f2
Jiri Slaby c769f2
Cut the address part out before assigning the channel name.
Jiri Slaby c769f2
Jiri Slaby c769f2
Fixes: 4f47a236a23d ("iio: adc: qcom-spmi-adc5: convert to device properties")
Jiri Slaby c769f2
Reported-by: Marijn Suijten <marijn.suijten@somainline.org>
Jiri Slaby c769f2
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Jiri Slaby c769f2
Reviewed-by: Marijn Suijten <marijn.suijten@somainline.org>
Jiri Slaby c769f2
Link: https://lore.kernel.org/r/20230118100623.42255-1-andriy.shevchenko@linux.intel.com
Jiri Slaby c769f2
Cc: <Stable@vger.kernel.org>
Jiri Slaby c769f2
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Jiri Slaby c769f2
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jiri Slaby c769f2
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Jiri Slaby c769f2
---
Jiri Slaby c769f2
 drivers/iio/adc/qcom-spmi-adc5.c | 10 +++++++++-
Jiri Slaby c769f2
 1 file changed, 9 insertions(+), 1 deletion(-)
Jiri Slaby c769f2
Jiri Slaby c769f2
diff --git a/drivers/iio/adc/qcom-spmi-adc5.c b/drivers/iio/adc/qcom-spmi-adc5.c
Jiri Slaby c769f2
index 821fee60..d1b86570 100644
Jiri Slaby c769f2
--- a/drivers/iio/adc/qcom-spmi-adc5.c
Jiri Slaby c769f2
+++ b/drivers/iio/adc/qcom-spmi-adc5.c
Jiri Slaby c769f2
@@ -626,12 +626,20 @@ static int adc5_get_fw_channel_data(struct adc5_chip *adc,
Jiri Slaby c769f2
 				    struct fwnode_handle *fwnode,
Jiri Slaby c769f2
 				    const struct adc5_data *data)
Jiri Slaby c769f2
 {
Jiri Slaby c769f2
-	const char *name = fwnode_get_name(fwnode), *channel_name;
Jiri Slaby c769f2
+	const char *channel_name;
Jiri Slaby c769f2
+	char *name;
Jiri Slaby c769f2
 	u32 chan, value, varr[2];
Jiri Slaby c769f2
 	u32 sid = 0;
Jiri Slaby c769f2
 	int ret;
Jiri Slaby c769f2
 	struct device *dev = adc->dev;
Jiri Slaby c769f2
 
Jiri Slaby c769f2
+	name = devm_kasprintf(dev, GFP_KERNEL, "%pfwP", fwnode);
Jiri Slaby c769f2
+	if (!name)
Jiri Slaby c769f2
+		return -ENOMEM;
Jiri Slaby c769f2
+
Jiri Slaby c769f2
+	/* Cut the address part */
Jiri Slaby c769f2
+	name[strchrnul(name, '@') - name] = '\0';
Jiri Slaby c769f2
+
Jiri Slaby c769f2
 	ret = fwnode_property_read_u32(fwnode, "reg", &chan);
Jiri Slaby c769f2
 	if (ret) {
Jiri Slaby c769f2
 		dev_err(dev, "invalid channel number %s\n", name);
Jiri Slaby c769f2
-- 
Jiri Slaby c769f2
2.35.3
Jiri Slaby c769f2