From patchwork Tue Dec 19 08:07:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Rossak X-Patchwork-Id: 10122609 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 8ABDF603B5 for ; Tue, 19 Dec 2017 08:08:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7B9E62908B for ; Tue, 19 Dec 2017 08:08:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 703AC29094; Tue, 19 Dec 2017 08:08:46 +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 E7BE12908B for ; Tue, 19 Dec 2017 08:08:45 +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=tZ+aV/gNrEDdAiDL9tSEh/fuXg bpfZAQZ4KFhJYeA5uHKwv0lN6NPs/4ze8xQmmleH/zrEYo+9Ts7FIV7oHM+fpnyliTSU6Eq/BDuzP uHB1YDTtCtNKf0CDwS/GQBFtGUjuTIMSCXgIYwbKyhcCPCcMT8uvpex9j4vaARORnEvWnZnyArFNe eeJjbdhqmxCmvSufcyhawX6rnWNk6fglPTIdyh0fdMZqCMfDHKcaesFpX3wosm2CIZIgKqjWQIge7 1Cg/THzfe75zezzVPIBUPFK1V7h8nmYgfFqKZJx5WvvbtAXgDVbF0umVs3dHROXuBF2PRgR14SFif METC0SVA==; 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 1eRCx8-0000LR-RF; Tue, 19 Dec 2017 08:08:42 +0000 Received: from mail-wr0-x243.google.com ([2a00:1450:400c:c0c::243]) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1eRCwU-0008NE-UQ for linux-arm-kernel@lists.infradead.org; Tue, 19 Dec 2017 08:08:06 +0000 Received: by mail-wr0-x243.google.com with SMTP id p69so8872537wrb.8 for ; Tue, 19 Dec 2017 00:07: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=CHl2lbY8wn4mULvS003jI9tiFdExk4jlMVYsVotOMjQPTycUgt55ag8fN8iP3/tzj6 EOroBstZ3c7GPAs3mus3l3ykkrn+4XZ+Vr6mfTA7bq4GpijrzAHlU2W23ygtBePurJ/u X6Y/fNcyFVoJBj61SxqsMO27QMdWdLhQjxMWzesqui4MWPRE48f+wM0cT0O8dn1S16LM OBTZ+xFSe/7oWmeu68tLrjkWumvYH3Vn5YOjvxmQJ4TPxyWqsCmAaqEmO/mg0irgmn/m kuO08i9DIJdJly/px3H8BsoSd9pFtJptOvWjTJKBrHBlg31IqkNHeFGC/P1mNoGRNjDU bylQ== 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=S/91Ac5t0ouQ6opfmOsXt25fESaQBUm6VyAmSpHqKMg5lUmYar80dtA26YtB5Qg+M2 AFGo1TUrBFipkPXf+p2MoJ9NACD6wPuzM8BiQCmeOzYVYKBY2REyM5BIlFGoXUlmHFbZ d+osqst5yI2OAhQZQ0oy7Wl14/3CIJPSEnf7qEs3b69TPRub8WUJUty74ptRtWgdjUiw x4Tv49V7XILCGMR1vvXjYFHhOihSmv4Xk5+adaCGJJH95OMJBoPqfiID7FS9JMy9STOm WxZvHCl5Z8c0myomF/eR0NbzpgXc9BMWrRfev0RJTHmzBzG21w8LBM5naXXollC2k2Gx 6NJA== X-Gm-Message-State: AKGB3mLoqQ9mulJKCLnCZth5Lj9mdqXlr84BT97NDhZxK+uo/yJw/KbD 3EzLNUwq9OYqf8Tt7zTqmB4= X-Google-Smtp-Source: ACJfBotFK3rVMq47+sneVF+aEMRPZCi9GQ9uT2s1aCZbfoK2lDFKpvcZeO8kcAL6pH1rT0tJNSq3nw== X-Received: by 10.223.134.216 with SMTP id 24mr3903059wry.156.1513670871253; Tue, 19 Dec 2017 00:07: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 c34sm15820113wra.53.2017.12.19.00.07.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 19 Dec 2017 00:07: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 v3 1/6] media: rc: update sunxi-ir driver to get base clock frequency from devicetree Date: Tue, 19 Dec 2017 09:07:42 +0100 Message-Id: <20171219080747.4507-2-embed3d@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171219080747.4507-1-embed3d@gmail.com> References: <20171219080747.4507-1-embed3d@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20171219_000803_121812_286853EA X-CRM114-Status: GOOD ( 15.75 ) 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;