lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Sun, 15 Oct 2017 18:03:14 +0200
From:   Pali Rohár <pali.rohar@...il.com>
To:     Matthew Garrett <mjg59@...f.ucam.org>,
        Darren Hart <dvhart@...radead.org>,
        Andy Shevchenko <andy@...radead.org>,
        "Gabriel M. Elder" <gabriel@...gnowsys.com>,
        Gabriele Mazzotta <gabriele.mzt@...il.com>,
        Mario.Limonciello@...l.com
Cc:     platform-driver-x86@...r.kernel.org, linux-kernel@...r.kernel.org,
        Pali Rohár <pali.rohar@...il.com>
Subject: [PATCH] dell-laptop: Fix keyboard led max_brightness property for Dell Latitude E6410

This machine reports number of keyboard backlight led levels, instead of
value of the last led level index. Therefore max_brightness properly needs
to be subtracted by 1 to match led max_brightness API.

Signed-off-by: Pali Rohár <pali.rohar@...il.com>
Reported-by: Gabriel M. Elder <gabriel@...gnowsys.com>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=196913
---

Hi! I have not tested this patch yet, but I'm sending it, so other people
including Gabriel can test or review it.

If you have better idea how to call that quirk variable, then fell free
to rename it. I'm not happy with "kbd_led_num_of_levels_instead_of_last_index"
but I have nothing better in my mind.

---
 drivers/platform/x86/dell-laptop.c |   25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
index f42159f..81f14ea 100644
--- a/drivers/platform/x86/dell-laptop.c
+++ b/drivers/platform/x86/dell-laptop.c
@@ -49,6 +49,7 @@
 
 struct quirk_entry {
 	u8 touchpad_led;
+	u8 kbd_led_num_of_levels_instead_of_last_index;
 
 	int needs_kbd_timeouts;
 	/*
@@ -79,6 +80,10 @@ static int __init dmi_matched(const struct dmi_system_id *dmi)
 	.kbd_timeouts = { 0, 5, 15, 60, 5 * 60, 15 * 60, -1 },
 };
 
+static struct quirk_entry quirk_dell_latitude_e6410 = {
+	.kbd_led_num_of_levels_instead_of_last_index = 1,
+};
+
 static struct platform_driver platform_driver = {
 	.driver = {
 		.name = "dell-laptop",
@@ -280,6 +285,15 @@ static int __init dmi_matched(const struct dmi_system_id *dmi)
 		},
 		.driver_data = &quirk_dell_xps13_9333,
 	},
+	{
+		.callback = dmi_matched,
+		.ident = "Dell Latitude E6410",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6410"),
+		},
+		.driver_data = &quirk_dell_latitude_e6410,
+	},
 	{ }
 };
 
@@ -1216,8 +1230,15 @@ static int kbd_get_info(struct kbd_info *info)
 
 static unsigned int kbd_get_max_level(void)
 {
-	if (kbd_info.levels != 0)
-		return kbd_info.levels;
+	u8 levels = kbd_info.levels;
+
+	if (quirks && quirks->kbd_led_num_of_levels_instead_of_last_index) {
+		if (levels > 1)
+			return levels - 1;
+	} else {
+		if (levels > 0)
+			return levels;
+	}
 	if (kbd_mode_levels_count > 0)
 		return kbd_mode_levels_count - 1;
 	return 0;
-- 
1.7.9.5

Powered by blists - more mailing lists