Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux...
[pandora-kernel.git] / arch / arm / mach-pxa / cm-x300.c
index de577c7..b6a5134 100644 (file)
@@ -12,6 +12,7 @@
  * it under the terms of the GNU General Public License version 2 as
  * published by the Free Software Foundation.
  */
+#define pr_fmt(fmt) "%s: " fmt, __func__
 
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -161,10 +162,10 @@ static mfp_cfg_t cm_x3xx_mfp_cfg[] __initdata = {
        GPIO99_GPIO,                    /* Ethernet IRQ */
 
        /* RTC GPIOs */
-       GPIO95_GPIO,                    /* RTC CS */
-       GPIO96_GPIO,                    /* RTC WR */
-       GPIO97_GPIO,                    /* RTC RD */
-       GPIO98_GPIO,                    /* RTC IO */
+       GPIO95_GPIO | MFP_LPM_DRIVE_HIGH,       /* RTC CS */
+       GPIO96_GPIO | MFP_LPM_DRIVE_HIGH,       /* RTC WR */
+       GPIO97_GPIO | MFP_LPM_DRIVE_HIGH,       /* RTC RD */
+       GPIO98_GPIO,                            /* RTC IO */
 
        /* Standard I2C */
        GPIO21_I2C_SCL,
@@ -484,14 +485,13 @@ static int cm_x300_ulpi_phy_reset(void)
        int err;
 
        /* reset the PHY */
-       err = gpio_request(GPIO_ULPI_PHY_RST, "ulpi reset");
+       err = gpio_request_one(GPIO_ULPI_PHY_RST, GPIOF_OUT_INIT_LOW,
+                              "ulpi reset");
        if (err) {
-               pr_err("%s: failed to request ULPI reset GPIO: %d\n",
-                      __func__, err);
+               pr_err("failed to request ULPI reset GPIO: %d\n", err);
                return err;
        }
 
-       gpio_direction_output(GPIO_ULPI_PHY_RST, 0);
        msleep(10);
        gpio_set_value(GPIO_ULPI_PHY_RST, 1);
        msleep(10);
@@ -510,8 +510,7 @@ static inline int cm_x300_u2d_init(struct device *dev)
                pout_clk = clk_get(NULL, "CLK_POUT");
                if (IS_ERR(pout_clk)) {
                        err = PTR_ERR(pout_clk);
-                       pr_err("%s: failed to get CLK_POUT: %d\n",
-                              __func__, err);
+                       pr_err("failed to get CLK_POUT: %d\n", err);
                        return err;
                }
                clk_enable(pout_clk);
@@ -768,39 +767,36 @@ static void __init cm_x300_init_da9030(void)
        irq_set_irq_wake(IRQ_WAKEUP0, 1);
 }
 
+/* wi2wi gpio setting for system_rev >= 130 */
+static struct gpio cm_x300_wi2wi_gpios[] __initdata = {
+       { 71, GPIOF_OUT_INIT_HIGH, "wlan en" },
+       { 70, GPIOF_OUT_INIT_HIGH, "bt reset" },
+};
+
 static void __init cm_x300_init_wi2wi(void)
 {
        int bt_reset, wlan_en;
        int err;
 
        if (system_rev < 130) {
-               wlan_en = 77;
-               bt_reset = 78;
-       } else {
-               wlan_en = 71;
-               bt_reset = 70;
+               cm_x300_wi2wi_gpios[0].gpio = 77;       /* wlan en */
+               cm_x300_wi2wi_gpios[1].gpio = 78;       /* bt reset */
        }
 
        /* Libertas and CSR reset */
-       err = gpio_request(wlan_en, "wlan en");
+       err = gpio_request_array(ARRAY_AND_SIZE(cm_x300_wi2wi_gpios));
        if (err) {
-               pr_err("CM-X300: failed to request wlan en gpio: %d\n", err);
-       } else {
-               gpio_direction_output(wlan_en, 1);
-               gpio_free(wlan_en);
+               pr_err("failed to request wifi/bt gpios: %d\n", err);
+               return;
        }
 
-       err = gpio_request(bt_reset, "bt reset");
-       if (err) {
-               pr_err("CM-X300: failed to request bt reset gpio: %d\n", err);
-       } else {
-               gpio_direction_output(bt_reset, 1);
-               udelay(10);
-               gpio_set_value(bt_reset, 0);
-               udelay(10);
-               gpio_set_value(bt_reset, 1);
-               gpio_free(bt_reset);
-       }
+       udelay(10);
+       gpio_set_value(bt_reset, 0);
+       udelay(10);
+       gpio_set_value(bt_reset, 1);
+
+       gpio_free(wlan_en);
+       gpio_free(bt_reset);
 }
 
 /* MFP */