Example #1
0
void set_gpio_oe(int gpio, int value) {

	int bank=0,offset=0;
    	u32 tmp=0;
    	gpio_t *gpio_base;

    	if ( gpio > 191 || gpio < 0) return;

    	bank = gpio/32 + 1;
    	offset=gpio%32;
    	gpio_base = get_gpio_base(bank);

    	/** see TRM p3615, set bit to enable input **/

    	// printf("try to set gpio %d to input\n", gpio);
    	tmp=__raw_readl((u32)&gpio_base->oe);

    	// printf("oe read: %04x\n", tmp);
	if (value) {
		tmp = tmp | (1<<offset);	/** set bit **/
	}
	else {
		tmp = tmp & (~(1 << offset)); /** clear bit **/
	}

    	__raw_writel(tmp,(u32)&gpio_base->oe);
    	// tmp=__raw_readl((u32)&gpio_base->oe);
    	// printf("oe read back: %04x\n", tmp);	
}
Example #2
0
int get_gpio_datain(int gpio) {

    int bank=0,offset=0;
    u32 tmp=0;
    gpio_t* gpio_base;

    if (gpio > 191 || gpio < 0) return -1;

    bank = gpio/32 + 1;
    offset = gpio%32;
    gpio_base = get_gpio_base(bank);

    /** check if the gpio is in input mode **/
    tmp=__raw_readl((u32)&gpio_base->oe);

    /** test code for output **/
    // printf("get_gpio_datain, gpio: %d, bank: %d, offset: %d, oe: 0x%04x\n", gpio, bank, offset, tmp);
    if ((tmp & ( 1 << offset) ) == 0) /* oe bit not set */
    {
    	return -2;
    }

    /** read standard datain register **/
    tmp=__raw_readl((u32)&gpio_base->datain);
    return (tmp & ( 1 << offset)) ? 1 : 0;	
}
Example #3
0
int cmd_gpio_high(int argc, char *argv[])
{
	unsigned long gpio;
	
	if(argc > 2)
		printf("sorry, too many parameters!");
	
	if(!gpio_base_inited)	
		get_gpio_base();

	get_rsa(&gpio, argv[1]);

	printf("gpio is %d\n", gpio);
	if(gpio >= 16) {	
		gpio = gpio - 16;

		GPIO_HI_BIT(gpio, GPIO_BASE_ADDR | GPIOH_OUT_VAL);
		GPIO_HI_BIT(gpio, GPIO_BASE_ADDR | GPIOH_OUT_EN);
		GPIO_LO_BIT(gpio, GPIO_BASE_ADDR | GPIOH_IN_EN);
		GPIO_LO_BIT(gpio, GPIO_BASE_ADDR | GPIOH_OUT_AUX1_SEL);
		GPIO_LO_BIT(gpio, GPIO_BASE_ADDR | GPIOH_OUT_AUX2_SEL);
		GPIO_LO_BIT(gpio, GPIO_BASE_ADDR | GPIOH_IN_AUX1_SEL);
		GPIO_HI_BIT(gpio, GPIO_BASE_ADDR | GPIOH_PU_EN);
	} else {
		GPIO_HI_BIT(gpio, GPIO_BASE_ADDR | GPIOL_OUT_VAL);
		GPIO_HI_BIT(gpio, GPIO_BASE_ADDR | GPIOL_OUT_EN);
		GPIO_LO_BIT(gpio, GPIO_BASE_ADDR | GPIOL_IN_EN);
		GPIO_LO_BIT(gpio, GPIO_BASE_ADDR | GPIOL_OUT_AUX1_SEL);
		GPIO_LO_BIT(gpio, GPIO_BASE_ADDR | GPIOL_OUT_AUX2_SEL);
		GPIO_LO_BIT(gpio, GPIO_BASE_ADDR | GPIOL_IN_AUX1_SEL);
		GPIO_HI_BIT(gpio, GPIO_BASE_ADDR | GPIOL_PU_EN);
	}

	return 0;
}
Example #4
0
int get_gpio(uint32_t gpio_def) {
  volatile uint32_t *gpio_port = get_gpio_base(gpio_def);
  uint32_t bitmask = 1 << (gpio_def & 0x1f);
  uint32_t status;

  if (gpio_port) {
    status = gpio_port[GPIO_DATAIN/4];
    return (status & bitmask) ? 1 : 0;
  }
  return -1;
}
Example #5
0
int get_gpio(int gpio_num)
{
	static const int gpio_reg_offsets[] = {0xc, 0x38, 0x48};
	u16 gpio_base = get_gpio_base();
	int index, bit;

	if (gpio_num > MAX_GPIO_NUMBER)
		return 0; /* Just ignore wrong gpio numbers. */

	index = gpio_num / 32;
	bit = gpio_num % 32;

	return (inl(gpio_base + gpio_reg_offsets[index]) >> bit) & 1;
}
Example #6
0
void setup_pch_gpios(const struct pch_gpio_map *gpio)
{
	u16 gpiobase = get_gpio_base();

	/* GPIO Set 1 */
	if (gpio->set1.level)
		outl(*((u32*)gpio->set1.level), gpiobase + GP_LVL);
	if (gpio->set1.mode)
		outl(*((u32*)gpio->set1.mode), gpiobase + GPIO_USE_SEL);
	if (gpio->set1.direction)
		outl(*((u32*)gpio->set1.direction), gpiobase + GP_IO_SEL);
	if (gpio->set1.reset)
		outl(*((u32*)gpio->set1.reset), gpiobase + GP_RST_SEL1);
	if (gpio->set1.invert)
		outl(*((u32*)gpio->set1.invert), gpiobase + GPI_INV);
	if (gpio->set1.blink)
		outl(*((u32*)gpio->set1.blink), gpiobase + GPO_BLINK);

	/* GPIO Set 2 */
	if (gpio->set2.level)
		outl(*((u32*)gpio->set2.level), gpiobase + GP_LVL2);
	if (gpio->set2.mode)
		outl(*((u32*)gpio->set2.mode), gpiobase + GPIO_USE_SEL2);
	if (gpio->set2.direction)
		outl(*((u32*)gpio->set2.direction), gpiobase + GP_IO_SEL2);
	if (gpio->set2.reset)
		outl(*((u32*)gpio->set2.reset), gpiobase + GP_RST_SEL2);

	/* GPIO Set 3 */
	if (gpio->set3.level)
		outl(*((u32*)gpio->set3.level), gpiobase + GP_LVL3);
	if (gpio->set3.mode)
		outl(*((u32*)gpio->set3.mode), gpiobase + GPIO_USE_SEL3);
	if (gpio->set3.direction)
		outl(*((u32*)gpio->set3.direction), gpiobase + GP_IO_SEL3);
	if (gpio->set3.reset)
		outl(*((u32*)gpio->set3.reset), gpiobase + GP_RST_SEL3);
}
Example #7
0
void clr_gpio(uint32_t gpio_def) {
  volatile uint32_t *gpio_port = get_gpio_base(gpio_def);
  uint32_t bitmask = 1 << (gpio_def & 0x1f);
  if (gpio_port)
    gpio_port[GPIO_CLEARDATAOUT/4] = bitmask;
}