Преглед изворни кода

ARM: OMAP3: mmc-twl4030 add cover switch

Allow a cover switch to be used to cause a rescan of the
MMC slot.

Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Adrian Hunter пре 16 година
родитељ
комит
8d75e98b58
2 измењених фајлова са 13 додато и 1 уклоњено
  1. 12 1
      arch/arm/mach-omap2/mmc-twl4030.c
  2. 1 0
      arch/arm/mach-omap2/mmc-twl4030.h

+ 12 - 1
arch/arm/mach-omap2/mmc-twl4030.c

@@ -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);
 	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.
  * 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].switch_pin = c->gpio_cd;
 			mmc->slots[0].card_detect_irq = gpio_to_irq(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
 		} else
 			mmc->slots[0].switch_pin = -EINVAL;
 			mmc->slots[0].switch_pin = -EINVAL;
 
 

+ 1 - 0
arch/arm/mach-omap2/mmc-twl4030.h

@@ -11,6 +11,7 @@ struct twl4030_hsmmc_info {
 	u8	wires;		/* 1/4/8 wires */
 	u8	wires;		/* 1/4/8 wires */
 	bool	transceiver;	/* MMC-2 option */
 	bool	transceiver;	/* MMC-2 option */
 	bool	ext_clock;	/* use external pin for input clock */
 	bool	ext_clock;	/* use external pin for input clock */
+	bool	cover_only;	/* No card detect - just cover switch */
 	int	gpio_cd;	/* or -EINVAL */
 	int	gpio_cd;	/* or -EINVAL */
 	int	gpio_wp;	/* or -EINVAL */
 	int	gpio_wp;	/* or -EINVAL */
 	struct device *dev;	/* returned: pointer to mmc adapter */
 	struct device *dev;	/* returned: pointer to mmc adapter */