SDMMC: how to use gpio-interrupt to detect card rather than to use register-interrupt.
authorxbw <xbw@rock-chips.com>
Wed, 10 Oct 2012 06:09:57 +0000 (14:09 +0800)
committerxbw <xbw@rock-chips.com>
Wed, 10 Oct 2012 06:09:57 +0000 (14:09 +0800)
 If your project is synchronized with the server after 2012-9-27, you can modify your board-xxx.c lock like the board-rk30-sdk.c int the commit.
Of course, if your project is such older, you have to cherry-pick the bellow commit
            commit 9ab32ee1a15f01f251022bb20dcdb2f1729c7fd3
Author: xbw <xbw@rock-chips.com>
Date:   Thu Sep 27 21:23:07 2012 +0800

    SDMMC:use gpio-interrupt to detect card.
    Please attention to define the detect-pin name and the insert-card voltage in your board_xxxx.c.

M       arch/arm/mach-rk2928/board-rk2928-a720.c
M       arch/arm/plat-rk/include/plat/board.h
M       drivers/mmc/host/Kconfig
M       drivers/mmc/host/rk29_sdmmc.c

arch/arm/mach-rk30/board-rk30-sdk.c

index ee87191525914f19cbff26751b3308217fdb975c..02a5f254afd413fe9aa071795518ba44be6adae8 100755 (executable)
@@ -884,6 +884,8 @@ static struct platform_device device_ion = {
 #define RK29SDK_WIFI_SDIO_CARD_DETECT_N    RK30_PIN6_PB2
 #define RK29SDK_WIFI_SDIO_CARD_INT         RK30_PIN3_PD2
 
+#define RK29SDK_SD_CARD_DETECT_N        RK30_PIN3_PB6  //According to your own project to set the value of card-detect-pin.
+#define RK29SDK_SD_CARD_INSERT_LEVEL    GPIO_LOW         // set the voltage of insert-card. Please pay attention to the default setting.
 #endif //endif ---#ifdef CONFIG_SDMMC_RK29
 
 #ifdef CONFIG_SDMMC0_RK29
@@ -906,7 +908,11 @@ static int rk29_sdmmc0_cfg_gpio(void)
 #else
        rk29_sdmmc_set_iomux(0, 0xFFFF);
 
+#if defined(CONFIG_SDMMC0_RK29_SDCARD_DET_FROM_GPIO)
+     rk30_mux_api_set(GPIO3B6_SDMMC0DETECTN_NAME, GPIO3B_GPIO3B6);
+#else
        rk30_mux_api_set(GPIO3B6_SDMMC0DETECTN_NAME, GPIO3B_SDMMC0_DETECT_N);
+#endif 
 
 #if defined(CONFIG_SDMMC0_RK29_WRITE_PROTECT)
        gpio_request(SDMMC0_WRITE_PROTECT_PIN, "sdmmc-wp");
@@ -943,8 +949,12 @@ struct rk29_sdmmc_platform_data default_sdmmc0_data = {
     .status = rk29sdk_wifi_mmc0_status,
     .register_status_notify = rk29sdk_wifi_mmc0_status_register,
 #endif
-
+#if defined(CONFIG_SDMMC0_RK29_SDCARD_DET_FROM_GPIO)
+    .detect_irq = RK29SDK_SD_CARD_DETECT_N,
+    .insert_card_level = RK29SDK_SD_CARD_INSERT_LEVEL,
+#else
        .detect_irq = RK30_PIN3_PB6,    // INVALID_GPIO
+#endif
        .enable_sd_wakeup = 0,
 
 #if defined(CONFIG_SDMMC0_RK29_WRITE_PROTECT)
@@ -1012,8 +1022,10 @@ struct rk29_sdmmc_platform_data default_sdmmc1_data = {
        .status = rk29sdk_wifi_status,
        .register_status_notify = rk29sdk_wifi_status_register,
 #endif
-#if 0
-       .detect_irq = RK29SDK_WIFI_SDIO_CARD_DETECT_N,
+#if defined(CONFIG_SDMMC0_RK29_SDCARD_DET_FROM_GPIO)   
+       .detect_irq = INVALID_GPIO,//RK29SDK_WIFI_SDIO_CARD_DETECT_N,
+#else
+       //.detect_irq = RK29SDK_WIFI_SDIO_CARD_DETECT_N,        
 #endif
 
 #if defined(CONFIG_SDMMC1_RK29_WRITE_PROTECT)