Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -28,6 +28,20 @@ Required properties:
	ti,adc-channels: List of analog inputs available for ADC.
			 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:
	tscadc: tscadc@44e0d000 {
		compatible = "ti,am3359-tscadc";
@@ -36,6 +50,7 @@ Example:
			ti,x-plate-resistance = <200>;
			ti,coordiante-readouts = <5>;
			ti,wire-config = <0x00 0x11 0x22 0x33>;
			ti,charge-delay = <0x400>;
		};

		adc {
+13 −1
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ struct titsc {
	u32			bit_xp, bit_xn, bit_yp, bit_yn;
	u32			inp_xp, inp_xn, inp_yp, inp_yn;
	u32			step_mask;
	u32			charge_delay;
};

static unsigned int titsc_readl(struct titsc *ts, unsigned int reg)
@@ -177,7 +178,7 @@ static void titsc_step_config(struct titsc *ts_dev)

	config = titsc_readl(ts_dev, REG_IDLECONFIG);
	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 */
	config = STEPCONFIG_MODE_HWSYNC |
@@ -368,6 +369,17 @@ static int titsc_parse_dt(struct platform_device *pdev,
	if (err < 0)
		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",
			ts_dev->config_inp, ARRAY_SIZE(ts_dev->config_inp));
}