From patchwork Mon May 2 18:36:13 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srinivas Kandagatla X-Patchwork-Id: 67039 Delivered-To: patch@linaro.org Received: by 10.140.92.199 with SMTP id b65csp192969qge; Mon, 2 May 2016 11:36:51 -0700 (PDT) X-Received: by 10.66.176.103 with SMTP id ch7mr47248054pac.20.1462214211223; Mon, 02 May 2016 11:36:51 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id vq9si19117625pab.209.2016.05.02.11.36.50; Mon, 02 May 2016 11:36:51 -0700 (PDT) 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=@linaro.org; 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 dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755054AbcEBSgk (ORCPT + 29 others); Mon, 2 May 2016 14:36:40 -0400 Received: from mail-wm0-f44.google.com ([74.125.82.44]:36689 "EHLO mail-wm0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754849AbcEBSgV (ORCPT ); Mon, 2 May 2016 14:36:21 -0400 Received: by mail-wm0-f44.google.com with SMTP id n129so118401345wmn.1 for ; Mon, 02 May 2016 11:36:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ktDyja9RksSU55uuiHPhtq1NmRt6KTBfKfQ5OpgfxF0=; b=etQnd28THU8qLpsC27jsy8xVMSkhVUIEz4e0AxPOSnvfEpeese5oYCXemCO7KZZ9gK assJTtrTNJWVJiJPnD3l95Avt4ZASSAyUNU6GxAXwREWamL8XunhbUChsnSx3aXiZq2e lY0DQ/zrfehMiJJ9OGO7do3z3NRWlQ4pjNtXQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ktDyja9RksSU55uuiHPhtq1NmRt6KTBfKfQ5OpgfxF0=; b=OB7YlyVdXbyNGMyI5Bjeot0eqO5qbI6gW2P9U/wEshNOzj7XTSeRuzPfafPzRtdyeH FsOOphf77QwrM46P9xwmgF8DJmXGjI40YNgePwwU88QJ8WM6mDe1H+SAeH0sIu1ealAt L+z+sry0sPfYpSzmwlH9+ucanMPz7B+x8LNSGlsLBRuuwXkr+Rfk5ad7xlEQzcGpIjm2 LLV16Bhqn3XUsuMXKbtN1ygVUZvVZOmzNMGx9TpyiGUwk5IFTAM2/tDPL948IcNJh35B wcjhTbJmKpYeJNIHVyRvLmIja7xZm4BO3kRlYZNLk2CHD7f6Fc42gn4YmX5QzQfD0Emv wfFA== X-Gm-Message-State: AOPr4FWux+m9laIRLT9ZM08//p4FWioVLQYpULlC0uiSKXtjkINkh0RDC8Wb2iro1Z8Ljs/H X-Received: by 10.28.102.8 with SMTP id a8mr20884045wmc.54.1462214180379; Mon, 02 May 2016 11:36:20 -0700 (PDT) Received: from localhost.localdomain (host-92-17-247-99.as13285.net. [92.17.247.99]) by smtp.gmail.com with ESMTPSA id i4sm31557261wjj.49.2016.05.02.11.36.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 02 May 2016 11:36:19 -0700 (PDT) From: Srinivas Kandagatla To: Greg Kroah-Hartman Cc: linux-mediatek@lists.infradead.org, Srinivas Kandagatla , Maxime Ripard , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, stefan.wahren@i2se.com Subject: [PATCH v3 1/2] nvmem: mtk-efuse: remove nvmem regmap dependency Date: Mon, 2 May 2016 19:36:13 +0100 Message-Id: <1462214174-469-2-git-send-email-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1462214174-469-1-git-send-email-srinivas.kandagatla@linaro.org> References: <1462214174-469-1-git-send-email-srinivas.kandagatla@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Regmap raw accessors are bus specific implementations, using regmap raw apis in nvmem breaks nvmem providers based on regmap mmio. This patch moves to nvmem support in the driver to use callback instead of regmap, which is what the nvmem core supports now. Signed-off-by: Srinivas Kandagatla --- drivers/nvmem/Kconfig | 1 - drivers/nvmem/mtk-efuse.c | 47 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 32 insertions(+), 16 deletions(-) -- 2.5.0 diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig index 3041d48..5ff2189 100644 --- a/drivers/nvmem/Kconfig +++ b/drivers/nvmem/Kconfig @@ -50,7 +50,6 @@ config MTK_EFUSE tristate "Mediatek SoCs EFUSE support" depends on ARCH_MEDIATEK || COMPILE_TEST depends on HAS_IOMEM - select REGMAP_MMIO help This is a driver to access hardware related data like sensor calibration, HDMI impedance etc. diff --git a/drivers/nvmem/mtk-efuse.c b/drivers/nvmem/mtk-efuse.c index 9c49369..32fd572 100644 --- a/drivers/nvmem/mtk-efuse.c +++ b/drivers/nvmem/mtk-efuse.c @@ -14,15 +14,35 @@ #include #include +#include #include #include -#include -static struct regmap_config mtk_regmap_config = { - .reg_bits = 32, - .val_bits = 32, - .reg_stride = 4, -}; +static int mtk_reg_read(void *context, + unsigned int reg, void *_val, size_t bytes) +{ + void __iomem *base = context; + u32 *val = _val; + int i = 0, words = bytes / 4; + + while (words--) + *val++ = readl(base + reg + (i++ * 4)); + + return 0; +} + +static int mtk_reg_write(void *context, + unsigned int reg, void *_val, size_t bytes) +{ + void __iomem *base = context; + u32 *val = _val; + int i = 0, words = bytes / 4; + + while (words--) + writel(*val++, base + reg + (i++ * 4)); + + return 0; +} static int mtk_efuse_probe(struct platform_device *pdev) { @@ -30,7 +50,6 @@ static int mtk_efuse_probe(struct platform_device *pdev) struct resource *res; struct nvmem_device *nvmem; struct nvmem_config *econfig; - struct regmap *regmap; void __iomem *base; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -42,14 +61,12 @@ static int mtk_efuse_probe(struct platform_device *pdev) if (!econfig) return -ENOMEM; - mtk_regmap_config.max_register = resource_size(res) - 1; - - regmap = devm_regmap_init_mmio(dev, base, &mtk_regmap_config); - if (IS_ERR(regmap)) { - dev_err(dev, "regmap init failed\n"); - return PTR_ERR(regmap); - } - + econfig->stride = 4; + econfig->word_size = 4; + econfig->reg_read = mtk_reg_read; + econfig->reg_write = mtk_reg_write; + econfig->size = resource_size(res); + econfig->priv = base; econfig->dev = dev; econfig->owner = THIS_MODULE; nvmem = nvmem_register(econfig);