From patchwork Mon Oct 9 22:34:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Torokhov X-Patchwork-Id: 9994439 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 1E6A4602D7 for ; Mon, 9 Oct 2017 22:34:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 102C92881E for ; Mon, 9 Oct 2017 22:34:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F2BF928823; Mon, 9 Oct 2017 22:34:38 +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.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable 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 8E83128820 for ; Mon, 9 Oct 2017 22:34:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755607AbdJIWeY (ORCPT ); Mon, 9 Oct 2017 18:34:24 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:38682 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755560AbdJIWeP (ORCPT ); Mon, 9 Oct 2017 18:34:15 -0400 Received: by mail-pf0-f194.google.com with SMTP id a7so30872545pfj.5; Mon, 09 Oct 2017 15:34:15 -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:in-reply-to:references; bh=RoLCHYT7cTy++OBzjqT06dDXI6pBFlg6VE6EOVkeZnc=; b=o1eZsjsfBHi1AbgeTzEJrYz/ZZ9/w188i/L5BBjwsBgX2E+HF5rfEPmLf/IprxSBrI wcnqUjeh4FIhsPHqvl+qakqfaCqCWRPN8yn2Mdwmgp3G7t0ld6INqFoD9jO0Amknah1/ qxxqstkYSWgv117/yXR3FhNYsLxBorG2bgdXrhP7edXds58pxUK0iThInzLv5HXHeLtU nBiQ3XlRhbsNc7aHknr/M5bfkOYgNcmXzKtXqUWASDI9Fj4VkRkl4jqG2p+QP5uOPOku +eUIVF2Sg7mjUIvkgIc+mx1SGIXtFP9VI0fhG1SodeQ5FMfXwj8BJJDKYWvTay8pffla HIkA== 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:in-reply-to :references; bh=RoLCHYT7cTy++OBzjqT06dDXI6pBFlg6VE6EOVkeZnc=; b=ANEEst6w6yjyrAgj94DZuorGyXSdVVKix73G87m7ficyiBgluIB/lW+/skELgfAKKF UJgohKuH7MQykzM6L5sYbWRaLKCr0YAPbqh4QF4DqfawAoT1yGzdtSvvD1UDkBr9lBwl 2FxkrWbmdCOsDmeVRBf9PQQJ0SUe0KPRS2b4nfND0AX8433sCu7sVtDoThNorJTHfRgt AyLpmEX08QjHQL/a/eQ73ePLoLi0tOI0zIxiTKVFzwVedtQu7rhAVx4qNKwQifA5kWGI jNXCWgH00+ApM+4RJagwYU62mSiVGp+rbftGZrNL/UkJoHauFsRjK2Ln2w9gWngfq4Ph YxxQ== X-Gm-Message-State: AMCzsaW7XbqP6lN4PUxQZEldSgYMOch4PNj6Oc362GzX+kke5BxjEOP4 vchO5VIiTNT4Bgp9j60eFNGBMZ0M X-Google-Smtp-Source: AOwi7QAmDYCPr1zuDlZF7sHQTWSyoigHCxPlIL01JIrSb0e1NNqQXQ0KECHz2vksvIeJwuYRe0EdsA== X-Received: by 10.84.248.152 with SMTP id q24mr9956783pll.75.1507588454684; Mon, 09 Oct 2017 15:34:14 -0700 (PDT) Received: from dtor-ws.mtv.corp.google.com ([100.98.112.21]) by smtp.gmail.com with ESMTPSA id t73sm7984345pfg.94.2017.10.09.15.34.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 09 Oct 2017 15:34:13 -0700 (PDT) From: Dmitry Torokhov To: linux-input@vger.kernel.org Cc: Roderick Colenbrander , Benjamin Tissoires , Jiri Kosina , linux-kernel@vger.kernel.org Subject: [PATCH 3/3] Input: joydev - blacklist ds3/ds4/udraw motion sensors Date: Mon, 9 Oct 2017 15:34:10 -0700 Message-Id: <20171009223410.17164-3-dmitry.torokhov@gmail.com> X-Mailer: git-send-email 2.14.2.920.gcf0c67979c-goog In-Reply-To: <20171009223410.17164-1-dmitry.torokhov@gmail.com> References: <20171009223410.17164-1-dmitry.torokhov@gmail.com> Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Roderick Colenbrander Introduce a device table used for blacklisting devices. We currently blacklist the motion sensor subdevice of THQ Udraw and Sony ds3/ds4. Signed-off-by: Roderick Colenbrander Signed-off-by: Dmitry Torokhov --- drivers/input/joydev.c | 70 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 6 deletions(-) diff --git a/drivers/input/joydev.c b/drivers/input/joydev.c index 29d677c714d2..7b29a8944039 100644 --- a/drivers/input/joydev.c +++ b/drivers/input/joydev.c @@ -747,6 +747,68 @@ static void joydev_cleanup(struct joydev *joydev) input_close_device(handle); } +/* + * These codes are copied from from hid-ids.h, unfortunately there is no common + * usb_ids/bt_ids.h header. + */ +#define USB_VENDOR_ID_SONY 0x054c +#define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268 +#define USB_DEVICE_ID_SONY_PS4_CONTROLLER 0x05c4 +#define USB_DEVICE_ID_SONY_PS4_CONTROLLER_2 0x09cc +#define USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE 0x0ba0 + +#define USB_VENDOR_ID_THQ 0x20d6 +#define USB_DEVICE_ID_THQ_PS3_UDRAW 0xcb17 + +#define ACCEL_DEV(vnd, prd) \ + { \ + .flags = INPUT_DEVICE_ID_MATCH_VENDOR | \ + INPUT_DEVICE_ID_MATCH_PRODUCT | \ + INPUT_DEVICE_ID_MATCH_PROPBIT, \ + .vendor = (vnd), \ + .product = (prd), \ + .propbit = { BIT_MASK(INPUT_PROP_ACCELEROMETER) }, \ + } + +static const struct input_device_id joydev_blacklist[] = { + /* Avoid touchpads and touchscreens */ + { + .flags = INPUT_DEVICE_ID_MATCH_EVBIT | + INPUT_DEVICE_ID_MATCH_KEYBIT, + .evbit = { BIT_MASK(EV_KEY) }, + .keybit = { [BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH) }, + }, + /* Avoid tablets, digitisers and similar devices */ + { + .flags = INPUT_DEVICE_ID_MATCH_EVBIT | + INPUT_DEVICE_ID_MATCH_KEYBIT, + .evbit = { BIT_MASK(EV_KEY) }, + .keybit = { [BIT_WORD(BTN_DIGI)] = BIT_MASK(BTN_DIGI) }, + }, + /* Disable accelerometers on composite devices */ + ACCEL_DEV(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER), + ACCEL_DEV(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER), + ACCEL_DEV(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2), + ACCEL_DEV(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE), + ACCEL_DEV(USB_VENDOR_ID_THQ, USB_DEVICE_ID_THQ_PS3_UDRAW), + { /* sentinel */ } +}; + +static bool joydev_dev_is_blacklisted(struct input_dev *dev) +{ + const struct input_device_id *id; + + for (id = joydev_blacklist; id->flags; id++) { + if (input_match_device_id(dev, id)) { + dev_dbg(&dev->dev, + "joydev: blacklisting '%s'\n", dev->name); + return true; + } + } + + return false; +} + static bool joydev_dev_is_absolute_mouse(struct input_dev *dev) { DECLARE_BITMAP(jd_scratch, KEY_CNT); @@ -807,12 +869,8 @@ static bool joydev_dev_is_absolute_mouse(struct input_dev *dev) static bool joydev_match(struct input_handler *handler, struct input_dev *dev) { - /* Avoid touchpads and touchscreens */ - if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_TOUCH, dev->keybit)) - return false; - - /* Avoid tablets, digitisers and similar devices */ - if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_DIGI, dev->keybit)) + /* Disable blacklisted devices */ + if (joydev_dev_is_blacklisted(dev)) return false; /* Avoid absolute mice */