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

Commit a876697b authored by Jeff LaBundy's avatar Jeff LaBundy Committed by Dmitry Torokhov
Browse files

Input: iqs5xx - get axis info before calling input_mt_init_slots()



Calling input_mt_init_slots() copies ABS_MT_POSITION_X to ABS_X and
so on, but doing so before calling touchscreen_parse_properties()
leaves ABS_X min = max = 0 which may prompt an X server to ignore
the device.

To solve this problem, wait to call input_mt_init_slots() until all
absolute axis information has been resolved (whether that's through
device tree via touchscreen_parse_properties() or from reading from
the device directly).

Signed-off-by: default avatarJeff LaBundy <jeff@labundy.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 7c7da40d
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -502,14 +502,6 @@ static int iqs5xx_axis_init(struct i2c_client *client)
		input_set_capability(input, EV_ABS, ABS_MT_POSITION_Y);
		input_set_capability(input, EV_ABS, ABS_MT_PRESSURE);

		error = input_mt_init_slots(input,
				IQS5XX_NUM_CONTACTS, INPUT_MT_DIRECT);
		if (error) {
			dev_err(&client->dev,
				"Failed to initialize slots: %d\n", error);
			return error;
		}

		input_set_drvdata(input, iqs5xx);
		iqs5xx->input = input;
	}
@@ -591,9 +583,19 @@ static int iqs5xx_axis_init(struct i2c_client *client)
	if (error)
		return error;

	return iqs5xx_write_word(client,
	error = iqs5xx_write_word(client,
				  prop.swap_x_y ? IQS5XX_X_RES : IQS5XX_Y_RES,
				  max_y);
	if (error)
		return error;

	error = input_mt_init_slots(iqs5xx->input, IQS5XX_NUM_CONTACTS,
				    INPUT_MT_DIRECT);
	if (error)
		dev_err(&client->dev, "Failed to initialize slots: %d\n",
			error);

	return error;
}

static int iqs5xx_dev_init(struct i2c_client *client)