From patchwork Wed Dec 29 22:48:43 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mariusz Bialonczyk X-Patchwork-Id: 5333 Return-path: Envelope-to: mchehab@gaivota Delivery-date: Thu, 30 Dec 2010 07:23:09 -0200 Received: from mchehab by gaivota with local (Exim 4.72) (envelope-from ) id 1PYEiz-0000Wx-1d for mchehab@gaivota; Thu, 30 Dec 2010 07:23:09 -0200 Received: from casper.infradead.org [85.118.1.10] by gaivota with IMAP (fetchmail-6.3.17) for (single-drop); Thu, 30 Dec 2010 07:23:09 -0200 (BRST) Received: from vger.kernel.org ([209.132.180.67]) by casper.infradead.org with esmtp (Exim 4.72 #1 (Red Hat Linux)) id 1PY4pG-0006I3-4s; Wed, 29 Dec 2010 22:48:58 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754034Ab0L2Ws4 (ORCPT + 1 other); Wed, 29 Dec 2010 17:48:56 -0500 Received: from skyboo.net ([82.160.187.4]:36688 "EHLO skyboo.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1753937Ab0L2Wsz (ORCPT ); Wed, 29 Dec 2010 17:48:55 -0500 Received: from [2001:470:1f0b:1af:f000::2] by skyboo.net with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.72) (envelope-from ) id 1PY4pB-0002dA-31; Wed, 29 Dec 2010 23:48:53 +0100 Message-ID: <4D1BBACB.9020502@skyboo.net> Date: Wed, 29 Dec 2010 23:48:43 +0100 From: =?UTF-8?B?TWFyaXVzeiBCaWHFgm/FhGN6eWs=?= User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20101211 Icedove/3.0.11 MIME-Version: 1.0 To: Mauro Carvalho Chehab CC: linux-media@vger.kernel.org References: <4D17816B.2050500@skyboo.net> <4D187D96.5060303@redhat.com> In-Reply-To: <4D187D96.5060303@redhat.com> X-SA-Exim-Connect-IP: 2001:470:1f0b:1af:f000::2 X-SA-Exim-Mail-From: manio@skyboo.net X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on draco.skyboo.net X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=unavailable version=3.3.1 Subject: [PATCH] ir-nec-decoder: fix repeat key issue X-SA-Exim-Version: 4.2.1 (built Mon, 22 Mar 2010 06:26:47 +0000) X-SA-Exim-Scanned: Yes (on skyboo.net) Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Sender: Mauro Carvalho Chehab Fixing the problem with NEC protocol and repeating keys under the following circumstances. The problem occurs when there is a repeat code without properly decoded scancode. This leads to repeat the wrong (last decoded) scancode. An example from real life: I am pressing volume down, then several minutes later i am pressing volume up, but the real scancode is wrongly decoded and only a repeat event is emitted, so as a result volume is going down while i am holding volume up button. The patch fixes above problem using rc_keyup timeout (as pointed by Mauro). It just prevents key repeats if they appear after rc_keyup. Signed-off-by: Mariusz Bia?o?czyk --- The patch is created against staging/for_v2.6.38. drivers/media/rc/ir-nec-decoder.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/media/rc/ir-nec-decoder.c b/drivers/media/rc/ir-nec-decoder.c index 5d15c31..7b58b4a 100644 --- a/drivers/media/rc/ir-nec-decoder.c +++ b/drivers/media/rc/ir-nec-decoder.c @@ -88,9 +88,13 @@ static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev) data->state = STATE_BIT_PULSE; return 0; } else if (eq_margin(ev.duration, NEC_REPEAT_SPACE, NEC_UNIT / 2)) { - rc_repeat(dev); - IR_dprintk(1, "Repeat last key\n"); - data->state = STATE_TRAILER_PULSE; + if (!dev->keypressed) { + IR_dprintk(1, "Discarding last key repeat: event after key up\n"); + } else { + rc_repeat(dev); + IR_dprintk(1, "Repeat last key\n"); + data->state = STATE_TRAILER_PULSE; + } return 0; }