summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/lradc-imx233.h
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2013-06-16 20:59:36 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2013-06-17 00:29:25 +0200
commitf4fdf1ffe2189dafd1ebbbbf50f1a4626364ead3 (patch)
tree03a43c6fd5d20fd9354e34903840f7d7baffa117 /firmware/target/arm/imx233/lradc-imx233.h
parent239219ee70aa02a324fb94b6e463781c5c77beea (diff)
downloadrockbox-f4fdf1ffe2189dafd1ebbbbf50f1a4626364ead3.tar.gz
rockbox-f4fdf1ffe2189dafd1ebbbbf50f1a4626364ead3.zip
imx233: fix lradc/adc for stmp3600 and stmp3700
The lradc architecture of the stmp3600 is rather different: only channels 6 and 7 have configurable source and we need to take care when allocating channels so that we can actually measure the right channel! Delegate die temperature sensing to the power block on stmp3600. Change-Id: I0860eb4ea98240facc3d4a19d61684eca5f630cc
Diffstat (limited to 'firmware/target/arm/imx233/lradc-imx233.h')
-rw-r--r--firmware/target/arm/imx233/lradc-imx233.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/firmware/target/arm/imx233/lradc-imx233.h b/firmware/target/arm/imx233/lradc-imx233.h
index d1529f4266..f274db3520 100644
--- a/firmware/target/arm/imx233/lradc-imx233.h
+++ b/firmware/target/arm/imx233/lradc-imx233.h
@@ -55,10 +55,12 @@
55#define LRADC_SRC_NMOS_THICK LRADC_SRC(10) 55#define LRADC_SRC_NMOS_THICK LRADC_SRC(10)
56#define LRADC_SRC_PMOS_THICK LRADC_SRC(11) 56#define LRADC_SRC_PMOS_THICK LRADC_SRC(11)
57#define LRADC_SRC_PMOS_THICK LRADC_SRC(11) 57#define LRADC_SRC_PMOS_THICK LRADC_SRC(11)
58#if IMX233_SUBTARGET >= 3700
58#define LRADC_SRC_USB_DP LRADC_SRC(12) 59#define LRADC_SRC_USB_DP LRADC_SRC(12)
59#define LRADC_SRC_USB_DN LRADC_SRC(13) 60#define LRADC_SRC_USB_DN LRADC_SRC(13)
60#define LRADC_SRC_VBG LRADC_SRC(14) 61#define LRADC_SRC_VBG LRADC_SRC(14)
61#define LRADC_SRC_5V LRADC_SRC(15) 62#define LRADC_SRC_5V LRADC_SRC(15)
63#endif
62 64
63/* frequency of the delay counter */ 65/* frequency of the delay counter */
64#define LRADC_DELAY_FREQ 2000 66#define LRADC_DELAY_FREQ 2000
@@ -72,14 +74,17 @@ void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays,
72void imx233_lradc_clear_channel_irq(int channel); 74void imx233_lradc_clear_channel_irq(int channel);
73bool imx233_lradc_read_channel_irq(int channel); 75bool imx233_lradc_read_channel_irq(int channel);
74void imx233_lradc_enable_channel_irq(int channel, bool enable); 76void imx233_lradc_enable_channel_irq(int channel, bool enable);
77/* a non-null cb will enable the icoll interrupt, a null one will disable it
78 * NOTE the channel irq is automatically cleared */
75void imx233_lradc_set_channel_irq_callback(int channel, lradc_irq_fn_t cb); 79void imx233_lradc_set_channel_irq_callback(int channel, lradc_irq_fn_t cb);
76void imx233_lradc_kick_channel(int channel); 80void imx233_lradc_kick_channel(int channel);
77void imx233_lradc_kick_delay(int dchan); 81void imx233_lradc_kick_delay(int dchan);
78void imx233_lradc_wait_channel(int channel); 82void imx233_lradc_wait_channel(int channel);
79int imx233_lradc_read_channel(int channel); 83int imx233_lradc_read_channel(int channel);
80void imx233_lradc_clear_channel(int channel); 84void imx233_lradc_clear_channel(int channel);
81// acquire a virtual channel, returns -1 on timeout, channel otherwise */ 85/* acquire a channel, returns -1 on timeout, channel otherwise
82int imx233_lradc_acquire_channel(int timeout); 86 * the returned channel is garanteed to be able measure source src */
87int imx233_lradc_acquire_channel(int src, int timeout);
83void imx233_lradc_release_channel(int chan); 88void imx233_lradc_release_channel(int chan);
84// doesn't check that channel is in use! 89// doesn't check that channel is in use!
85void imx233_lradc_reserve_channel(int channel); 90void imx233_lradc_reserve_channel(int channel);
@@ -96,9 +101,11 @@ void imx233_lradc_enable_touch_detect_irq(bool enable);
96void imx233_lradc_clear_touch_detect_irq(void); 101void imx233_lradc_clear_touch_detect_irq(void);
97bool imx233_lradc_read_touch_detect(void); 102bool imx233_lradc_read_touch_detect(void);
98 103
104#if IMX233_SUBTARGET >= 3700
99/* enable sensing and return temperature in kelvin, 105/* enable sensing and return temperature in kelvin,
100 * channels needs not to be configured */ 106 * channels needs not to be configured */
101int imx233_lradc_sense_die_temperature(int nmos_chan, int pmos_chan); 107int imx233_lradc_sense_die_temperature(int nmos_chan, int pmos_chan);
108#endif
102/* return *raw* external temperature, might need some transformation 109/* return *raw* external temperature, might need some transformation
103 * channel needs not to be configured */ 110 * channel needs not to be configured */
104int imx233_lradc_sense_ext_temperature(int chan, int sensor); 111int imx233_lradc_sense_ext_temperature(int chan, int sensor);