/*
 * Copyright (c) 2019 Peter Bigot Consulting, LLC
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <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_1_2] = {.mul = 2, .div = 1},
		[ADC_GAIN_2_3] = {.mul = 3, .div = 2},
		[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_8] = {.mul = 1, .div = 8},
		[ADC_GAIN_16] = {.mul = 1, .div = 16},
		[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;
}
