Commit bf223612 authored by Vignesh R's avatar Vignesh R Committed by Dmitry Torokhov

Input: ti_am335x_tsc - read charge delay from DT

This patch reads charge delay from tsc DT node and writes to
REG_CHARGEDELAY register. If the charge delay is not specified in DT then
default value of 0x400(CHARGEDLY_OPENDLY) is used.
Signed-off-by: default avatarVignesh R <vigneshr@ti.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 344d635b
...@@ -28,6 +28,20 @@ Required properties: ...@@ -28,6 +28,20 @@ Required properties:
ti,adc-channels: List of analog inputs available for ADC. ti,adc-channels: List of analog inputs available for ADC.
AIN0 = 0, AIN1 = 1 and so on till AIN7 = 7. AIN0 = 0, AIN1 = 1 and so on till AIN7 = 7.
Optional properties:
- child "tsc"
ti,charge-delay: Length of touch screen charge delay step in terms of
ADC clock cycles. Charge delay value should be large
in order to avoid false pen-up events. This value
effects the overall sampling speed, hence need to be
kept as low as possible, while avoiding false pen-up
event. Start from a lower value, say 0x400, and
increase value until false pen-up events are avoided.
The pen-up detection happens immediately after the
charge step, so this does in fact function as a
hardware knob for adjusting the amount of "settling
time".
Example: Example:
tscadc: tscadc@44e0d000 { tscadc: tscadc@44e0d000 {
compatible = "ti,am3359-tscadc"; compatible = "ti,am3359-tscadc";
...@@ -36,6 +50,7 @@ Example: ...@@ -36,6 +50,7 @@ Example:
ti,x-plate-resistance = <200>; ti,x-plate-resistance = <200>;
ti,coordiante-readouts = <5>; ti,coordiante-readouts = <5>;
ti,wire-config = <0x00 0x11 0x22 0x33>; ti,wire-config = <0x00 0x11 0x22 0x33>;
ti,charge-delay = <0x400>;
}; };
adc { adc {
......
...@@ -52,6 +52,7 @@ struct titsc { ...@@ -52,6 +52,7 @@ struct titsc {
u32 bit_xp, bit_xn, bit_yp, bit_yn; u32 bit_xp, bit_xn, bit_yp, bit_yn;
u32 inp_xp, inp_xn, inp_yp, inp_yn; u32 inp_xp, inp_xn, inp_yp, inp_yn;
u32 step_mask; u32 step_mask;
u32 charge_delay;
}; };
static unsigned int titsc_readl(struct titsc *ts, unsigned int reg) static unsigned int titsc_readl(struct titsc *ts, unsigned int reg)
...@@ -177,7 +178,7 @@ static void titsc_step_config(struct titsc *ts_dev) ...@@ -177,7 +178,7 @@ static void titsc_step_config(struct titsc *ts_dev)
config = titsc_readl(ts_dev, REG_IDLECONFIG); config = titsc_readl(ts_dev, REG_IDLECONFIG);
titsc_writel(ts_dev, REG_CHARGECONFIG, config); titsc_writel(ts_dev, REG_CHARGECONFIG, config);
titsc_writel(ts_dev, REG_CHARGEDELAY, CHARGEDLY_OPENDLY); titsc_writel(ts_dev, REG_CHARGEDELAY, ts_dev->charge_delay);
/* coordinate_readouts + 1 ... coordinate_readouts + 2 is for Z */ /* coordinate_readouts + 1 ... coordinate_readouts + 2 is for Z */
config = STEPCONFIG_MODE_HWSYNC | config = STEPCONFIG_MODE_HWSYNC |
...@@ -368,6 +369,17 @@ static int titsc_parse_dt(struct platform_device *pdev, ...@@ -368,6 +369,17 @@ static int titsc_parse_dt(struct platform_device *pdev,
if (err < 0) if (err < 0)
return err; return err;
err = of_property_read_u32(node, "ti,charge-delay",
&ts_dev->charge_delay);
/*
* If ti,charge-delay value is not specified, then use
* CHARGEDLY_OPENDLY as the default value.
*/
if (err < 0) {
ts_dev->charge_delay = CHARGEDLY_OPENDLY;
dev_warn(&pdev->dev, "ti,charge-delay not specified\n");
}
return of_property_read_u32_array(node, "ti,wire-config", return of_property_read_u32_array(node, "ti,wire-config",
ts_dev->config_inp, ARRAY_SIZE(ts_dev->config_inp)); ts_dev->config_inp, ARRAY_SIZE(ts_dev->config_inp));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment