linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "H. Nikolaus Schaller" <hns@goldelico.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: "Sebastian Reichel" <sre@kernel.org>,
	"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>,
	"Andrew F. Davis" <afd@ti.com>, "Mark Brown" <broonie@kernel.org>,
	"Jonathan Cameron" <jic23@kernel.org>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Alexander Stein" <alexander.stein@systec-electronic.com>,
	"Eric Engestrom" <eric@engestrom.ch>,
	"Hans de Goede" <hdegoede@redhat.com>,
	"Benjamin Tissoires" <benjamin.tissoires@redhat.com>,
	"Petr Cvek" <petr.cvek@tul.cz>,
	"Mauro Carvalho Chehab" <mchehab@kernel.org>,
	"Hans Verkuil" <hans.verkuil@cisco.com>,
	"Nick Dyer" <nick@shmanahar.org>,
	"Siebren Vroegindeweij" <siebren.vroegindeweij@hotmail.com>,
	"Michel Verlaan" <michel.verl@gmail.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,
	kernel@pyra-handheld.com
Subject: Re: [PATCH v9 1/8] drivers:input:tsc2007: add new common binding names, pre-calibration, flipping and rotation
Date: Sat, 28 Jan 2017 22:44:35 +0100	[thread overview]
Message-ID: <1F6355E1-A5E3-41A6-908F-619A15581BEF@goldelico.com> (raw)
In-Reply-To: <20170128193342.GB38136@dtor-ws>

Hi Dmitry,

> Am 28.01.2017 um 20:33 schrieb Dmitry Torokhov <dmitry.torokhov@gmail.com>:
> 
> Hi Nikolaus,
> 
> On Wed, Dec 28, 2016 at 03:53:16PM +0100, 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.
> 
> I question whether doing scaling in kernel is really right solution.

Since lower left corner does not exactly report [0 0] and upper right corner
does not report [4095 4095] from the ADC we need offset and steepness correction
of the ADC values.

This steepness is the scaling that must happen in kernel and I don't understand
why you want to propagate this ADC errors to user-space by avoiding scaling.

Let me iterate what we want to achieve:
* use new common bindings
* offset and steepness calibration of the ADC (called pre-calibration).
  This makes a real device much more reliable to operate with factory installed
  scaling factors.
* flipping and rotation

(note that touch pixel to LCD pixel scaling is not explicitly on this list!)

Now to achieve the ADC pre-calibration we must calculate

	x' = (x - ti,min-x) / (ti,max-x-ti,min-x) giving a rante from 0.0 ... 1.0

This is scaled up to what is defined by touchscreen-size-x, i.e.

	x' = (touchscreen-size-x * (x - ti,min-x)) / (ti,max-x-ti,min-x)

How do you want to avoid this scaling to take place? It happens automatically.
It is not even an additional line of code. And is necessary for compensating ADC
offsets and steepness.

So the only way to avoid the scaling option is to eliminate the precalibration/ADC
compensation which is essential for a device which has no means to properly
calibrate before operating the device through touch.

The other option would be to avoid common bindings and set

	touchscreen-size-x = (ti,max-x-ti,min-x)

This is heavily dependent on specific ADC offsets forwarded to user-space.
IMHO the worst we can do (and the current tsc2007 driver does it that way!).

> 
> Why do you want this?

It seems that you assume that we want to enforce 1:1 scaling between touch pixels
and LCD pixels and have designed code to achieve exactly that.

This is not the case. It is just a byproduct that you can do it.

And since it is easier to understand we have made the examples this way.

> If your touch resolution is lower than your screen
> then it might be useful, but if it is lower then you are losing data
> that can be very helpful for gesture recognition, and I hope you design
> your userspace so it can handle not only "bad" hardware, but "good" as
> well. And even with "bad" there are a lot of tricks that can be done to
> get "better" touch position in userspace.

You can just *choose* DT parameters touchscreen-size-x to match the LCD size.
This of course reduces the touch precision to full LCD pixels. For finger-
touch operated devices, subpixel precision is rarely needed.

Also, some user-spaces (e.g. older Replicant for GTA04) assume that there is
such an 1:1 mapping and they will be perfectly happy about this. 

But, if you can modify your user-space easily, you can also choose a different
factor.

You can for example define touchscreen-size-x=<4096> and then you get almost
the highest precision of the ADC and won't loose any bits. Or even define a
bigger range and get steps >1 bit.

LCD driver (e.g. X11 calibration matrix) can scale it down again to LCD pixels.

So effectively we get for LCD pixels when the touch sets a mouse pointer:

	x'' = user-space-scale * <<input-event<< ((touchscreen-size-x * (x - ti,min-x)) / (ti,max-x-ti,min-x))

