From patchwork Sat Dec 16 02:49:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Rossak X-Patchwork-Id: 10116787 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 3D9666019C for ; Sat, 16 Dec 2017 02:50:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 26A7D290F9 for ; Sat, 16 Dec 2017 02:50:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 19D622A09E; Sat, 16 Dec 2017 02:50:10 +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=-4.2 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0C33D290F9 for ; Sat, 16 Dec 2017 02:50:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=eVP51aVb/uNHJfSBcxmtBSzfubJ5+2lhm6sewuhLz6g=; b=C+t9UHv6P6LloamARKVYRiq1Tp /e5p5+4Ir7JZ7+Wd1ZDNghwPnoQ49i4uz5+r9T6oi1BtP4SoIAHA8Pls21n21BN96omy6jLgYvWhp P0H07XJxOsBRjW+ppjRPsKHDZJ78keu6/NKAf+QGxpTlh9GLmyZvVR6fI4xscfenHnSEAKm6H2nmu EOdXtCl92IHtGHvTk+z6wv6WtSbVQP3MBXm84CBB/+DKmgfa73kmpehvjXY34Tv6moUrf8eJblSi5 8OLX/1rvOQWMzRt8Vpjs58YLzQqbGgP/g3TKmoT/aJ13xYNE1bf+KJontgpQzIP9kqPocvjpgYhJv 8bOPyo9g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1eQ2YC-0000wu-K5; Sat, 16 Dec 2017 02:50:08 +0000 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1eQ2Xr-0000F5-KY for linux-arm-kernel@lists.infradead.org; Sat, 16 Dec 2017 02:49:55 +0000 Received: by mail-wm0-x243.google.com with SMTP id g130so347573wme.0 for ; Fri, 15 Dec 2017 18:49:24 -0800 (PST) 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=nrPDy6fNUj4va1Dx/2HP6Rag+x1WpAuvTOEe4nECluI=; b=JVAGOAwglRwafFEgE00CA7ENkVJ8KThzV4T2pPeTCY0KfzTWQzVbLp/AqWoLiK9zJ2 9EiDNKSB+OyNP0h+PnsL65EZkkBQPoIWL/sVrqArR0xR4c6ECTQPQ/TPD6J1mWKZiFlN dhqf4GWkPqBzZG7y2AukLnsSV9FXupKx4S+GqjrgAesAZWg7dWRmVQU5SUT1YeF3p2P1 6DpUutRcCT4IxbMk2a/rKdqubmgGOw+hmHSWDgCaCI1TZANVvbA4W8oa0x2EVOLIynpt DfOV8vo+KTeC4YAriLl0Q1ph8Z2UuCb/HMOimTkPLnRAfpTbjcc4J+9z991TIauci+6k 1HBQ== 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=nrPDy6fNUj4va1Dx/2HP6Rag+x1WpAuvTOEe4nECluI=; b=hVJFLVJhx4v5e83KPlBYiR2M03kse1cktQoil5pZBb38G7DEMio0OVUqkf9v+0Iwus cr9CCQnMh0hhEGLy07u9u62fFobjE3S9Y6xZeuq995gZbR3k18VgUDL+i95Sen68oopa dbtDFhf8lKYl4ClDMLMt9Q+c+650sjdzyE+qDU6zYxN6HJAwE7i8cvlvqFejNsItJ4p3 FzRwxBGld0O/MhwfMJcR+cVsQkGZPmvHNGFsqwrGHdDYIBMRLAMtK3RRJlWF6kCIdRJ3 4uvGA6APYFFPer4w4V2txSdVvm6WC9qGjYe7N1iqfYjE3aJ6GIqyAwi0+b/ZmWhPz+db 7Lmg== X-Gm-Message-State: AKGB3mK0lOToGcHVIp+5HJifF8yXNusfV0aJUjd2N3x4TO+T+TS+k7GZ gArxLbe0x+r1DwJbihjjn40= X-Google-Smtp-Source: ACJfBotixyOMBLAnNGwEvowH46k4zWzDpngN1gA+GQGRDMtPm9u7LdpiHgMAVwfFRQRc3/T+lTD/ZA== X-Received: by 10.28.5.201 with SMTP id 192mr6504956wmf.142.1513392558397; Fri, 15 Dec 2017 18:49:18 -0800 (PST) Received: from debian-laptop.fritz.box (p5B3DDB65.dip0.t-ipconnect.de. [91.61.219.101]) by smtp.gmail.com with ESMTPSA id r19sm3713035wrg.83.2017.12.15.18.49.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 18:49:17 -0800 (PST) From: Philipp Rossak To: mchehab@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, maxime.ripard@free-electrons.com, wens@csie.org, linux@armlinux.org.uk, sean@mess.org, p.zabel@pengutronix.de, andi.shyti@samsung.com Subject: [RFC 1/5] [media] rc: update sunxi-ir driver to get base frequency from devicetree Date: Sat, 16 Dec 2017 03:49:10 +0100 Message-Id: <20171216024914.7550-2-embed3d@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171216024914.7550-1-embed3d@gmail.com> References: <20171216024914.7550-1-embed3d@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171215_184947_879184_6812956E X-CRM114-Status: GOOD ( 14.26 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP This patch updates the sunxi-ir driver to set the ir base clock from devicetree. This is neccessary since there are different ir recievers on the market, that operate with different frequencys. So this value needs to be set depending on the attached receiver. Signed-off-by: Philipp Rossak --- drivers/media/rc/sunxi-cir.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/media/rc/sunxi-cir.c b/drivers/media/rc/sunxi-cir.c index 97f367b446c4..55b53d6463e9 100644 --- a/drivers/media/rc/sunxi-cir.c +++ b/drivers/media/rc/sunxi-cir.c @@ -72,12 +72,6 @@ /* CIR_REG register idle threshold */ #define REG_CIR_ITHR(val) (((val) << 8) & (GENMASK(15, 8))) -/* Required frequency for IR0 or IR1 clock in CIR mode */ -#define SUNXI_IR_BASE_CLK 8000000 -/* Frequency after IR internal divider */ -#define SUNXI_IR_CLK (SUNXI_IR_BASE_CLK / 64) -/* Sample period in ns */ -#define SUNXI_IR_SAMPLE (1000000000ul / SUNXI_IR_CLK) /* Noise threshold in samples */ #define SUNXI_IR_RXNOISE 1 /* Idle Threshold in samples */ @@ -122,7 +116,7 @@ static irqreturn_t sunxi_ir_irq(int irqno, void *dev_id) /* for each bit in fifo */ dt = readb(ir->base + SUNXI_IR_RXFIFO_REG); rawir.pulse = (dt & 0x80) != 0; - rawir.duration = ((dt & 0x7f) + 1) * SUNXI_IR_SAMPLE; + rawir.duration = ((dt & 0x7f) + 1) * ir->rc->rx_resolution; ir_raw_event_store_with_filter(ir->rc, &rawir); } } @@ -148,6 +142,7 @@ static int sunxi_ir_probe(struct platform_device *pdev) struct device_node *dn = dev->of_node; struct resource *res; struct sunxi_ir *ir; + u32 b_clk_freq; ir = devm_kzalloc(dev, sizeof(struct sunxi_ir), GFP_KERNEL); if (!ir) @@ -172,6 +167,12 @@ static int sunxi_ir_probe(struct platform_device *pdev) return PTR_ERR(ir->clk); } + /* Required frequency for IR0 or IR1 clock in CIR mode */ + if (of_property_read_u32(dn, "base-clk-frequency", &b_clk_freq)) { + dev_err(dev, "failed to get ir base clock frequency.\n"); + return -ENODATA; + } + /* Reset (optional) */ ir->rst = devm_reset_control_get_optional_exclusive(dev, NULL); if (IS_ERR(ir->rst)) @@ -180,7 +181,7 @@ static int sunxi_ir_probe(struct platform_device *pdev) if (ret) return ret; - ret = clk_set_rate(ir->clk, SUNXI_IR_BASE_CLK); + ret = clk_set_rate(ir->clk, b_clk_freq); if (ret) { dev_err(dev, "set ir base clock failed!\n"); goto exit_reset_assert; @@ -225,7 +226,8 @@ static int sunxi_ir_probe(struct platform_device *pdev) ir->rc->map_name = ir->map_name ?: RC_MAP_EMPTY; ir->rc->dev.parent = dev; ir->rc->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER; - ir->rc->rx_resolution = SUNXI_IR_SAMPLE; + /* Frequency after IR internal divider with sample period in ns */ + ir->rc->rx_resolution = (1000000000ul / (b_clk_freq / 64)); ir->rc->timeout = MS_TO_NS(SUNXI_IR_TIMEOUT); ir->rc->driver_name = SUNXI_IR_DEV;