From patchwork Sun Oct 15 16:03:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pali_Roh=C3=A1r?= X-Patchwork-Id: 10007167 X-Patchwork-Delegate: dvhart@infradead.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id DF97E60235 for ; Sun, 15 Oct 2017 16:03:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 061F328B91 for ; Sun, 15 Oct 2017 16:03:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EF06128B94; Sun, 15 Oct 2017 16:03:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 742EB28B91 for ; Sun, 15 Oct 2017 16:03:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751763AbdJOQDq (ORCPT ); Sun, 15 Oct 2017 12:03:46 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:33258 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751386AbdJOQDp (ORCPT ); Sun, 15 Oct 2017 12:03:45 -0400 Received: by mail-wm0-f65.google.com with SMTP id u138so5921321wmu.0; Sun, 15 Oct 2017 09:03:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nPcu9huaWzCKeFCXcnqUxp9e/Rifq5zIZspez0fNlK8=; b=Qi44RmCvqAoA1hZ6r47t1HyUmVKGpRWUcpf+PmEOe/aCtiXbwUH1p92aSZQUaWjpzK xWQipDMfGLfEegap+YWE3g/q8HRSbw14mgIMED+w1BbA3Ee7ACthN0FQ5byBAqy3vvOx RbMC3Rw2YxDxg1zBoY5aGMYP/48V6YB1/GuBGs/Kjz3zQ6vb4pGMZC1gsPJr22e7LLyS IyiymNrhTIwuPSalscL3Q7hQNB5f7322LH7l1qUwvi0ZbsTWsSbojuY6oT/+i8cewWGk t1cwsbmHwXhMGEITPlICYjIK/mMjgNk+mCjaE5QOnxYh+I5nP+kk+Z0xVLBa8rLU3U1G ZanQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=nPcu9huaWzCKeFCXcnqUxp9e/Rifq5zIZspez0fNlK8=; b=IemWFnmvYegs2hn6hZugiN3dVoFVzXipANBVHdbxxI46S8tDxZ1vFBgh+GdG66hqAJ EXnB4iFm3RG8BaGQGfHmQoUzoqwQUG0Bjh9sIPiEoXZH6RyUIdpfQWErXyfucZF2dgiS tVzYtir95h9OYop+mGgJTNiVz29aa0jqNloVItUlEmpvdLBnl2C36yehT6c4PEAdVRXp rTv3qZ5sKgWw+8o+NRjWZdgwNHFsRzeNLdSXXpD0dZQ8OwoEt1j7l+GRpcw+q4OVZD38 K1JYRqsODFyL+SMvo+5eQiyxoFXZkShOWnjpm92KgPHjguuuxx3R//aRM7XVWTIrjpMb 57IA== X-Gm-Message-State: AMCzsaUca6Dz6dpPGEpo5wAKD5AQ6Vbj3Z77rytsjiRZBdIJPHAH++7K 83fBvSYplE1PHrNtZF7umz0= X-Google-Smtp-Source: ABhQp+TVtbggWHXk8A5GAo3ArEj1aC0khzrvTUEMYrlO9q8ywelf022QP+JZvG3uvmVI1o4Uq+xvnQ== X-Received: by 10.223.154.237 with SMTP id a100mr5678068wrc.108.1508083423993; Sun, 15 Oct 2017 09:03:43 -0700 (PDT) Received: from Pali-Latitude.lan (pali.kolej.mff.cuni.cz. [78.128.193.202]) by smtp.gmail.com with ESMTPSA id n11sm693946wrh.71.2017.10.15.09.03.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 15 Oct 2017 09:03:42 -0700 (PDT) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Matthew Garrett , Darren Hart , Andy Shevchenko , "Gabriel M. Elder" , Gabriele Mazzotta , Mario.Limonciello@dell.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= Subject: [PATCH] dell-laptop: Fix keyboard led max_brightness property for Dell Latitude E6410 Date: Sun, 15 Oct 2017 18:03:14 +0200 Message-Id: <1508083394-22823-1-git-send-email-pali.rohar@gmail.com> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 Sender: platform-driver-x86-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 Reported-by: Gabriel M. Elder 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;