ACPI: video: Add acpi_backlight=vendor quirk for Toshiba Portégé R100
authorOndrej Zary <linux@zary.sk>
Fri, 29 Sep 2023 20:20:55 +0000 (22:20 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Nov 2023 10:58:59 +0000 (11:58 +0100)
[ Upstream commit 35a341c9b25da6a479bd8013bcb11a680a7233e3 ]

Toshiba Portégé R100 has both acpi_video and toshiba_acpi vendor
backlight driver working. But none of them gets activated as it has
a VGA with no kernel driver (Trident CyberBlade XP4m32).

The DMI strings are very generic ("Portable PC") so add a custom
callback function to check for Trident CyberBlade XP4m32 PCI device
before enabling the vendor backlight driver (better than acpi_video
as it has more brightness steps).

Fixes: 5aa9d943e9b6 ("ACPI: video: Don't enable fallback path for creating ACPI backlight by default")
Signed-off-by: Ondrej Zary <linux@zary.sk>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/acpi/video_detect.c

index 442396f..31205fe 100644 (file)
@@ -130,6 +130,16 @@ static int video_detect_force_native(const struct dmi_system_id *d)
        return 0;
 }
 
+static int video_detect_portege_r100(const struct dmi_system_id *d)
+{
+       struct pci_dev *dev;
+       /* Search for Trident CyberBlade XP4m32 to confirm Portégé R100 */
+       dev = pci_get_device(PCI_VENDOR_ID_TRIDENT, 0x2100, NULL);
+       if (dev)
+               acpi_backlight_dmi = acpi_backlight_vendor;
+       return 0;
+}
+
 static const struct dmi_system_id video_detect_dmi_table[] = {
        /*
         * Models which should use the vendor backlight interface,
@@ -271,6 +281,22 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
        },
 
        /*
+        * Toshiba Portégé R100 has working both acpi_video and toshiba_acpi
+        * vendor driver. But none of them gets activated as it has a VGA with
+        * no kernel driver (Trident CyberBlade XP4m32).
+        * The DMI strings are generic so check for the VGA chip in callback.
+        */
+       {
+        .callback = video_detect_portege_r100,
+        .matches = {
+               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+               DMI_MATCH(DMI_PRODUCT_NAME, "Portable PC"),
+               DMI_MATCH(DMI_PRODUCT_VERSION, "Version 1.0"),
+               DMI_MATCH(DMI_BOARD_NAME, "Portable PC")
+               },
+       },
+
+       /*
         * Models which need acpi_video backlight control where the GPU drivers
         * do not call acpi_video_register_backlight() because no internal panel
         * is detected. Typically these are all-in-ones (monitors with builtin