int gpio_get_value(unsigned gpio) { unsigned long flags; if (unlikely(get_gpio_edge(gpio))) { int ret; local_irq_save(flags); set_gpio_edge(gpio, 0); ret = get_gpio_data(gpio); set_gpio_edge(gpio, 1); local_irq_restore(flags); return ret; } else return get_gpio_data(gpio); }
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; }