void clk_32k_off(void) { clk_32k--; if(clk_32k < 0){ clk_32k = 0; } if(clk_32k == 0){ jzrtc_disable_clk32k(); } printk("cljiang---clk_32k_off:num = %d\n",clk_32k); }
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; 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); jzmmc_clk_ctrl(1, 0); break; case NORMAL: gpio_set_value(reset, 0); regulator_disable(power); jzmmc_manual_detect(1, 0); break; } wake_unlock(wifi_wake_lock); jzrtc_disable_clk32k(); #if 0 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)); #endif return 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; 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); jzmmc_clk_ctrl(1, 0); break; case NORMAL: gpio_set_value(reset, 0); regulator_disable(power); jzmmc_manual_detect(1, 0); break; } wake_unlock(wifi_wake_lock); jzrtc_disable_clk32k(); return 0; }
static void disable_clk32k(void) { jzrtc_disable_clk32k(); }