36845b6168
This is a follow-up to commitse15bdaa1bd
and07bf22cc94
. The above two commits added some enumerated gain values and those are not currently handled by the inverting function. Add the missing entries to the conversion array in the function. Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
51 lines
1.3 KiB
C
51 lines
1.3 KiB
C
/*
|
|
* Copyright (c) 2019 Peter Bigot Consulting, LLC
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <zephyr/drivers/adc.h>
|
|
|
|
int adc_gain_invert(enum adc_gain gain,
|
|
int32_t *value)
|
|
{
|
|
struct gain_desc {
|
|
uint8_t mul;
|
|
uint8_t div;
|
|
};
|
|
static const struct gain_desc gains[] = {
|
|
[ADC_GAIN_1_6] = {.mul = 6, .div = 1},
|
|
[ADC_GAIN_1_5] = {.mul = 5, .div = 1},
|
|
[ADC_GAIN_1_4] = {.mul = 4, .div = 1},
|
|
[ADC_GAIN_1_3] = {.mul = 3, .div = 1},
|
|
[ADC_GAIN_2_5] = {.mul = 5, .div = 2},
|
|
[ADC_GAIN_1_2] = {.mul = 2, .div = 1},
|
|
[ADC_GAIN_2_3] = {.mul = 3, .div = 2},
|
|
[ADC_GAIN_4_5] = {.mul = 5, .div = 4},
|
|
[ADC_GAIN_1] = {.mul = 1, .div = 1},
|
|
[ADC_GAIN_2] = {.mul = 1, .div = 2},
|
|
[ADC_GAIN_3] = {.mul = 1, .div = 3},
|
|
[ADC_GAIN_4] = {.mul = 1, .div = 4},
|
|
[ADC_GAIN_6] = {.mul = 1, .div = 6},
|
|
[ADC_GAIN_8] = {.mul = 1, .div = 8},
|
|
[ADC_GAIN_12] = {.mul = 1, .div = 12},
|
|
[ADC_GAIN_16] = {.mul = 1, .div = 16},
|
|
[ADC_GAIN_24] = {.mul = 1, .div = 24},
|
|
[ADC_GAIN_32] = {.mul = 1, .div = 32},
|
|
[ADC_GAIN_64] = {.mul = 1, .div = 64},
|
|
[ADC_GAIN_128] = {.mul = 1, .div = 128},
|
|
};
|
|
int rv = -EINVAL;
|
|
|
|
if ((uint8_t)gain < ARRAY_SIZE(gains)) {
|
|
const struct gain_desc *gdp = &gains[gain];
|
|
|
|
if ((gdp->mul != 0) && (gdp->div != 0)) {
|
|
*value = (gdp->mul * *value) / gdp->div;
|
|
rv = 0;
|
|
}
|
|
}
|
|
|
|
return rv;
|
|
}
|