LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH v3 0/2] mfd: rn5t618: Extend ADC support
@ 2021-07-12 21:21 Andreas Kemnade
  2021-07-12 21:21 ` [PATCH v3 1/2] iio: adc: rn5t618: Add iio map Andreas Kemnade
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Andreas Kemnade @ 2021-07-12 21:21 UTC (permalink / raw)
  To: jic23, lars, sre, andreas, linux-iio, linux-kernel, linux-pm,
	letux-kernel

Add iio map to make voltage_now related channels accessible to power
driver.

Changes in v3:
- use scale functions
- add acks

Changes in v2:
- use iio_map instead of devicetree to allow mapping which does not
  block future extension by devicetree.


*** BLURB HERE ***

Andreas Kemnade (2):
  iio: adc: rn5t618: Add iio map
  power: supply: rn5t618: Add voltage_now property

 drivers/iio/adc/rn5t618-adc.c        | 23 +++++++++++++++++
 drivers/power/supply/Kconfig         |  2 ++
 drivers/power/supply/rn5t618_power.c | 38 ++++++++++++++++++++++++++++
 3 files changed, 63 insertions(+)

-- 
2.30.2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3 1/2] iio: adc: rn5t618: Add iio map
  2021-07-12 21:21 [PATCH v3 0/2] mfd: rn5t618: Extend ADC support Andreas Kemnade
@ 2021-07-12 21:21 ` Andreas Kemnade
  2021-07-12 21:21 ` [PATCH v3 2/2] power: supply: rn5t618: Add voltage_now property Andreas Kemnade
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Andreas Kemnade @ 2021-07-12 21:21 UTC (permalink / raw)
  To: jic23, lars, sre, andreas, linux-iio, linux-kernel, linux-pm,
	letux-kernel
  Cc: Jonathan Cameron

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>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
Changes in v3:
- none

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


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3 2/2] power: supply: rn5t618: Add voltage_now property
  2021-07-12 21:21 [PATCH v3 0/2] mfd: rn5t618: Extend ADC support Andreas Kemnade
  2021-07-12 21:21 ` [PATCH v3 1/2] iio: adc: rn5t618: Add iio map Andreas Kemnade
