示例#1
0
int bcm_wlan_power_off(int flag)
{
	static struct wake_lock	*wifi_wake_lock = &bcm_data.wifi_wake_lock;
#ifdef WL_REG_EN
	int wl_reg_on = WL_REG_EN;
#endif
#ifdef WL_RST_EN
	int reset = bcm_data.wifi_reset;
#endif

	if (wifi_wake_lock == NULL)
		pr_warn("%s: invalid wifi_wake_lock\n", __func__);
#ifdef WL_RST_EN
	else if (!gpio_is_valid(reset))
		pr_warn("%s: invalid reset\n", __func__);
#endif
	else
		goto start;
	return -ENODEV;
start:
	pr_debug("wlan power off:%d\n", flag);
	switch(flag) {
		case RESET:
#ifdef WL_RST_EN
			gpio_direction_output(reset, 0);
#endif
#ifdef WL_REG_EN
			udelay(65);
			gpio_direction_output(wl_reg_on,0);
#endif
			jzmmc_clk_ctrl(1, 0);
			break;

		case NORMAL:
#ifdef WL_RST_EN
			gpio_direction_output(reset, 0);
#endif
			udelay(65);

			/*
			 *  control wlan reg on pin
			 */
#ifdef WL_REG_EN
			gpio_direction_output(wl_reg_on,0);
#endif
			msleep(200);
			jzmmc_manual_detect(1, 0);
			break;
	}

	//	wake_unlock(wifi_wake_lock);

	bcm_power_down();
	wifi_le_set_io();

	return 0;
}
示例#2
0
static int bt_power_control(struct bt_power *bt_power, int enable)
{
	if (enable == bt_power_state)
		return 0;

	switch (enable)	{
	case RFKILL_STATE_SOFT_BLOCKED:
		bluesleep_stop();
		msleep(15);
		bcm_power_down();
		bt_disable_power(bt_power);

		if (bt_power->pdata->set_pin_status != NULL){
			(*bt_power->pdata->set_pin_status)(enable);
		} else {
			pr_warn("%s set_pin_status is not defined\n", __func__);
		}
		break;
	case RFKILL_STATE_UNBLOCKED:
		if (bt_power->pdata->restore_pin_status != NULL){
			(*bt_power->pdata->restore_pin_status)(enable);
		} else {
			pr_warn("%s set_pin_status is not defined\n", __func__);
		}

		bcm_power_on();

		if (bt_power->bt_rst_n != -1) {
			gpio_direction_output(bt_power->bt_rst_n, 0);
		} else {
			pr_warn("%s bt_rst_n can not be defined to -1\n", __func__);
		}

		bt_enable_power(bt_power);

		mdelay(15);

		if (bt_power->bt_rst_n != -1) {
			gpio_set_value(bt_power->bt_rst_n, 1);
		} else {
			pr_warn("%s bt_rst_n can not be defined to -1\n", __func__);
		}

		mdelay(15);
		bluesleep_start();
		break;
	default:
		break;
	}

	bt_power_state = enable;

	return 0;
}