mx31: calls to gpio_request moved into platform code
[deliverable/linux.git] / arch / arm / mach-mx3 / pcm037.c
index 350cff5cc48abf4e4863db28f8461a90c7d54609..c6f61a1f06c8a2477bbc74e5111433abadbb0c6f 100644 (file)
@@ -280,27 +280,50 @@ static int pcm970_sdhc1_get_ro(struct device *dev)
 }
 #endif
 
+#define SDHC1_GPIO_WP  IOMUX_TO_GPIO(MX31_PIN_SFS6)
+#define SDHC1_GPIO_DET IOMUX_TO_GPIO(MX31_PIN_SCK6)
+
 static int pcm970_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
                void *data)
 {
        int ret;
-       int gpio_det, gpio_wp;
 
-       gpio_det = IOMUX_TO_GPIO(MX31_PIN_SCK6);
-       gpio_wp = IOMUX_TO_GPIO(MX31_PIN_SFS6);
+       ret = gpio_request(SDHC1_GPIO_DET, "sdhc-detect");
+       if (ret)
+               return ret;
+
+       gpio_direction_input(SDHC1_GPIO_DET);
 
-       gpio_direction_input(gpio_det);
-       gpio_direction_input(gpio_wp);
+#ifdef PCM970_SDHC_RW_SWITCH
+       ret = gpio_request(SDHC1_GPIO_WP, "sdhc-wp");
+       if (ret)
+               goto err_gpio_free;
+       gpio_direction_input(SDHC1_GPIO_WP);
+#endif
 
        ret = request_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), detect_irq,
                        IRQF_DISABLED | IRQF_TRIGGER_FALLING,
                                "sdhc-detect", data);
+       if (ret)
+               goto err_gpio_free_2;
+
+       return 0;
+
+err_gpio_free_2:
+#ifdef PCM970_SDHC_RW_SWITCH
+       gpio_free(SDHC1_GPIO_WP);
+err_gpio_free:
+#endif
+       gpio_free(SDHC1_GPIO_DET);
+
        return ret;
 }
 
 static void pcm970_sdhc1_exit(struct device *dev, void *data)
 {
        free_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), data);
+       gpio_free(SDHC1_GPIO_DET);
+       gpio_free(SDHC1_GPIO_WP);
 }
 
 static struct imxmmc_platform_data sdhc_pdata = {
@@ -313,7 +336,6 @@ static struct imxmmc_platform_data sdhc_pdata = {
 
 static struct platform_device *devices[] __initdata = {
        &pcm037_flash,
-       &pcm037_eth,
        &pcm037_sram_device,
 };
 
@@ -370,6 +392,8 @@ static struct mx3fb_platform_data mx3fb_pdata = {
  */
 static void __init mxc_board_init(void)
 {
+       int ret;
+
        mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins),
                        "pcm037");
 
@@ -382,7 +406,14 @@ static void __init mxc_board_init(void)
        mxc_register_device(&mxc_w1_master_device, NULL);
 
        /* LAN9217 IRQ pin */
-       gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1));
+       ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1), "lan9217-irq");
+       if (ret)
+               pr_warning("could not get LAN irq gpio\n");
+       else {
+               gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1));
+               platform_device_register(&pcm037_eth);
+       }
+
 
 #ifdef CONFIG_I2C_IMX
        i2c_register_board_info(1, pcm037_i2c_devices,
This page took 0.024589 seconds and 5 git commands to generate.