コード例 #1
0
/* Get gpio pin value */
static int sunxi_gpio_get(struct gpio_chip *chip, unsigned gpio)
{
	int ret;
	unsigned long flags;
	struct sunxi_gpio_chip *sgpio = to_sunxi_gpio(chip);

	/* Some pins can be used as interrupt source. This  */
	/* works only for EINT pin mode. But you can't read */
	/* pin value in this mode. So we should check mode  */
	/* here and then switch_input/read/switch_eint      */
	if (sgpio->data[gpio].info.mul_sel == sgpio->data[gpio].eint_mux) {

		spin_lock_irqsave(&sgpio->irq_lock, flags);
		SUNXI_SET_GPIO_MODE(sgpio->gaddr, sgpio->data[gpio].info.port,
				    sgpio->data[gpio].info.port_num,
				    SUNXI_GPIO_INPUT);
		ret = gpio_read_one_pin_value(sgpio->data[gpio].gpio_handler,
						sgpio->data[gpio].pin_name);
		SUNXI_SET_GPIO_MODE(sgpio->gaddr, sgpio->data[gpio].info.port,
				    sgpio->data[gpio].info.port_num,
				    sgpio->data[gpio].eint_mux);
		spin_unlock_irqrestore(&sgpio->irq_lock, flags);
	} else {
		/* "normal" pin read */
		ret = gpio_read_one_pin_value(sgpio->data[gpio].gpio_handler,
						sgpio->data[gpio].pin_name);
	}

	return ret;
}
コード例 #2
0
static void sunximmc_cd_timer(unsigned long data)
{
    struct sunxi_mmc_host *smc_host = (struct sunxi_mmc_host *)data;
    u32 gpio_val;
    u32 present;

    gpio_val = gpio_read_one_pin_value(smc_host->pio_hdle, "sdc_det");
    gpio_val += gpio_read_one_pin_value(smc_host->pio_hdle, "sdc_det");
    gpio_val += gpio_read_one_pin_value(smc_host->pio_hdle, "sdc_det");
    gpio_val += gpio_read_one_pin_value(smc_host->pio_hdle, "sdc_det");
    gpio_val += gpio_read_one_pin_value(smc_host->pio_hdle, "sdc_det");
    if (gpio_val==5)
        present = 0;
    else if (gpio_val==0)
        present = 1;
    else
        goto modtimer;
//    SMC_DBG("cd %d, host present %d, cur present %d\n", gpio_val, smc_host->present, present);

    if (smc_host->present ^ present) {
        SMC_MSG("mmc %d detect change, present %d\n", smc_host->pdev->id, present);
        smc_host->present = present;
        if (smc_host->present)
            mmc_detect_change(smc_host->mmc, msecs_to_jiffies(300));
        else
            mmc_detect_change(smc_host->mmc, msecs_to_jiffies(10));
    } else {
//        SMC_DBG("card detect no change\n");
    }

modtimer:
    mod_timer(&smc_host->cd_timer, jiffies + 30);
    return;
}
コード例 #3
0
static int ap6210_gpio_read(char* name)
{
	int i = 0;	
	int gpio = 0;
	int val = 0;
	char * gpio_name[2] = {"ap6210_wl_regon", "ap6210_bt_regon"};

	for (i = 0; i < 2; i++) {
		if (strcmp(name, gpio_name[i]) == 0) {
			switch (i)
			{
			case 0: /*ap6210_wl_regon*/
				gpio = ap6210_wl_regon;
				break;
			case 1: /*ap6210_bt_regon*/
				gpio = ap6210_bt_regon;
				break;
			default:
				AP6210_ERR("no matched gpio.\n" );
			}
			break;
		}
	}

	val = gpio_read_one_pin_value(gpio, name);
	
	return val;
}
コード例 #4
0
/*
************************************************************************************************************
*
*                                             function
*
*    name          :	一键恢复的按键检测
*
*    parmeters     :
*
*    return        :
*
*    note          :	[email protected]
*
*
************************************************************************************************************
*/
int check_boot_recovery_key(void)
{
	user_gpio_set_t     gpio_recovery;
	__u32			    gpio_hd;
	int					gpio_value = 0;
	int ret;

	ret = script_parser_fetch("system", "recovery_key", (int *)&gpio_recovery, sizeof(user_gpio_set_t)/4);
        if (!ret)
	{
		gpio_recovery.mul_sel = 0;		//强制设置成输入
		gpio_hd = gpio_request(&gpio_recovery, 1);
		if (gpio_hd)
		{
			int k;
			gpio_value = 0;
			for(k=0;k<4;k++)
			{
				gpio_value += gpio_read_one_pin_value(gpio_hd, 0);
				__msdelay(5);
			}
			if (!gpio_value)
			{
				printf("set to recovery\n");
				return 0;
			}
		}
	}
	return 1;
}
コード例 #5
0
int check_physical_key_early(void)
{
	user_gpio_set_t	gpio_recovery;
	__u32 gpio_hd;
	int ret;
	int gpio_value = 0;
	int used = 0;
	int mode = 0;

	if(uboot_spare_head.boot_data.work_mode != WORK_MODE_BOOT)
	{
		return 0;
	}

	ret = script_parser_fetch("recovery_para", "used", (int *)&used, sizeof(int) / 4);
	if (ret || !used)
	{
		printf("[recovery] no use\n");
		return 0;
	}
	ret = script_parser_fetch("recovery_para", "recovery_key", (int *)&gpio_recovery, sizeof(user_gpio_set_t) / 4);
  if (!ret)
	{
		gpio_recovery.mul_sel = 0;		//强制设置成输入
		gpio_hd = gpio_request(&gpio_recovery, 1);
		if (gpio_hd)
		{
			int time;
			gpio_value = 0;
			for(time = 0; time < 4; time++)
			{
				gpio_value += gpio_read_one_pin_value(gpio_hd, 0);
				__msdelay(5);
			}
			if (!gpio_value)
			{
				printf("[box recovery] find the key\n");
				script_parser_fetch("recovery_para", "mode", (int *)&mode, sizeof(int) / 4);
				if (mode == ONEKEY_USB_RECOVERY_MODE)
				{
					gd->key_pressd_value = USB_RECOVERY_KEY_VALUE;
				}
				else if (mode == ONEKEY_SPRITE_RECOVERY_MODE)
				{
					gd->key_pressd_value = SPRITE_RECOVERY_KEY_VALUE;
					uboot_spare_head.boot_data.work_mode = WORK_MODE_SPRITE_RECOVERY;
				}
				else
				{
					printf("[recovery] no option for one key recovery's mode (%d)\n", mode);
				}
			}
		}
	}
	return 0;
}
コード例 #6
0
ファイル: board_common.c プロジェクト: mfkiwl/a33_bootloader
int check_boot_recovery_key(void)
{
	user_gpio_set_t	gpio_recovery;
	__u32 gpio_hd;
	int ret;
	int gpio_value = 0;
	int used = 0;
	int mode = 0;

	if(uboot_spare_head.boot_data.work_mode != WORK_MODE_BOOT)
	{
		return 0;
	}
	
	ret = script_parser_fetch("recovery_para", "used", (int *)&used, sizeof(int) / 4);
	if (ret || !used)
	{
		printf("[recovery] no use\n");
		return 0;
	}
	ret = script_parser_fetch("recovery_para", "recovery_key", (int *)&gpio_recovery, sizeof(user_gpio_set_t) / 4);
  if (!ret)
	{
		gpio_recovery.mul_sel = 0;		//强制设置成输入
		gpio_hd = gpio_request(&gpio_recovery, 1);
		if (gpio_hd)
		{
			int time;
			gpio_value = 0;
			for(time = 0; time < 4; time++)
			{
				gpio_value += gpio_read_one_pin_value(gpio_hd, 0);
				__msdelay(5);
			}
			if (!gpio_value)
			{
				script_parser_fetch("recovery_para", "mode", (int *)&mode, sizeof(int) / 4);
				if (mode == ONEKEY_USB_RECOVERY)
				{
					printf("set to one key usb recovery\n");
					write_usb_recovery_to_misc();
				}
				else if (mode == ONEKEY_SPRITE_RECOVERY)
				{
					printf("set to one key sprite recovery\n");
					setenv("bootcmd", "sprite_recovery");
				}
				else
				{
					printf("[recovery] no option for one key recovery's mode\n");
				}
			}
		}
	}
	return 0;
}
コード例 #7
0
static int hwmw269_get_gpio_value(char* name)
{
    struct mmc_pm_ops *ops = &mmc_card_pm_ops;
    
    if (strcmp(name, "hw_mw269x_wl_hostwake") || strcmp(name, "hw_mw269x_bt_hostwake")) {
        hw_msg("No gpio %s for %s\n", name, SDIO_MODULE_NAME);
        return -1;
    }
    
    return gpio_read_one_pin_value(ops->pio_hdle, name);
}
コード例 #8
0
static int nano_get_io_value(char* name)
{
    struct mmc_pm_ops *ops = &mmc_card_pm_ops;
    char* hostwake = "swl_n20_host_wakeup";
    
    if (strcmp(name, hostwake)) {
        nano_msg("No gpio %s for swl-n20\n", name);
        return -1;
    }
    
    return gpio_read_one_pin_value(ops->pio_hdle, name);
}
コード例 #9
0
static int usi_bm01a_get_gpio_value(char* name)
{
    struct mmc_pm_ops *ops = &mmc_card_pm_ops;
    char* bt_hostwake =  "usi_bm01a_bt_hostwake";
    
    if (strcmp(name, bt_hostwake)) {
        usi_msg("No gpio %s for USI-BM01A\n", name);
        return -1;
    }
    
    return gpio_read_one_pin_value(ops->pio_hdle, name);
}
コード例 #10
0
static int bcm40181_get_io_value(char* name)
{
	int ret = -1;
	struct mmc_pm_ops *ops = &mmc_card_pm_ops;
	
    if (strcmp(name, "bcm40181_wakeup")) {
        bcm40181_msg("No gpio %s for BCM40181\n", name);
        return -1;
    }
	ret = gpio_read_one_pin_value(ops->pio_hdle, name);
	bcm40181_msg("Succeed to get gpio %s value: %d !\n", name, ret);

	return ret;
}
コード例 #11
0
static s32 sunximmc_get_ro(struct mmc_host *mmc)
{
    struct sunxi_mmc_host *smc_host = mmc_priv(mmc);
    char mmc_para[16] = {0};
    int card_wp = 0;
    int ret;
    u32 gpio_val;

    sprintf(mmc_para, "mmc%d_para", smc_host->pdev->id);
    ret = script_parser_fetch(mmc_para, "sdc_use_wp", &card_wp, sizeof(int));
    if (ret)
    {
    	SMC_ERR("sdc fetch card write protect mode failed\n");
    }
    if (card_wp)
    {
        gpio_val = gpio_read_one_pin_value(smc_host->pio_hdle, "sdc_wp");
        SMC_DBG("sdc fetch card write protect pin status val = %d \n", gpio_val);
        if (!gpio_val)
        {
            smc_host->read_only = 0;
            return 0;
        }
        else
        {
            SMC_MSG("Card is write-protected\n");
            smc_host->read_only = 1;
            return 1;
        }
    }
    else
    {
        smc_host->read_only = 0;
        return 0;
    }
}