1 // SPDX-License-Identifier: GPL-2.0
3 * STMicroelectronics STMPE811 IIO ADC Driver
5 * 4 channel, 10/12-bit ADC
7 * Copyright (C) 2013-2018 Toradex AG <stefan.agner@toradex.com>
10 #include <linux/completion.h>
11 #include <linux/err.h>
12 #include <linux/iio/iio.h>
13 #include <linux/interrupt.h>
14 #include <linux/kernel.h>
15 #include <linux/mfd/stmpe.h>
16 #include <linux/module.h>
17 #include <linux/of_platform.h>
18 #include <linux/platform_device.h>
19 #include <linux/device.h>
21 #define STMPE_REG_INT_STA 0x0B
22 #define STMPE_REG_ADC_INT_EN 0x0E
23 #define STMPE_REG_ADC_INT_STA 0x0F
25 #define STMPE_REG_ADC_CTRL1 0x20
26 #define STMPE_REG_ADC_CTRL2 0x21
27 #define STMPE_REG_ADC_CAPT 0x22
28 #define STMPE_REG_ADC_DATA_CH(channel) (0x30 + 2 * (channel))
30 #define STMPE_REG_TEMP_CTRL 0x60
31 #define STMPE_TEMP_CTRL_ENABLE BIT(0)
32 #define STMPE_TEMP_CTRL_ACQ BIT(1)
33 #define STMPE_TEMP_CTRL_THRES_EN BIT(3)
34 #define STMPE_START_ONE_TEMP_CONV (STMPE_TEMP_CTRL_ENABLE | \
35 STMPE_TEMP_CTRL_ACQ | \
36 STMPE_TEMP_CTRL_THRES_EN)
37 #define STMPE_REG_TEMP_DATA 0x61
38 #define STMPE_REG_TEMP_TH 0x63
39 #define STMPE_ADC_LAST_NR 7
40 #define STMPE_TEMP_CHANNEL (STMPE_ADC_LAST_NR + 1)
42 #define STMPE_ADC_CH(channel) ((1 << (channel)) & 0xff)
44 #define STMPE_ADC_TIMEOUT msecs_to_jiffies(1000)
52 /* We are allocating plus one for the temperature channel */
53 struct iio_chan_spec stmpe_adc_iio_channels
[STMPE_ADC_LAST_NR
+ 2];
55 struct completion completion
;
61 static int stmpe_read_voltage(struct stmpe_adc
*info
,
62 struct iio_chan_spec
const *chan
, int *val
)
66 mutex_lock(&info
->lock
);
68 info
->channel
= (u8
)chan
->channel
;
70 if (info
->channel
> STMPE_ADC_LAST_NR
) {
71 mutex_unlock(&info
->lock
);
75 stmpe_reg_write(info
->stmpe
, STMPE_REG_ADC_INT_EN
,
76 STMPE_ADC_CH(info
->channel
));
78 stmpe_reg_write(info
->stmpe
, STMPE_REG_ADC_CAPT
,
79 STMPE_ADC_CH(info
->channel
));
83 ret
= wait_for_completion_interruptible_timeout
84 (&info
->completion
, STMPE_ADC_TIMEOUT
);
87 mutex_unlock(&info
->lock
);
96 mutex_unlock(&info
->lock
);
101 static int stmpe_read_temp(struct stmpe_adc
*info
,
102 struct iio_chan_spec
const *chan
, int *val
)
106 mutex_lock(&info
->lock
);
108 info
->channel
= (u8
)chan
->channel
;
110 if (info
->channel
!= STMPE_TEMP_CHANNEL
) {
111 mutex_unlock(&info
->lock
);
115 stmpe_reg_write(info
->stmpe
, STMPE_REG_TEMP_CTRL
,
116 STMPE_START_ONE_TEMP_CONV
);
118 ret
= wait_for_completion_interruptible_timeout
119 (&info
->completion
, STMPE_ADC_TIMEOUT
);
122 mutex_unlock(&info
->lock
);
130 * absolute temp = +V3.3 * value /7.51 [K]
131 * scale to [milli °C]
133 *val
= ((449960l * info
->value
) / 1024l) - 273150;
135 mutex_unlock(&info
->lock
);
140 static int stmpe_read_raw(struct iio_dev
*indio_dev
,
141 struct iio_chan_spec
const *chan
,
146 struct stmpe_adc
*info
= iio_priv(indio_dev
);
150 case IIO_CHAN_INFO_RAW
:
151 case IIO_CHAN_INFO_PROCESSED
:
153 switch (chan
->type
) {
155 ret
= stmpe_read_voltage(info
, chan
, val
);
159 ret
= stmpe_read_temp(info
, chan
, val
);
170 case IIO_CHAN_INFO_SCALE
:
172 *val2
= info
->stmpe
->mod_12b
? 12 : 10;
173 return IIO_VAL_FRACTIONAL_LOG2
;
182 static irqreturn_t
stmpe_adc_isr(int irq
, void *dev_id
)
184 struct stmpe_adc
*info
= (struct stmpe_adc
*)dev_id
;
187 if (info
->channel
<= STMPE_ADC_LAST_NR
) {
190 int_sta
= stmpe_reg_read(info
->stmpe
, STMPE_REG_ADC_INT_STA
);
192 /* Is the interrupt relevant */
193 if (!(int_sta
& STMPE_ADC_CH(info
->channel
)))
197 stmpe_block_read(info
->stmpe
,
198 STMPE_REG_ADC_DATA_CH(info
->channel
), 2, (u8
*) &data
);
200 stmpe_reg_write(info
->stmpe
, STMPE_REG_ADC_INT_STA
, int_sta
);
201 } else if (info
->channel
== STMPE_TEMP_CHANNEL
) {
203 stmpe_block_read(info
->stmpe
, STMPE_REG_TEMP_DATA
, 2,
209 info
->value
= (u32
) be16_to_cpu(data
);
210 complete(&info
->completion
);
215 static const struct iio_info stmpe_adc_iio_info
= {
216 .read_raw
= &stmpe_read_raw
,
219 static void stmpe_adc_voltage_chan(struct iio_chan_spec
*ics
, int chan
)
221 ics
->type
= IIO_VOLTAGE
;
222 ics
->info_mask_separate
= BIT(IIO_CHAN_INFO_RAW
);
223 ics
->info_mask_shared_by_type
= BIT(IIO_CHAN_INFO_SCALE
);
228 static void stmpe_adc_temp_chan(struct iio_chan_spec
*ics
, int chan
)
230 ics
->type
= IIO_TEMP
;
231 ics
->info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
);
236 static int stmpe_adc_init_hw(struct stmpe_adc
*adc
)
239 struct stmpe
*stmpe
= adc
->stmpe
;
241 ret
= stmpe_enable(stmpe
, STMPE_BLOCK_ADC
);
243 dev_err(stmpe
->dev
, "Could not enable clock for ADC\n");
247 ret
= stmpe811_adc_common_init(stmpe
);
249 stmpe_disable(stmpe
, STMPE_BLOCK_ADC
);
253 /* use temp irq for each conversion completion */
254 stmpe_reg_write(stmpe
, STMPE_REG_TEMP_TH
, 0);
255 stmpe_reg_write(stmpe
, STMPE_REG_TEMP_TH
+ 1, 0);
260 static int stmpe_adc_probe(struct platform_device
*pdev
)
262 struct iio_dev
*indio_dev
;
263 struct stmpe_adc
*info
;
264 struct device_node
*np
;
265 u32 norequest_mask
= 0;
266 int irq_temp
, irq_adc
;
271 irq_adc
= platform_get_irq_byname(pdev
, "STMPE_ADC");
275 indio_dev
= devm_iio_device_alloc(&pdev
->dev
, sizeof(struct stmpe_adc
));
277 dev_err(&pdev
->dev
, "failed allocating iio device\n");
281 info
= iio_priv(indio_dev
);
282 mutex_init(&info
->lock
);
284 init_completion(&info
->completion
);
285 ret
= devm_request_threaded_irq(&pdev
->dev
, irq_adc
, NULL
,
286 stmpe_adc_isr
, IRQF_ONESHOT
,
289 dev_err(&pdev
->dev
, "failed requesting irq, irq = %d\n",
294 irq_temp
= platform_get_irq_byname(pdev
, "STMPE_TEMP_SENS");
296 ret
= devm_request_threaded_irq(&pdev
->dev
, irq_temp
, NULL
,
297 stmpe_adc_isr
, IRQF_ONESHOT
,
300 dev_warn(&pdev
->dev
, "failed requesting irq for"
301 " temp sensor, irq = %d\n", irq_temp
);
304 platform_set_drvdata(pdev
, indio_dev
);
306 indio_dev
->name
= dev_name(&pdev
->dev
);
307 indio_dev
->dev
.parent
= &pdev
->dev
;
308 indio_dev
->info
= &stmpe_adc_iio_info
;
309 indio_dev
->modes
= INDIO_DIRECT_MODE
;
311 info
->stmpe
= dev_get_drvdata(pdev
->dev
.parent
);
313 np
= pdev
->dev
.of_node
;
316 dev_err(&pdev
->dev
, "no device tree node found\n");
318 of_property_read_u32(np
, "st,norequest-mask", &norequest_mask
);
320 for_each_clear_bit(i
, (unsigned long *) &norequest_mask
,
321 (STMPE_ADC_LAST_NR
+ 1)) {
322 stmpe_adc_voltage_chan(&info
->stmpe_adc_iio_channels
[num_chan
], i
);
325 stmpe_adc_temp_chan(&info
->stmpe_adc_iio_channels
[num_chan
], i
);
327 indio_dev
->channels
= info
->stmpe_adc_iio_channels
;
328 indio_dev
->num_channels
= num_chan
;
330 ret
= stmpe_adc_init_hw(info
);
334 return devm_iio_device_register(&pdev
->dev
, indio_dev
);
337 static int __maybe_unused
stmpe_adc_resume(struct device
*dev
)
339 struct iio_dev
*indio_dev
= dev_get_drvdata(dev
);
340 struct stmpe_adc
*info
= iio_priv(indio_dev
);
342 stmpe_adc_init_hw(info
);
347 static SIMPLE_DEV_PM_OPS(stmpe_adc_pm_ops
, NULL
, stmpe_adc_resume
);
349 static struct platform_driver stmpe_adc_driver
= {
350 .probe
= stmpe_adc_probe
,
353 .pm
= &stmpe_adc_pm_ops
,
357 module_platform_driver(stmpe_adc_driver
);
359 MODULE_AUTHOR("Stefan Agner <stefan.agner@toradex.com>");
360 MODULE_DESCRIPTION("STMPEXXX ADC driver");
361 MODULE_LICENSE("GPL v2");
362 MODULE_ALIAS("platform:stmpe-adc");