Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba360fd0 authored by Srinivas Kandagatla's avatar Srinivas Kandagatla Committed by Greg Kroah-Hartman
Browse files

nvmem: mtk-efuse: remove nvmem regmap dependency



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: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 194c8581
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -50,7 +50,6 @@ config MTK_EFUSE
	tristate "Mediatek SoCs EFUSE support"
	tristate "Mediatek SoCs EFUSE support"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on HAS_IOMEM
	depends on HAS_IOMEM
	select REGMAP_MMIO
	help
	help
	  This is a driver to access hardware related data like sensor
	  This is a driver to access hardware related data like sensor
	  calibration, HDMI impedance etc.
	  calibration, HDMI impedance etc.
+32 −15
Original line number Original line Diff line number Diff line
@@ -14,15 +14,35 @@


#include <linux/device.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/io.h>
#include <linux/nvmem-provider.h>
#include <linux/nvmem-provider.h>
#include <linux/platform_device.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>


static struct regmap_config mtk_regmap_config = {
static int mtk_reg_read(void *context,
	.reg_bits = 32,
			unsigned int reg, void *_val, size_t bytes)
	.val_bits = 32,
{
	.reg_stride = 4,
	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)
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 resource *res;
	struct nvmem_device *nvmem;
	struct nvmem_device *nvmem;
	struct nvmem_config *econfig;
	struct nvmem_config *econfig;
	struct regmap *regmap;
	void __iomem *base;
	void __iomem *base;


	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -42,14 +61,12 @@ static int mtk_efuse_probe(struct platform_device *pdev)
	if (!econfig)
	if (!econfig)
		return -ENOMEM;
		return -ENOMEM;


	mtk_regmap_config.max_register = resource_size(res) - 1;
	econfig->stride = 4;

	econfig->word_size = 4;
	regmap = devm_regmap_init_mmio(dev, base, &mtk_regmap_config);
	econfig->reg_read = mtk_reg_read;
	if (IS_ERR(regmap)) {
	econfig->reg_write = mtk_reg_write;
		dev_err(dev, "regmap init failed\n");
	econfig->size = resource_size(res);
		return PTR_ERR(regmap);
	econfig->priv = base;
	}

	econfig->dev = dev;
	econfig->dev = dev;
	econfig->owner = THIS_MODULE;
	econfig->owner = THIS_MODULE;
	nvmem = nvmem_register(econfig);
	nvmem = nvmem_register(econfig);