summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-02-19 12:56:22 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2014-02-20 13:53:39 +0100
commitfd0a86a572038ef091b116e860d262137245d75a (patch)
tree7429f856ad3b34e4bbd845bee2b96ae60afda4ca /firmware/target/arm/imx233
parent961498d58af174e6a99047113b668dedd72fb6db (diff)
downloadrockbox-fd0a86a572038ef091b116e860d262137245d75a.tar.gz
rockbox-fd0a86a572038ef091b116e860d262137245d75a.zip
imx233: split lradc channel setup into source and sampling parameters
Change-Id: I1be43fec9622cb78fc5737e5ed8d7fda17baf576
Diffstat (limited to 'firmware/target/arm/imx233')
-rw-r--r--firmware/target/arm/imx233/adc-imx233.c3
-rw-r--r--firmware/target/arm/imx233/lradc-imx233.c22
-rw-r--r--firmware/target/arm/imx233/lradc-imx233.h5
-rw-r--r--firmware/target/arm/imx233/touchscreen-imx233.c3
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
69void imx233_lradc_setup_channel(int channel, bool div2, bool acc, int nr_samples, int src) 69void 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
94void 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
96void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays, 100void 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
203int imx233_lradc_sense_die_temperature(int nmos_chan, int pmos_chan) 207int 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 @@
71typedef void (*lradc_irq_fn_t)(int chan); 72typedef void (*lradc_irq_fn_t)(int chan);
72 73
73void imx233_lradc_init(void); 74void imx233_lradc_init(void);
74void imx233_lradc_setup_channel(int channel, bool div2, bool acc, int nr_samples, int src); 75void imx233_lradc_setup_source(int channel, bool div2, int src);
76/* variant of the above only for accumulation changes */
77void imx233_lradc_setup_sampling(int channel, bool acc, int nr_samples);
75void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays, 78void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays,
76 int loop_count, int delay); 79 int loop_count, int delay);
77void imx233_lradc_clear_channel_irq(int channel); 80void 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,