aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/iio/adc/mxs-lradc.c20
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);