summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/lradc-imx233.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233/lradc-imx233.h')
-rw-r--r--firmware/target/arm/imx233/lradc-imx233.h29
1 files changed, 27 insertions, 2 deletions
diff --git a/firmware/target/arm/imx233/lradc-imx233.h b/firmware/target/arm/imx233/lradc-imx233.h
index b661fa8aa4..f71843b3db 100644
--- a/firmware/target/arm/imx233/lradc-imx233.h
+++ b/firmware/target/arm/imx233/lradc-imx233.h
@@ -31,12 +31,19 @@
31#define HW_LRADC_BASE 0x80050000 31#define HW_LRADC_BASE 0x80050000
32 32
33#define HW_LRADC_CTRL0 (*(volatile uint32_t *)(HW_LRADC_BASE + 0x0)) 33#define HW_LRADC_CTRL0 (*(volatile uint32_t *)(HW_LRADC_BASE + 0x0))
34#define HW_LRADC_CTRL0__XPLUS_ENABLE (1 << 16)
35#define HW_LRADC_CTRL0__YPLUS_ENABLE (1 << 17)
36#define HW_LRADC_CTRL0__XMINUS_ENABLE (1 << 18)
37#define HW_LRADC_CTRL0__YMINUS_ENABLE (1 << 19)
38#define HW_LRADC_CTRL0__TOUCH_DETECT_ENABLE (1 << 20)
34#define HW_LRADC_CTRL0__ONCHIP_GROUNDREF (1 << 21) 39#define HW_LRADC_CTRL0__ONCHIP_GROUNDREF (1 << 21)
35#define HW_LRADC_CTRL0__SCHEDULE(x) (1 << (x)) 40#define HW_LRADC_CTRL0__SCHEDULE(x) (1 << (x))
36 41
37#define HW_LRADC_CTRL1 (*(volatile uint32_t *)(HW_LRADC_BASE + 0x10)) 42#define HW_LRADC_CTRL1 (*(volatile uint32_t *)(HW_LRADC_BASE + 0x10))
38#define HW_LRADC_CTRL1__LRADCx_IRQ(x) (1 << (x)) 43#define HW_LRADC_CTRL1__LRADCx_IRQ(x) (1 << (x))
39#define HW_LRADC_CTRL1__LRADCx_IRQ_EN(x) (1 << ((x) + 16)) 44#define HW_LRADC_CTRL1__TOUCH_DETECT_IRQ (1 << 8)
45#define HW_LRADC_CTRL1__LRADCx_IRQ_EN(x) (1 << ((x) + 16))
46#define HW_LRADC_CTRL1__TOUCH_DETECT_IRQ_EN (1 << 24)
40 47
41#define HW_LRADC_CTRL2 (*(volatile uint32_t *)(HW_LRADC_BASE + 0x20)) 48#define HW_LRADC_CTRL2 (*(volatile uint32_t *)(HW_LRADC_BASE + 0x20))
42#define HW_LRADC_CTRL2__TEMP_ISRC1_BP 4 49#define HW_LRADC_CTRL2__TEMP_ISRC1_BP 4
@@ -63,6 +70,7 @@
63#define HW_LRADC_CTRL3__CYCLE_TIME__2MHz (3 << 8) 70#define HW_LRADC_CTRL3__CYCLE_TIME__2MHz (3 << 8)
64 71
65#define HW_LRADC_STATUS (*(volatile uint32_t *)(HW_LRADC_BASE + 0x40)) 72#define HW_LRADC_STATUS (*(volatile uint32_t *)(HW_LRADC_BASE + 0x40))
73#define HW_LRADC_STATUS__TOUCH_DETECT_RAW (1 << 0)
66 74
67#define HW_LRADC_CHx(x) (*(volatile uint32_t *)(HW_LRADC_BASE + 0x50 + (x) * 0x10)) 75#define HW_LRADC_CHx(x) (*(volatile uint32_t *)(HW_LRADC_BASE + 0x50 + (x) * 0x10))
68#define HW_LRADC_CHx__NUM_SAMPLES_BM (0x1f << 24) 76#define HW_LRADC_CHx__NUM_SAMPLES_BM (0x1f << 24)
@@ -100,6 +108,10 @@
100#define HW_LRADC_NUM_DELAYS 4 108#define HW_LRADC_NUM_DELAYS 4
101 109
102#define HW_LRADC_CHANNEL(x) (x) 110#define HW_LRADC_CHANNEL(x) (x)
111#define HW_LRADC_CHANNEL_XPLUS HW_LRADC_CHANNEL(2)
112#define HW_LRADC_CHANNEL_YPLUS HW_LRADC_CHANNEL(3)
113#define HW_LRADC_CHANNEL_XMINUS HW_LRADC_CHANNEL(4)
114#define HW_LRADC_CHANNEL_YMINUS HW_LRADC_CHANNEL(5)
103#define HW_LRADC_CHANNEL_VDDIO HW_LRADC_CHANNEL(6) 115#define HW_LRADC_CHANNEL_VDDIO HW_LRADC_CHANNEL(6)
104#define HW_LRADC_CHANNEL_BATTERY HW_LRADC_CHANNEL(7) 116#define HW_LRADC_CHANNEL_BATTERY HW_LRADC_CHANNEL(7)
105#define HW_LRADC_CHANNEL_PMOS_THIN HW_LRADC_CHANNEL(8) 117#define HW_LRADC_CHANNEL_PMOS_THIN HW_LRADC_CHANNEL(8)
@@ -112,10 +124,16 @@
112#define HW_LRADC_CHANNEL_VBG HW_LRADC_CHANNEL(14) 124#define HW_LRADC_CHANNEL_VBG HW_LRADC_CHANNEL(14)
113#define HW_LRADC_CHANNEL_5V HW_LRADC_CHANNEL(15) 125#define HW_LRADC_CHANNEL_5V HW_LRADC_CHANNEL(15)
114 126
127typedef void (*lradc_irq_fn_t)(int chan);
128
115void imx233_lradc_init(void); 129void imx233_lradc_init(void);
116void imx233_lradc_setup_channel(int channel, bool div2, bool acc, int nr_samples, int src); 130void imx233_lradc_setup_channel(int channel, bool div2, bool acc, int nr_samples, int src);
117void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays, 131void imx233_lradc_setup_delay(int dchan, int trigger_lradc, int trigger_delays,
118 int loop_count, int delay); 132 int loop_count, int delay);
133void imx233_lradc_clear_channel_irq(int channel);
134bool imx233_lradc_read_channel_irq(int channel);
135void imx233_lradc_enable_channel_irq(int channel, bool enable);
136void imx233_lradc_set_channel_irq_callback(int channel, lradc_irq_fn_t cb);
119void imx233_lradc_kick_channel(int channel); 137void imx233_lradc_kick_channel(int channel);
120void imx233_lradc_kick_delay(int dchan); 138void imx233_lradc_kick_delay(int dchan);
121void imx233_lradc_wait_channel(int channel); 139void imx233_lradc_wait_channel(int channel);
@@ -132,6 +150,13 @@ int imx233_lradc_acquire_delay(int timeout);
132void imx233_lradc_reserve_delay(int dchannel); 150void imx233_lradc_reserve_delay(int dchannel);
133void imx233_lradc_release_delay(int dchan); 151void imx233_lradc_release_delay(int dchan);
134 152
153/* Setup touch x/yminus pull donws and x/yplus pull ups */
154void imx233_lradc_setup_touch(bool xminus_enable, bool yminus_enable,
155 bool xplus_enable, bool yplus_enable, bool touch_detect);
156void imx233_lradc_enable_touch_detect_irq(bool enable);
157void imx233_lradc_clear_touch_detect_irq(void);
158bool imx233_lradc_read_touch_detect(void);
159
135/* enable sensing and return temperature in kelvin, 160/* enable sensing and return temperature in kelvin,
136 * channels needs not to be configured */ 161 * channels needs not to be configured */
137int imx233_lradc_sense_die_temperature(int nmos_chan, int pmos_chan); 162int imx233_lradc_sense_die_temperature(int nmos_chan, int pmos_chan);