greybus: arche-apb-ctrl: Enable the clocks after regulator enable
authorVaibhav Hiremath <vaibhav.hiremath@linaro.org>
Wed, 13 Jan 2016 20:36:47 +0000 (02:06 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Wed, 13 Jan 2016 23:54:55 +0000 (15:54 -0800)
It makes more sense to enable the clock after power is enabled
to the device, so move clock enable code after regulator_enable
and setting up BOOT_RET pin.

Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Tested-by: Michael Scott <michael.scott@linaro.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@linaro.org>
Tested-by: Laurent Pinchart <laurent.pinchart@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/arche-apb-ctrl.c

index 65b1e9a700e705c038f89297528aa700c24caef1..d073543963a5f4894048b0735dceae64fb272b63 100644 (file)
@@ -82,19 +82,6 @@ static int apb_ctrl_init_seq(struct platform_device *pdev,
        struct device *dev = &pdev->dev;
        int ret;
 
-       /* On DB3 clock was not mandatory */
-       if (gpio_is_valid(apb->clk_en_gpio)) {
-               ret = devm_gpio_request(dev, apb->clk_en_gpio, "apb_clk_en");
-               if (ret) {
-                       dev_warn(dev, "Failed requesting APB clock en gpio %d\n",
-                                apb->clk_en_gpio);
-               } else {
-                       ret = gpio_direction_output(apb->clk_en_gpio, 1);
-                       if (ret)
-                               dev_warn(dev, "failed to set APB clock en gpio dir:%d\n",
-                                        ret);
-               }
-       }
        /* Hold APB in reset state */
        ret = devm_gpio_request(dev, apb->resetn_gpio, "apb-reset");
        if (ret) {
@@ -128,6 +115,7 @@ static int apb_ctrl_init_seq(struct platform_device *pdev,
                        return ret;
                }
        }
+
        if (!IS_ERR(apb->vio)) {
                ret = regulator_enable(apb->vio);
                if (ret) {
@@ -144,7 +132,22 @@ static int apb_ctrl_init_seq(struct platform_device *pdev,
                goto out_vio_disable;
        }
        gpio_set_value(apb->boot_ret_gpio, 0);
-       udelay(50);
+
+       /* On DB3 clock was not mandatory */
+       if (gpio_is_valid(apb->clk_en_gpio)) {
+               ret = devm_gpio_request(dev, apb->clk_en_gpio, "apb_clk_en");
+               if (ret) {
+                       dev_warn(dev, "Failed requesting APB clock en gpio %d\n",
+                                apb->clk_en_gpio);
+               } else {
+                       ret = gpio_direction_output(apb->clk_en_gpio, 1);
+                       if (ret)
+                               dev_warn(dev, "failed to set APB clock en gpio dir:%d\n",
+                                        ret);
+               }
+       }
+
+       usleep_range(100, 200);
 
        return 0;