Re: [PATCH v4 0/2] platform/x86: dell-uart-backlight: fall back to PCH PWM on UART timeout

From: Hans de Goede

Date: Sat Oct 10 2026 - 07:41:18 EST


Hi Chitransh,

On 10-Oct-26 12:20 PM, chitranshmandhaniya@xxxxxxxxx wrote:
> From: Chitransh Mandhaniya <Chitransh_Mandhaniya@xxxxxxxx>
>
> Some Dell OptiPlex AIO 7410 (35W) ship with DELL0501 in ACPI but no
> physical UART scalar board, leaving the machine with zero backlight
> control after the UART probe times out.
>
> Patch 1 is a preparatory refactor that extracts the UART initialization
> sequence into dell_uart_bl_init() so the probe function can inspect its
> return value.
>
> Patch 2 adds a PCH PWM fallback path: when dell_uart_bl_init() returns
> -ETIMEDOUT, the driver reads the Intel PCH BLC_PWM registers and
> registers a BACKLIGHT_PLATFORM device.

Thank you for working on this, but directly doing mmio pokes on
an mmio range managed by the i915 driver is not okay:

NACK for this patch-series / this approach.

You should be able to work around this problem by passing:

acpi_backlight=native

on the kernel command-line which causes acpi_video_get_backlight_type()
to properly return native as type.

After confirming that that works, you can fix this permanently by
extending the existing DMI quirks for this in drivers/acpi/video_detect.c:

/*
* Dell AIO (All in Ones) which advertise an UART attached backlight
* controller board in their ACPI tables (and may even have one), but
* which need native backlight control nevertheless.
*/
{
/* https://github.com/zabbly/linux/issues/26 */
.callback = video_detect_force_native,
/* Dell OptiPlex 5480 AIO */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 5480 AIO"),
},
},
{
/* https://bugzilla.redhat.com/show_bug.cgi?id=2303936 */
.callback = video_detect_force_native,
/* Dell OptiPlex 7760 AIO */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 7760 AIO"),
},
},
{
.callback = video_detect_force_native,
/* Dell OptiPlex 7770 AIO */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 7770 AIO"),
},
},


Regards,

Hans





>
> v3 -> v4:
> - Revert __free(pci_dev_put) to manual pci_dev_put() calls to fix
> build error when CONFIG_PCI is disabled (kernel test robot)
>
> v2 -> v3:
> - Split into two patches: preparatory refactor + fallback (Ilpo)
>
> v1 -> v2:
> - Use SZ_16 instead of 0x10, add linux/sizes.h (Ilpo)
> - Name BIT(31) as PCH_BLC_PWM_ENABLE (Ilpo)
> - Fix double-space in block comment (Ilpo)
> - Reduce devm_backlight_device_register() to fewer lines (Ilpo)
> - Extract dell_uart_bl_init() for the normal UART backlight path (Ilpo)
>
> Chitransh Mandhaniya (2):
> platform/x86: dell-uart-backlight: extract dell_uart_bl_init() from
> probe
> platform/x86: dell-uart-backlight: fall back to PCH PWM on UART
> timeout
>
> .../platform/x86/dell/dell-uart-backlight.c | 158 +++++++++++++++---
> 1 file changed, 135 insertions(+), 23 deletions(-)
>