From patchwork Fri Mar 14 23:04:18 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: James Hogan X-Patchwork-Id: 23101 Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.72) (envelope-from ) id 1WObCK-0003LH-4d; Sat, 15 Mar 2014 00:07:28 +0100 X-tubIT-Incoming-IP: 209.132.180.67 Received: from vger.kernel.org ([209.132.180.67]) by mail.tu-berlin.de (exim-4.72/mailfrontend-8) with esmtp id 1WObCH-0003yN-lr; Sat, 15 Mar 2014 00:07:27 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756008AbaCNXHP (ORCPT + 1 other); Fri, 14 Mar 2014 19:07:15 -0400 Received: from mail-wi0-f172.google.com ([209.85.212.172]:41937 "EHLO mail-wi0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755970AbaCNXHG (ORCPT ); Fri, 14 Mar 2014 19:07:06 -0400 Received: by mail-wi0-f172.google.com with SMTP id hi5so165909wib.11 for ; Fri, 14 Mar 2014 16:07:05 -0700 (PDT) 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:in-reply-to :references:mime-version:content-type:content-transfer-encoding; bh=obYZInWlw3dULS1MoNZ5f7YwO6JI4tyjudiBhk5Whwk=; b=L2ysuBorhRgFvVPGumjflNY5TX0Zu8mqBCSmCj1z+u0+eNpdXeOHpm1t64U/Z9KaDP ZA0JycT8zkJyiQmyobQbU31uKIK++eNWILxm8P7Boo6WM/N2VsNTjBnUgFKFYoUscEU2 ZzWHEHDQmd6Gda2OZdSvTdp1kFmB8vmbKQH35FO8VOdev/dqx56tgejPcmodSyRvi2tX YpVs7IE6sXIEEK12IzOy/9lgxSlIVtHDDRC+7sm+pTZEahrs3YhuHU4dNWJTGTmzD+Sx 546Yt3OZU5Y1zXxQiGv0CGwYACXnuw84jSQv3JrtPzepRBzDRbnkjwhtCMjze172OHkV TsXQ== X-Gm-Message-State: ALoCoQlnpOc/Jp420pI21bIflj2YYc/9eTtr520S6C3zJihvlNiQ/fYR8+3hY4l2XdEz1oJY97fb X-Received: by 10.180.108.199 with SMTP id hm7mr355635wib.1.1394838425511; Fri, 14 Mar 2014 16:07:05 -0700 (PDT) Received: from localhost.localdomain (jahogan.plus.com. [212.159.75.221]) by mx.google.com with ESMTPSA id dd3sm17220342wjb.9.2014.03.14.16.07.03 for (version=TLSv1.2 cipher=AES128-GCM-SHA256 bits=128/128); Fri, 14 Mar 2014 16:07:04 -0700 (PDT) From: James Hogan To: Mauro Carvalho Chehab , =?UTF-8?q?Antti=20Sepp=C3=A4l=C3=A4?= Cc: linux-media@vger.kernel.org, James Hogan Subject: [PATCH v2 8/9] rc: rc-loopback: Add loopback of filter scancodes Date: Fri, 14 Mar 2014 23:04:18 +0000 Message-Id: <1394838259-14260-9-git-send-email-james@albanarts.com> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1394838259-14260-1-git-send-email-james@albanarts.com> References: <1394838259-14260-1-git-send-email-james@albanarts.com> MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2014.3.14.230021 X-PMX-Spam: Gauge=IIIIIIIII, Probability=9%, Report=' HTML_NO_HTTP 0.1, MULTIPLE_RCPTS 0.1, HTML_00_10 0.05, BODYTEXTP_SIZE_3000_LESS 0, BODY_SIZE_2000_2999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, CT_TEXT_PLAIN_UTF8_CAPS 0, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CP_URI_IN_BODY 0, __CT 0, __CTE 0, __CT_TEXT_PLAIN 0, __HAS_FROM 0, __HAS_HTML 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __HAS_X_MAILING_LIST 0, __HIGHBITS 0, __IN_REP_TO 0, __MIME_TEXT_ONLY 0, __MIME_VERSION 0, __MULTIPLE_RCPTS_CC_X2 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __TO_MALFORMED_2 0, __URI_NO_WWW 0, __URI_NS , __YOUTUBE_RCVD 0' Add the s_filter callback to the rc-loopback driver, which instead of setting the filter just feeds the scancode back through the input device so that it can be verified. Signed-off-by: James Hogan Cc: Mauro Carvalho Chehab Cc: Antti Seppälä --- Changes in v2: - Move img-ir-raw test code to rc-loopback. - Handle new encode API, specifically -ENOBUFS when the buffer isn't long enough. - Set encode_wakeup so that the set of allowed wakeup protocols matches the set of raw IR encoders. --- drivers/media/rc/rc-loopback.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/drivers/media/rc/rc-loopback.c b/drivers/media/rc/rc-loopback.c index 0a88e0c..aefd335 100644 --- a/drivers/media/rc/rc-loopback.c +++ b/drivers/media/rc/rc-loopback.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #define DRIVER_NAME "rc-loopback" @@ -176,6 +177,42 @@ static int loop_set_carrier_report(struct rc_dev *dev, int enable) return 0; } +static int loop_set_filter(struct rc_dev *dev, enum rc_filter_type type, + struct rc_scancode_filter *sc_filter) +{ + static const unsigned int max = 512; + struct ir_raw_event *raw; + int ret; + int i; + + /* fine to disable filter */ + if (!sc_filter->mask) + return 0; + + /* encode the specified filter and loop it back */ + raw = kmalloc(max * sizeof(*raw), GFP_KERNEL); + ret = ir_raw_encode_scancode(dev->enabled_protocols[type], sc_filter, + raw, max); + /* still loop back the partial raw IR even if it's incomplete */ + if (ret == -ENOBUFS) + ret = max; + if (ret >= 0) { + /* do the loopback */ + for (i = 0; i < ret; ++i) + ir_raw_event_store(dev, &raw[i]); + ir_raw_event_handle(dev); + + ret = 0; + } else if (type == RC_FILTER_NORMAL) { + /* accept any normal filter */ + ret = 0; + } + + kfree(raw); + + return ret; +} + static int __init loop_init(void) { struct rc_dev *rc; @@ -195,6 +232,7 @@ static int __init loop_init(void) rc->map_name = RC_MAP_EMPTY; rc->priv = &loopdev; rc->driver_type = RC_DRIVER_IR_RAW; + rc->encode_wakeup = true; rc_set_allowed_protocols(rc, RC_BIT_ALL); rc->timeout = 100 * 1000 * 1000; /* 100 ms */ rc->min_timeout = 1; @@ -209,6 +247,7 @@ static int __init loop_init(void) rc->s_idle = loop_set_idle; rc->s_learning_mode = loop_set_learning_mode; rc->s_carrier_report = loop_set_carrier_report; + rc->s_filter = loop_set_filter; loopdev.txmask = RXMASK_REGULAR; loopdev.txcarrier = 36000;