コード例 #1
0
/*
    It calls jzmmc_manual_detect() to re-scan SDIO card
*/
int ssv_wlan_power_on(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:
*/

	printk("wlan power on:%d\n", flag);
	wake_lock(wifi_wake_lock);
	//rtc32k_enable();

	switch(flag) {
		case RESET:
			wlan_pw_en_enable();
			jzmmc_clk_ctrl(WLAN_SDIO_INDEX, 1);

			gpio_direction_output(reset, 0);
			msleep(100);
			gpio_direction_output(reset, 1);

			break;
		case NORMAL:
			wlan_pw_en_enable();

			gpio_direction_output(reset, 0);
			msleep(200);
			gpio_direction_output(reset, 1);

			jzmmc_manual_detect(WLAN_SDIO_INDEX, 1);

			break;
	}
	wake_unlock(wifi_wake_lock);
	return 0;
}
コード例 #2
0
int bcm_wlan_power_on(int flag)
{
	static struct wake_lock	*wifi_wake_lock = &bcm_ap6212_data.wifi_wake_lock;
	struct regulator *wifi_vbat = bcm_ap6212_data.wifi_vbat;
	struct regulator *wifi_vddio = bcm_ap6212_data.wifi_vddio;
	int reset = bcm_ap6212_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 on:%d\n", flag);
	wake_lock(wifi_wake_lock);
	rtc32k_enable();

	switch(flag) {
		case RESET:
			wlan_pw_en_enable();
			jzmmc_clk_ctrl(WLAN_SDIO_INDEX, 1);

			gpio_set_value(reset, 0);
			msleep(100);

			gpio_set_value(reset, 1);

			break;
		case NORMAL:
			wlan_pw_en_enable();

			gpio_set_value(reset, 0);
			msleep(100);

			gpio_set_value(reset, 1);

			jzmmc_manual_detect(WLAN_SDIO_INDEX, 1);

			break;
	}
	wake_unlock(wifi_wake_lock);
	return 0;
}
コード例 #3
0
ファイル: ebook-mmc.c プロジェクト: bgtwoigu/kernel-inwatch
int IW8101_wlan_power_on(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;

	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_info("------------------------wlan power on:%d\n", flag);
/*
	writel(gpio_bakup[0] & 0x1f00000, (void *)(0xb0010300 + PXINTS));
	writel(~gpio_bakup[0] & 0x1f00000, (void *)(0xb0010300 + PXINTC));
	writel(gpio_bakup[1] & 0x1f00000, (void *)(0xb0010300 + PXMSKS));
	writel(~gpio_bakup[1] & 0x1f00000, (void *)(0xb0010300 + PXMSKC));
	writel(gpio_bakup[2] & 0x1f00000, (void *)(0xb0010300 + PXPAT1S));
	writel(~gpio_bakup[2] & 0x1f00000, (void *)(0xb0010300 + PXPAT1C));
	writel(gpio_bakup[3] & 0x1f00000, (void *)(0xb0010300 + PXPAT0S));
	writel(~gpio_bakup[3] & 0x1f00000, (void *)(0xb0010300 + PXPAT0C));
*/
	//jzrtc_enable_clk32k();
	clk_32k_on();
	msleep(200);

	switch(flag) {
		case RESET:
			wlan_pw_en_enable();
			regulator_enable(power);
			jzmmc_clk_ctrl(1, 1);

			gpio_set_value(reset, 0);
			msleep(200);

			gpio_set_value(reset, 1);
			msleep(200);

			break;

		case NORMAL:
			wlan_pw_en_enable();
			regulator_enable(power);

			gpio_set_value(reset, 0);
			msleep(200);

			gpio_set_value(reset, 1);

			msleep(200);
			jzmmc_manual_detect(1, 1);

			break;
	}
	wake_lock(wifi_wake_lock);

	return 0;
}