/* * Starting point for SDIO card init. */ int mmc_attach_sdio(void *pCard) { SDM_CARD_INFO* card; int err, i, funcs; if (pCard == NULL) return -EPERM; card = (SDM_CARD_INFO*)pCard; /* * Detect and init the card. */ err = mmc_sdio_init_card(pCard); if (err) goto remove; /* * The number of functions on the card is encoded inside * the ocr. */ funcs = (card->ocr & 0x70000000) >> 28; card->sdio_funcs = 0; /* * Initialize (but don't add) all present functions. */ for (i = 0; i < funcs; i++, card->sdio_funcs++) { err = sdio_init_func(pCard, i + 1); if (err) goto remove; } card->type = SDIO; return 0; remove: return err; }
int sdio_register(struct mmc_host *host) { mmc_sdio_init_card(host); return 0; }