int bcm_wlan_power_off(int flag)
{
	static struct wake_lock	*wifi_wake_lock = &bcm_ap6181_data.wifi_wake_lock;
	int reset = bcm_ap6181_data.wifi_reset;

	if (wifi_wake_lock == NULL)
		pr_warn("%s: invalid wifi_wake_lock\n", __func__);
	else if (!gpio_is_valid(reset))
		pr_warn("%s: invalid reset\n", __func__);
	else
		goto start;
	return -ENODEV;
start:
	pr_debug("wlan power off:%d\n", flag);
	switch(flag) {
		case RESET:
			gpio_set_value(reset, 0);
			wlan_pw_en_disable();

			break;
		case NORMAL:
			gpio_set_value(reset, 0);
			wlan_pw_en_disable();

			break;
	}

	wake_unlock(wifi_wake_lock);
	rtc32k_disable();

	return 0;
}
示例#2
0
int IW8101_wlan_power_off(int flag)
{
	static struct wake_lock	*wifi_wake_lock = &iw8101_data.wifi_wake_lock;
	struct regulator *power = iw8101_data.wifi_power;
	int reset = iw8101_data.wifi_reset;

printk("cljiang---IW8101_wlan_power_off\n");
	if (wifi_wake_lock == NULL)
		pr_warn("%s: invalid wifi_wake_lock\n", __func__);
	else if (power == NULL)
		pr_warn("%s: invalid power\n", __func__);
	else if (!gpio_is_valid(reset))
		pr_warn("%s: invalid reset\n", __func__);
	else
		goto start;
	return -ENODEV;
start:
	pr_debug("wlan power off:%d\n", flag);
	switch(flag) {
		case RESET:
			gpio_set_value(reset, 0);

			regulator_disable(power);
			wlan_pw_en_disable();
			jzmmc_clk_ctrl(1, 0);
			break;

		case NORMAL:
			gpio_set_value(reset, 0);

			regulator_disable(power);
			wlan_pw_en_disable();

 			jzmmc_manual_detect(1, 0);
			break;
	}

	wake_unlock(wifi_wake_lock);

	clk_32k_off();
//	jzrtc_disable_clk32k();/*clk32k off*/
	
/*
	gpio_bakup[0] = (unsigned int)readl((void *)(0xb0010300 + PXINT)) & 0x1f00000;
	gpio_bakup[1] = (unsigned int)readl((void *)(0xb0010300 + PXMSK)) & 0x1f00000;
	gpio_bakup[2] = (unsigned int)readl((void *)(0xb0010300 + PXPAT1)) & 0x1f00000;
	gpio_bakup[3] = (unsigned int)readl((void *)(0xb0010300 + PXPAT0)) & 0x1f00000;
	
	writel(0x1f00000, (void *)(0xb0010300 + PXINTC));
	writel(0x1f00000, (void *)(0xb0010300 + PXMSKS));
	writel(0x1f00000, (void *)(0xb0010300 + PXPAT1S));
*/
	return 0;
}
示例#3
0
int ssv_wlan_power_off(int flag)
{
	static struct wake_lock	*wifi_wake_lock = &ssv_6xxx_data.wifi_wake_lock;
	//struct regulator *wifi_vbat = ssv_6xxx_data.wifi_vbat;
	//struct regulator *wifi_vddio = ssv_6xxx_data.wifi_vddio;
	int reset = ssv_6xxx_data.wifi_reset;

    /*
    if (wifi_wake_lock == NULL)
		pr_warn("%s: invalid wifi_wake_lock\n", __func__);
	else if (wifi_vbat == NULL)
		pr_warn("%s: invalid wifi_vbat\n", __func__);
	else if (wifi_vddio == NULL)
		pr_warn("%s: invalid wifi_vddio\n", __func__);
	else if (!gpio_is_valid(reset))
		pr_warn("%s: invalid reset\n", __func__);
	else
		goto start;
	return -ENODEV;

start:
    */
	pr_debug("wlan power off:%d\n", flag);
	switch(flag) {
		case RESET:
			gpio_direction_output(reset, 0);
			wlan_pw_en_disable();

			break;
		case NORMAL:
			gpio_direction_output(reset, 0);
			wlan_pw_en_disable();

			break;
	}

	wake_unlock(wifi_wake_lock);
	//rtc32k_disable();

	return 0;
}