xref: /openbmc/linux/drivers/iio/adc/twl4030-madc.c (revision 4f494028)
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 
twl4030_madc_read(struct iio_dev * iio_dev,const struct iio_chan_spec * chan,int * val,int * val2,long mask)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  */
twl4030_madc_channel_raw_read(struct twl4030_madc_data * madc,u8 reg)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  */
twl4030battery_temperature(int raw_volt)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 
twl4030battery_current(int raw_volt)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  */
twl4030_madc_read_channels(struct twl4030_madc_data * madc,u8 reg_base,unsigned long channels,int * buf,bool raw)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  */
twl4030_madc_disable_irq(struct twl4030_madc_data * madc,u8 id)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 
twl4030_madc_threaded_irq_handler(int irq,void * _madc)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  */
twl4030_madc_start_conversion(struct twl4030_madc_data * madc,int conv_method)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  */
twl4030_madc_wait_conversion_ready(struct twl4030_madc_data * madc,unsigned int timeout_ms,u8 status_reg)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  */
twl4030_madc_conversion(struct twl4030_madc_request * req)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  */
twl4030_madc_set_current_generator(struct twl4030_madc_data * madc,int chan,int on)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  */
twl4030_madc_set_power(struct twl4030_madc_data * madc,int on)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  */
twl4030_madc_probe(struct platform_device * pdev)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 
twl4030_madc_remove(struct platform_device * pdev)895 static int 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 	return 0;
908 }
909 
910 #ifdef CONFIG_OF
911 static const struct of_device_id twl_madc_of_match[] = {
912 	{ .compatible = "ti,twl4030-madc", },
913 	{ },
914 };
915 MODULE_DEVICE_TABLE(of, twl_madc_of_match);
916 #endif
917 
918 static struct platform_driver twl4030_madc_driver = {
919 	.probe = twl4030_madc_probe,
920 	.remove = twl4030_madc_remove,
921 	.driver = {
922 		   .name = "twl4030_madc",
923 		   .of_match_table = of_match_ptr(twl_madc_of_match),
924 	},
925 };
926 
927 module_platform_driver(twl4030_madc_driver);
928 
929 MODULE_DESCRIPTION("TWL4030 ADC driver");
930 MODULE_LICENSE("GPL");
931 MODULE_AUTHOR("J Keerthy");
932 MODULE_ALIAS("platform:twl4030_madc");
933