From patchwork Mon Jan 29 15:58:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philipp Rossak X-Patchwork-Id: 10189901 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 7A65D60375 for ; Mon, 29 Jan 2018 16:00:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 764AC288A0 for ; Mon, 29 Jan 2018 16:00:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6ADC3288B5; Mon, 29 Jan 2018 16:00:01 +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=unavailable 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 0E7F5288A0 for ; Mon, 29 Jan 2018 16:00:01 +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=sxwIsaSFQuiejnnCWOaAHoOIEp jtvB+1S/XJHaZmzxaFubnNnINM5qdkhJTPommDh7paGWfty2CG9cXC2r+XbTmQfsym57xgGBRPzxe h18ZP375Q/3Zk8WKJBWGvzN6cxJ2rwgI9b5OfASxXI7TJVbM757kK5kltzKzPNqr2sfMCDivUyjeB 5mSnNiwid8FBmoniZwYIg9MbcgGVqtWMo4kVc1kKQv4nmyO+wbluIgwWdL0r+Zro+MzSMwxuKdso9 PkJtAQMF6vs1e53ZZvvL/+5Nej2IuzrgYOMT63b9UuTqwdAmpPPXR288OJTbVxSi+OGnVCfVTFVkB v6lq81Bw==; 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 1egBqf-0006UT-8S; Mon, 29 Jan 2018 15:59:57 +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 1egBpD-0004xY-N9 for linux-arm-kernel@lists.infradead.org; Mon, 29 Jan 2018 15:58:29 +0000 Received: by mail-wm0-x242.google.com with SMTP id r71so15317136wmd.1 for ; Mon, 29 Jan 2018 07:58:17 -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=GaLX+OXQ6psmG3Hqp1v4BnXp9XhAiauAt6g/x0bdfmhk4QqpRVAE8wIFJ7snyc0pul Flqh2dqSzZ6mk+4kp2uLaw80brtNrQA1mpmnNTfMQPhiUsf6C1p5+PD2Gd7tuULx537+ ZGrnjLgOIVx1pLCgyx04HPDj4CGelYTTZwFtuLSazvt2AydR/r0uMe4BLB8LHosZBKka X7E3qP2TGf/sQLPqPEs0JfNdAFie4w4DfFl1fpAG0EIqcWe5shdG2UcJ+s7AX1gEkgAm PV71h+XJHu0LxwrSsHpBtbGwJ6tBA2z5mhBtt0+8eUnFzQI2k13LLebB+7e1Gck5zhRb lltA== 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=uLR7Pnwz3NWPuJ8fGGO5gn3H/o+aZvywoDPVEoGu09qcEJUYdEiZFgqqXaH/zK1SNL yVxgTlZ1fPxeGXeob9S847HlA3HziuSQGHROujzdLW6GhF4Gg7AIUF+tzrPbnQpI/SxV 7K2vzTeQa/bHB0z4PjM4QUrcFVGwfKjxJd4P1TfLFRNyapVLhmuk6ljoUtOlH6C2Hr2H sic4U7FceiajCPwNon/8OUsFfmvYx1ehweAhAq2QYwQK6upnvSd7iK7+DGLdAi19wD6P pMf+gZD5AcgB6UXkewSyNEZlh+zhmfIi+5kzm9gzO02v4S5+Siijl8LBunjV30YmCoCc nskw== X-Gm-Message-State: AKwxyteLGQSJf2kIP+O5s5geqOHCuaLcKchD9mSwVcQaCg/sQyYq4A5u NRD8q+OBG3n4jedYQQBv1c4= X-Google-Smtp-Source: AH8x225jqmFsvuRsVtxnTOjsIek8n1m9ReqjvMQLvdTjCJlD1/UQsIAXzBU6Lwv8qwG2kUzjYiXHvA== X-Received: by 10.28.208.76 with SMTP id h73mr19002109wmg.35.1517241495705; Mon, 29 Jan 2018 07:58:15 -0800 (PST) Received: from debian-laptop.fritz.box (p578F04D2.dip0.t-ipconnect.de. [87.143.4.210]) by smtp.gmail.com with ESMTPSA id z22sm2465385wrc.3.2018.01.29.07.58.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Jan 2018 07:58:15 -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 v4 1/6] media: rc: update sunxi-ir driver to get base clock frequency from devicetree Date: Mon, 29 Jan 2018 16:58:05 +0100 Message-Id: <20180129155810.7867-2-embed3d@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180129155810.7867-1-embed3d@gmail.com> References: <20180129155810.7867-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;