diff mbox series

[v2,1/2] iio: adc: rn5t618: Add iio map

Message ID 20210705113637.28908-2-andreas@kemnade.info (mailing list archive)
State Not Applicable, archived
Headers show
Series mfd: rn5t618: Extend ADC support | expand

Commit Message

Andreas Kemnade July 5, 2021, 11:36 a.m. UTC
Add iio map to allow power driver to read out values as a consumer.
This approach does not block later addition of devicetree support
which would be helpful if there is an in-kernel consumer for AIN0/1.

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
---
Changes in v2:
- provide consumer mapping via iio_map instead of devicetree

 drivers/iio/adc/rn5t618-adc.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

Comments

Jonathan Cameron July 11, 2021, 10:21 a.m. UTC | #1
On Mon,  5 Jul 2021 13:36:36 +0200
Andreas Kemnade <andreas@kemnade.info> wrote:

> Add iio map to allow power driver to read out values as a consumer.
> This approach does not block later addition of devicetree support
> which would be helpful if there is an in-kernel consumer for AIN0/1.
> 
> Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
Looks good.  I'm assuming this will go via the power tree, perhaps with
an immutable branch on off chance we have any other changes in the same
driver this cycle.

Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
> Changes in v2:
> - provide consumer mapping via iio_map instead of devicetree
> 
>  drivers/iio/adc/rn5t618-adc.c | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/drivers/iio/adc/rn5t618-adc.c b/drivers/iio/adc/rn5t618-adc.c
> index 7010c4276947..c56fccb2c8e1 100644
> --- a/drivers/iio/adc/rn5t618-adc.c
> +++ b/drivers/iio/adc/rn5t618-adc.c
> @@ -16,6 +16,8 @@
>  #include <linux/completion.h>
>  #include <linux/regmap.h>
>  #include <linux/iio/iio.h>
> +#include <linux/iio/driver.h>
> +#include <linux/iio/machine.h>
>  #include <linux/slab.h>
>  
>  #define RN5T618_ADC_CONVERSION_TIMEOUT   (msecs_to_jiffies(500))
> @@ -189,6 +191,19 @@ static const struct iio_chan_spec rn5t618_adc_iio_channels[] = {
>  	RN5T618_ADC_CHANNEL(AIN0, IIO_VOLTAGE, "AIN0")
>  };
>  
> +static struct iio_map rn5t618_maps[] = {
> +	IIO_MAP("VADP", "rn5t618-power", "vadp"),
> +	IIO_MAP("VUSB", "rn5t618-power", "vusb"),
> +	{ /* sentinel */ }
> +};
> +
> +static void unregister_map(void *data)
> +{
> +	struct iio_dev *iio_dev = (struct iio_dev *) data;
> +
> +	iio_map_array_unregister(iio_dev);
> +}
> +
>  static int rn5t618_adc_probe(struct platform_device *pdev)
>  {
>  	int ret;
> @@ -239,6 +254,14 @@ static int rn5t618_adc_probe(struct platform_device *pdev)
>  		return ret;
>  	}
>  
> +	ret = iio_map_array_register(iio_dev, rn5t618_maps);
> +	if (ret < 0)
> +		return ret;
> +
> +	ret = devm_add_action_or_reset(adc->dev, unregister_map, iio_dev);
> +	if (ret < 0)
> +		return ret;
> +
>  	return devm_iio_device_register(adc->dev, iio_dev);
>  }
>
diff mbox series

Patch

diff --git a/drivers/iio/adc/rn5t618-adc.c b/drivers/iio/adc/rn5t618-adc.c
index 7010c4276947..c56fccb2c8e1 100644
--- a/drivers/iio/adc/rn5t618-adc.c
+++ b/drivers/iio/adc/rn5t618-adc.c
@@ -16,6 +16,8 @@ 
 #include <linux/completion.h>
 #include <linux/regmap.h>
 #include <linux/iio/iio.h>
+#include <linux/iio/driver.h>
+#include <linux/iio/machine.h>
 #include <linux/slab.h>
 
 #define RN5T618_ADC_CONVERSION_TIMEOUT   (msecs_to_jiffies(500))
@@ -189,6 +191,19 @@  static const struct iio_chan_spec rn5t618_adc_iio_channels[] = {
 	RN5T618_ADC_CHANNEL(AIN0, IIO_VOLTAGE, "AIN0")
 };
 
+static struct iio_map rn5t618_maps[] = {
+	IIO_MAP("VADP", "rn5t618-power", "vadp"),
+	IIO_MAP("VUSB", "rn5t618-power", "vusb"),
+	{ /* sentinel */ }
+};
+
+static void unregister_map(void *data)
+{
+	struct iio_dev *iio_dev = (struct iio_dev *) data;
+
+	iio_map_array_unregister(iio_dev);
+}
+
 static int rn5t618_adc_probe(struct platform_device *pdev)
 {
 	int ret;
@@ -239,6 +254,14 @@  static int rn5t618_adc_probe(struct platform_device *pdev)
 		return ret;
 	}
 
+	ret = iio_map_array_register(iio_dev, rn5t618_maps);
+	if (ret < 0)
+		return ret;
+
+	ret = devm_add_action_or_reset(adc->dev, unregister_map, iio_dev);
+	if (ret < 0)
+		return ret;
+
 	return devm_iio_device_register(adc->dev, iio_dev);
 }