ARM: tegra: fix ignored return value of regulator_enable
[deliverable/linux.git] / arch / arm / mach-tegra / board-harmony-pcie.c
index e8c3fda9bec2faa0665372c04ffbcb8cd22f448f..d195db09ea32660f438eddb74cbc5f1cc2f5b751 100644 (file)
 #include <linux/kernel.h>
 #include <linux/gpio.h>
 #include <linux/err.h>
+#include <linux/of_gpio.h>
 #include <linux/regulator/consumer.h>
 
 #include <asm/mach-types.h>
 
 #include "board.h"
-#include "board-harmony.h"
 
 #ifdef CONFIG_TEGRA_PCI
 
 int __init harmony_pcie_init(void)
 {
+       struct device_node *np;
+       int en_vdd_1v05;
        struct regulator *regulator = NULL;
        int err;
 
-       err = gpio_request(TEGRA_GPIO_EN_VDD_1V05_GPIO, "EN_VDD_1V05");
-       if (err)
+       np = of_find_node_by_path("/regulators/regulator@3");
+       if (!np) {
+               pr_err("%s: of_find_node_by_path failed\n", __func__);
+               return -ENODEV;
+       }
+
+       en_vdd_1v05 = of_get_named_gpio(np, "gpio", 0);
+       if (en_vdd_1v05 < 0) {
+               pr_err("%s: of_get_named_gpio failed: %d\n", __func__,
+                      en_vdd_1v05);
+               return en_vdd_1v05;
+       }
+
+       err = gpio_request(en_vdd_1v05, "EN_VDD_1V05");
+       if (err) {
+               pr_err("%s: gpio_request failed: %d\n", __func__, err);
                return err;
+       }
 
-       gpio_direction_output(TEGRA_GPIO_EN_VDD_1V05_GPIO, 1);
+       gpio_direction_output(en_vdd_1v05, 1);
 
-       regulator = regulator_get(NULL, "pex_clk");
-       if (IS_ERR_OR_NULL(regulator))
+       regulator = regulator_get(NULL, "vdd_ldo0,vddio_pex_clk");
+       if (IS_ERR_OR_NULL(regulator)) {
+               pr_err("%s: regulator_get failed: %d\n", __func__,
+                      (int)PTR_ERR(regulator));
                goto err_reg;
+       }
 
-       regulator_enable(regulator);
+       err = regulator_enable(regulator);
+       if (err) {
+               pr_err("%s: regulator_enable failed: %d\n", __func__, err);
+               goto err_en;
+       }
 
        err = tegra_pcie_init(true, true);
-       if (err)
+       if (err) {
+               pr_err("%s: tegra_pcie_init failed: %d\n", __func__, err);
                goto err_pcie;
+       }
 
        return 0;
 
 err_pcie:
        regulator_disable(regulator);
+err_en:
        regulator_put(regulator);
 err_reg:
-       gpio_free(TEGRA_GPIO_EN_VDD_1V05_GPIO);
+       gpio_free(en_vdd_1v05);
 
        return err;
 }
 
-static int __init harmony_pcie_initcall(void)
-{
-       if (!machine_is_harmony())
-               return 0;
-
-       return harmony_pcie_init();
-}
-
-/* PCI should be initialized after I2C, mfd and regulators */
-subsys_initcall_sync(harmony_pcie_initcall);
-
 #endif
This page took 0.026696 seconds and 5 git commands to generate.