mbox series

[00/19] platform/x86: lenovo-yogabook: Modify to also work on Android version

Message ID 20230429181551.98201-1-hdegoede@redhat.com
Headers show
Series platform/x86: lenovo-yogabook: Modify to also work on Android version | expand

Message

Hans de Goede April 29, 2023, 6:15 p.m. UTC
Hi All,

The Lenovo Yoga Book (yb1-x9*) is a yoga 2-in-1 where the keyboard
half has a touch keyboard (with a backlit fixed key layout) to make
it extra thin and light. The keyboard half can also be switched to
an alternative wacom digitizer mode where it instead can be used
to draw on. The backlight + switching is handled by
the lenovo-yogabook driver.

There are both Windows and Android versions with different BIOS-es /
ACPI tables. This series extends the current Windows model only driver
to also support the Android model.

On the Android yb1-x90f/l models there is not ACPI method to control
the keyboard backlight brightness. Instead the second PWM controller
is exposed directly to the OS there.

This requires adding a pwm_lookup table and the lenovo-yogabook code
can (and typically is) build as a module. So the first patch in
this series exports pwm_add_table() and pwm_remove_table() for use
in modules.

I believe that it is easiest to just merge the entire series through
the drivers/platform/x86 tree. Thierry, may I have your ack for
patch 1/19 to merge it through the pdx86 tree ?

Regards,

Hans


Hans de Goede (19):
  pwm: Export pwm_add_table() / pwm_remove_table()
  platform/x86: lenovo-yogabook: Fix work race on remove()
  platform/x86: lenovo-yogabook: Reprobe devices on remove()
  platform/x86: lenovo-yogabook: Set default keyboard backligh
    brightness on probe()
  platform/x86: lenovo-yogabook: Simplify gpio lookup table cleanup
  platform/x86: lenovo-yogabook: Switch to DEFINE_SIMPLE_DEV_PM_OPS()
  platform/x86: lenovo-yogabook: Store dev instead of wdev in drvdata
    struct
  platform/x86: lenovo-yogabook: Add dev local variable to probe()
  platform/x86: lenovo-yogabook: Use PMIC LED driver for pen icon LED
    control
  platform/x86: lenovo-yogabook: Split probe() into generic and WMI
    specific parts
  platform/x86: lenovo-yogabook: Stop checking adev->power.state
  platform/x86: lenovo-yogabook: Abstract kbd backlight setting
  platform/x86: lenovo-yogabook: Add a yogabook_toggle_digitizer_mode()
    helper function
  platform/x86: lenovo-yogabook: Drop _wmi_ from remaining generic
    symbols
  platform/x86: lenovo-yogabook: Group WMI specific code together
  platform/x86: lenovo-yogabook: Add YB_KBD_BL_MAX define
  platform/x86: lenovo-yogabook: Add platform driver support
  platform/x86: lenovo-yogabook: Add keyboard backlight control to
    platform driver
  platform/x86: lenovo-yogabook: Rename lenovo-yogabook-wmi to
    lenovo-yogabook

 drivers/platform/x86/Kconfig               |   6 +-
 drivers/platform/x86/Makefile              |   2 +-
 drivers/platform/x86/lenovo-yogabook-wmi.c | 408 --------------
 drivers/platform/x86/lenovo-yogabook.c     | 587 +++++++++++++++++++++
 drivers/pwm/core.c                         |   2 +
 5 files changed, 593 insertions(+), 412 deletions(-)
 delete mode 100644 drivers/platform/x86/lenovo-yogabook-wmi.c
 create mode 100644 drivers/platform/x86/lenovo-yogabook.c

Comments

Yauhen Kharuzhy May 3, 2023, 6:16 p.m. UTC | #1
On Sat, Apr 29, 2023 at 08:15:32PM +0200, Hans de Goede wrote:
> Hi All,
> 
> The Lenovo Yoga Book (yb1-x9*) is a yoga 2-in-1 where the keyboard
> half has a touch keyboard (with a backlit fixed key layout) to make
> it extra thin and light. The keyboard half can also be switched to
> an alternative wacom digitizer mode where it instead can be used
> to draw on. The backlight + switching is handled by
> the lenovo-yogabook driver.
> 
> There are both Windows and Android versions with different BIOS-es /
> ACPI tables. This series extends the current Windows model only driver
> to also support the Android model.
> 
> On the Android yb1-x90f/l models there is not ACPI method to control
> the keyboard backlight brightness. Instead the second PWM controller
> is exposed directly to the OS there.
> 
> This requires adding a pwm_lookup table and the lenovo-yogabook code
> can (and typically is) build as a module. So the first patch in
> this series exports pwm_add_table() and pwm_remove_table() for use
> in modules.
> 
> I believe that it is easiest to just merge the entire series through
> the drivers/platform/x86 tree. Thierry, may I have your ack for
> patch 1/19 to merge it through the pdx86 tree ?

Wow, great! I thought about ACPI table substitution by one taken from the Windows
tablet but didn't try this. I'm glad if this works because ACPI tables
in Android version looks like as a placeholder from the Intel's SDK, not
a real thing.

There is instruction how to install Windows on Android version, maybe it
will be useful for you:
https://web.archive.org/web/20220516142318/https://www.poz1.com/windows-on-android-lenovo-yogabook/

> 
> Regards,
> 
> Hans
> 
> 
> Hans de Goede (19):
>   pwm: Export pwm_add_table() / pwm_remove_table()
>   platform/x86: lenovo-yogabook: Fix work race on remove()
>   platform/x86: lenovo-yogabook: Reprobe devices on remove()
>   platform/x86: lenovo-yogabook: Set default keyboard backligh
>     brightness on probe()
>   platform/x86: lenovo-yogabook: Simplify gpio lookup table cleanup
>   platform/x86: lenovo-yogabook: Switch to DEFINE_SIMPLE_DEV_PM_OPS()
>   platform/x86: lenovo-yogabook: Store dev instead of wdev in drvdata
>     struct
>   platform/x86: lenovo-yogabook: Add dev local variable to probe()
>   platform/x86: lenovo-yogabook: Use PMIC LED driver for pen icon LED
>     control
>   platform/x86: lenovo-yogabook: Split probe() into generic and WMI
>     specific parts
>   platform/x86: lenovo-yogabook: Stop checking adev->power.state
>   platform/x86: lenovo-yogabook: Abstract kbd backlight setting
>   platform/x86: lenovo-yogabook: Add a yogabook_toggle_digitizer_mode()
>     helper function
>   platform/x86: lenovo-yogabook: Drop _wmi_ from remaining generic
>     symbols
>   platform/x86: lenovo-yogabook: Group WMI specific code together
>   platform/x86: lenovo-yogabook: Add YB_KBD_BL_MAX define
>   platform/x86: lenovo-yogabook: Add platform driver support
>   platform/x86: lenovo-yogabook: Add keyboard backlight control to
>     platform driver
>   platform/x86: lenovo-yogabook: Rename lenovo-yogabook-wmi to
>     lenovo-yogabook
> 
>  drivers/platform/x86/Kconfig               |   6 +-
>  drivers/platform/x86/Makefile              |   2 +-
>  drivers/platform/x86/lenovo-yogabook-wmi.c | 408 --------------
>  drivers/platform/x86/lenovo-yogabook.c     | 587 +++++++++++++++++++++
>  drivers/pwm/core.c                         |   2 +
>  5 files changed, 593 insertions(+), 412 deletions(-)
>  delete mode 100644 drivers/platform/x86/lenovo-yogabook-wmi.c
>  create mode 100644 drivers/platform/x86/lenovo-yogabook.c
> 
> -- 
> 2.39.2
>