Received: by 10.223.176.5 with SMTP id f5csp257639wra; Tue, 30 Jan 2018 11:00:49 -0800 (PST) X-Google-Smtp-Source: AH8x2250d2MO7AAvznQ8j/ED09XQk7MMNlkJ/nzbwI9BjoWOyqtfSNYnNq+3bb1pYqO9AyT7UoEb X-Received: by 10.99.115.67 with SMTP id d3mr25438094pgn.223.1517338849268; Tue, 30 Jan 2018 11:00:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1517338849; cv=none; d=google.com; s=arc-20160816; b=vb8gXl4Ng7FRdJmw8rNc9QS9PJxomyhiwXfY1kESdG6nj8XLlCDPpblgKCBwDbMTYc xxFmAeYGO2BfBKGAolwHfgOLjY+8D0Wg+WkkP4MdI9xpJZhWzx6YVnxFln+golcNALdQ YIRxoIWtN/M0xQDgANVdHZvgPRS4+SOWxOxjY64qykhASqyxLtnKbSJOBcNbX0plmAYJ kXeGlE+66gU4fSTOIL5sMib6VaDonsmMNWK+Vy0fRrXyCzWLnlMNxdeyMaNm7Bg/RyNZ qyNNesaC8EYBQj4KBZph8qmopKWNofPFws8VZJ5rT/OgVquA4eIhSvt1dw+wo6649uil xpoA== 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=f1rhpxfNJkXJJ5QaNIX2/28nXTOxEFhLLmpon6jeS3nv9uNDmC/rGBHHh1qpPnmR21 JfhPNqiyupV0maj4A1HeVfMeQYDnaOhb2QC3LZeMPMoM97VqgMY8f0Xfk0v8c6scdRy2 9H3v728zrx36MS9Y56I5h5MseML1tyjanMsgVj6mMUWwIQ0Za6+clWtzPFcqyJLogKAw ZYf8vWjXCb22J6ZdbStmFcupQYDJoh4RHZm5Abhrdr8WlxHGQi/4ucH5DI/stE58Gbfu quxSZQY42jM/r75FpZdZxVW0/iqOJMBfBdxD7y2v6GJ6QGhUC8NA6GKsxgmjHp6Yuow0 D7dg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=twFtT+bA; 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 s185si1906433pgb.544.2018.01.30.11.00.34; Tue, 30 Jan 2018 11:00:49 -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=twFtT+bA; 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 S1752401AbeA3RrE (ORCPT + 99 others); Tue, 30 Jan 2018 12:47:04 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:54319 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752146AbeA3RrB (ORCPT ); Tue, 30 Jan 2018 12:47:01 -0500 Received: by mail-wm0-f67.google.com with SMTP id i186so2858047wmi.4; 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=pdUxOQsez4lJgbrV+SLenIk0xh4/jIwH6VeQQVqVt92RY3ZBedH5f0ltF1P7wz7Jrb 4HR334OfxybxltAscHeO4wtHGRKr6suwJUZrx4KlmM5SD7O6xoSZ+fXxUkshbe/+zTrW 3QT1eabyMvGz5DDUAIPYg7/JshjvUYr9P9/tCACkZNgLpLpglHlua/bUP9695+zSgN/y pOtZNLVqmI3lUxxKQQvX5jvDmTRBlIOmIDH9NCejMrM6B/SlhUtgxZWlfx4JQhxiSCgX VuGqhpCThmI1GFUjk0PEgCSop0xCVmG12jCRCqzlsj4OjqUa+Zeb7JSfous4ztmqH2kJ UMRA== X-Gm-Message-State: AKwxytdEM/mRCpaWqiD/1eZFV6CNN7mEyi8TPNWnCEQkZg1zJiW0KhTA zFDayl3OrPk+KJG8hSvYzFE= 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 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 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> 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