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"); |