Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}