Exemple #1
0
static void uart_init(size_t baud_rate)
{
  GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK;
  GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK;
  UART0_REG(UART_REG_DIV) = get_cpu_freq() / baud_rate - 1;
  UART0_REG(UART_REG_TXCTRL) |= UART_TXEN;
}
Exemple #2
0
static inline gpioregs *tcc892x_gpio_to_reg(unsigned gpio_port)
{
	switch(gpio_port)
	{
		case GPIO_PORTA:
			return (gpioregs *) GPIO_REG(HwGPIOA_BASE);
		case GPIO_PORTB:
			return (gpioregs *) GPIO_REG(HwGPIOB_BASE);
		case GPIO_PORTC:
			return (gpioregs *) GPIO_REG(HwGPIOC_BASE);
		case GPIO_PORTD:
			return (gpioregs *) GPIO_REG(HwGPIOD_BASE);
		case GPIO_PORTE:
			return (gpioregs *) GPIO_REG(HwGPIOE_BASE);
		case GPIO_PORTF:
			return (gpioregs *) GPIO_REG(HwGPIOF_BASE);
		case GPIO_PORTG:
			return (gpioregs *) GPIO_REG(HwGPIOG_BASE);
		case GPIO_PORTHDMI:
			return (gpioregs *) GPIO_REG(HwGPIOHDMI_BASE);
		case GPIO_PORTADC:
			return (gpioregs *) GPIO_REG(HwGPIOADC_BASE);
		default:
			break;
	}
	return NULL;
}
Exemple #3
0
int gpio_amlogic_direction_output(struct gpio_chip *chip,unsigned offset, int value)
{
	unsigned int reg,bit;
	if(offset==GPIO_BSD_EN){
		aml_clr_reg32_mask(P_PREG_PAD_GPIO0_O,1<<29);
#ifndef CONFIG_MESON_TRUSTZONE
		aml_set_reg32_mask(P_AO_SECURE_REG0,1<<0);
#else
		meson_secure_reg_write(P_AO_SECURE_REG0, meson_secure_reg_read(P_AO_SECURE_REG0) | (1<<0));
#endif
		if(value)
			aml_set_reg32_mask(P_PREG_PAD_GPIO0_O,1<<31);//out put high
		else
			aml_clr_reg32_mask(P_PREG_PAD_GPIO0_O,1<<31);//out put low
		aml_clr_reg32_mask(P_PREG_PAD_GPIO0_O,1<<30);//out put enable
		return 0;
	}
	if(offset==GPIO_TEST_N){
		if(value)
			aml_set_reg32_mask(P_AO_GPIO_O_EN_N,1<<31);//out put high
		else
			aml_clr_reg32_mask(P_AO_GPIO_O_EN_N,1<<31);//out put low
#ifndef CONFIG_MESON_TRUSTZONE
		aml_set_reg32_mask(P_AO_SECURE_REG0,1);// out put enable
#else
		meson_secure_reg_write(P_AO_SECURE_REG0, meson_secure_reg_read(P_AO_SECURE_REG0) | (1<<0));
#endif
		return 0;
	}
	if(value){
		reg=GPIO_REG(amlogic_pins[offset].out_value_reg_bit);
		bit=GPIO_BIT(amlogic_pins[offset].out_value_reg_bit);
		aml_set_reg32_mask(p_gpio_output_addr[reg],1<<bit);
		gpio_print("out reg=%x,value=%x\n",p_gpio_output_addr[reg],aml_read_reg32(p_gpio_output_addr[reg]));
	}
	else{
		reg=GPIO_REG(amlogic_pins[offset].out_value_reg_bit);
		bit=GPIO_BIT(amlogic_pins[offset].out_value_reg_bit);
		aml_clr_reg32_mask(p_gpio_output_addr[reg],1<<bit);
		gpio_print("out reg=%x,value=%x\n",p_gpio_output_addr[reg],aml_read_reg32(p_gpio_output_addr[reg]));
	}
	reg=GPIO_REG(amlogic_pins[offset].out_en_reg_bit);
	bit=GPIO_BIT(amlogic_pins[offset].out_en_reg_bit);
	aml_clr_reg32_mask(p_gpio_oen_addr[reg],1<<bit);
	gpio_print("==%s==%d\n",__FUNCTION__,__LINE__);
	gpio_print("oen reg=%x,value=%x\n",p_gpio_oen_addr[reg],aml_read_reg32(p_gpio_oen_addr[reg]));
	gpio_print("value=%d\n",value);
	return 0;
}
Exemple #4
0
static int clocksource_init (void)
{
	/* disable timer initially */
	GPIO_REG(GPIO_COUNTER_CTRL(0)) = 0;
	/* Reset the timer value to zero */
	GPIO_REG(GPIO_COUNTER_CURRENT(0)) = 0;
	GPIO_REG(GPIO_COUNTER_MAX(0)) = 0xffffffff;
	GPIO_REG(GPIO_COUNTER_CTRL(0)) = COUNTER_CTRL_RUN;

	cs.mult = clocksource_hz2mult(100 * 1000 * 1000, cs.shift);

	init_clock(&cs);

	return 0;
}
Exemple #5
0
int gpio_amlogic_get(struct gpio_chip *chip,unsigned offset)
{
	unsigned int reg,bit;
	gpio_print("==%s==%d\n",__FUNCTION__,__LINE__);
	reg=GPIO_REG(amlogic_pins[offset].input_value_reg_bit);
	bit=GPIO_BIT(amlogic_pins[offset].input_value_reg_bit);
	return aml_get_reg32_bits(p_gpio_input_addr[reg],bit,1);
}
Exemple #6
0
int gpio_amlogic_direction_input(struct gpio_chip *chip,unsigned offset)
{
	unsigned int reg,bit;
	gpio_print("==%s==%d\n",__FUNCTION__,__LINE__);
	reg=GPIO_REG(amlogic_pins[offset].out_en_reg_bit);
	bit=GPIO_BIT(amlogic_pins[offset].out_en_reg_bit);
	aml_set_reg32_mask(p_gpio_oen_addr[reg],1<<bit);
	return 0;
}
Exemple #7
0
void	gpio_amlogic_set(struct gpio_chip *chip,unsigned offset, int value)
{
	unsigned int reg,bit;
	reg=GPIO_REG(amlogic_pins[offset].out_value_reg_bit);
	bit=GPIO_BIT(amlogic_pins[offset].out_value_reg_bit);
	gpio_print("==%s==%d\n",__FUNCTION__,__LINE__);
	if(value)
		aml_set_reg32_mask(p_gpio_output_addr[reg],1<<bit);
	else
		aml_clr_reg32_mask(p_gpio_output_addr[reg],1<<bit);
}
Exemple #8
0
int gpio_amlogic_requst(struct gpio_chip *chip,unsigned offset)
{
	int ret;
	unsigned int i,reg,bit;
	unsigned int *gpio_reg=&gpio_to_pin[offset][0];
	ret=pinctrl_request_gpio(offset);
	gpio_print("==%s==%d\n",__FUNCTION__,__LINE__);
	if(!ret){
		for(i=0;i<sizeof(gpio_to_pin[offset])/sizeof(gpio_to_pin[offset][0]);i++){
			if(gpio_reg[i]!=NONE)
			{
				reg=GPIO_REG(gpio_reg[i]);
				bit=GPIO_BIT(gpio_reg[i]);
				aml_clr_reg32_mask(p_pin_mux_reg_addr[reg],1<<bit);
				gpio_print("clr reg=%d,bit =%d\n",reg,bit);
			}
		}
	}
	return ret;
}
Exemple #9
0
int tcc_gpio_config_ext_intr(unsigned intr, unsigned source) /* intr: irq num, source: external interrupt source */
{
	int extint;
    GPIO *reg = (GPIO *) GPIO_REG(HwGPIO_BASE);

	switch (intr) {
		case INT_EI0:  extint = EXINT_EI0;  break;
		case INT_EI1:  extint = EXINT_EI1;  break;
		case INT_EI2:  extint = EXINT_EI2;  break;
		case INT_EI3:  extint = EXINT_EI3;  break;
		case INT_EI4:  extint = EXINT_EI4;  break;
		case INT_EI5:  extint = EXINT_EI5;  break;
		case INT_EI6:  extint = EXINT_EI6;  break;
		case INT_EI7:  extint = EXINT_EI7;  break;
		case INT_EI8:  extint = EXINT_EI8;  break;
		case INT_EI9:  extint = EXINT_EI9;  break;
		case INT_EI10: extint = EXINT_EI10; break;
		case INT_EI11: extint = EXINT_EI11; break;
		default:
			extint = -1;
			break;
	}

	if (extint < 0)
		return -1;

    if(extint < 4) {
        RMWREG32(&reg->EINTSEL0.nREG, extint*8, 7, source);
    }
    else if(extint < 8) {
        RMWREG32(&reg->EINTSEL1.nREG, (extint-4)*8, 7, source);
    }
    else if(extint < 12) {
        RMWREG32(&reg->EINTSEL2.nREG, (extint-8)*8, 7, source);
    }

	return 0;
}
Exemple #10
0
uint64_t netx_clocksource_read(void)
{
	return GPIO_REG(GPIO_COUNTER_CURRENT(0));
}
Exemple #11
0
//#define gpio_dump
//#define pull_dump
//#define dire_dump
static int amlogic_gpio_probe(struct platform_device *pdev)
{
#ifdef CONFIG_OF_GPIO
		amlogic_gpio_chip.of_node = pdev->dev.of_node;
#endif

	amlogic_gpio_chip.base=0;
	amlogic_gpio_chip.ngpio=ARRAY_SIZE(amlogic_pins);
	gpiochip_add(&amlogic_gpio_chip);
	pullup_ops.meson_set_pullup=m8b_set_pullup;
	dev_info(&pdev->dev, "Probed amlogic GPIO driver\n");
#ifdef gpio_dump
	int gi;
	for(gi=0;gi<GPIO_MAX;gi++)
		printk("%s,amlogic_pins[%d]=%d,%d,out en reg=%x,bit=%d,out val reg=%x,bit=%d,input reg=%x,bit=%d\n",
		amlogic_pins[gi].name,gi,amlogic_pins[gi].num,
		gpio_amlogic_name_to_num(amlogic_pins[gi].name),
		(p_gpio_oen_addr[GPIO_REG(amlogic_pins[gi].out_en_reg_bit)]&0xffff)>>2,
		GPIO_BIT(amlogic_pins[gi].out_en_reg_bit),
		(p_gpio_output_addr[GPIO_REG(amlogic_pins[gi].out_value_reg_bit)]&0xffff)>>2,
		GPIO_BIT(amlogic_pins[gi].out_value_reg_bit),
		(p_gpio_input_addr[GPIO_REG(amlogic_pins[gi].input_value_reg_bit)]&0xffff)>>2,
		GPIO_BIT(amlogic_pins[gi].input_value_reg_bit)
	);
#endif
#ifdef irq_dump

	for(i=GPIO_IRQ0;i<GPIO_IRQ7+1;i++){
		gpio_flag=AML_GPIO_IRQ(i,FILTER_NUM7,GPIO_IRQ_HIGH);
		gpio_amlogic_to_irq(NULL,50);
	}
	for(i=GPIO_IRQ_HIGH;i<GPIO_IRQ_FALLING+1;i++){
		gpio_flag=AML_GPIO_IRQ(GPIO_IRQ0,FILTER_NUM7,i);
		gpio_amlogic_to_irq(NULL,50);
	}

#endif
#ifdef pull_dump

	int preg,pbit,penbit,pi;
	for(pi=0;pi<GPIO_TEST_N;pi++){
		m8b_pin_to_pullup(pi,&preg,&pbit,&penbit);
		printk("%s \t,pull up en reg:%x \t,enbit:%d \t,==,pull up reg:%x \t,bit:%d \t\n",
			amlogic_pins[pi].name,
			(p_pull_upen_addr[preg]&0xffff)>>2,
			penbit,
			(p_pull_up_addr[preg]&0xffff)>>2,
			pbit);
	}
#endif
#ifdef dire_dump
extern int m8b_pin_map_to_direction(unsigned int pin,unsigned int *reg,unsigned int *bit);
	int dreg,dbit,di;
	for(di=0;di<GPIO_TEST_N;di++){
		m8b_pin_map_to_direction(di,&dreg,&dbit);
		printk("%s \t,output en reg:%x \t,enbit:%d \t\n",
			amlogic_pins[di].name,
			(p_gpio_oen_addr[dreg]&0xffff)>>2,
			dbit);
	}
#endif
	return 0;
}