Lines Matching refs:gpio
37 #include "gpio.h"
54 /* GPIO access from userland */
55 #include <sys/gpio.h>
56 #include <dev/gpio/gpiovar.h>
83 #define GPIO_READ(gpio, reg) \
84 bus_space_read_4((gpio)->gpio_memt, (gpio)->gpio_memh, (reg))
85 #define GPIO_WRITE(gpio, reg, val) \
86 bus_space_write_4((gpio)->gpio_memt, (gpio)->gpio_memh, (reg), (val))
91 struct imxgpio_softc * const gpio = PIC_TO_SOFTC(pic);
94 gpio->gpio_enable_mask |= irq_mask;
96 GPIO_WRITE(gpio, GPIO_ISR, irq_mask);
97 GPIO_WRITE(gpio, GPIO_IMR, gpio->gpio_enable_mask);
103 struct imxgpio_softc * const gpio = PIC_TO_SOFTC(pic);
106 gpio->gpio_enable_mask &= ~irq_mask;
107 GPIO_WRITE(gpio, GPIO_IMR, gpio->gpio_enable_mask);
113 struct imxgpio_softc * const gpio = PIC_TO_SOFTC(pic);
117 v = GPIO_READ(gpio, GPIO_ISR);
118 pending = (v & gpio->gpio_enable_mask);
125 gpio->gpio_enable_mask &= ~pending;
126 GPIO_WRITE(gpio, GPIO_IMR, gpio->gpio_enable_mask);
132 if (v & gpio->gpio_edge_mask)
133 GPIO_WRITE(gpio, GPIO_ISR, v & gpio->gpio_edge_mask);
150 v = GPIO_READ(gpio, icr_reg);
160 GPIO_WRITE(gpio, icr_reg, v);
162 pic_mark_pending(&gpio->gpio_pic, irq);
178 struct imxgpio_softc * const gpio = PIC_TO_SOFTC(pic);
188 gpio->gpio_enable_mask &= ~irq_mask;
189 GPIO_WRITE(gpio, GPIO_ISR, irq_mask);
190 GPIO_WRITE(gpio, GPIO_IMR, gpio->gpio_enable_mask);
192 * Convert the type to a gpio type and figure out which bits in what
202 v = GPIO_READ(gpio, icr_reg);
205 GPIO_WRITE(gpio, icr_reg, v);
210 v = GPIO_READ(gpio, GPIO_DIR);
212 GPIO_WRITE(gpio, GPIO_DIR, v);
218 gpio->gpio_edge_mask |= irq_mask;
219 gpio->gpio_level_mask &= ~irq_mask;
221 gpio->gpio_edge_mask &= ~irq_mask;
222 gpio->gpio_level_mask |= irq_mask;
231 struct imxgpio_softc * const gpio = arg;
234 val = __SHIFTOUT(GPIO_READ(gpio, GPIO_DR), __BIT(pin));
242 struct imxgpio_softc * const gpio = arg;
247 mutex_enter(&gpio->gpio_lock);
249 old = GPIO_READ(gpio, GPIO_DR);
256 GPIO_WRITE(gpio, GPIO_DR, new);
258 mutex_exit(&gpio->gpio_lock);
264 struct imxgpio_softc * const gpio = arg;
269 mutex_enter(&gpio->gpio_lock);
271 old = GPIO_READ(gpio, GPIO_DIR);
285 GPIO_WRITE(gpio, GPIO_DIR, new);
287 mutex_exit(&gpio->gpio_lock);
291 imxgpio_attach_ports(struct imxgpio_softc *gpio)
293 struct gpio_chipset_tag * const gp = &gpio->gpio_chipset;
298 gp->gp_cookie = gpio;
303 dir = GPIO_READ(gpio, GPIO_DIR);
304 for (pin = 0; pin < __arraycount(gpio->gpio_pins); pin++) {
306 gpio_pin_t *pins = &gpio->gpio_pins[pin];
308 if ((gpio->gpio_edge_mask | gpio->gpio_level_mask) & mask)
314 pins->pin_state = imxgpio_pin_read(gpio, pin);
319 gba.gba_pins = gpio->gpio_pins;
320 gba.gba_npins = __arraycount(gpio->gpio_pins);
321 config_found(gpio->gpio_dev, &gba, gpiobus_print, CFARGS_NONE);
328 struct imxgpio_softc * const gpio = device_private(self);
330 gpio->gpio_dev = self;
332 if (gpio->gpio_irqbase == PIC_IRQBASE_ALLOC || gpio->gpio_irqbase > 0) {
333 gpio->gpio_pic.pic_ops = &imxgpio_pic_ops;
334 strlcpy(gpio->gpio_pic.pic_name, device_xname(self),
335 sizeof(gpio->gpio_pic.pic_name));
336 gpio->gpio_pic.pic_maxsources = GPIO_NPINS;
338 gpio->gpio_irqbase = pic_add(&gpio->gpio_pic, gpio->gpio_irqbase);
340 aprint_normal_dev(gpio->gpio_dev, "interrupts %d..%d\n",
341 gpio->gpio_irqbase, gpio->gpio_irqbase + GPIO_NPINS - 1);
344 mutex_init(&gpio->gpio_lock, MUTEX_DEFAULT, IPL_VM);
346 if (gpio->gpio_unit != -1) {
347 KASSERT(gpio->gpio_unit < MAX_NGROUP);
348 imxgpio_handles[gpio->gpio_unit] = gpio;
352 imxgpio_attach_ports(gpio);
356 /* in-kernel GPIO access utility functions */
358 imxgpio_set_direction(u_int gpio, int dir)
360 int index = gpio / GPIO_NPINS;
361 int pin = gpio % GPIO_NPINS;
370 imxgpio_data_write(u_int gpio, u_int value)
372 int index = gpio / GPIO_NPINS;
373 int pin = gpio % GPIO_NPINS;
382 imxgpio_data_read(u_int gpio)
384 int index = gpio / GPIO_NPINS;
385 int pin = gpio % GPIO_NPINS;