linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes
@ 2016-03-11 14:52 Marc Titinger
  2016-03-11 14:52 ` [PATCH-vs-togreg 2/2] iio: ina2xx-adc: fix scale for VShunt Marc Titinger
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Marc Titinger @ 2016-03-11 14:52 UTC (permalink / raw)
  To: jic23, knaack.h, lars, pmeerw; +Cc: afd, linux-iio, linux-kernel

The user (or an init script) may setup RShunt via sysfs after the
driver was initialized, for instance based on the EEPROM contents
of a modular probe. The calibration register must be set accordingly.

Signed-off-by: Marc Titinger <marc.titinger@baylibre.com>
---
tested with BeagleBone-black and BayLibre-acme.
---
 drivers/iio/adc/ina2xx-adc.c | 36 +++++++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/drivers/iio/adc/ina2xx-adc.c b/drivers/iio/adc/ina2xx-adc.c
index 65909d5..e5ac120 100644
--- a/drivers/iio/adc/ina2xx-adc.c
+++ b/drivers/iio/adc/ina2xx-adc.c
@@ -350,6 +350,23 @@ static ssize_t ina2xx_allow_async_readout_store(struct device *dev,
 	return len;
 }
 
+/*
+ * Set current LSB to 1mA, shunt is in uOhms
+ * (equation 13 in datasheet). We hardcode a Current_LSB
+ * of 1.0 x10-6. The only remaining parameter is RShunt.
+ * There is no need to expose the CALIBRATION register
+ * to the user for now. But we need to reset this register
+ * if the user updates RShunt after driver init, e.g upon
+ * reading an EEPROM/Probe-type value.
+ */
+static int ina2xx_set_calibration(struct ina2xx_chip_info *chip)
+{
+	u16 regval = DIV_ROUND_CLOSEST(chip->config->calibration_factor,
+				   chip->shunt_resistor);
+
+	return regmap_write(chip->regmap, INA2XX_CALIBRATION, regval);
+}
+
 static int set_shunt_resistor(struct ina2xx_chip_info *chip, unsigned int val)
 {
 	if (val <= 0 || val > chip->config->calibration_factor)
@@ -385,6 +402,11 @@ static ssize_t ina2xx_shunt_resistor_store(struct device *dev,
 	if (ret)
 		return ret;
 
+	/* Update the Calibration register */
+	ret = ina2xx_set_calibration(chip);
+	if (ret)
+		return ret;
+
 	return len;
 }
 
@@ -599,6 +621,8 @@ static const struct iio_info ina2xx_info = {
 	.debugfs_reg_access = ina2xx_debug_reg,
 };
 
+
+
 /* Initialize the configuration and calibration registers. */
 static int ina2xx_init(struct ina2xx_chip_info *chip, unsigned int config)
 {
@@ -609,17 +633,7 @@ static int ina2xx_init(struct ina2xx_chip_info *chip, unsigned int config)
 	if (ret)
 		return ret;
 
-	/*
-	 * Set current LSB to 1mA, shunt is in uOhms
-	 * (equation 13 in datasheet). We hardcode a Current_LSB
-	 * of 1.0 x10-6. The only remaining parameter is RShunt.
-	 * There is no need to expose the CALIBRATION register
-	 * to the user for now.
-	 */
-	regval = DIV_ROUND_CLOSEST(chip->config->calibration_factor,
-				   chip->shunt_resistor);
-
-	return regmap_write(chip->regmap, INA2XX_CALIBRATION, regval);
+	return ina2xx_set_calibration(chip);
 }
 
 static int ina2xx_probe(struct i2c_client *client,
-- 
2.5.0

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

* [PATCH-vs-togreg 2/2] iio: ina2xx-adc: fix scale for VShunt
  2016-03-11 14:52 [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes Marc Titinger
@ 2016-03-11 14:52 ` Marc Titinger
  2016-03-11 15:04 ` [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes Andrew F. Davis
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Marc Titinger @ 2016-03-11 14:52 UTC (permalink / raw)
  To: jic23, knaack.h, lars, pmeerw; +Cc: afd, linux-iio, linux-kernel

The scale would result in uV instead of expected mV.
Mostly cosmetic, since the value of 'Power' was computed OK.

Signed-off-by: Marc Titinger <marc.titinger@baylibre.com>
---
 drivers/iio/adc/ina2xx-adc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/adc/ina2xx-adc.c b/drivers/iio/adc/ina2xx-adc.c
index e5ac120..6ada336 100644
--- a/drivers/iio/adc/ina2xx-adc.c
+++ b/drivers/iio/adc/ina2xx-adc.c
@@ -185,9 +185,9 @@ static int ina2xx_read_raw(struct iio_dev *indio_dev,
 	case IIO_CHAN_INFO_SCALE:
 		switch (chan->address) {
 		case INA2XX_SHUNT_VOLTAGE:
-			/* processed (mV) = raw*1000/shunt_div */
+			/* processed (mV) = raw/shunt_div */
 			*val2 = chip->config->shunt_div;
-			*val = 1000;
+			*val = 1;
 			return IIO_VAL_FRACTIONAL;
 
 		case INA2XX_BUS_VOLTAGE:
-- 
2.5.0

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

* Re: [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes
  2016-03-11 14:52 [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes Marc Titinger
  2016-03-11 14:52 ` [PATCH-vs-togreg 2/2] iio: ina2xx-adc: fix scale for VShunt Marc Titinger
