.endianness = 1,
 };
 
+static void wcd934x_put_device_action(void *data)
+{
+       struct device *dev = data;
+
+       put_device(dev);
+}
+
 static int wcd934x_codec_parse_data(struct wcd934x_codec *wcd)
 {
        struct device *dev = &wcd->sdev->dev;
                return dev_err_probe(dev, -EINVAL, "Unable to get SLIM Interface device\n");
 
        slim_get_logical_addr(wcd->sidev);
-       wcd->if_regmap = regmap_init_slimbus(wcd->sidev,
+       wcd->if_regmap = devm_regmap_init_slimbus(wcd->sidev,
                                  &wcd934x_ifc_regmap_config);
-       if (IS_ERR(wcd->if_regmap))
+       if (IS_ERR(wcd->if_regmap)) {
+               put_device(&wcd->sidev->dev);
                return dev_err_probe(dev, PTR_ERR(wcd->if_regmap),
                                     "Failed to allocate ifc register map\n");
+       }
 
        of_property_read_u32(dev->parent->of_node, "qcom,dmic-sample-rate",
                             &wcd->dmic_sample_rate);
        if (ret)
                return ret;
 
+       ret = devm_add_action_or_reset(dev, wcd934x_put_device_action, &wcd->sidev->dev);
+       if (ret)
+               return ret;
+
        /* set default rate 9P6MHz */
        regmap_update_bits(wcd->regmap, WCD934X_CODEC_RPM_CLK_MCLK_CFG,
                           WCD934X_CODEC_RPM_CLK_MCLK_CFG_MCLK_MASK,