cpufreq: imx6q: Fix handling EPROBE_DEFER from regulator
authorIrina Tirdea <irina.tirdea@nxp.com>
Tue, 4 Apr 2017 17:04:11 +0000 (20:04 +0300)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 19 Apr 2017 21:22:00 +0000 (23:22 +0200)
If there are any errors in getting the cpu0 regulators, the driver returns
-ENOENT. In case the regulators are not yet available, the devm_regulator_get
calls will return -EPROBE_DEFER, so that the driver can be probed later.
If we return -ENOENT, the driver will fail its initialization and will
not try to probe again (when the regulators become available).

Return the actual error received from regulator_get in probe. Print a
differentiated message in case we need to probe the device later and
in case we actually failed. Also add a message to inform when the
driver has been successfully registered.

Signed-off-by: Irina Tirdea <irina.tirdea@nxp.com>
Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/imx6q-cpufreq.c

index 7719b02e04f50f433e52bf4764461d4df6c2017b..be90ee3810bf3ec86fa23fe8d4c85787e2fd165c 100644 (file)
@@ -222,6 +222,13 @@ static int imx6q_cpufreq_probe(struct platform_device *pdev)
        arm_reg = regulator_get(cpu_dev, "arm");
        pu_reg = regulator_get_optional(cpu_dev, "pu");
        soc_reg = regulator_get(cpu_dev, "soc");
+       if (PTR_ERR(arm_reg) == -EPROBE_DEFER ||
+                       PTR_ERR(soc_reg) == -EPROBE_DEFER ||
+                       PTR_ERR(pu_reg) == -EPROBE_DEFER) {
+               ret = -EPROBE_DEFER;
+               dev_dbg(cpu_dev, "regulators not ready, defer\n");
+               goto put_reg;
+       }
        if (IS_ERR(arm_reg) || IS_ERR(soc_reg)) {
                dev_err(cpu_dev, "failed to get regulators\n");
                ret = -ENOENT;