diff options
author | Amaury Pouly <pamaury@rockbox.org> | 2011-11-14 21:05:14 +0000 |
---|---|---|
committer | Amaury Pouly <pamaury@rockbox.org> | 2011-11-14 21:05:14 +0000 |
commit | e167c1d8d7566a4b6422fd6764b5961c69a4600b (patch) | |
tree | b230cec8c45c97816f0aaa0083e60ea215f2e817 /firmware/target | |
parent | a9d56ac5de93611b80fa46992390428719782f79 (diff) | |
download | rockbox-e167c1d8d7566a4b6422fd6764b5961c69a4600b.tar.gz rockbox-e167c1d8d7566a4b6422fd6764b5961c69a4600b.zip |
imx233: add automatic battery conversion using delay channel, make 5V a virtual channel since it has a builtin divider
fuze+: use 5V virtual channel
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30982 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/imx233/adc-imx233.c | 24 | ||||
-rw-r--r-- | firmware/target/arm/imx233/adc-imx233.h | 1 | ||||
-rw-r--r-- | firmware/target/arm/imx233/sansa-fuzeplus/adc-fuzeplus.c | 4 |
3 files changed, 22 insertions, 7 deletions
diff --git a/firmware/target/arm/imx233/adc-imx233.c b/firmware/target/arm/imx233/adc-imx233.c index b23e57f9b4..5e9717b922 100644 --- a/firmware/target/arm/imx233/adc-imx233.c +++ b/firmware/target/arm/imx233/adc-imx233.c | |||
@@ -30,25 +30,37 @@ | |||
30 | * and channel 6 to vddio */ | 30 | * and channel 6 to vddio */ |
31 | static int pmos_chan, nmos_chan; | 31 | static int pmos_chan, nmos_chan; |
32 | static int battery_chan, vddio_chan; | 32 | static int battery_chan, vddio_chan; |
33 | static int battery_delay_chan; | ||
33 | 34 | ||
34 | void adc_init(void) | 35 | void adc_init(void) |
35 | { | 36 | { |
36 | imx233_lradc_init(); | 37 | imx233_lradc_init(); |
38 | /* reserve channels 6 for vddio and 7 for battery (special for conversion) */ | ||
37 | battery_chan = 7; | 39 | battery_chan = 7; |
38 | vddio_chan = 6; | 40 | vddio_chan = 6; |
39 | imx233_lradc_reserve_channel(battery_chan); | 41 | imx233_lradc_reserve_channel(battery_chan); |
40 | imx233_lradc_reserve_channel(vddio_chan); | 42 | imx233_lradc_reserve_channel(vddio_chan); |
41 | 43 | /* reserve any channels for PMOS and NMOS */ | |
42 | pmos_chan = imx233_lradc_acquire_channel(TIMEOUT_NOBLOCK); | 44 | pmos_chan = imx233_lradc_acquire_channel(TIMEOUT_NOBLOCK); |
43 | if(pmos_chan < 0) panicf("No LRADC channel for PMOS !"); | 45 | if(pmos_chan < 0) panicf("No LRADC channel for PMOS !"); |
44 | nmos_chan = imx233_lradc_acquire_channel(TIMEOUT_NOBLOCK); | 46 | nmos_chan = imx233_lradc_acquire_channel(TIMEOUT_NOBLOCK); |
45 | if(nmos_chan < 0) panicf("No LRADC channel for NMOS !"); | 47 | if(nmos_chan < 0) panicf("No LRADC channel for NMOS !"); |
46 | 48 | ||
47 | // setup them | 49 | /* setup them for the simplest use: no accumulation, no division*/ |
48 | imx233_lradc_setup_channel(battery_chan, false, false, 0, HW_LRADC_CHANNEL_BATTERY); | 50 | imx233_lradc_setup_channel(battery_chan, false, false, 0, HW_LRADC_CHANNEL_BATTERY); |
49 | imx233_lradc_setup_channel(vddio_chan, false, false, 0, HW_LRADC_CHANNEL_VDDIO); | 51 | imx233_lradc_setup_channel(vddio_chan, false, false, 0, HW_LRADC_CHANNEL_VDDIO); |
50 | imx233_lradc_setup_channel(nmos_chan, false, false, 0, HW_LRADC_CHANNEL_NMOS_THIN); | 52 | imx233_lradc_setup_channel(nmos_chan, false, false, 0, HW_LRADC_CHANNEL_NMOS_THIN); |
51 | imx233_lradc_setup_channel(pmos_chan, false, false, 0, HW_LRADC_CHANNEL_PMOS_THIN); | 53 | imx233_lradc_setup_channel(pmos_chan, false, false, 0, HW_LRADC_CHANNEL_PMOS_THIN); |
54 | /* setup delay channel for battery for automatic reading and scaling */ | ||
55 | battery_delay_chan = 0; | ||
56 | imx233_lradc_reserve_delay(battery_delay_chan); | ||
57 | /* setup delay to trigger battery channel and retrigger itself. | ||
58 | * The counter runs at 2KHz so a delay of 200 will trigger 10 | ||
59 | * conversions per seconds */ | ||
60 | imx233_lradc_setup_delay(battery_delay_chan, 1 << battery_chan, | ||
61 | 1 << battery_delay_chan, 0, 200); | ||
62 | /* enable automatic conversion, use Li-Ion type battery */ | ||
63 | imx233_lradc_setup_battery_conversion(true, HW_LRADC_CONVERSION__SCALE_FACTOR__LI_ION); | ||
52 | } | 64 | } |
53 | 65 | ||
54 | int adc_read_physical_ex(int virt) | 66 | int adc_read_physical_ex(int virt) |
@@ -56,8 +68,7 @@ int adc_read_physical_ex(int virt) | |||
56 | imx233_lradc_clear_channel(virt); | 68 | imx233_lradc_clear_channel(virt); |
57 | imx233_lradc_kick_channel(virt); | 69 | imx233_lradc_kick_channel(virt); |
58 | imx233_lradc_wait_channel(virt); | 70 | imx233_lradc_wait_channel(virt); |
59 | int v = imx233_lradc_read_channel(virt); | 71 | return imx233_lradc_read_channel(virt); |
60 | return v; | ||
61 | } | 72 | } |
62 | 73 | ||
63 | int adc_read_physical(int src) | 74 | int adc_read_physical(int src) |
@@ -75,9 +86,12 @@ unsigned short adc_read_virtual(int c) | |||
75 | switch(c) | 86 | switch(c) |
76 | { | 87 | { |
77 | case IMX233_ADC_BATTERY: | 88 | case IMX233_ADC_BATTERY: |
78 | return adc_read_physical_ex(battery_chan); | 89 | return /*imx233_lradc_read_battery_voltage()*/adc_read_physical_ex(battery_chan); |
79 | case IMX233_ADC_VDDIO: | 90 | case IMX233_ADC_VDDIO: |
80 | return adc_read_physical_ex(vddio_chan); | 91 | return adc_read_physical_ex(vddio_chan); |
92 | case IMX233_ADC_5V: | ||
93 | /* channel 15 5V has a 4:1 built it divider */ | ||
94 | return adc_read_physical(HW_LRADC_CHANNEL_5V) * 4; | ||
81 | case IMX233_ADC_DIE_TEMP: | 95 | case IMX233_ADC_DIE_TEMP: |
82 | // do kelvin to celsius conversion | 96 | // do kelvin to celsius conversion |
83 | return imx233_lradc_sense_die_temperature(nmos_chan, pmos_chan) - 273; | 97 | return imx233_lradc_sense_die_temperature(nmos_chan, pmos_chan) - 273; |
diff --git a/firmware/target/arm/imx233/adc-imx233.h b/firmware/target/arm/imx233/adc-imx233.h index 6025fdcdf8..7468fbe3c3 100644 --- a/firmware/target/arm/imx233/adc-imx233.h +++ b/firmware/target/arm/imx233/adc-imx233.h | |||
@@ -29,6 +29,7 @@ | |||
29 | #define IMX233_ADC_BATTERY -1 /* Battery voltage (mV) */ | 29 | #define IMX233_ADC_BATTERY -1 /* Battery voltage (mV) */ |
30 | #define IMX233_ADC_DIE_TEMP -2 /* Die temperature (°C) */ | 30 | #define IMX233_ADC_DIE_TEMP -2 /* Die temperature (°C) */ |
31 | #define IMX233_ADC_VDDIO -3 /* VddIO voltage (mV) */ | 31 | #define IMX233_ADC_VDDIO -3 /* VddIO voltage (mV) */ |
32 | #define IMX233_ADC_5V -4 /* Vdd5V voltage (mV) */ | ||
32 | 33 | ||
33 | /* Channel mapping */ | 34 | /* Channel mapping */ |
34 | extern int imx233_adc_mapping[]; | 35 | extern int imx233_adc_mapping[]; |
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/adc-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/adc-fuzeplus.c index 757ec72519..2da440b170 100644 --- a/firmware/target/arm/imx233/sansa-fuzeplus/adc-fuzeplus.c +++ b/firmware/target/arm/imx233/sansa-fuzeplus/adc-fuzeplus.c | |||
@@ -26,7 +26,7 @@ int imx233_adc_mapping[] = | |||
26 | [ADC_BATTERY] = IMX233_ADC_BATTERY, | 26 | [ADC_BATTERY] = IMX233_ADC_BATTERY, |
27 | [ADC_DIE_TEMP] = IMX233_ADC_DIE_TEMP, | 27 | [ADC_DIE_TEMP] = IMX233_ADC_DIE_TEMP, |
28 | [ADC_VDDIO] = IMX233_ADC_VDDIO, | 28 | [ADC_VDDIO] = IMX233_ADC_VDDIO, |
29 | [ADC_5V] = HW_LRADC_CHANNEL_5V, | 29 | [ADC_5V] = IMX233_ADC_5V, |
30 | }; | 30 | }; |
31 | 31 | ||
32 | const char *imx233_adc_channel_name[] = | 32 | const char *imx233_adc_channel_name[] = |
@@ -34,5 +34,5 @@ const char *imx233_adc_channel_name[] = | |||
34 | "Battery(mV)", | 34 | "Battery(mV)", |
35 | "Die temperature(°C)", | 35 | "Die temperature(°C)", |
36 | "VddIO", | 36 | "VddIO", |
37 | "5V", | 37 | "Vdd5V", |
38 | }; | 38 | }; |