From patchwork Thu Apr 27 20:34:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?RGF2aWQgSMODwqRyZGVtYW4=?= X-Patchwork-Id: 9703433 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 1F17B60225 for ; Thu, 27 Apr 2017 20:34:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 124002860B for ; Thu, 27 Apr 2017 20:34:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 06CC928639; Thu, 27 Apr 2017 20:34:18 +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=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI 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 79AC22860B for ; Thu, 27 Apr 2017 20:34:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936264AbdD0UeQ (ORCPT ); Thu, 27 Apr 2017 16:34:16 -0400 Received: from vader.hardeman.nu ([95.142.160.32]:55244 "EHLO hardeman.nu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935951AbdD0UeP (ORCPT ); Thu, 27 Apr 2017 16:34:15 -0400 Received: from hardeman.nu (zeus.hardeman.nu [IPv6:fd27:2a41:8fcb:2::a]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by vader.hardeman.nu (Postfix) with ESMTPSA id B65F646FB; Thu, 27 Apr 2017 22:34:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=hardeman.nu; s=hardeman-201703; t=1493325253; bh=Em8kcSiS248t6+mtF4LTDpuSWHst7m5cZmla9qLPogY=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=gUJRbxUneULqIAY2dZfnner7Lc4R3cM/LYyaZUfE03Bso0u4SLW2SWNNvs6UQgFAX X2Hqjb/Tiny3cVoxSvK2b3KllwHgxhwLJ0w8EkaFHuU++Nhlbx0y1z+KkNnLNynD5t Q6/CMg9B1AzM7WsPssujUXyK9UO1YEXFBp8WOZ+vqwi0RuWo1NiukoUF/k7wMvz1xF 43NohZ43q5aytvUo9wnD9Fb66ArToqXmeQ1SaxmzEAvotYPFSBrU6TZ6bNTxSNPSvy oNnsoXjPPRPdcnF5vWMrAHqyGzD/Tnr8zVoiNLsBe1SsG/7jGZNbPfNTdyZ0KVt+EM EJcqrO28yNSaQ== Received: (nullmailer pid 32626 invoked by uid 1000); Thu, 27 Apr 2017 20:34:13 -0000 Subject: [PATCH 4/6] rc-core: use the full 32 bits for NEC scancodes in wakefilters From: David =?utf-8?b?SMOkcmRlbWFu?= To: linux-media@vger.kernel.org Cc: mchehab@s-opensource.com, sean@mess.org Date: Thu, 27 Apr 2017 22:34:13 +0200 Message-ID: <149332525323.32431.14186133466616956249.stgit@zeus.hardeman.nu> In-Reply-To: <149332488240.32431.6597996407440701793.stgit@zeus.hardeman.nu> References: <149332488240.32431.6597996407440701793.stgit@zeus.hardeman.nu> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The new sysfs wakefilter API will expose the difference between the NEC protocols to userspace for no good reason and once exposed, it will be much more difficult to change the logic. By only allowing full NEC32 scancodes to be set, any heuristics in the kernel can be avoided. This is a minor preparation for the next patch which moves the rest of rc-core over to only using NEC32. Signed-off-by: David Härdeman --- drivers/media/rc/rc-main.c | 17 ++++------------- drivers/media/rc/winbond-cir.c | 32 ++------------------------------ 2 files changed, 6 insertions(+), 43 deletions(-) diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c index 0acc8f27abeb..8355f86a460b 100644 --- a/drivers/media/rc/rc-main.c +++ b/drivers/media/rc/rc-main.c @@ -741,8 +741,6 @@ static int rc_validate_filter(struct rc_dev *dev, [RC_TYPE_SONY15] = 0xff007f, [RC_TYPE_SONY20] = 0x1fff7f, [RC_TYPE_JVC] = 0xffff, - [RC_TYPE_NEC] = 0xffff, - [RC_TYPE_NECX] = 0xffffff, [RC_TYPE_NEC32] = 0xffffffff, [RC_TYPE_SANYO] = 0x1fffff, [RC_TYPE_MCIR2_KBD] = 0xffff, @@ -758,14 +756,9 @@ static int rc_validate_filter(struct rc_dev *dev, enum rc_type protocol = dev->wakeup_protocol; switch (protocol) { + case RC_TYPE_NEC: case RC_TYPE_NECX: - if ((((s >> 16) ^ ~(s >> 8)) & 0xff) == 0) - return -EINVAL; - break; - case RC_TYPE_NEC32: - if ((((s >> 24) ^ ~(s >> 16)) & 0xff) == 0) - return -EINVAL; - break; + return -EINVAL; case RC_TYPE_RC6_MCE: if ((s & 0xffff0000) != 0x800f0000) return -EINVAL; @@ -1301,7 +1294,7 @@ static ssize_t store_filter(struct device *device, /* * This is the list of all variants of all protocols, which is used by * the wakeup_protocols sysfs entry. In the protocols sysfs entry some - * some protocols are grouped together (e.g. nec = nec + necx + nec32). + * some protocols are grouped together. * * For wakeup we need to know the exact protocol variant so the hardware * can be programmed exactly what to expect. @@ -1316,9 +1309,7 @@ static const char * const proto_variant_names[] = { [RC_TYPE_SONY12] = "sony-12", [RC_TYPE_SONY15] = "sony-15", [RC_TYPE_SONY20] = "sony-20", - [RC_TYPE_NEC] = "nec", - [RC_TYPE_NECX] = "nec-x", - [RC_TYPE_NEC32] = "nec-32", + [RC_TYPE_NEC32] = "nec", [RC_TYPE_SANYO] = "sanyo", [RC_TYPE_MCIR2_KBD] = "mcir2-kbd", [RC_TYPE_MCIR2_MSE] = "mcir2-mse", diff --git a/drivers/media/rc/winbond-cir.c b/drivers/media/rc/winbond-cir.c index 5a4d4a611197..6ef0e7232356 100644 --- a/drivers/media/rc/winbond-cir.c +++ b/drivers/media/rc/winbond-cir.c @@ -714,34 +714,6 @@ wbcir_shutdown(struct pnp_dev *device) proto = IR_PROTOCOL_RC5; break; - case RC_TYPE_NEC: - mask[1] = bitrev8(mask_sc); - mask[0] = mask[1]; - mask[3] = bitrev8(mask_sc >> 8); - mask[2] = mask[3]; - - match[1] = bitrev8(wake_sc); - match[0] = ~match[1]; - match[3] = bitrev8(wake_sc >> 8); - match[2] = ~match[3]; - - proto = IR_PROTOCOL_NEC; - break; - - case RC_TYPE_NECX: - mask[1] = bitrev8(mask_sc); - mask[0] = mask[1]; - mask[2] = bitrev8(mask_sc >> 8); - mask[3] = bitrev8(mask_sc >> 16); - - match[1] = bitrev8(wake_sc); - match[0] = ~match[1]; - match[2] = bitrev8(wake_sc >> 8); - match[3] = bitrev8(wake_sc >> 16); - - proto = IR_PROTOCOL_NEC; - break; - case RC_TYPE_NEC32: mask[0] = bitrev8(mask_sc); mask[1] = bitrev8(mask_sc >> 8); @@ -1087,8 +1059,8 @@ wbcir_probe(struct pnp_dev *device, const struct pnp_device_id *dev_id) data->dev->max_timeout = 10 * IR_DEFAULT_TIMEOUT; data->dev->rx_resolution = US_TO_NS(2); data->dev->allowed_protocols = RC_BIT_ALL_IR_DECODER; - data->dev->allowed_wakeup_protocols = RC_BIT_NEC | RC_BIT_NECX | - RC_BIT_NEC32 | RC_BIT_RC5 | RC_BIT_RC6_0 | + data->dev->allowed_wakeup_protocols = + RC_BIT_NEC | RC_BIT_RC5 | RC_BIT_RC6_0 | RC_BIT_RC6_6A_20 | RC_BIT_RC6_6A_24 | RC_BIT_RC6_6A_32 | RC_BIT_RC6_MCE; data->dev->wakeup_protocol = RC_TYPE_RC6_MCE;