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_debug("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(); msleep(200); switch(flag) { case RESET: 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: 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; }
void clk_32k_on(void) { jzrtc_enable_clk32k(); clk_32k++; if (clk_32k > 2){ clk_32k = 2; } printk("cljiang---clk_32k_on:num = %d\n",clk_32k); }
static void enable_clk32k(void) { jzrtc_enable_clk32k(); }