static struct s5p_gpio_bank *s5p_gpio_get_bank(unsigned int gpio) { const struct gpio_info *data; unsigned int upto; int i, count; data = get_gpio_data(); count = get_bank_num(); upto = 0; for (i = 0; i < count; i++) { debug("i=%d, upto=%d\n", i, upto); if (gpio < data->max_gpio) { struct s5p_gpio_bank *bank; bank = (struct s5p_gpio_bank *)data->reg_addr; bank += (gpio - upto) / GPIO_PER_BANK; debug("gpio=%d, bank=%p\n", gpio, bank); return bank; } upto = data->max_gpio; data++; } return NULL; }
uint16_t GpioController_Read(uint16_t gpio_num) { uint16_t gpio_bank = get_bank_num(gpio_num); uint16_t gpio_pin = get_pin_num(gpio_num); return GpioDriver_Read(gpioDrivers[gpio_bank], gpio_pin); }
void GpioController_SetDir(uint16_t gpio_num, uint16_t gpio_dir) { uint16_t gpio_bank = get_bank_num(gpio_num); uint16_t gpio_pin = get_pin_num(gpio_num); GpioDriver_SetDir(gpioDrivers[gpio_bank], gpio_pin, gpio_dir); }
void GpioController_SetVal(uint16_t gpio_num, uint16_t gpio_val) { uint16_t gpio_bank = get_bank_num(gpio_num); uint16_t gpio_pin = get_pin_num(gpio_num); GpioDriver_SetVal(gpioDrivers[gpio_bank], gpio_pin, gpio_val); }
void GpioController_SetOutputEn(uint16_t gpio_num, uint16_t gpio_en) { uint16_t gpio_bank = get_bank_num(gpio_num); uint16_t gpio_pin = get_pin_num(gpio_num); GpioDriver_SetOutputEn(gpioDrivers[gpio_bank], gpio_pin, gpio_en); }