stmpe-adc.c (2a267e7c41aa88215de2b542de797d03d16ecdfd) stmpe-adc.c (2abd293703ebafe8ae64876936ad345c6716cd9a)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * STMicroelectronics STMPE811 IIO ADC Driver
4 *
5 * 4 channel, 10/12-bit ADC
6 *
7 * Copyright (C) 2013-2018 Toradex AG <stefan.agner@toradex.com>
8 */

--- 64 unchanged lines hidden (view full) ---

73 }
74
75 stmpe_reg_write(info->stmpe, STMPE_REG_ADC_INT_EN,
76 STMPE_ADC_CH(info->channel));
77
78 stmpe_reg_write(info->stmpe, STMPE_REG_ADC_CAPT,
79 STMPE_ADC_CH(info->channel));
80
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * STMicroelectronics STMPE811 IIO ADC Driver
4 *
5 * 4 channel, 10/12-bit ADC
6 *
7 * Copyright (C) 2013-2018 Toradex AG <stefan.agner@toradex.com>
8 */

--- 64 unchanged lines hidden (view full) ---

73 }
74
75 stmpe_reg_write(info->stmpe, STMPE_REG_ADC_INT_EN,
76 STMPE_ADC_CH(info->channel));
77
78 stmpe_reg_write(info->stmpe, STMPE_REG_ADC_CAPT,
79 STMPE_ADC_CH(info->channel));
80
81 *val = info->value;
82
83 ret = wait_for_completion_interruptible_timeout
84 (&info->completion, STMPE_ADC_TIMEOUT);
85
86 if (ret <= 0) {
87 mutex_unlock(&info->lock);
88 if (ret == 0)
89 return -ETIMEDOUT;
90 else

--- 88 unchanged lines hidden (view full) ---

179 return -EINVAL;
180}
181
182static irqreturn_t stmpe_adc_isr(int irq, void *dev_id)
183{
184 struct stmpe_adc *info = (struct stmpe_adc *)dev_id;
185 u16 data;
186
81 ret = wait_for_completion_interruptible_timeout
82 (&info->completion, STMPE_ADC_TIMEOUT);
83
84 if (ret <= 0) {
85 mutex_unlock(&info->lock);
86 if (ret == 0)
87 return -ETIMEDOUT;
88 else

--- 88 unchanged lines hidden (view full) ---

177 return -EINVAL;
178}
179
180static irqreturn_t stmpe_adc_isr(int irq, void *dev_id)
181{
182 struct stmpe_adc *info = (struct stmpe_adc *)dev_id;
183 u16 data;
184
187 if (info->channel > STMPE_TEMP_CHANNEL)
188 return IRQ_NONE;
189
190 if (info->channel <= STMPE_ADC_LAST_NR) {
191 int int_sta;
192
193 int_sta = stmpe_reg_read(info->stmpe, STMPE_REG_ADC_INT_STA);
194
195 /* Is the interrupt relevant */
196 if (!(int_sta & STMPE_ADC_CH(info->channel)))
197 return IRQ_NONE;
198
199 /* Read value */
200 stmpe_block_read(info->stmpe,
201 STMPE_REG_ADC_DATA_CH(info->channel), 2, (u8 *) &data);
202
203 stmpe_reg_write(info->stmpe, STMPE_REG_ADC_INT_STA, int_sta);
204 } else if (info->channel == STMPE_TEMP_CHANNEL) {
205 /* Read value */
206 stmpe_block_read(info->stmpe, STMPE_REG_TEMP_DATA, 2,
207 (u8 *) &data);
185 if (info->channel <= STMPE_ADC_LAST_NR) {
186 int int_sta;
187
188 int_sta = stmpe_reg_read(info->stmpe, STMPE_REG_ADC_INT_STA);
189
190 /* Is the interrupt relevant */
191 if (!(int_sta & STMPE_ADC_CH(info->channel)))
192 return IRQ_NONE;
193
194 /* Read value */
195 stmpe_block_read(info->stmpe,
196 STMPE_REG_ADC_DATA_CH(info->channel), 2, (u8 *) &data);
197
198 stmpe_reg_write(info->stmpe, STMPE_REG_ADC_INT_STA, int_sta);
199 } else if (info->channel == STMPE_TEMP_CHANNEL) {
200 /* Read value */
201 stmpe_block_read(info->stmpe, STMPE_REG_TEMP_DATA, 2,
202 (u8 *) &data);
203 } else {
204 return IRQ_NONE;
208 }
209
210 info->value = (u32) be16_to_cpu(data);
211 complete(&info->completion);
212
213 return IRQ_HANDLED;
214}
215

--- 133 unchanged lines hidden (view full) ---

349
350static struct platform_driver stmpe_adc_driver = {
351 .probe = stmpe_adc_probe,
352 .driver = {
353 .name = "stmpe-adc",
354 .pm = &stmpe_adc_pm_ops,
355 },
356};
205 }
206
207 info->value = (u32) be16_to_cpu(data);
208 complete(&info->completion);
209
210 return IRQ_HANDLED;
211}
212

--- 133 unchanged lines hidden (view full) ---

346
347static struct platform_driver stmpe_adc_driver = {
348 .probe = stmpe_adc_probe,
349 .driver = {
350 .name = "stmpe-adc",
351 .pm = &stmpe_adc_pm_ops,
352 },
353};
357
358module_platform_driver(stmpe_adc_driver);
359
354module_platform_driver(stmpe_adc_driver);
355
356static const struct of_device_id stmpe_adc_ids[] = {
357 { .compatible = "st,stmpe-adc", },
358 { },
359};
360MODULE_DEVICE_TABLE(of, stmpe_adc_ids);
361
360MODULE_AUTHOR("Stefan Agner <stefan.agner@toradex.com>");
361MODULE_DESCRIPTION("STMPEXXX ADC driver");
362MODULE_LICENSE("GPL v2");
363MODULE_ALIAS("platform:stmpe-adc");
362MODULE_AUTHOR("Stefan Agner <stefan.agner@toradex.com>");
363MODULE_DESCRIPTION("STMPEXXX ADC driver");
364MODULE_LICENSE("GPL v2");
365MODULE_ALIAS("platform:stmpe-adc");