@ 2021-07-12 21:21 ` Andreas Kemnade
  2021-07-13  8:27 ` [PATCH v3 0/2] mfd: rn5t618: Extend ADC support Lee Jones
  2021-08-13 16:00 ` Sebastian Reichel
  3 siblings, 0 replies; 6+ messages in thread
From: Andreas Kemnade @ 2021-07-12 21:21 UTC (permalink / raw)
  To: jic23, lars, sre, andreas, linux-iio, linux-kernel, linux-pm,
	letux-kernel
  Cc: kernel test robot, Jonathan Cameron

Read voltage_now via IIO and provide the property.

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
Reported-by: kernel test robot <lkp@intel.com> # missing depends on IIO
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
Changes in v3:
- use scaled reading function

Changes in v2:
- different error handling needed for iio_map usage
- fix dependencies in Kconfig

 drivers/power/supply/Kconfig         |  2 ++
 drivers/power/supply/rn5t618_power.c | 38 ++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
index e696364126f1..b2910d950929 100644
--- a/drivers/power/supply/Kconfig
+++ b/drivers/power/supply/Kconfig
@@ -790,6 +790,8 @@ config CHARGER_WILCO
 config RN5T618_POWER
 	tristate "RN5T618 charger/fuel gauge support"
 	depends on MFD_RN5T618
+	depends on RN5T618_ADC
+	depends on IIO
 	help
 	  Say Y here to have support for RN5T618 PMIC family fuel gauge and charger.
 	  This driver can also be built as a module. If so, the module will be
diff --git a/drivers/power/supply/rn5t618_power.c b/drivers/power/supply/rn5t618_power.c
index 819061918b2a..a5e09ac78a50 100644
--- a/drivers/power/supply/rn5t618_power.c
+++ b/drivers/power/supply/rn5t618_power.c
@@ -9,10 +9,12 @@
 #include <linux/device.h>
 #include <linux/bitops.h>
 #include <linux/errno.h>
+#include <linux/iio/consumer.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/module.h>
 #include <linux/mfd/rn5t618.h>
+#include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/power_supply.h>
 #include <linux/regmap.h>
@@ -64,6 +66,8 @@ struct rn5t618_power_info {
 	struct power_supply *battery;
 	struct power_supply *usb;
 	struct power_supply *adp;
+	struct iio_channel *channel_vusb;
+	struct iio_channel *channel_vadp;
 	int irq;
 };
 
@@ -77,6 +81,7 @@ static enum power_supply_usb_type rn5t618_usb_types[] = {
 static enum power_supply_property rn5t618_usb_props[] = {
 	/* input current limit is not very accurate */
 	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW,
 	POWER_SUPPLY_PROP_STATUS,
 	POWER_SUPPLY_PROP_USB_TYPE,
 	POWER_SUPPLY_PROP_ONLINE,
@@ -85,6 +90,7 @@ static enum power_supply_property rn5t618_usb_props[] = {
 static enum power_supply_property rn5t618_adp_props[] = {
 	/* input current limit is not very accurate */
 	POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
+	POWER_SUPPLY_PROP_VOLTAGE_NOW,
 	POWER_SUPPLY_PROP_STATUS,
 	POWER_SUPPLY_PROP_ONLINE,
 };
@@ -463,6 +469,15 @@ static int rn5t618_adp_get_property(struct power_supply *psy,
 			return ret;
 
 		val->intval = FROM_CUR_REG(regval);
+		break;
+	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
+		if (!info->channel_vadp)
+			return -ENODATA;
+
+		ret = iio_read_channel_processed_scale(info->channel_vadp, &val->intval, 1000);
+		if (ret < 0)
+			return ret;
+
 		break;
 	default:
 		return -EINVAL;
@@ -588,6 +603,15 @@ static int rn5t618_usb_get_property(struct power_supply *psy,
 
 			val->intval = FROM_CUR_REG(regval);
 		}
+		break;
+	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
+		if (!info->channel_vusb)
+			return -ENODATA;
+
+		ret = iio_read_channel_processed_scale(info->channel_vusb, &val->intval, 1000);
+		if (ret < 0)
+			return ret;
+
 		break;
 	default:
 		return -EINVAL;
@@ -711,6 +735,20 @@ static int rn5t618_power_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, info);
 
+	info->channel_vusb = devm_iio_channel_get(&pdev->dev, "vusb");
+	if (IS_ERR(info->channel_vusb)) {
+		if (PTR_ERR(info->channel_vusb) == -ENODEV)
+			return -EPROBE_DEFER;
+		return PTR_ERR(info->channel_vusb);
+	}
+
+	info->channel_vadp = devm_iio_channel_get(&pdev->dev, "vadp");
+	if (IS_ERR(info->channel_vadp)) {
+		if (PTR_ERR(info->channel_vadp) == -ENODEV)
+			return -EPROBE_DEFER;
+		return PTR_ERR(info->channel_vadp);
+	}
+
 	ret = regmap_read(info->rn5t618->regmap, RN5T618_CONTROL, &v);
 	if (ret)
 		return ret;
-- 
2.30.2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 0/2] mfd: rn5t618: Extend ADC support
  2021-07-12 21:21 [PATCH v3 0/2] mfd: rn5t618: Extend ADC support Andreas Kemnade
  2021-07-12 21:21 ` [PATCH v3 1/2] iio: adc: rn5t618: Add iio map Andreas Kemnade
  2021-07-12 21:21 ` [PATCH v3 2/2] power: supply: rn5t618: Add voltage_now property Andreas Kemnade
@ 2021-07-13  8:27 ` Lee Jones
  2021-07-17 17:08   ` Jonathan Cameron
  2021-08-13 16:00 ` Sebastian Reichel
  3 siblings, 1 reply; 6+ messages in thread
From: Lee Jones @ 2021-07-13  8:27 UTC (permalink / raw)
  To: Andreas Kemnade
  Cc: jic23, lars, sre, linux-iio, linux-kernel, linux-pm, letux-kernel

On Mon, 12 Jul 2021, Andreas Kemnade wrote:

> Add iio map to make voltage_now related channels accessible to power
> driver.
> 
> Changes in v3:
> - use scale functions
> - add acks
> 
> Changes in v2:
> - use iio_map instead of devicetree to allow mapping which does not
>   block future extension by devicetree.
> 
> 
> *** BLURB HERE ***

Doh!

> Andreas Kemnade (2):
>   iio: adc: rn5t618: Add iio map
>   power: supply: rn5t618: Add voltage_now property
> 
>  drivers/iio/adc/rn5t618-adc.c        | 23 +++++++++++++++++
>  drivers/power/supply/Kconfig         |  2 ++
>  drivers/power/supply/rn5t618_power.c | 38 ++++++++++++++++++++++++++++
>  3 files changed, 63 insertions(+)

Not sure I get this.

Firstly, the cover-letter is marked as MFD, but no MFD changes occur.
Secondly, I am only in receipt of the 0th patch which seems odd.  IMHO
patch sets should be sent threaded and all parties should see
discussion on all patches regardless of whether they maintain them or
not, since the overall conversation is often useful/relevant to all.

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 0/2] mfd: rn5t618: Extend ADC support
  2021-07-13  8:27 ` [PATCH v3 0/2] mfd: rn5t618: Extend ADC support Lee Jones
@ 2021-07-17 17:08   ` Jonathan Cameron
  0 siblings, 0 replies; 6+ messages in thread
From: Jonathan Cameron @ 2021-07-17 17:08 UTC (permalink / raw)
  To: Lee Jones
  Cc: Andreas Kemnade, lars, sre, linux-iio, linux-kernel, linux-pm,
	letux-kernel

On Tue, 13 Jul 2021 09:27:27 +0100
Lee Jones <lee.jones@linaro.org> wrote:

> On Mon, 12 Jul 2021, Andreas Kemnade wrote:
> 
> > Add iio map to make voltage_now related channels accessible to power
> > driver.
> > 
> > Changes in v3:
> > - use scale functions
> > - add acks
> > 
> > Changes in v2:
> > - use iio_map instead of devicetree to allow mapping which does not
> >   block future extension by devicetree.
> > 
> > 
> > *** BLURB HERE ***  
> 
> Doh!
> 
> > Andreas Kemnade (2):
> >   iio: adc: rn5t618: Add iio map
> >   power: supply: rn5t618: Add voltage_now property
> > 
> >  drivers/iio/adc/rn5t618-adc.c        | 23 +++++++++++++++++
> >  drivers/power/supply/Kconfig         |  2 ++
> >  drivers/power/supply/rn5t618_power.c | 38 ++++++++++++++++++++++++++++
> >  3 files changed, 63 insertions(+)  
> 
> Not sure I get this.
> 
> Firstly, the cover-letter is marked as MFD, but no MFD changes occur.

So this is a bit of a fun corner case.  The series 'used' to include an mfd
change that made that labelling relevant.  Then that went away as I suggested
that we could do it in a simpler fashion.
Under the circumstances the series needed a rename!

> Secondly, I am only in receipt of the 0th patch which seems odd.  IMHO
> patch sets should be sent threaded and all parties should see
> discussion on all patches regardless of whether they maintain them or
> not, since the overall conversation is often useful/relevant to all.
> 
Absolutely agree for small series like this.

Anyhow, as far as I'm concerned this is now in the hands of the power supply
maintainers anyway so ignoring it ;)

Jonathan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 0/2] mfd: rn5t618: Extend ADC support
  2021-07-12 21:21 [PATCH v3 0/2] mfd: rn5t618: Extend ADC support Andreas Kemnade
                   ` (2 preceding siblings ...)
  2021-07-13  8:27 ` [PATCH v3 0/2] mfd: rn5t618: Extend ADC support Lee Jones
@ 2021-08-13 16:00 ` Sebastian Reichel
  3 siblings, 0 replies; 6+ messages in thread
From: Sebastian Reichel @ 2021-08-13 16:00 UTC (permalink / raw)
  To: Andreas Kemnade
  Cc: jic23, lars, linux-iio, linux-kernel, linux-pm, letux-kernel

[-- Attachment #1: Type: text/plain, Size: 789 bytes --]

Hi,

On Mon, Jul 12, 2021 at 11:21:09PM +0200, Andreas Kemnade wrote:
> Add iio map to make voltage_now related channels accessible to power
> driver.
> 
> Changes in v3:
> - use scale functions
> - add acks
> 
> Changes in v2:
> - use iio_map instead of devicetree to allow mapping which does not
>   block future extension by devicetree.

Thanks, queued.

-- Sebastian

> *** BLURB HERE ***

:)

> Andreas Kemnade (2):
>   iio: adc: rn5t618: Add iio map
>   power: supply: rn5t618: Add voltage_now property
> 
>  drivers/iio/adc/rn5t618-adc.c        | 23 +++++++++++++++++
>  drivers/power/supply/Kconfig         |  2 ++
>  drivers/power/supply/rn5t618_power.c | 38 ++++++++++++++++++++++++++++
>  3 files changed, 63 insertions(+)
> 
> -- 
> 2.30.2
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-08-13 16:00 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-12 21:21 [PATCH v3 0/2] mfd: rn5t618: Extend ADC support Andreas Kemnade
2021-07-12 21:21 ` [PATCH v3 1/2] iio: adc: rn5t618: Add iio map Andreas Kemnade
2021-07-12 21:21 ` [PATCH v3 2/2] power: supply: rn5t618: Add voltage_now property Andreas Kemnade
2021-07-13  8:27 ` [PATCH v3 0/2] mfd: rn5t618: Extend ADC support Lee Jones
2021-07-17 17:08   ` Jonathan Cameron
2021-08-13 16:00 ` Sebastian Reichel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).