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