void __sramfunc board_pmu_suspend(void)
{	
	int ret;
	ret = gpio_readl(GPIO_SWPORTA_DDR);
	gpio_writel(ret | GPIO3_D2_OUTPUT, GPIO_SWPORTA_DDR);
	ret = gpio_readl(GPIO_SWPORTA_DR);
	gpio_writel(ret | GPIO3_D2_OUTPUT_HIGH, GPIO_SWPORTA_DR);  //set pmu_sleep output high
}
void __sramfunc board_pmu_resume(void)
{
	int ret;
	ret = gpio_readl(GPIO_SWPORTA_DDR);
	gpio_writel(ret | GPIO3_D2_OUTPUT, GPIO_SWPORTA_DDR);
	ret = gpio_readl(GPIO_SWPORTA_DR);
	gpio_writel(ret & GPIO3_D2_OUTPUT_LOW, GPIO_SWPORTA_DR);   //set pmu_sleep output low
	sram_udelay(2000);
}
Ejemplo n.º 3
0
int gpio_irq_request(unsigned gpio, int type)
{
    int reg_addr = gpio&0xffff0000;
    int index = gpio&0xffff;
    if(reg_addr==0)
    {
        gpio_err("no gpio group 0x%x\n",gpio);
        return -1;
    }
    //gpio_err("%s,reg_addr=0x%x,index=%d,type=%d,addr = %x\n",__func__,reg_addr,index,type,reg_addr+RK_GPIO_DEBOUNCE_REG);
    gpio_writel(gpio_readl(reg_addr+RK_GPIO_DIR_REG)&(~(1ul<<index)), reg_addr+RK_GPIO_DIR_REG);   //input
	gpio_writel(gpio_readl(reg_addr+RK_GPIO_INT_MASK)&(~(1ul<<index)), reg_addr+RK_GPIO_INT_MASK); //int mask
    gpio_writel(gpio_readl(reg_addr+RK_GPIO_DEBOUNCE_REG)|(1ul<<index), reg_addr+RK_GPIO_DEBOUNCE_REG);  //debounce
 
    if((type & IRQ_TYPE_EDGE_RISING) || (type&IRQ_TYPE_EDGE_FALLING))
        gpio_writel(gpio_readl(reg_addr+RK_GPIO_INT_LEVEL)|(1ul<<index), reg_addr+RK_GPIO_INT_LEVEL);   //use edge sensitive
    else if((type & IRQ_TYPE_LEVEL_HIGH) || (type&IRQ_TYPE_LEVEL_LOW))
        gpio_writel(gpio_readl(reg_addr+RK_GPIO_INT_LEVEL)&(~(1ul<<index)), reg_addr+RK_GPIO_INT_LEVEL); //use level 

    if((type & IRQ_TYPE_EDGE_RISING) || (type&IRQ_TYPE_LEVEL_HIGH))
        gpio_writel(gpio_readl(reg_addr+RK_GPIO_INT_POLARITY)|(1ul<<index), reg_addr+RK_GPIO_INT_POLARITY);		
	else if((type & IRQ_TYPE_EDGE_FALLING) || (type&IRQ_TYPE_LEVEL_LOW))
		gpio_writel(gpio_readl(reg_addr+RK_GPIO_INT_POLARITY)&(~(1ul<<index)), reg_addr+RK_GPIO_INT_POLARITY);

    if(type)
	    gpio_writel(gpio_readl(reg_addr+RK_GPIO_INT_EN)|(1ul<<index), reg_addr+RK_GPIO_INT_EN);          //enable int
    else gpio_writel(gpio_readl(reg_addr+RK_GPIO_INT_EN)&(~(1ul<<index)), reg_addr+RK_GPIO_INT_EN);
    return 0;
}
Ejemplo n.º 4
0
int gpio_set_value(unsigned gpio, int value)
{
	int reg_addr = gpio&0xffff0000;
    int index = gpio&0xffff;
    if(reg_addr==0)
    {
        gpio_err("no gpio group \n");
        return -1;
    }
    if(value)gpio_writel(gpio_readl(reg_addr+RK_GPIO_WRITE_REG)|(1ul<<index), reg_addr+RK_GPIO_WRITE_REG);
    else gpio_writel(gpio_readl(reg_addr+RK_GPIO_WRITE_REG)&(~(1ul<<index)), reg_addr+RK_GPIO_WRITE_REG);
    return 0;
}
Ejemplo n.º 5
0
int gpio_direction_output(unsigned gpio, int value)
{
    int reg_addr = gpio&0xffff0000;
    int index = gpio&0xffff;
    if(reg_addr==0)
    {
        gpio_err("no gpio group 0x%x\n",gpio);
        return -1;
    }
    gpio_writel(gpio_readl(reg_addr+RK_GPIO_DIR_REG)|(1ul<<index), reg_addr+RK_GPIO_DIR_REG);
	return gpio_set_value(gpio, value);
}
Ejemplo n.º 6
0
int gpio_irq_clr(unsigned gpio)
{
    int reg_addr = gpio&0xffff0000;
    int index = gpio&0xffff;
    if(reg_addr==0)
    {
        gpio_err("no gpio group \n");
        return -1;
    }
    gpio_writel(gpio_readl(reg_addr+RK_GPIO_INT_EOI)|(1ul<<index), reg_addr+RK_GPIO_INT_EOI);

    return 0;
}
Ejemplo n.º 7
0
int gpio_direction_input(unsigned gpio)
{
	int reg_addr = gpio&0xffff0000;
    int index = gpio&0xffff;
    if(reg_addr==0)
    {
        gpio_err("no gpio group 0x%x\n",gpio);
        return -1;
    }
    gpio_writel(gpio_readl(reg_addr+RK_GPIO_DIR_REG)&(~(1ul<<index)), reg_addr+RK_GPIO_DIR_REG);
   // gpio_writel(reg_addr+RK_GPIO_DEBOUNCE_REG,  gpio_readl(reg_addr+RK_GPIO_DEBOUNCE_REG)|(1ul<<index));
    return 0;
}