From patchwork Wed May 11 16:46:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yusuke Fujimaki X-Patchwork-Id: 9073081 Return-Path: X-Original-To: patchwork-linux-input@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 6EE4A9F30C for ; Wed, 11 May 2016 16:46:47 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 87A002010F for ; Wed, 11 May 2016 16:46:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AE9592014A for ; Wed, 11 May 2016 16:46:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752008AbcEKQqo (ORCPT ); Wed, 11 May 2016 12:46:44 -0400 Received: from mail-pa0-f67.google.com ([209.85.220.67]:33932 "EHLO mail-pa0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752001AbcEKQqo (ORCPT ); Wed, 11 May 2016 12:46:44 -0400 Received: by mail-pa0-f67.google.com with SMTP id yl2so3962540pac.1 for ; Wed, 11 May 2016 09:46:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=S+JjqIftxj0g+Bz4N9bH8zSWwO+ew65Be9zwEUv7pII=; b=D7DfkqMHQH4y6qHUND4xuQdTYshmtrSeYWgvnTDLTmX6zKNaVsfi45yu9E7Z7yih+E 4Jcp9Zm9oQE+jeIa9B3UP2jEFnwmWQLFhtFo1KjuU0nvYBcteYpcfn+Yle3S/RB/LRD/ 157bSjPezdxkOTPQEB4FBb4msv/2zj74pOfqaJVdGz32k8Li0ZDUfjj8AZi+B5MjDfTE JIIsUOcc3s1ObfBrGoPtWWskxtnd1AmNBKAwl1jbGc43Ly0jW7I8S3U5Mr7KJlkCGYyG o6N0Rslnb2hLMQ6K8YkTkD1AiUh+O6g6+eMSsXOAoOwmrc36g1ddE9DHrdi5ARHsnb58 ysVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=S+JjqIftxj0g+Bz4N9bH8zSWwO+ew65Be9zwEUv7pII=; b=J83QUKdM5j4PYUHwj53YsBjw1RfrCf8jGRHqVaKjKfyf5EiBmVcVUu/1wovv+CJSm9 2AWm1oVcV3ZBQ9jL6Tbm49rDtJ4JBD+D9GvHRT/3Ujx1IXNtHSu1TqGt0700t9Inaen7 nG0VPoxHb3wKxl7iXNysfs/9fbpOfdyAL70ycrYTquYvuGXieLR20jUjzw8Z4R4Wpmhv Pr2PT6nehYb20hVwPixYBKrOs9i9mFUKYNsj7hYTeI33IKwpO3fceRXrlq7kGbLFMm02 PysSVf5jBUugO9Fl2sQAlcBZjFVSrN9FFyeRUHyxA/3Ld2apgzU1Vb8r20hiiGpbof9+ hFcQ== X-Gm-Message-State: AOPr4FUmbNMipa/8r1pq2PFIjKY0IZBhIN2ZsXYVzo4nBqjYUQo47ha3h70jXcw4piy7Cg== X-Received: by 10.66.66.42 with SMTP id c10mr6351997pat.119.1462985203203; Wed, 11 May 2016 09:46:43 -0700 (PDT) Received: from ppp.wakwak.ne.jp (z24.124-44-186.ppp.wakwak.ne.jp. [124.44.186.24]) by smtp.gmail.com with ESMTPSA id 28sm13382810pfr.89.2016.05.11.09.46.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 11 May 2016 09:46:42 -0700 (PDT) From: Yusuke Fujimaki To: Jiri Kosina Cc: Benjamin Tissoires , linux-input@vger.kernel.org, Yusuke Fujimaki Subject: [PATCH] HID: asus: add support for hotkeys Date: Thu, 12 May 2016 01:46:07 +0900 Message-Id: <1462985167-8566-1-git-send-email-usk.fujimaki@gmail.com> X-Mailer: git-send-email 2.1.4 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Spam-Status: No, score=-8.2 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Asus X205TA and E200HA keyboard hotkeys (excluding volume control) sends vendor specific usage id. This patch add input mapping to support such hotkeys. Signed-off-by: Yusuke Fujimaki --- drivers/hid/hid-asus.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c index 7a811ec..a71f90c 100644 --- a/drivers/hid/hid-asus.c +++ b/drivers/hid/hid-asus.c @@ -26,6 +26,10 @@ #include "hid-ids.h" +#define HID_UP_ASUSVENDOR 0xff310000 +#define asus_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, \ + EV_KEY, (c)) + static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc, unsigned int *rsize) { @@ -36,6 +40,26 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc, return rdesc; } +static int asus_input_mapping(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + if ((usage->hid & HID_USAGE_PAGE) != HID_UP_ASUSVENDOR) + return 0; + + switch (usage->hid & HID_USAGE) { + case 0x10: asus_map_key_clear(KEY_BRIGHTNESSDOWN); break; + case 0x20: asus_map_key_clear(KEY_BRIGHTNESSUP); break; + case 0x35: asus_map_key_clear(KEY_DISPLAY_OFF); break; + case 0x6b: asus_map_key_clear(KEY_TOUCHPAD_TOGGLE); break; + case 0x6c: asus_map_key_clear(KEY_SLEEP); break; + case 0x88: asus_map_key_clear(KEY_RFKILL); break; + default: + return 0; + } + return 1; +} + static const struct hid_device_id asus_devices[] = { { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_NOTEBOOK_KEYBOARD) }, { } @@ -45,6 +69,7 @@ MODULE_DEVICE_TABLE(hid, asus_devices); static struct hid_driver asus_driver = { .name = "asus", .id_table = asus_devices, + .input_mapping = asus_input_mapping, .report_fixup = asus_report_fixup }; module_hid_driver(asus_driver);