The most simple setup would then be but others are possible:

	user-space-scale = 1
	touchscreen-size-x = LCD-size-x

Let me cite myself:

>> This makes it possible to pre-calibrate the touch so that is (almost)


> 
>> 
>> Please note that the old ti,fuzz properties have been removed since they
>> are replaced by the common bindings touchscreen-fuzz-x/y/z.
>> 
>> Finally, calculate_pressure has been renamed to calculate_resistance
>> because that is what it is doing.
> 
> That is not what your patch does though. In the presence of
> "ti,report-resistance" parameter you start reporting resistance through
> ABS_PRESSURE

Well, there is some historic confusion wether this driver reports resistance
or pressure.

The unpatched tsc2007 driver does it wrong (please test!) and we fix it on
the fly (because a separate patch is much more complex than doing it right
immediately).

This ti,report-resistance property is a means to get the old (wrong) meaning back
in case someone urgently needs it and can't fix the user-space workaround which
he must be using.

AFAIK there is no mainline board using the DT except ours (and the upcoming
OMAP5-Pyra), so we shouldn't care too much. If you prefer, you can remove this
compatibility property. We don't need it for our devices.

That the function name is wrong is a second issue and this double negation might
confuse a litte.

Please test on a real device if the patched driver reports pressure now (unless
ti,report-resistance is specified).

> without any indication to the userspace that meaning of
> event changed. This is no better if than reporting it through ABS_X. You
> should not override meaning of input events.

