Lines Matching defs:gpio
9 #include <drivers/gpio.h>
22 #define PINMUX_OFFSET(gpio) ((gpio) * 4)
23 #define PINCONF_OFFSET(gpio) ((gpio) * 4)
41 * @base: base address of the gpio controller
55 static void gpio_set_bit(uintptr_t base, unsigned int reg, int gpio, bool set)
57 unsigned int offset = IPROC_GPIO_REG(gpio, reg);
58 unsigned int shift = IPROC_GPIO_SHIFT(gpio);
70 static bool gpio_get_bit(uintptr_t base, unsigned int reg, int gpio)
72 unsigned int offset = IPROC_GPIO_REG(gpio, reg);
73 unsigned int shift = IPROC_GPIO_SHIFT(gpio);
78 static void mux_to_gpio(struct iproc_gpio *g, int gpio)
82 mmio_write_32(g->pinmux_base + PINMUX_OFFSET(gpio),
86 static void set_direction(int gpio, int direction)
91 assert(gpio < g->nr_gpios);
93 mux_to_gpio(g, gpio);
94 gpio_set_bit(g->base, IPROC_GPIO_OUT_EN_OFFSET, gpio, dir);
97 static int get_direction(int gpio)
102 assert(gpio < g->nr_gpios);
104 mux_to_gpio(g, gpio);
105 dir = gpio_get_bit(g->base, IPROC_GPIO_OUT_EN_OFFSET, gpio) ?
111 static int get_value(int gpio)
116 assert(gpio < g->nr_gpios);
118 mux_to_gpio(g, gpio);
124 offset = gpio_get_bit(g->base, IPROC_GPIO_OUT_EN_OFFSET, gpio) ?
127 return gpio_get_bit(g->base, offset, gpio);
130 static void set_value(int gpio, int val)
134 assert(gpio < g->nr_gpios);
136 mux_to_gpio(g, gpio);
139 gpio_set_bit(g->base, IPROC_GPIO_OUT_EN_OFFSET, gpio, true);
140 gpio_set_bit(g->base, IPROC_GPIO_DATA_OUT_OFFSET, gpio, !!(val));
143 static int get_pull(int gpio)
148 assert(gpio < g->nr_gpios);
149 mux_to_gpio(g, gpio);
153 val = mmio_read_32(g->pinconf_base + PINCONF_OFFSET(gpio));
164 if (!gpio_get_bit(g->base, IPROC_GPIO_RES_EN_OFFSET, gpio))
167 return gpio_get_bit(g->base, IPROC_GPIO_PAD_RES_OFFSET, gpio) ?
171 static void set_pull(int gpio, int pull)
176 assert(gpio < g->nr_gpios);
177 mux_to_gpio(g, gpio);
181 val = mmio_read_32(g->pinconf_base + PINCONF_OFFSET(gpio));
194 mmio_write_32(g->pinconf_base + PINCONF_OFFSET(gpio), val);
199 gpio_set_bit(g->base, IPROC_GPIO_RES_EN_OFFSET, gpio, false);
204 gpio_set_bit(g->base, IPROC_GPIO_RES_EN_OFFSET, gpio, true);
205 gpio_set_bit(g->base, IPROC_GPIO_PAD_RES_OFFSET, gpio,