return ret;
 }
 
-static int cpr_read_efuse(struct device *dev, const char *cname, u32 *data)
-{
-       struct nvmem_cell *cell;
-       ssize_t len;
-       char *ret;
-       int i;
-
-       *data = 0;
-
-       cell = nvmem_cell_get(dev, cname);
-       if (IS_ERR(cell)) {
-               if (PTR_ERR(cell) != -EPROBE_DEFER)
-                       dev_err(dev, "undefined cell %s\n", cname);
-               return PTR_ERR(cell);
-       }
-
-       ret = nvmem_cell_read(cell, &len);
-       nvmem_cell_put(cell);
-       if (IS_ERR(ret)) {
-               dev_err(dev, "can't read cell %s\n", cname);
-               return PTR_ERR(ret);
-       }
-
-       for (i = 0; i < len; i++)
-               *data |= ret[i] << (8 * i);
-
-       kfree(ret);
-       dev_dbg(dev, "efuse read(%s) = %x, bytes %zd\n", cname, *data, len);
-
-       return 0;
-}
-
 static int
 cpr_populate_ring_osc_idx(struct cpr_drv *drv)
 {
        int ret;
 
        for (; fuse < end; fuse++, fuses++) {
-               ret = cpr_read_efuse(drv->dev, fuses->ring_osc,
-                                    &data);
+               ret = nvmem_cell_read_variable_le_u32(drv->dev, fuses->ring_osc, &data);
                if (ret)
                        return ret;
                fuse->ring_osc_idx = data;
        u32 bits = 0;
        int ret;
 
-       ret = cpr_read_efuse(drv->dev, init_v_efuse, &bits);
+       ret = nvmem_cell_read_variable_le_u32(drv->dev, init_v_efuse, &bits);
        if (ret)
                return ret;
 
                }
 
                /* Populate target quotient by scaling */
-               ret = cpr_read_efuse(drv->dev, fuses->quotient, &fuse->quot);
+               ret = nvmem_cell_read_variable_le_u32(drv->dev, fuses->quotient, &fuse->quot);
                if (ret)
                        return ret;
 
        prev_fuse = fuse - 1;
 
        if (quot_offset) {
-               ret = cpr_read_efuse(drv->dev, quot_offset, "_diff);
+               ret = nvmem_cell_read_variable_le_u32(drv->dev, quot_offset, "_diff);
                if (ret)
                        return ret;
 
         * initialized after attaching to the power domain,
         * since it depends on the CPU's OPP table.
         */
-       ret = cpr_read_efuse(dev, "cpr_fuse_revision", &cpr_rev);
+       ret = nvmem_cell_read_variable_le_u32(dev, "cpr_fuse_revision", &cpr_rev);
        if (ret)
                return ret;