Add a nvmem post process callback to swap the MAC address as required
when read via nvmem.

Signed-off-by: Lucas Stach <[email protected]>
---
 drivers/nvmem/ocotp.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/drivers/nvmem/ocotp.c b/drivers/nvmem/ocotp.c
index 78c9f9726db0..b478ece30680 100644
--- a/drivers/nvmem/ocotp.c
+++ b/drivers/nvmem/ocotp.c
@@ -641,6 +641,21 @@ static struct regmap_bus imx_ocotp_regmap_bus = {
        .reg_read = imx_ocotp_reg_read,
 };
 
+static int imx_ocotp_cell_pp(void *context, const char *id, unsigned int 
offset,
+                            void *data, size_t bytes)
+{
+       /* Deal with some post processing of nvmem cell data */
+       if (id && !strcmp(id, "mac-address")) {
+               u8 *buf = data;
+               int i;
+
+               for (i = 0; i < bytes/2; i++)
+                       swap(buf[i], buf[bytes - i - 1]);
+       }
+
+       return 0;
+}
+
 static int imx_ocotp_init_dt(struct ocotp_priv *priv)
 {
        char mac[MAC_BYTES];
@@ -731,7 +746,8 @@ static int imx_ocotp_probe(struct device *dev)
        if (IS_ERR(priv->map))
                return PTR_ERR(priv->map);
 
-       nvmem = nvmem_regmap_register(priv->map, "imx-ocotp");
+       nvmem = nvmem_regmap_register_with_pp(priv->map, "imx-ocotp",
+                                             imx_ocotp_cell_pp);
        if (IS_ERR(nvmem))
                return PTR_ERR(nvmem);
 
-- 
2.39.1


Reply via email to