diff options
| author | Vivek Gautam <vivek.gautam@codeaurora.org> | 2017-01-04 11:18:09 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-01-04 12:22:47 -0500 |
| commit | 01d0d2c42a14cee8f619d3e9d571ce3469f5ef51 (patch) | |
| tree | 3d0e97d8e9686e4a453983312c5cdc73d4753847 | |
| parent | e09ee853c92011860a4bd2fbdf6126f60fc16bd3 (diff) | |
nvmem: qfprom: Allow single byte accesses for read/write
The nvmem core driver supports to read and write single
byte. So, allow qfprom to support this feature.
This change helps in extracting a required value based
on bit-offset and number of bits for the required value
in the nvmem cell.
Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org>
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
| -rw-r--r-- | drivers/nvmem/qfprom.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/nvmem/qfprom.c b/drivers/nvmem/qfprom.c index b5305f08b184..2bdb6c389328 100644 --- a/drivers/nvmem/qfprom.c +++ b/drivers/nvmem/qfprom.c | |||
| @@ -21,11 +21,11 @@ static int qfprom_reg_read(void *context, | |||
| 21 | unsigned int reg, void *_val, size_t bytes) | 21 | unsigned int reg, void *_val, size_t bytes) |
| 22 | { | 22 | { |
| 23 | void __iomem *base = context; | 23 | void __iomem *base = context; |
| 24 | u32 *val = _val; | 24 | u8 *val = _val; |
| 25 | int i = 0, words = bytes / 4; | 25 | int i = 0, words = bytes; |
| 26 | 26 | ||
| 27 | while (words--) | 27 | while (words--) |
| 28 | *val++ = readl(base + reg + (i++ * 4)); | 28 | *val++ = readb(base + reg + i++); |
| 29 | 29 | ||
| 30 | return 0; | 30 | return 0; |
| 31 | } | 31 | } |
| @@ -34,11 +34,11 @@ static int qfprom_reg_write(void *context, | |||
| 34 | unsigned int reg, void *_val, size_t bytes) | 34 | unsigned int reg, void *_val, size_t bytes) |
| 35 | { | 35 | { |
| 36 | void __iomem *base = context; | 36 | void __iomem *base = context; |
| 37 | u32 *val = _val; | 37 | u8 *val = _val; |
| 38 | int i = 0, words = bytes / 4; | 38 | int i = 0, words = bytes; |
| 39 | 39 | ||
| 40 | while (words--) | 40 | while (words--) |
| 41 | writel(*val++, base + reg + (i++ * 4)); | 41 | writeb(*val++, base + reg + i++); |
| 42 | 42 | ||
| 43 | return 0; | 43 | return 0; |
| 44 | } | 44 | } |
| @@ -53,7 +53,7 @@ static int qfprom_remove(struct platform_device *pdev) | |||
| 53 | static struct nvmem_config econfig = { | 53 | static struct nvmem_config econfig = { |
| 54 | .name = "qfprom", | 54 | .name = "qfprom", |
| 55 | .owner = THIS_MODULE, | 55 | .owner = THIS_MODULE, |
| 56 | .stride = 4, | 56 | .stride = 1, |
| 57 | .word_size = 1, | 57 | .word_size = 1, |
| 58 | .reg_read = qfprom_reg_read, | 58 | .reg_read = qfprom_reg_read, |
| 59 | .reg_write = qfprom_reg_write, | 59 | .reg_write = qfprom_reg_write, |
