struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component);
        unsigned int regval;
        u8 fullScaleVol;
+       int ret;
 
        if (mute) {
                /* Mute the headphone */
        } else {
                if (!cs42l42->stream_use) {
                        /* SCLK must be running before codec unmute */
-                       if ((cs42l42->bclk < 11289600) && (cs42l42->sclk < 11289600))
+                       if ((cs42l42->bclk < 11289600) && (cs42l42->sclk < 11289600)) {
                                snd_soc_component_update_bits(component, CS42L42_PLL_CTL1,
                                                              CS42L42_PLL_START_MASK, 1);
+                               ret = regmap_read_poll_timeout(cs42l42->regmap,
+                                                              CS42L42_PLL_LOCK_STATUS,
+                                                              regval,
+                                                              (regval & 1),
+                                                              CS42L42_PLL_LOCK_POLL_US,
+                                                              CS42L42_PLL_LOCK_TIMEOUT_US);
+                               if (ret < 0)
+                                       dev_warn(component->dev, "PLL failed to lock: %d\n", ret);
+                       }
 
                        /* Mark SCLK as present, turn off internal oscillator */
                        regmap_multi_reg_write(cs42l42->regmap, cs42l42_to_sclk_seq,
 
 #define CS42L42_NUM_SUPPLIES   5
 #define CS42L42_BOOT_TIME_US   3000
 #define CS42L42_CLOCK_SWITCH_DELAY_US 150
+#define CS42L42_PLL_LOCK_POLL_US       250
+#define CS42L42_PLL_LOCK_TIMEOUT_US    1250
 
 static const char *const cs42l42_supply_names[CS42L42_NUM_SUPPLIES] = {
        "VA",