#include "sdio_ops.h"
#include "sdio_cis.h"
-#ifdef CONFIG_MMC_EMBEDDED_SDIO
-#include <linux/mmc/sdio_ids.h>
-#endif
-
static int sdio_read_fbr(struct sdio_func *func)
{
int ret;
int ret;
u8 speed;
- if (!(card->host->caps & MMC_CAP_FORCE_HS)) {
- if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
- return 0;
+ if (!(card->host->caps & MMC_CAP_SD_HIGHSPEED))
+ return 0;
- if (!card->cccr.high_speed)
- return 0;
- }
+ if (!card->cccr.high_speed)
+ return 0;
ret = mmc_io_rw_direct(card, 0, 0, SDIO_CCCR_SPEED, 0, &speed);
if (ret)
goto finish;
}
-#ifdef CONFIG_MMC_EMBEDDED_SDIO
- if (host->embedded_sdio_data.cccr)
- memcpy(&card->cccr, host->embedded_sdio_data.cccr, sizeof(struct sdio_cccr));
- else {
-#endif
- /*
- * Read the common registers.
- */
- err = sdio_read_cccr(card);
- if (err)
- goto remove;
-#ifdef CONFIG_MMC_EMBEDDED_SDIO
- }
-#endif
+ /*
+ * Read the common registers.
+ */
+ err = sdio_read_cccr(card);
+ if (err)
+ goto remove;
-#ifdef CONFIG_MMC_EMBEDDED_SDIO
- if (host->embedded_sdio_data.cis)
- memcpy(&card->cis, host->embedded_sdio_data.cis, sizeof(struct sdio_cis));
- else {
-#endif
- /*
- * Read the common CIS tuples.
- */
- err = sdio_read_common_cis(card);
- if (err)
- goto remove;
-#ifdef CONFIG_MMC_EMBEDDED_SDIO
- }
-#endif
+ /*
+ * Read the common CIS tuples.
+ */
+ err = sdio_read_common_cis(card);
+ if (err)
+ goto remove;
if (oldcard) {
int same = (card->cis.vendor == oldcard->cis.vendor &&
card = oldcard;
return 0;
}
- mmc_fixup_device(card, NULL);
if (card->type == MMC_TYPE_SD_COMBO) {
err = mmc_sd_setup_card(host, card, oldcard != NULL);
funcs = (ocr & 0x70000000) >> 28;
card->sdio_funcs = 0;
-#ifdef CONFIG_MMC_EMBEDDED_SDIO
- if (host->embedded_sdio_data.funcs)
- card->sdio_funcs = funcs = host->embedded_sdio_data.num_funcs;
-#endif
-
/*
* Initialize (but don't add) all present functions.
*/
for (i = 0; i < funcs; i++, card->sdio_funcs++) {
-#ifdef CONFIG_MMC_EMBEDDED_SDIO
- if (host->embedded_sdio_data.funcs) {
- struct sdio_func *tmp;
-
- tmp = sdio_alloc_func(host->card);
- if (IS_ERR(tmp))
- goto remove;
- tmp->num = (i + 1);
- card->sdio_func[i] = tmp;
- tmp->class = host->embedded_sdio_data.funcs[i].f_class;
- tmp->max_blksize = host->embedded_sdio_data.funcs[i].f_maxblksize;
- tmp->vendor = card->cis.vendor;
- tmp->device = card->cis.device;
- } else {
-#endif
- err = sdio_init_func(host->card, i + 1);
- if (err)
- goto remove;
-#ifdef CONFIG_MMC_EMBEDDED_SDIO
- }
-#endif
+ err = sdio_init_func(host->card, i + 1);
+ if (err)
+ goto remove;
}
mmc_release_host(host);
return err;
}
-int sdio_reset_comm(struct mmc_card *card)
-{
- struct mmc_host *host = card->host;
- u32 ocr;
- int err;
-
- printk("%s():\n", __func__);
- mmc_claim_host(host);
-
- mmc_go_idle(host);
-
- mmc_set_clock(host, host->f_min);
-
- err = mmc_send_io_op_cond(host, 0, &ocr);
- if (err)
- goto err;
-
- host->ocr = mmc_select_voltage(host, ocr);
- if (!host->ocr) {
- err = -EINVAL;
- goto err;
- }
-
- err = mmc_send_io_op_cond(host, host->ocr, &ocr);
- if (err)
- goto err;
-
- if (mmc_host_is_spi(host)) {
- err = mmc_spi_set_crc(host, use_spi_crc);
- if (err)
- goto err;
- }
-
- if (!mmc_host_is_spi(host)) {
- err = mmc_send_relative_addr(host, &card->rca);
- if (err)
- goto err;
- mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
- }
- if (!mmc_host_is_spi(host)) {
- err = mmc_select_card(card);
- if (err)
- goto err;
- }
-
- /*
- * Switch to high-speed (if supported).
- */
- err = sdio_enable_hs(card);
- if (err > 0)
- mmc_sd_go_highspeed(card);
- else if (err)
- goto err;
-
- /*
- * Change to the card's maximum speed.
- */
- mmc_set_clock(host, mmc_sdio_get_max_clock(card));
-
- err = sdio_enable_4bit_bus(card);
- if (err > 0)
- mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
- else if (err)
- goto err;
-
- mmc_release_host(host);
- return 0;
-err:
- printk("%s: Error resetting SDIO communications (%d)\n",
- mmc_hostname(host), err);
- mmc_release_host(host);
- return err;
-}
-EXPORT_SYMBOL(sdio_reset_comm);