1. 25 Jan, 2021 4 commits
    • Hans de Goede's avatar
      platform/x86: intel-vbtn: Eval VBDL after registering our notifier · 26173179
      Hans de Goede authored
      The VBDL ACPI method enables button/switch reporting through the
      intel-vbtn device. In some cases the embedded-controller (EC) might
      call Notify() on the intel-vbtn device immediately after the
      the VBDL call to make sure that the OS is synced with the EC's
      button and switch state.
      
      If we register our notify_handler after evaluating VBDL this means
      that we might miss the Notify() calls made by the EC to sync the
      state.
      
      E.g. the HP Stream x360 Convertible PC 11 has a VGBS method which
      always returns 0, independent of the actual SW_TABLET_MODE state
      of the device; and immediately after the VBDL call it calls
      Notify(0xCD) or Notify(0xCC) to report the actual state.
      
      Move the evaluation of VBDL to after registering our notify_handler
      so that we don't miss any events.
      
      Cc: Elia Devito <eliadevito@gmail.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://lore.kernel.org/r/20210115161850.117614-4-hdegoede@redhat.com
      26173179
    • Hans de Goede's avatar
      platform/x86: intel-vbtn: Add alternative method to enable switches · 3a2f53cd
      Hans de Goede authored
      Some 2-in-1s have a broken VGBS method, so we cannot get an initial
      state for the switches from them. Reporting the wrong initial state for
      SW_TABLET_MODE causes serious problems (touchpad and/or keyboard events
      being ignored by userspace when reporting SW_TABLET_MODE=1), so on these
      devices we cannot register an input-dev for the switches at probe time.
      
      We can however register an input-dev for the switches as soon as we
      receive the first switches event, because then we will know the state.
      
      Note this mirrors the behavior of recent changs to the intel-hid driver
      which also registers a separate switches input-dev on receiving the
      first event on machines with a broken VGBS method.
      
      Cc: Elia Devito <eliadevito@gmail.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://lore.kernel.org/r/20210115161850.117614-3-hdegoede@redhat.com
      3a2f53cd
    • Hans de Goede's avatar
      platform/x86: intel-vbtn: Create 2 separate input-devs for buttons and switches · 034b8c2e
      Hans de Goede authored
      Create 2 separate input-devs for buttons and switches, this is a
      preparation for dynamically registering the switches-input device
      for devices which are not on the switches allow-list, but do make
      Notify() calls with an event value from the switches sparse-keymap.
      
      This also brings the intel-vbtn driver inline with the intel-hid
      driver which is doing the same thing.
      
      Cc: Elia Devito <eliadevito@gmail.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://lore.kernel.org/r/20210115161850.117614-2-hdegoede@redhat.com
      034b8c2e
    • Hans de Goede's avatar
      platform/x86: intel-vbtn: Rework wakeup handling in notify_handler() · 5862b4df
      Hans de Goede authored
      Rework the wakeup path inside notify_handler() to special case the
      buttons (KE_KEY) case instead of the switches case.
      
      In case of a button wake event we want to skip reporting this,
      mirroring how the drivers/acpi/button.c code skips the reporting
      in the wakeup case (suspended flag set) too.
      
      The reason to skip reporting in this case is that some Linux
      desktop-environments will immediately resuspend if we report an
      evdev event for the power-button press on wakeup.
      
      Before this commit the skipping of the button-press was done
      in a round-about way: In case of a wakeup the regular
      sparse_keymap_report_event() would always be skipped by
      an early return, and then to avoid not reporting switch changes
      on wakeup there was a special KE_SW path with a duplicate
      sparse_keymap_report_event() call.
      
      This commit refactors the wakeup handling to explicitly skip the
      reporting for button wake events, while using the regular
      reporting path for non button (switches) wakeup events.
      
      No intentional functional impact.
      
      Cc: Elia Devito <eliadevito@gmail.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://lore.kernel.org/r/20210115161850.117614-1-hdegoede@redhat.com
      5862b4df
  2. 18 Jan, 2021 7 commits
  3. 13 Jan, 2021 4 commits
  4. 06 Jan, 2021 9 commits
  5. 04 Jan, 2021 9 commits
  6. 27 Dec, 2020 7 commits