All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rob Herring <robh@kernel.org>
To: "H. Nikolaus Schaller" <hns@goldelico.com>
Cc: "Dmitry Torokhov" <dmitry.torokhov@gmail.com>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Benoît Cousson" <bcousson@baylibre.com>,
	"Tony Lindgren" <tony@atomide.com>,
	"Russell King" <linux@armlinux.org.uk>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"Michael Welling" <mwelling@ieee.org>,
	"Mika Penttilä" <mika.penttila@nextfour.com>,
	"Javier Martinez Canillas" <javier@osg.samsung.com>,
	"Igor Grinberg" <grinberg@compulab.co.il>,
	"Sebastian Reichel" <sre@kernel.org>,
	"Andrew F. Davis" <afd@ti.com>,
	linux-input@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org,
	letux-kernel@openphoenux.org, linux-iio@vger.kernel.org
Subject: Re: [PATCH v3 6/8] drivers:input:ads7846(+tsc2046): add new common binding names, pre-calibration and flipping
Date: Fri, 23 Sep 2016 17:50:23 -0500	[thread overview]
Message-ID: <20160923225023.GA9994@rob-hp-laptop> (raw)
In-Reply-To: <7f69bbab0e932cb00bd28668f56c8a30e83c59e0.1474634475.git.hns@goldelico.com>

On Fri, Sep 23, 2016 at 02:41:14PM +0200, H. Nikolaus Schaller wrote:
> commit b98abe52fa8e ("Input: add common DT binding for touchscreens")
> introduced common DT bindings for touchscreens [1] and a helper function to
> parse the DT.
> 
> commit ed7c9870c9bc ("Input: of_touchscreen - add support for inverted / swapped axes")
> added another helper for parsing axis inversion and swapping
> and applying them to x and y coordinates.
> 
> Both helpers have been integrated to accommodate any orientation of the
> touch panel in relation to the LCD.
> 
> A new feature is to introduce scaling the min/max ADC values to the screen
> size.
> 
> This makes it possible to pre-calibrate the touch so that is (almost)
> exactly matches the LCD pixel coordinates it is glued onto. This allows to
> well enough operate the touch before a user space calibration step can
> improve the precision.

This appears to be the prior patch's commit msg, or you don't need ADC 
values in DT for this one?

