int m7wl_wifi_power(int on)
{
	const unsigned SDC3_HDRV_PULL_CTL_ADDR = (unsigned) MSM_TLMM_BASE + 0x20A4;

#ifdef ENABLE_4335BT_WAR
	int lock_cookie_wifi = 'W' | 'i'<<8 | 'F'<<16 | 'i'<<24;	

	printk("WiFi: trying to acquire BT lock\n");
	if (bcm_bt_lock(lock_cookie_wifi) != 0)
		printk("** WiFi: timeout in acquiring bt lock**\n");
	else
		printk("** WiFi: btlock acquired**\n");
#endif 
	printk(KERN_INFO "%s: %d\n", __func__, on);

	if (on) {
#if 0
		writel(0x1FDB, SDC3_HDRV_PULL_CTL_ADDR);
#else
		sdc_pad_gpio_config(SDC3_HDRV_PULL_CTL_ADDR,
				BIT_HDRIV_PULL_UP, BIT_HDRIV_PULL_UP,
				HDRIV_STR_14MA, HDRIV_STR_12MA, HDRIV_STR_12MA);
#endif
		config_gpio_table(wifi_on_gpio_table,
				  ARRAY_SIZE(wifi_on_gpio_table));
	} else {
#if 0
		writel(0x0BDB, SDC3_HDRV_PULL_CTL_ADDR);
#else
		sdc_pad_gpio_config(SDC3_HDRV_PULL_CTL_ADDR,
				BIT_HDRIV_PULL_UP, BIT_HDRIV_PULL_UP,
				HDRIV_STR_2MA, HDRIV_STR_2MA, HDRIV_STR_2MA);
#endif
		config_gpio_table(wifi_off_gpio_table,
				  ARRAY_SIZE(wifi_off_gpio_table));
	}

	mdelay(1); 
	
	
	htc_BCM4335_wl_reg_ctl((on)?BCM4335_WL_REG_ON:BCM4335_WL_REG_OFF, ID_WIFI); 

	mdelay(1); 
#if 0
	wl_dev_wake_gpio.config.output_value = on? 1: 0;
	pm8xxx_gpio_config(wl_dev_wake_gpio.gpio, &wl_dev_wake_gpio.config);
#endif
	mdelay(120);

#ifdef ENABLE_4335BT_WAR
	bcm_bt_unlock(lock_cookie_wifi);
#endif
	return 0;
}
int deluxe_j_wifi_power(int on)
{
	const unsigned SDC3_HDRV_PULL_CTL_ADDR = (unsigned) MSM_TLMM_BASE + 0x20A4;

	printk(KERN_INFO "%s: %d\n", __func__, on);

	if (on) {
		if (system_rev <= XB) {
#if 0
			writel(0x1FDB, SDC3_HDRV_PULL_CTL_ADDR);
#else
			sdc_pad_gpio_config(SDC3_HDRV_PULL_CTL_ADDR,
					BIT_HDRIV_PULL_UP, BIT_HDRIV_PULL_UP,
					HDRIV_STR_8MA, HDRIV_STR_8MA, HDRIV_STR_8MA);
#endif
		} else {
			config_gpio_table(wifi_on_gpio_table,
					  ARRAY_SIZE(wifi_on_gpio_table));
		}
		config_pm_gpio_table(wifi_on_pm_gpio_table,
				  ARRAY_SIZE(wifi_on_pm_gpio_table));
	} else {
		if (system_rev <= XB) {
#if 0
			writel(0x0BDB, SDC3_HDRV_PULL_CTL_ADDR);
#else
			sdc_pad_gpio_config(SDC3_HDRV_PULL_CTL_ADDR,
					BIT_HDRIV_PULL_UP, BIT_HDRIV_PULL_UP,
					HDRIV_STR_2MA, HDRIV_STR_2MA, HDRIV_STR_2MA);
#endif
		} else {
			config_gpio_table(wifi_off_gpio_table,
					  ARRAY_SIZE(wifi_off_gpio_table));
		}
		config_pm_gpio_table(wifi_off_pm_gpio_table,
				  ARRAY_SIZE(wifi_off_pm_gpio_table));
	}

	mdelay(1); /* delay 1 ms, recommanded by hardware */
	wl_reg_on_gpio.config.output_value = on? 1: 0;
	pm8xxx_gpio_config(wl_reg_on_gpio.gpio, &wl_reg_on_gpio.config);

	mdelay(1); /* delay 1 ms, recommanded by hardware */
	wl_dev_wake_gpio.config.output_value = on? 1: 0;
	pm8xxx_gpio_config(wl_dev_wake_gpio.gpio, &wl_dev_wake_gpio.config);

	mdelay(120);
	return 0;
}