Re: [PATCH 1/2] ACPI / video: Refactor and fix dmi_is_desktop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 19-02-19 11:02, Rafael J. Wysocki wrote:
On Monday, January 7, 2019 5:08:20 PM CET Hans de Goede wrote:
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@xxxxxxxxxx>
---
  drivers/acpi/acpi_video.c | 20 +++++++++++++-------
  1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
index f0b52266b3ac..ba5c2f70babe 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -2124,21 +2124,27 @@ 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 */
-		return true;
+	if (kstrtoul(chassis_type, 10, &type) != 0)
+		return false;
+
+	switch (type) {
+	case 0x03: return true; /* Desktop */
+	case 0x04: return true; /* Low Profile Desktop */
+	case 0x05: return true; /* Pizza Box */
+	case 0x06: return true; /* Mini Tower */
+	case 0x07: return true; /* Tower */
+	case 0x11: return true; /* Main Server Chassis */
+	}
return false;
  }


I went ahead and changed this switch () to a fall-though one and
applied the patch along with the (rebased) [2/2].

Please let me know if there are any problems with that.

Thank you, I had this on my TODO but I did not get around to
it yet. The fixed version looks good to me.

Regards,

Hans



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux