aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2019-01-07 11:08:20 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2019-02-13 17:35:55 -0500
commitcecf3e3e0803462335e25d083345682518097334 (patch)
tree8485cc0651b489ea15623472714f76a635851563
parentd13937116f1e82bf508a6325111b322c30c85eb9 (diff)
ACPI / video: Refactor and fix dmi_is_desktop()
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>
-rw-r--r--drivers/acpi/acpi_video.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
index f0b52266b3ac..1ab1460c4a4e 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -2124,21 +2124,28 @@ static int __init intel_opregion_present(void)
2124 return opregion; 2124 return opregion;
2125} 2125}
2126 2126
2127/* Check if the chassis-type indicates there is no builtin LCD panel */
2127static bool dmi_is_desktop(void) 2128static bool dmi_is_desktop(void)
2128{ 2129{
2129 const char *chassis_type; 2130 const char *chassis_type;
2131 unsigned long type;
2130 2132
2131 chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE); 2133 chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE);
2132 if (!chassis_type) 2134 if (!chassis_type)
2133 return false; 2135 return false;
2134 2136
2135 if (!strcmp(chassis_type, "3") || /* 3: Desktop */ 2137 if (kstrtoul(chassis_type, 10, &type) != 0)
2136 !strcmp(chassis_type, "4") || /* 4: Low Profile Desktop */ 2138 return false;
2137 !strcmp(chassis_type, "5") || /* 5: Pizza Box */ 2139
2138 !strcmp(chassis_type, "6") || /* 6: Mini Tower */ 2140 switch (type) {
2139 !strcmp(chassis_type, "7") || /* 7: Tower */ 2141 case 0x03: /* Desktop */
2140 !strcmp(chassis_type, "11")) /* 11: Main Server Chassis */ 2142 case 0x04: /* Low Profile Desktop */
2143 case 0x05: /* Pizza Box */
2144 case 0x06: /* Mini Tower */
2145 case 0x07: /* Tower */
2146 case 0x11: /* Main Server Chassis */
2141 return true; 2147 return true;
2148 }
2142 2149
2143 return false; 2150 return false;
2144} 2151}