From patchwork Tue Jan 30 17:46:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Rossak X-Patchwork-Id: 10192111 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 711BF60375 for ; Tue, 30 Jan 2018 17:47:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6003024603 for ; Tue, 30 Jan 2018 17:47:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 539B3251F9; Tue, 30 Jan 2018 17:47:30 +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 B9BBD24603 for ; Tue, 30 Jan 2018 17:47:29 +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=pU+I30ZcaYC0a8/SH9jvcM6r92 gGIGFw/rohNli9RpZF63sRZ/kbZ87U5jMSjULKzHoQbUk3gBdSDc4wvmWk/vhsag2DwnDFefoAgrj N57K+7fZ59jc7fYq3sebU894OprPJPNOWaYCkQN0wk37NbLjAD/TTmedN/VeaTt91yR4Kzlfa+jxy /NAqQeVpUnf/DDwkj+9lFmwxbg2xmWTLbjR7ylM/cPMYmFCq+q8Y9NqNHjnXfTzKk1Wk8AjLGOgbc T0oEc8J+Eup7trWIwLus7bzRdodVRnp1HCWXhej2/bp/aj5JU8Y3qkrqU190URREiIwaZllCdOPPP +3uhx6YQ==; 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 1ega0E-0006yQ-1l; Tue, 30 Jan 2018 17:47:26 +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 1egZzz-0006lD-03 for linux-arm-kernel@lists.infradead.org; Tue, 30 Jan 2018 17:47:12 +0000 Received: by mail-wm0-x241.google.com with SMTP id g1so2875852wmg.2 for ; Tue, 30 Jan 2018 09:47:00 -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=twFtT+bA5R+CXYDg+vz+QEN1Qv4e5e2CxHUd9p+5xyGTv7gwS3Ocon2H3R/E745m44 fKiq9UEiP/IC3aJhMeGseozssIAsPTshW2z9z+I48VJH9FLVSotD9rk6yKkCJ6PQLles CJQuaRl/zaNM60MGq5hoopgTG9p3omvNjKOU/5QwnB1lLKW3xPVxO3/LzXyH0TA8RwLB +FzBTY/Yj+WRIwS2GmcGogFOD90KoPmlP+ZMWnQQ6sE/jj+tUr454260mTQrCfri5xkS RMobYqBP9IFLstYA1hAVdrmGyChzJEXR7DTh5LwGlnaQKBTonQaiT2u2gZibRL2zpgi6 trLA== 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=f70CrkGG9z0Ojcs8oPPBQv/ftQvS8t994DFBvhBiJJMr0YGsUz3PgcEq1/SLOX6YzC CmTKF4CyIoCUluRngV2w7Ao3Lb5YjhTE5W3v8mnNeqJ2I0qs7lpRf0DoBRt/1cByxv9z HRUHYKmbcAXhP2QnAVGFB9VocH+yCCarE5cNaHc/aMUbcIQcr4BHYQ8+x+HwtTuBdpIZ uVgbi2oBXg6V/zNQjCR3bQc+mSXrbvghUdV4avqh7b5BedEfCl5ejFNyjOYngb049PDD orxOeZvhZJ75fXcBZYUoUVJY1JPdHEQjjqPV3MVa0yCgFmMEDgWHM+aLoS+Yg59pZQL3 dRMA== X-Gm-Message-State: AKwxytdySvFOiqjh65I1l9O3AI+qmiwgVaiRL1fE1YSJW3Reb1yf9BZX o80W9mAVE1w7vlQJU43ikcc= X-Google-Smtp-Source: AH8x22686G4E0R/VxahbFbjv3MgYg2lCKP7VBX4k1q/emTJsS48FyHhlg1DgJ+4rYreviNyqvfUiHw== X-Received: by 10.28.192.24 with SMTP id q24mr22709148wmf.96.1517334419212; Tue, 30 Jan 2018 09:46:59 -0800 (PST) Received: from debian-laptop.wlan.uni-ulm.de (eduroam164-089.wlan.uni-ulm.de. [134.60.164.89]) by smtp.gmail.com with ESMTPSA id p21sm9985653wmc.45.2018.01.30.09.46.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 30 Jan 2018 09:46:58 -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 v5 1/6] media: rc: update sunxi-ir driver to get base clock frequency from devicetree Date: Tue, 30 Jan 2018 18:46:51 +0100 Message-Id: <20180130174656.10657-2-embed3d@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180130174656.10657-1-embed3d@gmail.com> References: <20180130174656.10657-1-embed3d@gmail.com> 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;