SDIO_Status SDIO_Reset(SDIO_Handle Handle) { struct sdio_func *func = (struct sdio_func *)Handle; if (func && func->card) { sdio_release_host(func); sdio_reset_comm(func->card); sdio_claim_host(func); } return SDIO_SUCCESS; }
static int bcmsdh_sdmmc_probe(struct sdio_func *func, const struct sdio_device_id *id) { int ret = 0; static struct sdio_func sdio_func_0; sd_trace(("bcmsdh_sdmmc: %s Enter\n", __FUNCTION__)); sd_trace(("sdio_bcmsdh: func->class=%x\n", func->class)); sd_trace(("sdio_vendor: 0x%04x\n", func->vendor)); sd_trace(("sdio_device: 0x%04x\n", func->device)); sd_trace(("Function#: 0x%04x\n", func->num)); /*Linux native mmc stack enables high speed only if card's CCCR version >=1.20. BCM4329 reports CCCR Version 1.10 but it supports high speed*/ #ifdef MMC_SDIO_BROKEN_CCCR_REV if( func->vendor == SDIO_VENDOR_ID_BROADCOM && \ func->device == SDIO_DEVICE_ID_BROADCOM_4329) { sd_trace(("setting high speed support ignoring card CCCR\n")); func->card->cccr.high_speed = 1; } #endif if (func->num == 1) { #ifdef CUSTOMER_HW4 dhd_reset_chip(); sdio_reset_comm(func->card); #endif sdio_func_0.num = 0; sdio_func_0.card = func->card; gInstance->func[0] = &sdio_func_0; if(func->device == 0x4) { /* 4318 */ gInstance->func[2] = NULL; sd_trace(("NIC found, calling bcmsdh_probe...\n")); ret = bcmsdh_probe(&sdmmc_dev); } } gInstance->func[func->num] = func; if (func->num == 2) { sd_trace(("F2 found, calling bcmsdh_probe...\n")); ret = bcmsdh_probe(&sdmmc_dev); } return ret; }
int bcm_sdiowl_rescan(void) { int rc; struct sdio_wifi_dev *dev = &gDev; struct mmc_card *card; if (!atomic_read(&dev->dev_is_ready)) { PRINT_ERR("device not ready\n"); return -EFAULT; } card = wifi_sdio_get_card(); if (!card) { PRINT_ERR("unable to find WiFi SDIO device\n"); return -EIO; } rc = sdio_reset_comm(card); return rc; }