msm: Implement init_card operation for MSM SDCC
authorAlexander Tarasikov <alexander.tarasikov@gmail.com>
Sun, 21 Aug 2011 11:52:44 +0000 (15:52 +0400)
committerChris Ball <cjb@laptop.org>
Wed, 26 Oct 2011 19:43:36 +0000 (15:43 -0400)
This allows boards with non-standard sdio cards to fill the CIS/CCCR data.
It is particularly important for old msm72k boards using wl1251.
Also drop the obsolete embedded_sdio_data structure from the header
as it was intended to surve a similiar purpose but was not implemented.

Signed-off-by: Alexander Tarasikov <alexander.tarasikov@gmail.com>
Acked-by: Sahitya Tummala <stummala@codeaurora.org>
[davidb: minor formatting cleanup]
Signed-off-by: David Brown <davidb@codeaurora.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
arch/arm/mach-msm/include/mach/mmc.h
drivers/mmc/host/msm_sdcc.c

index 5631b51cec465e78f90feec4cc52ae7a74d7b0be..ffcd9e3a6a7e81578f22624d839278c4906f3a99 100644 (file)
@@ -8,13 +8,6 @@
 #include <linux/mmc/card.h>
 #include <linux/mmc/sdio_func.h>
 
-struct embedded_sdio_data {
-       struct sdio_cis cis;
-       struct sdio_cccr cccr;
-       struct sdio_embedded_func *funcs;
-       int num_funcs;
-};
-
 struct msm_mmc_gpio {
        unsigned no;
        const char *name;
@@ -29,9 +22,9 @@ struct msm_mmc_platform_data {
        unsigned int ocr_mask;                  /* available voltages */
        u32 (*translate_vdd)(struct device *, unsigned int);
        unsigned int (*status)(struct device *);
-       struct embedded_sdio_data *embedded_sdio;
        int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id);
        struct msm_mmc_gpio_data *gpio_data;
+       void (*init_card)(struct mmc_card *card);
 };
 
 #endif
index d06539dff7cc9d21bdbdd1b16780201921d67e52..cfe0c893ef044441c8ec3c13e9110fc5bacfe9ac 100644 (file)
@@ -1052,10 +1052,19 @@ static void msmsdcc_enable_sdio_irq(struct mmc_host *mmc, int enable)
        spin_unlock_irqrestore(&host->lock, flags);
 }
 
+static void msmsdcc_init_card(struct mmc_host *mmc, struct mmc_card *card)
+{
+       struct msmsdcc_host *host = mmc_priv(mmc);
+
+       if (host->plat->init_card)
+               host->plat->init_card(card);
+}
+
 static const struct mmc_host_ops msmsdcc_ops = {
        .request        = msmsdcc_request,
        .set_ios        = msmsdcc_set_ios,
        .enable_sdio_irq = msmsdcc_enable_sdio_irq,
+       .init_card      = msmsdcc_init_card,
 };
 
 static void