From: Linus Walleij <linus.walleij@linaro.org> To: Jean Delvare <jdelvare@suse.com>, Guenter Roeck <linux@roeck-us.net>, Jonathan Cameron <jic23@kernel.org> Cc: linux-hwmon@vger.kernel.org, Linus Walleij <linus.walleij@linaro.org>, Peter Rosin <peda@axentia.se>, Chris Lesiak <chris.lesiak@licor.com>, linux-iio@vger.kernel.org Subject: [PATCH 2/2 v4] hwmon: (ntc_thermistor): try reading processed Date: Mon, 8 Mar 2021 11:02:19 +0100 [thread overview] Message-ID: <20210308100219.2732156-2-linus.walleij@linaro.org> (raw) In-Reply-To: <20210308100219.2732156-1-linus.walleij@linaro.org> Before trying the custom method of reading the sensor as raw and then converting, we want to use iio_read_channel_processed_scale() which first tries to see if the ADC can provide a processed value directly, else reads raw and applies scaling inside of IIO using the scale attributes of the ADC. We need to multiply the scaled value with 1000 to get to microvolts from millivolts which is what processed IIO channels returns. Keep the code that assumes 12bit ADC around as a fallback. This gives correct readings on the AB8500 thermistor inputs used in the Ux500 HREFP520 platform for reading battery and board temperature. Cc: Peter Rosin <peda@axentia.se> Cc: Chris Lesiak <chris.lesiak@licor.com> Cc: Jonathan Cameron <jic23@kernel.org> Cc: linux-iio@vger.kernel.org Link: https://lore.kernel.org/linux-iio/20201224011607.1059534-1-linus.walleij@linaro.org/ Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- ChangeLog v3->v4: - Split out the new iio_read_channel_processed_scale() API addition to a separate patch. - My suggestion is to apply both patches to the hwmon tree. ChangeLog v2->v3: - After discussion about v2 we concludes that iio_read_channel_processed() could loose precision so we introduce a new API to read processed and scale. - Include a link to the v2 discussion for reference. - For ease of applying to the hwmon tree, keep it all in one patch. - This needs Jonathans ACK to be merged through hwmon. ChangeLog v1->v2: - Fix the patch to multiply the processed value by 1000 to get to microvolts from millivolts. - Fix up the confusion in the commit message. - Drop pointless comments about the code, we keep the original code path around if processed reads don't work, nothing bad with that. --- drivers/hwmon/ntc_thermistor.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c index 3aad62a0e661..8587189c7f15 100644 --- a/drivers/hwmon/ntc_thermistor.c +++ b/drivers/hwmon/ntc_thermistor.c @@ -326,18 +326,27 @@ struct ntc_data { static int ntc_adc_iio_read(struct ntc_thermistor_platform_data *pdata) { struct iio_channel *channel = pdata->chan; - int raw, uv, ret; + int uv, ret; - ret = iio_read_channel_raw(channel, &raw); + ret = iio_read_channel_processed_scale(channel, &uv, 1000); if (ret < 0) { - pr_err("read channel() error: %d\n", ret); - return ret; - } + int raw; - ret = iio_convert_raw_to_processed(channel, raw, &uv, 1000); - if (ret < 0) { - /* Assume 12 bit ADC with vref at pullup_uv */ - uv = (pdata->pullup_uv * (s64)raw) >> 12; + /* + * This fallback uses a raw read and then + * assumes the ADC is 12 bits, scaling with + * a factor 1000 to get to microvolts. + */ + ret = iio_read_channel_raw(channel, &raw); + if (ret < 0) { + pr_err("read channel() error: %d\n", ret); + return ret; + } + ret = iio_convert_raw_to_processed(channel, raw, &uv, 1000); + if (ret < 0) { + /* Assume 12 bit ADC with vref at pullup_uv */ + uv = (pdata->pullup_uv * (s64)raw) >> 12; + } } return uv; -- 2.29.2
next prev parent reply other threads:[~2021-03-08 10:03 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-08 10:02 [PATCH 1/2 v4] iio: Provide iio_read_channel_processed_scale() API Linus Walleij 2021-03-08 10:02 ` Linus Walleij [this message] 2021-03-08 16:24 ` [PATCH 2/2 v4] hwmon: (ntc_thermistor): try reading processed Chris Lesiak 2021-03-09 17:15 ` Guenter Roeck 2021-03-13 18:25 ` Jonathan Cameron
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210308100219.2732156-2-linus.walleij@linaro.org \ --to=linus.walleij@linaro.org \ --cc=chris.lesiak@licor.com \ --cc=jdelvare@suse.com \ --cc=jic23@kernel.org \ --cc=linux-hwmon@vger.kernel.org \ --cc=linux-iio@vger.kernel.org \ --cc=linux@roeck-us.net \ --cc=peda@axentia.se \ --subject='Re: [PATCH 2/2 v4] hwmon: (ntc_thermistor): try reading processed' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.