diff options
Diffstat (limited to 'firmware/target/arm/imx233/adc-imx233.c')
-rw-r--r-- | firmware/target/arm/imx233/adc-imx233.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/firmware/target/arm/imx233/adc-imx233.c b/firmware/target/arm/imx233/adc-imx233.c index 9b5af82d5d..a6025cfde9 100644 --- a/firmware/target/arm/imx233/adc-imx233.c +++ b/firmware/target/arm/imx233/adc-imx233.c | |||
@@ -20,6 +20,7 @@ | |||
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | 21 | ||
22 | #include "adc-imx233.h" | 22 | #include "adc-imx233.h" |
23 | #include "power-imx233.h" | ||
23 | 24 | ||
24 | void adc_init(void) | 25 | void adc_init(void) |
25 | { | 26 | { |
@@ -35,7 +36,7 @@ static short adc_read_physical_ex(int virt) | |||
35 | 36 | ||
36 | static short adc_read_physical(int src, bool div2) | 37 | static short adc_read_physical(int src, bool div2) |
37 | { | 38 | { |
38 | int virt = imx233_lradc_acquire_channel(TIMEOUT_BLOCK); | 39 | int virt = imx233_lradc_acquire_channel(src, TIMEOUT_BLOCK); |
39 | // divide by two for wider ranger | 40 | // divide by two for wider ranger |
40 | imx233_lradc_setup_channel(virt, div2, false, 0, src); | 41 | imx233_lradc_setup_channel(virt, div2, false, 0, src); |
41 | int val = adc_read_physical_ex(virt); | 42 | int val = adc_read_physical_ex(virt); |
@@ -52,14 +53,17 @@ static short adc_read_virtual(int c) | |||
52 | case IMX233_ADC_VDDIO: | 53 | case IMX233_ADC_VDDIO: |
53 | /* VddIO pin has a builtin 2:1 divide */ | 54 | /* VddIO pin has a builtin 2:1 divide */ |
54 | return adc_read_physical(LRADC_SRC_VDDIO, false); | 55 | return adc_read_physical(LRADC_SRC_VDDIO, false); |
56 | #if IMX233_SUBTARGET >= 3700 | ||
55 | case IMX233_ADC_VDD5V: | 57 | case IMX233_ADC_VDD5V: |
56 | /* Vdd5V pin has a builtin 4:1 divide */ | 58 | /* Vdd5V pin has a builtin 4:1 divide */ |
57 | return adc_read_physical(LRADC_SRC_5V, false) * 2; | 59 | return adc_read_physical(LRADC_SRC_5V, false) * 2; |
60 | #endif | ||
58 | case IMX233_ADC_DIE_TEMP: | 61 | case IMX233_ADC_DIE_TEMP: |
59 | { | 62 | { |
63 | #if IMX233_SUBTARGET >= 3700 | ||
60 | // don't block on second channel otherwise we might deadlock ! | 64 | // don't block on second channel otherwise we might deadlock ! |
61 | int nmos_chan = imx233_lradc_acquire_channel(TIMEOUT_BLOCK); | 65 | int nmos_chan = imx233_lradc_acquire_channel(LRADC_SRC_NMOS_THIN, TIMEOUT_BLOCK); |
62 | int pmos_chan = imx233_lradc_acquire_channel(TIMEOUT_NOBLOCK); | 66 | int pmos_chan = imx233_lradc_acquire_channel(LRADC_SRC_PMOS_THIN, TIMEOUT_NOBLOCK); |
63 | int val = 0; | 67 | int val = 0; |
64 | if(pmos_chan >= 0) | 68 | if(pmos_chan >= 0) |
65 | { | 69 | { |
@@ -67,12 +71,19 @@ static short adc_read_virtual(int c) | |||
67 | imx233_lradc_release_channel(pmos_chan); | 71 | imx233_lradc_release_channel(pmos_chan); |
68 | } | 72 | } |
69 | imx233_lradc_release_channel(nmos_chan); | 73 | imx233_lradc_release_channel(nmos_chan); |
74 | #else | ||
75 | int min, max, val; | ||
76 | if(imx233_power_sense_die_temperature(&min, &max) < 0) | ||
77 | val = -1; | ||
78 | else | ||
79 | val = (max + min) / 2; | ||
80 | #endif | ||
70 | return val; | 81 | return val; |
71 | } | 82 | } |
72 | #ifdef IMX233_BATT_TEMP_SENSOR | 83 | #ifdef IMX233_BATT_TEMP_SENSOR |
73 | case IMX233_ADC_BATT_TEMP: | 84 | case IMX233_ADC_BATT_TEMP: |
74 | { | 85 | { |
75 | int virt = imx233_lradc_acquire_channel(TIMEOUT_BLOCK); | 86 | int virt = imx233_lradc_acquire_channel(IMX233_BATT_TEMP_SENSOR, TIMEOUT_BLOCK); |
76 | int val = imx233_lradc_sense_ext_temperature(virt, IMX233_BATT_TEMP_SENSOR); | 87 | int val = imx233_lradc_sense_ext_temperature(virt, IMX233_BATT_TEMP_SENSOR); |
77 | imx233_lradc_release_channel(virt); | 88 | imx233_lradc_release_channel(virt); |
78 | return val; | 89 | return val; |