if (ret < 0)
                return ret;
 
+       ret = snd_soc_component_update_bits(component, TAS2562_TDM_CFG5,
+                                           TAS2562_TDM_CFG5_VSNS_SLOT_MASK,
+                                           tas2562->v_sense_slot);
+       if (ret < 0)
+               return ret;
+
+       ret = snd_soc_component_update_bits(component, TAS2562_TDM_CFG6,
+                                           TAS2562_TDM_CFG6_ISNS_SLOT_MASK,
+                                           tas2562->i_sense_slot);
+       if (ret < 0)
+               return ret;
+
        return 0;
 }
 
 static int tas2562_set_bitwidth(struct tas2562_data *tas2562, int bitwidth)
 {
        int ret;
+       int val;
+       int sense_en;
 
        switch (bitwidth) {
        case SNDRV_PCM_FORMAT_S16_LE:
                                              TAS2562_TDM_CFG2,
                                              TAS2562_TDM_CFG2_RXWLEN_MASK,
                                              TAS2562_TDM_CFG2_RXWLEN_16B);
-               tas2562->v_sense_slot = tas2562->i_sense_slot + 2;
                break;
        case SNDRV_PCM_FORMAT_S24_LE:
                snd_soc_component_update_bits(tas2562->component,
                                              TAS2562_TDM_CFG2,
                                              TAS2562_TDM_CFG2_RXWLEN_MASK,
                                              TAS2562_TDM_CFG2_RXWLEN_24B);
-               tas2562->v_sense_slot = tas2562->i_sense_slot + 4;
                break;
        case SNDRV_PCM_FORMAT_S32_LE:
                snd_soc_component_update_bits(tas2562->component,
                                              TAS2562_TDM_CFG2,
                                              TAS2562_TDM_CFG2_RXWLEN_MASK,
                                              TAS2562_TDM_CFG2_RXWLEN_32B);
-               tas2562->v_sense_slot = tas2562->i_sense_slot + 4;
                break;
 
        default:
                return -EINVAL;
        }
 
-       ret = snd_soc_component_update_bits(tas2562->component,
-               TAS2562_TDM_CFG5,
-               TAS2562_TDM_CFG5_VSNS_EN | TAS2562_TDM_CFG5_VSNS_SLOT_MASK,
-               TAS2562_TDM_CFG5_VSNS_EN | tas2562->v_sense_slot);
+       val = snd_soc_component_read(tas2562->component, TAS2562_PWR_CTRL);
+       if (val < 0)
+               return val;
+
+       if (val & (1 << TAS2562_VSENSE_POWER_EN))
+               sense_en = 0;
+       else
+               sense_en = TAS2562_TDM_CFG5_VSNS_EN;
+
+       ret = snd_soc_component_update_bits(tas2562->component, TAS2562_TDM_CFG5,
+               TAS2562_TDM_CFG5_VSNS_EN, sense_en);
        if (ret < 0)
                return ret;
 
-       ret = snd_soc_component_update_bits(tas2562->component,
-               TAS2562_TDM_CFG6,
-               TAS2562_TDM_CFG6_ISNS_EN | TAS2562_TDM_CFG6_ISNS_SLOT_MASK,
-               TAS2562_TDM_CFG6_ISNS_EN | tas2562->i_sense_slot);
+       if (val & (1 << TAS2562_ISENSE_POWER_EN))
+               sense_en = 0;
+       else
+               sense_en = TAS2562_TDM_CFG6_ISNS_EN;
+
+       ret = snd_soc_component_update_bits(tas2562->component, TAS2562_TDM_CFG6,
+               TAS2562_TDM_CFG6_ISNS_EN, sense_en);
        if (ret < 0)
                return ret;
 
 
        ret = fwnode_property_read_u32(dev->fwnode, "ti,imon-slot-no",
                        &tas2562->i_sense_slot);
-       if (ret)
-               dev_err(dev, "Looking up %s property failed %d\n",
-                       "ti,imon-slot-no", ret);
+       if (ret) {
+               dev_err(dev, "Property %s is missing setting default slot\n",
+                       "ti,imon-slot-no");
+               tas2562->i_sense_slot = 0;
+       }
+
+
+       ret = fwnode_property_read_u32(dev->fwnode, "ti,vmon-slot-no",
+                       &tas2562->v_sense_slot);
+       if (ret) {
+               dev_info(dev, "Property %s is missing setting default slot\n",
+                       "ti,vmon-slot-no");
+               tas2562->v_sense_slot = 2;
+       }
+
+       if (tas2562->v_sense_slot < tas2562->i_sense_slot) {
+               dev_err(dev, "Vsense slot must be greater than Isense slot\n");
+               return -EINVAL;
+       }
 
        return ret;
 }