diff options
Diffstat (limited to 'firmware/target/arm/imx233/adc-imx233.c')
-rw-r--r-- | firmware/target/arm/imx233/adc-imx233.c | 48 |
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 | |||
36 | static 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 | |||
49 | static 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 | |||
25 | void adc_init(void) | 62 | void 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 | |||
143 | const char *adc_name(int channel) | ||
144 | { | ||
145 | return imx233_adc_channel_name[channel]; | ||
146 | } | ||