From patchwork Sun Dec 17 22:45:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Rossak X-Patchwork-Id: 10117987 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 2AC65603FA for ; Sun, 17 Dec 2017 22:47:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1D5C328C83 for ; Sun, 17 Dec 2017 22:47:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 122DB291DA; Sun, 17 Dec 2017 22:47:00 +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=ham 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 A6BC328C83 for ; Sun, 17 Dec 2017 22:46:59 +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=XUvHqVq9rFRv9xmfBNNU4mS6Z92eV8NmWwRUfJkQi44=; b=suPy66rUzpKrYVjBuKz5k9fYfx NTp/FIkVgB3y6IrvW87zeXtiFXc5vdM3sp1q6uo1HJPd3hONN9pwj1CsLm3HXeZDqGrBHuHRNNGYw +PKJpZq28Es3MYlQS1rDamlX5EJ0qJkw1sKPvyt9Ew80EnyCekOyeXl1imZNQ52B6kf76ScvmrQ2A EzmESBbYmZ1PaFesNqfPXAGJig0IvEPPOa0whquD40wToLB/0A6Czd4weT6BlH1KuSFIHpj8bNuKX LdmxVCfOnRFxzJYac+oIjyqE7oH8t1SxfRGnmfqHnOfdrIMVFQwby+PKMkkwcxBOu/dnmSYv28/oR QCtkU/GQ==; 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 1eQhhy-00074i-2C; Sun, 17 Dec 2017 22:46:58 +0000 Received: from mail-wr0-x243.google.com ([2a00:1450:400c:c0c::243]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1eQhhI-0006RV-I9 for linux-arm-kernel@lists.infradead.org; Sun, 17 Dec 2017 22:46:18 +0000 Received: by mail-wr0-x243.google.com with SMTP id p69so3669234wrb.8 for ; Sun, 17 Dec 2017 14:45:53 -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=BTlRFcRSBvQQF6RM07yx5xM3ps16EN27oe1ZC+EK6R4=; b=UX/YEGe5j4tuJfPMW/jI5c5nYJPWK57MJBYnuClcDlRWykOlvw2p113OQ0L69u/Fjj b8ex3OLFOr8iGbUJ8JAo7LTR/cd+iX772aG8RAWqr6kRzg4eRG3TXJcaMvvJTpMzFWKU uFWw1P6gw01Aig4KuPNHMQVXrmAqEFTSSHUtlG7jLJpe13h5WFTT0D2A23dywWiJm33q xccmhGwhUQDv6Cbgg+XO27C0hdveO3YlwKGfWpaL/7+u5s3M7pylrXbPxg2Ftf/sEHDO T9ZqRUL2ZaJVkHmwvT9aVFmnSjBGKFsrYmEMn3teffoVENfsoXL/G7lb7PMbBM99K/q9 Bb9Q== 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=BTlRFcRSBvQQF6RM07yx5xM3ps16EN27oe1ZC+EK6R4=; b=QrgWDRDSV2fpqdxDEzDKcQ9E6s99rKTeWFB5ALvlfPItQg+00wyA8wbpai3r32d2gZ koLKN+w5FLI0o1BI2DvZ5kd1/VL1pMcL3oj6SXRL6eSOJpd+aEhOdd89rVVTx3DihF9h CZegM2+V+n/HIrVxRICNGaMwd8TUav0I6bdzMxCf+wVbkYCYpKPW0SsCHRjAUxttQOnO XLwjLMJBcpw4ok4UjigRUMGBtuuOG3t0eB01ppqVo/CdP26d7E6DSpDKompWNhHRnCsc o0izPEZs8WPlnE40uPOxhaxdXT5NN5hYwl2CO73ja33OIeyyN8KuGygAEVoLOt/KHPVB 3xTQ== X-Gm-Message-State: AKGB3mJQO9HAt7GVSXVZJW83BZsSc07zOnuHlVr671xwORfkwrSCgNaR vwBz2oUfMyC8IlQ1ymIiZoc= X-Google-Smtp-Source: ACJfBosqkrPqmoVVcV/YxgoJBG+5kYj54a5xYqwrOZ1aYgSCtkijMEy+yEeplbUnMsJ3MmXOigbh/A== X-Received: by 10.223.174.147 with SMTP id y19mr14883502wrc.97.1513550751679; Sun, 17 Dec 2017 14:45:51 -0800 (PST) Received: from debian-laptop.fritz.box (p5B3DDB65.dip0.t-ipconnect.de. [91.61.219.101]) by smtp.gmail.com with ESMTPSA id 52sm30890673wrv.8.2017.12.17.14.45.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 17 Dec 2017 14:45:51 -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: [PATCH 1/5] media: rc: update sunxi-ir driver to get base clock frequency from devicetree Date: Sun, 17 Dec 2017 23:45:43 +0100 Message-Id: <20171217224547.21481-2-embed3d@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171217224547.21481-1-embed3d@gmail.com> References: <20171217224547.21481-1-embed3d@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171217_144616_786948_77E583D1 X-CRM114-Status: GOOD ( 14.89 ) 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 base clock frequency from devicetree. This is neccessary since there are different ir recievers on the market, that operate with different frequencys. So this value could be set if the attached ir receiver needs an other base clock frequency, than the default 8 MHz. Signed-off-by: Philipp Rossak --- drivers/media/rc/sunxi-cir.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/media/rc/sunxi-cir.c b/drivers/media/rc/sunxi-cir.c index 97f367b446c4..9bbe55a76860 100644 --- a/drivers/media/rc/sunxi-cir.c +++ b/drivers/media/rc/sunxi-cir.c @@ -72,12 +72,8 @@ /* 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 */ +/* Required frequency for IR0 or IR1 clock in CIR mode (default) */ #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 +118,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 +144,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 +169,11 @@ static int sunxi_ir_probe(struct platform_device *pdev) return PTR_ERR(ir->clk); } + /* Base clock frequency (optional) */ + if (of_property_read_u32(dn, "clock-frequency", &b_clk_freq)) { + b_clk_freq = SUNXI_IR_BASE_CLK; + } + /* Reset (optional) */ ir->rst = devm_reset_control_get_optional_exclusive(dev, NULL); if (IS_ERR(ir->rst)) @@ -180,11 +182,12 @@ 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; } + dev_info(dev, "set base clock frequency to %d Hz.\n", b_clk_freq); if (clk_prepare_enable(ir->apb_clk)) { dev_err(dev, "try to enable apb_ir_clk failed\n"); @@ -225,7 +228,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;