Commit 2df541d0 authored by Hans de Goede's avatar Hans de Goede Committed by Greg Kroah-Hartman

ACPI / video: Refactor and fix dmi_is_desktop()

[ Upstream commit cecf3e3e ]

This commit refactors the chassis-type detection introduced by
commit 53fa1f6e ("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: 53fa1f6e ("ACPI / video: Only default only_lcd to true ...")
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
[ rjw: Drop redundant return statements ]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent d6310584
...@@ -2124,21 +2124,28 @@ static int __init intel_opregion_present(void) ...@@ -2124,21 +2124,28 @@ static int __init intel_opregion_present(void)
return opregion; return opregion;
} }
/* Check if the chassis-type indicates there is no builtin LCD panel */
static bool dmi_is_desktop(void) static bool dmi_is_desktop(void)
{ {
const char *chassis_type; const char *chassis_type;
unsigned long type;
chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE); chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE);
if (!chassis_type) if (!chassis_type)
return false; return false;
if (!strcmp(chassis_type, "3") || /* 3: Desktop */ if (kstrtoul(chassis_type, 10, &type) != 0)
!strcmp(chassis_type, "4") || /* 4: Low Profile Desktop */ return false;
!strcmp(chassis_type, "5") || /* 5: Pizza Box */
!strcmp(chassis_type, "6") || /* 6: Mini Tower */ switch (type) {
!strcmp(chassis_type, "7") || /* 7: Tower */ case 0x03: /* Desktop */
!strcmp(chassis_type, "11")) /* 11: Main Server Chassis */ case 0x04: /* Low Profile Desktop */
case 0x05: /* Pizza Box */
case 0x06: /* Mini Tower */
case 0x07: /* Tower */
case 0x11: /* Main Server Chassis */
return true; return true;
}
return false; return false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment