Lines Matching refs:gpio

13 #include <ddk/protocol/gpio-impl.h>
30 readl((uint32_t*)gpio->mmios[index].vaddr + (offset))
32 writel(value, (uint32_t*)gpio->mmios[index].vaddr + (offset))
35 readl((uint32_t*)gpio->mmio_interrupt.vaddr + (offset))
37 writel(value, (uint32_t*)gpio->mmio_interrupt.vaddr + (offset))
80 gpio_impl_protocol_t gpio;
91 // MMIO indices (based on vim-gpio.c gpio_mmios)
107 static zx_status_t aml_pin_to_block(aml_gpio_t* gpio, const uint32_t pin,
112 if (block_index >= gpio->block_count) {
115 aml_gpio_block_t* block = &gpio->gpio_blocks[block_index];
127 aml_gpio_t* gpio = ctx;
132 if ((status = aml_pin_to_block(gpio, index, &block, &pin_index)) != ZX_OK) {
170 aml_gpio_t* gpio = ctx;
175 if ((status = aml_pin_to_block(gpio, index, &block, &pin_index)) != ZX_OK) {
203 aml_gpio_t* gpio = ctx;
210 if (block_index >= gpio->block_count) {
213 const aml_pinmux_block_t* block = &gpio->pinmux_blocks[block_index];
217 aml_gpio_block_t* gpio_block = &gpio->gpio_blocks[block_index];
218 mtx_lock(&gpio->pinmux_lock);
236 mtx_unlock(&gpio->pinmux_lock);
242 aml_gpio_t* gpio = ctx;
247 if ((status = aml_pin_to_block(gpio, pin, &block, &pin_index)) != ZX_OK) {
269 aml_gpio_t* gpio = ctx;
274 if ((status = aml_pin_to_block(gpio, pin, &block, &pin_index)) != ZX_OK) {
310 aml_gpio_t* gpio = ctx;
312 aml_gpio_interrupt_t* interrupt = gpio->gpio_interrupt;
335 if ((status = aml_pin_to_block(gpio, pin, &block, &pin_index)) != ZX_OK) {
348 status = pdev_get_interrupt(&gpio->pdev, index, flags_,
402 aml_gpio_t* gpio = ctx;
403 aml_gpio_interrupt_t* interrupt = gpio->gpio_interrupt;
419 aml_gpio_t* gpio = ctx;
420 aml_gpio_interrupt_t* interrupt = gpio->gpio_interrupt;
461 aml_gpio_t* gpio = ctx;
462 mmio_buffer_release(&gpio->mmios[MMIO_GPIO]);
463 mmio_buffer_release(&gpio->mmios[MMIO_GPIO_A0]);
464 mmio_buffer_release(&gpio->mmio_interrupt);
465 free(gpio->gpio_interrupt->irq_info);
466 free(gpio);
478 aml_gpio_t* gpio = calloc(1, sizeof(aml_gpio_t));
479 if (!gpio) {
482 mtx_init(&gpio->pinmux_lock, mtx_plain);
484 if ((status = device_get_protocol(parent, ZX_PROTOCOL_PLATFORM_DEV, &gpio->pdev)) != ZX_OK) {
495 status = pdev_map_mmio_buffer2(&gpio->pdev, MMIO_GPIO, ZX_CACHE_POLICY_UNCACHED_DEVICE,
496 &gpio->mmios[MMIO_GPIO]);
502 status = pdev_map_mmio_buffer2(&gpio->pdev, MMIO_GPIO_A0, ZX_CACHE_POLICY_UNCACHED_DEVICE,
503 &gpio->mmios[MMIO_GPIO_A0]);
509 status = pdev_map_mmio_buffer2(&gpio->pdev, MMIO_GPIO_INTERRUPTS, ZX_CACHE_POLICY_UNCACHED_DEVICE,
510 &gpio->mmio_interrupt);
517 status = pdev_get_device_info(&gpio->pdev, &info);
525 gpio->gpio_blocks = s912_gpio_blocks;
526 gpio->pinmux_blocks = s912_pinmux_blocks;
527 gpio->gpio_interrupt = &s912_interrupt_block;
528 gpio->block_count = countof(s912_gpio_blocks);
531 gpio->gpio_blocks = s905x_gpio_blocks;
532 gpio->pinmux_blocks = s905x_pinmux_blocks;
533 gpio->gpio_interrupt = &s905x_interrupt_block;
534 gpio->block_count = countof(s905x_gpio_blocks);
537 gpio->gpio_blocks = s905_gpio_blocks;
538 gpio->pinmux_blocks = s905_pinmux_blocks;
539 gpio->gpio_interrupt = &s905_interrupt_block;
540 gpio->block_count = countof(s905_gpio_blocks);
550 .name = "aml-gxl-gpio",
551 .ctx = gpio,
556 status = device_add(parent, &args, &gpio->zxdev);
562 gpio->gpio_interrupt->irq_count = info.irq_count;
563 gpio->gpio_interrupt->irq_status = 0;
564 gpio->gpio.ops = &gpio_ops;
565 gpio->gpio.ctx = gpio;
566 gpio->gpio_interrupt->irq_info = calloc(gpio->gpio_interrupt->irq_count,
568 if (!gpio->gpio_interrupt->irq_info) {
573 pbus_register_protocol(&pbus, ZX_PROTOCOL_GPIO_IMPL, &gpio->gpio, NULL, NULL);
578 aml_gpio_release(gpio);