Message ID | 20240218151533.5720-2-hdegoede@redhat.com (mailing list archive) |
---|---|
State | Mainlined, archived |
Headers | show |
Series | [RFC,1/2] ACPI: x86: Move acpi_quirk_skip_serdev_enumeration() out of CONFIG_X86_ANDROID_TABLETS | expand |
On Sun, Feb 18, 2024 at 5:15 PM Hans de Goede <hdegoede@redhat.com> wrote: > > Some recent(ish) Dell AIO devices have a backlight controller board > connected to an UART. > > This UART has a DELL0501 HID with CID set to PNP0501 so that the UART is > still handled by 8250_pnp.c. Unfortunately there is no separate ACPI device > with an UartSerialBusV2() resource to model the backlight-controller. > > The next patch in this series will use acpi_quirk_skip_serdev_enumeration() > to still create a serdev for this for a backlight driver to bind to > instead of creating a /dev/ttyS0. > > This new acpi_quirk_skip_serdev_enumeration() use is not limited to Android > X86 tablets, so move it out of the ifdef CONFIG_X86_ANDROID_TABLETS block. ... > +#else > +static int acpi_dmi_skip_serdev_enumeration(struct device *controller_parent, bool *skip) > +{ > + return 0; > +} > #endif ... > static inline int > acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip) > { > *skip = false; > return 0; > } > +#endif Now you have basically two identical blocks in two files. I believe you may reorganize the code to have only one of these.
Hi, On 2/18/24 19:39, Andy Shevchenko wrote: > On Sun, Feb 18, 2024 at 5:15 PM Hans de Goede <hdegoede@redhat.com> wrote: >> >> Some recent(ish) Dell AIO devices have a backlight controller board >> connected to an UART. >> >> This UART has a DELL0501 HID with CID set to PNP0501 so that the UART is >> still handled by 8250_pnp.c. Unfortunately there is no separate ACPI device >> with an UartSerialBusV2() resource to model the backlight-controller. >> >> The next patch in this series will use acpi_quirk_skip_serdev_enumeration() >> to still create a serdev for this for a backlight driver to bind to >> instead of creating a /dev/ttyS0. >> >> This new acpi_quirk_skip_serdev_enumeration() use is not limited to Android >> X86 tablets, so move it out of the ifdef CONFIG_X86_ANDROID_TABLETS block. > > ... > >> +#else >> +static int acpi_dmi_skip_serdev_enumeration(struct device *controller_parent, bool *skip) >> +{ >> + return 0; >> +} >> #endif > > ... > >> static inline int >> acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip) >> { >> *skip = false; >> return 0; >> } >> +#endif > > Now you have basically two identical blocks in two files. I believe > you may reorganize the code to have only one of these. One is #if IS_ENABLED(CONFIG_X86_ANDROID_TABLETS) the other is #ifdef CONFIG_X86 Also one is for a private helper, the other is for a public function. The whole idea of this patch is actually to have both, with the upcoming DELL0501 handling we want acpi_quirk_skip_serdev_enumeration() to be defined (and not just an inline stub in the .h) independent of IS_ENABLED(CONFIG_X86_ANDROID_TABLETS), the first #if block provides a dummy for the x86-android specific bits for the now always defined acpi_quirk_skip_serdev_enumeration() to call when CONFIG_X86_ANDROID_TABLETS is not set. The second #if is because acpi_quirk_skip_serdev_enumeration() still is only defined on X86 platforms and on non x86 platforms we need a stub for it in the public .h file. Regards, Hans
diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c index b37a4f44d05f..185176a521ad 100644 --- a/drivers/acpi/x86/utils.c +++ b/drivers/acpi/x86/utils.c @@ -437,7 +437,7 @@ bool acpi_quirk_skip_i2c_client_enumeration(struct acpi_device *adev) } EXPORT_SYMBOL_GPL(acpi_quirk_skip_i2c_client_enumeration); -int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip) +static int acpi_dmi_skip_serdev_enumeration(struct device *controller_parent, bool *skip) { struct acpi_device *adev = ACPI_COMPANION(controller_parent); const struct dmi_system_id *dmi_id; @@ -445,8 +445,6 @@ int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *s u64 uid; int ret; - *skip = false; - ret = acpi_dev_uid_to_integer(adev, &uid); if (ret) return 0; @@ -472,7 +470,6 @@ int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *s return 0; } -EXPORT_SYMBOL_GPL(acpi_quirk_skip_serdev_enumeration); bool acpi_quirk_skip_gpio_event_handlers(void) { @@ -487,8 +484,21 @@ bool acpi_quirk_skip_gpio_event_handlers(void) return (quirks & ACPI_QUIRK_SKIP_GPIO_EVENT_HANDLERS); } EXPORT_SYMBOL_GPL(acpi_quirk_skip_gpio_event_handlers); +#else +static int acpi_dmi_skip_serdev_enumeration(struct device *controller_parent, bool *skip) +{ + return 0; +} #endif +int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip) +{ + *skip = false; + + return acpi_dmi_skip_serdev_enumeration(controller_parent, skip); +} +EXPORT_SYMBOL_GPL(acpi_quirk_skip_serdev_enumeration); + /* Lists of PMIC ACPI HIDs with an (often better) native charger driver */ static const struct { const char *hid; diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h index e4d24d3f9abb..446225aada50 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -749,6 +749,7 @@ bool acpi_device_override_status(struct acpi_device *adev, unsigned long long *s bool acpi_quirk_skip_acpi_ac_and_battery(void); int acpi_install_cmos_rtc_space_handler(acpi_handle handle); void acpi_remove_cmos_rtc_space_handler(acpi_handle handle); +int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip); #else static inline bool acpi_device_override_status(struct acpi_device *adev, unsigned long long *status) @@ -766,23 +767,22 @@ static inline int acpi_install_cmos_rtc_space_handler(acpi_handle handle) static inline void acpi_remove_cmos_rtc_space_handler(acpi_handle handle) { } -#endif - -#if IS_ENABLED(CONFIG_X86_ANDROID_TABLETS) -bool acpi_quirk_skip_i2c_client_enumeration(struct acpi_device *adev); -int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip); -bool acpi_quirk_skip_gpio_event_handlers(void); -#else -static inline bool acpi_quirk_skip_i2c_client_enumeration(struct acpi_device *adev) -{ - return false; -} static inline int acpi_quirk_skip_serdev_enumeration(struct device *controller_parent, bool *skip) { *skip = false; return 0; } +#endif + +#if IS_ENABLED(CONFIG_X86_ANDROID_TABLETS) +bool acpi_quirk_skip_i2c_client_enumeration(struct acpi_device *adev); +bool acpi_quirk_skip_gpio_event_handlers(void); +#else +static inline bool acpi_quirk_skip_i2c_client_enumeration(struct acpi_device *adev) +{ + return false; +} static inline bool acpi_quirk_skip_gpio_event_handlers(void) { return false;
Some recent(ish) Dell AIO devices have a backlight controller board connected to an UART. This UART has a DELL0501 HID with CID set to PNP0501 so that the UART is still handled by 8250_pnp.c. Unfortunately there is no separate ACPI device with an UartSerialBusV2() resource to model the backlight-controller. The next patch in this series will use acpi_quirk_skip_serdev_enumeration() to still create a serdev for this for a backlight driver to bind to instead of creating a /dev/ttyS0. This new acpi_quirk_skip_serdev_enumeration() use is not limited to Android X86 tablets, so move it out of the ifdef CONFIG_X86_ANDROID_TABLETS block. Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/acpi/x86/utils.c | 18 ++++++++++++++---- include/acpi/acpi_bus.h | 22 +++++++++++----------- 2 files changed, 25 insertions(+), 15 deletions(-)