Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp4355254pxk; Wed, 30 Sep 2020 00:16:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwIRNMyakyvmfBlo6FeiNrqVZttqQU4OHDgADIKm+/SoSz0Hovn4a24DX6BrpUG6s1IZzkf X-Received: by 2002:a17:906:b88e:: with SMTP id hb14mr1357917ejb.543.1601450174968; Wed, 30 Sep 2020 00:16:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1601450174; cv=none; d=google.com; s=arc-20160816; b=b72JeQJ6KnRJTxR2j05UaGqzHCZSLBtR8XrMprMEt7Ol7VmCCc2/RObmyp27QLHls6 RKuP9AOsXR7k8ggulzF9a4y8mX2I4VM5wnfRDI0hgW2Iws32Jfsm8o4EuxXeOrrR/7sG g/tk42K5+tKhtYLotwgwnev/85fVFexN0y4PhRAI24y/SwieweDti4bkkEtmeCIzlub3 VEFWXVu/N+2VjRkiVtg36LLBmsaLiqdui1+NUiW90kQExv7EbHm4O6DNZ5m/zjK0vZbk bN+87HAKAhC09EfTFOCxjTn76yxQhq6Tf+0IspcOfxLa4vqIys0GhbzoXAo4mS2+FeOY /C5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=YMriHri7FNbvCYc2AgO5svCoHlOKEG0sWREuR5FlkR0=; b=hBlfi2fGHybuV+k0dlbmcXl3nlel9tQBHihJcT7oRjOIVXj+yyvMXu1uhh4p/7w80e HVn5F4dkWyHOve1e/yjn0DvFzMAI3o24pmbUwY1cY4NbfPkI4HoUO2ca4QHq3a5mzjAr 7/OIIfI8TfTkTptd5HRmk+nJNX7rGvr2gxlIS/hIIYw53gOBBZWs99HvvnVjMjc4etVK 4cD1a80WWJ9i/CPO4H5DuFn1fOainFUQ+LGa3yW9j7hikmUagSM5tFQJeFNGVw/1G2LC 59z8OzIM4G+8P+2JoRvaGh3mruo/6L3JDvAmtqz+g4601902EJxsD37ryJyvXbTp7p1R hJjg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t25si564879ejs.675.2020.09.30.00.15.52; Wed, 30 Sep 2020 00:16:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727861AbgI3HOx (ORCPT + 99 others); Wed, 30 Sep 2020 03:14:53 -0400 Received: from 212.199.177.27.static.012.net.il ([212.199.177.27]:56347 "EHLO herzl.nuvoton.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725777AbgI3HOx (ORCPT ); Wed, 30 Sep 2020 03:14:53 -0400 Received: from taln60.nuvoton.co.il (ntil-fw [212.199.177.25]) by herzl.nuvoton.co.il (8.13.8/8.13.8) with ESMTP id 08U7DuH7016068; Wed, 30 Sep 2020 10:13:56 +0300 Received: by taln60.nuvoton.co.il (Postfix, from userid 20088) id D7798639D5; Wed, 30 Sep 2020 10:13:55 +0300 (IDT) From: Tali Perry To: wsa@kernel.org, andriy.shevchenko@linux.intel.com, xqiu@google.com, kunyi@google.com, benjaminfair@google.com, avifishman70@gmail.com, joel@jms.id.au, tmaimon77@gmail.com Cc: linux-i2c@vger.kernel.org, openbmc@lists.ozlabs.org, linux-kernel@vger.kernel.org, Tali Perry Subject: [PATCH v1] i2c: npcm7xx: Support changing bus speed using debugfs. Date: Wed, 30 Sep 2020 10:13:42 +0300 Message-Id: <20200930071342.98691-1-tali.perry1@gmail.com> X-Mailer: git-send-email 2.22.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Systems that can dinamically add and remove slave devices often need to change the bus speed in runtime. This patch exposes the bus frequency to the user. This feature can also be used for test automation. Fixes: 56a1485b102e (i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver) Signed-off-by: Tali Perry --- drivers/i2c/busses/i2c-npcm7xx.c | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index 2ad166355ec9..44e2340c1893 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c @@ -2208,6 +2208,41 @@ static const struct i2c_algorithm npcm_i2c_algo = { /* i2c debugfs directory: used to keep health monitor of i2c devices */ static struct dentry *npcm_i2c_debugfs_dir; +static int i2c_speed_get(void *data, u64 *val) +{ + struct npcm_i2c *bus = data; + + *val = (u64)bus->bus_freq; + return 0; +} + +static int i2c_speed_set(void *data, u64 val) +{ + struct npcm_i2c *bus = data; + int ret; + + if (val < (u64)I2C_FREQ_MIN_HZ || val > (u64)I2C_FREQ_MAX_HZ) + return -EINVAL; + + if (val == (u64)bus->bus_freq) + return 0; + + i2c_lock_bus(&bus->adap, I2C_LOCK_ROOT_ADAPTER); + + npcm_i2c_int_enable(bus, false); + + ret = npcm_i2c_init_module(bus, I2C_MASTER, (u32)val); + + i2c_unlock_bus(&bus->adap, I2C_LOCK_ROOT_ADAPTER); + + if (ret) + return -EAGAIN; + + return 0; +} + +DEFINE_DEBUGFS_ATTRIBUTE(i2c_clock_ops, i2c_speed_get, i2c_speed_set, "%lld\n"); + static void npcm_i2c_init_debugfs(struct platform_device *pdev, struct npcm_i2c *bus) { @@ -2223,6 +2258,7 @@ static void npcm_i2c_init_debugfs(struct platform_device *pdev, debugfs_create_u64("rec_succ_cnt", 0444, d, &bus->rec_succ_cnt); debugfs_create_u64("rec_fail_cnt", 0444, d, &bus->rec_fail_cnt); debugfs_create_u64("timeout_cnt", 0444, d, &bus->timeout_cnt); + debugfs_create_file("i2c_speed", 0644, d, bus, &i2c_clock_ops); bus->debugfs = d; } base-commit: 06d56c38d7d411c162e4d406a9864bed32e30e61 -- 2.22.0