示例#1
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;
}
示例#2
0
int bcm_wlan_power_on(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 on:%d\n", flag);
	wifi_le_restore_io();
	bcm_power_on();
	msleep(200);

	switch(flag) {
		case RESET:
#ifdef WL_REG_EN
			gpio_direction_output(wl_reg_on, 1);
			msleep(200);
#endif
			jzmmc_clk_ctrl(1, 1);
#ifdef WL_RST_EN
			gpio_direction_output(reset, 0);
			msleep(200);
			gpio_direction_output(reset, 1);
			msleep(200);
#endif
			break;
		case NORMAL:
			msleep(200);
#ifdef WL_REG_EN
			gpio_direction_output(wl_reg_on,1);
			msleep(200);
#endif
#ifdef WL_RST_EN
			gpio_direction_output(reset, 0);
			msleep(200);
			gpio_direction_output(reset, 1);
			msleep(200);
#endif
			jzmmc_manual_detect(1, 1);

			break;
	}

	//	wake_lock(wifi_wake_lock);

	return 0;
}