summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/adc-imx233.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233/adc-imx233.c')
-rw-r--r--firmware/target/arm/imx233/adc-imx233.c48
1 files changed, 45 insertions, 3 deletions
diff --git a/firmware/target/arm/imx233/adc-imx233.c b/firmware/target/arm/imx233/adc-imx233.c
index a6025cfde9..a0bda9ab02 100644
--- a/firmware/target/arm/imx233/adc-imx233.c
+++ b/firmware/target/arm/imx233/adc-imx233.c
@@ -19,9 +19,46 @@
19 * 19 *
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22#include "adc-imx233.h" 22#include "adc-target.h"
23#include "power-imx233.h" 23#include "power-imx233.h"
24 24
25/* Virtual channels */
26#define IMX233_ADC_BATTERY -1 /* Battery voltage (mV) */
27#define IMX233_ADC_DIE_TEMP -2 /* Die temperature (°C) */
28#define IMX233_ADC_VDDIO -3 /* VddIO voltage (mV) */
29#if IMX233_SUBTARGET >= 3700
30#define IMX233_ADC_VDD5V -4 /* Vdd5V voltage (mV) */
31#endif
32#ifdef IMX233_BATT_TEMP_SENSOR
33#define IMX233_ADC_BATT_TEMP -5 /* Battery temperature (°C) */
34#endif
35
36static const char *imx233_adc_channel_name[NUM_ADC_CHANNELS] =
37{
38 [ADC_BATTERY] = "Battery(raw)",
39 [ADC_DIE_TEMP] = "Die temperature(°C)",
40 [ADC_VDDIO] = "VddIO(mV)",
41#if IMX233_SUBTARGET >= 3700
42 [ADC_VDD5V] = "Vdd5V(mV)",
43#endif
44#ifdef IMX233_BATT_TEMP_SENSOR
45 [ADC_BATT_TEMP] = "Battery temperature(raw)",
46#endif
47};
48
49static int imx233_adc_mapping[NUM_ADC_CHANNELS] =
50{
51 [ADC_BATTERY] = IMX233_ADC_BATTERY,
52 [ADC_DIE_TEMP] = IMX233_ADC_DIE_TEMP,
53 [ADC_VDDIO] = IMX233_ADC_VDDIO,
54#if IMX233_SUBTARGET >= 3700
55 [ADC_VDD5V] = IMX233_ADC_VDD5V,
56#endif
57#ifdef IMX233_BATT_TEMP_SENSOR
58 [ADC_BATT_TEMP] = IMX233_ADC_BATT_TEMP,
59#endif
60};
61
25void adc_init(void) 62void adc_init(void)
26{ 63{
27} 64}
@@ -52,11 +89,11 @@ static short adc_read_virtual(int c)
52 return imx233_lradc_read_battery_voltage(); 89 return imx233_lradc_read_battery_voltage();
53 case IMX233_ADC_VDDIO: 90 case IMX233_ADC_VDDIO:
54 /* VddIO pin has a builtin 2:1 divide */ 91 /* VddIO pin has a builtin 2:1 divide */
55 return adc_read_physical(LRADC_SRC_VDDIO, false); 92 return adc_read_physical(LRADC_SRC_VDDIO, true) * 2;
56#if IMX233_SUBTARGET >= 3700 93#if IMX233_SUBTARGET >= 3700
57 case IMX233_ADC_VDD5V: 94 case IMX233_ADC_VDD5V:
58 /* Vdd5V pin has a builtin 4:1 divide */ 95 /* Vdd5V pin has a builtin 4:1 divide */
59 return adc_read_physical(LRADC_SRC_5V, false) * 2; 96 return adc_read_physical(LRADC_SRC_5V, true) * 4;
60#endif 97#endif
61 case IMX233_ADC_DIE_TEMP: 98 case IMX233_ADC_DIE_TEMP:
62 { 99 {
@@ -102,3 +139,8 @@ unsigned short adc_read(int channel)
102 else 139 else
103 return adc_read_physical(c, true); 140 return adc_read_physical(c, true);
104} 141}
142
143const char *adc_name(int channel)
144{
145 return imx233_adc_channel_name[channel];
146}