]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blobdiff - releases/4.14.111/acpi-video-refactor-and-fix-dmi_is_desktop.patch
Linux 4.14.111
[thirdparty/kernel/stable-queue.git] / releases / 4.14.111 / acpi-video-refactor-and-fix-dmi_is_desktop.patch
diff --git a/releases/4.14.111/acpi-video-refactor-and-fix-dmi_is_desktop.patch b/releases/4.14.111/acpi-video-refactor-and-fix-dmi_is_desktop.patch
new file mode 100644 (file)
index 0000000..e0e30b6
--- /dev/null
@@ -0,0 +1,72 @@
+From 0983dfeddf3ee80c655c1254533a66fae89cf945 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Mon, 7 Jan 2019 17:08:20 +0100
+Subject: ACPI / video: Refactor and fix dmi_is_desktop()
+
+[ Upstream commit cecf3e3e0803462335e25d083345682518097334 ]
+
+This commit refactors the chassis-type detection introduced by
+commit 53fa1f6e8a59 ("ACPI / video: Only default only_lcd to true on
+Win8-ready _desktops_") (where desktop means anything without a builtin
+screen).
+
+The DMI chassis_type is an unsigned integer, so rather then doing a
+whole bunch of string-compares on it, convert it to an int and feed
+the result to a switch case.
+
+Note the switch case uses hex values, this is done because the spec
+uses hex values too. This changes the check for "Main Server Chassis"
+from checking for 11 decimal to 11 hexadecimal, this is a bug fix,
+the original check for 11 decimal was wrong.
+
+Fixes: 53fa1f6e8a59 ("ACPI / video: Only default only_lcd to true ...")
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+[ rjw: Drop redundant return statements ]
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/acpi_video.c | 19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
+index dbdd460a9958..9f56c066227c 100644
+--- a/drivers/acpi/acpi_video.c
++++ b/drivers/acpi/acpi_video.c
+@@ -2123,21 +2123,28 @@ static int __init intel_opregion_present(void)
+       return opregion;
+ }
++/* Check if the chassis-type indicates there is no builtin LCD panel */
+ static bool dmi_is_desktop(void)
+ {
+       const char *chassis_type;
++      unsigned long type;
+       chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE);
+       if (!chassis_type)
+               return false;
+-      if (!strcmp(chassis_type, "3") || /*  3: Desktop */
+-          !strcmp(chassis_type, "4") || /*  4: Low Profile Desktop */
+-          !strcmp(chassis_type, "5") || /*  5: Pizza Box */
+-          !strcmp(chassis_type, "6") || /*  6: Mini Tower */
+-          !strcmp(chassis_type, "7") || /*  7: Tower */
+-          !strcmp(chassis_type, "11"))  /* 11: Main Server Chassis */
++      if (kstrtoul(chassis_type, 10, &type) != 0)
++              return false;
++
++      switch (type) {
++      case 0x03: /* Desktop */
++      case 0x04: /* Low Profile Desktop */
++      case 0x05: /* Pizza Box */
++      case 0x06: /* Mini Tower */
++      case 0x07: /* Tower */
++      case 0x11: /* Main Server Chassis */
+               return true;
++      }
+       return false;
+ }
+-- 
+2.19.1
+