mirror of
https://github.com/torvalds/linux.git
synced 2026-05-21 21:37:25 +02:00
platform/x86: dell-privacy: Only register SW_CAMERA_LENS_COVER if present
Unlike keys where userspace only reacts to keypresses, userspace may act
on switches in both (0 and 1) of their positions.
For example if a SW_TABLET_MODE switch is registered then GNOME will not
automatically show the onscreen keyboard when a text field gets focus on
touchscreen devices when SW_TABLET_MODE reports 0 and when SW_TABLET_MODE
reports 1 libinput will block (filter out) builtin keyboard and touchpad
events.
So to avoid unwanted side-effects EV_SW type inputs should only be
registered if they are actually present, only register SW_CAMERA_LENS_COVER
if it is actually there.
Fixes: 8af9fa37b8 ("platform/x86: dell-privacy: Add support for Dell hardware privacy")
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20221221220724.119594-2-hdegoede@redhat.com
This commit is contained in:
parent
1af7fef0d9
commit
6dc485f994
|
|
@ -296,7 +296,7 @@ static int dell_privacy_wmi_probe(struct wmi_device *wdev, const void *context)
|
|||
{
|
||||
struct privacy_wmi_data *priv;
|
||||
struct key_entry *keymap;
|
||||
int ret, i;
|
||||
int ret, i, j;
|
||||
|
||||
ret = wmi_has_guid(DELL_PRIVACY_GUID);
|
||||
if (!ret)
|
||||
|
|
@ -327,9 +327,20 @@ static int dell_privacy_wmi_probe(struct wmi_device *wdev, const void *context)
|
|||
/* remap the keymap code with Dell privacy key type 0x12 as prefix
|
||||
* KEY_MICMUTE scancode will be reported as 0x120001
|
||||
*/
|
||||
for (i = 0; i < ARRAY_SIZE(dell_wmi_keymap_type_0012); i++) {
|
||||
keymap[i] = dell_wmi_keymap_type_0012[i];
|
||||
keymap[i].code |= (0x0012 << 16);
|
||||
for (i = 0, j = 0; i < ARRAY_SIZE(dell_wmi_keymap_type_0012); i++) {
|
||||
/*
|
||||
* Unlike keys where only presses matter, userspace may act
|
||||
* on switches in both of their positions. Only register
|
||||
* SW_CAMERA_LENS_COVER if it is actually there.
|
||||
*/
|
||||
if (dell_wmi_keymap_type_0012[i].type == KE_VSW &&
|
||||
dell_wmi_keymap_type_0012[i].sw.code == SW_CAMERA_LENS_COVER &&
|
||||
!(priv->features_present & BIT(DELL_PRIVACY_TYPE_CAMERA)))
|
||||
continue;
|
||||
|
||||
keymap[j] = dell_wmi_keymap_type_0012[i];
|
||||
keymap[j].code |= (0x0012 << 16);
|
||||
j++;
|
||||
}
|
||||
ret = sparse_keymap_setup(priv->input_dev, keymap, NULL);
|
||||
kfree(keymap);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user