/* Customer function to control hw specific wlan gpios */ void dhd_customer_gpio_wlan_ctrl(int onoff) { switch (onoff) { case WLAN_RESET_OFF: WL_TRACE(("%s: call customer specific GPIO to insert WLAN RESET\n", __FUNCTION__)); #ifdef FIH_HW bcm4330_wifi_suspend(); //FIH-ADD+ #endif #ifdef CUSTOMER_HW bcm_wlan_power_off(2); #endif /* CUSTOMER_HW */ #ifdef CUSTOMER_HW2 wifi_set_power(0, 0); #endif //WL_ERROR(("=========== WLAN placed in RESET ========\n")); break; case WLAN_RESET_ON: WL_TRACE(("%s: callc customer specific GPIO to remove WLAN RESET\n", __FUNCTION__)); #ifdef FIH_HW bcm4330_wifi_resume(); //FIH-ADD+ #endif #ifdef CUSTOMER_HW bcm_wlan_power_on(2); #endif /* CUSTOMER_HW */ #ifdef CUSTOMER_HW2 wifi_set_power(1, 0); #endif //WL_ERROR(("=========== WLAN going back to live ========\n")); break; case WLAN_POWER_OFF: WL_TRACE(("%s: call customer specific GPIO to turn off WL_REG_ON\n", __FUNCTION__)); #ifdef FIH_HW wifi_power(0); //FIH-ADD+ #endif #ifdef CUSTOMER_HW bcm_wlan_power_off(1); #endif /* CUSTOMER_HW */ break; case WLAN_POWER_ON: WL_TRACE(("%s: call customer specific GPIO to turn on WL_REG_ON\n", __FUNCTION__)); #ifdef FIH_HW wifi_power(1); //FIH-ADD+ #endif #ifdef CUSTOMER_HW bcm_wlan_power_on(1); /* Lets customer power to get stable */ OSL_DELAY(200); #endif /* CUSTOMER_HW */ break; } }
/* set the GPIO to low after awaking the TNET from ELP */ int hPlatform_hardResetTnetw(void) { int err; // Turn power OFF if ((err = wifi_power(0)) == 0) { msleep(150); // Turn power ON err = wifi_power(1); msleep(150); } return err; }
int hPlatform_DevicePowerOn (void) { int err = 0; err = wifi_power(1); //mdelay(150); return err; }
int hPlatform_DevicePowerOffSetLongerDelay (void) { int err = 0; err = wifi_power(0); mdelay(500); return err; }
void sdio_function_cleanup(void) { sd_trace(("%s Enter\n", __FUNCTION__)); sdio_unregister_driver(&bcmsdh_sdmmc_driver); #ifdef ANDROID_SPECIFIC wifi_power(FALSE); #endif if (gInstance) kfree(gInstance); }
int hPlatform_DevicePowerOff (void *tnet_drv) { TWlanDrvIfObj *drv = tnet_drv; int err = 0; err = wifi_power(0); if (wakeup_state) { set_irq_wake(drv->irq, 0); wakeup_state = 0; } return err; }
int hPlatform_DevicePowerOn (void *tnet_drv) { TWlanDrvIfObj *drv = tnet_drv; int err = 0; err = wifi_power(1); msleep(30); if (!err && !wakeup_state) { set_irq_wake(drv->irq, 1); wakeup_state = 1; } return err; }
/* * module init */ int sdio_function_init(void) { int error = 0; sd_trace(("bcmsdh_sdmmc: %s Enter\n", __FUNCTION__)); gInstance = kzalloc(sizeof(BCMSDH_SDMMC_INSTANCE), GFP_KERNEL); if (!gInstance) return -ENOMEM; #ifdef ANDROID_SPECIFIC wifi_power(TRUE); #endif error = sdio_register_driver(&bcmsdh_sdmmc_driver); return error; }