* [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets
@ 2017-10-19 7:17 Hans de Goede
2017-10-19 7:17 ` [PATCH v3 2/2] platform/x86: silead_dmi: Add silead,home-button property to some tablets Hans de Goede
2017-11-16 13:34 ` [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets Rob Herring
0 siblings, 2 replies; 4+ messages in thread
From: Hans de Goede @ 2017-10-19 7:17 UTC (permalink / raw)
To: Dmitry Torokhov, Benjamin Tissoires, Darren Hart, Andy Shevchenko
Cc: Hans de Goede, Gregor Riepl, linux-input, platform-driver-x86,
linux-kernel, Rob Herring
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.
Cc: Rob Herring <robh+dt@kernel.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
Changes in v2:
-Only enable support for the home-button if a "silead,home-button"
boolean device-property is set on the device
Changes in v3:
-Document the new silead,home-button property in:
Documentation/devicetree/bindings/input/touchscreen/goodix.txt
---
.../bindings/input/touchscreen/silead_gsl1680.txt | 2 +
drivers/input/touchscreen/silead.c | 46 ++++++++++++++++------
2 files changed, 37 insertions(+), 11 deletions(-)
diff --git a/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt b/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt
index 6aa625e0cb8d..84752de12412 100644
--- a/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt
+++ b/Documentation/devicetree/bindings/input/touchscreen/silead_gsl1680.txt
@@ -23,6 +23,8 @@ Optional properties:
- touchscreen-inverted-y : See touchscreen.txt
- touchscreen-swapped-x-y : See touchscreen.txt
- silead,max-fingers : maximum number of fingers the touchscreen can detect
+- silead,home-button : Boolean, set to true on devices which have a
+ capacitive home-button build into the touchscreen
- vddio-supply : regulator phandle for controller VDDIO
- avdd-supply : regulator phandle for controller AVDD
diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
index 0dbcf105f7db..646b1e768e6b 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,9 @@ static int silead_ts_request_input_dev(struct silead_ts_data *data)
INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED |
INPUT_MT_TRACK);
+ if (device_property_read_bool(dev, "silead,home-button"))
+ 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 +142,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 +152,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 +201,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.14.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v3 2/2] platform/x86: silead_dmi: Add silead,home-button property to some tablets
2017-10-19 7:17 [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets Hans de Goede
@ 2017-10-19 7:17 ` Hans de Goede
2017-11-16 13:34 ` [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets Rob Herring
1 sibling, 0 replies; 4+ messages in thread
From: Hans de Goede @ 2017-10-19 7:17 UTC (permalink / raw)
To: Dmitry Torokhov, Benjamin Tissoires, Darren Hart, Andy Shevchenko
Cc: Hans de Goede, Gregor Riepl, linux-input, platform-driver-x86,
linux-kernel
Add "silead,home-button" property to entries for tablets which have
a capacitive home button (typically a windows logo on the front).
This new property is checked for by the new capacitive home button
support in the silead touchscreen driver.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/platform/x86/silead_dmi.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/platform/x86/silead_dmi.c b/drivers/platform/x86/silead_dmi.c
index fadfce9b3f5f..ac304f2318cc 100644
--- a/drivers/platform/x86/silead_dmi.c
+++ b/drivers/platform/x86/silead_dmi.c
@@ -58,6 +58,7 @@ static const struct property_entry dexp_ursus_7w_props[] = {
PROPERTY_ENTRY_U32("touchscreen-size-y", 630),
PROPERTY_ENTRY_STRING("firmware-name", "gsl1686-dexp-ursus-7w.fw"),
PROPERTY_ENTRY_U32("silead,max-fingers", 10),
+ PROPERTY_ENTRY_BOOL("silead,home-button"),
{ }
};
@@ -72,6 +73,7 @@ static const struct property_entry surftab_wintron70_st70416_6_props[] = {
PROPERTY_ENTRY_STRING("firmware-name",
"gsl1686-surftab-wintron70-st70416-6.fw"),
PROPERTY_ENTRY_U32("silead,max-fingers", 10),
+ PROPERTY_ENTRY_BOOL("silead,home-button"),
{ }
};
@@ -116,6 +118,7 @@ static const struct property_entry pov_mobii_wintab_p800w_props[] = {
PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
PROPERTY_ENTRY_STRING("firmware-name",
"gsl3692-pov-mobii-wintab-p800w.fw"),
+ PROPERTY_ENTRY_BOOL("silead,home-button"),
{ }
};
@@ -143,6 +146,7 @@ static const struct property_entry chuwi_hi8_pro_props[] = {
PROPERTY_ENTRY_U32("touchscreen-size-y", 1148),
PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
PROPERTY_ENTRY_STRING("firmware-name", "gsl3680-chuwi-hi8-pro.fw"),
+ PROPERTY_ENTRY_BOOL("silead,home-button"),
{ }
};
--
2.14.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets
2017-10-19 7:17 [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets Hans de Goede
2017-10-19 7:17 ` [PATCH v3 2/2] platform/x86: silead_dmi: Add silead,home-button property to some tablets Hans de Goede
@ 2017-11-16 13:34 ` Rob Herring
2017-11-16 13:45 ` Hans de Goede
1 sibling, 1 reply; 4+ messages in thread
From: Rob Herring @ 2017-11-16 13:34 UTC (permalink / raw)
To: Hans de Goede
Cc: Dmitry Torokhov, Benjamin Tissoires, Darren Hart, Andy Shevchenko,
Gregor Riepl, linux-input@vger.kernel.org, platform-driver-x86,
linux-kernel@vger.kernel.org
On Thu, Oct 19, 2017 at 2:17 AM, Hans de Goede <hdegoede@redhat.com> wrote:
> 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
capacitive
> 0x04 when crossing the edges of the screen.
>
> Cc: Rob Herring <robh+dt@kernel.org>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
> Changes in v2:
> -Only enable support for the home-button if a "silead,home-button"
> boolean device-property is set on the device
>
> Changes in v3:
> -Document the new silead,home-button property in:
> Documentation/devicetree/bindings/input/touchscreen/goodix.txt
> ---
> .../bindings/input/touchscreen/silead_gsl1680.txt | 2 +
Acked-by: Rob Herring <robh@kernel.org>
> drivers/input/touchscreen/silead.c | 46 ++++++++++++++++------
> 2 files changed, 37 insertions(+), 11 deletions(-)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets
2017-11-16 13:34 ` [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets Rob Herring
@ 2017-11-16 13:45 ` Hans de Goede
0 siblings, 0 replies; 4+ messages in thread
From: Hans de Goede @ 2017-11-16 13:45 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: linux-input
Hi,
On 16-11-17 14:34, Rob Herring wrote:
> On Thu, Oct 19, 2017 at 2:17 AM, Hans de Goede <hdegoede@redhat.com> wrote:
>> 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
>
> capacitive
>
>> 0x04 when crossing the edges of the screen.
>>
>> Cc: Rob Herring <robh+dt@kernel.org>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>> Changes in v2:
>> -Only enable support for the home-button if a "silead,home-button"
>> boolean device-property is set on the device
>>
>> Changes in v3:
>> -Document the new silead,home-button property in:
>> Documentation/devicetree/bindings/input/touchscreen/goodix.txt
>> ---
>> .../bindings/input/touchscreen/silead_gsl1680.txt | 2 +
>
> Acked-by: Rob Herring <robh@kernel.org>
I believe this means this is ready to be merged now. It would be nice
if we could still get this into 4.15 for rc2 (it is a fix in a way).
Regards,
Hans
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-11-16 13:45 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-19 7:17 [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets Hans de Goede
2017-10-19 7:17 ` [PATCH v3 2/2] platform/x86: silead_dmi: Add silead,home-button property to some tablets Hans de Goede
2017-11-16 13:34 ` [PATCH v3 1/2] Input: silead - Add support for capactive home button found on some x86 tablets Rob Herring
2017-11-16 13:45 ` Hans de Goede
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).