mbox series

[00/12] ACPI / pdx86: Add support for x86 Android tablets with broken DSDTs

Message ID 20211229231431.437982-1-hdegoede@redhat.com
Headers show
Series ACPI / pdx86: Add support for x86 Android tablets with broken DSDTs | expand

Message

Hans de Goede Dec. 29, 2021, 11:14 p.m. UTC
Hi All,

As a small(ish) hoppy project over the holidays I've been looking into
getting some (somewhat older) x86 tablets which ship with Android as the
only OS on their factory image working with the mainline kernel.

These typically have pretty broken DSDTs since the Android image kernel
just has everything hardcoded.

This patch-series makes most things on 3 of these tablets work with the
mainline kernel and lays the groundwork for adding support for similar
tablets.

Since the ACPI tables on these devices clearly are buggy this series is
written so as to add minimal changes to the ACPI core code, leaving all
of the heavy lifting to the recently introduced (in linux-next)
drivers/platform/x86/x86-android-tablets.c module, which when built as
a module only autoloads on affected devices based on DMI matching.

And when this module is disabled the added acpi_quirk_skip_*_enumeration()
helpers are replaced by inline stubs and even the minimally added core
code will be optimized away.

The ACPI core changes are in patches 1-3 of this series. Since the
i2c and serdev ACPI enumeration changes are very small and depend on
patch 1, I believe it would be best for patches 1-3 to all be merged
through Rafael's ACPI tree.

Greg and Wolfram, may we have your acks for this please?

I will take care of merging the rest of the series through the pdx86
tree (these 2 parts of this series can be merged independenly without
issues).

Regards,

Hans


Hans de Goede (12):
  ACPI / x86: Add acpi_quirk_skip_[i2c_client|serdev]_enumeration()
    helpers
  i2c: acpi: Do not instantiate I2C-clients on boards with known bogus
    DSDT entries
  serdev: Do not instantiate serdevs on boards with known bogus DSDT
    entries
  platform/x86: x86-android-tablets: Don't return -EPROBE_DEFER from a
    non probe() function
  platform/x86: x86-android-tablets: Add support for PMIC interrupts
  platform/x86: x86-android-tablets: Add support for instantiating
    platform-devs
  platform/x86: x86-android-tablets: Add support for instantiating
    serdevs
  platform/x86: x86-android-tablets: Add support for registering GPIO
    lookup tables
  platform/x86: x86-android-tablets: Add support for preloading modules
  platform/x86: x86-android-tablets: Add Asus TF103C data
  platform/x86: x86-android-tablets: Add Asus MeMO Pad 7 ME176C data
  platform/x86: x86-android-tablets: Add TM800A550L data

 drivers/acpi/x86/utils.c                   |  96 ++++
 drivers/i2c/i2c-core-acpi.c                |  17 +
 drivers/platform/x86/Kconfig               |   2 +-
 drivers/platform/x86/x86-android-tablets.c | 562 ++++++++++++++++++++-
 drivers/tty/serdev/core.c                  |  14 +
 include/acpi/acpi_bus.h                    |  16 +
 6 files changed, 698 insertions(+), 9 deletions(-)

Comments

Wolfram Sang Dec. 30, 2021, 11:57 a.m. UTC | #1
Hi Hans,

> The ACPI core changes are in patches 1-3 of this series. Since the
> i2c and serdev ACPI enumeration changes are very small and depend on
> patch 1, I believe it would be best for patches 1-3 to all be merged
> through Rafael's ACPI tree.

OK.

> Greg and Wolfram, may we have your acks for this please?

I don't know the gory details of ACPI, that's why we thankfully have I2C
ACPI maintainers. If they are happy, I am, too.

Kind regards,

   Wolfram
gregkh@linuxfoundation.org Dec. 30, 2021, 12:44 p.m. UTC | #2
On Thu, Dec 30, 2021 at 12:14:22AM +0100, Hans de Goede wrote:
> x86 ACPI devices which ship with only Android as their factory image use
> older kernels which do not yet support ACPI serdev enumeration, as such
> the serdev information in their ACPI tables is not reliable.
> 
> For example on the Asus ME176C tablet the serdev describing the Bluetooth
> HCI points to the serdev_controller connected to the GPS and the other way
> around.
> 
> Use the new acpi_quirk_skip_serdev_enumeration() helper to identify
> known boards with this issue and then either abort adding the serdev
> controller (creating a tty cdev instead) or only create the controller
> leaving the instantation of the serdev itself up to platform code.
> 
> In the case where only the serdev controller is created the necessary
> serdevs will instead be instantiated by the
> drivers/platform/x86/x86-android-tablets.c kernel module.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/tty/serdev/core.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)


Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Hans de Goede Jan. 3, 2022, 11:42 a.m. UTC | #3
Hi All,

On 12/30/21 00:14, Hans de Goede wrote:
> Hi All,
> 
> As a small(ish) hoppy project over the holidays I've been looking into
> getting some (somewhat older) x86 tablets which ship with Android as the
> only OS on their factory image working with the mainline kernel.
> 
> These typically have pretty broken DSDTs since the Android image kernel
> just has everything hardcoded.
> 
> This patch-series makes most things on 3 of these tablets work with the
> mainline kernel and lays the groundwork for adding support for similar
> tablets.
> 
> Since the ACPI tables on these devices clearly are buggy this series is
> written so as to add minimal changes to the ACPI core code, leaving all
> of the heavy lifting to the recently introduced (in linux-next)
> drivers/platform/x86/x86-android-tablets.c module, which when built as
> a module only autoloads on affected devices based on DMI matching.
> 
> And when this module is disabled the added acpi_quirk_skip_*_enumeration()
> helpers are replaced by inline stubs and even the minimally added core
> code will be optimized away.
> 
> The ACPI core changes are in patches 1-3 of this series. Since the
> i2c and serdev ACPI enumeration changes are very small and depend on
> patch 1, I believe it would be best for patches 1-3 to all be merged
> through Rafael's ACPI tree.

I've added patches 4-12 to my pdx86/review-hans (soon to be for-next)
branch now.

Regards,

Hans


> Hans de Goede (12):
>   ACPI / x86: Add acpi_quirk_skip_[i2c_client|serdev]_enumeration()
>     helpers
>   i2c: acpi: Do not instantiate I2C-clients on boards with known bogus
>     DSDT entries
>   serdev: Do not instantiate serdevs on boards with known bogus DSDT
>     entries
>   platform/x86: x86-android-tablets: Don't return -EPROBE_DEFER from a
>     non probe() function
>   platform/x86: x86-android-tablets: Add support for PMIC interrupts
>   platform/x86: x86-android-tablets: Add support for instantiating
>     platform-devs
>   platform/x86: x86-android-tablets: Add support for instantiating
>     serdevs
>   platform/x86: x86-android-tablets: Add support for registering GPIO
>     lookup tables
>   platform/x86: x86-android-tablets: Add support for preloading modules
>   platform/x86: x86-android-tablets: Add Asus TF103C data
>   platform/x86: x86-android-tablets: Add Asus MeMO Pad 7 ME176C data
>   platform/x86: x86-android-tablets: Add TM800A550L data
> 
>  drivers/acpi/x86/utils.c                   |  96 ++++
>  drivers/i2c/i2c-core-acpi.c                |  17 +
>  drivers/platform/x86/Kconfig               |   2 +-
>  drivers/platform/x86/x86-android-tablets.c | 562 ++++++++++++++++++++-
>  drivers/tty/serdev/core.c                  |  14 +
>  include/acpi/acpi_bus.h                    |  16 +
>  6 files changed, 698 insertions(+), 9 deletions(-)
>