Commit Graph

10 Commits

Author SHA1 Message Date
Hans de Goede
b40082d0b0 platform/x86: x86-android-tablets: Add TM800A550L data
The whitelabel (sold as various brands) TM800A550L tablets's DSDT contains
a whole bunch of bogus ACPI I2C devices and the ACPI node describing
the touchscreen is bad (the IRQ is missing). Enumeration of these is
skipped through the acpi_quirk_skip_i2c_client_enumeration().

Add support for manually instantiating the (now) missing I2C devices by
adding the necessary device info to the x86-android-tablets module,
including instantiating an actually working i2c-client for
the touchscreen.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211229231431.437982-13-hdegoede@redhat.com
2022-01-05 11:31:19 +01:00
Hans de Goede
f359c40bf8 platform/x86: x86-android-tablets: Add Asus MeMO Pad 7 ME176C data
Asus MeMO Pad 7 ME176C tablets have an Android factory img with everything
hardcoded in the kernel instead of properly described in the DSDT.

Add support for manually instantiating all the missing I2C devices by
adding the necessary device info to the x86-android-tablets module.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211229231431.437982-12-hdegoede@redhat.com
2022-01-05 11:31:19 +01:00
Hans de Goede
29272d6424 platform/x86: x86-android-tablets: Add Asus TF103C data
Asus TF103C tablets have an Android factory img with everything hardcoded
in the kernel instead of properly described in the DSDT.

Add support for manually instantiating all the missing I2C devices by
adding the necessary device info to the x86-android-tablets module.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211229231431.437982-11-hdegoede@redhat.com
2022-01-05 11:31:19 +01:00
Hans de Goede
f08aebe9af platform/x86: x86-android-tablets: Add support for preloading modules
Since the x86-android-tablets code does all it work from module_init() it
cannot use -EPROBE_DEFER to wait for e.g. interrupt providing GPIO-chips
or PMIC-cells to show up.

To make sure things will still work when some necessary resource providers
are build as module allow the per board info to specify a list of modules
to pre-load before instantiating the I2C clients.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211229231431.437982-10-hdegoede@redhat.com
2022-01-05 11:31:19 +01:00
Hans de Goede
ef2ac11493 platform/x86: x86-android-tablets: Add support for registering GPIO lookup tables
Add support for registering GPIO lookup tables.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211229231431.437982-9-hdegoede@redhat.com
2022-01-05 11:31:19 +01:00
Hans de Goede
c2138b25d5 platform/x86: x86-android-tablets: Add support for instantiating serdevs
Add support for instantiating serdevs, this is necessary on some boards
where the serdev info in the DSDT has issues.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211229231431.437982-8-hdegoede@redhat.com
2022-01-05 11:31:19 +01:00
Hans de Goede
5eba014120 platform/x86: x86-android-tablets: Add support for instantiating platform-devs
Add support for instantiating platform-devs, note this also makes some
small changes to the i2c_client instantiating code to make the 2 flows
identical.

Specifically for the pdevs flow pdev_count must only be set after
allocating the pdevs array, to avoid a NULL ptr deref in
x86_android_tablet_cleanup() and the i2c_clients flow is updated
to work the same way.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211229231431.437982-7-hdegoede@redhat.com
2022-01-05 11:31:18 +01:00
Hans de Goede
cd26465fbc platform/x86: x86-android-tablets: Add support for PMIC interrupts
The Crystal Cove PMIC has a pin which can be used to connect the IRQ of
an external charger IC. On some boards this is used so we need a way to
look this up.

Note that the Intel PMICs have 2 levels of interrupts and thus
2 levels of IRQ domains all tied to a single fwnode.

Level 1 is the irqchip which demultiplexes the actual PMIC interrupt into
interrupts for the various MFD cells. Level 2 are the irqchips used in the
cell drivers which themselves export IRQs, such as the crystal_cove_gpio
driver, which de-multiplexes the level 2 interrupts for the GPIOs into
individual per GPIO IRQs.

The crystal_cove_charger driver registers an irqchip with a single IRQ for
the charger driver to consume. Note the MFD cell IRQ cannot be consumed
directly because the level 2 interrupts must be explicitly acked.

To allow finding the right IRQ domain when looking up the IRQ for
the charger, the crystal_cove_charger driver sets a DOMAIN_BUS_WIRED token
on its IRQ domain.

Add support for looking up the IRQ from the crystal_cove_charger driver.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211229231431.437982-6-hdegoede@redhat.com
2022-01-05 11:31:18 +01:00
Hans de Goede
fc64a2b216 platform/x86: x86-android-tablets: Don't return -EPROBE_DEFER from a non probe() function
The x86-android-tablets code all runs from module_init, so returning
-EPROBE_DEFER is not appropriate. Instead log an error and bail.

This path should never get hit since PINCTRL_BAYTRAIL is a bool.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211229231431.437982-5-hdegoede@redhat.com
2022-01-05 11:31:18 +01:00
Hans de Goede
55fa3c9665 platform/x86: x86-android-tablets: New driver for x86 Android tablets
x86 tablets which ship with Android as (part of) the factory image
typically have various problems with their DSDTs. The factory kernels
shipped on these devices typically have device addresses and GPIOs
hardcoded in the kernel, rather then specified in their DSDT.

With the DSDT containing a random collection of devices which may or
may not actually be present as well as missing devices which are
actually present.

This driver, which loads only on affected models based on DMI matching,
adds DMI based instantiating of kernel devices for devices which are
missing from the DSDT, fixing e.g. battery monitoring, touchpads and/or
accelerometers not working.

Note the Kconfig help text also refers to "various fixes" ATM there are
no such fixes, but there are also known cases where entries are present
in the DSDT but they contain bugs, such as missing/wrong GPIOs. The plan
is to also add fixes for things like this here in the future.

This is the least ugly option to get these devices to fully work and to
do so without adding any extra code to the main kernel image (vmlinuz)
when built as a module.

Link: https://lore.kernel.org/platform-driver-x86/20211031162428.22368-1-hdegoede@redhat.com/
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20211223190750.397487-1-hdegoede@redhat.com
2021-12-25 12:41:06 +01:00