]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/mach-omap2/mmc-twl4030.c
ARM: OMAP3: mmc-twl4030 add cover switch
[linux-2.6-omap-h63xx.git] / arch / arm / mach-omap2 / mmc-twl4030.c
index d43421400e9d4d66b6d431c694b2cd26eaacb759..e2b2aeb713d8c3d79236c8d3fed05e0937ec9645 100644 (file)
@@ -100,6 +100,14 @@ static int twl_mmc_get_ro(struct device *dev, int slot)
        return gpio_get_value_cansleep(mmc->slots[0].gpio_wp);
 }
 
+static int twl_mmc_get_cover_state(struct device *dev, int slot)
+{
+       struct omap_mmc_platform_data *mmc = dev->platform_data;
+
+       /* NOTE: assumes card detect signal is active-low */
+       return !gpio_get_value_cansleep(mmc->slots[0].switch_pin);
+}
+
 /*
  * MMC Slot Initialization.
  */
@@ -411,7 +419,10 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)
 
                        mmc->slots[0].switch_pin = c->gpio_cd;
                        mmc->slots[0].card_detect_irq = gpio_to_irq(c->gpio_cd);
-                       mmc->slots[0].card_detect = twl_mmc_card_detect;
+                       if (c->cover_only)
+                               mmc->slots[0].get_cover_state = twl_mmc_get_cover_state;
+                       else
+                               mmc->slots[0].card_detect = twl_mmc_card_detect;
                } else
                        mmc->slots[0].switch_pin = -EINVAL;