Linux-libre 3.16.85-gnu
[librecmc/linux-libre.git] / drivers / staging / iio / adc / mxs-lradc.c
1 /*
2  * Freescale i.MX28 LRADC driver
3  *
4  * Copyright (c) 2012 DENX Software Engineering, GmbH.
5  * Marek Vasut <marex@denx.de>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  */
17
18 #include <linux/err.h>
19 #include <linux/interrupt.h>
20 #include <linux/device.h>
21 #include <linux/kernel.h>
22 #include <linux/slab.h>
23 #include <linux/of.h>
24 #include <linux/of_device.h>
25 #include <linux/sysfs.h>
26 #include <linux/list.h>
27 #include <linux/io.h>
28 #include <linux/module.h>
29 #include <linux/platform_device.h>
30 #include <linux/spinlock.h>
31 #include <linux/wait.h>
32 #include <linux/sched.h>
33 #include <linux/stmp_device.h>
34 #include <linux/bitops.h>
35 #include <linux/completion.h>
36 #include <linux/delay.h>
37 #include <linux/input.h>
38 #include <linux/clk.h>
39
40 #include <linux/iio/iio.h>
41 #include <linux/iio/sysfs.h>
42 #include <linux/iio/buffer.h>
43 #include <linux/iio/trigger.h>
44 #include <linux/iio/trigger_consumer.h>
45 #include <linux/iio/triggered_buffer.h>
46
47 #define DRIVER_NAME             "mxs-lradc"
48
49 #define LRADC_MAX_DELAY_CHANS   4
50 #define LRADC_MAX_MAPPED_CHANS  8
51 #define LRADC_MAX_TOTAL_CHANS   16
52
53 #define LRADC_DELAY_TIMER_HZ    2000
54
55 /*
56  * Make this runtime configurable if necessary. Currently, if the buffered mode
57  * is enabled, the LRADC takes LRADC_DELAY_TIMER_LOOP samples of data before
58  * triggering IRQ. The sampling happens every (LRADC_DELAY_TIMER_PER / 2000)
59  * seconds. The result is that the samples arrive every 500mS.
60  */
61 #define LRADC_DELAY_TIMER_PER   200
62 #define LRADC_DELAY_TIMER_LOOP  5
63
64 /*
65  * Once the pen touches the touchscreen, the touchscreen switches from
66  * IRQ-driven mode to polling mode to prevent interrupt storm. The polling
67  * is realized by worker thread, which is called every 20 or so milliseconds.
68  * This gives the touchscreen enough fluence and does not strain the system
69  * too much.
70  */
71 #define LRADC_TS_SAMPLE_DELAY_MS        5
72
73 /*
74  * The LRADC reads the following amount of samples from each touchscreen
75  * channel and the driver then computes avarage of these.
76  */
77 #define LRADC_TS_SAMPLE_AMOUNT          4
78
79 enum mxs_lradc_id {
80         IMX23_LRADC,
81         IMX28_LRADC,
82 };
83
84 static const char * const mx23_lradc_irq_names[] = {
85         "mxs-lradc-touchscreen",
86         "mxs-lradc-channel0",
87         "mxs-lradc-channel1",
88         "mxs-lradc-channel2",
89         "mxs-lradc-channel3",
90         "mxs-lradc-channel4",
91         "mxs-lradc-channel5",
92         "mxs-lradc-channel6",
93         "mxs-lradc-channel7",
94 };
95
96 static const char * const mx28_lradc_irq_names[] = {
97         "mxs-lradc-touchscreen",
98         "mxs-lradc-thresh0",
99         "mxs-lradc-thresh1",
100         "mxs-lradc-channel0",
101         "mxs-lradc-channel1",
102         "mxs-lradc-channel2",
103         "mxs-lradc-channel3",
104         "mxs-lradc-channel4",
105         "mxs-lradc-channel5",
106         "mxs-lradc-channel6",
107         "mxs-lradc-channel7",
108         "mxs-lradc-button0",
109         "mxs-lradc-button1",
110 };
111
112 struct mxs_lradc_of_config {
113         const int               irq_count;
114         const char * const      *irq_name;
115         const uint32_t          *vref_mv;
116 };
117
118 #define VREF_MV_BASE 1850
119
120 static const uint32_t mx23_vref_mv[LRADC_MAX_TOTAL_CHANS] = {
121         VREF_MV_BASE,           /* CH0 */
122         VREF_MV_BASE,           /* CH1 */
123         VREF_MV_BASE,           /* CH2 */
124         VREF_MV_BASE,           /* CH3 */
125         VREF_MV_BASE,           /* CH4 */
126         VREF_MV_BASE,           /* CH5 */
127         VREF_MV_BASE * 2,       /* CH6 VDDIO */
128         VREF_MV_BASE * 4,       /* CH7 VBATT */
129         VREF_MV_BASE,           /* CH8 Temp sense 0 */
130         VREF_MV_BASE,           /* CH9 Temp sense 1 */
131         VREF_MV_BASE,           /* CH10 */
132         VREF_MV_BASE,           /* CH11 */
133         VREF_MV_BASE,           /* CH12 USB_DP */
134         VREF_MV_BASE,           /* CH13 USB_DN */
135         VREF_MV_BASE,           /* CH14 VBG */
136         VREF_MV_BASE * 4,       /* CH15 VDD5V */
137 };
138
139 static const uint32_t mx28_vref_mv[LRADC_MAX_TOTAL_CHANS] = {
140         VREF_MV_BASE,           /* CH0 */
141         VREF_MV_BASE,           /* CH1 */
142         VREF_MV_BASE,           /* CH2 */
143         VREF_MV_BASE,           /* CH3 */
144         VREF_MV_BASE,           /* CH4 */
145         VREF_MV_BASE,           /* CH5 */
146         VREF_MV_BASE,           /* CH6 */
147         VREF_MV_BASE * 4,       /* CH7 VBATT */
148         VREF_MV_BASE,           /* CH8 Temp sense 0 */
149         VREF_MV_BASE,           /* CH9 Temp sense 1 */
150         VREF_MV_BASE * 2,       /* CH10 VDDIO */
151         VREF_MV_BASE,           /* CH11 VTH */
152         VREF_MV_BASE * 2,       /* CH12 VDDA */
153         VREF_MV_BASE,           /* CH13 VDDD */
154         VREF_MV_BASE,           /* CH14 VBG */
155         VREF_MV_BASE * 4,       /* CH15 VDD5V */
156 };
157
158 static const struct mxs_lradc_of_config mxs_lradc_of_config[] = {
159         [IMX23_LRADC] = {
160                 .irq_count      = ARRAY_SIZE(mx23_lradc_irq_names),
161                 .irq_name       = mx23_lradc_irq_names,
162                 .vref_mv        = mx23_vref_mv,
163         },
164         [IMX28_LRADC] = {
165                 .irq_count      = ARRAY_SIZE(mx28_lradc_irq_names),
166                 .irq_name       = mx28_lradc_irq_names,
167                 .vref_mv        = mx28_vref_mv,
168         },
169 };
170
171 enum mxs_lradc_ts {
172         MXS_LRADC_TOUCHSCREEN_NONE = 0,
173         MXS_LRADC_TOUCHSCREEN_4WIRE,
174         MXS_LRADC_TOUCHSCREEN_5WIRE,
175 };
176
177 /*
178  * Touchscreen handling
179  */
180 enum lradc_ts_plate {
181         LRADC_TOUCH = 0,
182         LRADC_SAMPLE_X,
183         LRADC_SAMPLE_Y,
184         LRADC_SAMPLE_PRESSURE,
185         LRADC_SAMPLE_VALID,
186 };
187
188 enum mxs_lradc_divbytwo {
189         MXS_LRADC_DIV_DISABLED = 0,
190         MXS_LRADC_DIV_ENABLED,
191 };
192
193 struct mxs_lradc_scale {
194         unsigned int            integer;
195         unsigned int            nano;
196 };
197
198 struct mxs_lradc {
199         struct device           *dev;
200         void __iomem            *base;
201         int                     irq[13];
202
203         struct clk              *clk;
204
205         uint32_t                *buffer;
206         struct iio_trigger      *trig;
207
208         struct mutex            lock;
209
210         struct completion       completion;
211
212         const uint32_t          *vref_mv;
213         struct mxs_lradc_scale  scale_avail[LRADC_MAX_TOTAL_CHANS][2];
214         unsigned long           is_divided;
215
216         /*
217          * When the touchscreen is enabled, we give it two private virtual
218          * channels: #6 and #7. This means that only 6 virtual channels (instead
219          * of 8) will be available for buffered capture.
220          */
221 #define TOUCHSCREEN_VCHANNEL1           7
222 #define TOUCHSCREEN_VCHANNEL2           6
223 #define BUFFER_VCHANS_LIMITED           0x3f
224 #define BUFFER_VCHANS_ALL               0xff
225         u8                      buffer_vchans;
226
227         /*
228          * Furthermore, certain LRADC channels are shared between touchscreen
229          * and/or touch-buttons and generic LRADC block. Therefore when using
230          * either of these, these channels are not available for the regular
231          * sampling. The shared channels are as follows:
232          *
233          * CH0 -- Touch button #0
234          * CH1 -- Touch button #1
235          * CH2 -- Touch screen XPUL
236          * CH3 -- Touch screen YPLL
237          * CH4 -- Touch screen XNUL
238          * CH5 -- Touch screen YNLR
239          * CH6 -- Touch screen WIPER (5-wire only)
240          *
241          * The bitfields below represents which parts of the LRADC block are
242          * switched into special mode of operation. These channels can not
243          * be sampled as regular LRADC channels. The driver will refuse any
244          * attempt to sample these channels.
245          */
246 #define CHAN_MASK_TOUCHBUTTON           (0x3 << 0)
247 #define CHAN_MASK_TOUCHSCREEN_4WIRE     (0xf << 2)
248 #define CHAN_MASK_TOUCHSCREEN_5WIRE     (0x1f << 2)
249         enum mxs_lradc_ts       use_touchscreen;
250         bool                    use_touchbutton;
251
252         struct input_dev        *ts_input;
253
254         enum mxs_lradc_id       soc;
255         enum lradc_ts_plate     cur_plate; /* statemachine */
256         bool                    ts_valid;
257         unsigned                ts_x_pos;
258         unsigned                ts_y_pos;
259         unsigned                ts_pressure;
260
261         /* handle touchscreen's physical behaviour */
262         /* samples per coordinate */
263         unsigned                over_sample_cnt;
264         /* time clocks between samples */
265         unsigned                over_sample_delay;
266         /* time in clocks to wait after the plates where switched */
267         unsigned                settling_delay;
268 };
269
270 #define LRADC_CTRL0                             0x00
271 # define LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE   (1 << 23)
272 # define LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE     (1 << 22)
273 # define LRADC_CTRL0_MX28_YNNSW /* YM */        (1 << 21)
274 # define LRADC_CTRL0_MX28_YPNSW /* YP */        (1 << 20)
275 # define LRADC_CTRL0_MX28_YPPSW /* YP */        (1 << 19)
276 # define LRADC_CTRL0_MX28_XNNSW /* XM */        (1 << 18)
277 # define LRADC_CTRL0_MX28_XNPSW /* XM */        (1 << 17)
278 # define LRADC_CTRL0_MX28_XPPSW /* XP */        (1 << 16)
279
280 # define LRADC_CTRL0_MX23_TOUCH_DETECT_ENABLE   (1 << 20)
281 # define LRADC_CTRL0_MX23_YM                    (1 << 19)
282 # define LRADC_CTRL0_MX23_XM                    (1 << 18)
283 # define LRADC_CTRL0_MX23_YP                    (1 << 17)
284 # define LRADC_CTRL0_MX23_XP                    (1 << 16)
285
286 # define LRADC_CTRL0_MX28_PLATE_MASK \
287                 (LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE | \
288                 LRADC_CTRL0_MX28_YNNSW | LRADC_CTRL0_MX28_YPNSW | \
289                 LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_XNNSW | \
290                 LRADC_CTRL0_MX28_XNPSW | LRADC_CTRL0_MX28_XPPSW)
291
292 # define LRADC_CTRL0_MX23_PLATE_MASK \
293                 (LRADC_CTRL0_MX23_TOUCH_DETECT_ENABLE | \
294                 LRADC_CTRL0_MX23_YM | LRADC_CTRL0_MX23_XM | \
295                 LRADC_CTRL0_MX23_YP | LRADC_CTRL0_MX23_XP)
296
297 #define LRADC_CTRL1                             0x10
298 #define LRADC_CTRL1_TOUCH_DETECT_IRQ_EN         (1 << 24)
299 #define LRADC_CTRL1_LRADC_IRQ_EN(n)             (1 << ((n) + 16))
300 #define LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK      (0x1fff << 16)
301 #define LRADC_CTRL1_MX23_LRADC_IRQ_EN_MASK      (0x01ff << 16)
302 #define LRADC_CTRL1_LRADC_IRQ_EN_OFFSET         16
303 #define LRADC_CTRL1_TOUCH_DETECT_IRQ            (1 << 8)
304 #define LRADC_CTRL1_LRADC_IRQ(n)                (1 << (n))
305 #define LRADC_CTRL1_MX28_LRADC_IRQ_MASK         0x1fff
306 #define LRADC_CTRL1_MX23_LRADC_IRQ_MASK         0x01ff
307 #define LRADC_CTRL1_LRADC_IRQ_OFFSET            0
308
309 #define LRADC_CTRL2                             0x20
310 #define LRADC_CTRL2_DIVIDE_BY_TWO_OFFSET        24
311 #define LRADC_CTRL2_TEMPSENSE_PWD               (1 << 15)
312
313 #define LRADC_STATUS                            0x40
314 #define LRADC_STATUS_TOUCH_DETECT_RAW           (1 << 0)
315
316 #define LRADC_CH(n)                             (0x50 + (0x10 * (n)))
317 #define LRADC_CH_ACCUMULATE                     (1 << 29)
318 #define LRADC_CH_NUM_SAMPLES_MASK               (0x1f << 24)
319 #define LRADC_CH_NUM_SAMPLES_OFFSET             24
320 #define LRADC_CH_NUM_SAMPLES(x) \
321                                 ((x) << LRADC_CH_NUM_SAMPLES_OFFSET)
322 #define LRADC_CH_VALUE_MASK                     0x3ffff
323 #define LRADC_CH_VALUE_OFFSET                   0
324
325 #define LRADC_DELAY(n)                          (0xd0 + (0x10 * (n)))
326 #define LRADC_DELAY_TRIGGER_LRADCS_MASK         (0xff << 24)
327 #define LRADC_DELAY_TRIGGER_LRADCS_OFFSET       24
328 #define LRADC_DELAY_TRIGGER(x) \
329                                 (((x) << LRADC_DELAY_TRIGGER_LRADCS_OFFSET) & \
330                                 LRADC_DELAY_TRIGGER_LRADCS_MASK)
331 #define LRADC_DELAY_KICK                        (1 << 20)
332 #define LRADC_DELAY_TRIGGER_DELAYS_MASK         (0xf << 16)
333 #define LRADC_DELAY_TRIGGER_DELAYS_OFFSET       16
334 #define LRADC_DELAY_TRIGGER_DELAYS(x) \
335                                 (((x) << LRADC_DELAY_TRIGGER_DELAYS_OFFSET) & \
336                                 LRADC_DELAY_TRIGGER_DELAYS_MASK)
337 #define LRADC_DELAY_LOOP_COUNT_MASK             (0x1f << 11)
338 #define LRADC_DELAY_LOOP_COUNT_OFFSET           11
339 #define LRADC_DELAY_LOOP(x) \
340                                 (((x) << LRADC_DELAY_LOOP_COUNT_OFFSET) & \
341                                 LRADC_DELAY_LOOP_COUNT_MASK)
342 #define LRADC_DELAY_DELAY_MASK                  0x7ff
343 #define LRADC_DELAY_DELAY_OFFSET                0
344 #define LRADC_DELAY_DELAY(x) \
345                                 (((x) << LRADC_DELAY_DELAY_OFFSET) & \
346                                 LRADC_DELAY_DELAY_MASK)
347
348 #define LRADC_CTRL4                             0x140
349 #define LRADC_CTRL4_LRADCSELECT_MASK(n)         (0xf << ((n) * 4))
350 #define LRADC_CTRL4_LRADCSELECT_OFFSET(n)       ((n) * 4)
351 #define LRADC_CTRL4_LRADCSELECT(n, x) \
352                                 (((x) << LRADC_CTRL4_LRADCSELECT_OFFSET(n)) & \
353                                 LRADC_CTRL4_LRADCSELECT_MASK(n))
354
355 #define LRADC_RESOLUTION                        12
356 #define LRADC_SINGLE_SAMPLE_MASK                ((1 << LRADC_RESOLUTION) - 1)
357
358 static void mxs_lradc_reg_set(struct mxs_lradc *lradc, u32 val, u32 reg)
359 {
360         writel(val, lradc->base + reg + STMP_OFFSET_REG_SET);
361 }
362
363 static void mxs_lradc_reg_clear(struct mxs_lradc *lradc, u32 val, u32 reg)
364 {
365         writel(val, lradc->base + reg + STMP_OFFSET_REG_CLR);
366 }
367
368 static void mxs_lradc_reg_wrt(struct mxs_lradc *lradc, u32 val, u32 reg)
369 {
370         writel(val, lradc->base + reg);
371 }
372
373 static u32 mxs_lradc_plate_mask(struct mxs_lradc *lradc)
374 {
375         if (lradc->soc == IMX23_LRADC)
376                 return LRADC_CTRL0_MX23_PLATE_MASK;
377         else
378                 return LRADC_CTRL0_MX28_PLATE_MASK;
379 }
380
381 static u32 mxs_lradc_irq_en_mask(struct mxs_lradc *lradc)
382 {
383         if (lradc->soc == IMX23_LRADC)
384                 return LRADC_CTRL1_MX23_LRADC_IRQ_EN_MASK;
385         else
386                 return LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK;
387 }
388
389 static u32 mxs_lradc_irq_mask(struct mxs_lradc *lradc)
390 {
391         if (lradc->soc == IMX23_LRADC)
392                 return LRADC_CTRL1_MX23_LRADC_IRQ_MASK;
393         else
394                 return LRADC_CTRL1_MX28_LRADC_IRQ_MASK;
395 }
396
397 static u32 mxs_lradc_touch_detect_bit(struct mxs_lradc *lradc)
398 {
399         if (lradc->soc == IMX23_LRADC)
400                 return LRADC_CTRL0_MX23_TOUCH_DETECT_ENABLE;
401         else
402                 return LRADC_CTRL0_MX28_TOUCH_DETECT_ENABLE;
403 }
404
405 static u32 mxs_lradc_drive_x_plate(struct mxs_lradc *lradc)
406 {
407         if (lradc->soc == IMX23_LRADC)
408                 return LRADC_CTRL0_MX23_XP | LRADC_CTRL0_MX23_XM;
409         else
410                 return LRADC_CTRL0_MX28_XPPSW | LRADC_CTRL0_MX28_XNNSW;
411 }
412
413 static u32 mxs_lradc_drive_y_plate(struct mxs_lradc *lradc)
414 {
415         if (lradc->soc == IMX23_LRADC)
416                 return LRADC_CTRL0_MX23_YP | LRADC_CTRL0_MX23_YM;
417         else
418                 return LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_YNNSW;
419 }
420
421 static u32 mxs_lradc_drive_pressure(struct mxs_lradc *lradc)
422 {
423         if (lradc->soc == IMX23_LRADC)
424                 return LRADC_CTRL0_MX23_YP | LRADC_CTRL0_MX23_XM;
425         else
426                 return LRADC_CTRL0_MX28_YPPSW | LRADC_CTRL0_MX28_XNNSW;
427 }
428
429 static bool mxs_lradc_check_touch_event(struct mxs_lradc *lradc)
430 {
431         return !!(readl(lradc->base + LRADC_STATUS) &
432                                         LRADC_STATUS_TOUCH_DETECT_RAW);
433 }
434
435 static void mxs_lradc_map_channel(struct mxs_lradc *lradc, unsigned vch,
436                                   unsigned ch)
437 {
438         mxs_lradc_reg_clear(lradc, LRADC_CTRL4_LRADCSELECT_MASK(vch),
439                                 LRADC_CTRL4);
440         mxs_lradc_reg_set(lradc, LRADC_CTRL4_LRADCSELECT(vch, ch), LRADC_CTRL4);
441 }
442
443 static void mxs_lradc_setup_ts_channel(struct mxs_lradc *lradc, unsigned ch)
444 {
445         /*
446          * prepare for oversampling conversion
447          *
448          * from the datasheet:
449          * "The ACCUMULATE bit in the appropriate channel register
450          * HW_LRADC_CHn must be set to 1 if NUM_SAMPLES is greater then 0;
451          * otherwise, the IRQs will not fire."
452          */
453         mxs_lradc_reg_wrt(lradc, LRADC_CH_ACCUMULATE |
454                         LRADC_CH_NUM_SAMPLES(lradc->over_sample_cnt - 1),
455                         LRADC_CH(ch));
456
457         /* from the datasheet:
458          * "Software must clear this register in preparation for a
459          * multi-cycle accumulation.
460          */
461         mxs_lradc_reg_clear(lradc, LRADC_CH_VALUE_MASK, LRADC_CH(ch));
462
463         /* prepare the delay/loop unit according to the oversampling count */
464         mxs_lradc_reg_wrt(lradc, LRADC_DELAY_TRIGGER(1 << ch) |
465                 LRADC_DELAY_TRIGGER_DELAYS(0) |
466                 LRADC_DELAY_LOOP(lradc->over_sample_cnt - 1) |
467                 LRADC_DELAY_DELAY(lradc->over_sample_delay - 1),
468                         LRADC_DELAY(3));
469
470         mxs_lradc_reg_clear(lradc, LRADC_CTRL1_LRADC_IRQ(ch), LRADC_CTRL1);
471
472         /*
473          * after changing the touchscreen plates setting
474          * the signals need some initial time to settle. Start the
475          * SoC's delay unit and start the conversion later
476          * and automatically.
477          */
478         mxs_lradc_reg_wrt(lradc, LRADC_DELAY_TRIGGER(0) | /* don't trigger ADC */
479                 LRADC_DELAY_TRIGGER_DELAYS(1 << 3) | /* trigger DELAY unit#3 */
480                 LRADC_DELAY_KICK |
481                 LRADC_DELAY_DELAY(lradc->settling_delay),
482                         LRADC_DELAY(2));
483 }
484
485 /*
486  * Pressure detection is special:
487  * We want to do both required measurements for the pressure detection in
488  * one turn. Use the hardware features to chain both conversions and let the
489  * hardware report one interrupt if both conversions are done
490  */
491 static void mxs_lradc_setup_ts_pressure(struct mxs_lradc *lradc, unsigned ch1,
492                                                         unsigned ch2)
493 {
494         u32 reg;
495
496         /*
497          * prepare for oversampling conversion
498          *
499          * from the datasheet:
500          * "The ACCUMULATE bit in the appropriate channel register
501          * HW_LRADC_CHn must be set to 1 if NUM_SAMPLES is greater then 0;
502          * otherwise, the IRQs will not fire."
503          */
504         reg = LRADC_CH_ACCUMULATE |
505                 LRADC_CH_NUM_SAMPLES(lradc->over_sample_cnt - 1);
506         mxs_lradc_reg_wrt(lradc, reg, LRADC_CH(ch1));
507         mxs_lradc_reg_wrt(lradc, reg, LRADC_CH(ch2));
508
509         /* from the datasheet:
510          * "Software must clear this register in preparation for a
511          * multi-cycle accumulation.
512          */
513         mxs_lradc_reg_clear(lradc, LRADC_CH_VALUE_MASK, LRADC_CH(ch1));
514         mxs_lradc_reg_clear(lradc, LRADC_CH_VALUE_MASK, LRADC_CH(ch2));
515
516         /* prepare the delay/loop unit according to the oversampling count */
517         mxs_lradc_reg_wrt(lradc, LRADC_DELAY_TRIGGER(1 << ch1) |
518                 LRADC_DELAY_TRIGGER(1 << ch2) | /* start both channels */
519                 LRADC_DELAY_TRIGGER_DELAYS(0) |
520                 LRADC_DELAY_LOOP(lradc->over_sample_cnt - 1) |
521                 LRADC_DELAY_DELAY(lradc->over_sample_delay - 1),
522                                         LRADC_DELAY(3));
523
524         mxs_lradc_reg_clear(lradc, LRADC_CTRL1_LRADC_IRQ(ch2), LRADC_CTRL1);
525
526         /*
527          * after changing the touchscreen plates setting
528          * the signals need some initial time to settle. Start the
529          * SoC's delay unit and start the conversion later
530          * and automatically.
531          */
532         mxs_lradc_reg_wrt(lradc, LRADC_DELAY_TRIGGER(0) | /* don't trigger ADC */
533                 LRADC_DELAY_TRIGGER_DELAYS(1 << 3) | /* trigger DELAY unit#3 */
534                 LRADC_DELAY_KICK |
535                 LRADC_DELAY_DELAY(lradc->settling_delay), LRADC_DELAY(2));
536 }
537
538 static unsigned mxs_lradc_read_raw_channel(struct mxs_lradc *lradc,
539                                                         unsigned channel)
540 {
541         u32 reg;
542         unsigned num_samples, val;
543
544         reg = readl(lradc->base + LRADC_CH(channel));
545         if (reg & LRADC_CH_ACCUMULATE)
546                 num_samples = lradc->over_sample_cnt;
547         else
548                 num_samples = 1;
549
550         val = (reg & LRADC_CH_VALUE_MASK) >> LRADC_CH_VALUE_OFFSET;
551         return val / num_samples;
552 }
553
554 static unsigned mxs_lradc_read_ts_pressure(struct mxs_lradc *lradc,
555                                                 unsigned ch1, unsigned ch2)
556 {
557         u32 reg, mask;
558         unsigned pressure, m1, m2;
559
560         mask = LRADC_CTRL1_LRADC_IRQ(ch1) | LRADC_CTRL1_LRADC_IRQ(ch2);
561         reg = readl(lradc->base + LRADC_CTRL1) & mask;
562
563         while (reg != mask) {
564                 reg = readl(lradc->base + LRADC_CTRL1) & mask;
565                 dev_dbg(lradc->dev, "One channel is still busy: %X\n", reg);
566         }
567
568         m1 = mxs_lradc_read_raw_channel(lradc, ch1);
569         m2 = mxs_lradc_read_raw_channel(lradc, ch2);
570
571         if (m2 == 0) {
572                 dev_warn(lradc->dev, "Cannot calculate pressure\n");
573                 return 1 << (LRADC_RESOLUTION - 1);
574         }
575
576         /* simply scale the value from 0 ... max ADC resolution */
577         pressure = m1;
578         pressure *= (1 << LRADC_RESOLUTION);
579         pressure /= m2;
580
581         dev_dbg(lradc->dev, "Pressure = %u\n", pressure);
582         return pressure;
583 }
584
585 #define TS_CH_XP 2
586 #define TS_CH_YP 3
587 #define TS_CH_XM 4
588 #define TS_CH_YM 5
589
590 /*
591  * YP(open)--+-------------+
592  *           |             |--+
593  *           |             |  |
594  *    YM(-)--+-------------+  |
595  *             +--------------+
596  *             |              |
597  *         XP(weak+)        XM(open)
598  *
599  * "weak+" means 200k Ohm VDDIO
600  * (-) means GND
601  */
602 static void mxs_lradc_setup_touch_detection(struct mxs_lradc *lradc)
603 {
604         /*
605          * In order to detect a touch event the 'touch detect enable' bit
606          * enables:
607          *  - a weak pullup to the X+ connector
608          *  - a strong ground at the Y- connector
609          */
610         mxs_lradc_reg_clear(lradc, mxs_lradc_plate_mask(lradc), LRADC_CTRL0);
611         mxs_lradc_reg_set(lradc, mxs_lradc_touch_detect_bit(lradc),
612                                 LRADC_CTRL0);
613 }
614
615 /*
616  * YP(meas)--+-------------+
617  *           |             |--+
618  *           |             |  |
619  * YM(open)--+-------------+  |
620  *             +--------------+
621  *             |              |
622  *           XP(+)          XM(-)
623  *
624  * (+) means here 1.85 V
625  * (-) means here GND
626  */
627 static void mxs_lradc_prepare_x_pos(struct mxs_lradc *lradc)
628 {
629         mxs_lradc_reg_clear(lradc, mxs_lradc_plate_mask(lradc), LRADC_CTRL0);
630         mxs_lradc_reg_set(lradc, mxs_lradc_drive_x_plate(lradc), LRADC_CTRL0);
631
632         lradc->cur_plate = LRADC_SAMPLE_X;
633         mxs_lradc_map_channel(lradc, TOUCHSCREEN_VCHANNEL1, TS_CH_YP);
634         mxs_lradc_setup_ts_channel(lradc, TOUCHSCREEN_VCHANNEL1);
635 }
636
637 /*
638  *   YP(+)--+-------------+
639  *          |             |--+
640  *          |             |  |
641  *   YM(-)--+-------------+  |
642  *            +--------------+
643  *            |              |
644  *         XP(open)        XM(meas)
645  *
646  * (+) means here 1.85 V
647  * (-) means here GND
648  */
649 static void mxs_lradc_prepare_y_pos(struct mxs_lradc *lradc)
650 {
651         mxs_lradc_reg_clear(lradc, mxs_lradc_plate_mask(lradc), LRADC_CTRL0);
652         mxs_lradc_reg_set(lradc, mxs_lradc_drive_y_plate(lradc), LRADC_CTRL0);
653
654         lradc->cur_plate = LRADC_SAMPLE_Y;
655         mxs_lradc_map_channel(lradc, TOUCHSCREEN_VCHANNEL1, TS_CH_XM);
656         mxs_lradc_setup_ts_channel(lradc, TOUCHSCREEN_VCHANNEL1);
657 }
658
659 /*
660  *    YP(+)--+-------------+
661  *           |             |--+
662  *           |             |  |
663  * YM(meas)--+-------------+  |
664  *             +--------------+
665  *             |              |
666  *          XP(meas)        XM(-)
667  *
668  * (+) means here 1.85 V
669  * (-) means here GND
670  */
671 static void mxs_lradc_prepare_pressure(struct mxs_lradc *lradc)
672 {
673         mxs_lradc_reg_clear(lradc, mxs_lradc_plate_mask(lradc), LRADC_CTRL0);
674         mxs_lradc_reg_set(lradc, mxs_lradc_drive_pressure(lradc), LRADC_CTRL0);
675
676         lradc->cur_plate = LRADC_SAMPLE_PRESSURE;
677         mxs_lradc_map_channel(lradc, TOUCHSCREEN_VCHANNEL1, TS_CH_YM);
678         mxs_lradc_map_channel(lradc, TOUCHSCREEN_VCHANNEL2, TS_CH_XP);
679         mxs_lradc_setup_ts_pressure(lradc, TOUCHSCREEN_VCHANNEL2,
680                                                 TOUCHSCREEN_VCHANNEL1);
681 }
682
683 static void mxs_lradc_enable_touch_detection(struct mxs_lradc *lradc)
684 {
685         mxs_lradc_setup_touch_detection(lradc);
686
687         lradc->cur_plate = LRADC_TOUCH;
688         mxs_lradc_reg_clear(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ |
689                                 LRADC_CTRL1_TOUCH_DETECT_IRQ_EN, LRADC_CTRL1);
690         mxs_lradc_reg_set(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN, LRADC_CTRL1);
691 }
692
693 static void mxs_lradc_start_touch_event(struct mxs_lradc *lradc)
694 {
695         mxs_lradc_reg_clear(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN,
696                                 LRADC_CTRL1);
697         mxs_lradc_reg_set(lradc,
698                 LRADC_CTRL1_LRADC_IRQ_EN(TOUCHSCREEN_VCHANNEL1), LRADC_CTRL1);
699         /*
700          * start with the Y-pos, because it uses nearly the same plate
701          * settings like the touch detection
702          */
703         mxs_lradc_prepare_y_pos(lradc);
704 }
705
706 static void mxs_lradc_report_ts_event(struct mxs_lradc *lradc)
707 {
708         input_report_abs(lradc->ts_input, ABS_X, lradc->ts_x_pos);
709         input_report_abs(lradc->ts_input, ABS_Y, lradc->ts_y_pos);
710         input_report_abs(lradc->ts_input, ABS_PRESSURE, lradc->ts_pressure);
711         input_report_key(lradc->ts_input, BTN_TOUCH, 1);
712         input_sync(lradc->ts_input);
713 }
714
715 static void mxs_lradc_complete_touch_event(struct mxs_lradc *lradc)
716 {
717         mxs_lradc_setup_touch_detection(lradc);
718         lradc->cur_plate = LRADC_SAMPLE_VALID;
719         /*
720          * start a dummy conversion to burn time to settle the signals
721          * note: we are not interested in the conversion's value
722          */
723         mxs_lradc_reg_wrt(lradc, 0, LRADC_CH(TOUCHSCREEN_VCHANNEL1));
724         mxs_lradc_reg_clear(lradc,
725                 LRADC_CTRL1_LRADC_IRQ(TOUCHSCREEN_VCHANNEL1) |
726                 LRADC_CTRL1_LRADC_IRQ(TOUCHSCREEN_VCHANNEL2), LRADC_CTRL1);
727         mxs_lradc_reg_wrt(lradc,
728                 LRADC_DELAY_TRIGGER(1 << TOUCHSCREEN_VCHANNEL1) |
729                 LRADC_DELAY_KICK | LRADC_DELAY_DELAY(10), /* waste 5 ms */
730                         LRADC_DELAY(2));
731 }
732
733 /*
734  * in order to avoid false measurements, report only samples where
735  * the surface is still touched after the position measurement
736  */
737 static void mxs_lradc_finish_touch_event(struct mxs_lradc *lradc, bool valid)
738 {
739         /* if it is still touched, report the sample */
740         if (valid && mxs_lradc_check_touch_event(lradc)) {
741                 lradc->ts_valid = true;
742                 mxs_lradc_report_ts_event(lradc);
743         }
744
745         /* if it is even still touched, continue with the next measurement */
746         if (mxs_lradc_check_touch_event(lradc)) {
747                 mxs_lradc_prepare_y_pos(lradc);
748                 return;
749         }
750
751         if (lradc->ts_valid) {
752                 /* signal the release */
753                 lradc->ts_valid = false;
754                 input_report_key(lradc->ts_input, BTN_TOUCH, 0);
755                 input_sync(lradc->ts_input);
756         }
757
758         /* if it is released, wait for the next touch via IRQ */
759         lradc->cur_plate = LRADC_TOUCH;
760         mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(2));
761         mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(3));
762         mxs_lradc_reg_clear(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ |
763                 LRADC_CTRL1_LRADC_IRQ_EN(TOUCHSCREEN_VCHANNEL1) |
764                 LRADC_CTRL1_LRADC_IRQ(TOUCHSCREEN_VCHANNEL1), LRADC_CTRL1);
765         mxs_lradc_reg_set(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN, LRADC_CTRL1);
766 }
767
768 /* touchscreen's state machine */
769 static void mxs_lradc_handle_touch(struct mxs_lradc *lradc)
770 {
771         switch (lradc->cur_plate) {
772         case LRADC_TOUCH:
773                 if (mxs_lradc_check_touch_event(lradc))
774                         mxs_lradc_start_touch_event(lradc);
775                 mxs_lradc_reg_clear(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ,
776                                         LRADC_CTRL1);
777                 return;
778
779         case LRADC_SAMPLE_Y:
780                 lradc->ts_y_pos = mxs_lradc_read_raw_channel(lradc,
781                                                         TOUCHSCREEN_VCHANNEL1);
782                 mxs_lradc_prepare_x_pos(lradc);
783                 return;
784
785         case LRADC_SAMPLE_X:
786                 lradc->ts_x_pos = mxs_lradc_read_raw_channel(lradc,
787                                                         TOUCHSCREEN_VCHANNEL1);
788                 mxs_lradc_prepare_pressure(lradc);
789                 return;
790
791         case LRADC_SAMPLE_PRESSURE:
792                 lradc->ts_pressure = mxs_lradc_read_ts_pressure(lradc,
793                                                         TOUCHSCREEN_VCHANNEL2,
794                                                         TOUCHSCREEN_VCHANNEL1);
795                 mxs_lradc_complete_touch_event(lradc);
796                 return;
797
798         case LRADC_SAMPLE_VALID:
799                 mxs_lradc_finish_touch_event(lradc, 1);
800                 break;
801         }
802 }
803
804 /*
805  * Raw I/O operations
806  */
807 static int mxs_lradc_read_single(struct iio_dev *iio_dev, int chan, int *val)
808 {
809         struct mxs_lradc *lradc = iio_priv(iio_dev);
810         int ret;
811
812         /*
813          * See if there is no buffered operation in progess. If there is, simply
814          * bail out. This can be improved to support both buffered and raw IO at
815          * the same time, yet the code becomes horribly complicated. Therefore I
816          * applied KISS principle here.
817          */
818         ret = mutex_trylock(&lradc->lock);
819         if (!ret)
820                 return -EBUSY;
821
822         reinit_completion(&lradc->completion);
823
824         /*
825          * No buffered operation in progress, map the channel and trigger it.
826          * Virtual channel 0 is always used here as the others are always not
827          * used if doing raw sampling.
828          */
829         if (lradc->soc == IMX28_LRADC)
830                 mxs_lradc_reg_clear(lradc, LRADC_CTRL1_LRADC_IRQ_EN(0),
831                         LRADC_CTRL1);
832         mxs_lradc_reg_clear(lradc, 0x1, LRADC_CTRL0);
833
834         /* Enable / disable the divider per requirement */
835         if (test_bit(chan, &lradc->is_divided))
836                 mxs_lradc_reg_set(lradc, 1 << LRADC_CTRL2_DIVIDE_BY_TWO_OFFSET,
837                         LRADC_CTRL2);
838         else
839                 mxs_lradc_reg_clear(lradc,
840                         1 << LRADC_CTRL2_DIVIDE_BY_TWO_OFFSET, LRADC_CTRL2);
841
842         /* Clean the slot's previous content, then set new one. */
843         mxs_lradc_reg_clear(lradc, LRADC_CTRL4_LRADCSELECT_MASK(0),
844                         LRADC_CTRL4);
845         mxs_lradc_reg_set(lradc, chan, LRADC_CTRL4);
846
847         mxs_lradc_reg_wrt(lradc, 0, LRADC_CH(0));
848
849         /* Enable the IRQ and start sampling the channel. */
850         mxs_lradc_reg_set(lradc, LRADC_CTRL1_LRADC_IRQ_EN(0), LRADC_CTRL1);
851         mxs_lradc_reg_set(lradc, 1 << 0, LRADC_CTRL0);
852
853         /* Wait for completion on the channel, 1 second max. */
854         ret = wait_for_completion_killable_timeout(&lradc->completion, HZ);
855         if (!ret)
856                 ret = -ETIMEDOUT;
857         if (ret < 0)
858                 goto err;
859
860         /* Read the data. */
861         *val = readl(lradc->base + LRADC_CH(0)) & LRADC_CH_VALUE_MASK;
862         ret = IIO_VAL_INT;
863
864 err:
865         mxs_lradc_reg_clear(lradc, LRADC_CTRL1_LRADC_IRQ_EN(0), LRADC_CTRL1);
866
867         mutex_unlock(&lradc->lock);
868
869         return ret;
870 }
871
872 static int mxs_lradc_read_temp(struct iio_dev *iio_dev, int *val)
873 {
874         int ret, min, max;
875
876         ret = mxs_lradc_read_single(iio_dev, 8, &min);
877         if (ret != IIO_VAL_INT)
878                 return ret;
879
880         ret = mxs_lradc_read_single(iio_dev, 9, &max);
881         if (ret != IIO_VAL_INT)
882                 return ret;
883
884         *val = max - min;
885
886         return IIO_VAL_INT;
887 }
888
889 static int mxs_lradc_read_raw(struct iio_dev *iio_dev,
890                         const struct iio_chan_spec *chan,
891                         int *val, int *val2, long m)
892 {
893         struct mxs_lradc *lradc = iio_priv(iio_dev);
894
895         switch (m) {
896         case IIO_CHAN_INFO_RAW:
897                 if (chan->type == IIO_TEMP)
898                         return mxs_lradc_read_temp(iio_dev, val);
899
900                 return mxs_lradc_read_single(iio_dev, chan->channel, val);
901
902         case IIO_CHAN_INFO_SCALE:
903                 if (chan->type == IIO_TEMP) {
904                         /* From the datasheet, we have to multiply by 1.012 and
905                          * divide by 4
906                          */
907                         *val = 0;
908                         *val2 = 253000;
909                         return IIO_VAL_INT_PLUS_MICRO;
910                 }
911
912                 *val = lradc->vref_mv[chan->channel];
913                 *val2 = chan->scan_type.realbits -
914                         test_bit(chan->channel, &lradc->is_divided);
915                 return IIO_VAL_FRACTIONAL_LOG2;
916
917         case IIO_CHAN_INFO_OFFSET:
918                 if (chan->type == IIO_TEMP) {
919                         /* The calculated value from the ADC is in Kelvin, we
920                          * want Celsius for hwmon so the offset is -273.15
921                          * The offset is applied before scaling so it is
922                          * actually -213.15 * 4 / 1.012 = -1079.644268
923                          */
924                         *val = -1079;
925                         *val2 = 644268;
926
927                         return IIO_VAL_INT_PLUS_MICRO;
928                 }
929
930                 return -EINVAL;
931
932         default:
933                 break;
934         }
935
936         return -EINVAL;
937 }
938
939 static int mxs_lradc_write_raw(struct iio_dev *iio_dev,
940                                const struct iio_chan_spec *chan,
941                                int val, int val2, long m)
942 {
943         struct mxs_lradc *lradc = iio_priv(iio_dev);
944         struct mxs_lradc_scale *scale_avail =
945                         lradc->scale_avail[chan->channel];
946         int ret;
947
948         ret = mutex_trylock(&lradc->lock);
949         if (!ret)
950                 return -EBUSY;
951
952         switch (m) {
953         case IIO_CHAN_INFO_SCALE:
954                 ret = -EINVAL;
955                 if (val == scale_avail[MXS_LRADC_DIV_DISABLED].integer &&
956                     val2 == scale_avail[MXS_LRADC_DIV_DISABLED].nano) {
957                         /* divider by two disabled */
958                         clear_bit(chan->channel, &lradc->is_divided);
959                         ret = 0;
960                 } else if (val == scale_avail[MXS_LRADC_DIV_ENABLED].integer &&
961                            val2 == scale_avail[MXS_LRADC_DIV_ENABLED].nano) {
962                         /* divider by two enabled */
963                         set_bit(chan->channel, &lradc->is_divided);
964                         ret = 0;
965                 }
966
967                 break;
968         default:
969                 ret = -EINVAL;
970                 break;
971         }
972
973         mutex_unlock(&lradc->lock);
974
975         return ret;
976 }
977
978 static int mxs_lradc_write_raw_get_fmt(struct iio_dev *iio_dev,
979                                        const struct iio_chan_spec *chan,
980                                        long m)
981 {
982         return IIO_VAL_INT_PLUS_NANO;
983 }
984
985 static ssize_t mxs_lradc_show_scale_available_ch(struct device *dev,
986                 struct device_attribute *attr,
987                 char *buf,
988                 int ch)
989 {
990         struct iio_dev *iio = dev_to_iio_dev(dev);
991         struct mxs_lradc *lradc = iio_priv(iio);
992         int i, len = 0;
993
994         for (i = 0; i < ARRAY_SIZE(lradc->scale_avail[ch]); i++)
995                 len += sprintf(buf + len, "%d.%09u ",
996                                lradc->scale_avail[ch][i].integer,
997                                lradc->scale_avail[ch][i].nano);
998
999         len += sprintf(buf + len, "\n");
1000
1001         return len;
1002 }
1003
1004 static ssize_t mxs_lradc_show_scale_available(struct device *dev,
1005                 struct device_attribute *attr,
1006                 char *buf)
1007 {
1008         struct iio_dev_attr *iio_attr = to_iio_dev_attr(attr);
1009
1010         return mxs_lradc_show_scale_available_ch(dev, attr, buf,
1011                                                  iio_attr->address);
1012 }
1013
1014 #define SHOW_SCALE_AVAILABLE_ATTR(ch)                                   \
1015 static IIO_DEVICE_ATTR(in_voltage##ch##_scale_available, S_IRUGO,       \
1016                        mxs_lradc_show_scale_available, NULL, ch)
1017
1018 SHOW_SCALE_AVAILABLE_ATTR(0);
1019 SHOW_SCALE_AVAILABLE_ATTR(1);
1020 SHOW_SCALE_AVAILABLE_ATTR(2);
1021 SHOW_SCALE_AVAILABLE_ATTR(3);
1022 SHOW_SCALE_AVAILABLE_ATTR(4);
1023 SHOW_SCALE_AVAILABLE_ATTR(5);
1024 SHOW_SCALE_AVAILABLE_ATTR(6);
1025 SHOW_SCALE_AVAILABLE_ATTR(7);
1026 SHOW_SCALE_AVAILABLE_ATTR(10);
1027 SHOW_SCALE_AVAILABLE_ATTR(11);
1028 SHOW_SCALE_AVAILABLE_ATTR(12);
1029 SHOW_SCALE_AVAILABLE_ATTR(13);
1030 SHOW_SCALE_AVAILABLE_ATTR(14);
1031 SHOW_SCALE_AVAILABLE_ATTR(15);
1032
1033 static struct attribute *mxs_lradc_attributes[] = {
1034         &iio_dev_attr_in_voltage0_scale_available.dev_attr.attr,
1035         &iio_dev_attr_in_voltage1_scale_available.dev_attr.attr,
1036         &iio_dev_attr_in_voltage2_scale_available.dev_attr.attr,
1037         &iio_dev_attr_in_voltage3_scale_available.dev_attr.attr,
1038         &iio_dev_attr_in_voltage4_scale_available.dev_attr.attr,
1039         &iio_dev_attr_in_voltage5_scale_available.dev_attr.attr,
1040         &iio_dev_attr_in_voltage6_scale_available.dev_attr.attr,
1041         &iio_dev_attr_in_voltage7_scale_available.dev_attr.attr,
1042         &iio_dev_attr_in_voltage10_scale_available.dev_attr.attr,
1043         &iio_dev_attr_in_voltage11_scale_available.dev_attr.attr,
1044         &iio_dev_attr_in_voltage12_scale_available.dev_attr.attr,
1045         &iio_dev_attr_in_voltage13_scale_available.dev_attr.attr,
1046         &iio_dev_attr_in_voltage14_scale_available.dev_attr.attr,
1047         &iio_dev_attr_in_voltage15_scale_available.dev_attr.attr,
1048         NULL
1049 };
1050
1051 static const struct attribute_group mxs_lradc_attribute_group = {
1052         .attrs = mxs_lradc_attributes,
1053 };
1054
1055 static const struct iio_info mxs_lradc_iio_info = {
1056         .driver_module          = THIS_MODULE,
1057         .read_raw               = mxs_lradc_read_raw,
1058         .write_raw              = mxs_lradc_write_raw,
1059         .write_raw_get_fmt      = mxs_lradc_write_raw_get_fmt,
1060         .attrs                  = &mxs_lradc_attribute_group,
1061 };
1062
1063 static int mxs_lradc_ts_open(struct input_dev *dev)
1064 {
1065         struct mxs_lradc *lradc = input_get_drvdata(dev);
1066
1067         /* Enable the touch-detect circuitry. */
1068         mxs_lradc_enable_touch_detection(lradc);
1069
1070         return 0;
1071 }
1072
1073 static void mxs_lradc_disable_ts(struct mxs_lradc *lradc)
1074 {
1075         /* stop all interrupts from firing */
1076         mxs_lradc_reg_clear(lradc, LRADC_CTRL1_TOUCH_DETECT_IRQ_EN |
1077                 LRADC_CTRL1_LRADC_IRQ_EN(TOUCHSCREEN_VCHANNEL1) |
1078                 LRADC_CTRL1_LRADC_IRQ_EN(TOUCHSCREEN_VCHANNEL2), LRADC_CTRL1);
1079
1080         /* Power-down touchscreen touch-detect circuitry. */
1081         mxs_lradc_reg_clear(lradc, mxs_lradc_plate_mask(lradc), LRADC_CTRL0);
1082 }
1083
1084 static void mxs_lradc_ts_close(struct input_dev *dev)
1085 {
1086         struct mxs_lradc *lradc = input_get_drvdata(dev);
1087
1088         mxs_lradc_disable_ts(lradc);
1089 }
1090
1091 static int mxs_lradc_ts_register(struct mxs_lradc *lradc)
1092 {
1093         struct input_dev *input;
1094         struct device *dev = lradc->dev;
1095         int ret;
1096
1097         if (!lradc->use_touchscreen)
1098                 return 0;
1099
1100         input = input_allocate_device();
1101         if (!input)
1102                 return -ENOMEM;
1103
1104         input->name = DRIVER_NAME;
1105         input->id.bustype = BUS_HOST;
1106         input->dev.parent = dev;
1107         input->open = mxs_lradc_ts_open;
1108         input->close = mxs_lradc_ts_close;
1109
1110         __set_bit(EV_ABS, input->evbit);
1111         __set_bit(EV_KEY, input->evbit);
1112         __set_bit(BTN_TOUCH, input->keybit);
1113         input_set_abs_params(input, ABS_X, 0, LRADC_SINGLE_SAMPLE_MASK, 0, 0);
1114         input_set_abs_params(input, ABS_Y, 0, LRADC_SINGLE_SAMPLE_MASK, 0, 0);
1115         input_set_abs_params(input, ABS_PRESSURE, 0, LRADC_SINGLE_SAMPLE_MASK,
1116                              0, 0);
1117
1118         lradc->ts_input = input;
1119         input_set_drvdata(input, lradc);
1120         ret = input_register_device(input);
1121         if (ret)
1122                 input_free_device(lradc->ts_input);
1123
1124         return ret;
1125 }
1126
1127 static void mxs_lradc_ts_unregister(struct mxs_lradc *lradc)
1128 {
1129         if (!lradc->use_touchscreen)
1130                 return;
1131
1132         mxs_lradc_disable_ts(lradc);
1133         input_unregister_device(lradc->ts_input);
1134 }
1135
1136 /*
1137  * IRQ Handling
1138  */
1139 static irqreturn_t mxs_lradc_handle_irq(int irq, void *data)
1140 {
1141         struct iio_dev *iio = data;
1142         struct mxs_lradc *lradc = iio_priv(iio);
1143         unsigned long reg = readl(lradc->base + LRADC_CTRL1);
1144         uint32_t clr_irq = mxs_lradc_irq_mask(lradc);
1145         const uint32_t ts_irq_mask =
1146                 LRADC_CTRL1_TOUCH_DETECT_IRQ |
1147                 LRADC_CTRL1_LRADC_IRQ(TOUCHSCREEN_VCHANNEL1) |
1148                 LRADC_CTRL1_LRADC_IRQ(TOUCHSCREEN_VCHANNEL2);
1149
1150         if (!(reg & mxs_lradc_irq_mask(lradc)))
1151                 return IRQ_NONE;
1152
1153         if (lradc->use_touchscreen && (reg & ts_irq_mask)) {
1154                 mxs_lradc_handle_touch(lradc);
1155
1156                 /* Make sure we don't clear the next conversion's interrupt. */
1157                 clr_irq &= ~(LRADC_CTRL1_LRADC_IRQ(TOUCHSCREEN_VCHANNEL1) |
1158                                 LRADC_CTRL1_LRADC_IRQ(TOUCHSCREEN_VCHANNEL2));
1159         }
1160
1161         if (iio_buffer_enabled(iio)) {
1162                 if (reg & lradc->buffer_vchans)
1163                         iio_trigger_poll(iio->trig, iio_get_time_ns());
1164         } else if (reg & LRADC_CTRL1_LRADC_IRQ(0)) {
1165                 complete(&lradc->completion);
1166         }
1167
1168         mxs_lradc_reg_clear(lradc, reg & clr_irq, LRADC_CTRL1);
1169
1170         return IRQ_HANDLED;
1171 }
1172
1173 /*
1174  * Trigger handling
1175  */
1176 static irqreturn_t mxs_lradc_trigger_handler(int irq, void *p)
1177 {
1178         struct iio_poll_func *pf = p;
1179         struct iio_dev *iio = pf->indio_dev;
1180         struct mxs_lradc *lradc = iio_priv(iio);
1181         const uint32_t chan_value = LRADC_CH_ACCUMULATE |
1182                 ((LRADC_DELAY_TIMER_LOOP - 1) << LRADC_CH_NUM_SAMPLES_OFFSET);
1183         unsigned int i, j = 0;
1184
1185         for_each_set_bit(i, iio->active_scan_mask, LRADC_MAX_TOTAL_CHANS) {
1186                 lradc->buffer[j] = readl(lradc->base + LRADC_CH(j));
1187                 mxs_lradc_reg_wrt(lradc, chan_value, LRADC_CH(j));
1188                 lradc->buffer[j] &= LRADC_CH_VALUE_MASK;
1189                 lradc->buffer[j] /= LRADC_DELAY_TIMER_LOOP;
1190                 j++;
1191         }
1192
1193         iio_push_to_buffers_with_timestamp(iio, lradc->buffer, pf->timestamp);
1194
1195         iio_trigger_notify_done(iio->trig);
1196
1197         return IRQ_HANDLED;
1198 }
1199
1200 static int mxs_lradc_configure_trigger(struct iio_trigger *trig, bool state)
1201 {
1202         struct iio_dev *iio = iio_trigger_get_drvdata(trig);
1203         struct mxs_lradc *lradc = iio_priv(iio);
1204         const uint32_t st = state ? STMP_OFFSET_REG_SET : STMP_OFFSET_REG_CLR;
1205
1206         mxs_lradc_reg_wrt(lradc, LRADC_DELAY_KICK, LRADC_DELAY(0) + st);
1207
1208         return 0;
1209 }
1210
1211 static const struct iio_trigger_ops mxs_lradc_trigger_ops = {
1212         .owner = THIS_MODULE,
1213         .set_trigger_state = &mxs_lradc_configure_trigger,
1214 };
1215
1216 static int mxs_lradc_trigger_init(struct iio_dev *iio)
1217 {
1218         int ret;
1219         struct iio_trigger *trig;
1220         struct mxs_lradc *lradc = iio_priv(iio);
1221
1222         trig = iio_trigger_alloc("%s-dev%i", iio->name, iio->id);
1223         if (trig == NULL)
1224                 return -ENOMEM;
1225
1226         trig->dev.parent = lradc->dev;
1227         iio_trigger_set_drvdata(trig, iio);
1228         trig->ops = &mxs_lradc_trigger_ops;
1229
1230         ret = iio_trigger_register(trig);
1231         if (ret) {
1232                 iio_trigger_free(trig);
1233                 return ret;
1234         }
1235
1236         lradc->trig = trig;
1237
1238         return 0;
1239 }
1240
1241 static void mxs_lradc_trigger_remove(struct iio_dev *iio)
1242 {
1243         struct mxs_lradc *lradc = iio_priv(iio);
1244
1245         iio_trigger_unregister(lradc->trig);
1246         iio_trigger_free(lradc->trig);
1247 }
1248
1249 static int mxs_lradc_buffer_preenable(struct iio_dev *iio)
1250 {
1251         struct mxs_lradc *lradc = iio_priv(iio);
1252         int ret = 0, chan, ofs = 0;
1253         unsigned long enable = 0;
1254         uint32_t ctrl4_set = 0;
1255         uint32_t ctrl4_clr = 0;
1256         uint32_t ctrl1_irq = 0;
1257         const uint32_t chan_value = LRADC_CH_ACCUMULATE |
1258                 ((LRADC_DELAY_TIMER_LOOP - 1) << LRADC_CH_NUM_SAMPLES_OFFSET);
1259         const int len = bitmap_weight(iio->active_scan_mask,
1260                         LRADC_MAX_TOTAL_CHANS);
1261
1262         if (!len)
1263                 return -EINVAL;
1264
1265         /*
1266          * Lock the driver so raw access can not be done during buffered
1267          * operation. This simplifies the code a lot.
1268          */
1269         ret = mutex_trylock(&lradc->lock);
1270         if (!ret)
1271                 return -EBUSY;
1272
1273         lradc->buffer = kmalloc(len * sizeof(*lradc->buffer), GFP_KERNEL);
1274         if (!lradc->buffer) {
1275                 ret = -ENOMEM;
1276                 goto err_mem;
1277         }
1278
1279         if (lradc->soc == IMX28_LRADC)
1280                 mxs_lradc_reg_clear(lradc,
1281                         lradc->buffer_vchans << LRADC_CTRL1_LRADC_IRQ_EN_OFFSET,
1282                         LRADC_CTRL1);
1283         mxs_lradc_reg_clear(lradc, lradc->buffer_vchans, LRADC_CTRL0);
1284
1285         for_each_set_bit(chan, iio->active_scan_mask, LRADC_MAX_TOTAL_CHANS) {
1286                 ctrl4_set |= chan << LRADC_CTRL4_LRADCSELECT_OFFSET(ofs);
1287                 ctrl4_clr |= LRADC_CTRL4_LRADCSELECT_MASK(ofs);
1288                 ctrl1_irq |= LRADC_CTRL1_LRADC_IRQ_EN(ofs);
1289                 mxs_lradc_reg_wrt(lradc, chan_value, LRADC_CH(ofs));
1290                 bitmap_set(&enable, ofs, 1);
1291                 ofs++;
1292         }
1293
1294         mxs_lradc_reg_clear(lradc, LRADC_DELAY_TRIGGER_LRADCS_MASK |
1295                                         LRADC_DELAY_KICK, LRADC_DELAY(0));
1296         mxs_lradc_reg_clear(lradc, ctrl4_clr, LRADC_CTRL4);
1297         mxs_lradc_reg_set(lradc, ctrl4_set, LRADC_CTRL4);
1298         mxs_lradc_reg_set(lradc, ctrl1_irq, LRADC_CTRL1);
1299         mxs_lradc_reg_set(lradc, enable << LRADC_DELAY_TRIGGER_LRADCS_OFFSET,
1300                                         LRADC_DELAY(0));
1301
1302         return 0;
1303
1304 err_mem:
1305         mutex_unlock(&lradc->lock);
1306         return ret;
1307 }
1308
1309 static int mxs_lradc_buffer_postdisable(struct iio_dev *iio)
1310 {
1311         struct mxs_lradc *lradc = iio_priv(iio);
1312
1313         mxs_lradc_reg_clear(lradc, LRADC_DELAY_TRIGGER_LRADCS_MASK |
1314                                         LRADC_DELAY_KICK, LRADC_DELAY(0));
1315
1316         mxs_lradc_reg_clear(lradc, lradc->buffer_vchans, LRADC_CTRL0);
1317         if (lradc->soc == IMX28_LRADC)
1318                 mxs_lradc_reg_clear(lradc,
1319                         lradc->buffer_vchans << LRADC_CTRL1_LRADC_IRQ_EN_OFFSET,
1320                         LRADC_CTRL1);
1321
1322         kfree(lradc->buffer);
1323         mutex_unlock(&lradc->lock);
1324
1325         return 0;
1326 }
1327
1328 static bool mxs_lradc_validate_scan_mask(struct iio_dev *iio,
1329                                         const unsigned long *mask)
1330 {
1331         struct mxs_lradc *lradc = iio_priv(iio);
1332         const int map_chans = bitmap_weight(mask, LRADC_MAX_TOTAL_CHANS);
1333         int rsvd_chans = 0;
1334         unsigned long rsvd_mask = 0;
1335
1336         if (lradc->use_touchbutton)
1337                 rsvd_mask |= CHAN_MASK_TOUCHBUTTON;
1338         if (lradc->use_touchscreen == MXS_LRADC_TOUCHSCREEN_4WIRE)
1339                 rsvd_mask |= CHAN_MASK_TOUCHSCREEN_4WIRE;
1340         if (lradc->use_touchscreen == MXS_LRADC_TOUCHSCREEN_5WIRE)
1341                 rsvd_mask |= CHAN_MASK_TOUCHSCREEN_5WIRE;
1342
1343         if (lradc->use_touchbutton)
1344                 rsvd_chans++;
1345         if (lradc->use_touchscreen)
1346                 rsvd_chans += 2;
1347
1348         /* Test for attempts to map channels with special mode of operation. */
1349         if (bitmap_intersects(mask, &rsvd_mask, LRADC_MAX_TOTAL_CHANS))
1350                 return false;
1351
1352         /* Test for attempts to map more channels then available slots. */
1353         if (map_chans + rsvd_chans > LRADC_MAX_MAPPED_CHANS)
1354                 return false;
1355
1356         return true;
1357 }
1358
1359 static const struct iio_buffer_setup_ops mxs_lradc_buffer_ops = {
1360         .preenable = &mxs_lradc_buffer_preenable,
1361         .postenable = &iio_triggered_buffer_postenable,
1362         .predisable = &iio_triggered_buffer_predisable,
1363         .postdisable = &mxs_lradc_buffer_postdisable,
1364         .validate_scan_mask = &mxs_lradc_validate_scan_mask,
1365 };
1366
1367 /*
1368  * Driver initialization
1369  */
1370
1371 #define MXS_ADC_CHAN(idx, chan_type) {                          \
1372         .type = (chan_type),                                    \
1373         .indexed = 1,                                           \
1374         .scan_index = (idx),                                    \
1375         .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |          \
1376                               BIT(IIO_CHAN_INFO_SCALE),         \
1377         .channel = (idx),                                       \
1378         .address = (idx),                                       \
1379         .scan_type = {                                          \
1380                 .sign = 'u',                                    \
1381                 .realbits = LRADC_RESOLUTION,                   \
1382                 .storagebits = 32,                              \
1383         },                                                      \
1384 }
1385
1386 static const struct iio_chan_spec mxs_lradc_chan_spec[] = {
1387         MXS_ADC_CHAN(0, IIO_VOLTAGE),
1388         MXS_ADC_CHAN(1, IIO_VOLTAGE),
1389         MXS_ADC_CHAN(2, IIO_VOLTAGE),
1390         MXS_ADC_CHAN(3, IIO_VOLTAGE),
1391         MXS_ADC_CHAN(4, IIO_VOLTAGE),
1392         MXS_ADC_CHAN(5, IIO_VOLTAGE),
1393         MXS_ADC_CHAN(6, IIO_VOLTAGE),
1394         MXS_ADC_CHAN(7, IIO_VOLTAGE),   /* VBATT */
1395         /* Combined Temperature sensors */
1396         {
1397                 .type = IIO_TEMP,
1398                 .indexed = 1,
1399                 .scan_index = 8,
1400                 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
1401                                       BIT(IIO_CHAN_INFO_OFFSET) |
1402                                       BIT(IIO_CHAN_INFO_SCALE),
1403                 .channel = 8,
1404                 .scan_type = {.sign = 'u', .realbits = 18, .storagebits = 32,},
1405         },
1406         /* Hidden channel to keep indexes */
1407         {
1408                 .type = IIO_TEMP,
1409                 .indexed = 1,
1410                 .scan_index = -1,
1411                 .channel = 9,
1412         },
1413         MXS_ADC_CHAN(10, IIO_VOLTAGE),  /* VDDIO */
1414         MXS_ADC_CHAN(11, IIO_VOLTAGE),  /* VTH */
1415         MXS_ADC_CHAN(12, IIO_VOLTAGE),  /* VDDA */
1416         MXS_ADC_CHAN(13, IIO_VOLTAGE),  /* VDDD */
1417         MXS_ADC_CHAN(14, IIO_VOLTAGE),  /* VBG */
1418         MXS_ADC_CHAN(15, IIO_VOLTAGE),  /* VDD5V */
1419 };
1420
1421 static int mxs_lradc_hw_init(struct mxs_lradc *lradc)
1422 {
1423         /* The ADC always uses DELAY CHANNEL 0. */
1424         const uint32_t adc_cfg =
1425                 (1 << (LRADC_DELAY_TRIGGER_DELAYS_OFFSET + 0)) |
1426                 (LRADC_DELAY_TIMER_PER << LRADC_DELAY_DELAY_OFFSET);
1427
1428         int ret = stmp_reset_block(lradc->base);
1429         if (ret)
1430                 return ret;
1431
1432         /* Configure DELAY CHANNEL 0 for generic ADC sampling. */
1433         mxs_lradc_reg_wrt(lradc, adc_cfg, LRADC_DELAY(0));
1434
1435         /* Disable remaining DELAY CHANNELs */
1436         mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(1));
1437         mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(2));
1438         mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(3));
1439
1440         /* Configure the touchscreen type */
1441         if (lradc->soc == IMX28_LRADC) {
1442                 mxs_lradc_reg_clear(lradc, LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
1443                                                         LRADC_CTRL0);
1444
1445         if (lradc->use_touchscreen == MXS_LRADC_TOUCHSCREEN_5WIRE)
1446                 mxs_lradc_reg_set(lradc, LRADC_CTRL0_MX28_TOUCH_SCREEN_TYPE,
1447                                 LRADC_CTRL0);
1448         }
1449
1450         /* Start internal temperature sensing. */
1451         mxs_lradc_reg_wrt(lradc, 0, LRADC_CTRL2);
1452
1453         return 0;
1454 }
1455
1456 static void mxs_lradc_hw_stop(struct mxs_lradc *lradc)
1457 {
1458         int i;
1459
1460         mxs_lradc_reg_clear(lradc, mxs_lradc_irq_en_mask(lradc), LRADC_CTRL1);
1461
1462         for (i = 0; i < LRADC_MAX_DELAY_CHANS; i++)
1463                 mxs_lradc_reg_wrt(lradc, 0, LRADC_DELAY(i));
1464 }
1465
1466 static const struct of_device_id mxs_lradc_dt_ids[] = {
1467         { .compatible = "fsl,imx23-lradc", .data = (void *)IMX23_LRADC, },
1468         { .compatible = "fsl,imx28-lradc", .data = (void *)IMX28_LRADC, },
1469         { /* sentinel */ }
1470 };
1471 MODULE_DEVICE_TABLE(of, mxs_lradc_dt_ids);
1472
1473 static int mxs_lradc_probe_touchscreen(struct mxs_lradc *lradc,
1474                                                 struct device_node *lradc_node)
1475 {
1476         int ret;
1477         u32 ts_wires = 0, adapt;
1478
1479         ret = of_property_read_u32(lradc_node, "fsl,lradc-touchscreen-wires",
1480                                 &ts_wires);
1481         if (ret)
1482                 return -ENODEV; /* touchscreen feature disabled */
1483
1484         switch (ts_wires) {
1485         case 4:
1486                 lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_4WIRE;
1487                 break;
1488         case 5:
1489                 if (lradc->soc == IMX28_LRADC) {
1490                         lradc->use_touchscreen = MXS_LRADC_TOUCHSCREEN_5WIRE;
1491                         break;
1492                 }
1493                 /* fall through an error message for i.MX23 */
1494         default:
1495                 dev_err(lradc->dev,
1496                         "Unsupported number of touchscreen wires (%d)\n",
1497                         ts_wires);
1498                 return -EINVAL;
1499         }
1500
1501         lradc->over_sample_cnt = 4;
1502         ret = of_property_read_u32(lradc_node, "fsl,ave-ctrl", &adapt);
1503         if (ret == 0)
1504                 lradc->over_sample_cnt = adapt;
1505
1506         lradc->over_sample_delay = 2;
1507         ret = of_property_read_u32(lradc_node, "fsl,ave-delay", &adapt);
1508         if (ret == 0)
1509                 lradc->over_sample_delay = adapt;
1510
1511         lradc->settling_delay = 10;
1512         ret = of_property_read_u32(lradc_node, "fsl,settling", &adapt);
1513         if (ret == 0)
1514                 lradc->settling_delay = adapt;
1515
1516         return 0;
1517 }
1518
1519 static int mxs_lradc_probe(struct platform_device *pdev)
1520 {
1521         const struct of_device_id *of_id =
1522                 of_match_device(mxs_lradc_dt_ids, &pdev->dev);
1523         const struct mxs_lradc_of_config *of_cfg =
1524                 &mxs_lradc_of_config[(enum mxs_lradc_id)of_id->data];
1525         struct device *dev = &pdev->dev;
1526         struct device_node *node = dev->of_node;
1527         struct mxs_lradc *lradc;
1528         struct iio_dev *iio;
1529         struct resource *iores;
1530         int ret = 0, touch_ret;
1531         int i, s;
1532         uint64_t scale_uv;
1533
1534         /* Allocate the IIO device. */
1535         iio = devm_iio_device_alloc(dev, sizeof(*lradc));
1536         if (!iio) {
1537                 dev_err(dev, "Failed to allocate IIO device\n");
1538                 return -ENOMEM;
1539         }
1540
1541         lradc = iio_priv(iio);
1542         lradc->soc = (enum mxs_lradc_id)of_id->data;
1543
1544         /* Grab the memory area */
1545         iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1546         lradc->dev = &pdev->dev;
1547         lradc->base = devm_ioremap_resource(dev, iores);
1548         if (IS_ERR(lradc->base))
1549                 return PTR_ERR(lradc->base);
1550
1551         lradc->clk = devm_clk_get(&pdev->dev, NULL);
1552         if (IS_ERR(lradc->clk)) {
1553                 dev_err(dev, "Failed to get the delay unit clock\n");
1554                 return PTR_ERR(lradc->clk);
1555         }
1556         ret = clk_prepare_enable(lradc->clk);
1557         if (ret != 0) {
1558                 dev_err(dev, "Failed to enable the delay unit clock\n");
1559                 return ret;
1560         }
1561
1562         touch_ret = mxs_lradc_probe_touchscreen(lradc, node);
1563
1564         if (touch_ret == 0)
1565                 lradc->buffer_vchans = BUFFER_VCHANS_LIMITED;
1566         else
1567                 lradc->buffer_vchans = BUFFER_VCHANS_ALL;
1568
1569         /* Grab all IRQ sources */
1570         for (i = 0; i < of_cfg->irq_count; i++) {
1571                 lradc->irq[i] = platform_get_irq(pdev, i);
1572                 if (lradc->irq[i] < 0) {
1573                         ret = lradc->irq[i];
1574                         goto err_clk;
1575                 }
1576
1577                 ret = devm_request_irq(dev, lradc->irq[i],
1578                                         mxs_lradc_handle_irq, 0,
1579                                         of_cfg->irq_name[i], iio);
1580                 if (ret)
1581                         goto err_clk;
1582         }
1583
1584         lradc->vref_mv = of_cfg->vref_mv;
1585
1586         platform_set_drvdata(pdev, iio);
1587
1588         init_completion(&lradc->completion);
1589         mutex_init(&lradc->lock);
1590
1591         iio->name = pdev->name;
1592         iio->dev.parent = &pdev->dev;
1593         iio->info = &mxs_lradc_iio_info;
1594         iio->modes = INDIO_DIRECT_MODE;
1595         iio->channels = mxs_lradc_chan_spec;
1596         iio->num_channels = ARRAY_SIZE(mxs_lradc_chan_spec);
1597         iio->masklength = LRADC_MAX_TOTAL_CHANS;
1598
1599         ret = iio_triggered_buffer_setup(iio, &iio_pollfunc_store_time,
1600                                 &mxs_lradc_trigger_handler,
1601                                 &mxs_lradc_buffer_ops);
1602         if (ret)
1603                 goto err_clk;
1604
1605         ret = mxs_lradc_trigger_init(iio);
1606         if (ret)
1607                 goto err_trig;
1608
1609         /* Populate available ADC input ranges */
1610         for (i = 0; i < LRADC_MAX_TOTAL_CHANS; i++) {
1611                 for (s = 0; s < ARRAY_SIZE(lradc->scale_avail[i]); s++) {
1612                         /*
1613                          * [s=0] = optional divider by two disabled (default)
1614                          * [s=1] = optional divider by two enabled
1615                          *
1616                          * The scale is calculated by doing:
1617                          *   Vref >> (realbits - s)
1618                          * which multiplies by two on the second component
1619                          * of the array.
1620                          */
1621                         scale_uv = ((u64)lradc->vref_mv[i] * 100000000) >>
1622                                    (LRADC_RESOLUTION - s);
1623                         lradc->scale_avail[i][s].nano =
1624                                         do_div(scale_uv, 100000000) * 10;
1625                         lradc->scale_avail[i][s].integer = scale_uv;
1626                 }
1627         }
1628
1629         /* Configure the hardware. */
1630         ret = mxs_lradc_hw_init(lradc);
1631         if (ret)
1632                 goto err_dev;
1633
1634         /* Register the touchscreen input device. */
1635         if (touch_ret == 0) {
1636                 ret = mxs_lradc_ts_register(lradc);
1637                 if (ret)
1638                         goto err_ts_register;
1639         }
1640
1641         /* Register IIO device. */
1642         ret = iio_device_register(iio);
1643         if (ret) {
1644                 dev_err(dev, "Failed to register IIO device\n");
1645                 goto err_ts;
1646         }
1647
1648         return 0;
1649
1650 err_ts:
1651         mxs_lradc_ts_unregister(lradc);
1652 err_ts_register:
1653         mxs_lradc_hw_stop(lradc);
1654 err_dev:
1655         mxs_lradc_trigger_remove(iio);
1656 err_trig:
1657         iio_triggered_buffer_cleanup(iio);
1658 err_clk:
1659         clk_disable_unprepare(lradc->clk);
1660         return ret;
1661 }
1662
1663 static int mxs_lradc_remove(struct platform_device *pdev)
1664 {
1665         struct iio_dev *iio = platform_get_drvdata(pdev);
1666         struct mxs_lradc *lradc = iio_priv(iio);
1667
1668         iio_device_unregister(iio);
1669         mxs_lradc_ts_unregister(lradc);
1670         mxs_lradc_hw_stop(lradc);
1671         mxs_lradc_trigger_remove(iio);
1672         iio_triggered_buffer_cleanup(iio);
1673
1674         clk_disable_unprepare(lradc->clk);
1675         return 0;
1676 }
1677
1678 static struct platform_driver mxs_lradc_driver = {
1679         .driver = {
1680                 .name   = DRIVER_NAME,
1681                 .owner  = THIS_MODULE,
1682                 .of_match_table = mxs_lradc_dt_ids,
1683         },
1684         .probe  = mxs_lradc_probe,
1685         .remove = mxs_lradc_remove,
1686 };
1687
1688 module_platform_driver(mxs_lradc_driver);
1689
1690 MODULE_AUTHOR("Marek Vasut <marex@denx.de>");
1691 MODULE_DESCRIPTION("Freescale i.MX28 LRADC driver");
1692 MODULE_LICENSE("GPL v2");
1693 MODULE_ALIAS("platform:" DRIVER_NAME);