|
@@ -150,9 +150,13 @@ static int nop_mmc_set_power(struct device *dev, int power_on, int vdd)
|
|
|
static inline void omap_hsmmc_mux(struct omap_hsmmc_platform_data
|
|
|
*mmc_controller, int controller_nr)
|
|
|
{
|
|
|
- if (gpio_is_valid(mmc_controller->switch_pin) &&
|
|
|
- (mmc_controller->switch_pin < OMAP_MAX_GPIO_LINES))
|
|
|
- omap_mux_init_gpio(mmc_controller->switch_pin,
|
|
|
+ if (gpio_is_valid(mmc_controller->gpio_cd) &&
|
|
|
+ (mmc_controller->gpio_cd < OMAP_MAX_GPIO_LINES))
|
|
|
+ omap_mux_init_gpio(mmc_controller->gpio_cd,
|
|
|
+ OMAP_PIN_INPUT_PULLUP);
|
|
|
+ if (gpio_is_valid(mmc_controller->gpio_cod) &&
|
|
|
+ (mmc_controller->gpio_cod < OMAP_MAX_GPIO_LINES))
|
|
|
+ omap_mux_init_gpio(mmc_controller->gpio_cod,
|
|
|
OMAP_PIN_INPUT_PULLUP);
|
|
|
if (gpio_is_valid(mmc_controller->gpio_wp) &&
|
|
|
(mmc_controller->gpio_wp < OMAP_MAX_GPIO_LINES))
|
|
@@ -250,15 +254,20 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
|
|
|
mmc->internal_clock = !c->ext_clock;
|
|
|
mmc->reg_offset = 0;
|
|
|
|
|
|
- mmc->switch_pin = c->gpio_cd;
|
|
|
+ if (c->cover_only) {
|
|
|
+ /* detect if mobile phone cover removed */
|
|
|
+ mmc->gpio_cd = -EINVAL;
|
|
|
+ mmc->gpio_cod = c->gpio_cd;
|
|
|
+ } else {
|
|
|
+ /* card detect pin on the mmc socket itself */
|
|
|
+ mmc->gpio_cd = c->gpio_cd;
|
|
|
+ mmc->gpio_cod = -EINVAL;
|
|
|
+ }
|
|
|
mmc->gpio_wp = c->gpio_wp;
|
|
|
|
|
|
mmc->remux = c->remux;
|
|
|
mmc->init_card = c->init_card;
|
|
|
|
|
|
- if (c->cover_only)
|
|
|
- mmc->cover = 1;
|
|
|
-
|
|
|
if (c->nonremovable)
|
|
|
mmc->nonremovable = 1;
|
|
|
|
|
@@ -358,7 +367,15 @@ void omap_hsmmc_late_init(struct omap2_hsmmc_info *c)
|
|
|
if (!mmc_pdata)
|
|
|
continue;
|
|
|
|
|
|
- mmc_pdata->switch_pin = c->gpio_cd;
|
|
|
+ if (c->cover_only) {
|
|
|
+ /* detect if mobile phone cover removed */
|
|
|
+ mmc_pdata->gpio_cd = -EINVAL;
|
|
|
+ mmc_pdata->gpio_cod = c->gpio_cd;
|
|
|
+ } else {
|
|
|
+ /* card detect pin on the mmc socket itself */
|
|
|
+ mmc_pdata->gpio_cd = c->gpio_cd;
|
|
|
+ mmc_pdata->gpio_cod = -EINVAL;
|
|
|
+ }
|
|
|
mmc_pdata->gpio_wp = c->gpio_wp;
|
|
|
|
|
|
res = omap_device_register(pdev);
|