Commit 38a38f5a authored by Hans de Goede's avatar Hans de Goede

Input: silead - Always support 10 fingers

When support for Silead touchscreens was orginal added some touchscreens
with older firmware versions only supported 5 fingers and this was made
the default requiring the setting of a "silead,max-fingers=10" uint32
device-property for all touchscreen models which do support 10 fingers.

There are very few models with the old 5 finger fw, so in practice the
setting of the "silead,max-fingers=10" is boilerplate which needs to
be copy and pasted to every touchscreen config.

Reporting that 10 fingers are supported on devices which only support
5 fingers doesn't cause any problems for userspace in practice, since
at max 4 finger gestures are supported anyways. Drop the max_fingers
configuration and simply always assume 10 fingers.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Acked-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Link: https://lore.kernel.org/r/20240525193854.39130-2-hdegoede@redhat.com
parent 30500526
...@@ -71,7 +71,6 @@ struct silead_ts_data { ...@@ -71,7 +71,6 @@ struct silead_ts_data {
struct regulator_bulk_data regulators[2]; struct regulator_bulk_data regulators[2];
char fw_name[64]; char fw_name[64];
struct touchscreen_properties prop; struct touchscreen_properties prop;
u32 max_fingers;
u32 chip_id; u32 chip_id;
struct input_mt_pos pos[SILEAD_MAX_FINGERS]; struct input_mt_pos pos[SILEAD_MAX_FINGERS];
int slots[SILEAD_MAX_FINGERS]; int slots[SILEAD_MAX_FINGERS];
...@@ -136,7 +135,7 @@ static int silead_ts_request_input_dev(struct silead_ts_data *data) ...@@ -136,7 +135,7 @@ static int silead_ts_request_input_dev(struct silead_ts_data *data)
touchscreen_parse_properties(data->input, true, &data->prop); touchscreen_parse_properties(data->input, true, &data->prop);
silead_apply_efi_fw_min_max(data); silead_apply_efi_fw_min_max(data);
input_mt_init_slots(data->input, data->max_fingers, input_mt_init_slots(data->input, SILEAD_MAX_FINGERS,
INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED | INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED |
INPUT_MT_TRACK); INPUT_MT_TRACK);
...@@ -256,10 +255,10 @@ static void silead_ts_read_data(struct i2c_client *client) ...@@ -256,10 +255,10 @@ static void silead_ts_read_data(struct i2c_client *client)
return; return;
} }
if (buf[0] > data->max_fingers) { if (buf[0] > SILEAD_MAX_FINGERS) {
dev_warn(dev, "More touches reported then supported %d > %d\n", dev_warn(dev, "More touches reported then supported %d > %d\n",
buf[0], data->max_fingers); buf[0], SILEAD_MAX_FINGERS);
buf[0] = data->max_fingers; buf[0] = SILEAD_MAX_FINGERS;
} }
if (silead_ts_handle_pen_data(data, buf)) if (silead_ts_handle_pen_data(data, buf))
...@@ -315,7 +314,6 @@ static void silead_ts_read_data(struct i2c_client *client) ...@@ -315,7 +314,6 @@ static void silead_ts_read_data(struct i2c_client *client)
static int silead_ts_init(struct i2c_client *client) static int silead_ts_init(struct i2c_client *client)
{ {
struct silead_ts_data *data = i2c_get_clientdata(client);
int error; int error;
error = i2c_smbus_write_byte_data(client, SILEAD_REG_RESET, error = i2c_smbus_write_byte_data(client, SILEAD_REG_RESET,
...@@ -325,7 +323,7 @@ static int silead_ts_init(struct i2c_client *client) ...@@ -325,7 +323,7 @@ static int silead_ts_init(struct i2c_client *client)
usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX); usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX);
error = i2c_smbus_write_byte_data(client, SILEAD_REG_TOUCH_NR, error = i2c_smbus_write_byte_data(client, SILEAD_REG_TOUCH_NR,
data->max_fingers); SILEAD_MAX_FINGERS);
if (error) if (error)
goto i2c_write_err; goto i2c_write_err;
usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX); usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX);
...@@ -591,13 +589,6 @@ static void silead_ts_read_props(struct i2c_client *client) ...@@ -591,13 +589,6 @@ static void silead_ts_read_props(struct i2c_client *client)
const char *str; const char *str;
int error; int error;
error = device_property_read_u32(dev, "silead,max-fingers",
&data->max_fingers);
if (error) {
dev_dbg(dev, "Max fingers read error %d\n", error);
data->max_fingers = 5; /* Most devices handle up-to 5 fingers */
}
error = device_property_read_string(dev, "firmware-name", &str); error = device_property_read_string(dev, "firmware-name", &str);
if (!error) if (!error)
snprintf(data->fw_name, sizeof(data->fw_name), snprintf(data->fw_name, sizeof(data->fw_name),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment