linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] staging: iio: ad7780: correct driver read
@ 2018-10-25 22:29 Renato Lui Geh
  2018-10-25 22:30 ` [PATCH v2 1/2] staging: iio: ad7780: update voltage on read Renato Lui Geh
  2018-10-25 22:30 ` [PATCH v2 2/2] staging: iio: ad7780: fix offset read value Renato Lui Geh
  0 siblings, 2 replies; 7+ messages in thread
From: Renato Lui Geh @ 2018-10-25 22:29 UTC (permalink / raw)
  To: lars, Michael.Hennerich, jic23, knaack.h, pmeerw, gregkh,
	alexandru.Ardelean, stefan.popa, giuliano.belinassi
  Cc: linux-iio, devel, linux-kernel, kernel-usp

The purpose of this series is to correct two issues in the driver's raw
read function.

Changelog:
* v2
	- separated original patch into two patches
	  (https://marc.info/?l=linux-iio&m=154047435605492)

Renato Lui Geh (2):
  staging: iio: ad7780: update voltage on read
  staging: iio: ad7780: fix offset read value

 drivers/staging/iio/adc/ad7780.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

-- 
2.19.1


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

* [PATCH v2 1/2] staging: iio: ad7780: update voltage on read
  2018-10-25 22:29 [PATCH v2 0/2] staging: iio: ad7780: correct driver read Renato Lui Geh
@ 2018-10-25 22:30 ` Renato Lui Geh
  2018-10-28 15:56   ` Jonathan Cameron
  2018-10-25 22:30 ` [PATCH v2 2/2] staging: iio: ad7780: fix offset read value Renato Lui Geh
  1 sibling, 1 reply; 7+ messages in thread
From: Renato Lui Geh @ 2018-10-25 22:30 UTC (permalink / raw)
  To: lars, Michael.Hennerich, jic23, knaack.h, pmeerw, gregkh,
	alexandru.Ardelean, stefan.popa, giuliano.belinassi
  Cc: linux-iio, devel, linux-kernel, kernel-usp

The ad7780 driver previously did not read the correct device output, as
it read an outdated value set at initialization. It now updates its
voltage on read.

Signed-off-by: Renato Lui Geh <renatogeh@gmail.com>
---
 drivers/staging/iio/adc/ad7780.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
index b67412db0318..27972563bb6a 100644
--- a/drivers/staging/iio/adc/ad7780.c
+++ b/drivers/staging/iio/adc/ad7780.c
@@ -87,11 +87,15 @@ static int ad7780_read_raw(struct iio_dev *indio_dev,
 			   long m)
 {
 	struct ad7780_state *st = iio_priv(indio_dev);
+	int voltage_uv = 0;
 
 	switch (m) {
 	case IIO_CHAN_INFO_RAW:
 		return ad_sigma_delta_single_conversion(indio_dev, chan, val);
 	case IIO_CHAN_INFO_SCALE:
+		voltage_uv = regulator_get_voltage(st->reg);
+		if (voltage_uv)
+			st->int_vref_mv = voltage_uv/1000;
 		*val = st->int_vref_mv * st->gain;
 		*val2 = chan->scan_type.realbits - 1;
 		return IIO_VAL_FRACTIONAL_LOG2;
-- 
2.19.1


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

* [PATCH v2 2/2] staging: iio: ad7780: fix offset read value
  2018-10-25 22:29 [PATCH v2 0/2] staging: iio: ad7780: correct driver read Renato Lui Geh
  2018-10-25 22:30 ` [PATCH v2 1/2] staging: iio: ad7780: update voltage on read Renato Lui Geh
@ 2018-10-25 22:30 ` Renato Lui Geh
  2018-10-28 15:58   ` Jonathan Cameron
  1 sibling, 1 reply; 7+ messages in thread
From: Renato Lui Geh @ 2018-10-25 22:30 UTC (permalink / raw)
  To: lars, Michael.Hennerich, jic23, knaack.h, pmeerw, gregkh,
	alexandru.Ardelean, stefan.popa, giuliano.belinassi
  Cc: linux-iio, devel, linux-kernel, kernel-usp

Variable val subtracted an uninitialized value on IIO_CHAN_INFO_OFFSET.
This was fixed by assigning the correct value instead.

Signed-off-by: Renato Lui Geh <renatogeh@gmail.com>
---
 drivers/staging/iio/adc/ad7780.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
index 27972563bb6a..06700fe554a2 100644
--- a/drivers/staging/iio/adc/ad7780.c
+++ b/drivers/staging/iio/adc/ad7780.c
@@ -100,7 +100,7 @@ static int ad7780_read_raw(struct iio_dev *indio_dev,
 		*val2 = chan->scan_type.realbits - 1;
 		return IIO_VAL_FRACTIONAL_LOG2;
 	case IIO_CHAN_INFO_OFFSET:
-		*val -= (1 << (chan->scan_type.realbits - 1));
+		*val = -(1 << (chan->scan_type.realbits - 1));
 		return IIO_VAL_INT;
 	}
 
-- 
2.19.1


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

* Re: [PATCH v2 1/2] staging: iio: ad7780: update voltage on read
  2018-10-25 22:30 ` [PATCH v2 1/2] staging: iio: ad7780: update voltage on read Renato Lui Geh
@ 2018-10-28 15:56   ` Jonathan Cameron
  2018-10-28 16:52     ` Renato Lui Geh
  0 siblings, 1 reply; 7+ messages in thread
From: Jonathan Cameron @ 2018-10-28 15:56 UTC (permalink / raw)
  To: Renato Lui Geh
  Cc: lars, Michael.Hennerich, knaack.h, pmeerw, gregkh,
	alexandru.Ardelean, stefan.popa, giuliano.belinassi, linux-iio,
	devel, linux-kernel, kernel-usp

On Thu, 25 Oct 2018 19:30:04 -0300
Renato Lui Geh <renatogeh@gmail.com> wrote:

> The ad7780 driver previously did not read the correct device output, as
> it read an outdated value set at initialization. It now updates its
> voltage on read.
> 
> Signed-off-by: Renato Lui Geh <renatogeh@gmail.com>
> ---
>  drivers/staging/iio/adc/ad7780.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
> index b67412db0318..27972563bb6a 100644
> --- a/drivers/staging/iio/adc/ad7780.c
> +++ b/drivers/staging/iio/adc/ad7780.c
> @@ -87,11 +87,15 @@ static int ad7780_read_raw(struct iio_dev *indio_dev,
>  			   long m)
>  {
>  	struct ad7780_state *st = iio_priv(indio_dev);
> +	int voltage_uv = 0;
No initialization needed as it is always set in the paths where it is used
(before it is used).
>  
>  	switch (m) {
>  	case IIO_CHAN_INFO_RAW:
>  		return ad_sigma_delta_single_conversion(indio_dev, chan, val);
>  	case IIO_CHAN_INFO_SCALE:
> +		voltage_uv = regulator_get_voltage(st->reg);
> +		if (voltage_uv)
> +			st->int_vref_mv = voltage_uv/1000;
>  		*val = st->int_vref_mv * st->gain;
Is there actually a reason (now) to have the stashed value
of int_vref_mv in the state structure?

Also, I think we are always replacing the value that is retrieved
in probe so we can drop reading it there as well.

Thanks,

Jonathan

>  		*val2 = chan->scan_type.realbits - 1;
>  		return IIO_VAL_FRACTIONAL_LOG2;


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

* Re: [PATCH v2 2/2] staging: iio: ad7780: fix offset read value
  2018-10-25 22:30 ` [PATCH v2 2/2] staging: iio: ad7780: fix offset read value Renato Lui Geh
@ 2018-10-28 15:58   ` Jonathan Cameron
  0 siblings, 0 replies; 7+ messages in thread
From: Jonathan Cameron @ 2018-10-28 15:58 UTC (permalink / raw)
  To: Renato Lui Geh
  Cc: lars, Michael.Hennerich, knaack.h, pmeerw, gregkh,
	alexandru.Ardelean, stefan.popa, giuliano.belinassi, linux-iio,
	devel, linux-kernel, kernel-usp

On Thu, 25 Oct 2018 19:30:37 -0300
Renato Lui Geh <renatogeh@gmail.com> wrote:

> Variable val subtracted an uninitialized value on IIO_CHAN_INFO_OFFSET.
> This was fixed by assigning the correct value instead.
> 
> Signed-off-by: Renato Lui Geh <renatogeh@gmail.com>

It obviously doesn't make much difference, but as you are respinning anyway...
Please could you always put fixes at the beginning of a set as it makes it
easier to back port them.  It think this one is simple enough that it is
worth applying to the stable kernels.

(naturally I could do that anyway as the rebase is trivial, so I'm just
encouraging good practice by asking you to do it in v3!)

Thanks,

Jonathan

> ---
>  drivers/staging/iio/adc/ad7780.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
> index 27972563bb6a..06700fe554a2 100644
> --- a/drivers/staging/iio/adc/ad7780.c
> +++ b/drivers/staging/iio/adc/ad7780.c
> @@ -100,7 +100,7 @@ static int ad7780_read_raw(struct iio_dev *indio_dev,
>  		*val2 = chan->scan_type.realbits - 1;
>  		return IIO_VAL_FRACTIONAL_LOG2;
>  	case IIO_CHAN_INFO_OFFSET:
> -		*val -= (1 << (chan->scan_type.realbits - 1));
> +		*val = -(1 << (chan->scan_type.realbits - 1));
>  		return IIO_VAL_INT;
>  	}
>  


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

* Re: [PATCH v2 1/2] staging: iio: ad7780: update voltage on read
  2018-10-28 15:56   ` Jonathan Cameron
@ 2018-10-28 16:52     ` Renato Lui Geh
  2018-10-28 18:58       ` Jonathan Cameron
  0 siblings, 1 reply; 7+ messages in thread
From: Renato Lui Geh @ 2018-10-28 16:52 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: Renato Lui Geh, lars, Michael.Hennerich, knaack.h, pmeerw,
	gregkh, alexandru.Ardelean, stefan.popa, giuliano.belinassi,
	linux-iio, devel, linux-kernel, kernel-usp

Hi Jonathan,

Thank you for the review.

>> +		voltage_uv = regulator_get_voltage(st->reg);
>> +		if (voltage_uv)
>> +			st->int_vref_mv = voltage_uv/1000;
>>  		*val = st->int_vref_mv * st->gain;
>Is there actually a reason (now) to have the stashed value
>of int_vref_mv in the state structure?

From probe:

if (voltage_uv)
	st->int_vref_mv = voltage_uv / 1000;
else
	dev_warn(&spi->dev, "Reference voltage unspecified\n");

So the idea was to, when voltage_uv = 0, return the previous voltage.
Should I instead handle this as an error the same way as in probe?

Thanks,
Renato

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

* Re: [PATCH v2 1/2] staging: iio: ad7780: update voltage on read
  2018-10-28 16:52     ` Renato Lui Geh
@ 2018-10-28 18:58       ` Jonathan Cameron
  0 siblings, 0 replies; 7+ messages in thread
From: Jonathan Cameron @ 2018-10-28 18:58 UTC (permalink / raw)
  To: Renato Lui Geh
  Cc: lars, Michael.Hennerich, knaack.h, pmeerw, gregkh,
	alexandru.Ardelean, stefan.popa, giuliano.belinassi, linux-iio,
	devel, linux-kernel, kernel-usp

On Sun, 28 Oct 2018 13:52:32 -0300
Renato Lui Geh <renatogeh@gmail.com> wrote:

> Hi Jonathan,
> 
> Thank you for the review.
> 
> >> +		voltage_uv = regulator_get_voltage(st->reg);
> >> +		if (voltage_uv)
> >> +			st->int_vref_mv = voltage_uv/1000;
> >>  		*val = st->int_vref_mv * st->gain;  
> >Is there actually a reason (now) to have the stashed value
> >of int_vref_mv in the state structure?  
> 
> From probe:
> 
> if (voltage_uv)
> 	st->int_vref_mv = voltage_uv / 1000;
> else
> 	dev_warn(&spi->dev, "Reference voltage unspecified\n");
> 
> So the idea was to, when voltage_uv = 0, return the previous voltage.
> Should I instead handle this as an error the same way as in probe?
> 
I would return it as an error.  I can't really see how we would get
this to occur if the bindings are all correct and appropriate driver
support is there for the regulator to actually let us use it.

If we wanted to handle the case of no regulator having been provided
cleanly then we should it using an optional regulator get, and
not provide the scale attribute at all if we can't know what it will
read.  This is a weird enough corner case though that I just wouldn't 
bother handling it as anything other than an error.

> Thanks,
> Renato
Thanks,

Jonathan

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

end of thread, other threads:[~2018-10-28 18:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-25 22:29 [PATCH v2 0/2] staging: iio: ad7780: correct driver read Renato Lui Geh
2018-10-25 22:30 ` [PATCH v2 1/2] staging: iio: ad7780: update voltage on read Renato Lui Geh
2018-10-28 15:56   ` Jonathan Cameron
2018-10-28 16:52     ` Renato Lui Geh
2018-10-28 18:58       ` Jonathan Cameron
2018-10-25 22:30 ` [PATCH v2 2/2] staging: iio: ad7780: fix offset read value Renato Lui Geh
2018-10-28 15:58   ` Jonathan Cameron

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).