diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-19 12:56:22 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-20 13:53:39 +0100 |
commit | fd0a86a572038ef091b116e860d262137245d75a (patch) | |
tree | 7429f856ad3b34e4bbd845bee2b96ae60afda4ca /firmware/target | |
parent | 961498d58af174e6a99047113b668dedd72fb6db (diff) | |
download | rockbox-fd0a86a572038ef091b116e860d262137245d75a.tar.gz rockbox-fd0a86a572038ef091b116e860d262137245d75a.zip |
imx233: split lradc channel setup into source and sampling parameters
Change-Id: I1be43fec9622cb78fc5737e5ed8d7fda17baf576
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/imx233/adc-imx233.c | 3 | ||||
-rw-r--r-- | firmware/target/arm/imx233/lradc-imx233.c | 22 | ||||
-rw-r--r-- | firmware/target/arm/imx233/lradc-imx233.h | 5 | ||||
-rw-r--r-- | firmware/target/arm/imx233/touchscreen-imx233.c | 3 |
4 files changed, 23 insertions, 10 deletions
diff --git a/firmware/target/arm/imx233/adc-imx233.c b/firmware/target/arm/imx233/adc-imx233.c index f3b7869159..7ddefae60b 100644 --- a/firmware/target/arm/imx233/adc-imx233.c +++ b/firmware/target/arm/imx233/adc-imx233.c | |||
@@ -80,7 +80,8 @@ static short adc_read_physical(int src, bool div2) | |||
80 | { | 80 | { |
81 | int virt = imx233_lradc_acquire_channel(src, TIMEOUT_BLOCK); | 81 | int virt = imx233_lradc_acquire_channel(src, TIMEOUT_BLOCK); |
82 | // divide by two for wider ranger | 82 | // divide by two for wider ranger |
83 | imx233_lradc_setup_channel(virt, div2, false, 0, src); | 83 | imx233_lradc_setup_source(virt, div2, src); |
84 | imx233_lradc_setup_sampling(virt, false, 0); | ||
84 | int val = adc_read_physical_ex(virt); | 85 | int val = adc_read_physical_ex(virt); |
85 | imx233_lradc_release_channel(virt); | 86 | imx233_lradc_release_channel(virt); |
86 | return val; | 87 | return val; |
diff --git a/firmware/target/arm/imx233/lradc-imx233.c b/firmware/target/arm/imx233/lradc-imx233.c index d95a002663..db44f9100a 100644 --- a/firmware/target/arm/imx233/lradc-imx233.c +++ b/firmware/target/arm/imx233/lradc-imx233.c | |||
@@ -66,10 +66,8 @@ void imx233_lradc_set_channel_irq_callback(int channel, lradc_irq_fn_t cb) | |||
66 | imx233_icoll_enable_interrupt(INT_SRC_LRADC_CHx(channel), cb != NULL); | 66 | imx233_icoll_enable_interrupt(INT_SRC_LRADC_CHx(channel), cb != NULL); |
67 | } | 67 | } |
68 | 68 | ||
69 | void imx233_lradc_setup_channel(int channel, bool div2, bool acc, int nr_samples, int src) | 69 | void imx233_lradc_setup_source(int channel, bool div2, int src) |
70 | { | 70 | { |
71 | HW_LRADC_CHn_CLR(channel) = BM_OR2(LRADC_CHn, NUM_SAMPLES, ACCUMULATE); | ||
72 | HW_LRADC_CHn_SET(channel) = BF_OR2(LRADC_CHn, NUM_SAMPLES(nr_samples), ACCUMULATE(acc)); | ||
73 | if(div2) | 71 | if(div2) |
74 | BF_SETV(LRADC_CTRL2, DIVIDE_BY_TWO, 1 << channel); | 72 | BF_SETV(LRADC_CTRL2, DIVIDE_BY_TWO, 1 << channel); |
75 | else | 73 | else |
@@ -93,6 +91,12 @@ void imx233_lradc_setup_channel(int channel, bool div2, bool acc, int nr_samples | |||
93 | #endif | 91 | #endif |
94 | } | 92 | } |
95 | 93 | ||
94 | void imx233_lradc_setup_sampling(int channel, bool acc, int nr_samples) | ||
95 | { | ||
96 | HW_LRADC_CHn_CLR(channel) = BM_OR2(LRADC_CHn, NUM_SAMPLES, ACCUMULATE); | ||
97 | HW_LRADC_CHn_SET(channel) = BF_OR2(LRADC_CHn, NUM_SAMPLES(nr_samples), ACCUMULATE(acc)); | ||
98 | } | ||
99 | |||
96 | void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays, | 100 | void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays, |
97 | int loop_count, int delay) | 101 | int loop_count, int delay) |
98 | { | 102 | { |
@@ -202,8 +206,10 @@ void imx233_lradc_reserve_delay(int channel) | |||
202 | #if IMX233_SUBTARGET >= 3700 | 206 | #if IMX233_SUBTARGET >= 3700 |
203 | int imx233_lradc_sense_die_temperature(int nmos_chan, int pmos_chan) | 207 | int imx233_lradc_sense_die_temperature(int nmos_chan, int pmos_chan) |
204 | { | 208 | { |
205 | imx233_lradc_setup_channel(nmos_chan, false, false, 0, LRADC_SRC_NMOS_THIN); | 209 | imx233_lradc_setup_source(nmos_chan, false, LRADC_SRC_NMOS_THIN); |
206 | imx233_lradc_setup_channel(pmos_chan, false, false, 0, LRADC_SRC_PMOS_THIN); | 210 | imx233_lradc_setup_sampling(nmos_chan, false, 0); |
211 | imx233_lradc_setup_source(pmos_chan, false, LRADC_SRC_PMOS_THIN); | ||
212 | imx233_lradc_setup_sampling(pmos_chan, false, 0); | ||
207 | // mux sensors | 213 | // mux sensors |
208 | BF_CLR(LRADC_CTRL2, TEMPSENSE_PWD); | 214 | BF_CLR(LRADC_CTRL2, TEMPSENSE_PWD); |
209 | imx233_lradc_clear_channel(nmos_chan); | 215 | imx233_lradc_clear_channel(nmos_chan); |
@@ -247,7 +253,8 @@ int imx233_lradc_sense_ext_temperature(int chan, int sensor) | |||
247 | { | 253 | { |
248 | #define EXT_TEMP_ACC_COUNT 5 | 254 | #define EXT_TEMP_ACC_COUNT 5 |
249 | /* setup channel */ | 255 | /* setup channel */ |
250 | imx233_lradc_setup_channel(chan, false, false, 0, sensor); | 256 | imx233_lradc_setup_source(chan, false, sensor); |
257 | imx233_lradc_setup_sampling(chan, false, 0); | ||
251 | /* set current source to 300µA */ | 258 | /* set current source to 300µA */ |
252 | imx233_lradc_set_temp_isrc(sensor, BV_LRADC_CTRL2_TEMP_ISRC0__300); | 259 | imx233_lradc_set_temp_isrc(sensor, BV_LRADC_CTRL2_TEMP_ISRC0__300); |
253 | /* read value and accumulate */ | 260 | /* read value and accumulate */ |
@@ -350,7 +357,8 @@ void imx233_lradc_init(void) | |||
350 | battery_chan = 7; | 357 | battery_chan = 7; |
351 | imx233_lradc_reserve_channel(battery_chan); | 358 | imx233_lradc_reserve_channel(battery_chan); |
352 | /* setup them for the simplest use: no accumulation, no division*/ | 359 | /* setup them for the simplest use: no accumulation, no division*/ |
353 | imx233_lradc_setup_channel(battery_chan, false, false, 0, LRADC_SRC_BATTERY); | 360 | imx233_lradc_setup_source(battery_chan, false, LRADC_SRC_BATTERY); |
361 | imx233_lradc_setup_sampling(battery_chan, false, 0); | ||
354 | /* setup delay channel for battery for automatic reading and scaling */ | 362 | /* setup delay channel for battery for automatic reading and scaling */ |
355 | battery_delay_chan = 0; | 363 | battery_delay_chan = 0; |
356 | imx233_lradc_reserve_delay(battery_delay_chan); | 364 | imx233_lradc_reserve_delay(battery_delay_chan); |
diff --git a/firmware/target/arm/imx233/lradc-imx233.h b/firmware/target/arm/imx233/lradc-imx233.h index e7853b97a5..0ef8858e02 100644 --- a/firmware/target/arm/imx233/lradc-imx233.h +++ b/firmware/target/arm/imx233/lradc-imx233.h | |||
@@ -42,6 +42,7 @@ | |||
42 | 42 | ||
43 | #define LRADC_NUM_CHANNELS 8 | 43 | #define LRADC_NUM_CHANNELS 8 |
44 | #define LRADC_NUM_DELAYS 4 | 44 | #define LRADC_NUM_DELAYS 4 |
45 | #define LRADC_NUM_SOURCES 16 | ||
45 | 46 | ||
46 | #define LRADC_SRC(x) (x) | 47 | #define LRADC_SRC(x) (x) |
47 | #define LRADC_SRC_XPLUS LRADC_SRC(2) | 48 | #define LRADC_SRC_XPLUS LRADC_SRC(2) |
@@ -71,7 +72,9 @@ | |||
71 | typedef void (*lradc_irq_fn_t)(int chan); | 72 | typedef void (*lradc_irq_fn_t)(int chan); |
72 | 73 | ||
73 | void imx233_lradc_init(void); | 74 | void imx233_lradc_init(void); |
74 | void imx233_lradc_setup_channel(int channel, bool div2, bool acc, int nr_samples, int src); | 75 | void imx233_lradc_setup_source(int channel, bool div2, int src); |
76 | /* variant of the above only for accumulation changes */ | ||
77 | void imx233_lradc_setup_sampling(int channel, bool acc, int nr_samples); | ||
75 | void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays, | 78 | void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays, |
76 | int loop_count, int delay); | 79 | int loop_count, int delay); |
77 | void imx233_lradc_clear_channel_irq(int channel); | 80 | void imx233_lradc_clear_channel_irq(int channel); |
diff --git a/firmware/target/arm/imx233/touchscreen-imx233.c b/firmware/target/arm/imx233/touchscreen-imx233.c index 8868f3e2b6..7a784db5a3 100644 --- a/firmware/target/arm/imx233/touchscreen-imx233.c +++ b/firmware/target/arm/imx233/touchscreen-imx233.c | |||
@@ -115,7 +115,8 @@ static void kick_measure(bool pull_x, bool pull_y, bool detect, int src) | |||
115 | imx233_lradc_enable_touch_detect_irq(false); | 115 | imx233_lradc_enable_touch_detect_irq(false); |
116 | imx233_lradc_enable_channel_irq(touch_chan, true); | 116 | imx233_lradc_enable_channel_irq(touch_chan, true); |
117 | /* measure channel, no accumulation */ | 117 | /* measure channel, no accumulation */ |
118 | imx233_lradc_setup_channel(touch_chan, false, true, NR_SAMPLES - 1, src); | 118 | imx233_lradc_setup_source(touch_chan, false, src); |
119 | imx233_lradc_setup_sampling(touch_chan, true, NR_SAMPLES - 1); | ||
119 | imx233_lradc_clear_channel(touch_chan); | 120 | imx233_lradc_clear_channel(touch_chan); |
120 | /* use a delay */ | 121 | /* use a delay */ |
121 | imx233_lradc_setup_delay(touch_delay, 1 << touch_chan, 1 << touch_delay, | 122 | imx233_lradc_setup_delay(touch_delay, 1 << touch_chan, 1 << touch_delay, |