From: Claudiu Beznea <claudiu.beznea@microchip.com>
To: <eugen.hristev@microchip.com>, <jic23@kernel.org>,
<lars@metafoo.de>, <nicolas.ferre@microchip.com>,
<alexandre.belloni@bootlin.com>, <robh+dt@kernel.org>,
<krzk+dt@kernel.org>, <ludovic.desroches@atmel.com>
Cc: <linux-iio@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
Claudiu Beznea <claudiu.beznea@microchip.com>
Subject: [PATCH 05/16] iio: adc: at91-sama5d2_adc: adjust osr based on specific platform data
Date: Thu, 9 Jun 2022 11:32:02 +0300 [thread overview]
Message-ID: <20220609083213.1795019-6-claudiu.beznea@microchip.com> (raw)
In-Reply-To: <20220609083213.1795019-1-claudiu.beznea@microchip.com>
ADC captures data on 12 bits (if oversampling is not enabled). When using
oversampling captured data could go up to 14 bits for SAMA5D2 or up to
16 bits for SAMA7G5 (depending on oversampling settings). All the channels
that are subject of oversampling are registered as 14 or 16 real bits.
Depending on the oversampling settings the ADC converted value need to be
shifted up to 14 or 16 to cope with realbits value registered to IIO
subsystem. Commit adds platform specific information to know if we
run on a system with up to 14 or 16 bits ADC converted data.
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
drivers/iio/adc/at91-sama5d2_adc.c | 32 ++++++++++++++++++------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
index 1ceab097335c..7321a4b519af 100644
--- a/drivers/iio/adc/at91-sama5d2_adc.c
+++ b/drivers/iio/adc/at91-sama5d2_adc.c
@@ -404,6 +404,7 @@ static const struct at91_adc_reg_layout sama7g5_layout = {
* @hw_trig_cnt: number of possible hardware triggers
* @osr_mask: oversampling ratio bitmask on EMR register
* @osr_vals: available oversampling rates
+ * @chan_realbits: realbits for registered channels
*/
struct at91_adc_platform {
const struct at91_adc_reg_layout *layout;
@@ -417,6 +418,7 @@ struct at91_adc_platform {
unsigned int hw_trig_cnt;
unsigned int osr_mask;
unsigned int osr_vals;
+ unsigned int chan_realbits;
};
/**
@@ -619,6 +621,7 @@ static const struct at91_adc_platform sama5d2_platform = {
.osr_vals = BIT(AT91_SAMA5D2_EMR_OSR_1SAMPLES) |
BIT(AT91_SAMA5D2_EMR_OSR_4SAMPLES) |
BIT(AT91_SAMA5D2_EMR_OSR_16SAMPLES),
+ .chan_realbits = 14,
};
static const struct at91_adc_platform sama7g5_platform = {
@@ -638,6 +641,7 @@ static const struct at91_adc_platform sama7g5_platform = {
.osr_vals = BIT(AT91_SAMA5D2_EMR_OSR_1SAMPLES) |
BIT(AT91_SAMA5D2_EMR_OSR_4SAMPLES) |
BIT(AT91_SAMA5D2_EMR_OSR_16SAMPLES),
+ .chan_realbits = 16,
};
static int at91_adc_chan_xlate(struct iio_dev *indio_dev, int chan)
@@ -779,19 +783,21 @@ static int at91_adc_config_emr(struct at91_adc_state *st,
static int at91_adc_adjust_val_osr(struct at91_adc_state *st, int *val)
{
- if (st->oversampling_ratio == AT91_OSR_1SAMPLES) {
- /*
- * in this case we only have 12 bits of real data, but channel
- * is registered as 14 bits, so shift left two bits
- */
- *val <<= 2;
- } else if (st->oversampling_ratio == AT91_OSR_4SAMPLES) {
- /*
- * in this case we have 13 bits of real data, but channel
- * is registered as 14 bits, so left shift one bit
- */
- *val <<= 1;
- }
+ int nbits, diff;
+
+ if (st->oversampling_ratio == AT91_OSR_1SAMPLES)
+ nbits = 12;
+ else if (st->oversampling_ratio == AT91_OSR_4SAMPLES)
+ nbits = 13;
+ else if (st->oversampling_ratio == AT91_OSR_16SAMPLES)
+ nbits = 14;
+
+ /*
+ * We have nbits of real data and channel is registered as
+ * st->soc_info.platform->chan_realbits, so shift left diff bits.
+ */
+ diff = st->soc_info.platform->chan_realbits - nbits;
+ *val <<= diff;
return IIO_VAL_INT;
}
--
2.34.1
next prev parent reply other threads:[~2022-06-09 8:30 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-09 8:31 [PATCH 00/16] iio: adc: at91-sama5d2_adc: add support for temperature sensor Claudiu Beznea
2022-06-09 8:31 ` [PATCH 01/16] iio: adc: at91-sama5d2_adc: fix AT91_SAMA5D2_MR_TRACKTIM_MAX Claudiu Beznea
2022-06-09 8:31 ` [PATCH 02/16] iio: adc: at91-sama5d2_adc: lock around oversampling and sample freq Claudiu Beznea
2022-06-11 17:30 ` Jonathan Cameron
2022-06-14 8:19 ` Claudiu.Beznea
2022-06-09 8:32 ` [PATCH 03/16] iio: adc: at91-sama5d2_adc: exit from write_raw() when buffers are enabled Claudiu Beznea
2022-06-11 17:33 ` Jonathan Cameron
2022-06-14 8:19 ` Claudiu.Beznea
2022-06-09 8:32 ` [PATCH 04/16] iio: adc: at91-sama5d2_adc: handle different EMR.OSR for different hw versions Claudiu Beznea
2022-06-11 17:46 ` Jonathan Cameron
2022-06-14 8:20 ` Claudiu.Beznea
2022-06-09 8:32 ` Claudiu Beznea [this message]
2022-06-09 8:32 ` [PATCH 06/16] iio: adc: at91-sama5d2_adc: add 64 and 256 oversampling ratio Claudiu Beznea
2022-06-11 17:47 ` Jonathan Cameron
2022-06-14 8:22 ` Claudiu.Beznea
2022-06-09 8:32 ` [PATCH 07/16] iio: adc: at91-sama5d2_adc: simplify the code in at91_adc_read_info_raw() Claudiu Beznea
2022-06-11 17:54 ` Jonathan Cameron
2022-06-14 8:49 ` Claudiu.Beznea
2022-06-14 12:00 ` Jonathan Cameron
2022-06-09 8:32 ` [PATCH 08/16] iio: adc: at91-sama5d2_adc: move oversampling storage in its function Claudiu Beznea
2022-06-09 8:32 ` [PATCH 09/16] iio: adc: at91-sama5d2_adc: update trackx on emr Claudiu Beznea
2022-06-09 8:32 ` [PATCH 10/16] iio: adc: at91-sama5d2_adc: add startup and tracktim as parameter for at91_adc_setup_samp_freq() Claudiu Beznea
2022-06-09 8:32 ` [PATCH 11/16] iio: adc: at91-sama5d2_adc: add locking parameter to at91_adc_read_info_raw() Claudiu Beznea
2022-06-11 17:58 ` Jonathan Cameron
2022-06-14 8:50 ` Claudiu.Beznea
2022-06-14 12:02 ` Jonathan Cameron
2022-06-09 8:32 ` [PATCH 12/16] dt-bindings: iio: adc: at91-sama5d2_adc: add id for temperature channel Claudiu Beznea
2022-06-16 16:00 ` Rob Herring
2022-06-09 8:32 ` [PATCH 13/16] iio: adc: at91-sama5d2_adc: add support for temperature sensor Claudiu Beznea
2022-06-11 18:15 ` Jonathan Cameron
2022-06-14 10:13 ` Claudiu.Beznea
2022-06-14 12:10 ` Jonathan Cameron
2022-06-09 8:32 ` [PATCH 14/16] iio: adc: at91-sama5d2_adc: add empty line after functions Claudiu Beznea
2022-06-09 8:32 ` [PATCH 15/16] iio: adc: at91-sama5d2_adc: add runtime pm support Claudiu Beznea
2022-06-11 16:48 ` Jonathan Cameron
2022-06-14 10:40 ` Claudiu.Beznea
2022-06-14 12:14 ` Jonathan Cameron
2022-06-09 8:32 ` [PATCH 16/16] iio: adc: at91-sama5d2_adc: use pm_ptr() Claudiu Beznea
2022-06-11 16:40 ` Jonathan Cameron
2022-06-11 18:16 ` [PATCH 00/16] iio: adc: at91-sama5d2_adc: add support for temperature sensor Jonathan Cameron
2022-06-14 10:41 ` Claudiu.Beznea
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=20220609083213.1795019-6-claudiu.beznea@microchip.com \
--to=claudiu.beznea@microchip.com \
--cc=alexandre.belloni@bootlin.com \
--cc=devicetree@vger.kernel.org \
--cc=eugen.hristev@microchip.com \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ludovic.desroches@atmel.com \
--cc=nicolas.ferre@microchip.com \
--cc=robh+dt@kernel.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox