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

nvmem: 93xx46: remove nvmem regmap dependency

This patch moves to nvmem support in the driver to use callback
instead of regmap.
Signed-off-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2e8d0733
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/nvmem-provider.h> #include <linux/nvmem-provider.h>
#include <linux/regmap.h>
#include <linux/eeprom_93xx46.h> #include <linux/eeprom_93xx46.h>
#define OP_START 0x4 #define OP_START 0x4
...@@ -43,7 +42,6 @@ struct eeprom_93xx46_dev { ...@@ -43,7 +42,6 @@ struct eeprom_93xx46_dev {
struct spi_device *spi; struct spi_device *spi;
struct eeprom_93xx46_platform_data *pdata; struct eeprom_93xx46_platform_data *pdata;
struct mutex lock; struct mutex lock;
struct regmap_config regmap_config;
struct nvmem_config nvmem_config; struct nvmem_config nvmem_config;
struct nvmem_device *nvmem; struct nvmem_device *nvmem;
int addrlen; int addrlen;
...@@ -60,11 +58,12 @@ static inline bool has_quirk_instruction_length(struct eeprom_93xx46_dev *edev) ...@@ -60,11 +58,12 @@ static inline bool has_quirk_instruction_length(struct eeprom_93xx46_dev *edev)
return edev->pdata->quirks & EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH; return edev->pdata->quirks & EEPROM_93XX46_QUIRK_INSTRUCTION_LENGTH;
} }
static ssize_t static int eeprom_93xx46_read(void *priv, unsigned int off,
eeprom_93xx46_read(struct eeprom_93xx46_dev *edev, char *buf, void *val, size_t count)
unsigned off, size_t count)
{ {
ssize_t ret = 0; struct eeprom_93xx46_dev *edev = priv;
char *buf = val;
int err = 0;
if (unlikely(off >= edev->size)) if (unlikely(off >= edev->size))
return 0; return 0;
...@@ -84,7 +83,6 @@ eeprom_93xx46_read(struct eeprom_93xx46_dev *edev, char *buf, ...@@ -84,7 +83,6 @@ eeprom_93xx46_read(struct eeprom_93xx46_dev *edev, char *buf,
u16 cmd_addr = OP_READ << edev->addrlen; u16 cmd_addr = OP_READ << edev->addrlen;
size_t nbytes = count; size_t nbytes = count;
int bits; int bits;
int err;
if (edev->addrlen == 7) { if (edev->addrlen == 7) {
cmd_addr |= off & 0x7f; cmd_addr |= off & 0x7f;
...@@ -120,21 +118,20 @@ eeprom_93xx46_read(struct eeprom_93xx46_dev *edev, char *buf, ...@@ -120,21 +118,20 @@ eeprom_93xx46_read(struct eeprom_93xx46_dev *edev, char *buf,
if (err) { if (err) {
dev_err(&edev->spi->dev, "read %zu bytes at %d: err. %d\n", dev_err(&edev->spi->dev, "read %zu bytes at %d: err. %d\n",
nbytes, (int)off, err); nbytes, (int)off, err);
ret = err;
break; break;
} }
buf += nbytes; buf += nbytes;
off += nbytes; off += nbytes;
count -= nbytes; count -= nbytes;
ret += nbytes;
} }
if (edev->pdata->finish) if (edev->pdata->finish)
edev->pdata->finish(edev); edev->pdata->finish(edev);
mutex_unlock(&edev->lock); mutex_unlock(&edev->lock);
return ret;
return err;
} }
static int eeprom_93xx46_ew(struct eeprom_93xx46_dev *edev, int is_on) static int eeprom_93xx46_ew(struct eeprom_93xx46_dev *edev, int is_on)
...@@ -230,10 +227,11 @@ eeprom_93xx46_write_word(struct eeprom_93xx46_dev *edev, ...@@ -230,10 +227,11 @@ eeprom_93xx46_write_word(struct eeprom_93xx46_dev *edev,
return ret; return ret;
} }
static ssize_t static int eeprom_93xx46_write(void *priv, unsigned int off,
eeprom_93xx46_write(struct eeprom_93xx46_dev *edev, const char *buf, void *val, size_t count)
loff_t off, size_t count)
{ {
struct eeprom_93xx46_dev *edev = priv;
char *buf = val;
int i, ret, step = 1; int i, ret, step = 1;
if (unlikely(off >= edev->size)) if (unlikely(off >= edev->size))
...@@ -275,52 +273,9 @@ eeprom_93xx46_write(struct eeprom_93xx46_dev *edev, const char *buf, ...@@ -275,52 +273,9 @@ eeprom_93xx46_write(struct eeprom_93xx46_dev *edev, const char *buf,
/* erase/write disable */ /* erase/write disable */
eeprom_93xx46_ew(edev, 0); eeprom_93xx46_ew(edev, 0);
return ret ? : count; return ret;
}
/*
* Provide a regmap interface, which is registered with the NVMEM
* framework
*/
static int eeprom_93xx46_regmap_read(void *context, const void *reg,
size_t reg_size, void *val,
size_t val_size)
{
struct eeprom_93xx46_dev *eeprom_93xx46 = context;
off_t offset = *(u32 *)reg;
int err;
err = eeprom_93xx46_read(eeprom_93xx46, val, offset, val_size);
if (err)
return err;
return 0;
}
static int eeprom_93xx46_regmap_write(void *context, const void *data,
size_t count)
{
struct eeprom_93xx46_dev *eeprom_93xx46 = context;
const char *buf;
u32 offset;
size_t len;
int err;
memcpy(&offset, data, sizeof(offset));
buf = (const char *)data + sizeof(offset);
len = count - sizeof(offset);
err = eeprom_93xx46_write(eeprom_93xx46, buf, offset, len);
if (err)
return err;
return 0;
} }
static const struct regmap_bus eeprom_93xx46_regmap_bus = {
.read = eeprom_93xx46_regmap_read,
.write = eeprom_93xx46_regmap_write,
.reg_format_endian_default = REGMAP_ENDIAN_NATIVE,
};
static int eeprom_93xx46_eral(struct eeprom_93xx46_dev *edev) static int eeprom_93xx46_eral(struct eeprom_93xx46_dev *edev)
{ {
struct eeprom_93xx46_platform_data *pd = edev->pdata; struct eeprom_93xx46_platform_data *pd = edev->pdata;
...@@ -480,7 +435,6 @@ static int eeprom_93xx46_probe(struct spi_device *spi) ...@@ -480,7 +435,6 @@ static int eeprom_93xx46_probe(struct spi_device *spi)
{ {
struct eeprom_93xx46_platform_data *pd; struct eeprom_93xx46_platform_data *pd;
struct eeprom_93xx46_dev *edev; struct eeprom_93xx46_dev *edev;
struct regmap *regmap;
int err; int err;
if (spi->dev.of_node) { if (spi->dev.of_node) {
...@@ -515,20 +469,6 @@ static int eeprom_93xx46_probe(struct spi_device *spi) ...@@ -515,20 +469,6 @@ static int eeprom_93xx46_probe(struct spi_device *spi)
edev->pdata = pd; edev->pdata = pd;
edev->size = 128; edev->size = 128;
edev->regmap_config.reg_bits = 32;
edev->regmap_config.val_bits = 8;
edev->regmap_config.reg_stride = 1;
edev->regmap_config.max_register = edev->size - 1;
regmap = devm_regmap_init(&spi->dev, &eeprom_93xx46_regmap_bus, edev,
&edev->regmap_config);
if (IS_ERR(regmap)) {
dev_err(&spi->dev, "regmap init failed\n");
err = PTR_ERR(regmap);
goto fail;
}
edev->nvmem_config.name = dev_name(&spi->dev); edev->nvmem_config.name = dev_name(&spi->dev);
edev->nvmem_config.dev = &spi->dev; edev->nvmem_config.dev = &spi->dev;
edev->nvmem_config.read_only = pd->flags & EE_READONLY; edev->nvmem_config.read_only = pd->flags & EE_READONLY;
...@@ -536,6 +476,12 @@ static int eeprom_93xx46_probe(struct spi_device *spi) ...@@ -536,6 +476,12 @@ static int eeprom_93xx46_probe(struct spi_device *spi)
edev->nvmem_config.owner = THIS_MODULE; edev->nvmem_config.owner = THIS_MODULE;
edev->nvmem_config.compat = true; edev->nvmem_config.compat = true;
edev->nvmem_config.base_dev = &spi->dev; edev->nvmem_config.base_dev = &spi->dev;
edev->nvmem_config.reg_read = eeprom_93xx46_read;
edev->nvmem_config.reg_write = eeprom_93xx46_write;
edev->nvmem_config.priv = edev;
edev->nvmem_config.stride = 4;
edev->nvmem_config.word_size = 1;
edev->nvmem_config.size = edev->size;
edev->nvmem = nvmem_register(&edev->nvmem_config); edev->nvmem = nvmem_register(&edev->nvmem_config);
if (IS_ERR(edev->nvmem)) { if (IS_ERR(edev->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