From patchwork Sat Dec 16 02:49:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Rossak X-Patchwork-Id: 10116775 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 849076019C for ; Sat, 16 Dec 2017 02:49:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6FA16290F9 for ; Sat, 16 Dec 2017 02:49:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 63C422A09E; Sat, 16 Dec 2017 02:49: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=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0BDFE290F9 for ; Sat, 16 Dec 2017 02:49:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756809AbdLPCt2 (ORCPT ); Fri, 15 Dec 2017 21:49:28 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:33092 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756628AbdLPCtU (ORCPT ); Fri, 15 Dec 2017 21:49:20 -0500 Received: by mail-wm0-f65.google.com with SMTP id g130so347574wme.0; Fri, 15 Dec 2017 18:49:19 -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=nrPDy6fNUj4va1Dx/2HP6Rag+x1WpAuvTOEe4nECluI=; b=JVAGOAwglRwafFEgE00CA7ENkVJ8KThzV4T2pPeTCY0KfzTWQzVbLp/AqWoLiK9zJ2 9EiDNKSB+OyNP0h+PnsL65EZkkBQPoIWL/sVrqArR0xR4c6ECTQPQ/TPD6J1mWKZiFlN dhqf4GWkPqBzZG7y2AukLnsSV9FXupKx4S+GqjrgAesAZWg7dWRmVQU5SUT1YeF3p2P1 6DpUutRcCT4IxbMk2a/rKdqubmgGOw+hmHSWDgCaCI1TZANVvbA4W8oa0x2EVOLIynpt DfOV8vo+KTeC4YAriLl0Q1ph8Z2UuCb/HMOimTkPLnRAfpTbjcc4J+9z991TIauci+6k 1HBQ== 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=nrPDy6fNUj4va1Dx/2HP6Rag+x1WpAuvTOEe4nECluI=; b=B5DdlRn9qrBRAX5JWhHRM3cViGBJ+pNfJqsscnuQMBo4AgBu0ageFXOUOSN316fYeZ DicOI2KclD7MVFQZ4cFQFVyZa1fp+thWO4WkBd6fNOybhN+fbNa2RREIudlXiXA+Kr1A /7vsUKXgJs1ty73hkJe8rP+SF9NTP7BQE5pvxSOtGx/rX4Z0ymp6KF+kBEKF1sNu1R/7 JuBA17Q1unXnbwKNehaMu2khW1suWExdrMYJifTCseAd1t1klQ3EGxRiQ33C4KsIVtqd O2WY5s1bQVwtm6DpEcbX37WBjKtUs5Yy57HAivxLWW4LWz/zjIBVDc6UZUZyZmlUFd/6 Go+w== X-Gm-Message-State: AKGB3mImpDdTFYtSWTo6D+OiAlAbbfvnbj4dWN9pX4Y8275af0Lhi5TN B5Xy6xZgX6bYEE9lCjxe3rs= X-Google-Smtp-Source: ACJfBotixyOMBLAnNGwEvowH46k4zWzDpngN1gA+GQGRDMtPm9u7LdpiHgMAVwfFRQRc3/T+lTD/ZA== X-Received: by 10.28.5.201 with SMTP id 192mr6504956wmf.142.1513392558397; Fri, 15 Dec 2017 18:49:18 -0800 (PST) Received: from debian-laptop.fritz.box (p5B3DDB65.dip0.t-ipconnect.de. [91.61.219.101]) by smtp.gmail.com with ESMTPSA id r19sm3713035wrg.83.2017.12.15.18.49.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Dec 2017 18:49:17 -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 Cc: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com Subject: [RFC 1/5] [media] rc: update sunxi-ir driver to get base frequency from devicetree Date: Sat, 16 Dec 2017 03:49:10 +0100 Message-Id: <20171216024914.7550-2-embed3d@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171216024914.7550-1-embed3d@gmail.com> References: <20171216024914.7550-1-embed3d@gmail.com> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch updates the sunxi-ir driver to set the ir base clock from devicetree. This is neccessary since there are different ir recievers on the market, that operate with different frequencys. So this value needs to be set depending on the attached receiver. Signed-off-by: Philipp Rossak --- drivers/media/rc/sunxi-cir.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/media/rc/sunxi-cir.c b/drivers/media/rc/sunxi-cir.c index 97f367b446c4..55b53d6463e9 100644 --- a/drivers/media/rc/sunxi-cir.c +++ b/drivers/media/rc/sunxi-cir.c @@ -72,12 +72,6 @@ /* 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 */ -#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 +116,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 +142,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 +167,12 @@ static int sunxi_ir_probe(struct platform_device *pdev) return PTR_ERR(ir->clk); } + /* Required frequency for IR0 or IR1 clock in CIR mode */ + if (of_property_read_u32(dn, "base-clk-frequency", &b_clk_freq)) { + dev_err(dev, "failed to get ir base clock frequency.\n"); + return -ENODATA; + } + /* Reset (optional) */ ir->rst = devm_reset_control_get_optional_exclusive(dev, NULL); if (IS_ERR(ir->rst)) @@ -180,7 +181,7 @@ 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; @@ -225,7 +226,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;