From patchwork Mon Dec 18 14:11:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Rossak X-Patchwork-Id: 10119605 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 EF60160327 for ; Mon, 18 Dec 2017 14:12:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E06AF289E2 for ; Mon, 18 Dec 2017 14:12:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D51B328C9B; Mon, 18 Dec 2017 14:12:41 +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 59FE8289E2 for ; Mon, 18 Dec 2017 14:12:41 +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=VV3QDPZa3S8Dc78YvWoFYAnl93C8LJrp2dGrq9kNtZg=; b=NMgjxl+aEuqoc7Btb5ulxrNsIi 7YOyu1ol5JsldTlW6WQ59xkmv0Q4nvSKQ+v5hE08sWMHdfqwTTohMtFmVGejTcamhrThzjYlQRyob 68mn9N72FNATQMKiG07zC9KRfq/77Ev7/8J3kdSYHwhYekbPm/oo6ecQinuNY4YA7BvKxqaN7UR6d 01Hwfr2vFk0tbXhZsHyUQG4/s3OnKKU+bI0NDsq+VwUDZqSnkV2Q3Ac53bUIgGN2CUUYY1HytaKKT kaM5B6tqpemBpJ2Uzgn7fAKFW5bteY34XypYJOEqxx6ijqAiHIyVTGWvgPBOzWKScMlifsILIcfGi BKK+oQ9w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.89 #1 (Red Hat Linux)) id 1eQw9k-0005WH-9l; Mon, 18 Dec 2017 14:12:36 +0000 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eQw9B-0005Dm-DE for linux-arm-kernel@lists.infradead.org; Mon, 18 Dec 2017 14:12:04 +0000 Received: by mail-wm0-x241.google.com with SMTP id t8so29388111wmc.3 for ; Mon, 18 Dec 2017 06:11:52 -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=b8MEb55PDDl2pZqUsog8UI8eI5rioBonZSzy7NTkKqg=; b=IFzA5rrELOchQOcRwspdCStGBvV+qdxNnFDJv/ZzzdnwQtUL4qapC1YtMEX65OpUhU VfCXFwmn/ynFozC7fB7JgKaljgAKdcwBViFiqzMEBq+5TJcEoeok7APKHJT/MYkDU31Y Rbs4byvzj+piWms/Pbyz6/jOA3wgN0ch5wRRtoI2/hdYocwPIvnzHIguroWnqki2gDeR OMEVwSHh+jUF/z2oJAmPoLBW1U3UAj7pqypLBPdLMoybdTo5CHh9kIcUO3gsEn67cknp 2Q+/TEnFYC3bk9aO8UeO2KxtVHCuZ0T/GilHd38ApAoAd/WRt+91i2/XhOq0SS2ychyT CEcA== 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=b8MEb55PDDl2pZqUsog8UI8eI5rioBonZSzy7NTkKqg=; b=YAUTyxDY6D/78O8IlCoSYLyWPsEbaxkMSnGx2gcUMEa1ELtwu2hFPUeHIGaj8dhSFg h+6/9cUxNfQNWgptPoSatYeAK8kHFyNy9MSwh77Se24tGaNNrSRLxz3Nk3iFl3fdjFiL pA3Yfck/FHnEFQCpLq4BIR5bOAZu6kkP757Rc3ptcWmoK5E5SuT2A+Bfj8S408fOH5dJ fachZflUDmF4tZqNNdpUroIGUIXXalcdVJQ4+abKD8bM9fJOed2zasTYc0ofV5uhuxst BCfr0VNCEn+RAN/h3CzfhnTkGwvYuIPXvDrONgGDZf516X2wNwHjyzzHWuh0LtewuoYr VxpA== X-Gm-Message-State: AKGB3mIYPDodNu1v64t/6HXYEqux6fMTnVXFu5O6NUuAnD3K3CGSw1WJ TlKVunXki0LCQPeI/W8EqyU= X-Google-Smtp-Source: ACJfBotTXNhZJk426xxZBSIG3+gRUyw55YLrasyoT7Jgom1EH4kHy36bl982BYRaYZLzdJrxQmCiuA== X-Received: by 10.28.235.21 with SMTP id j21mr14974wmh.72.1513606311007; Mon, 18 Dec 2017 06:11: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 x127sm5790384wmb.10.2017.12.18.06.11.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 18 Dec 2017 06:11:50 -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 v2 1/6] media: rc: update sunxi-ir driver to get base clock frequency from devicetree Date: Mon, 18 Dec 2017 15:11:41 +0100 Message-Id: <20171218141146.23746-2-embed3d@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171218141146.23746-1-embed3d@gmail.com> References: <20171218141146.23746-1-embed3d@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171218_061201_599914_36DCAD4D X-CRM114-Status: GOOD ( 15.07 ) 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 necessary since there are different ir receivers on the market, that operate with different frequencies. So this value could be set if the attached ir receiver needs a different base clock frequency, than the default 8 MHz. Signed-off-by: Philipp Rossak --- drivers/media/rc/sunxi-cir.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/media/rc/sunxi-cir.c b/drivers/media/rc/sunxi-cir.c index 97f367b446c4..f500cea228a9 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,8 @@ 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 +145,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 = SUNXI_IR_BASE_CLK; ir = devm_kzalloc(dev, sizeof(struct sunxi_ir), GFP_KERNEL); if (!ir) @@ -172,6 +170,9 @@ static int sunxi_ir_probe(struct platform_device *pdev) return PTR_ERR(ir->clk); } + /* Base clock frequency (optional) */ + of_property_read_u32(dn, "clock-frequency", &b_clk_freq); + /* Reset (optional) */ ir->rst = devm_reset_control_get_optional_exclusive(dev, NULL); if (IS_ERR(ir->rst)) @@ -180,11 +181,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_dbg(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 +227,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;