aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/touchscreen/mc13783_ts.c
diff options
context:
space:
mode:
authorMichael Thalmeier <michael.thalmeier@hale.at>2012-02-20 12:18:13 +0100
committerSamuel Ortiz <sameo@linux.intel.com>2012-03-06 18:46:30 +0100
commit1039d762d03b573de4d46603c8583051c6d79094 (patch)
tree4de96496e62cb391cc824d7dbe328d0818f213d8 /drivers/input/touchscreen/mc13783_ts.c
parentmfd: Add missing regmap_exit to free a previously allocated da9052 register map (diff)
downloadlinux-dev-1039d762d03b573de4d46603c8583051c6d79094.tar.xz
linux-dev-1039d762d03b573de4d46603c8583051c6d79094.zip
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/mc13783_ts.c')
-rw-r--r--drivers/input/touchscreen/mc13783_ts.c11
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 {
struct delayed_work work;
struct workqueue_struct *workq;
unsigned int sample[4];
+ struct mc13xxx_ts_platform_data *touch;
};
static irqreturn_t mc13783_ts_handler(int irq, void *data)
@@ -125,7 +126,9 @@ static void mc13783_ts_work(struct work_struct *work)
unsigned int channel = 12;
if (mc13xxx_adc_do_conversion(priv->mc13xxx,
- mode, channel, priv->sample) == 0)
+ mode, channel,
+ priv->touch->ato, priv->touch->atox,
+ priv->sample) == 0)
mc13783_ts_report_sample(priv);
}
@@ -179,6 +182,12 @@ static int __init mc13783_ts_probe(struct platform_device *pdev)
INIT_DELAYED_WORK(&priv->work, mc13783_ts_work);
priv->mc13xxx = dev_get_drvdata(pdev->dev.parent);
priv->idev = idev;
+ priv->touch = dev_get_platdata(&pdev->dev);
+ if (!priv->touch) {
+ dev_err(&pdev->dev, "missing platform data\n");
+ ret = -ENODEV;
+ goto err_free_mem;
+ }
/*
* We need separate workqueue because mc13783_adc_do_conversion