From patchwork Tue Feb 13 12:29:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Rossak X-Patchwork-Id: 10216145 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 5C74060467 for ; Tue, 13 Feb 2018 12:31:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 52B6928E33 for ; Tue, 13 Feb 2018 12:31:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 513D028E72; Tue, 13 Feb 2018 12:31:19 +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=-1.9 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.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 8709D28E7E for ; Tue, 13 Feb 2018 12:31:18 +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=Ykl2aUomnsnPBTd7e1hGP7VJj/AsjL5NVazXTjOKjq8=; b=s01M3xi5t5rpREz+CsF6Vr0S0c dTBSQohYY5xNxIX1sQYFkbr8ipagcAQe+kM0BSedIyKCurDilkEeZmrpdCtWA6gDLvxlh0e3+4pNB zNIhH/WzI6k5JWBYcD5i7YWtBJtnZCvcrzQu8wc0ya7JIX7x5valGP0Q2slVGr0l8zwwAqgxI0nlf WP4eL2WAOvOQISilkJMOKMXO4gG4CUGBVgz4cQKKjHTbUHLHBhgf5HI64vopYqws32/0aswk19Ape y35fO/M9e3WoEJ5T3+JGbOn6gd5/L8yuK+oDeuhFZu09sFT22gJbKeGuyd7Cej7PsRKvtD6VjUioJ XmptS0rA==; 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 1elZjg-0004bN-P6; Tue, 13 Feb 2018 12:31:00 +0000 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1elZiq-0002eb-Tp for linux-arm-kernel@lists.infradead.org; Tue, 13 Feb 2018 12:30:10 +0000 Received: by mail-wm0-x242.google.com with SMTP id v71so15752933wmv.2 for ; Tue, 13 Feb 2018 04:29:58 -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=D1Iz9no6Ec0Al5PXbGWuVateKo99HJQXWqZAJsAuxwQ=; b=L7Tzbava+HeYvBAmAHJEwK8vuWz69Jv6HBVknuGBMTIvisOzxJ5SGAzdt4GmvmxZrT c5WfoeuLZ263o9SVWIlYIETrZN2VWD3rM1eMM+76Wj8CKR2MqZ/KohKoMEmJZMTiyK2X ty/hKV1gJ9B1IhYNpWNgvA5XEOFdWz/m7cGGaoxap3VtyOPlExf9iHo5/Wp8wpl01Yfl a/EUtznkyBiQ7GgEIRGh04hTO8QUskU/g20JS9wTUfOMdf3cGduCZrCfnICLyqveSFD8 X1YrWeQVjojS9iS0N004rxaSR5gp1t4v+YT24OtF7XDJu2VcMwC98uSQa7H0q0KGG9uX Hcbw== 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=D1Iz9no6Ec0Al5PXbGWuVateKo99HJQXWqZAJsAuxwQ=; b=po3Jlh/IXKaZvS5Jrc0Ra2TkGSCQRSw1PUNkQdZCY9P8Q4RX8GYsPb1LHBFpYJTIkZ bwFdFK9fJ/GPRteH8UcTZnMceDZv7vRm+x5gl8wEpU1Hvyz8bnHnTfKXI11gKxbKhJnX TyK/W8fzAmwOfk9dv24g4nM7vI1ea+JQo4IhUTbWXOJtFz/RcHMrD17PKz+ZUGB/wWHv 0r5t/wV3Xyao9MAp7JBO8K40RzpuMsMiqaVXLYpkMk0GiDyK7O+X78PLCsxdX63ZHpj+ KfbjdNAoTSKT9DP1RHoJHj8Sg68qKvINogSJarpm1CVqOCNE6jsegq7JAQE63hk8TpaM UU3w== X-Gm-Message-State: APf1xPD+eT/QBXqBW8of5Ejmeq55ghTPn4xeSgBPMJZ91sDCWdLvgGRv kuTiS9DNayc2Falnz2M2PVs= X-Google-Smtp-Source: AH8x227k2OC5XkG9av+u4Xh0lEe0YuRf3sdrvxB0JYJfzo9f3bJkw7OX0ahCHQv9WjyJZDKA3E6XAQ== X-Received: by 10.28.55.129 with SMTP id e123mr1144651wma.156.1518524997201; Tue, 13 Feb 2018 04:29:57 -0800 (PST) Received: from debian-laptop.fritz.box (p578F04D2.dip0.t-ipconnect.de. [87.143.4.210]) by smtp.gmail.com with ESMTPSA id l17sm6483422wrh.67.2018.02.13.04.29.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Feb 2018 04:29:56 -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: [RESEND PATCH v5 1/6] media: rc: update sunxi-ir driver to get base clock frequency from devicetree Date: Tue, 13 Feb 2018 13:29:47 +0100 Message-Id: <20180213122952.8420-2-embed3d@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180213122952.8420-1-embed3d@gmail.com> References: <20180213122952.8420-1-embed3d@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180213_043008_989628_8C7A1FE7 X-CRM114-Status: GOOD ( 14.84 ) 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 Reviewed-by: Andi Shyti Acked-by: Sean Young --- 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;