diff options
author | Michael Thalmeier <michael.thalmeier@hale.at> | 2012-02-20 06:18:13 -0500 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-03-06 12:46:30 -0500 |
commit | 1039d762d03b573de4d46603c8583051c6d79094 (patch) | |
tree | 4de96496e62cb391cc824d7dbe328d0818f213d8 /drivers/input/touchscreen | |
parent | 4d75dd61dfb53eaa286c54fb121e5b51b106c272 (diff) |
mfd: Add pdata to set mc13783-ts conversion delay
MC13783 can be programmed to wait some clock cycles between the
touchscreen polarization and the resistance conversion. This is
needed to adjust for touchscreens with high capacitance between
plates.
Signed-off-by: Michael Thalmeier <michael.thalmeier@hale.at>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/input/touchscreen')
-rw-r--r-- | drivers/input/touchscreen/mc13783_ts.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/input/touchscreen/mc13783_ts.c b/drivers/input/touchscreen/mc13783_ts.c index ede02743eac1..48dc5b0d26f1 100644 --- a/drivers/input/touchscreen/mc13783_ts.c +++ b/drivers/input/touchscreen/mc13783_ts.c | |||
@@ -39,6 +39,7 @@ struct mc13783_ts_priv { | |||
39 | struct delayed_work work; | 39 | struct delayed_work work; |
40 | struct workqueue_struct *workq; | 40 | struct workqueue_struct *workq; |
41 | unsigned int sample[4]; | 41 | unsigned int sample[4]; |
42 | struct mc13xxx_ts_platform_data *touch; | ||
42 | }; | 43 | }; |
43 | 44 | ||
44 | static irqreturn_t mc13783_ts_handler(int irq, void *data) | 45 | static irqreturn_t mc13783_ts_handler(int irq, void *data) |
@@ -125,7 +126,9 @@ static void mc13783_ts_work(struct work_struct *work) | |||
125 | unsigned int channel = 12; | 126 | unsigned int channel = 12; |
126 | 127 | ||
127 | if (mc13xxx_adc_do_conversion(priv->mc13xxx, | 128 | if (mc13xxx_adc_do_conversion(priv->mc13xxx, |
128 | mode, channel, priv->sample) == 0) | 129 | mode, channel, |
130 | priv->touch->ato, priv->touch->atox, | ||
131 | priv->sample) == 0) | ||
129 | mc13783_ts_report_sample(priv); | 132 | mc13783_ts_report_sample(priv); |
130 | } | 133 | } |
131 | 134 | ||
@@ -179,6 +182,12 @@ static int __init mc13783_ts_probe(struct platform_device *pdev) | |||
179 | INIT_DELAYED_WORK(&priv->work, mc13783_ts_work); | 182 | INIT_DELAYED_WORK(&priv->work, mc13783_ts_work); |
180 | priv->mc13xxx = dev_get_drvdata(pdev->dev.parent); | 183 | priv->mc13xxx = dev_get_drvdata(pdev->dev.parent); |
181 | priv->idev = idev; | 184 | priv->idev = idev; |
185 | priv->touch = dev_get_platdata(&pdev->dev); | ||
186 | if (!priv->touch) { | ||
187 | dev_err(&pdev->dev, "missing platform data\n"); | ||
188 | ret = -ENODEV; | ||
189 | goto err_free_mem; | ||
190 | } | ||
182 | 191 | ||
183 | /* | 192 | /* |
184 | * We need separate workqueue because mc13783_adc_do_conversion | 193 | * We need separate workqueue because mc13783_adc_do_conversion |