static bool btcoex_is_sco_active(struct net_device *dev) { int ioc_res = 0; bool res = FALSE; int sco_id_cnt = 0; int param27; int i; for (i = 0; i < 12; i++) { ioc_res = dev_wlc_intvar_get_reg(dev, "btc_params", 27, ¶m27); WL_TRACE(("sample[%d], btc params: 27:%x\n", i, param27)); if (ioc_res < 0) { WL_ERR(("ioc read btc params error\n")); break; } if ((param27 & 0x6) == 2) { /* count both sco & esco */ sco_id_cnt++; } if (sco_id_cnt > 2) { WL_TRACE(("sco/esco detected, pkt id_cnt:%d samples:%d\n", sco_id_cnt, i)); res = TRUE; break; } OSL_SLEEP(5); } return res; }
static int wifi_plat_dev_drv_remove(struct platform_device *pdev) { wifi_adapter_info_t *adapter; /* Android style wifi platform data device ("bcmdhd_wlan" or "bcm4329_wlan") * is kept for backward compatibility and supports only 1 adapter */ ASSERT(dhd_wifi_platdata != NULL); ASSERT(dhd_wifi_platdata->num_adapters == 1); adapter = &dhd_wifi_platdata->adapters[0]; if (is_power_on) { #ifdef BCMPCIE wifi_platform_bus_enumerate(adapter, FALSE); OSL_SLEEP(100); wifi_platform_set_power(adapter, FALSE, WIFI_TURNOFF_DELAY); #else wifi_platform_set_power(adapter, FALSE, WIFI_TURNOFF_DELAY); wifi_platform_bus_enumerate(adapter, FALSE); #endif /* BCMPCIE */ } #if defined(BCMPCIE) && defined(CONFIG_WIFI_CONTROL_FUNC) somc_wifi_deinit(pdev); #endif return 0; }
int wifi_platform_set_power(wifi_adapter_info_t *adapter, bool on, unsigned long msec) { int err = 0; #ifdef CONFIG_DTS if (on) { err = regulator_enable(wifi_regulator); is_power_on = TRUE; } else { err = regulator_disable(wifi_regulator); is_power_on = FALSE; } if (err < 0) DHD_ERROR(("%s: regulator enable/disable failed", __FUNCTION__)); #else struct wifi_platform_data *plat_data; if (!adapter || !adapter->wifi_plat_data) return -EINVAL; plat_data = adapter->wifi_plat_data; DHD_ERROR(("%s = %d\n", __FUNCTION__, on)); if (plat_data->set_power) { #ifdef ENABLE_4335BT_WAR if (on) { printk("WiFi: trying to acquire BT lock\n"); if (bcm_bt_lock(lock_cookie_wifi) != 0) printk("** WiFi: timeout in acquiring bt lock**\n"); printk("%s: btlock acquired\n", __FUNCTION__); } else { /* For a exceptional case, release btlock */ bcm_bt_unlock(lock_cookie_wifi); } #endif /* ENABLE_4335BT_WAR */ err = plat_data->set_power(on); } if (msec && !err) OSL_SLEEP(msec); if (on && !err) is_power_on = TRUE; else is_power_on = FALSE; #endif /* CONFIG_DTS */ return err; }
int wifi_platform_set_power(wifi_adapter_info_t *adapter, bool on, unsigned long msec) { int err = 0; struct wifi_platform_data *plat_data; #ifdef ENABLE_4335BT_WAR bool is4335_revb0 = true; #endif if (!adapter || !adapter->wifi_plat_data) return -EINVAL; plat_data = adapter->wifi_plat_data; DHD_ERROR(("%s = %d\n", __FUNCTION__, on)); if (plat_data->set_power) { #ifdef ENABLE_4335BT_WAR if (on) { printk("WiFi: trying to acquire BT lock\n"); if (bcm_bt_lock(lock_cookie_wifi) != 0) printk("** WiFi: timeout in acquiring bt lock**\n"); printk("%s: btlock acquired\n", __FUNCTION__); } else { /* For a exceptional case, release btlock */ bcm_bt_unlock(lock_cookie_wifi); } #endif /* ENABLE_4335BT_WAR */ #ifdef ENABLE_4335BT_WAR is4335_revb0 = check_bcm4335_rev(); err = plat_data->set_power(on,is4335_revb0); #else err = plat_data->set_power(on); #endif } if (msec && !err) OSL_SLEEP(msec); if (on && !err) is_power_on = TRUE; else is_power_on = FALSE; return err; }
void sdio_func_unreg_notify(void) { OSL_SLEEP(15); sdio_unregister_driver(&dummy_sdmmc_driver); }