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: Jeff LaBundy <jeff@labundy.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
Родитель
7c7da40da1
Коммит
a876697b0a
|
@ -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,
|
||||
prop.swap_x_y ? IQS5XX_X_RES : IQS5XX_Y_RES,
|
||||
max_y);
|
||||
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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче