void wlan_setup_power(int on, int flag) { printk("------------------------------------------------"); printk("------------------------------------------------"); printk("------------------------------------------------"); printk(/*KERN_INFO*/ "%s %s", __func__, on ? "on" : "down"); if (flag != 1) { printk(/*KERN_DEBUG*/ "(on=%d, flag=%d)\n", on, flag); #if 1 if (on) gpio_set_value(GPIO_WLAN_EN, GPIO_LEVEL_HIGH); else gpio_set_value(GPIO_WLAN_EN, GPIO_LEVEL_LOW); #endif return; } printk(/*KERN_INFO*/ " --enter\n"); if (on) { s3c_config_gpio_alive_table(ARRAY_SIZE(wlan_on_gpio_table), wlan_on_gpio_table); s3c_config_gpio_alive_table(ARRAY_SIZE(wlan_sdio_on_table), wlan_sdio_on_table); udelay(200); gpio_set_value(GPIO_WLAN_EN, GPIO_LEVEL_HIGH); //s3c_gpio_slp_cfgpin(GPIO_WLAN_EN, S3C_GPIO_SLP_OUT1); printk(KERN_DEBUG "WLAN: GPIO_WLAN_EN = %d \n", gpio_get_value(GPIO_WLAN_EN)); } else { gpio_set_value(GPIO_WLAN_EN, GPIO_LEVEL_LOW); //s3c_gpio_slp_cfgpin(GPIO_WLAN_EN, S3C_GPIO_SLP_OUT0); s3c_config_gpio_alive_table(ARRAY_SIZE(wlan_off_gpio_table), wlan_off_gpio_table); printk(KERN_DEBUG "WLAN: GPIO_WLAN_EN = %d \n", gpio_get_value(GPIO_WLAN_EN)); s3c_config_gpio_alive_table(ARRAY_SIZE(wlan_sdio_off_table), wlan_sdio_off_table); } /* mmc_rescan*/ #if defined(CONFIG_MACH_C1_NA_SPR_REV05) || defined(CONFIG_MACH_C1_NA_SPR_EPIC2_REV00) \ || defined(CONFIG_MACH_C1_NA_USCC_REV05) || defined(CONFIG_MACH_C1_KDDI_REV00) sdhci_s3c_force_presence_change(&s3c_device_hsmmc2); #else sdhci_s3c_force_presence_change(&s3c_device_hsmmc3); #endif }
void bcm_wlan_power_off(int flag) { if (flag == 1) { printk("%s : device power off!\n", __func__); sdhci_s3c_force_presence_change(&sdmmc_channel, 0); mdelay(100); gpio_set_value(EXYNOS4_GPK1(0), 0); mdelay(100); } else { printk("%s : device power off skip!! (flag = %d)\n", __func__, flag); gpio_set_value(EXYNOS4_GPK1(0), 0); mdelay(100); } }
static int brcm_wlan_set_carddetect(int onoff) { if (onoff) { s3c_config_gpio_alive_table( ARRAY_SIZE(wlan_sdio_on_table), wlan_sdio_on_table); } else { s3c_config_gpio_alive_table( ARRAY_SIZE(wlan_sdio_off_table), wlan_sdio_off_table); } udelay(200); sdhci_s3c_force_presence_change(&s3c_device_hsmmc3); msleep(500); /* wait for carddetect */ return 0; }
int bcm_wlan_set_carddetect(bool present) { int err = 0; if (present) { printk("======== Card detection to detect SDIO card! ========\n"); #ifdef CONFIG_MACH_ODROID_4210 err = sdhci_s3c_force_presence_change(&sdmmc_channel, 1); #endif #ifdef CUSTOMER_HW_ALLWINNER sunxi_mci_rescan_card(sdc_id, 1); #endif } else { printk("======== Card detection to remove SDIO card! ========\n"); #ifdef CONFIG_MACH_ODROID_4210 err = sdhci_s3c_force_presence_change(&sdmmc_channel, 0); #endif #ifdef CUSTOMER_HW_ALLWINNER sunxi_mci_rescan_card(sdc_id, 0); #endif } return err; }
void bcm_wlan_power_off(int flag) { if (flag == 1) { printk("======== Card detection to remove SDIO card! ========\n"); #ifdef CONFIG_MACH_ODROID_4210 sdhci_s3c_force_presence_change(&sdmmc_channel, 0); mdelay(100); printk("======== PULL WL_REG_ON LOW! ========\n"); gpio_set_value(EXYNOS4_GPK1(0), 0); #endif } else { printk("======== PULL WL_REG_ON LOW! (flag = %d) ========\n", flag); #ifdef CONFIG_MACH_ODROID_4210 gpio_set_value(EXYNOS4_GPK1(0), 0); #endif } gpio_set_value(WL_REG_ON, 0); }
void bcm_wlan_power_on(int flag) { if (flag == 1) { printk("======== PULL WL_REG_ON HIGH! ========\n"); #ifdef CONFIG_MACH_ODROID_4210 gpio_set_value(EXYNOS4_GPK1(0), 1); /* Lets customer power to get stable */ mdelay(100); printk("======== Card detection to detect SDIO card! ========\n"); sdhci_s3c_force_presence_change(&sdmmc_channel, 1); #endif } else { printk("======== PULL WL_REG_ON HIGH! (flag = %d) ========\n", flag); #ifdef CONFIG_MACH_ODROID_4210 gpio_set_value(EXYNOS4_GPK1(0), 1); #endif } gpio_set_value(WL_REG_ON, 1); }
static int bluetooth_set_power(void *data, enum rfkill_user_states state) { int ret = 0; int irq; /* BT Host Wake IRQ */ irq = IRQ_WLAN_BT_HOST_WAKE; switch (state) { case RFKILL_USER_STATE_UNBLOCKED: printk("[BT] Device Powering ON \n");//pr_debug if (!loaded) break; /* Bluetooth over SDIO */ m8_bt_power(1, sdio); msleep(100); if (sdio && m8_checkse()) sdhci_s3c_force_presence_change(&s3c_device_hsmmc0); msleep(100); if (!sdio) s3c_setup_uart_cfg_gpio(1); #if 0 // uart not work now if (gpio_is_valid(GPIO_WLAN_BT_EN)) { printk("[BT] gpio_is_valid(GPIO_WLAN_BT_EN)\n"); gpio_direction_output(GPIO_WLAN_BT_EN, GPIO_LEVEL_HIGH); } if (gpio_is_valid(GPIO_BT_nRST)) { gpio_direction_output(GPIO_BT_nRST, GPIO_LEVEL_LOW); printk("[BT] gpio_is_valid(GPIO_BT_nRST)\n"); } printk("[BT] GPIO_BT_nRST = %d\n", gpio_get_value(GPIO_BT_nRST));//pr_debug /* Set GPIO_BT_WLAN_REG_ON high */ s3c_gpio_setpull(GPIO_WLAN_BT_EN, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_WLAN_BT_EN, GPIO_LEVEL_HIGH); s3c_gpio_slp_cfgpin(GPIO_WLAN_BT_EN, S3C_GPIO_SLP_OUT1); s3c_gpio_slp_setpull_updown(GPIO_WLAN_BT_EN, S3C_GPIO_PULL_NONE); printk("[BT] GPIO_WLAN_BT_EN = %d\n", gpio_get_value(GPIO_WLAN_BT_EN)); /* * FIXME sleep should be enabled disabled since the device is * not booting if its enabled */ /* * 100msec, delay between reg_on & rst. * (powerup sequence) */ msleep(500);//100); /* Set GPIO_BT_nRST high */ s3c_gpio_setpull(GPIO_BT_nRST, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_BT_nRST, GPIO_LEVEL_HIGH); s3c_gpio_slp_cfgpin(GPIO_BT_nRST, S3C_GPIO_SLP_OUT1); s3c_gpio_slp_setpull_updown(GPIO_BT_nRST, S3C_GPIO_PULL_NONE); printk("[BT] GPIO_BT_nRST = %d\n", gpio_get_value(GPIO_BT_nRST));//pr_debug /* * 50msec, delay after bt rst * (libertas powerup sequence) */ msleep(200);//50); //ret = enable_irq_wake(irq); //if (ret < 0) // pr_err("[BT] set wakeup src failed\n"); #endif enable_irq(irq); break; case RFKILL_USER_STATE_SOFT_BLOCKED: printk("[BT] Device Powering OFF\n"); if (!loaded) break; /* Bluetooth over SDIO */ m8_bt_power(0, sdio); msleep(100); if (sdio && m8_checkse()) sdhci_s3c_force_presence_change(&s3c_device_hsmmc0); //if (!sdio) // s3c_reset_uart_cfg_gpio(1); //ret = disable_irq_wake(irq); //if (ret < 0) // pr_err("[BT] unset wakeup src failed\n"); disable_irq(irq); wake_unlock(&rfkill_wake_lock); printk("[BT] wake_unlock rfkill_wake_lock\n"); #if 0 // UART s3c_gpio_setpull(GPIO_BT_nRST, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_BT_nRST, GPIO_LEVEL_LOW); s3c_gpio_slp_cfgpin(GPIO_BT_nRST, S3C_GPIO_SLP_OUT0); s3c_gpio_slp_setpull_updown(GPIO_BT_nRST, S3C_GPIO_PULL_NONE); printk("[BT] GPIO_BT_nRST = %d\n", gpio_get_value(GPIO_BT_nRST));//pr_debug if (gpio_get_value(GPIO_BT_nRST) == 0) { //GPIO_WLAN_nRST s3c_gpio_setpull(GPIO_WLAN_BT_EN, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_WLAN_BT_EN, GPIO_LEVEL_LOW); s3c_gpio_slp_cfgpin(GPIO_WLAN_BT_EN, S3C_GPIO_SLP_OUT0); s3c_gpio_slp_setpull_updown(GPIO_WLAN_BT_EN, S3C_GPIO_PULL_NONE); printk("[BT] GPIO_WLAN_BT_EN = %d\n", gpio_get_value(GPIO_WLAN_BT_EN)); } #endif break; default: printk(KERN_ERR "[BT] Bad bluetooth rfkill state %d\n", state);//pr_err } return 0; }
static void wimax_hsmmc_presence_check(void) { sdhci_s3c_force_presence_change(&s3c_device_hsmmc3); }