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);
}
Esempio 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;
}
Esempio 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;
}
Esempio 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);
}
Esempio 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;
}
Esempio 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;
}
Esempio n. 8
0
void portmux_select_gpio(void *port, unsigned long pin_mask,
		unsigned long flags)
{
	/* Both pull-up and pull-down set means buskeeper */
	if (flags & PORTMUX_PULL_DOWN)
		gpio_writel(port, PDERS, pin_mask);
	else
		gpio_writel(port, PDERC, pin_mask);
	if (flags & PORTMUX_PULL_UP)
		gpio_writel(port, PUERS, pin_mask);
	else
		gpio_writel(port, PUERC, pin_mask);

	/* Enable open-drain mode if requested */
	if (flags & PORTMUX_OPEN_DRAIN)
		gpio_writel(port, ODMERS, pin_mask);
	else
		gpio_writel(port, ODMERC, pin_mask);

	/* Select drive strength */
	if (flags & PORTMUX_DRIVE_LOW)
		gpio_writel(port, ODCR0S, pin_mask);
	else
		gpio_writel(port, ODCR0C, pin_mask);
	if (flags & PORTMUX_DRIVE_HIGH)
		gpio_writel(port, ODCR1S, pin_mask);
	else
		gpio_writel(port, ODCR1C, pin_mask);

	/* Select direction and initial pin state */
	if (flags & PORTMUX_DIR_OUTPUT) {
		if (flags & PORTMUX_INIT_HIGH)
			gpio_writel(port, OVRS, pin_mask);
		else
			gpio_writel(port, OVRC, pin_mask);
		gpio_writel(port, ODERS, pin_mask);
	} else {
		gpio_writel(port, ODERC, pin_mask);
	}

	/* Enable GPIO */
	gpio_writel(port, GPERS, pin_mask);
}
Esempio n. 9
0
void portmux_select_peripheral(void *port, unsigned long pin_mask,
		enum portmux_function func, unsigned long flags)
{
	/* Both pull-up and pull-down set means buskeeper */
	if (flags & PORTMUX_PULL_DOWN)
		gpio_writel(port, PDERS, pin_mask);
	else
		gpio_writel(port, PDERC, pin_mask);
	if (flags & PORTMUX_PULL_UP)
		gpio_writel(port, PUERS, pin_mask);
	else
		gpio_writel(port, PUERC, pin_mask);

	/* Select drive strength */
	if (flags & PORTMUX_DRIVE_LOW)
		gpio_writel(port, ODCR0S, pin_mask);
	else
		gpio_writel(port, ODCR0C, pin_mask);
	if (flags & PORTMUX_DRIVE_HIGH)
		gpio_writel(port, ODCR1S, pin_mask);
	else
		gpio_writel(port, ODCR1C, pin_mask);

	/* Select function */
	if (func & PORTMUX_FUNC_B)
		gpio_writel(port, PMR0S, pin_mask);
	else
		gpio_writel(port, PMR0C, pin_mask);
	if (func & PORTMUX_FUNC_C)
		gpio_writel(port, PMR1S, pin_mask);
	else
		gpio_writel(port, PMR1C, pin_mask);

	/* Disable GPIO (i.e. enable peripheral) */
	gpio_writel(port, GPERC, pin_mask);
}
Esempio n. 10
0
void gpio_direction_output(int gpio, int value)
{
	gpio_writel(gpio, 1 << G(gpio), DMW96_GPIO_DIR_OUT);
	gpio_set_value(gpio, value);
}
Esempio n. 11
0
void gpio_set_value(int gpio, int value)
{
	int reg = value ? DMW96_GPIO_DATA_SET : DMW96_GPIO_DATA_CLR;

	gpio_writel(gpio, 1 << G(gpio), reg);
}
Esempio n. 12
0
void gpio_disable(int gpio)
{
	gpio_writel(gpio, 1 << G(gpio), DMW96_GPIO_EN_CLR);
}
Esempio n. 13
0
void gpio_enable(int gpio)
{
	gpio_writel(gpio, 1 << G(gpio), DMW96_GPIO_EN_SET);
}