From a84c4d82766cce9c592f6cd804a173d11e57b4ec Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Fri, 2 Feb 2018 14:38:32 -0600 Subject: Linux v4.15-9939-g4bf772b14675 --- ...d-Add-support-for-capactive-home-button-f.patch | 114 --------------------- 1 file changed, 114 deletions(-) delete mode 100644 0010-Input-silead-Add-support-for-capactive-home-button-f.patch (limited to '0010-Input-silead-Add-support-for-capactive-home-button-f.patch') diff --git a/0010-Input-silead-Add-support-for-capactive-home-button-f.patch b/0010-Input-silead-Add-support-for-capactive-home-button-f.patch deleted file mode 100644 index ce9be3760..000000000 --- a/0010-Input-silead-Add-support-for-capactive-home-button-f.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 33fc16fd8aa3684e19b1d1f0a712593e2e570ab1 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Sun, 11 Jun 2017 21:24:50 +0200 -Subject: [PATCH 10/16] Input: silead: Add support for capactive home button - found on some x86 tablets - -On some x86 tablets with a silead touchscreen the windows logo on the -front is a capacitive home button. Touching this button results in a touch -with bits 12-15 of the Y coordinates set, while normally only the lower 12 -are used. - -Detect this and report a KEY_LEFTMETA press when this happens. Note for -now we only respond to the Y coordinate bits 12-15 containing 0x01, on some -tablets *without* a capacative button I've noticed these bits containing -0x04 when crossing the edges of the screen. - -Signed-off-by: Hans de Goede ---- - drivers/input/touchscreen/silead.c | 45 ++++++++++++++++++++++++++++---------- - 1 file changed, 34 insertions(+), 11 deletions(-) - -diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c -index 0dbcf105f7db..c0ba40c09699 100644 ---- a/drivers/input/touchscreen/silead.c -+++ b/drivers/input/touchscreen/silead.c -@@ -56,7 +56,7 @@ - #define SILEAD_POINT_Y_MSB_OFF 0x01 - #define SILEAD_POINT_X_OFF 0x02 - #define SILEAD_POINT_X_MSB_OFF 0x03 --#define SILEAD_TOUCH_ID_MASK 0xF0 -+#define SILEAD_EXTRA_DATA_MASK 0xF0 - - #define SILEAD_CMD_SLEEP_MIN 10000 - #define SILEAD_CMD_SLEEP_MAX 20000 -@@ -109,6 +109,8 @@ static int silead_ts_request_input_dev(struct silead_ts_data *data) - INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED | - INPUT_MT_TRACK); - -+ input_set_capability(data->input, EV_KEY, KEY_LEFTMETA); -+ - data->input->name = SILEAD_TS_NAME; - data->input->phys = "input/ts"; - data->input->id.bustype = BUS_I2C; -@@ -139,7 +141,8 @@ static void silead_ts_read_data(struct i2c_client *client) - struct input_dev *input = data->input; - struct device *dev = &client->dev; - u8 *bufp, buf[SILEAD_TS_DATA_LEN]; -- int touch_nr, error, i; -+ int touch_nr, softbutton, error, i; -+ bool softbutton_pressed = false; - - error = i2c_smbus_read_i2c_block_data(client, SILEAD_REG_DATA, - SILEAD_TS_DATA_LEN, buf); -@@ -148,21 +151,40 @@ static void silead_ts_read_data(struct i2c_client *client) - return; - } - -- touch_nr = buf[0]; -- if (touch_nr > data->max_fingers) { -+ if (buf[0] > data->max_fingers) { - dev_warn(dev, "More touches reported then supported %d > %d\n", -- touch_nr, data->max_fingers); -- touch_nr = data->max_fingers; -+ buf[0], data->max_fingers); -+ buf[0] = data->max_fingers; - } - -+ touch_nr = 0; - bufp = buf + SILEAD_POINT_DATA_LEN; -- for (i = 0; i < touch_nr; i++, bufp += SILEAD_POINT_DATA_LEN) { -- /* Bits 4-7 are the touch id */ -- data->id[i] = (bufp[SILEAD_POINT_X_MSB_OFF] & -- SILEAD_TOUCH_ID_MASK) >> 4; -- touchscreen_set_mt_pos(&data->pos[i], &data->prop, -+ for (i = 0; i < buf[0]; i++, bufp += SILEAD_POINT_DATA_LEN) { -+ softbutton = (bufp[SILEAD_POINT_Y_MSB_OFF] & -+ SILEAD_EXTRA_DATA_MASK) >> 4; -+ -+ if (softbutton) { -+ /* -+ * For now only respond to softbutton == 0x01, some -+ * tablets *without* a capacative button send 0x04 -+ * when crossing the edges of the screen. -+ */ -+ if (softbutton == 0x01) -+ softbutton_pressed = true; -+ -+ continue; -+ } -+ -+ /* -+ * Bits 4-7 are the touch id, note not all models have -+ * hardware touch ids so atm we don't use these. -+ */ -+ data->id[touch_nr] = (bufp[SILEAD_POINT_X_MSB_OFF] & -+ SILEAD_EXTRA_DATA_MASK) >> 4; -+ touchscreen_set_mt_pos(&data->pos[touch_nr], &data->prop, - get_unaligned_le16(&bufp[SILEAD_POINT_X_OFF]) & 0xfff, - get_unaligned_le16(&bufp[SILEAD_POINT_Y_OFF]) & 0xfff); -+ touch_nr++; - } - - input_mt_assign_slots(input, data->slots, data->pos, touch_nr, 0); -@@ -178,6 +200,7 @@ static void silead_ts_read_data(struct i2c_client *client) - } - - input_mt_sync_frame(input); -+ input_report_key(input, KEY_LEFTMETA, softbutton_pressed); - input_sync(input); - } - --- -2.13.0 - -- cgit