]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/mach-omap1/board-h2-mmc.c
ARM: OMAP: No need to include board-h2.h from hardware.h
[linux-2.6-omap-h63xx.git] / arch / arm / mach-omap1 / board-h2-mmc.c
index 4fbe367063b233c8ead9ef3c22ea5154a51fe944..46098f546824853499151687cb1f7bd46fc45a83 100644 (file)
 
 #include <mach/mmc.h>
 #include <mach/gpio.h>
-#include <mach/mmc.h>
+
+#include "board-h2.h"
 
 #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
 
 static int mmc_set_power(struct device *dev, int slot, int power_on,
                                int vdd)
 {
-       if (power_on)
-               gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 1);
-       else
-               gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0);
-
+       gpio_set_value(H2_TPS_GPIO_MMC_PWR_EN, power_on);
        return 0;
 }
 
+static int mmc_late_init(struct device *dev)
+{
+       int ret = gpio_request(H2_TPS_GPIO_MMC_PWR_EN, "MMC power");
+       if (ret < 0)
+               return ret;
+
+       gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0);
+
+       return ret;
+}
+
+static void mmc_cleanup(struct device *dev)
+{
+       gpio_free(H2_TPS_GPIO_MMC_PWR_EN);
+}
+
 /*
  * H2 could use the following functions tested:
  * - mmc_get_cover_state that uses OMAP_MPUIO(1)
@@ -40,6 +53,8 @@ static int mmc_set_power(struct device *dev, int slot, int power_on,
  */
 static struct omap_mmc_platform_data mmc1_data = {
        .nr_slots                       = 1,
+       .init                           = mmc_late_init,
+       .cleanup                        = mmc_cleanup,
        .dma_mask                       = 0xffffffff,
        .slots[0]       = {
                .set_power              = mmc_set_power,
@@ -53,13 +68,6 @@ static struct omap_mmc_platform_data *mmc_data[OMAP16XX_NR_MMC];
 
 void __init h2_mmc_init(void)
 {
-       int ret;
-
-       ret = gpio_request(H2_TPS_GPIO_MMC_PWR_EN, "MMC power");
-       if (ret < 0)
-               return;
-       gpio_direction_output(H2_TPS_GPIO_MMC_PWR_EN, 0);
-
        mmc_data[0] = &mmc1_data;
        omap1_init_mmc(mmc_data, OMAP16XX_NR_MMC);
 }