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)); if (func->num == 1) { 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(&func->dev); } } gInstance->func[func->num] = func; if (func->num == 2) { #ifdef WL_CFG80211 wl_cfg80211_set_parent_dev(&func->dev); #endif sd_trace(("F2 found, calling bcmsdh_probe...\n")); ret = bcmsdh_probe(&func->dev); } return ret; }
static int bcmsdh_sdmmc_probe(struct sdio_func *func, const struct sdio_device_id *id) { int ret = 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)); if (func->num == 1) { /* Keep a copy of F1's 'func' in F0, just in case... */ gInstance->func[0] = func; if(func->device == 0x4) { /* 4318 */ gInstance->func[2] = NULL; sd_trace(("NIC found, calling bcmsdh_probe...\n")); bcmsdh_probe(&sdmmc_dev); } } gInstance->func[func->num] = func; if (func->num == 2) { sd_trace(("F2 found, calling bcmsdh_probe...\n")); bcmsdh_probe(&sdmmc_dev); } return ret; }
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; }
static int sdioh_probe(struct sdio_func *func) { int host_idx = func->card->host->index; uint32 rca = func->card->rca; wifi_adapter_info_t *adapter; osl_t *osh = NULL; sdioh_info_t *sdioh = NULL; sd_err(("bus num (host idx)=%d, slot num (rca)=%d\n", host_idx, rca)); adapter = dhd_wifi_platform_get_adapter(SDIO_BUS, host_idx, rca); if (adapter != NULL) sd_err(("found adapter info '%s'\n", adapter->name)); else sd_err(("can't find adapter info for this chip\n")); #ifdef WL_CFG80211 wl_cfg80211_set_parent_dev(&func->dev); #endif /* allocate SDIO Host Controller state info */ osh = osl_attach(&func->dev, SDIO_BUS, TRUE); if (osh == NULL) { sd_err(("%s: osl_attach failed\n", __FUNCTION__)); goto fail; } osl_static_mem_init(osh, adapter); sdioh = sdioh_attach(osh, func); if (sdioh == NULL) { sd_err(("%s: sdioh_attach failed\n", __FUNCTION__)); goto fail; } sdioh->bcmsdh = bcmsdh_probe(osh, &func->dev, sdioh, adapter, SDIO_BUS, host_idx, rca); if (sdioh->bcmsdh == NULL) { sd_err(("%s: bcmsdh_probe failed\n", __FUNCTION__)); goto fail; } sdio_set_drvdata(func, sdioh); return 0; fail: if (sdioh != NULL) sdioh_detach(osh, sdioh); if (osh != NULL) osl_detach(osh); return -ENOMEM; }
static int bcmsdh_spi_probe(struct spi_device *spi_dev) { int ret = 0; gBCMSPI = spi_dev; #ifdef SPI_PIO_32BIT_RW spi_dev->bits_per_word = 32; #else spi_dev->bits_per_word = 8; #endif /* SPI_PIO_32BIT_RW */ ret = spi_setup(spi_dev); if (ret) { sd_err(("bcmsdh_spi_probe: spi_setup fail with %d\n", ret)); } sd_err(("bcmsdh_spi_probe: spi_setup with %d, bits_per_word=%d\n", ret, spi_dev->bits_per_word)); ret = bcmsdh_probe(&spi_dev->dev); return ret; }