Commit 382c62f7 authored by Srinivas Kandagatla's avatar Srinivas Kandagatla Committed by Greg Kroah-Hartman

nvmem: qfprom: remove nvmem regmap dependency

This patch moves to nvmem support in the driver to use callback instead of
regmap.
Reported-by: default avatarRajendra Nayak <rjendra@qti.qualcomm.com>
Signed-off-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 01973a01
...@@ -62,7 +62,6 @@ config QCOM_QFPROM ...@@ -62,7 +62,6 @@ config QCOM_QFPROM
tristate "QCOM QFPROM Support" tristate "QCOM QFPROM Support"
depends on ARCH_QCOM || COMPILE_TEST depends on ARCH_QCOM || COMPILE_TEST
depends on HAS_IOMEM depends on HAS_IOMEM
select REGMAP_MMIO
help help
Say y here to enable QFPROM support. The QFPROM provides access Say y here to enable QFPROM support. The QFPROM provides access
functions for QFPROM data to rest of the drivers via nvmem interface. functions for QFPROM data to rest of the drivers via nvmem interface.
......
...@@ -13,21 +13,35 @@ ...@@ -13,21 +13,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 qfprom_regmap_config = { static int qfprom_reg_read(void *context,
.reg_bits = 32, unsigned int reg, void *_val, size_t bytes)
.val_bits = 8, {
.reg_stride = 1, void __iomem *base = context;
.val_format_endian = REGMAP_ENDIAN_LITTLE, u32 *val = _val;
}; int i = 0, words = bytes / 4;
static struct nvmem_config econfig = { while (words--)
.name = "qfprom", *val++ = readl(base + reg + (i++ * 4));
.owner = THIS_MODULE,
}; return 0;
}
static int qfprom_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 qfprom_remove(struct platform_device *pdev) static int qfprom_remove(struct platform_device *pdev)
{ {
...@@ -36,12 +50,20 @@ static int qfprom_remove(struct platform_device *pdev) ...@@ -36,12 +50,20 @@ static int qfprom_remove(struct platform_device *pdev)
return nvmem_unregister(nvmem); return nvmem_unregister(nvmem);
} }
static struct nvmem_config econfig = {
.name = "qfprom",
.owner = THIS_MODULE,
.stride = 4,
.word_size = 1,
.reg_read = qfprom_reg_read,
.reg_write = qfprom_reg_write,
};
static int qfprom_probe(struct platform_device *pdev) static int qfprom_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct resource *res; struct resource *res;
struct nvmem_device *nvmem; struct nvmem_device *nvmem;
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);
...@@ -49,14 +71,10 @@ static int qfprom_probe(struct platform_device *pdev) ...@@ -49,14 +71,10 @@ static int qfprom_probe(struct platform_device *pdev)
if (IS_ERR(base)) if (IS_ERR(base))
return PTR_ERR(base); return PTR_ERR(base);
qfprom_regmap_config.max_register = resource_size(res) - 1; econfig.size = resource_size(res);
regmap = devm_regmap_init_mmio(dev, base, &qfprom_regmap_config);
if (IS_ERR(regmap)) {
dev_err(dev, "regmap init failed\n");
return PTR_ERR(regmap);
}
econfig.dev = dev; econfig.dev = dev;
econfig.priv = base;
nvmem = nvmem_register(&econfig); nvmem = nvmem_register(&econfig);
if (IS_ERR(nvmem)) if (IS_ERR(nvmem))
return PTR_ERR(nvmem); return PTR_ERR(nvmem);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment