Received: by 10.223.176.5 with SMTP id f5csp3042650wra; Mon, 29 Jan 2018 08:00:37 -0800 (PST) X-Google-Smtp-Source: AH8x227rmCmajlPijvbpPI/qmcDZaNeo4jfUEOpsSDOZT3ZJUxeZR+3bON4/5pVM6EFzcDGbcTGj X-Received: by 10.98.13.14 with SMTP id v14mr27090752pfi.184.1517241637814; Mon, 29 Jan 2018 08:00:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517241637; cv=none; d=google.com; s=arc-20160816; b=Shbr9pQRm4LUO0qIyDwovHBaxIgsLtEQmL7tTKSLapJsf/jLyIW9+ra2/kSbGzl6bN DszXgCBYcx0SKG1IJzhIC7brOJCna3u1GGYUXZScahFKHKh54YD4ahsI5wmLpH1LVo7b /BeAw0pivLEqwgjP9499Zteb0+9CLWzj2mNBTJS8BMwT31UqxhV/OqyYPyY2c4D3WhFc s/mKRNk+LVUo4WxvmM31vhQAgvT/P0LMtZIbt8SRdm+gsDdUmboCyvIW3WgK80DWAgHz Tw5xdDHzMbPyN7YiY0jyCuxnd9xedmucQ9acgo7jE4Zkw7wnLggiWq2pTgg1+IJnAvai Y62A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=D1Iz9no6Ec0Al5PXbGWuVateKo99HJQXWqZAJsAuxwQ=; b=eRsQ7FcAX4RMm5IiZA1RweHREWlFOwO8PW8oOT8dmq24LsDaJRcNOTj6fT6xzmjzPn cShNE1dXArdMVGdatwC/OUC+gwDS7OlC7O004wVj129arfQ4y/IMhXGkpIbyQ/qj/2Cz zGds8brCKGUo1hu88VzwYsSEdQ8EkstusAi9o6mU3ebQa+OysI86owFm8U1DCeAFqeZi 3lBWge+rbAYOEVlKmc2Aqq5AJZziPNDWxhf17vK+5arMRNrINe3oC13hRP/UAtQwgIp1 i26dV/u0nsBgiENbtEgn+NsciIqk9Zxe8958aUz85EtaA79wG7SOo1K0E6b/VQmi/doV +8+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=GaLX+OXQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j10si7668393pgs.467.2018.01.29.08.00.23; Mon, 29 Jan 2018 08:00:37 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=GaLX+OXQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751552AbeA2P6U (ORCPT + 99 others); Mon, 29 Jan 2018 10:58:20 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:37075 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751378AbeA2P6R (ORCPT ); Mon, 29 Jan 2018 10:58:17 -0500 Received: by mail-wm0-f65.google.com with SMTP id v71so34693630wmv.2; Mon, 29 Jan 2018 07:58:16 -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=nM9IzVwpMaMPEBTiS+pVGk7UYUqQ80LcJeD28rz6kPrGAsiAV8lj7wk91W73C2NBYN alNrb1KieEb+HEdkRmUPEVZeZmxf+gVk81dsMR5piOIMOnqnXhIkBMu3cPlrT+kXTt/8 BMe/4nL8t4NUBnSAmKmw2jLswAw62lEbO0yurA+mxUIkvQyhzHuCGE2HaJfoYXnzyei/ 69NelyX9bP+0V13PCEHScCjdRFngZWsdoh4dLisFE3WkiM+Nylu+SIaGl61vKxLMNux4 iSw7iKZf7d5odVgPYYBfle9nPbHXBtzGwL1xQj2O1/Hd9tl+TqXGj3uSdznv+pTDrxWo biKQ== X-Gm-Message-State: AKwxytdz/el7Ce0xZ8V6IKMmhHooqsJkHSgYRgp3wFzidBP+ezdYON5H cDh5R2WSLR94hpEY6bsI+F8= 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 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: [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> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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; -- 2.11.0