Merge tag 'nfs-for-6.10-3' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
[linux-2.6-block.git] / drivers / iio / adc / twl4030-madc.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  *
4  * TWL4030 MADC module driver-This driver monitors the real time
5  * conversion of analog signals like battery temperature,
6  * battery type, battery level etc.
7  *
8  * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
9  * J Keerthy <j-keerthy@ti.com>
10  *
11  * Based on twl4030-madc.c
12  * Copyright (C) 2008 Nokia Corporation
13  * Mikko Ylinen <mikko.k.ylinen@nokia.com>
14  *
15  * Amit Kucheria <amit.kucheria@canonical.com>
16  */
17
18 #include <linux/device.h>
19 #include <linux/interrupt.h>
20 #include <linux/kernel.h>
21 #include <linux/delay.h>
22 #include <linux/mod_devicetable.h>
23 #include <linux/module.h>
24 #include <linux/platform_device.h>
25 #include <linux/property.h>
26 #include <linux/slab.h>
27 #include <linux/mfd/twl.h>
28 #include <linux/stddef.h>
29 #include <linux/mutex.h>
30 #include <linux/bitops.h>
31 #include <linux/jiffies.h>
32 #include <linux/types.h>
33 #include <linux/gfp.h>
34 #include <linux/err.h>
35 #include <linux/regulator/consumer.h>
36
37 #include <linux/iio/iio.h>
38
39 #define TWL4030_MADC_MAX_CHANNELS 16
40
41 #define TWL4030_MADC_CTRL1              0x00
42 #define TWL4030_MADC_CTRL2              0x01
43
44 #define TWL4030_MADC_RTSELECT_LSB       0x02
45 #define TWL4030_MADC_SW1SELECT_LSB      0x06
46 #define TWL4030_MADC_SW2SELECT_LSB      0x0A
47
48 #define TWL4030_MADC_RTAVERAGE_LSB      0x04
49 #define TWL4030_MADC_SW1AVERAGE_LSB     0x08
50 #define TWL4030_MADC_SW2AVERAGE_LSB     0x0C
51
52 #define TWL4030_MADC_CTRL_SW1           0x12
53 #define TWL4030_MADC_CTRL_SW2           0x13
54
55 #define TWL4030_MADC_RTCH0_LSB          0x17
56 #define TWL4030_MADC_GPCH0_LSB          0x37
57
58 #define TWL4030_MADC_MADCON     (1 << 0)        /* MADC power on */
59 #define TWL4030_MADC_BUSY       (1 << 0)        /* MADC busy */
60 /* MADC conversion completion */
61 #define TWL4030_MADC_EOC_SW     (1 << 1)
62 /* MADC SWx start conversion */
63 #define TWL4030_MADC_SW_START   (1 << 5)
64 #define TWL4030_MADC_ADCIN0     (1 << 0)
65 #define TWL4030_MADC_ADCIN1     (1 << 1)
66 #define TWL4030_MADC_ADCIN2     (1 << 2)
67 #define TWL4030_MADC_ADCIN3     (1 << 3)
68 #define TWL4030_MADC_ADCIN4     (1 << 4)
69 #define TWL4030_MADC_ADCIN5     (1 << 5)
70 #define TWL4030_MADC_ADCIN6     (1 << 6)
71 #define TWL4030_MADC_ADCIN7     (1 << 7)
72 #define TWL4030_MADC_ADCIN8     (1 << 8)
73 #define TWL4030_MADC_ADCIN9     (1 << 9)
74 #define TWL4030_MADC_ADCIN10    (1 << 10)
75 #define TWL4030_MADC_ADCIN11    (1 << 11)
76 #define TWL4030_MADC_ADCIN12    (1 << 12)
77 #define TWL4030_MADC_ADCIN13    (1 << 13)
78 #define TWL4030_MADC_ADCIN14    (1 << 14)
79 #define TWL4030_MADC_ADCIN15    (1 << 15)
80
81 /* Fixed channels */
82 #define TWL4030_MADC_BTEMP      TWL4030_MADC_ADCIN1
83 #define TWL4030_MADC_VBUS       TWL4030_MADC_ADCIN8
84 #define TWL4030_MADC_VBKB       TWL4030_MADC_ADCIN9
85 #define TWL4030_MADC_ICHG       TWL4030_MADC_ADCIN10
86 #define TWL4030_MADC_VCHG       TWL4030_MADC_ADCIN11
87 #define TWL4030_MADC_VBAT       TWL4030_MADC_ADCIN12
88
89 /* Step size and prescaler ratio */
90 #define TEMP_STEP_SIZE          147
91 #define TEMP_PSR_R              100
92 #define CURR_STEP_SIZE          147
93 #define CURR_PSR_R1             44
94 #define CURR_PSR_R2             88
95
96 #define TWL4030_BCI_BCICTL1     0x23
97 #define TWL4030_BCI_CGAIN       0x020
98 #define TWL4030_BCI_MESBAT      (1 << 1)
99 #define TWL4030_BCI_TYPEN       (1 << 4)
100 #define TWL4030_BCI_ITHEN       (1 << 3)
101
102 #define REG_BCICTL2             0x024
103 #define TWL4030_BCI_ITHSENS     0x007
104
105 /* Register and bits for GPBR1 register */
106 #define TWL4030_REG_GPBR1               0x0c
107 #define TWL4030_GPBR1_MADC_HFCLK_EN     (1 << 7)
108
109 #define TWL4030_USB_SEL_MADC_MCPC       (1<<3)
110 #define TWL4030_USB_CARKIT_ANA_CTRL     0xBB
111
112 struct twl4030_madc_conversion_method {
113         u8 sel;
114         u8 avg;
115         u8 rbase;
116         u8 ctrl;
117 };
118
119 /**
120  * struct twl4030_madc_request - madc request packet for channel conversion
121  * @channels:   16 bit bitmap for individual channels
122  * @do_avg:     sample the input channel for 4 consecutive cycles
123  * @method:     RT, SW1, SW2
124  * @type:       Polling or interrupt based method
125  * @active:     Flag if request is active
126  * @result_pending: Flag from irq handler, that result is ready
127  * @raw:        Return raw value, do not convert it
128  * @rbuf:       Result buffer
129  */
130 struct twl4030_madc_request {
131         unsigned long channels;
132         bool do_avg;
133         u16 method;
134         u16 type;
135         bool active;
136         bool result_pending;
137         bool raw;
138         int rbuf[TWL4030_MADC_MAX_CHANNELS];
139 };
140
141 enum conversion_methods {
142         TWL4030_MADC_RT,
143         TWL4030_MADC_SW1,
144         TWL4030_MADC_SW2,
145         TWL4030_MADC_NUM_METHODS
146 };
147
148 enum sample_type {
149         TWL4030_MADC_WAIT,
150         TWL4030_MADC_IRQ_ONESHOT,
151         TWL4030_MADC_IRQ_REARM
152 };
153
154 /**
155  * struct twl4030_madc_data - a container for madc info
156  * @dev:                Pointer to device structure for madc
157  * @lock:               Mutex protecting this data structure
158  * @usb3v1:             Pointer to bias regulator for madc
159  * @requests:           Array of request struct corresponding to SW1, SW2 and RT
160  * @use_second_irq:     IRQ selection (main or co-processor)
161  * @imr:                Interrupt mask register of MADC
162  * @isr:                Interrupt status register of MADC
163  */
164 struct twl4030_madc_data {
165         struct device *dev;
166         struct mutex lock;
167         struct regulator *usb3v1;
168         struct twl4030_madc_request requests[TWL4030_MADC_NUM_METHODS];
169         bool use_second_irq;
170         u8 imr;
171         u8 isr;
172 };
173
174 static int twl4030_madc_conversion(struct twl4030_madc_request *req);
175
176 static int twl4030_madc_read(struct iio_dev *iio_dev,
177                              const struct iio_chan_spec *chan,
178                              int *val, int *val2, long mask)
179 {
180         struct twl4030_madc_data *madc = iio_priv(iio_dev);
181         struct twl4030_madc_request req;
182         int ret;
183
184         req.method = madc->use_second_irq ? TWL4030_MADC_SW2 : TWL4030_MADC_SW1;
185
186         req.channels = BIT(chan->channel);
187         req.active = false;
188         req.type = TWL4030_MADC_WAIT;
189         req.raw = !(mask == IIO_CHAN_INFO_PROCESSED);
190         req.do_avg = (mask == IIO_CHAN_INFO_AVERAGE_RAW);
191
192         ret = twl4030_madc_conversion(&req);
193         if (ret < 0)
194                 return ret;
195
196         *val = req.rbuf[chan->channel];
197
198         return IIO_VAL_INT;
199 }
200
201 static const struct iio_info twl4030_madc_iio_info = {
202         .read_raw = &twl4030_madc_read,
203 };
204
205 #define TWL4030_ADC_CHANNEL(_channel, _type, _name) {   \
206         .type = _type,                                  \
207         .channel = _channel,                            \
208         .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |  \
209                               BIT(IIO_CHAN_INFO_AVERAGE_RAW) | \
210                               BIT(IIO_CHAN_INFO_PROCESSED), \
211         .datasheet_name = _name,                        \
212         .indexed = 1,                                   \
213 }
214
215 static const struct iio_chan_spec twl4030_madc_iio_channels[] = {
216         TWL4030_ADC_CHANNEL(0, IIO_VOLTAGE, "ADCIN0"),
217         TWL4030_ADC_CHANNEL(1, IIO_TEMP, "ADCIN1"),
218         TWL4030_ADC_CHANNEL(2, IIO_VOLTAGE, "ADCIN2"),
219         TWL4030_ADC_CHANNEL(3, IIO_VOLTAGE, "ADCIN3"),
220         TWL4030_ADC_CHANNEL(4, IIO_VOLTAGE, "ADCIN4"),
221         TWL4030_ADC_CHANNEL(5, IIO_VOLTAGE, "ADCIN5"),
222         TWL4030_ADC_CHANNEL(6, IIO_VOLTAGE, "ADCIN6"),
223         TWL4030_ADC_CHANNEL(7, IIO_VOLTAGE, "ADCIN7"),
224         TWL4030_ADC_CHANNEL(8, IIO_VOLTAGE, "ADCIN8"),
225         TWL4030_ADC_CHANNEL(9, IIO_VOLTAGE, "ADCIN9"),
226         TWL4030_ADC_CHANNEL(10, IIO_CURRENT, "ADCIN10"),
227         TWL4030_ADC_CHANNEL(11, IIO_VOLTAGE, "ADCIN11"),
228         TWL4030_ADC_CHANNEL(12, IIO_VOLTAGE, "ADCIN12"),
229         TWL4030_ADC_CHANNEL(13, IIO_VOLTAGE, "ADCIN13"),
230         TWL4030_ADC_CHANNEL(14, IIO_VOLTAGE, "ADCIN14"),
231         TWL4030_ADC_CHANNEL(15, IIO_VOLTAGE, "ADCIN15"),
232 };
233
234 static struct twl4030_madc_data *twl4030_madc;
235
236 static const struct s16_fract twl4030_divider_ratios[16] = {
237         {1, 1},         /* CHANNEL 0 No Prescaler */
238         {1, 1},         /* CHANNEL 1 No Prescaler */
239         {6, 10},        /* CHANNEL 2 */
240         {6, 10},        /* CHANNEL 3 */
241         {6, 10},        /* CHANNEL 4 */
242         {6, 10},        /* CHANNEL 5 */
243         {6, 10},        /* CHANNEL 6 */
244         {6, 10},        /* CHANNEL 7 */
245         {3, 14},        /* CHANNEL 8 */
246         {1, 3},         /* CHANNEL 9 */
247         {1, 1},         /* CHANNEL 10 No Prescaler */
248         {15, 100},      /* CHANNEL 11 */
249         {1, 4},         /* CHANNEL 12 */
250         {1, 1},         /* CHANNEL 13 Reserved channels */
251         {1, 1},         /* CHANNEL 14 Reseved channels */
252         {5, 11},        /* CHANNEL 15 */
253 };
254
255 /* Conversion table from -3 to 55 degrees Celcius */
256 static int twl4030_therm_tbl[] = {
257         30800,  29500,  28300,  27100,
258         26000,  24900,  23900,  22900,  22000,  21100,  20300,  19400,  18700,
259         17900,  17200,  16500,  15900,  15300,  14700,  14100,  13600,  13100,
260         12600,  12100,  11600,  11200,  10800,  10400,  10000,  9630,   9280,
261         8950,   8620,   8310,   8020,   7730,   7460,   7200,   6950,   6710,
262         6470,   6250,   6040,   5830,   5640,   5450,   5260,   5090,   4920,
263         4760,   4600,   4450,   4310,   4170,   4040,   3910,   3790,   3670,
264         3550
265 };
266
267 /*
268  * Structure containing the registers
269  * of different conversion methods supported by MADC.
270  * Hardware or RT real time conversion request initiated by external host
271  * processor for RT Signal conversions.
272  * External host processors can also request for non RT conversions
273  * SW1 and SW2 software conversions also called asynchronous or GPC request.
274  */
275 static
276 const struct twl4030_madc_conversion_method twl4030_conversion_methods[] = {
277         [TWL4030_MADC_RT] = {
278                              .sel = TWL4030_MADC_RTSELECT_LSB,
279                              .avg = TWL4030_MADC_RTAVERAGE_LSB,
280                              .rbase = TWL4030_MADC_RTCH0_LSB,
281                              },
282         [TWL4030_MADC_SW1] = {
283                               .sel = TWL4030_MADC_SW1SELECT_LSB,
284                               .avg = TWL4030_MADC_SW1AVERAGE_LSB,
285                               .rbase = TWL4030_MADC_GPCH0_LSB,
286                               .ctrl = TWL4030_MADC_CTRL_SW1,
287                               },
288         [TWL4030_MADC_SW2] = {
289                               .sel = TWL4030_MADC_SW2SELECT_LSB,
290                               .avg = TWL4030_MADC_SW2AVERAGE_LSB,
291                               .rbase = TWL4030_MADC_GPCH0_LSB,
292                               .ctrl = TWL4030_MADC_CTRL_SW2,
293                               },
294 };
295
296 /**
297  * twl4030_madc_channel_raw_read() - Function to read a particular channel value
298  * @madc:       pointer to struct twl4030_madc_data
299  * @reg:        lsb of ADC Channel
300  *
301  * Return: 0 on success, an error code otherwise.
302  */
303 static int twl4030_madc_channel_raw_read(struct twl4030_madc_data *madc, u8 reg)
304 {
305         u16 val;
306         int ret;
307         /*
308          * For each ADC channel, we have MSB and LSB register pair. MSB address
309          * is always LSB address+1. reg parameter is the address of LSB register
310          */
311         ret = twl_i2c_read_u16(TWL4030_MODULE_MADC, &val, reg);
312         if (ret) {
313                 dev_err(madc->dev, "unable to read register 0x%X\n", reg);
314                 return ret;
315         }
316
317         return (int)(val >> 6);
318 }
319
320 /*
321  * Return battery temperature in degrees Celsius
322  * Or < 0 on failure.
323  */
324 static int twl4030battery_temperature(int raw_volt)
325 {
326         u8 val;
327         int temp, curr, volt, res, ret;
328
329         volt = (raw_volt * TEMP_STEP_SIZE) / TEMP_PSR_R;
330         /* Getting and calculating the supply current in micro amperes */
331         ret = twl_i2c_read_u8(TWL_MODULE_MAIN_CHARGE, &val,
332                 REG_BCICTL2);
333         if (ret < 0)
334                 return ret;
335
336         curr = ((val & TWL4030_BCI_ITHSENS) + 1) * 10;
337         /* Getting and calculating the thermistor resistance in ohms */
338         res = volt * 1000 / curr;
339         /* calculating temperature */
340         for (temp = 58; temp >= 0; temp--) {
341                 int actual = twl4030_therm_tbl[temp];
342                 if ((actual - res) >= 0)
343                         break;
344         }
345
346         return temp + 1;
347 }
348
349 static int twl4030battery_current(int raw_volt)
350 {
351         int ret;
352         u8 val;
353
354         ret = twl_i2c_read_u8(TWL_MODULE_MAIN_CHARGE, &val,
355                 TWL4030_BCI_BCICTL1);
356         if (ret)
357                 return ret;
358         if (val & TWL4030_BCI_CGAIN) /* slope of 0.44 mV/mA */
359                 return (raw_volt * CURR_STEP_SIZE) / CURR_PSR_R1;
360         else /* slope of 0.88 mV/mA */
361                 return (raw_volt * CURR_STEP_SIZE) / CURR_PSR_R2;
362 }
363
364 /*
365  * Function to read channel values
366  * @madc - pointer to twl4030_madc_data struct
367  * @reg_base - Base address of the first channel
368  * @Channels - 16 bit bitmap. If the bit is set, channel's value is read
369  * @buf - The channel values are stored here. if read fails error
370  * @raw - Return raw values without conversion
371  * value is stored
372  * Returns the number of successfully read channels.
373  */
374 static int twl4030_madc_read_channels(struct twl4030_madc_data *madc,
375                                       u8 reg_base, unsigned
376                                       long channels, int *buf,
377                                       bool raw)
378 {
379         int count = 0;
380         int i;
381         u8 reg;
382
383         for_each_set_bit(i, &channels, TWL4030_MADC_MAX_CHANNELS) {
384                 reg = reg_base + (2 * i);
385                 buf[i] = twl4030_madc_channel_raw_read(madc, reg);
386                 if (buf[i] < 0) {
387                         dev_err(madc->dev, "Unable to read register 0x%X\n",
388                                 reg);
389                         return buf[i];
390                 }
391                 if (raw) {
392                         count++;
393                         continue;
394                 }
395                 switch (i) {
396                 case 10:
397                         buf[i] = twl4030battery_current(buf[i]);
398                         if (buf[i] < 0) {
399                                 dev_err(madc->dev, "err reading current\n");
400                                 return buf[i];
401                         } else {
402                                 count++;
403                                 buf[i] = buf[i] - 750;
404                         }
405                         break;
406                 case 1:
407                         buf[i] = twl4030battery_temperature(buf[i]);
408                         if (buf[i] < 0) {
409                                 dev_err(madc->dev, "err reading temperature\n");
410                                 return buf[i];
411                         } else {
412                                 buf[i] -= 3;
413                                 count++;
414                         }
415                         break;
416                 default:
417                         count++;
418                         /* Analog Input (V) = conv_result * step_size / R
419                          * conv_result = decimal value of 10-bit conversion
420                          *               result
421                          * step size = 1.5 / (2 ^ 10 -1)
422                          * R = Prescaler ratio for input channels.
423                          * Result given in mV hence multiplied by 1000.
424                          */
425                         buf[i] = (buf[i] * 3 * 1000 *
426                                  twl4030_divider_ratios[i].denominator)
427                                 / (2 * 1023 *
428                                 twl4030_divider_ratios[i].numerator);
429                 }
430         }
431
432         return count;
433 }
434
435 /*
436  * Disables irq.
437  * @madc - pointer to twl4030_madc_data struct
438  * @id - irq number to be disabled
439  * can take one of TWL4030_MADC_RT, TWL4030_MADC_SW1, TWL4030_MADC_SW2
440  * corresponding to RT, SW1, SW2 conversion requests.
441  * Returns error if i2c read/write fails.
442  */
443 static int twl4030_madc_disable_irq(struct twl4030_madc_data *madc, u8 id)
444 {
445         u8 val;
446         int ret;
447
448         ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &val, madc->imr);
449         if (ret) {
450                 dev_err(madc->dev, "unable to read imr register 0x%X\n",
451                         madc->imr);
452                 return ret;
453         }
454         val |= (1 << id);
455         ret = twl_i2c_write_u8(TWL4030_MODULE_MADC, val, madc->imr);
456         if (ret) {
457                 dev_err(madc->dev,
458                         "unable to write imr register 0x%X\n", madc->imr);
459                 return ret;
460         }
461
462         return 0;
463 }
464
465 static irqreturn_t twl4030_madc_threaded_irq_handler(int irq, void *_madc)
466 {
467         struct twl4030_madc_data *madc = _madc;
468         const struct twl4030_madc_conversion_method *method;
469         u8 isr_val, imr_val;
470         int i, ret;
471         struct twl4030_madc_request *r;
472
473         mutex_lock(&madc->lock);
474         ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &isr_val, madc->isr);
475         if (ret) {
476                 dev_err(madc->dev, "unable to read isr register 0x%X\n",
477                         madc->isr);
478                 goto err_i2c;
479         }
480         ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &imr_val, madc->imr);
481         if (ret) {
482                 dev_err(madc->dev, "unable to read imr register 0x%X\n",
483                         madc->imr);
484                 goto err_i2c;
485         }
486         isr_val &= ~imr_val;
487         for (i = 0; i < TWL4030_MADC_NUM_METHODS; i++) {
488                 if (!(isr_val & (1 << i)))
489                         continue;
490                 ret = twl4030_madc_disable_irq(madc, i);
491                 if (ret < 0)
492                         dev_dbg(madc->dev, "Disable interrupt failed %d\n", i);
493                 madc->requests[i].result_pending = true;
494         }
495         for (i = 0; i < TWL4030_MADC_NUM_METHODS; i++) {
496                 r = &madc->requests[i];
497                 /* No pending results for this method, move to next one */
498                 if (!r->result_pending)
499                         continue;
500                 method = &twl4030_conversion_methods[r->method];
501                 /* Read results */
502                 twl4030_madc_read_channels(madc, method->rbase,
503                                            r->channels, r->rbuf, r->raw);
504                 /* Free request */
505                 r->result_pending = false;
506                 r->active = false;
507         }
508         mutex_unlock(&madc->lock);
509
510         return IRQ_HANDLED;
511
512 err_i2c:
513         /*
514          * In case of error check whichever request is active
515          * and service the same.
516          */
517         for (i = 0; i < TWL4030_MADC_NUM_METHODS; i++) {
518                 r = &madc->requests[i];
519                 if (!r->active)
520                         continue;
521                 method = &twl4030_conversion_methods[r->method];
522                 /* Read results */
523                 twl4030_madc_read_channels(madc, method->rbase,
524                                            r->channels, r->rbuf, r->raw);
525                 /* Free request */
526                 r->result_pending = false;
527                 r->active = false;
528         }
529         mutex_unlock(&madc->lock);
530
531         return IRQ_HANDLED;
532 }
533
534 /*
535  * Function which enables the madc conversion
536  * by writing to the control register.
537  * @madc - pointer to twl4030_madc_data struct
538  * @conv_method - can be TWL4030_MADC_RT, TWL4030_MADC_SW2, TWL4030_MADC_SW1
539  * corresponding to RT SW1 or SW2 conversion methods.
540  * Returns 0 if succeeds else a negative error value
541  */
542 static int twl4030_madc_start_conversion(struct twl4030_madc_data *madc,
543                                          int conv_method)
544 {
545         const struct twl4030_madc_conversion_method *method;
546         int ret = 0;
547
548         if (conv_method != TWL4030_MADC_SW1 && conv_method != TWL4030_MADC_SW2)
549                 return -ENOTSUPP;
550
551         method = &twl4030_conversion_methods[conv_method];
552         ret = twl_i2c_write_u8(TWL4030_MODULE_MADC, TWL4030_MADC_SW_START,
553                                method->ctrl);
554         if (ret) {
555                 dev_err(madc->dev, "unable to write ctrl register 0x%X\n",
556                         method->ctrl);
557                 return ret;
558         }
559
560         return 0;
561 }
562
563 /*
564  * Function that waits for conversion to be ready
565  * @madc - pointer to twl4030_madc_data struct
566  * @timeout_ms - timeout value in milliseconds
567  * @status_reg - ctrl register
568  * returns 0 if succeeds else a negative error value
569  */
570 static int twl4030_madc_wait_conversion_ready(struct twl4030_madc_data *madc,
571                                               unsigned int timeout_ms,
572                                               u8 status_reg)
573 {
574         unsigned long timeout;
575         int ret;
576
577         timeout = jiffies + msecs_to_jiffies(timeout_ms);
578         do {
579                 u8 reg;
580
581                 ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &reg, status_reg);
582                 if (ret) {
583                         dev_err(madc->dev,
584                                 "unable to read status register 0x%X\n",
585                                 status_reg);
586                         return ret;
587                 }
588                 if (!(reg & TWL4030_MADC_BUSY) && (reg & TWL4030_MADC_EOC_SW))
589                         return 0;
590                 usleep_range(500, 2000);
591         } while (!time_after(jiffies, timeout));
592         dev_err(madc->dev, "conversion timeout!\n");
593
594         return -EAGAIN;
595 }
596
597 /*
598  * An exported function which can be called from other kernel drivers.
599  * @req twl4030_madc_request structure
600  * req->rbuf will be filled with read values of channels based on the
601  * channel index. If a particular channel reading fails there will
602  * be a negative error value in the corresponding array element.
603  * returns 0 if succeeds else error value
604  */
605 static int twl4030_madc_conversion(struct twl4030_madc_request *req)
606 {
607         const struct twl4030_madc_conversion_method *method;
608         int ret;
609
610         if (!req || !twl4030_madc)
611                 return -EINVAL;
612
613         mutex_lock(&twl4030_madc->lock);
614         if (req->method < TWL4030_MADC_RT || req->method > TWL4030_MADC_SW2) {
615                 ret = -EINVAL;
616                 goto out;
617         }
618         /* Do we have a conversion request ongoing */
619         if (twl4030_madc->requests[req->method].active) {
620                 ret = -EBUSY;
621                 goto out;
622         }
623         method = &twl4030_conversion_methods[req->method];
624         /* Select channels to be converted */
625         ret = twl_i2c_write_u16(TWL4030_MODULE_MADC, req->channels, method->sel);
626         if (ret) {
627                 dev_err(twl4030_madc->dev,
628                         "unable to write sel register 0x%X\n", method->sel);
629                 goto out;
630         }
631         /* Select averaging for all channels if do_avg is set */
632         if (req->do_avg) {
633                 ret = twl_i2c_write_u16(TWL4030_MODULE_MADC, req->channels,
634                                        method->avg);
635                 if (ret) {
636                         dev_err(twl4030_madc->dev,
637                                 "unable to write avg register 0x%X\n",
638                                 method->avg);
639                         goto out;
640                 }
641         }
642         /* With RT method we should not be here anymore */
643         if (req->method == TWL4030_MADC_RT) {
644                 ret = -EINVAL;
645                 goto out;
646         }
647         ret = twl4030_madc_start_conversion(twl4030_madc, req->method);
648         if (ret < 0)
649                 goto out;
650         twl4030_madc->requests[req->method].active = true;
651         /* Wait until conversion is ready (ctrl register returns EOC) */
652         ret = twl4030_madc_wait_conversion_ready(twl4030_madc, 5, method->ctrl);
653         if (ret) {
654                 twl4030_madc->requests[req->method].active = false;
655                 goto out;
656         }
657         ret = twl4030_madc_read_channels(twl4030_madc, method->rbase,
658                                          req->channels, req->rbuf, req->raw);
659         twl4030_madc->requests[req->method].active = false;
660
661 out:
662         mutex_unlock(&twl4030_madc->lock);
663
664         return ret;
665 }
666
667 /**
668  * twl4030_madc_set_current_generator() - setup bias current
669  *
670  * @madc:       pointer to twl4030_madc_data struct
671  * @chan:       can be one of the two values:
672  *              0 - Enables bias current for main battery type reading
673  *              1 - Enables bias current for main battery temperature sensing
674  * @on:         enable or disable chan.
675  *
676  * Function to enable or disable bias current for
677  * main battery type reading or temperature sensing
678  */
679 static int twl4030_madc_set_current_generator(struct twl4030_madc_data *madc,
680                                               int chan, int on)
681 {
682         int ret;
683         int regmask;
684         u8 regval;
685
686         ret = twl_i2c_read_u8(TWL_MODULE_MAIN_CHARGE,
687                               &regval, TWL4030_BCI_BCICTL1);
688         if (ret) {
689                 dev_err(madc->dev, "unable to read BCICTL1 reg 0x%X",
690                         TWL4030_BCI_BCICTL1);
691                 return ret;
692         }
693
694         regmask = chan ? TWL4030_BCI_ITHEN : TWL4030_BCI_TYPEN;
695         if (on)
696                 regval |= regmask;
697         else
698                 regval &= ~regmask;
699
700         ret = twl_i2c_write_u8(TWL_MODULE_MAIN_CHARGE,
701                                regval, TWL4030_BCI_BCICTL1);
702         if (ret) {
703                 dev_err(madc->dev, "unable to write BCICTL1 reg 0x%X\n",
704                         TWL4030_BCI_BCICTL1);
705                 return ret;
706         }
707
708         return 0;
709 }
710
711 /*
712  * Function that sets MADC software power on bit to enable MADC
713  * @madc - pointer to twl4030_madc_data struct
714  * @on - Enable or disable MADC software power on bit.
715  * returns error if i2c read/write fails else 0
716  */
717 static int twl4030_madc_set_power(struct twl4030_madc_data *madc, int on)
718 {
719         u8 regval;
720         int ret;
721
722         ret = twl_i2c_read_u8(TWL_MODULE_MAIN_CHARGE,
723                               &regval, TWL4030_MADC_CTRL1);
724         if (ret) {
725                 dev_err(madc->dev, "unable to read madc ctrl1 reg 0x%X\n",
726                         TWL4030_MADC_CTRL1);
727                 return ret;
728         }
729         if (on)
730                 regval |= TWL4030_MADC_MADCON;
731         else
732                 regval &= ~TWL4030_MADC_MADCON;
733         ret = twl_i2c_write_u8(TWL4030_MODULE_MADC, regval, TWL4030_MADC_CTRL1);
734         if (ret) {
735                 dev_err(madc->dev, "unable to write madc ctrl1 reg 0x%X\n",
736                         TWL4030_MADC_CTRL1);
737                 return ret;
738         }
739
740         return 0;
741 }
742
743 /*
744  * Initialize MADC and request for threaded irq
745  */
746 static int twl4030_madc_probe(struct platform_device *pdev)
747 {
748         struct device *dev = &pdev->dev;
749         struct twl4030_madc_platform_data *pdata = dev_get_platdata(dev);
750         struct twl4030_madc_data *madc;
751         int irq, ret;
752         u8 regval;
753         struct iio_dev *iio_dev = NULL;
754
755         if (!pdata && !dev_fwnode(dev)) {
756                 dev_err(&pdev->dev, "neither platform data nor Device Tree node available\n");
757                 return -EINVAL;
758         }
759
760         iio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*madc));
761         if (!iio_dev) {
762                 dev_err(&pdev->dev, "failed allocating iio device\n");
763                 return -ENOMEM;
764         }
765
766         madc = iio_priv(iio_dev);
767         madc->dev = &pdev->dev;
768
769         iio_dev->name = dev_name(&pdev->dev);
770         iio_dev->info = &twl4030_madc_iio_info;
771         iio_dev->modes = INDIO_DIRECT_MODE;
772         iio_dev->channels = twl4030_madc_iio_channels;
773         iio_dev->num_channels = ARRAY_SIZE(twl4030_madc_iio_channels);
774
775         /*
776          * Phoenix provides 2 interrupt lines. The first one is connected to
777          * the OMAP. The other one can be connected to the other processor such
778          * as modem. Hence two separate ISR and IMR registers.
779          */
780         if (pdata)
781                 madc->use_second_irq = (pdata->irq_line != 1);
782         else
783                 madc->use_second_irq = device_property_read_bool(dev,
784                                        "ti,system-uses-second-madc-irq");
785
786         madc->imr = madc->use_second_irq ? TWL4030_MADC_IMR2 :
787                                            TWL4030_MADC_IMR1;
788         madc->isr = madc->use_second_irq ? TWL4030_MADC_ISR2 :
789                                            TWL4030_MADC_ISR1;
790
791         ret = twl4030_madc_set_power(madc, 1);
792         if (ret < 0)
793                 return ret;
794         ret = twl4030_madc_set_current_generator(madc, 0, 1);
795         if (ret < 0)
796                 goto err_current_generator;
797
798         ret = twl_i2c_read_u8(TWL_MODULE_MAIN_CHARGE,
799                               &regval, TWL4030_BCI_BCICTL1);
800         if (ret) {
801                 dev_err(&pdev->dev, "unable to read reg BCI CTL1 0x%X\n",
802                         TWL4030_BCI_BCICTL1);
803                 goto err_i2c;
804         }
805         regval |= TWL4030_BCI_MESBAT;
806         ret = twl_i2c_write_u8(TWL_MODULE_MAIN_CHARGE,
807                                regval, TWL4030_BCI_BCICTL1);
808         if (ret) {
809                 dev_err(&pdev->dev, "unable to write reg BCI Ctl1 0x%X\n",
810                         TWL4030_BCI_BCICTL1);
811                 goto err_i2c;
812         }
813
814         /* Check that MADC clock is on */
815         ret = twl_i2c_read_u8(TWL4030_MODULE_INTBR, &regval, TWL4030_REG_GPBR1);
816         if (ret) {
817                 dev_err(&pdev->dev, "unable to read reg GPBR1 0x%X\n",
818                                 TWL4030_REG_GPBR1);
819                 goto err_i2c;
820         }
821
822         /* If MADC clk is not on, turn it on */
823         if (!(regval & TWL4030_GPBR1_MADC_HFCLK_EN)) {
824                 dev_info(&pdev->dev, "clk disabled, enabling\n");
825                 regval |= TWL4030_GPBR1_MADC_HFCLK_EN;
826                 ret = twl_i2c_write_u8(TWL4030_MODULE_INTBR, regval,
827                                        TWL4030_REG_GPBR1);
828                 if (ret) {
829                         dev_err(&pdev->dev, "unable to write reg GPBR1 0x%X\n",
830                                         TWL4030_REG_GPBR1);
831                         goto err_i2c;
832                 }
833         }
834
835         platform_set_drvdata(pdev, iio_dev);
836         mutex_init(&madc->lock);
837
838         irq = platform_get_irq(pdev, 0);
839         ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
840                                    twl4030_madc_threaded_irq_handler,
841                                    IRQF_TRIGGER_RISING | IRQF_ONESHOT,
842                                    "twl4030_madc", madc);
843         if (ret) {
844                 dev_err(&pdev->dev, "could not request irq\n");
845                 goto err_i2c;
846         }
847         twl4030_madc = madc;
848
849         /* Configure MADC[3:6] */
850         ret = twl_i2c_read_u8(TWL_MODULE_USB, &regval,
851                         TWL4030_USB_CARKIT_ANA_CTRL);
852         if (ret) {
853                 dev_err(&pdev->dev, "unable to read reg CARKIT_ANA_CTRL  0x%X\n",
854                                 TWL4030_USB_CARKIT_ANA_CTRL);
855                 goto err_i2c;
856         }
857         regval |= TWL4030_USB_SEL_MADC_MCPC;
858         ret = twl_i2c_write_u8(TWL_MODULE_USB, regval,
859                                  TWL4030_USB_CARKIT_ANA_CTRL);
860         if (ret) {
861                 dev_err(&pdev->dev, "unable to write reg CARKIT_ANA_CTRL 0x%X\n",
862                                 TWL4030_USB_CARKIT_ANA_CTRL);
863                 goto err_i2c;
864         }
865
866         /* Enable 3v1 bias regulator for MADC[3:6] */
867         madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1");
868         if (IS_ERR(madc->usb3v1)) {
869                 ret = -ENODEV;
870                 goto err_i2c;
871         }
872
873         ret = regulator_enable(madc->usb3v1);
874         if (ret) {
875                 dev_err(madc->dev, "could not enable 3v1 bias regulator\n");
876                 goto err_i2c;
877         }
878
879         ret = iio_device_register(iio_dev);
880         if (ret) {
881                 dev_err(&pdev->dev, "could not register iio device\n");
882                 goto err_usb3v1;
883         }
884
885         return 0;
886
887 err_usb3v1:
888         regulator_disable(madc->usb3v1);
889 err_i2c:
890         twl4030_madc_set_current_generator(madc, 0, 0);
891 err_current_generator:
892         twl4030_madc_set_power(madc, 0);
893         return ret;
894 }
895
896 static void twl4030_madc_remove(struct platform_device *pdev)
897 {
898         struct iio_dev *iio_dev = platform_get_drvdata(pdev);
899         struct twl4030_madc_data *madc = iio_priv(iio_dev);
900
901         iio_device_unregister(iio_dev);
902
903         twl4030_madc_set_current_generator(madc, 0, 0);
904         twl4030_madc_set_power(madc, 0);
905
906         regulator_disable(madc->usb3v1);
907 }
908
909 static const struct of_device_id twl_madc_of_match[] = {
910         { .compatible = "ti,twl4030-madc", },
911         { }
912 };
913 MODULE_DEVICE_TABLE(of, twl_madc_of_match);
914
915 static struct platform_driver twl4030_madc_driver = {
916         .probe = twl4030_madc_probe,
917         .remove_new = twl4030_madc_remove,
918         .driver = {
919                    .name = "twl4030_madc",
920                    .of_match_table = twl_madc_of_match,
921         },
922 };
923
924 module_platform_driver(twl4030_madc_driver);
925
926 MODULE_DESCRIPTION("TWL4030 ADC driver");
927 MODULE_LICENSE("GPL");
928 MODULE_AUTHOR("J Keerthy");
929 MODULE_ALIAS("platform:twl4030_madc");