diff options
| -rw-r--r-- | drivers/staging/iio/adc/mxs-lradc.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/staging/iio/adc/mxs-lradc.c b/drivers/staging/iio/adc/mxs-lradc.c index 4e574b76ead0..653af03bc69d 100644 --- a/drivers/staging/iio/adc/mxs-lradc.c +++ b/drivers/staging/iio/adc/mxs-lradc.c | |||
| @@ -220,6 +220,9 @@ struct mxs_lradc { | |||
| 220 | */ | 220 | */ |
| 221 | #define TOUCHSCREEN_VCHANNEL1 7 | 221 | #define TOUCHSCREEN_VCHANNEL1 7 |
| 222 | #define TOUCHSCREEN_VCHANNEL2 6 | 222 | #define TOUCHSCREEN_VCHANNEL2 6 |
| 223 | #define BUFFER_VCHANS_LIMITED 0x3f | ||
| 224 | #define BUFFER_VCHANS_ALL 0xff | ||
| 225 | u8 buffer_vchans; | ||
| 223 | 226 | ||
| 224 | /* | 227 | /* |
| 225 | * Furthermore, certain LRADC channels are shared between touchscreen | 228 | * Furthermore, certain LRADC channels are shared between touchscreen |
| @@ -819,7 +822,7 @@ static int mxs_lradc_read_single(struct iio_dev *iio_dev, int chan, int *val) | |||
| 819 | * used if doing raw sampling. | 822 | * used if doing raw sampling. |
| 820 | */ | 823 | */ |
| 821 | if (lradc->soc == IMX28_LRADC) | 824 | if (lradc->soc == IMX28_LRADC) |
| 822 | mxs_lradc_reg_clear(lradc, LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK, | 825 | mxs_lradc_reg_clear(lradc, LRADC_CTRL1_LRADC_IRQ_EN(0), |
| 823 | LRADC_CTRL1); | 826 | LRADC_CTRL1); |
| 824 | mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0); | 827 | mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0); |
| 825 | 828 | ||
| @@ -1266,8 +1269,9 @@ static int mxs_lradc_buffer_preenable(struct iio_dev *iio) | |||
| 1266 | } | 1269 | } |
| 1267 | 1270 | ||
| 1268 | if (lradc->soc == IMX28_LRADC) | 1271 | if (lradc->soc == IMX28_LRADC) |
| 1269 | mxs_lradc_reg_clear(lradc, LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK, | 1272 | mxs_lradc_reg_clear(lradc, |
| 1270 | LRADC_CTRL1); | 1273 | lradc->buffer_vchans << LRADC_CTRL1_LRADC_IRQ_EN_OFFSET, |
| 1274 | LRADC_CTRL1); | ||
| 1271 | mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0); | 1275 | mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0); |
| 1272 | 1276 | ||
| 1273 | for_each_set_bit(chan, iio->active_scan_mask, LRADC_MAX_TOTAL_CHANS) { | 1277 | for_each_set_bit(chan, iio->active_scan_mask, LRADC_MAX_TOTAL_CHANS) { |
| @@ -1303,8 +1307,9 @@ static int mxs_lradc_buffer_postdisable(struct iio_dev *iio) | |||
| 1303 | 1307 | ||
| 1304 | mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0); | 1308 | mxs_lradc_reg_clear(lradc, 0xff, LRADC_CTRL0); |
| 1305 | if (lradc->soc == IMX28_LRADC) | 1309 | if (lradc->soc == IMX28_LRADC) |
| 1306 | mxs_lradc_reg_clear(lradc, LRADC_CTRL1_MX28_LRADC_IRQ_EN_MASK, | 1310 | mxs_lradc_reg_clear(lradc, |
| 1307 | LRADC_CTRL1); | 1311 | lradc->buffer_vchans << LRADC_CTRL1_LRADC_IRQ_EN_OFFSET, |
| 1312 | LRADC_CTRL1); | ||
| 1308 | 1313 | ||
| 1309 | kfree(lradc->buffer); | 1314 | kfree(lradc->buffer); |
| 1310 | mutex_unlock(&lradc->lock); | 1315 | mutex_unlock(&lradc->lock); |
| @@ -1542,6 +1547,11 @@ static int mxs_lradc_probe(struct platform_device *pdev) | |||
| 1542 | 1547 | ||
| 1543 | touch_ret = mxs_lradc_probe_touchscreen(lradc, node); | 1548 | touch_ret = mxs_lradc_probe_touchscreen(lradc, node); |
| 1544 | 1549 | ||
| 1550 | if (touch_ret == 0) | ||
| 1551 | lradc->buffer_vchans = BUFFER_VCHANS_LIMITED; | ||
| 1552 | else | ||
| 1553 | lradc->buffer_vchans = BUFFER_VCHANS_ALL; | ||
| 1554 | |||
| 1545 | /* Grab all IRQ sources */ | 1555 | /* Grab all IRQ sources */ |
| 1546 | for (i = 0; i < of_cfg->irq_count; i++) { | 1556 | for (i = 0; i < of_cfg->irq_count; i++) { |
| 1547 | lradc->irq[i] = platform_get_irq(pdev, i); | 1557 | lradc->irq[i] = platform_get_irq(pdev, i); |
