diff options
author | Jens Thiele <karme@karme.de> | 2015-03-23 12:04:56 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2015-03-23 12:11:11 -0400 |
commit | 4ed0e032c3cf27c6fabc154164d003c4e0ac4654 (patch) | |
tree | 47d8d96c7aa31f08c835777903bda70073601254 /drivers | |
parent | 68c581d5e7d834d8e97534cafd60bd6716ee6fbc (diff) |
Input: sun4i-ts - allow controlling filter and sensitivity via DT
This commit introduces two new optional device-tree properties:
"tp-sensitive-adjust": adjust sensitivity of pen down detection
"filter-type": select median and averaging filter
The previous fixed defaults, didn't work well for the Olimex
A13-LCD10TS (I have).
Signed-off-by: Jens Thiele <karme@karme.de>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/input/touchscreen/sun4i-ts.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/input/touchscreen/sun4i-ts.c b/drivers/input/touchscreen/sun4i-ts.c index 178d2efb8353..c0116994067d 100644 --- a/drivers/input/touchscreen/sun4i-ts.c +++ b/drivers/input/touchscreen/sun4i-ts.c | |||
@@ -30,6 +30,10 @@ | |||
30 | * These kinds of heuristics are just asking for trouble (and don't belong | 30 | * These kinds of heuristics are just asking for trouble (and don't belong |
31 | * in the kernel). So this driver offers straight forward, reliable single | 31 | * in the kernel). So this driver offers straight forward, reliable single |
32 | * touch functionality only. | 32 | * touch functionality only. |
33 | * | ||
34 | * s.a. A20 User Manual "1.15 TP" (Documentation/arm/sunxi/README) | ||
35 | * (looks like the description in the A20 User Manual v1.3 is better | ||
36 | * than the one in the A10 User Manual v.1.5) | ||
33 | */ | 37 | */ |
34 | 38 | ||
35 | #include <linux/err.h> | 39 | #include <linux/err.h> |
@@ -246,6 +250,8 @@ static int sun4i_ts_probe(struct platform_device *pdev) | |||
246 | int error; | 250 | int error; |
247 | u32 reg; | 251 | u32 reg; |
248 | bool ts_attached; | 252 | bool ts_attached; |
253 | u32 tp_sensitive_adjust = 15; | ||
254 | u32 filter_type = 1; | ||
249 | 255 | ||
250 | ts = devm_kzalloc(dev, sizeof(struct sun4i_ts_data), GFP_KERNEL); | 256 | ts = devm_kzalloc(dev, sizeof(struct sun4i_ts_data), GFP_KERNEL); |
251 | if (!ts) | 257 | if (!ts) |
@@ -322,14 +328,20 @@ static int sun4i_ts_probe(struct platform_device *pdev) | |||
322 | ts->base + TP_CTRL0); | 328 | ts->base + TP_CTRL0); |
323 | 329 | ||
324 | /* | 330 | /* |
325 | * sensitive_adjust = 15 : max, which is not all that sensitive, | 331 | * tp_sensitive_adjust is an optional property |
326 | * tp_mode = 0 : only x and y coordinates, as we don't use dual touch | 332 | * tp_mode = 0 : only x and y coordinates, as we don't use dual touch |
327 | */ | 333 | */ |
328 | writel(TP_SENSITIVE_ADJUST(15) | TP_MODE_SELECT(0), | 334 | of_property_read_u32(np, "allwinner,tp-sensitive-adjust", |
335 | &tp_sensitive_adjust); | ||
336 | writel(TP_SENSITIVE_ADJUST(tp_sensitive_adjust) | TP_MODE_SELECT(0), | ||
329 | ts->base + TP_CTRL2); | 337 | ts->base + TP_CTRL2); |
330 | 338 | ||
331 | /* Enable median filter, type 1 : 5/3 */ | 339 | /* |
332 | writel(FILTER_EN(1) | FILTER_TYPE(1), ts->base + TP_CTRL3); | 340 | * Enable median and averaging filter, optional property for |
341 | * filter type. | ||
342 | */ | ||
343 | of_property_read_u32(np, "allwinner,filter-type", &filter_type); | ||
344 | writel(FILTER_EN(1) | FILTER_TYPE(filter_type), ts->base + TP_CTRL3); | ||
333 | 345 | ||
334 | /* Enable temperature measurement, period 1953 (2 seconds) */ | 346 | /* Enable temperature measurement, period 1953 (2 seconds) */ |
335 | writel(TEMP_ENABLE(1) | TEMP_PERIOD(1953), ts->base + TP_TPR); | 347 | writel(TEMP_ENABLE(1) | TEMP_PERIOD(1953), ts->base + TP_TPR); |