Re: [PATCH v1 2/3] Input: ili210x - add resolution to chip operations structure
From: Dmitry Torokhov
Date: Tue Nov 12 2019 - 14:42:26 EST
On Tue, Nov 12, 2019 at 11:44:28AM -0500, Sven Van Asbroeck wrote:
> Optionally allow the touch screen resolution to be set by adding
> it to the chip operations structure. If it is omitted (left zero),
> the resolution defaults to 64K. Which is the previously hard-coded
> value.
>
> Set the ili2117 resolution to 2048, as indicated in its datasheet.
>
> Link: 20191111181657.GA57214@dtor-ws/">https://lore.kernel.org/lkml/20191111181657.GA57214@dtor-ws/
> Cc: Marek Vasut <marex@xxxxxxx>
> Cc: Adam Ford <aford173@xxxxxxxxx>
> Cc: <linux-kernel@xxxxxxxxxxxxxxx>
> Cc: linux-input@xxxxxxxxxxxxxxx
> Tree: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git/log/?h=next
> Signed-off-by: Sven Van Asbroeck <TheSven73@xxxxxxxxx>
> ---
> drivers/input/touchscreen/ili210x.c | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/input/touchscreen/ili210x.c b/drivers/input/touchscreen/ili210x.c
> index a6feae5ce887..4321f0d676cc 100644
> --- a/drivers/input/touchscreen/ili210x.c
> +++ b/drivers/input/touchscreen/ili210x.c
> @@ -31,6 +31,7 @@ struct ili2xxx_chip {
> unsigned int *x, unsigned int *y);
> bool (*continue_polling)(const u8 *data, bool touch);
> unsigned int max_touches;
> + unsigned int resolution;
> };
>
> struct ili210x {
> @@ -160,6 +161,7 @@ static const struct ili2xxx_chip ili211x_chip = {
> .parse_touch_data = ili211x_touchdata_to_coords,
> .continue_polling = ili211x_decline_polling,
> .max_touches = 10,
> + .resolution = 2048,
> };
>
> static int ili251x_read_reg(struct i2c_client *client,
> @@ -336,6 +338,7 @@ static int ili210x_i2c_probe(struct i2c_client *client,
> struct gpio_desc *reset_gpio;
> struct input_dev *input;
> int error;
> + unsigned int max_xy;
>
> dev_dbg(dev, "Probing for ILI210X I2C Touschreen driver");
>
> @@ -386,8 +389,12 @@ static int ili210x_i2c_probe(struct i2c_client *client,
> input->id.bustype = BUS_I2C;
>
> /* Multi touch */
> - input_set_abs_params(input, ABS_MT_POSITION_X, 0, 0xffff, 0, 0);
> - input_set_abs_params(input, ABS_MT_POSITION_Y, 0, 0xffff, 0, 0);
> + if (chip->resolution)
> + max_xy = chip->resolution - 1;
> + else
> + max_xy = 0xffff;
max_xy = (chip->resolution ?: 65536) - 1;
> + input_set_abs_params(input, ABS_MT_POSITION_X, 0, max_xy, 0, 0);
> + input_set_abs_params(input, ABS_MT_POSITION_Y, 0, max_xy, 0, 0);
> touchscreen_parse_properties(input, true, &priv->prop);
>
> error = input_mt_init_slots(input, priv->chip->max_touches,
> --
> 2.17.1
>
--
Dmitry