1 // SPDX-License-Identifier: GPL-2.0-only
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.
8 * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
9 * J Keerthy <j-keerthy@ti.com>
11 * Based on twl4030-madc.c
12 * Copyright (C) 2008 Nokia Corporation
13 * Mikko Ylinen <mikko.k.ylinen@nokia.com>
15 * Amit Kucheria <amit.kucheria@canonical.com>
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>
37 #include <linux/iio/iio.h>
39 #define TWL4030_MADC_MAX_CHANNELS 16
41 #define TWL4030_MADC_CTRL1 0x00
42 #define TWL4030_MADC_CTRL2 0x01
44 #define TWL4030_MADC_RTSELECT_LSB 0x02
45 #define TWL4030_MADC_SW1SELECT_LSB 0x06
46 #define TWL4030_MADC_SW2SELECT_LSB 0x0A
48 #define TWL4030_MADC_RTAVERAGE_LSB 0x04
49 #define TWL4030_MADC_SW1AVERAGE_LSB 0x08
50 #define TWL4030_MADC_SW2AVERAGE_LSB 0x0C
52 #define TWL4030_MADC_CTRL_SW1 0x12
53 #define TWL4030_MADC_CTRL_SW2 0x13
55 #define TWL4030_MADC_RTCH0_LSB 0x17
56 #define TWL4030_MADC_GPCH0_LSB 0x37
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)
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
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
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)
102 #define REG_BCICTL2 0x024
103 #define TWL4030_BCI_ITHSENS 0x007
105 /* Register and bits for GPBR1 register */
106 #define TWL4030_REG_GPBR1 0x0c
107 #define TWL4030_GPBR1_MADC_HFCLK_EN (1 << 7)
109 #define TWL4030_USB_SEL_MADC_MCPC (1<<3)
110 #define TWL4030_USB_CARKIT_ANA_CTRL 0xBB
112 struct twl4030_madc_conversion_method
{
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
130 struct twl4030_madc_request
{
131 unsigned long channels
;
138 int rbuf
[TWL4030_MADC_MAX_CHANNELS
];
141 enum conversion_methods
{
145 TWL4030_MADC_NUM_METHODS
150 TWL4030_MADC_IRQ_ONESHOT
,
151 TWL4030_MADC_IRQ_REARM
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
164 struct twl4030_madc_data
{
167 struct regulator
*usb3v1
;
168 struct twl4030_madc_request requests
[TWL4030_MADC_NUM_METHODS
];
174 static int twl4030_madc_conversion(struct twl4030_madc_request
*req
);
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
)
180 struct twl4030_madc_data
*madc
= iio_priv(iio_dev
);
181 struct twl4030_madc_request req
;
184 req
.method
= madc
->use_second_irq
? TWL4030_MADC_SW2
: TWL4030_MADC_SW1
;
186 req
.channels
= BIT(chan
->channel
);
188 req
.type
= TWL4030_MADC_WAIT
;
189 req
.raw
= !(mask
== IIO_CHAN_INFO_PROCESSED
);
190 req
.do_avg
= (mask
== IIO_CHAN_INFO_AVERAGE_RAW
);
192 ret
= twl4030_madc_conversion(&req
);
196 *val
= req
.rbuf
[chan
->channel
];
201 static const struct iio_info twl4030_madc_iio_info
= {
202 .read_raw
= &twl4030_madc_read
,
205 #define TWL4030_ADC_CHANNEL(_channel, _type, _name) { \
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, \
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"),
234 static struct twl4030_madc_data
*twl4030_madc
;
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 Reserved channels */
252 {5, 11}, /* CHANNEL 15 */
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,
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.
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
,
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
,
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
,
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
301 * Return: 0 on success, an error code otherwise.
303 static int twl4030_madc_channel_raw_read(struct twl4030_madc_data
*madc
, u8 reg
)
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
311 ret
= twl_i2c_read_u16(TWL4030_MODULE_MADC
, &val
, reg
);
313 dev_err(madc
->dev
, "unable to read register 0x%X\n", reg
);
317 return (int)(val
>> 6);
321 * Return battery temperature in degrees Celsius
324 static int twl4030battery_temperature(int raw_volt
)
327 int temp
, curr
, volt
, res
, ret
;
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
,
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)
349 static int twl4030battery_current(int raw_volt
)
354 ret
= twl_i2c_read_u8(TWL_MODULE_MAIN_CHARGE
, &val
,
355 TWL4030_BCI_BCICTL1
);
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
;
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
372 * Returns the number of successfully read channels.
374 static int twl4030_madc_read_channels(struct twl4030_madc_data
*madc
,
375 u8 reg_base
, unsigned
376 long channels
, int *buf
,
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
);
387 dev_err(madc
->dev
, "Unable to read register 0x%X\n",
397 buf
[i
] = twl4030battery_current(buf
[i
]);
399 dev_err(madc
->dev
, "err reading current\n");
403 buf
[i
] = buf
[i
] - 750;
407 buf
[i
] = twl4030battery_temperature(buf
[i
]);
409 dev_err(madc
->dev
, "err reading temperature\n");
418 /* Analog Input (V) = conv_result * step_size / R
419 * conv_result = decimal value of 10-bit conversion
421 * step size = 1.5 / (2 ^ 10 -1)
422 * R = Prescaler ratio for input channels.
423 * Result given in mV hence multiplied by 1000.
425 buf
[i
] = (buf
[i
] * 3 * 1000 *
426 twl4030_divider_ratios
[i
].denominator
)
428 twl4030_divider_ratios
[i
].numerator
);
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.
443 static int twl4030_madc_disable_irq(struct twl4030_madc_data
*madc
, u8 id
)
448 ret
= twl_i2c_read_u8(TWL4030_MODULE_MADC
, &val
, madc
->imr
);
450 dev_err(madc
->dev
, "unable to read imr register 0x%X\n",
455 ret
= twl_i2c_write_u8(TWL4030_MODULE_MADC
, val
, madc
->imr
);
458 "unable to write imr register 0x%X\n", madc
->imr
);
465 static irqreturn_t
twl4030_madc_threaded_irq_handler(int irq
, void *_madc
)
467 struct twl4030_madc_data
*madc
= _madc
;
468 const struct twl4030_madc_conversion_method
*method
;
471 struct twl4030_madc_request
*r
;
473 mutex_lock(&madc
->lock
);
474 ret
= twl_i2c_read_u8(TWL4030_MODULE_MADC
, &isr_val
, madc
->isr
);
476 dev_err(madc
->dev
, "unable to read isr register 0x%X\n",
480 ret
= twl_i2c_read_u8(TWL4030_MODULE_MADC
, &imr_val
, madc
->imr
);
482 dev_err(madc
->dev
, "unable to read imr register 0x%X\n",
487 for (i
= 0; i
< TWL4030_MADC_NUM_METHODS
; i
++) {
488 if (!(isr_val
& (1 << i
)))
490 ret
= twl4030_madc_disable_irq(madc
, i
);
492 dev_dbg(madc
->dev
, "Disable interrupt failed %d\n", i
);
493 madc
->requests
[i
].result_pending
= true;
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
)
500 method
= &twl4030_conversion_methods
[r
->method
];
502 twl4030_madc_read_channels(madc
, method
->rbase
,
503 r
->channels
, r
->rbuf
, r
->raw
);
505 r
->result_pending
= false;
508 mutex_unlock(&madc
->lock
);
514 * In case of error check whichever request is active
515 * and service the same.
517 for (i
= 0; i
< TWL4030_MADC_NUM_METHODS
; i
++) {
518 r
= &madc
->requests
[i
];
521 method
= &twl4030_conversion_methods
[r
->method
];
523 twl4030_madc_read_channels(madc
, method
->rbase
,
524 r
->channels
, r
->rbuf
, r
->raw
);
526 r
->result_pending
= false;
529 mutex_unlock(&madc
->lock
);
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
542 static int twl4030_madc_start_conversion(struct twl4030_madc_data
*madc
,
545 const struct twl4030_madc_conversion_method
*method
;
548 if (conv_method
!= TWL4030_MADC_SW1
&& conv_method
!= TWL4030_MADC_SW2
)
551 method
= &twl4030_conversion_methods
[conv_method
];
552 ret
= twl_i2c_write_u8(TWL4030_MODULE_MADC
, TWL4030_MADC_SW_START
,
555 dev_err(madc
->dev
, "unable to write ctrl register 0x%X\n",
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
570 static int twl4030_madc_wait_conversion_ready(struct twl4030_madc_data
*madc
,
571 unsigned int timeout_ms
,
574 unsigned long timeout
;
577 timeout
= jiffies
+ msecs_to_jiffies(timeout_ms
);
581 ret
= twl_i2c_read_u8(TWL4030_MODULE_MADC
, ®
, status_reg
);
584 "unable to read status register 0x%X\n",
588 if (!(reg
& TWL4030_MADC_BUSY
) && (reg
& TWL4030_MADC_EOC_SW
))
590 usleep_range(500, 2000);
591 } while (!time_after(jiffies
, timeout
));
592 dev_err(madc
->dev
, "conversion timeout!\n");
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
605 static int twl4030_madc_conversion(struct twl4030_madc_request
*req
)
607 const struct twl4030_madc_conversion_method
*method
;
610 if (!req
|| !twl4030_madc
)
613 mutex_lock(&twl4030_madc
->lock
);
614 if (req
->method
< TWL4030_MADC_RT
|| req
->method
> TWL4030_MADC_SW2
) {
618 /* Do we have a conversion request ongoing */
619 if (twl4030_madc
->requests
[req
->method
].active
) {
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
);
627 dev_err(twl4030_madc
->dev
,
628 "unable to write sel register 0x%X\n", method
->sel
);
631 /* Select averaging for all channels if do_avg is set */
633 ret
= twl_i2c_write_u16(TWL4030_MODULE_MADC
, req
->channels
,
636 dev_err(twl4030_madc
->dev
,
637 "unable to write avg register 0x%X\n",
642 /* With RT method we should not be here anymore */
643 if (req
->method
== TWL4030_MADC_RT
) {
647 ret
= twl4030_madc_start_conversion(twl4030_madc
, req
->method
);
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
);
654 twl4030_madc
->requests
[req
->method
].active
= false;
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;
662 mutex_unlock(&twl4030_madc
->lock
);
668 * twl4030_madc_set_current_generator() - setup bias current
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.
676 * Function to enable or disable bias current for
677 * main battery type reading or temperature sensing
679 static int twl4030_madc_set_current_generator(struct twl4030_madc_data
*madc
,
686 ret
= twl_i2c_read_u8(TWL_MODULE_MAIN_CHARGE
,
687 ®val
, TWL4030_BCI_BCICTL1
);
689 dev_err(madc
->dev
, "unable to read BCICTL1 reg 0x%X",
690 TWL4030_BCI_BCICTL1
);
694 regmask
= chan
? TWL4030_BCI_ITHEN
: TWL4030_BCI_TYPEN
;
700 ret
= twl_i2c_write_u8(TWL_MODULE_MAIN_CHARGE
,
701 regval
, TWL4030_BCI_BCICTL1
);
703 dev_err(madc
->dev
, "unable to write BCICTL1 reg 0x%X\n",
704 TWL4030_BCI_BCICTL1
);
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
717 static int twl4030_madc_set_power(struct twl4030_madc_data
*madc
, int on
)
722 ret
= twl_i2c_read_u8(TWL_MODULE_MAIN_CHARGE
,
723 ®val
, TWL4030_MADC_CTRL1
);
725 dev_err(madc
->dev
, "unable to read madc ctrl1 reg 0x%X\n",
730 regval
|= TWL4030_MADC_MADCON
;
732 regval
&= ~TWL4030_MADC_MADCON
;
733 ret
= twl_i2c_write_u8(TWL4030_MODULE_MADC
, regval
, TWL4030_MADC_CTRL1
);
735 dev_err(madc
->dev
, "unable to write madc ctrl1 reg 0x%X\n",
744 * Initialize MADC and request for threaded irq
746 static int twl4030_madc_probe(struct platform_device
*pdev
)
748 struct device
*dev
= &pdev
->dev
;
749 struct twl4030_madc_platform_data
*pdata
= dev_get_platdata(dev
);
750 struct twl4030_madc_data
*madc
;
753 struct iio_dev
*iio_dev
= NULL
;
755 if (!pdata
&& !dev_fwnode(dev
)) {
756 dev_err(&pdev
->dev
, "neither platform data nor Device Tree node available\n");
760 iio_dev
= devm_iio_device_alloc(&pdev
->dev
, sizeof(*madc
));
762 dev_err(&pdev
->dev
, "failed allocating iio device\n");
766 madc
= iio_priv(iio_dev
);
767 madc
->dev
= &pdev
->dev
;
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
);
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.
781 madc
->use_second_irq
= (pdata
->irq_line
!= 1);
783 madc
->use_second_irq
= device_property_read_bool(dev
,
784 "ti,system-uses-second-madc-irq");
786 madc
->imr
= madc
->use_second_irq
? TWL4030_MADC_IMR2
:
788 madc
->isr
= madc
->use_second_irq
? TWL4030_MADC_ISR2
:
791 ret
= twl4030_madc_set_power(madc
, 1);
794 ret
= twl4030_madc_set_current_generator(madc
, 0, 1);
796 goto err_current_generator
;
798 ret
= twl_i2c_read_u8(TWL_MODULE_MAIN_CHARGE
,
799 ®val
, TWL4030_BCI_BCICTL1
);
801 dev_err(&pdev
->dev
, "unable to read reg BCI CTL1 0x%X\n",
802 TWL4030_BCI_BCICTL1
);
805 regval
|= TWL4030_BCI_MESBAT
;
806 ret
= twl_i2c_write_u8(TWL_MODULE_MAIN_CHARGE
,
807 regval
, TWL4030_BCI_BCICTL1
);
809 dev_err(&pdev
->dev
, "unable to write reg BCI Ctl1 0x%X\n",
810 TWL4030_BCI_BCICTL1
);
814 /* Check that MADC clock is on */
815 ret
= twl_i2c_read_u8(TWL4030_MODULE_INTBR
, ®val
, TWL4030_REG_GPBR1
);
817 dev_err(&pdev
->dev
, "unable to read reg GPBR1 0x%X\n",
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
,
829 dev_err(&pdev
->dev
, "unable to write reg GPBR1 0x%X\n",
835 platform_set_drvdata(pdev
, iio_dev
);
836 mutex_init(&madc
->lock
);
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
);
844 dev_err(&pdev
->dev
, "could not request irq\n");
849 /* Configure MADC[3:6] */
850 ret
= twl_i2c_read_u8(TWL_MODULE_USB
, ®val
,
851 TWL4030_USB_CARKIT_ANA_CTRL
);
853 dev_err(&pdev
->dev
, "unable to read reg CARKIT_ANA_CTRL 0x%X\n",
854 TWL4030_USB_CARKIT_ANA_CTRL
);
857 regval
|= TWL4030_USB_SEL_MADC_MCPC
;
858 ret
= twl_i2c_write_u8(TWL_MODULE_USB
, regval
,
859 TWL4030_USB_CARKIT_ANA_CTRL
);
861 dev_err(&pdev
->dev
, "unable to write reg CARKIT_ANA_CTRL 0x%X\n",
862 TWL4030_USB_CARKIT_ANA_CTRL
);
866 /* Enable 3v1 bias regulator for MADC[3:6] */
867 madc
->usb3v1
= devm_regulator_get(madc
->dev
, "vusb3v1");
868 if (IS_ERR(madc
->usb3v1
)) {
873 ret
= regulator_enable(madc
->usb3v1
);
875 dev_err(madc
->dev
, "could not enable 3v1 bias regulator\n");
879 ret
= iio_device_register(iio_dev
);
881 dev_err(&pdev
->dev
, "could not register iio device\n");
888 regulator_disable(madc
->usb3v1
);
890 twl4030_madc_set_current_generator(madc
, 0, 0);
891 err_current_generator
:
892 twl4030_madc_set_power(madc
, 0);
896 static void twl4030_madc_remove(struct platform_device
*pdev
)
898 struct iio_dev
*iio_dev
= platform_get_drvdata(pdev
);
899 struct twl4030_madc_data
*madc
= iio_priv(iio_dev
);
901 iio_device_unregister(iio_dev
);
903 twl4030_madc_set_current_generator(madc
, 0, 0);
904 twl4030_madc_set_power(madc
, 0);
906 regulator_disable(madc
->usb3v1
);
909 static const struct of_device_id twl_madc_of_match
[] = {
910 { .compatible
= "ti,twl4030-madc", },
913 MODULE_DEVICE_TABLE(of
, twl_madc_of_match
);
915 static struct platform_driver twl4030_madc_driver
= {
916 .probe
= twl4030_madc_probe
,
917 .remove
= twl4030_madc_remove
,
919 .name
= "twl4030_madc",
920 .of_match_table
= twl_madc_of_match
,
924 module_platform_driver(twl4030_madc_driver
);
926 MODULE_DESCRIPTION("TWL4030 ADC driver");
927 MODULE_LICENSE("GPL");
928 MODULE_AUTHOR("J Keerthy");
929 MODULE_ALIAS("platform:twl4030_madc");