@ 2016-03-11 15:04 ` Andrew F. Davis
  2016-03-11 15:26   ` Marc Titinger
  2016-03-11 16:01 ` kbuild test robot
  2016-03-12  9:19 ` Jonathan Cameron
  3 siblings, 1 reply; 7+ messages in thread
From: Andrew F. Davis @ 2016-03-11 15:04 UTC (permalink / raw)
  To: Marc Titinger, jic23, knaack.h, lars, pmeerw; +Cc: linux-iio, linux-kernel

On 03/11/2016 08:52 AM, Marc Titinger wrote:
> The user (or an init script) may setup RShunt via sysfs after the
> driver was initialized, for instance based on the EEPROM contents
> of a modular probe. The calibration register must be set accordingly.
> 
> Signed-off-by: Marc Titinger <marc.titinger@baylibre.com>
> ---
> tested with BeagleBone-black and BayLibre-acme.
> ---
>  drivers/iio/adc/ina2xx-adc.c | 36 +++++++++++++++++++++++++-----------
>  1 file changed, 25 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/iio/adc/ina2xx-adc.c b/drivers/iio/adc/ina2xx-adc.c
> index 65909d5..e5ac120 100644
> --- a/drivers/iio/adc/ina2xx-adc.c
> +++ b/drivers/iio/adc/ina2xx-adc.c
> @@ -350,6 +350,23 @@ static ssize_t ina2xx_allow_async_readout_store(struct device *dev,
>  	return len;
>  }
>  
> +/*
> + * Set current LSB to 1mA, shunt is in uOhms
> + * (equation 13 in datasheet). We hardcode a Current_LSB
> + * of 1.0 x10-6. The only remaining parameter is RShunt.
> + * There is no need to expose the CALIBRATION register
> + * to the user for now. But we need to reset this register
> + * if the user updates RShunt after driver init, e.g upon
> + * reading an EEPROM/Probe-type value.
> + */
> +static int ina2xx_set_calibration(struct ina2xx_chip_info *chip)
> +{
> +	u16 regval = DIV_ROUND_CLOSEST(chip->config->calibration_factor,
> +				   chip->shunt_resistor);
> +
> +	return regmap_write(chip->regmap, INA2XX_CALIBRATION, regval);
> +}
> +
>  static int set_shunt_resistor(struct ina2xx_chip_info *chip, unsigned int val)
>  {
>  	if (val <= 0 || val > chip->config->calibration_factor)
> @@ -385,6 +402,11 @@ static ssize_t ina2xx_shunt_resistor_store(struct device *dev,
>  	if (ret)
>  		return ret;
>  
> +	/* Update the Calibration register */
> +	ret = ina2xx_set_calibration(chip);
> +	if (ret)
> +		return ret;
> +
>  	return len;
>  }
>  
> @@ -599,6 +621,8 @@ static const struct iio_info ina2xx_info = {
>  	.debugfs_reg_access = ina2xx_debug_reg,
>  };
>  
> +
> +

?

>  /* Initialize the configuration and calibration registers. */
>  static int ina2xx_init(struct ina2xx_chip_info *chip, unsigned int config)
>  {
> @@ -609,17 +633,7 @@ static int ina2xx_init(struct ina2xx_chip_info *chip, unsigned int config)
>  	if (ret)
>  		return ret;
>  
> -	/*
> -	 * Set current LSB to 1mA, shunt is in uOhms
> -	 * (equation 13 in datasheet). We hardcode a Current_LSB
> -	 * of 1.0 x10-6. The only remaining parameter is RShunt.
> -	 * There is no need to expose the CALIBRATION register
> -	 * to the user for now.
> -	 */
> -	regval = DIV_ROUND_CLOSEST(chip->config->calibration_factor,
> -				   chip->shunt_resistor);
> -
> -	return regmap_write(chip->regmap, INA2XX_CALIBRATION, regval);
> +	return ina2xx_set_calibration(chip);
>  }
>  
>  static int ina2xx_probe(struct i2c_client *client,
> 

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

* Re: [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes
  2016-03-11 15:04 ` [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes Andrew F. Davis
@ 2016-03-11 15:26   ` Marc Titinger
  0 siblings, 0 replies; 7+ messages in thread
From: Marc Titinger @ 2016-03-11 15:26 UTC (permalink / raw)
  To: Andrew F. Davis, jic23, knaack.h, lars, pmeerw; +Cc: linux-iio, linux-kernel



On 11/03/2016 16:04, Andrew F. Davis wrote:
...

>>
>> @@ -599,6 +621,8 @@ static const struct iio_info ina2xx_info = {
>>   	.debugfs_reg_access = ina2xx_debug_reg,
>>   };
>>
>> +
>> +
>
> ?
>

Ok, will fix in v2, thanks !

M.

>>   /* Initialize the configuration and calibration registers. */
>>   static int ina2xx_init(struct ina2xx_chip_info *chip, unsigned int config)
>>   {
>> @@ -609,17 +633,7 @@ static int ina2xx_init(struct ina2xx_chip_info *chip, unsigned int config)
>>   	if (ret)
>>   		return ret;
>>
>> -	/*
>> -	 * Set current LSB to 1mA, shunt is in uOhms
>> -	 * (equation 13 in datasheet). We hardcode a Current_LSB
>> -	 * of 1.0 x10-6. The only remaining parameter is RShunt.
>> -	 * There is no need to expose the CALIBRATION register
>> -	 * to the user for now.
>> -	 */
>> -	regval = DIV_ROUND_CLOSEST(chip->config->calibration_factor,
>> -				   chip->shunt_resistor);
>> -
>> -	return regmap_write(chip->regmap, INA2XX_CALIBRATION, regval);
>> +	return ina2xx_set_calibration(chip);
>>   }
>>
>>   static int ina2xx_probe(struct i2c_client *client,
>>

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

* Re: [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes
  2016-03-11 14:52 [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes Marc Titinger
  2016-03-11 14:52 ` [PATCH-vs-togreg 2/2] iio: ina2xx-adc: fix scale for VShunt Marc Titinger
  2016-03-11 15:04 ` [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes Andrew F. Davis
@ 2016-03-11 16:01 ` kbuild test robot
  2016-03-12  9:19 ` Jonathan Cameron
  3 siblings, 0 replies; 7+ messages in thread
From: kbuild test robot @ 2016-03-11 16:01 UTC (permalink / raw)
  To: Marc Titinger
  Cc: kbuild-all, jic23, knaack.h, lars, pmeerw, afd, linux-iio, linux-kernel

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

Hi Marc,

[auto build test WARNING on iio/togreg]
[also build test WARNING on next-20160311]
[cannot apply to v4.5-rc7]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

url:    https://github.com/0day-ci/linux/commits/Marc-Titinger/iio-ina2xx-adc-update-the-CALIB-register-when-RShunt-changes/20160311-225616
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
config: i386-randconfig-s1-201610 (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   drivers/iio/adc/ina2xx-adc.c: In function 'ina2xx_init':
>> drivers/iio/adc/ina2xx-adc.c:629:6: warning: unused variable 'regval' [-Wunused-variable]
     u16 regval;
         ^

vim +/regval +629 drivers/iio/adc/ina2xx-adc.c

c43a102e Marc Titinger   2015-12-07  613  	.attrs = ina2xx_attributes,
c43a102e Marc Titinger   2015-12-07  614  };
c43a102e Marc Titinger   2015-12-07  615  
c43a102e Marc Titinger   2015-12-07  616  static const struct iio_info ina2xx_info = {
c43a102e Marc Titinger   2015-12-07  617  	.driver_module = THIS_MODULE,
7906dd52 Andrew F. Davis 2016-02-24  618  	.attrs = &ina2xx_attribute_group,
7906dd52 Andrew F. Davis 2016-02-24  619  	.read_raw = ina2xx_read_raw,
7906dd52 Andrew F. Davis 2016-02-24  620  	.write_raw = ina2xx_write_raw,
7906dd52 Andrew F. Davis 2016-02-24  621  	.debugfs_reg_access = ina2xx_debug_reg,
c43a102e Marc Titinger   2015-12-07  622  };
c43a102e Marc Titinger   2015-12-07  623  
76011646 Marc Titinger   2016-03-11  624  
76011646 Marc Titinger   2016-03-11  625  
c43a102e Marc Titinger   2015-12-07  626  /* Initialize the configuration and calibration registers. */
c43a102e Marc Titinger   2015-12-07  627  static int ina2xx_init(struct ina2xx_chip_info *chip, unsigned int config)
c43a102e Marc Titinger   2015-12-07  628  {
c43a102e Marc Titinger   2015-12-07 @629  	u16 regval;
7906dd52 Andrew F. Davis 2016-02-24  630  	int ret;
c43a102e Marc Titinger   2015-12-07  631  
7906dd52 Andrew F. Davis 2016-02-24  632  	ret = regmap_write(chip->regmap, INA2XX_CONFIG, config);
7906dd52 Andrew F. Davis 2016-02-24  633  	if (ret)
c43a102e Marc Titinger   2015-12-07  634  		return ret;
7906dd52 Andrew F. Davis 2016-02-24  635  
76011646 Marc Titinger   2016-03-11  636  	return ina2xx_set_calibration(chip);
c43a102e Marc Titinger   2015-12-07  637  }

:::::: The code at line 629 was first introduced by commit
:::::: c43a102e67db99c8bfe6e8a9280cec13ff53b789 iio: ina2xx: add support for TI INA2xx Power Monitors

:::::: TO: Marc Titinger <mtitinger@baylibre.com>
:::::: CC: Jonathan Cameron <jic23@kernel.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 21608 bytes --]

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

* Re: [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes
  2016-03-11 14:52 [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes Marc Titinger
                   ` (2 preceding siblings ...)
  2016-03-11 16:01 ` kbuild test robot
@ 2016-03-12  9:19 ` Jonathan Cameron
  2016-03-14  9:24   ` Marc Titinger
  3 siblings, 1 reply; 7+ messages in thread
From: Jonathan Cameron @ 2016-03-12  9:19 UTC (permalink / raw)
  To: Marc Titinger, knaack.h, lars, pmeerw; +Cc: afd, linux-iio, linux-kernel

On 11/03/16 14:52, Marc Titinger wrote:
> The user (or an init script) may setup RShunt via sysfs after the
> driver was initialized, for instance based on the EEPROM contents
> of a modular probe. The calibration register must be set accordingly.
> 
> Signed-off-by: Marc Titinger <marc.titinger@baylibre.com>
Other than the two little fixes (Andrew's and the autobuilder one)
this series looks good to me.  Will pick up v2.

I think both of these are fixes that will want to go through the fixes
tree after the merge window has closed anyway.

Jonathan
> ---
> tested with BeagleBone-black and BayLibre-acme.
> ---
>  drivers/iio/adc/ina2xx-adc.c | 36 +++++++++++++++++++++++++-----------
>  1 file changed, 25 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/iio/adc/ina2xx-adc.c b/drivers/iio/adc/ina2xx-adc.c
> index 65909d5..e5ac120 100644
> --- a/drivers/iio/adc/ina2xx-adc.c
> +++ b/drivers/iio/adc/ina2xx-adc.c
> @@ -350,6 +350,23 @@ static ssize_t ina2xx_allow_async_readout_store(struct device *dev,
>  	return len;
>  }
>  
> +/*
> + * Set current LSB to 1mA, shunt is in uOhms
> + * (equation 13 in datasheet). We hardcode a Current_LSB
> + * of 1.0 x10-6. The only remaining parameter is RShunt.
> + * There is no need to expose the CALIBRATION register
> + * to the user for now. But we need to reset this register
> + * if the user updates RShunt after driver init, e.g upon
> + * reading an EEPROM/Probe-type value.
> + */
> +static int ina2xx_set_calibration(struct ina2xx_chip_info *chip)
> +{
> +	u16 regval = DIV_ROUND_CLOSEST(chip->config->calibration_factor,
> +				   chip->shunt_resistor);
> +
> +	return regmap_write(chip->regmap, INA2XX_CALIBRATION, regval);
> +}
> +
>  static int set_shunt_resistor(struct ina2xx_chip_info *chip, unsigned int val)
>  {
>  	if (val <= 0 || val > chip->config->calibration_factor)
> @@ -385,6 +402,11 @@ static ssize_t ina2xx_shunt_resistor_store(struct device *dev,
>  	if (ret)
>  		return ret;
>  
> +	/* Update the Calibration register */
> +	ret = ina2xx_set_calibration(chip);
> +	if (ret)
> +		return ret;
> +
>  	return len;
>  }
>  
> @@ -599,6 +621,8 @@ static const struct iio_info ina2xx_info = {
>  	.debugfs_reg_access = ina2xx_debug_reg,
>  };
>  
> +
> +
>  /* Initialize the configuration and calibration registers. */
>  static int ina2xx_init(struct ina2xx_chip_info *chip, unsigned int config)
>  {
> @@ -609,17 +633,7 @@ static int ina2xx_init(struct ina2xx_chip_info *chip, unsigned int config)
>  	if (ret)
>  		return ret;
>  
> -	/*
> -	 * Set current LSB to 1mA, shunt is in uOhms
> -	 * (equation 13 in datasheet). We hardcode a Current_LSB
> -	 * of 1.0 x10-6. The only remaining parameter is RShunt.
> -	 * There is no need to expose the CALIBRATION register
> -	 * to the user for now.
> -	 */
> -	regval = DIV_ROUND_CLOSEST(chip->config->calibration_factor,
> -				   chip->shunt_resistor);
> -
> -	return regmap_write(chip->regmap, INA2XX_CALIBRATION, regval);
> +	return ina2xx_set_calibration(chip);
>  }
>  
>  static int ina2xx_probe(struct i2c_client *client,
> 

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

* Re: [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes
  2016-03-12  9:19 ` Jonathan Cameron
@ 2016-03-14  9:24   ` Marc Titinger
  0 siblings, 0 replies; 7+ messages in thread
From: Marc Titinger @ 2016-03-14  9:24 UTC (permalink / raw)
  To: Jonathan Cameron, knaack.h, lars, pmeerw; +Cc: afd, linux-iio, linux-kernel



On 12/03/2016 10:19, Jonathan Cameron wrote:
> On 11/03/16 14:52, Marc Titinger wrote:
>> The user (or an init script) may setup RShunt via sysfs after the
>> driver was initialized, for instance based on the EEPROM contents
>> of a modular probe. The calibration register must be set accordingly.
>>
>> Signed-off-by: Marc Titinger <marc.titinger@baylibre.com>
> Other than the two little fixes (Andrew's and the autobuilder one)
> this series looks good to me.  Will pick up v2.
>
> I think both of these are fixes that will want to go through the fixes
> tree after the merge window has closed anyway.

Thanks Jon, sending v2 ASAP.

M.

>
> Jonathan
>> ---
>> tested with BeagleBone-black and BayLibre-acme.
>> ---
>>   drivers/iio/adc/ina2xx-adc.c | 36 +++++++++++++++++++++++++-----------
>>   1 file changed, 25 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/iio/adc/ina2xx-adc.c b/drivers/iio/adc/ina2xx-adc.c

...

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

end of thread, other threads:[~2016-03-14  9:24 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-11 14:52 [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes Marc Titinger
2016-03-11 14:52 ` [PATCH-vs-togreg 2/2] iio: ina2xx-adc: fix scale for VShunt Marc Titinger
2016-03-11 15:04 ` [PATCH-vs-togreg 1/2] iio: ina2xx-adc: update the CALIB. register when RShunt changes Andrew F. Davis
2016-03-11 15:26   ` Marc Titinger
2016-03-11 16:01 ` kbuild test robot
2016-03-12  9:19 ` Jonathan Cameron
2016-03-14  9:24   ` Marc Titinger

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