ACPI: video: Add Dell UART backlight controller detection

Dell All In One (AIO) models released after 2017 use a backlight
controller board connected to an UART.

In DSDT this uart port will be defined as:

   Name (_HID, "DELL0501")
   Name (_CID, EisaId ("PNP0501")

Commit 484bae9e4d ("platform/x86: Add new Dell UART backlight driver")
has added support for this, but I neglected to tie this into
acpi_video_get_backlight_type().

Now the first AIO has turned up which has not only the DSDT bits for this,
but also an actual controller attached to the UART, yet it is not using
this controller for backlight control.

Add support to acpi_video_get_backlight_type() for a new dell_uart
backlight type. So that the existing infra to override the backlight
control method on the commandline or with DMI quirks can be used.

Fixes: 484bae9e4d ("platform/x86: Add new Dell UART backlight driver")
Cc: All applicable <stable@vger.kernel.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
Link: https://patch.msgid.link/20240814190159.15650-2-hdegoede@redhat.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
Hans de Goede 2024-08-14 21:01:57 +02:00 committed by Rafael J. Wysocki
parent 47ac09b91b
commit cd8e468efb
2 changed files with 8 additions and 0 deletions

View File

@ -54,6 +54,8 @@ static void acpi_video_parse_cmdline(void)
acpi_backlight_cmdline = acpi_backlight_nvidia_wmi_ec; acpi_backlight_cmdline = acpi_backlight_nvidia_wmi_ec;
if (!strcmp("apple_gmux", acpi_video_backlight_string)) if (!strcmp("apple_gmux", acpi_video_backlight_string))
acpi_backlight_cmdline = acpi_backlight_apple_gmux; acpi_backlight_cmdline = acpi_backlight_apple_gmux;
if (!strcmp("dell_uart", acpi_video_backlight_string))
acpi_backlight_cmdline = acpi_backlight_dell_uart;
if (!strcmp("none", acpi_video_backlight_string)) if (!strcmp("none", acpi_video_backlight_string))
acpi_backlight_cmdline = acpi_backlight_none; acpi_backlight_cmdline = acpi_backlight_none;
} }
@ -918,6 +920,7 @@ enum acpi_backlight_type __acpi_video_get_backlight_type(bool native, bool *auto
static DEFINE_MUTEX(init_mutex); static DEFINE_MUTEX(init_mutex);
static bool nvidia_wmi_ec_present; static bool nvidia_wmi_ec_present;
static bool apple_gmux_present; static bool apple_gmux_present;
static bool dell_uart_present;
static bool native_available; static bool native_available;
static bool init_done; static bool init_done;
static long video_caps; static long video_caps;
@ -932,6 +935,7 @@ enum acpi_backlight_type __acpi_video_get_backlight_type(bool native, bool *auto
&video_caps, NULL); &video_caps, NULL);
nvidia_wmi_ec_present = nvidia_wmi_ec_supported(); nvidia_wmi_ec_present = nvidia_wmi_ec_supported();
apple_gmux_present = apple_gmux_detect(NULL, NULL); apple_gmux_present = apple_gmux_detect(NULL, NULL);
dell_uart_present = acpi_dev_present("DELL0501", NULL, -1);
init_done = true; init_done = true;
} }
if (native) if (native)
@ -962,6 +966,9 @@ enum acpi_backlight_type __acpi_video_get_backlight_type(bool native, bool *auto
if (apple_gmux_present) if (apple_gmux_present)
return acpi_backlight_apple_gmux; return acpi_backlight_apple_gmux;
if (dell_uart_present)
return acpi_backlight_dell_uart;
/* Use ACPI video if available, except when native should be preferred. */ /* Use ACPI video if available, except when native should be preferred. */
if ((video_caps & ACPI_VIDEO_BACKLIGHT) && if ((video_caps & ACPI_VIDEO_BACKLIGHT) &&
!(native_available && prefer_native_over_acpi_video())) !(native_available && prefer_native_over_acpi_video()))

View File

@ -50,6 +50,7 @@ enum acpi_backlight_type {
acpi_backlight_native, acpi_backlight_native,
acpi_backlight_nvidia_wmi_ec, acpi_backlight_nvidia_wmi_ec,
acpi_backlight_apple_gmux, acpi_backlight_apple_gmux,
acpi_backlight_dell_uart,
}; };
#if IS_ENABLED(CONFIG_ACPI_VIDEO) #if IS_ENABLED(CONFIG_ACPI_VIDEO)