BR and thanks,
Nikolaus

  reply	other threads:[~2017-01-28 21:45 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-28 14:53 [PATCH v9 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-12-28 14:53 ` [PATCH v9 1/8] drivers:input:tsc2007: add new common binding names, pre-calibration, flipping and rotation H. Nikolaus Schaller
2017-01-09 17:43   ` Rob Herring
2017-01-28 19:33   ` Dmitry Torokhov
2017-01-28 21:44     ` H. Nikolaus Schaller [this message]
2017-02-17 20:40       ` Dmitry Torokhov
2017-02-18  3:22         ` Sebastian Reichel
2017-02-18 11:33           ` H. Nikolaus Schaller
2017-02-18 23:44             ` Sebastian Reichel
2017-02-19 12:07               ` H. Nikolaus Schaller
2017-02-19 20:15                 ` Sebastian Reichel
2017-02-20 16:49                   ` H. Nikolaus Schaller
2017-02-18  7:45         ` [Letux-kernel] " Andreas Kemnade
2017-02-18  9:15         ` Pavel Machek
2017-02-18 11:33           ` H. Nikolaus Schaller
2017-02-18 18:08             ` Pavel Machek
2017-02-18 19:17               ` H. Nikolaus Schaller
2017-02-18 22:54                 ` Pavel Machek
2017-02-19 12:05                   ` H. Nikolaus Schaller
2017-02-19 14:17                     ` Pavel Machek
2017-02-19 17:04                       ` H. Nikolaus Schaller
2017-02-19 17:15                         ` Pavel Machek
2017-02-19 17:51                           ` H. Nikolaus Schaller
2017-02-19 19:05                             ` Pavel Machek
2017-02-19 19:31                               ` H. Nikolaus Schaller
2017-02-19 20:57                                 ` Pavel Machek
2017-02-19 22:01                                   ` H. Nikolaus Schaller
2017-02-19 22:19                                     ` Pavel Machek
2017-02-20 16:50                                       ` H. Nikolaus Schaller
2017-02-20 19:29                                         ` Pavel Machek
2017-02-20 20:20                                           ` H. Nikolaus Schaller
2017-02-20 22:26                                         ` Petr Cvek
2017-02-21  8:29                                           ` H. Nikolaus Schaller
2017-02-19 22:29                                   ` [Letux-kernel] " Andreas Kemnade
2017-02-19 22:39                                     ` Pavel Machek
2017-02-20 16:50                                       ` H. Nikolaus Schaller
2017-02-20 19:32                                         ` Pavel Machek
2017-02-20 20:22                                           ` H. Nikolaus Schaller
2017-02-20 20:50                                             ` H. Nikolaus Schaller
2017-02-18 11:32         ` H. Nikolaus Schaller
2017-02-20  1:07           ` Dmitry Torokhov
2017-02-20 16:50             ` H. Nikolaus Schaller
2017-02-20 19:42               ` Pali Rohár
2017-02-20 20:35                 ` H. Nikolaus Schaller
2017-02-20 21:07                   ` Pali Rohár
2017-02-20 21:24                     ` H. Nikolaus Schaller
2017-02-20 21:54                       ` Pali Rohár
2017-02-21  6:42                         ` H. Nikolaus Schaller
2017-02-21  8:53                           ` Pali Rohár
2017-02-20 21:08                 ` Pali Rohár
2017-02-20 21:27                   ` H. Nikolaus Schaller
2017-02-20 21:50                     ` Dmitry Torokhov
2017-02-20 22:21                       ` Petr Cvek
2017-02-20 22:24                         ` Dmitry Torokhov
2017-02-21  6:56                           ` H. Nikolaus Schaller
2017-02-20 22:45                         ` Pali Rohár
2017-02-21  6:36                       ` H. Nikolaus Schaller
2017-02-21  9:09                         ` Pali Rohár
2017-02-21 17:07                           ` [Letux-kernel] " Andreas Kemnade
2017-02-20 22:04                     ` Pali Rohár
2017-02-21  6:49                       ` H. Nikolaus Schaller
2017-02-21  7:14                 ` H. Nikolaus Schaller
2017-02-21  8:47                   ` Pali Rohár
2017-02-21  8:57                     ` [Letux-kernel] " Christ van Willegen
2017-02-21 11:07               ` Pavel Machek
2016-12-28 14:53 ` [PATCH v9 2/8] drivers:input:tsc2007: check for presence and power down tsc2007 during probe H. Nikolaus Schaller
2017-02-17 20:52   ` Dmitry Torokhov
2016-12-28 14:53 ` [PATCH v9 3/8] DT:omap3+tsc2007: use new common touchscreen bindings H. Nikolaus Schaller
2016-12-28 14:53 ` [PATCH v9 4/8] drivers:input:ads7846(+tsc2046): add new common binding names, pre-calibration and flipping H. Nikolaus Schaller
2016-12-28 14:53 ` [PATCH v9 5/8] dt-bindings: input: move ads7846 bindings to touchscreen subdirectory H. Nikolaus Schaller
2017-02-23  9:54   ` H. Nikolaus Schaller
2016-12-28 14:53 ` [PATCH v9 6/8] drivers:input:ads7846(+tsc2046): fix spi module table H. Nikolaus Schaller
2017-01-28 19:35   ` Dmitry Torokhov
2017-01-29  8:39     ` H. Nikolaus Schaller
2017-01-29 18:01       ` Dmitry Torokhov
2017-01-29 18:25         ` H. Nikolaus Schaller
2017-02-01 20:20           ` H. Nikolaus Schaller
2017-02-01 21:14             ` Javier Martinez Canillas
2017-02-01 22:28               ` Dmitry Torokhov
2017-02-01 22:50                 ` Javier Martinez Canillas
2017-02-02  5:47                 ` H. Nikolaus Schaller
2016-12-28 14:53 ` [PATCH v9 7/8] DT:omap3+ads7846: use new common touchscreen bindings H. Nikolaus Schaller
2016-12-28 14:53 ` [PATCH v9 8/8] drivers:input:tsc2007: add iio interface to read external ADC input and temperature H. Nikolaus Schaller
2016-12-30 20:36   ` Jonathan Cameron
2017-02-17 21:27     ` Dmitry Torokhov
2017-02-18 11:35       ` H. Nikolaus Schaller
2017-01-16  6:34 ` [PATCH v9 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
2017-01-21 13:08   ` Jonathan Cameron
2017-01-21 13:17     ` H. Nikolaus Schaller
2017-01-28 18:16       ` [Letux-kernel] " H. Nikolaus Schaller
2017-02-12 15:18         ` H. Nikolaus Schaller
2017-02-15 14:03           ` H. Nikolaus Schaller
2017-02-17 20:43             ` Dmitry Torokhov
2017-02-18 11:30               ` 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=1F6355E1-A5E3-41A6-908F-619A15581BEF@goldelico.com \
    --to=hns@goldelico.com \
    --cc=afd@ti.com \
    --cc=alexander.stein@systec-electronic.com \
    --cc=arnd@arndb.de \
    --cc=bcousson@baylibre.com \
    --cc=benjamin.tissoires@redhat.com \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=eric@engestrom.ch \
    --cc=grinberg@compulab.co.il \
    --cc=hans.verkuil@cisco.com \
    --cc=hdegoede@redhat.com \
    --cc=javier@osg.samsung.com \
    --cc=jic23@kernel.org \
    --cc=kernel@pyra-handheld.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=mchehab@kernel.org \
    --cc=michel.verl@gmail.com \
    --cc=mika.penttila@nextfour.com \
    --cc=mwelling@ieee.org \
    --cc=nick@shmanahar.org \
    --cc=petr.cvek@tul.cz \
    --cc=robh+dt@kernel.org \
    --cc=siebren.vroegindeweij@hotmail.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).