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 <[email protected]>
---
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);
}
--
2.30.2
On Mon, 5 Jul 2021 13:36:36 +0200
Andreas Kemnade <[email protected]> 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 <[email protected]>
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 <[email protected]>
> ---
> 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);
> }
>