| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <soc/aml-a113/a113-gpio.h> |
| |
| static aml_gpio_block_t a113_gpio_blocks[] = { |
| // GPIO X Block |
| { |
| .start_pin = (A113_GPIOX_START + 0), |
| .pin_block = A113_GPIOX_START, |
| .pin_count = 8, |
| .mux_offset = A113_PERIPHS_PIN_MUX_4, |
| .oen_offset = A113_GPIO_REG2_EN_N, |
| .input_offset = A113_GPIO_REG2_I, |
| .output_offset = A113_GPIO_REG2_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG2, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG2, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOX_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| { |
| .start_pin = (A113_GPIOX_START + 8), |
| .pin_block = A113_GPIOX_START, |
| .pin_count = 8, |
| .mux_offset = A113_PERIPHS_PIN_MUX_5, |
| .oen_offset = A113_GPIO_REG2_EN_N, |
| .input_offset = A113_GPIO_REG2_I, |
| .output_offset = A113_GPIO_REG2_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG2, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG2, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOX_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| { |
| .start_pin = (A113_GPIOX_START + 16), |
| .pin_block = A113_GPIOX_START, |
| .pin_count = 7, |
| .mux_offset = A113_PERIPHS_PIN_MUX_6, |
| .oen_offset = A113_GPIO_REG2_EN_N, |
| .input_offset = A113_GPIO_REG2_I, |
| .output_offset = A113_GPIO_REG2_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG2, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG2, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOX_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| |
| // GPIO A Block |
| { |
| .start_pin = (A113_GPIOA_START + 0), |
| .pin_block = A113_GPIOA_START, |
| .pin_count = 8, |
| .mux_offset = A113_PERIPHS_PIN_MUX_B, |
| .oen_offset = A113_GPIO_REG0_EN_N, |
| .input_offset = A113_GPIO_REG0_I, |
| .output_offset = A113_GPIO_REG0_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG0, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG0, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOA_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| { |
| .start_pin = (A113_GPIOA_START + 8), |
| .pin_block = A113_GPIOA_START, |
| .pin_count = 8, |
| .mux_offset = A113_PERIPHS_PIN_MUX_C, |
| .oen_offset = A113_GPIO_REG0_EN_N, |
| .input_offset = A113_GPIO_REG0_I, |
| .output_offset = A113_GPIO_REG0_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG0, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG0, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOA_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| { |
| .start_pin = (A113_GPIOA_START + 16), |
| .pin_block = A113_GPIOA_START, |
| .pin_count = 5, |
| .mux_offset = A113_PERIPHS_PIN_MUX_D, |
| .oen_offset = A113_GPIO_REG0_EN_N, |
| .input_offset = A113_GPIO_REG0_I, |
| .output_offset = A113_GPIO_REG0_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG0, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG0, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOA_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| |
| // GPIO Boot Block |
| { |
| .start_pin = (A113_GPIOBOOT_START + 0), |
| .pin_block = A113_GPIOBOOT_START, |
| .pin_count = 8, |
| .mux_offset = A113_PERIPHS_PIN_MUX_0, |
| .oen_offset = A113_GPIO_REG4_EN_N, |
| .input_offset = A113_GPIO_REG4_I, |
| .output_offset = A113_GPIO_REG4_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG4, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG4, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOBOOT_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| { |
| .start_pin = (A113_GPIOBOOT_START + 8), |
| .pin_block = A113_GPIOBOOT_START, |
| .pin_count = 7, |
| .mux_offset = A113_PERIPHS_PIN_MUX_1, |
| .oen_offset = A113_GPIO_REG4_EN_N, |
| .input_offset = A113_GPIO_REG4_I, |
| .output_offset = A113_GPIO_REG4_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG4, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG4, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOBOOT_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| |
| // GPIO Y Block |
| { |
| .start_pin = (A113_GPIOY_START + 0), |
| .pin_block = A113_GPIOY_START, |
| .pin_count = 8, |
| .mux_offset = A113_PERIPHS_PIN_MUX_8, |
| .oen_offset = A113_GPIO_REG1_EN_N, |
| .input_offset = A113_GPIO_REG1_I, |
| .output_offset = A113_GPIO_REG1_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG1, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG1, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOY_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| { |
| .start_pin = (A113_GPIOY_START + 8), |
| .pin_block = A113_GPIOY_START, |
| .pin_count = 8, |
| .mux_offset = A113_PERIPHS_PIN_MUX_9, |
| .oen_offset = A113_GPIO_REG1_EN_N, |
| .input_offset = A113_GPIO_REG1_I, |
| .output_offset = A113_GPIO_REG1_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG1, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG1, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOY_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| |
| // GPIO Z Block |
| { |
| .start_pin = (A113_GPIOZ_START + 0), |
| .pin_block = A113_GPIOZ_START, |
| .pin_count = 8, |
| .mux_offset = A113_PERIPHS_PIN_MUX_2, |
| .oen_offset = A113_GPIO_REG3_EN_N, |
| .input_offset = A113_GPIO_REG3_I, |
| .output_offset = A113_GPIO_REG3_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG3, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG3, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOZ_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| { |
| .start_pin = (A113_GPIOZ_START + 8), |
| .pin_block = A113_GPIOZ_START, |
| .pin_count = 3, |
| .mux_offset = A113_PERIPHS_PIN_MUX_3, |
| .oen_offset = A113_GPIO_REG3_EN_N, |
| .input_offset = A113_GPIO_REG3_I, |
| .output_offset = A113_GPIO_REG3_O, |
| .output_shift = 0, |
| .pull_offset = A113_GPIO_PULL_UP_REG3, |
| .pull_en_offset = A113_GPIO_PULL_UP_EN_REG3, |
| .mmio_index = 0, |
| .pin_start = A113_GPIOZ_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| |
| // GPIO AO Block |
| // NOTE: The GPIO AO block has a separate control block than the other |
| // GPIO blocks. |
| { |
| .start_pin = (A113_GPIOAO_START + 0), |
| .pin_block = A113_GPIOAO_START, |
| .pin_count = 8, |
| .mux_offset = A113_AO_RTI_PIN_MUX_REG0, |
| .oen_offset = A113_AO_GPIO_O_EN, |
| .input_offset = A113_AO_GPIO_I, |
| .output_offset = A113_AO_GPIO_O_EN, |
| .output_shift = 16, |
| .pull_offset = A113_GPIO_AO_RTI_PULL_UP, |
| .pull_en_offset = A113_GPIO_AO_RTI_PULL_UP, |
| .mmio_index = 1, |
| .pin_start = A113_GPIOA0_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| { |
| .start_pin = (A113_GPIOAO_START + 8), |
| .pin_block = A113_GPIOAO_START, |
| .pin_count = 6, |
| .mux_offset = A113_AO_RTI_PIN_MUX_REG1, |
| .oen_offset = A113_AO_GPIO_O_EN, |
| .input_offset = A113_AO_GPIO_I, |
| .output_offset = A113_AO_GPIO_O_EN, |
| .output_shift = 16, |
| .pull_offset = A113_GPIO_AO_RTI_PULL_UP, |
| .pull_en_offset = A113_GPIO_AO_RTI_PULL_UP, |
| .mmio_index = 1, |
| .pin_start = A113_GPIOA0_PIN_START, |
| .lock = MTX_INIT, |
| }, |
| }; |
| |
| static aml_gpio_interrupt_t a113_interrupt_block = { |
| .pin_0_3_select_offset = A113_GPIO_0_3_PIN_SELECT, |
| .pin_4_7_select_offset = A113_GPIO_4_7_PIN_SELECT, |
| .edge_polarity_offset = A113_GPIO_INT_EDGE_POLARITY, |
| .filter_select_offset = A113_GPIO_FILTER_SELECT, |
| }; |