{
        struct regmap *grf = pll->ctx->grf;
        unsigned int val;
-       int delay = 24000000, ret;
-
-       while (delay > 0) {
-               ret = regmap_read(grf, pll->lock_offset, &val);
-               if (ret) {
-                       pr_err("%s: failed to read pll lock status: %d\n",
-                              __func__, ret);
-                       return ret;
-               }
+       int ret;
 
-               if (val & BIT(pll->lock_shift))
-                       return 0;
-               delay--;
-       }
+       ret = regmap_read_poll_timeout(grf, pll->lock_offset, val,
+                                      val & BIT(pll->lock_shift), 0, 1000);
+       if (ret)
+               pr_err("%s: timeout waiting for pll to lock\n", __func__);
 
-       pr_err("%s: timeout waiting for pll to lock\n", __func__);
-       return -ETIMEDOUT;
+       return ret;
 }
 
 /**