On Mon, Dec 7, 2020 at 6:51 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > Some 360 degree hinges (yoga) style 2-in-1 devices use 2 accelerometers Yoga > to allow the OS to determine the angle between the display and the base > of the device. On Windows these are read by a special HingeAngleService > process which calls an ACPI DSM (Device Specific Method) on the _DSM > ACPI KIOX010A device node for the sensor in the display, to let the > firmware know if the 2-in-1 is in tablet- or laptop-mode so that it can > disable the kbd and touchpad to avoid spurious input in tablet-mode. keyboard > The linux kxcjk1013 driver calls the DSM for this once at probe time Perhaps similar way as above: On Linux the ... (Note 'Linux' with capital letter) _DSM > to ensure that the builtin kbd and touchpad work. On some devices this keyboard > causes a "spurious" 0xcd event on the intel-hid ACPI dev. In this case device > there is not a functional tablet-mode switch, so we should not register > the tablet-mode switch device. Same comments for below text (IIUC that one is identical). Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Cc: Elia Devito <eliadevito@xxxxxxxxx> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > drivers/platform/x86/intel-hid.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/drivers/platform/x86/intel-hid.c b/drivers/platform/x86/intel-hid.c > index 66ccdc17a64d..4a396ef54d2e 100644 > --- a/drivers/platform/x86/intel-hid.c > +++ b/drivers/platform/x86/intel-hid.c > @@ -441,8 +441,23 @@ static void notify_handler(acpi_handle handle, u32 event, void *context) > * Some convertible have unreliable VGBS return which could cause incorrect > * SW_TABLET_MODE report, in these cases we enable support when receiving > * the first event instead of during driver setup. > + * > + * Some 360 degree hinges (yoga) style 2-in-1 devices use 2 accelerometers > + * to allow the OS to determine the angle between the display and the base > + * of the device. On Windows these are read by a special HingeAngleService > + * process which calls an ACPI DSM (Device Specific Method) on the > + * ACPI KIOX010A device node for the sensor in the display, to let the > + * firmware know if the 2-in-1 is in tablet- or laptop-mode so that it can > + * disable the kbd and touchpad to avoid spurious input in tablet-mode. > + * > + * The linux kxcjk1013 driver calls the DSM for this once at probe time > + * to ensure that the builtin kbd and touchpad work. On some devices this > + * causes a "spurious" 0xcd event on the intel-hid ACPI dev. In this case > + * there is not a functional tablet-mode switch, so we should not register > + * the tablet-mode switch device. > */ > - if (!priv->switches && (event == 0xcc || event == 0xcd)) { > + if (!priv->switches && (event == 0xcc || event == 0xcd) && > + !acpi_dev_present("KIOX010A", NULL, -1)) { > dev_info(&device->dev, "switch event received, enable switches supports\n"); > err = intel_hid_switches_setup(device); > if (err) > -- > 2.28.0 > -- With Best Regards, Andy Shevchenko