From patchwork Tue Apr 11 06:00:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 9674597 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 2C9E660382 for ; Tue, 11 Apr 2017 06:07:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 167FF2849A for ; Tue, 11 Apr 2017 06:07:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0A977284F4; Tue, 11 Apr 2017 06:07: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.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM 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 97D9B2849A for ; Tue, 11 Apr 2017 06:07:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752868AbdDKGHg (ORCPT ); Tue, 11 Apr 2017 02:07:36 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:34126 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752761AbdDKGHf (ORCPT ); Tue, 11 Apr 2017 02:07:35 -0400 Received: by mail-wm0-f65.google.com with SMTP id x75so13009455wma.1 for ; Mon, 10 Apr 2017 23:07:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=sPwyy1GQbqMF+wy2lXsw1FDxP+TaLB+2mtUmiEuZEWM=; b=KDL2D9YGcLu3pZfB3+QQp0yU5PKHI2XRvt2GFHsR7paUPvgI00OT+yKYq4D2MIQSCK ji5ncbYdtckh+FJ30fqhEg7AS/K1fFAYrweCDX1bCTY46zfqc6kuuQXhBJ3FRE8VPY3y 1ofQjIUAtdOa+6U3VRg09pgVz0eIMOmqMiNia2mBc9MH9Rt46duH58jqJj77GVJXE3Mx fwevqnSOkl3Xeroz6U8ugCadg724h6/WU5ItiIoVVVxEOLUEVmqHQuXKUMiuyS/sK0kE 0r/4m/4jtYDtTU7twhJ4Cobbe7ADp/2ySOS11ME+YR5roq7PszTRFgrPk3wujnmbO2Bx 4LFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=sPwyy1GQbqMF+wy2lXsw1FDxP+TaLB+2mtUmiEuZEWM=; b=uXDAo68ilQNqlUf9iGWhWizPvFiDmtOZ4MPlqJuzzMMPfcTo/ER/w4jiSAgBFVH5o8 MIhDsURNBF+ox0GIDto/oyaRg+xvSk3LQXBxk3mhPeoVvbFWYELbbKrvKOE3whEro8uv P/9W6iXPuYpAWbFX7hMltn4e6IurEkbDadv+RZcB+zTTSzYee0lgjoo+kygImdYAgmYM 0FIX57M9feiK+CKu/afq4njwUpc07m+YrFDyyf4oiyyhT/G+JR1N2liMKlWcxZx93fOK z7UQh2lQ5/M440bzT9MN4CM5lkrrQ5A65hmtETZjX5CsLOEfaJVmjQ0dCVF+fBsV46i/ UQEw== X-Gm-Message-State: AN3rC/7cV6ytkbHtPxxOqVELCfajJS4VQ7EJhYyh+ENE2f5B6pA05b8edK3W9hX5Cz+2Mw== X-Received: by 10.28.60.6 with SMTP id j6mr12321746wma.19.1491890853586; Mon, 10 Apr 2017 23:07:33 -0700 (PDT) Received: from ?IPv6:2003:c6:ebdc:4000:4d95:3656:1b99:b390? (p200300C6EBDC40004D9536561B99B390.dip0.t-ipconnect.de. [2003:c6:ebdc:4000:4d95:3656:1b99:b390]) by smtp.googlemail.com with ESMTPSA id 75sm2052373wmp.2.2017.04.10.23.07.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Apr 2017 23:07:33 -0700 (PDT) Subject: [PATCH 2/5] media: rc: meson-ir: make use of the bitfield macros From: Heiner Kallweit To: Mauro Carvalho Chehab , Sean Young , Kevin Hilman Cc: linux-media@vger.kernel.org, linux-amlogic@lists.infradead.org References: Message-ID: Date: Tue, 11 Apr 2017 08:00:07 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.0 MIME-Version: 1.0 In-Reply-To: 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 Make use of the bitfield macros thus partially hiding the complexity of dealing with bitfields. The patch also includes a minor fix to REG0_RATE_MASK, so far it was set to bit 0..10, but according to the spec it's bit 0..11. Signed-off-by: Heiner Kallweit --- drivers/media/rc/meson-ir.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/drivers/media/rc/meson-ir.c b/drivers/media/rc/meson-ir.c index a4128d7c..a52036c5 100644 --- a/drivers/media/rc/meson-ir.c +++ b/drivers/media/rc/meson-ir.c @@ -19,6 +19,7 @@ #include #include #include +#include #include @@ -36,27 +37,24 @@ /* only available on Meson 8b and newer */ #define IR_DEC_REG2 0x20 -#define REG0_RATE_MASK (BIT(11) - 1) +#define REG0_RATE_MASK GENMASK(11, 0) #define DECODE_MODE_NEC 0x0 #define DECODE_MODE_RAW 0x2 /* Meson 6b uses REG1 to configure the mode */ #define REG1_MODE_MASK GENMASK(8, 7) -#define REG1_MODE_SHIFT 7 /* Meson 8b / GXBB use REG2 to configure the mode */ #define REG2_MODE_MASK GENMASK(3, 0) -#define REG2_MODE_SHIFT 0 -#define REG1_TIME_IV_SHIFT 16 -#define REG1_TIME_IV_MASK ((BIT(13) - 1) << REG1_TIME_IV_SHIFT) +#define REG1_TIME_IV_MASK GENMASK(28, 16) -#define REG1_IRQSEL_MASK (BIT(2) | BIT(3)) -#define REG1_IRQSEL_NEC_MODE (0 << 2) -#define REG1_IRQSEL_RISE_FALL (1 << 2) -#define REG1_IRQSEL_FALL (2 << 2) -#define REG1_IRQSEL_RISE (3 << 2) +#define REG1_IRQSEL_MASK GENMASK(3, 2) +#define REG1_IRQSEL_NEC_MODE 0 +#define REG1_IRQSEL_RISE_FALL 1 +#define REG1_IRQSEL_FALL 2 +#define REG1_IRQSEL_RISE 3 #define REG1_RESET BIT(0) #define REG1_ENABLE BIT(15) @@ -78,7 +76,7 @@ static void meson_ir_set_mask(struct meson_ir *ir, unsigned int reg, data = readl(ir->reg + reg); data &= ~mask; - data |= (value & mask); + data |= value; writel(data, ir->reg + reg); } @@ -91,7 +89,7 @@ static irqreturn_t meson_ir_irq(int irqno, void *dev_id) spin_lock(&ir->lock); duration = readl(ir->reg + IR_DEC_REG1); - duration = (duration & REG1_TIME_IV_MASK) >> REG1_TIME_IV_SHIFT; + duration = FIELD_GET(REG1_TIME_IV_MASK, duration); rawir.duration = US_TO_NS(duration * MESON_TRATE); rawir.pulse = !!(readl(ir->reg + IR_DEC_STATUS) & STATUS_IR_DEC_IN); @@ -170,16 +168,16 @@ static int meson_ir_probe(struct platform_device *pdev) /* Set general operation mode (= raw/software decoding) */ if (of_device_is_compatible(node, "amlogic,meson6-ir")) meson_ir_set_mask(ir, IR_DEC_REG1, REG1_MODE_MASK, - DECODE_MODE_RAW << REG1_MODE_SHIFT); + FIELD_PREP(REG1_MODE_MASK, DECODE_MODE_RAW)); else meson_ir_set_mask(ir, IR_DEC_REG2, REG2_MODE_MASK, - DECODE_MODE_RAW << REG2_MODE_SHIFT); + FIELD_PREP(REG2_MODE_MASK, DECODE_MODE_RAW)); /* Set rate */ meson_ir_set_mask(ir, IR_DEC_REG0, REG0_RATE_MASK, MESON_TRATE - 1); /* IRQ on rising and falling edges */ meson_ir_set_mask(ir, IR_DEC_REG1, REG1_IRQSEL_MASK, - REG1_IRQSEL_RISE_FALL); + FIELD_PREP(REG1_IRQSEL_MASK, REG1_IRQSEL_RISE_FALL)); /* Enable the decoder */ meson_ir_set_mask(ir, IR_DEC_REG1, REG1_ENABLE, REG1_ENABLE);