> 
> [1]: Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt
> 
> Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
> ---
>  .../devicetree/bindings/input/ads7846.txt          |  9 +++-
>  drivers/input/touchscreen/ads7846.c                | 60 ++++++++++++++++++----
>  2 files changed, 57 insertions(+), 12 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/input/ads7846.txt b/Documentation/devicetree/bindings/input/ads7846.txt
> index 9fc47b0..29f91ed 100644
> --- a/Documentation/devicetree/bindings/input/ads7846.txt
> +++ b/Documentation/devicetree/bindings/input/ads7846.txt
> @@ -26,6 +26,12 @@ Additional required properties:
>  
>  Optional properties:
>  
> +You can optionally specify any of the touchscreen parameters described in
> +
> +	Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt
> +
> +This allows to scale, invert or swap coordinates and define the fuzz factors.
> +
>  	ti,vref-delay-usecs		vref supply delay in usecs, 0 for
>  					external vref (u16).
>  	ti,vref-mv			The VREF voltage, in millivolts (u16).
> @@ -33,7 +39,7 @@ Optional properties:
>  					(ADS7846).
>  	ti,keep-vref-on			set to keep vref on for differential
>  					measurements as well
> -	ti,swap-xy			swap x and y axis
> +	ti,swap-xy			deprecated name for touchscreen-swapped-x-y
>  	ti,settle-delay-usec		Settling time of the analog signals;
>  					a function of Vcc and the capacitance
>  					on the X/Y drivers.  If set to non-zero,
> @@ -82,6 +88,7 @@ Example for a TSC2046 chip connected to an McSPI controller of an OMAP SoC::
>  			pendown-gpio = <&gpio1 8 0>;
>  			vcc-supply = <&reg_vcc3>;
>  
> +			touchscreen-swapped-x-y;
>  			ti,x-min = /bits/ 16 <0>;
>  			ti,x-max = /bits/ 16 <8000>;
>  			ti,y-min = /bits/ 16 <0>;
> diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
> index 1ce3ecb..400e421 100644
> --- a/drivers/input/touchscreen/ads7846.c
> +++ b/drivers/input/touchscreen/ads7846.c
> @@ -34,6 +34,7 @@
>  #include <linux/spi/ads7846.h>
>  #include <linux/regulator/consumer.h>
>  #include <linux/module.h>
> +#include <linux/input/touchscreen.h>
>  #include <asm/irq.h>
>  
>  /*
> @@ -109,8 +110,13 @@ struct ads7846 {
>  	u16			vref_delay_usecs;
>  	u16			x_plate_ohms;
>  	u16			pressure_max;
> +	u16			x_min;
> +	u16			x_max;
> +	u16			y_min;
> +	u16			y_max;
> +
> +	struct touchscreen_properties prop;
>  
> -	bool			swap_xy;
>  	bool			use_internal;
>  
>  	struct ads7846_packet	*packet;
> @@ -825,22 +831,36 @@ static void ads7846_report_state(struct ads7846 *ts)
>  	 */
>  	if (Rt) {
>  		struct input_dev *input = ts->input;
> +		int sx, sy;
> +
> +		dev_dbg(&ts->spi->dev,
> +			"Raw point(%4d,%4d), pressure (%4u)\n",
> +				x, y, Rt);
> +
> +		/* scale ADC values to desired output range */
> +		sx = (ts->prop.max_x * (x - ts->x_min))
> +			/ (ts->x_max - ts->x_min);
> +		sy = (ts->prop.max_y * (y - ts->y_min))
> +			/ (ts->y_max - ts->y_min);
>  
> -		if (ts->swap_xy)
> -			swap(x, y);
> +		dev_dbg(&ts->spi->dev,
> +			"Scaled point(%4d,%4d), pressure (%4u)\n",
> +				sx, sy, Rt);
>  
> +		/* report event */
>  		if (!ts->pendown) {
>  			input_report_key(input, BTN_TOUCH, 1);
>  			ts->pendown = true;
>  			dev_vdbg(&ts->spi->dev, "DOWN\n");
>  		}
>  
> -		input_report_abs(input, ABS_X, x);
> -		input_report_abs(input, ABS_Y, y);
> +		touchscreen_report_pos(ts->input, &ts->prop,
> +				       (unsigned int) sx, (unsigned int) sy,
> +				       false);
>  		input_report_abs(input, ABS_PRESSURE, ts->pressure_max - Rt);
>  
>  		input_sync(input);
> -		dev_vdbg(&ts->spi->dev, "%4d/%4d/%4d\n", x, y, Rt);
> +		dev_vdbg(&ts->spi->dev, "%4d/%4d/%4d\n", sx, sy, Rt);
>  	}
>  }
>  
> @@ -1212,6 +1232,8 @@ static const struct ads7846_platform_data *ads7846_probe_dt(struct device *dev)
>  	pdata->keep_vref_on = of_property_read_bool(node, "ti,keep-vref-on");
>  
>  	pdata->swap_xy = of_property_read_bool(node, "ti,swap-xy");
> +	if (pdata->swap_xy)
> +		dev_notice(dev, "please update device tree to use touchscreen-swapped-x-y");
>  
>  	of_property_read_u16(node, "ti,settle-delay-usec",
>  			     &pdata->settle_delay_usecs);
> @@ -1315,7 +1337,6 @@ static int ads7846_probe(struct spi_device *spi)
>  	ts->pressure_max = pdata->pressure_max ? : ~0;
>  
>  	ts->vref_mv = pdata->vref_mv;
> -	ts->swap_xy = pdata->swap_xy;
>  
>  	if (pdata->filter != NULL) {
>  		if (pdata->filter_init != NULL) {
> @@ -1355,18 +1376,35 @@ static int ads7846_probe(struct spi_device *spi)
>  	input_dev->dev.parent = &spi->dev;
>  
>  	input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
> +	input_dev->absbit[0] = BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) |
> +				BIT_MASK(ABS_PRESSURE);
>  	input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
> +
> +	ts->x_min = pdata->x_min ? : 0;
> +	ts->x_max = pdata->x_max ? : MAX_12BIT;
> +	ts->y_min = pdata->y_min ? : 0;
> +	ts->y_max = pdata->y_max ? : MAX_12BIT;
> +
>  	input_set_abs_params(input_dev, ABS_X,
> -			pdata->x_min ? : 0,
> -			pdata->x_max ? : MAX_12BIT,
> +			ts->x_min,
> +			ts->x_max,
>  			0, 0);
>  	input_set_abs_params(input_dev, ABS_Y,
> -			pdata->y_min ? : 0,
> -			pdata->y_max ? : MAX_12BIT,
> +			ts->y_min,
> +			ts->y_max,
>  			0, 0);
>  	input_set_abs_params(input_dev, ABS_PRESSURE,
>  			pdata->pressure_min, pdata->pressure_max, 0, 0);
>  
> +	if (spi->dev.of_node) {
> +		input_abs_set_min(input_dev, ABS_X, 0);
> +		input_abs_set_min(input_dev, ABS_Y, 0);
> +
> +		touchscreen_parse_properties(ts->input, false, &ts->prop);
> +	}
> +
> +	ts->prop.swap_x_y |= pdata->swap_xy;
> +
>  	ads7846_setup_spi_msg(ts, pdata);
>  
>  	ts->reg = regulator_get(&spi->dev, "vcc");
> -- 
> 2.7.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2016-09-23 22:50 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-23 12:41 [PATCH v3 0/8] drivers: touchscreen: tsc2007 and ads7846/tsc2046 improvements (use common touchscreen bindings, pre-calibration, spi fix and provide iio raw values) H. Nikolaus Schaller
2016-09-23 12:41 ` [PATCH v3 1/8] drivers:input:tsc2007: add new common binding names, pre-calibration, flipping and rotation H. Nikolaus Schaller
2016-09-23 22:47   ` Rob Herring
2016-09-23 22:47     ` Rob Herring
2016-09-24  0:31     ` Sebastian Reichel
2016-09-24  5:55       ` H. Nikolaus Schaller
2016-09-30 14:16         ` Sebastian Reichel
2016-09-30 14:16           ` Sebastian Reichel
2016-09-30 14:40           ` H. Nikolaus Schaller
2016-09-30 14:40             ` H. Nikolaus Schaller
2016-10-17 13:57             ` H. Nikolaus Schaller
2016-10-17 13:57               ` H. Nikolaus Schaller
2016-09-24  5:28     ` H. Nikolaus Schaller
2016-09-24  5:28       ` H. Nikolaus Schaller
2016-09-24  5:28       ` H. Nikolaus Schaller
2016-09-30 16:23   ` [Letux-kernel] " Christ van Willegen
2016-09-30 16:23     ` Christ van Willegen
2016-09-30 16:36     ` H. Nikolaus Schaller
2016-09-30 16:36       ` H. Nikolaus Schaller
2016-09-30 16:36       ` H. Nikolaus Schaller
2016-09-23 12:41 ` [PATCH v3 2/8] drivers:input:tsc2007: send pendown and penup only once like ads7846(+tsc2046) driver does H. Nikolaus Schaller
2016-09-23 12:41 ` [PATCH v3 3/8] drivers:input:tsc2007: add iio interface to read external ADC input, temperature and raw conversion values H. Nikolaus Schaller
2016-09-23 12:41   ` H. Nikolaus Schaller
2016-09-24 16:07   ` Jonathan Cameron
2016-09-24 16:07     ` Jonathan Cameron
2016-09-24 17:07     ` H. Nikolaus Schaller
2016-09-24 17:07       ` H. Nikolaus Schaller
2016-09-24 17:26       ` Jonathan Cameron
2016-09-24 17:26         ` Jonathan Cameron
2016-09-24 17:42         ` H. Nikolaus Schaller
2016-09-24 17:42           ` H. Nikolaus Schaller
2016-09-24 17:44       ` Dmitry Torokhov
2016-09-24 17:44         ` Dmitry Torokhov
2016-09-24 17:51         ` H. Nikolaus Schaller
2016-09-24 17:51           ` H. Nikolaus Schaller
2016-09-23 12:41 ` [PATCH v3 4/8] drivers:input:tsc2007: check for presence and power down tsc2007 during probe H. Nikolaus Schaller
2016-09-23 12:41 ` [PATCH v3 5/8] DT:omap3+tsc2007: use new common touchscreen bindings H. Nikolaus Schaller
2016-09-23 12:41   ` H. Nikolaus Schaller
2016-09-23 12:41 ` [PATCH v3 6/8] drivers:input:ads7846(+tsc2046): add new common binding names, pre-calibration and flipping H. Nikolaus Schaller
2016-09-23 22:50   ` Rob Herring [this message]
2016-09-23 12:41 ` [PATCH v3 7/8] drivers:input:ads7846(+tsc2046): fix spi module table H. Nikolaus Schaller
2016-09-23 12:41 ` [PATCH v3 8/8] DT:omap3+ads7846: use new common touchscreen bindings H. Nikolaus Schaller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160923225023.GA9994@rob-hp-laptop \
    --to=robh@kernel.org \
    --cc=afd@ti.com \
    --cc=arnd@arndb.de \
    --cc=bcousson@baylibre.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=grinberg@compulab.co.il \
    --cc=hns@goldelico.com \
    --cc=javier@osg.samsung.com \
    --cc=letux-kernel@openphoenux.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=mika.penttila@nextfour.com \
    --cc=mwelling@ieee.org \
    --cc=sre@kernel.org \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.