Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753172AbdCTMrn (ORCPT ); Mon, 20 Mar 2017 08:47:43 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:34867 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753324AbdCTJcb (ORCPT ); Mon, 20 Mar 2017 05:32:31 -0400 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= To: Jonathan Woithe , Darren Hart , Andy Shevchenko Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/8] platform/x86: fujitsu-laptop: use a sparse keymap for brightness key event generation Date: Mon, 20 Mar 2017 10:32:19 +0100 Message-Id: <20170320093224.18541-4-kernel@kempniu.pl> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170320093224.18541-1-kernel@kempniu.pl> References: <20170320093224.18541-1-kernel@kempniu.pl> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3337 Lines: 101 Simplify brightness key event generation by using a sparse keymap. Signed-off-by: Michał Kępień --- drivers/platform/x86/Kconfig | 1 + drivers/platform/x86/fujitsu-laptop.c | 31 +++++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig index 4bc88eb52712..f614521a6876 100644 --- a/drivers/platform/x86/Kconfig +++ b/drivers/platform/x86/Kconfig @@ -175,6 +175,7 @@ config FUJITSU_LAPTOP depends on BACKLIGHT_CLASS_DEVICE depends on ACPI_VIDEO || ACPI_VIDEO = n depends on LEDS_CLASS || LEDS_CLASS=n + select INPUT_SPARSEKMAP ---help--- This is a driver for laptops built by Fujitsu: diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c index 68e338c6a876..3483ac37bee5 100644 --- a/drivers/platform/x86/fujitsu-laptop.c +++ b/drivers/platform/x86/fujitsu-laptop.c @@ -57,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -590,9 +591,16 @@ static const struct dmi_system_id fujitsu_dmi_table[] __initconst = { /* ACPI device for LCD brightness control */ +static const struct key_entry keymap_backlight[] = { + { KE_KEY, true, { KEY_BRIGHTNESSUP } }, + { KE_KEY, false, { KEY_BRIGHTNESSDOWN } }, + { KE_END, 0 } +}; + static int acpi_fujitsu_bl_input_setup(struct acpi_device *device) { struct fujitsu_bl *fujitsu_bl = acpi_driver_data(device); + int ret; fujitsu_bl->input = devm_input_allocate_device(&device->dev); if (!fujitsu_bl->input) @@ -605,10 +613,10 @@ static int acpi_fujitsu_bl_input_setup(struct acpi_device *device) fujitsu_bl->input->phys = fujitsu_bl->phys; fujitsu_bl->input->id.bustype = BUS_HOST; fujitsu_bl->input->id.product = 0x06; - fujitsu_bl->input->evbit[0] = BIT(EV_KEY); - set_bit(KEY_BRIGHTNESSUP, fujitsu_bl->input->keybit); - set_bit(KEY_BRIGHTNESSDOWN, fujitsu_bl->input->keybit); - set_bit(KEY_UNKNOWN, fujitsu_bl->input->keybit); + + ret = sparse_keymap_setup(fujitsu_bl->input, keymap_backlight, NULL); + if (ret) + return ret; return input_register_device(fujitsu_bl->input); } @@ -714,18 +722,14 @@ static int acpi_fujitsu_bl_remove(struct acpi_device *device) static void acpi_fujitsu_bl_notify(struct acpi_device *device, u32 event) { struct input_dev *input; - int oldb, newb, keycode; + int oldb, newb; input = fujitsu_bl->input; if (event != ACPI_FUJITSU_NOTIFY_CODE1) { - keycode = KEY_UNKNOWN; vdbg_printk(FUJLAPTOP_DBG_WARN, "unsupported event [0x%x]\n", event); - input_report_key(input, keycode, 1); - input_sync(input); - input_report_key(input, keycode, 0); - input_sync(input); + sparse_keymap_report_event(input, -1, 1, true); return; } @@ -747,12 +751,7 @@ static void acpi_fujitsu_bl_notify(struct acpi_device *device, u32 event) set_lcd_level(newb); } - keycode = oldb < newb ? KEY_BRIGHTNESSUP : KEY_BRIGHTNESSDOWN; - - input_report_key(input, keycode, 1); - input_sync(input); - input_report_key(input, keycode, 0); - input_sync(input); + sparse_keymap_report_event(input, oldb < newb, 1, true); } /* ACPI device for hotkey handling */ -- 2.12.0