unsigned int reg, void *_val, size_t bytes)
 {
        struct mtk_efuse_priv *priv = context;
-       u32 *val = _val;
-       int i = 0, words = bytes / 4;
+       void __iomem *addr = priv->base + reg;
+       u8 *val = _val;
+       int i;
 
-       while (words--)
-               *val++ = readl(priv->base + reg + (i++ * 4));
+       for (i = 0; i < bytes; i++, val++)
+               *val = readb(addr + i);
 
        return 0;
 }
        if (IS_ERR(priv->base))
                return PTR_ERR(priv->base);
 
-       econfig.stride = 4;
-       econfig.word_size = 4;
+       econfig.stride = 1;
+       econfig.word_size = 1;
        econfig.reg_read = mtk_reg_read;
        econfig.size = resource_size(res);
        econfig.priv = priv;