Beispiel #1
0
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

}
Beispiel #2
0
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;
}
Beispiel #4
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;
}
Beispiel #5
0
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);
}
Beispiel #6
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);
}
Beispiel #7
0
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;
}
Beispiel #8
0
static void wimax_hsmmc_presence_check(void)
{
	sdhci_s3c_force_presence_change(&s3c_device_hsmmc3);
}