mx31moboard: invert sdhc ro signal sense
[safe/jmp/linux-2.6] / arch / arm / mach-mx3 / mx31moboard.c
index 2cca3f2..2a2da47 100644 (file)
@@ -55,18 +55,6 @@ static unsigned int moboard_pins[] = {
        MX31_PIN_SD1_DATA1__SD1_DATA1, MX31_PIN_SD1_DATA0__SD1_DATA0,
        MX31_PIN_SD1_CLK__SD1_CLK, MX31_PIN_SD1_CMD__SD1_CMD,
        MX31_PIN_ATA_CS0__GPIO3_26, MX31_PIN_ATA_CS1__GPIO3_27,
-       /* USB OTG */
-       MX31_PIN_USBOTG_DATA0__USBOTG_DATA0,
-       MX31_PIN_USBOTG_DATA1__USBOTG_DATA1,
-       MX31_PIN_USBOTG_DATA2__USBOTG_DATA2,
-       MX31_PIN_USBOTG_DATA3__USBOTG_DATA3,
-       MX31_PIN_USBOTG_DATA4__USBOTG_DATA4,
-       MX31_PIN_USBOTG_DATA5__USBOTG_DATA5,
-       MX31_PIN_USBOTG_DATA6__USBOTG_DATA6,
-       MX31_PIN_USBOTG_DATA7__USBOTG_DATA7,
-       MX31_PIN_USBOTG_CLK__USBOTG_CLK, MX31_PIN_USBOTG_DIR__USBOTG_DIR,
-       MX31_PIN_USBOTG_NXT__USBOTG_NXT, MX31_PIN_USBOTG_STP__USBOTG_STP,
-       MX31_PIN_USB_OC__GPIO1_30,
 };
 
 static struct physmap_flash_data mx31moboard_flash_data = {
@@ -106,20 +94,46 @@ static struct imxi2c_platform_data moboard_i2c1_pdata = {
 
 static int moboard_sdhc1_get_ro(struct device *dev)
 {
-       return gpio_get_value(SDHC1_WP);
+       return !gpio_get_value(SDHC1_WP);
 }
 
 static int moboard_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
                void *data)
 {
-       return request_irq(gpio_to_irq(SDHC1_CD), detect_irq,
+       int ret;
+
+       ret = gpio_request(SDHC1_CD, "sdhc-detect");
+       if (ret)
+               return ret;
+
+       gpio_direction_input(SDHC1_CD);
+
+       ret = gpio_request(SDHC1_WP, "sdhc-wp");
+       if (ret)
+               goto err_gpio_free;
+       gpio_direction_input(SDHC1_WP);
+
+       ret = request_irq(gpio_to_irq(SDHC1_CD), detect_irq,
                IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
                "sdhc1-card-detect", data);
+       if (ret)
+               goto err_gpio_free_2;
+
+       return 0;
+
+err_gpio_free_2:
+       gpio_free(SDHC1_WP);
+err_gpio_free:
+       gpio_free(SDHC1_CD);
+
+       return ret;
 }
 
 static void moboard_sdhc1_exit(struct device *dev, void *data)
 {
        free_irq(gpio_to_irq(SDHC1_CD), data);
+       gpio_free(SDHC1_WP);
+       gpio_free(SDHC1_CD);
 }
 
 static struct imxmmc_platform_data sdhc1_pdata = {