diff mbox series

[RFC,1/2] ACPI: x86: Move acpi_quirk_skip_serdev_enumeration() out of CONFIG_X86_ANDROID_TABLETS

Message ID 20240218151533.5720-2-hdegoede@redhat.com (mailing list archive)
State Mainlined, archived
Delegated to: Rafael Wysocki
Headers show
Series [RFC,1/2] ACPI: x86: Move acpi_quirk_skip_serdev_enumeration() out of CONFIG_X86_ANDROID_TABLETS | expand

Commit Message

Hans de Goede Feb. 18, 2024, 3:15 p.m. UTC
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(-)

Comments

Andy Shevchenko Feb. 18, 2024, 6:39 p.m. UTC | #1
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.
Hans de Goede Feb. 19, 2024, 10:19 a.m. UTC | #2
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 mbox series

Patch

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;