diff --git a/drivers/nvmem/qfprom.c b/drivers/nvmem/qfprom.c index 7b0621fdbc82..6c554040c6e6 100644 --- a/drivers/nvmem/qfprom.c +++ b/drivers/nvmem/qfprom.c @@ -321,32 +321,19 @@ static int qfprom_reg_read(void *context, unsigned int reg, void *_val, size_t bytes) { struct qfprom_priv *priv = context; - u32 *val = _val; + u8 *val = _val; + int i = 0, words = bytes; void __iomem *base = priv->qfpcorrected; - int words = DIV_ROUND_UP(bytes, sizeof(u32)); - int i; if (read_raw_data && priv->qfpraw) base = priv->qfpraw; - for (i = 0; i < words; i++) - *val++ = readl(base + reg + i * sizeof(u32)); + while (words--) + *val++ = readb(base + reg + i++); return 0; } -/* Align reads to word boundary */ -static void qfprom_fixup_dt_cell_info(struct nvmem_device *nvmem, - struct nvmem_cell_info *cell) -{ - unsigned int byte_offset = cell->offset % sizeof(u32); - - cell->bit_offset += byte_offset * BITS_PER_BYTE; - cell->offset -= byte_offset; - if (byte_offset && !cell->nbits) - cell->nbits = cell->bytes * BITS_PER_BYTE; -} - static void qfprom_runtime_disable(void *data) { pm_runtime_disable(data); @@ -371,11 +358,10 @@ static int qfprom_probe(struct platform_device *pdev) struct nvmem_config econfig = { .name = "qfprom", .add_legacy_fixed_of_cells = true, - .stride = 4, - .word_size = 4, + .stride = 1, + .word_size = 1, .id = NVMEM_DEVID_AUTO, .reg_read = qfprom_reg_read, - .fixup_dt_cell_info = qfprom_fixup_dt_cell_info, }; struct device *dev = &pdev->dev; struct resource *res;