static int sysc_init_resets(struct sysc *ddata)
 {
        ddata->rsts =
-               devm_reset_control_array_get_optional_exclusive(ddata->dev);
+               devm_reset_control_get_optional(ddata->dev, "rstctrl");
        if (IS_ERR(ddata->rsts))
                return PTR_ERR(ddata->rsts);
 
  */
 static int sysc_rstctrl_reset_deassert(struct sysc *ddata, bool reset)
 {
-       int error;
+       int error, val;
 
        if (!ddata->rsts)
                return 0;
                        return error;
        }
 
-       return reset_control_deassert(ddata->rsts);
+       error = reset_control_deassert(ddata->rsts);
+       if (error == -EEXIST)
+               return 0;
+
+       error = readx_poll_timeout(reset_control_status, ddata->rsts, val,
+                                  val == 0, 100, MAX_MODULE_SOFTRESET_WAIT);
+
+       return error;
 }
 
 /*
 {
        int error = 0;
        bool manage_clocks = true;
-       bool reset = true;
 
-       if (ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT)
-               reset = false;
-
-       error = sysc_rstctrl_reset_deassert(ddata, reset);
+       error = sysc_rstctrl_reset_deassert(ddata, false);
        if (error)
                return error;
 
                        goto err_opt_clocks;
        }
 
+       if (!(ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT)) {
+               error = sysc_rstctrl_reset_deassert(ddata, true);
+               if (error)
+                       goto err_main_clocks;
+       }
+
        ddata->revision = sysc_read_revision(ddata);
        sysc_init_revision_quirks(ddata);