From 48fc80fa792f9972f1ae83ee6485dd6c1cbbd976 Mon Sep 17 00:00:00 2001 From: Wojciech Sipak Date: Fri, 7 Jul 2023 12:50:32 +0200 Subject: [PATCH] drivers: adc: iadc_gecko: select proper bits from sample Only 12-bit resolution is currently available in the driver, and each of the 16-bit samples store the actual data aligned to the left. A sample should be shifted 4 bits to the right to allow proper interpretation. Signed-off-by: Wojciech Sipak --- drivers/adc/iadc_gecko.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/adc/iadc_gecko.c b/drivers/adc/iadc_gecko.c index 0b9fcb07c8..1317a4e472 100644 --- a/drivers/adc/iadc_gecko.c +++ b/drivers/adc/iadc_gecko.c @@ -20,6 +20,7 @@ LOG_MODULE_REGISTER(iadc_gecko, CONFIG_ADC_LOG_LEVEL); /* Number of channels available. */ #define GECKO_CHANNEL_COUNT 16 #define GECKO_INTERNAL_REFERENCE_mV 1210 +#define GECKO_DATA_RES12BIT(DATA) ((DATA & 0xFFF0) >> 4); struct adc_gecko_channel_config { IADC_CfgAnalogGain_t gain; @@ -231,7 +232,7 @@ static void adc_gecko_isr(void *arg) if (!err) { sample = IADC_readSingleResult(iadc); - *data->buffer++ = (uint16_t)sample.data; + *data->buffer++ = GECKO_DATA_RES12BIT((uint16_t)sample.data); data->channels &= ~BIT(data->channel_id); if (data->channels) {