goto clean;
        }
 
-       if (config->init_data) {
-               /*
-                * Providing of_match means the framework is expected to parse
-                * DT to get the init_data. This would conflict with provided
-                * init_data, if set. Warn if it happens.
-                */
-               if (regulator_desc->of_match)
-                       dev_warn(dev, "Using provided init data - OF match ignored\n");
+       /*
+        * DT may override the config->init_data provided if the platform
+        * needs to do so. If so, config->init_data is completely ignored.
+        */
+       init_data = regulator_of_get_init_data(dev, regulator_desc, config,
+                                              &rdev->dev.of_node);
 
+       /*
+        * Sometimes not all resources are probed already so we need to take
+        * that into account. This happens most the time if the ena_gpiod comes
+        * from a gpio extender or something else.
+        */
+       if (PTR_ERR(init_data) == -EPROBE_DEFER) {
+               ret = -EPROBE_DEFER;
+               goto clean;
+       }
+
+       /*
+        * We need to keep track of any GPIO descriptor coming from the
+        * device tree until we have handled it over to the core. If the
+        * config that was passed in to this function DOES NOT contain
+        * a descriptor, and the config after this call DOES contain
+        * a descriptor, we definitely got one from parsing the device
+        * tree.
+        */
+       if (!cfg->ena_gpiod && config->ena_gpiod)
+               dangling_of_gpiod = true;
+       if (!init_data) {
                init_data = config->init_data;
                rdev->dev.of_node = of_node_get(config->of_node);
-
-       } else {
-               init_data = regulator_of_get_init_data(dev, regulator_desc,
-                                                      config,
-                                                      &rdev->dev.of_node);
-
-               /*
-                * Sometimes not all resources are probed already so we need to
-                * take that into account. This happens most the time if the
-                * ena_gpiod comes from a gpio extender or something else.
-                */
-               if (PTR_ERR(init_data) == -EPROBE_DEFER) {
-                       ret = -EPROBE_DEFER;
-                       goto clean;
-               }
-
-               /*
-                * We need to keep track of any GPIO descriptor coming from the
-                * device tree until we have handled it over to the core. If the
-                * config that was passed in to this function DOES NOT contain a
-                * descriptor, and the config after this call DOES contain a
-                * descriptor, we definitely got one from parsing the device
-                * tree.
-                */
-               if (!cfg->ena_gpiod && config->ena_gpiod)
-                       dangling_of_gpiod = true;
        }
 
        ww_mutex_init(&rdev->mutex, ®ulator_ww_class);