diff options
author | Hans de Goede <hdegoede@redhat.com> | 2020-05-10 15:20:47 +0300 |
---|---|---|
committer | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2020-05-12 17:27:12 +0300 |
commit | dd950f16b10df55c16c98106726978b236c8be54 (patch) | |
tree | 67fc0cb08244d7fff043aca8d98d0be3c228700d /drivers/platform | |
parent | f913c3086c5078f67c1a6833f6fd1593d8a174fe (diff) | |
download | linux-dd950f16b10df55c16c98106726978b236c8be54.tar.xz |
platform/x86: intel-vbtn: Detect switch position before registering the input-device
Setting the initial state of input-device switches must be done before
registering the input-device.
Otherwise the initial state will get send out as an event as soon
as input_sync() gets called.
E.g. when undocking a tablet using intel-vbtn to report SW_TABLET_MODE
and SW_DOCK before this commit we would get (evemu-record output):
E: 0.000001 0005 0005 0001 # EV_SW / SW_DOCK 1
E: 0.000001 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- +0ms
E: 0.000109 0005 0005 0000 # EV_SW / SW_DOCK 0
E: 0.000109 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- +0ms
E: 0.000133 0005 0001 0001 # EV_SW / SW_TABLET_MODE 1
E: 0.000133 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- +0ms
The first SW_DOCK=1 report is spurious, setting the initial switch
state before registering the input-device fixes this.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r-- | drivers/platform/x86/intel-vbtn.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/platform/x86/intel-vbtn.c b/drivers/platform/x86/intel-vbtn.c index 29984154f8e4..ef92c1c3adbd 100644 --- a/drivers/platform/x86/intel-vbtn.c +++ b/drivers/platform/x86/intel-vbtn.c @@ -111,6 +111,9 @@ static int intel_vbtn_input_setup(struct platform_device *device) priv->input_dev->name = "Intel Virtual Button driver"; priv->input_dev->id.bustype = BUS_HOST; + if (priv->has_switches) + detect_tablet_mode(device); + return input_register_device(priv->input_dev); } @@ -217,9 +220,6 @@ static int intel_vbtn_probe(struct platform_device *device) return err; } - if (priv->has_switches) - detect_tablet_mode(device); - status = acpi_install_notify_handler(handle, ACPI_DEVICE_NOTIFY, notify_handler, |