blob: fc0e879c1f202d9ac76d26f55edf379f6c74a0f2 [file] [log] [blame]
/*
* Pin controller and GPIO driver for Amlogic Meson tl1 SoC.
*
* Copyright (c) 2017 Amlogic, Inc. All rights reserved.
* Author: Xingyu Chen <xingyu.chen@amlogic.com>
*
* SPDX-License-Identifier: (GPL-2.0+ or MIT)
*/
#include <dt-bindings/gpio/meson-tl1-gpio.h>
#include <linux/arm-smccc.h>
#include "pinctrl-meson.h"
#include "pinctrl-meson-axg-pmx.h"
#include "pinconf-meson-g12a.h"
static const struct pinctrl_pin_desc meson_tl1_periphs_pins[] = {
MESON_PIN(GPIOZ_0),
MESON_PIN(GPIOZ_1),
MESON_PIN(GPIOZ_2),
MESON_PIN(GPIOZ_3),
MESON_PIN(GPIOZ_4),
MESON_PIN(GPIOZ_5),
MESON_PIN(GPIOZ_6),
MESON_PIN(GPIOZ_7),
MESON_PIN(GPIOZ_8),
MESON_PIN(GPIOZ_9),
MESON_PIN(GPIOZ_10),
MESON_PIN(GPIOH_0),
MESON_PIN(GPIOH_1),
MESON_PIN(GPIOH_2),
MESON_PIN(GPIOH_3),
MESON_PIN(GPIOH_4),
MESON_PIN(GPIOH_5),
MESON_PIN(GPIOH_6),
MESON_PIN(GPIOH_7),
MESON_PIN(GPIOH_8),
MESON_PIN(GPIOH_9),
MESON_PIN(GPIOH_10),
MESON_PIN(GPIOH_11),
MESON_PIN(GPIOH_12),
MESON_PIN(GPIOH_13),
MESON_PIN(GPIOH_14),
MESON_PIN(GPIOH_15),
MESON_PIN(GPIOH_16),
MESON_PIN(GPIOH_17),
MESON_PIN(GPIOH_18),
MESON_PIN(GPIOH_19),
MESON_PIN(GPIOH_20),
MESON_PIN(GPIOH_21),
MESON_PIN(GPIOH_22),
MESON_PIN(BOOT_0),
MESON_PIN(BOOT_1),
MESON_PIN(BOOT_2),
MESON_PIN(BOOT_3),
MESON_PIN(BOOT_4),
MESON_PIN(BOOT_5),
MESON_PIN(BOOT_6),
MESON_PIN(BOOT_7),
MESON_PIN(BOOT_8),
MESON_PIN(BOOT_9),
MESON_PIN(BOOT_10),
MESON_PIN(BOOT_11),
MESON_PIN(BOOT_12),
MESON_PIN(BOOT_13),
MESON_PIN(GPIOC_0),
MESON_PIN(GPIOC_1),
MESON_PIN(GPIOC_2),
MESON_PIN(GPIOC_3),
MESON_PIN(GPIOC_4),
MESON_PIN(GPIOC_5),
MESON_PIN(GPIOC_6),
MESON_PIN(GPIOC_7),
MESON_PIN(GPIOC_8),
MESON_PIN(GPIOC_9),
MESON_PIN(GPIOC_10),
MESON_PIN(GPIOC_11),
MESON_PIN(GPIOC_12),
MESON_PIN(GPIOC_13),
MESON_PIN(GPIOC_14),
MESON_PIN(GPIOW_0),
MESON_PIN(GPIOW_1),
MESON_PIN(GPIOW_2),
MESON_PIN(GPIOW_3),
MESON_PIN(GPIOW_4),
MESON_PIN(GPIOW_5),
MESON_PIN(GPIOW_6),
MESON_PIN(GPIOW_7),
MESON_PIN(GPIOW_8),
MESON_PIN(GPIOW_9),
MESON_PIN(GPIOW_10),
MESON_PIN(GPIOW_11),
MESON_PIN(GPIODV_0),
MESON_PIN(GPIODV_1),
MESON_PIN(GPIODV_2),
MESON_PIN(GPIODV_3),
MESON_PIN(GPIODV_4),
MESON_PIN(GPIODV_5),
MESON_PIN(GPIODV_6),
MESON_PIN(GPIODV_7),
MESON_PIN(GPIODV_8),
MESON_PIN(GPIODV_9),
MESON_PIN(GPIODV_10),
MESON_PIN(GPIODV_11),
};
static const struct pinctrl_pin_desc meson_tl1_aobus_pins[] = {
MESON_PIN(GPIOAO_0),
MESON_PIN(GPIOAO_1),
MESON_PIN(GPIOAO_2),
MESON_PIN(GPIOAO_3),
MESON_PIN(GPIOAO_4),
MESON_PIN(GPIOAO_5),
MESON_PIN(GPIOAO_6),
MESON_PIN(GPIOAO_7),
MESON_PIN(GPIOAO_8),
MESON_PIN(GPIOAO_9),
MESON_PIN(GPIOAO_10),
MESON_PIN(GPIOAO_11),
MESON_PIN(GPIOE_0),
MESON_PIN(GPIOE_1),
MESON_PIN(GPIOE_2),
MESON_PIN(GPIO_TEST_N),
};
/* emmc */
static const unsigned int emmc_nand_d0_pins[] = {BOOT_0};
static const unsigned int emmc_nand_d1_pins[] = {BOOT_1};
static const unsigned int emmc_nand_d2_pins[] = {BOOT_2};
static const unsigned int emmc_nand_d3_pins[] = {BOOT_3};
static const unsigned int emmc_nand_d4_pins[] = {BOOT_4};
static const unsigned int emmc_nand_d5_pins[] = {BOOT_5};
static const unsigned int emmc_nand_d6_pins[] = {BOOT_6};
static const unsigned int emmc_nand_d7_pins[] = {BOOT_7};
static const unsigned int emmc_clk_pins[] = {BOOT_8};
static const unsigned int emmc_cmd_pins[] = {BOOT_10};
static const unsigned int emmc_nand_ds_pins[] = {BOOT_11};
/* nand */
static const unsigned int nand_wen_clk_pins[] = {BOOT_8};
static const unsigned int nand_ale_pins[] = {BOOT_9};
static const unsigned int nand_ren_wr_pins[] = {BOOT_10};
static const unsigned int nand_cle_pins[] = {BOOT_11};
static const unsigned int nand_ce0_pins[] = {BOOT_12};
/* nor */
static const unsigned int nor_hold_pins[] = {BOOT_3};
static const unsigned int nor_d_pins[] = {BOOT_4};
static const unsigned int nor_q_pins[] = {BOOT_5};
static const unsigned int nor_c_pins[] = {BOOT_6};
static const unsigned int nor_wp_pins[] = {BOOT_7};
static const unsigned int nor_cs_pins[] = {BOOT_13};
/* sdcard */
static const unsigned int sdcard_d0_pins[] = {GPIOC_0};
static const unsigned int sdcard_d1_pins[] = {GPIOC_1};
static const unsigned int sdcard_d2_pins[] = {GPIOC_2};
static const unsigned int sdcard_d3_pins[] = {GPIOC_3};
static const unsigned int sdcard_clk_pins[] = {GPIOC_4};
static const unsigned int sdcard_cmd_pins[] = {GPIOC_5};
/* spi0 */
static const unsigned int spi0_miso_c_pins[] = {GPIOC_11};
static const unsigned int spi0_mosi_c_pins[] = {GPIOC_12};
static const unsigned int spi0_clk_c_pins[] = {GPIOC_13};
static const unsigned int spi0_ss0_c_pins[] = {GPIOC_14};
static const unsigned int spi0_miso_h_pins[] = {GPIOH_17};
static const unsigned int spi0_mosi_h_pins[] = {GPIOH_18};
static const unsigned int spi0_clk_h_pins[] = {GPIOH_19};
static const unsigned int spi0_ss0_h_pins[] = {GPIOH_20};
static const unsigned int spi0_ss1_pins[] = {GPIOH_0};
static const unsigned int spi0_ss2_pins[] = {GPIOH_1};
/* spi1 */
static const unsigned int spi1_miso_c_pins[] = {GPIOC_0};
static const unsigned int spi1_mosi_c_pins[] = {GPIOC_1};
static const unsigned int spi1_clk_c_pins[] = {GPIOC_2};
static const unsigned int spi1_ss0_c_pins[] = {GPIOC_3};
static const unsigned int spi1_ss1_c_pins[] = {GPIOC_4};
static const unsigned int spi1_ss2_pins[] = {GPIOC_5};
static const unsigned int spi1_miso_dv_pins[] = {GPIODV_7};
static const unsigned int spi1_mosi_dv_pins[] = {GPIODV_8};
static const unsigned int spi1_clk_dv_pins[] = {GPIODV_9};
static const unsigned int spi1_ss0_dv_pins[] = {GPIODV_10};
static const unsigned int spi1_ss1_dv_pins[] = {GPIODV_11};
/* i2c0 */
static const unsigned int i2c0_sda_c_pins[] = {GPIOC_9};
static const unsigned int i2c0_sck_c_pins[] = {GPIOC_8};
static const unsigned int i2c0_sda_dv_pins[] = {GPIODV_0};
static const unsigned int i2c0_sck_dv_pins[] = {GPIODV_1};
/* i2c1 */
static const unsigned int i2c1_sda_z_pins[] = {GPIOZ_1};
static const unsigned int i2c1_sck_z_pins[] = {GPIOZ_2};
static const unsigned int i2c1_sda_h_pins[] = {GPIOH_22};
static const unsigned int i2c1_sck_h_pins[] = {GPIOH_21};
/* i2c2 */
static const unsigned int i2c2_sda_h_pins[] = {GPIOH_20};
static const unsigned int i2c2_sck_h_pins[] = {GPIOH_19};
static const unsigned int i2c2_sda_z_pins[] = {GPIOZ_10};
static const unsigned int i2c2_sck_z_pins[] = {GPIOZ_9};
/* i2c3 */
static const unsigned int i2c3_sda_dv_pins[] = {GPIODV_10};
static const unsigned int i2c3_sck_dv_pins[] = {GPIODV_9};
static const unsigned int i2c3_sda_h1_pins[] = {GPIOH_1};
static const unsigned int i2c3_sck_h0_pins[] = {GPIOH_0};
static const unsigned int i2c3_sda_h20_pins[] = {GPIOH_20};
static const unsigned int i2c3_sck_h19_pins[] = {GPIOH_19};
static const unsigned int i2c3_sda_c_pins[] = {GPIOC_14};
static const unsigned int i2c3_sck_c_pins[] = {GPIOC_13};
/* uart_a */
static const unsigned int uart_a_tx_pins[] = {GPIOC_6};
static const unsigned int uart_a_rx_pins[] = {GPIOC_7};
static const unsigned int uart_a_cts_pins[] = {GPIOC_8};
static const unsigned int uart_a_rts_pins[] = {GPIOC_9};
/* uart_b */
static const unsigned int uart_b_tx_pins[] = {GPIOH_17};
static const unsigned int uart_b_rx_pins[] = {GPIOH_18};
static const unsigned int uart_b_cts_pins[] = {GPIOH_19};
static const unsigned int uart_b_rts_pins[] = {GPIOH_20};
/* uart_c */
static const unsigned int uart_c_tx_pins[] = {GPIODV_7};
static const unsigned int uart_c_rx_pins[] = {GPIODV_8};
static const unsigned int uart_c_cts_pins[] = {GPIODV_9};
static const unsigned int uart_c_rts_pins[] = {GPIODV_10};
/* uart_ao_a_ee */
static const unsigned int uart_ao_a_tx_w2_pins[] = {GPIOW_2};
static const unsigned int uart_ao_a_rx_w3_pins[] = {GPIOW_3};
static const unsigned int uart_ao_a_tx_w6_pins[] = {GPIOW_6};
static const unsigned int uart_ao_a_rx_w7_pins[] = {GPIOW_7};
static const unsigned int uart_ao_a_tx_w10_pins[] = {GPIOW_10};
static const unsigned int uart_ao_a_rx_w11_pins[] = {GPIOW_11};
/* iso7816 */
static const unsigned int iso7816_clk_pins[] = {GPIODV_4};
static const unsigned int iso7816_data_pins[] = {GPIODV_5};
/* eth */
static const unsigned int eth_mdio_pins[] = {GPIOH_2};
static const unsigned int eth_mdc_pins[] = {GPIOH_3};
static const unsigned int eth_rgmii_rx_clk_pins[] = {GPIOH_4};
static const unsigned int eth_rx_dv_pins[] = {GPIOH_5};
static const unsigned int eth_rxd0_pins[] = {GPIOH_6};
static const unsigned int eth_rxd1_pins[] = {GPIOH_7};
static const unsigned int eth_rxd2_rgmii_pins[] = {GPIOH_8};
static const unsigned int eth_rxd3_rgmii_pins[] = {GPIOH_9};
static const unsigned int eth_rgmii_tx_clk_pins[] = {GPIOH_10};
static const unsigned int eth_txen_pins[] = {GPIOH_11};
static const unsigned int eth_txd0_pins[] = {GPIOH_12};
static const unsigned int eth_txd1_pins[] = {GPIOH_13};
static const unsigned int eth_txd2_rgmii_pins[] = {GPIOH_14};
static const unsigned int eth_txd3_rgmii_pins[] = {GPIOH_15};
static const unsigned int eth_link_led_pins[] = {GPIOH_1};
static const unsigned int eth_act_led_pins[] = {GPIOH_0};
/* pwm_a */
static const unsigned int pwm_a_pins[] = {GPIOZ_3};
/* pwm_b */
static const unsigned int pwm_b_c_pins[] = {GPIOC_10};
static const unsigned int pwm_b_z_pins[] = {GPIOZ_4};
/* pwm_c */
static const unsigned int pwm_c_dv_pins[] = {GPIODV_2};
static const unsigned int pwm_c_h_pins[] = {GPIOH_13};
static const unsigned int pwm_c_z_pins[] = {GPIOZ_5};
/* pwm_d */
static const unsigned int pwm_d_dv_pins[] = {GPIODV_3};
static const unsigned int pwm_d_z_pins[] = {GPIOZ_6};
/* pwm_e */
static const unsigned int pwm_e_dv_pins[] = {GPIODV_6};
static const unsigned int pwm_e_z_pins[] = {GPIOZ_9};
/* pwm_f */
static const unsigned int pwm_f_dv_pins[] = {GPIODV_11};
static const unsigned int pwm_f_z_pins[] = {GPIOZ_10};
/* pwm_vs */
static const unsigned int pwm_vs_z5_pins[] = {GPIOZ_5};
static const unsigned int pwm_vs_z6_pins[] = {GPIOZ_6};
/* bt656 */
static const unsigned int bt656_a_clk_pins[] = {GPIOH_2};
static const unsigned int bt656_a_vs_pins[] = {GPIOH_3};
static const unsigned int bt656_a_hs_pins[] = {GPIOH_4};
static const unsigned int bt656_a_din0_pins[] = {GPIOH_5};
static const unsigned int bt656_a_din1_pins[] = {GPIOH_6};
static const unsigned int bt656_a_din2_pins[] = {GPIOH_7};
static const unsigned int bt656_a_din3_pins[] = {GPIOH_8};
static const unsigned int bt656_a_din4_pins[] = {GPIOH_9};
static const unsigned int bt656_a_din5_pins[] = {GPIOH_10};
static const unsigned int bt656_a_din6_pins[] = {GPIOH_11};
static const unsigned int bt656_a_din7_pins[] = {GPIOH_12};
/* tsin_a */
static const unsigned int tsin_a_din7_pins[] = {GPIODV_0};
static const unsigned int tsin_a_din6_pins[] = {GPIODV_1};
static const unsigned int tsin_a_din5_pins[] = {GPIODV_2};
static const unsigned int tsin_a_din4_pins[] = {GPIODV_3};
static const unsigned int tsin_a_din3_pins[] = {GPIODV_4};
static const unsigned int tsin_a_din2_pins[] = {GPIODV_5};
static const unsigned int tsin_a_din1_pins[] = {GPIODV_6};
static const unsigned int tsin_a_din0_pins[] = {GPIODV_7};
static const unsigned int tsin_a_clk_pins[] = {GPIODV_8};
static const unsigned int tsin_a_sop_pins[] = {GPIODV_9};
static const unsigned int tsin_a_valid_pins[] = {GPIODV_10};
/* tsin_b */
static const unsigned int tsin_b_din0_pins[] = {GPIOH_4};
static const unsigned int tsin_b_clk_pins[] = {GPIOH_5};
static const unsigned int tsin_b_sop_pins[] = {GPIOH_6};
static const unsigned int tsin_b_valid_pins[] = {GPIOH_7};
/* tsin_c */
static const unsigned int tsin_c_din0_pins[] = {GPIOH_8};
static const unsigned int tsin_c_clk_pins[] = {GPIOH_9};
static const unsigned int tsin_c_sop_pins[] = {GPIOH_10};
static const unsigned int tsin_c_valid_pins[] = {GPIOH_11};
/* tsout */
static const unsigned int tsout_clk_pins[] = {GPIOC_0};
static const unsigned int tsout_sop_pins[] = {GPIOC_1};
static const unsigned int tsout_valid_pins[] = {GPIOC_2};
static const unsigned int tsout_dout0_pins[] = {GPIOC_3};
static const unsigned int tsout_dout1_pins[] = {GPIOC_4};
static const unsigned int tsout_dout2_pins[] = {GPIOC_5};
static const unsigned int tsout_dout3_pins[] = {GPIOC_6};
static const unsigned int tsout_dout4_pins[] = {GPIOC_7};
static const unsigned int tsout_dout5_pins[] = {GPIOC_8};
static const unsigned int tsout_dout6_pins[] = {GPIOC_9};
static const unsigned int tsout_dout7_pins[] = {GPIOC_10};
/* tcon */
static const unsigned int tcon_0_pins[] = {GPIOH_0};
static const unsigned int tcon_1_pins[] = {GPIOH_1};
static const unsigned int tcon_2_pins[] = {GPIOH_2};
static const unsigned int tcon_3_pins[] = {GPIOH_3};
static const unsigned int tcon_4_pins[] = {GPIOH_4};
static const unsigned int tcon_5_pins[] = {GPIOH_5};
static const unsigned int tcon_6_pins[] = {GPIOH_6};
static const unsigned int tcon_7_pins[] = {GPIOH_7};
static const unsigned int tcon_8_pins[] = {GPIOH_8};
static const unsigned int tcon_9_pins[] = {GPIOH_9};
static const unsigned int tcon_10_pins[] = {GPIOH_10};
static const unsigned int tcon_11_pins[] = {GPIOH_11};
static const unsigned int tcon_12_pins[] = {GPIOH_12};
static const unsigned int tcon_13_pins[] = {GPIOH_13};
static const unsigned int tcon_14_pins[] = {GPIOH_14};
static const unsigned int tcon_15_pins[] = {GPIOH_15};
static const unsigned int tcon_lock_pins[] = {GPIOH_16};
static const unsigned int tcon_spi_mo_pins[] = {GPIOH_17};
static const unsigned int tcon_spi_mi_pins[] = {GPIOH_18};
static const unsigned int tcon_spi_clk_pins[] = {GPIOH_19};
static const unsigned int tcon_spi_ss_pins[] = {GPIOH_20};
static const unsigned int tcon_slv_sda_pins[] = {GPIODV_0};
static const unsigned int tcon_slv_sck_pins[] = {GPIODV_1};
static const unsigned int tcon_aging_pins[] = {GPIODV_2};
static const unsigned int tcon_flicker_pins[] = {GPIODV_4};
static const unsigned int tcon_sfc_h2_pins[] = {GPIOH_2};
static const unsigned int tcon_sfc_h16_pins[] = {GPIOH_16};
/* hdmirx_a */
static const unsigned int hdmirx_a_hpd_pins[] = {GPIOW_0};
static const unsigned int hdmirx_a_det_pins[] = {GPIOW_1};
static const unsigned int hdmirx_a_sda_pins[] = {GPIOW_2};
static const unsigned int hdmirx_a_sck_pins[] = {GPIOW_3};
/* hdmirx_b */
static const unsigned int hdmirx_b_hpd_pins[] = {GPIOW_8};
static const unsigned int hdmirx_b_det_pins[] = {GPIOW_9};
static const unsigned int hdmirx_b_sda_pins[] = {GPIOW_10};
static const unsigned int hdmirx_b_sck_pins[] = {GPIOW_11};
/* hdmirx_c */
static const unsigned int hdmirx_c_hpd_pins[] = {GPIOW_4};
static const unsigned int hdmirx_c_det_pins[] = {GPIOW_5};
static const unsigned int hdmirx_c_sda_pins[] = {GPIOW_6};
static const unsigned int hdmirx_c_sck_pins[] = {GPIOW_7};
/* pdm */
static const unsigned int pdm_dclk_c_pins[] = {GPIOC_6};
static const unsigned int pdm_din0_c_pins[] = {GPIOC_7};
static const unsigned int pdm_din1_c_pins[] = {GPIOC_8};
static const unsigned int pdm_din2_c_pins[] = {GPIOC_9};
static const unsigned int pdm_din3_pins[] = {GPIOC_10};
static const unsigned int pdm_dclk_z_pins[] = {GPIOZ_7};
static const unsigned int pdm_din0_z_pins[] = {GPIOZ_8};
static const unsigned int pdm_din1_z0_pins[] = {GPIOZ_0};
static const unsigned int pdm_din1_z9_pins[] = {GPIOZ_9};
static const unsigned int pdm_din2_z4_pins[] = {GPIOZ_4};
static const unsigned int pdm_din2_z10_pins[] = {GPIOZ_10};
/* spdif_in */
static const unsigned int spdif_in_pins[] = {GPIODV_5};
/* spdif_out */
static const unsigned int spdif_out_dv4_pins[] = {GPIODV_4};
static const unsigned int spdif_out_dv11_pins[] = {GPIODV_11};
static const unsigned int spdif_out_h_pins[] = {GPIOH_0};
static const unsigned int spdif_out_z_pins[] = {GPIOZ_7};
/* mclk0 */
static const unsigned int mclk0_h_pins[] = {GPIOH_4};
static const unsigned int mclk0_z_pins[] = {GPIOZ_0};
/* mclk1 */
static const unsigned int mclk1_c_pins[] = {GPIOC_10};
static const unsigned int mclk1_z_pins[] = {GPIOZ_8};
/* tdma_in */
static const unsigned int tdma_slv_sclk_pins[] = {GPIOZ_1};
static const unsigned int tdma_slv_fs_pins[] = {GPIOZ_2};
static const unsigned int tdma_din0_z_pins[] = {GPIOZ_7};
static const unsigned int tdma_din1_z_pins[] = {GPIOZ_8};
static const unsigned int tdma_din2_z_pins[] = {GPIOZ_9};
static const unsigned int tdma_din3_z_pins[] = {GPIOZ_10};
static const unsigned int tdma_din0_h_pins[] = {GPIOH_11};
static const unsigned int tdma_din1_h_pins[] = {GPIOH_12};
static const unsigned int tdma_din2_h_pins[] = {GPIOH_13};
static const unsigned int tdma_din3_h_pins[] = {GPIOH_14};
/* tdma_out */
static const unsigned int tdma_sclk_z_pins[] = {GPIOZ_1};
static const unsigned int tdma_fs_z_pins[] = {GPIOZ_2};
static const unsigned int tdma_dout0_z_pins[] = {GPIOZ_3};
static const unsigned int tdma_dout1_z_pins[] = {GPIOZ_4};
static const unsigned int tdma_dout2_z_pins[] = {GPIOZ_5};
static const unsigned int tdma_dout3_z_pins[] = {GPIOZ_6};
static const unsigned int tdma_sclk_h_pins[] = {GPIOH_5};
static const unsigned int tdma_fs_h_pins[] = {GPIOH_6};
static const unsigned int tdma_dout0_h_pins[] = {GPIOH_7};
static const unsigned int tdma_dout1_h_pins[] = {GPIOH_8};
static const unsigned int tdma_dout2_h_pins[] = {GPIOH_9};
static const unsigned int tdma_dout3_h_pins[] = {GPIOH_10};
/* tdmb_in */
static const unsigned int tdmb_slv_sclk_pins[] = {GPIOC_13};
static const unsigned int tdmb_slv_fs_pins[] = {GPIOC_14};
static const unsigned int tdmb_din0_c6_pins[] = {GPIOC_6};
static const unsigned int tdmb_din1_c7_pins[] = {GPIOC_7};
static const unsigned int tdmb_din2_pins[] = {GPIOC_8};
static const unsigned int tdmb_din3_pins[] = {GPIOC_9};
static const unsigned int tdmb_din0_c12_pins[] = {GPIOC_12};
static const unsigned int tdmb_din1_c11_pins[] = {GPIOC_11};
/* tdmb_out */
static const unsigned int tdmb_sclk_c4_pins[] = {GPIOC_4};
static const unsigned int tdmb_fs_c5_pins[] = {GPIOC_5};
static const unsigned int tdmb_dout0_c0_pins[] = {GPIOC_0};
static const unsigned int tdmb_dout1_c1_pins[] = {GPIOC_1};
static const unsigned int tdmb_dout2_pins[] = {GPIOC_2};
static const unsigned int tdmb_dout3_pins[] = {GPIOC_3};
static const unsigned int tdmb_sclk_c13_pins[] = {GPIOC_13};
static const unsigned int tdmb_fs_c14_pins[] = {GPIOC_14};
static const unsigned int tdmb_dout0_c12_pins[] = {GPIOC_12};
static const unsigned int tdmb_dout1_c11_pins[] = {GPIOC_11};
/* tdmc_in */
static const unsigned int tdmc_slv_sclk_pins[] = {GPIODV_7};
static const unsigned int tdmc_slv_fs_pins[] = {GPIODV_8};
static const unsigned int tdmc_din0_pins[] = {GPIODV_9};
static const unsigned int tdmc_din1_pins[] = {GPIODV_10};
static const unsigned int tdmc_din2_pins[] = {GPIODV_11};
static const unsigned int tdmc_din3_pins[] = {GPIODV_6};
/* tdmc_out */
static const unsigned int tdmc_sclk_pins[] = {GPIODV_7};
static const unsigned int tdmc_fs_pins[] = {GPIODV_8};
static const unsigned int tdmc_dout0_pins[] = {GPIODV_9};
static const unsigned int tdmc_dout1_pins[] = {GPIODV_10};
static const unsigned int tdmc_dout2_pins[] = {GPIODV_11};
static const unsigned int tdmc_dout3_pins[] = {GPIODV_6};
/* clk12_24_ee */
static const unsigned int clk12_24_pins[] = {GPIOH_13};
/* gen_clk_ee */
static const unsigned int gen_clk_ee_h17_pins[] = {GPIOH_17};
static const unsigned int gen_clk_ee_h21_pins[] = {GPIOH_21};
/* vx1 */
static const unsigned int vx1_htpdn_pins[] = {GPIOH_15};
static const unsigned int vx1_lockn_pins[] = {GPIOH_16};
/* atv */
static const unsigned int atv_if_agc_dv_pins[] = {GPIODV_2};
static const unsigned int atv_if_agc_c_pins[] = {GPIOC_6};
/* dtv */
static const unsigned int dtv_if_agc_dv2_pins[] = {GPIODV_2};
static const unsigned int dtv_if_agc_dv3_pins[] = {GPIODV_3};
static const unsigned int dtv_rf_agc_dv3_pins[] = {GPIODV_3};
static const unsigned int dtv_if_agc_c6_pins[] = {GPIOC_6};
static const unsigned int dtv_if_agc_c7_pins[] = {GPIOC_7};
static const unsigned int dtv_rf_agc_c7_pins[] = {GPIOC_7};
static struct meson_pmx_group meson_tl1_periphs_groups[] = {
GPIO_GROUP(GPIOZ_0),
GPIO_GROUP(GPIOZ_1),
GPIO_GROUP(GPIOZ_2),
GPIO_GROUP(GPIOZ_3),
GPIO_GROUP(GPIOZ_4),
GPIO_GROUP(GPIOZ_5),
GPIO_GROUP(GPIOZ_6),
GPIO_GROUP(GPIOZ_7),
GPIO_GROUP(GPIOZ_8),
GPIO_GROUP(GPIOZ_9),
GPIO_GROUP(GPIOZ_10),
GPIO_GROUP(GPIOH_0),
GPIO_GROUP(GPIOH_1),
GPIO_GROUP(GPIOH_2),
GPIO_GROUP(GPIOH_3),
GPIO_GROUP(GPIOH_4),
GPIO_GROUP(GPIOH_5),
GPIO_GROUP(GPIOH_6),
GPIO_GROUP(GPIOH_7),
GPIO_GROUP(GPIOH_8),
GPIO_GROUP(GPIOH_9),
GPIO_GROUP(GPIOH_10),
GPIO_GROUP(GPIOH_11),
GPIO_GROUP(GPIOH_12),
GPIO_GROUP(GPIOH_13),
GPIO_GROUP(GPIOH_14),
GPIO_GROUP(GPIOH_15),
GPIO_GROUP(GPIOH_16),
GPIO_GROUP(GPIOH_17),
GPIO_GROUP(GPIOH_18),
GPIO_GROUP(GPIOH_19),
GPIO_GROUP(GPIOH_20),
GPIO_GROUP(GPIOH_21),
GPIO_GROUP(GPIOH_22),
GPIO_GROUP(BOOT_0),
GPIO_GROUP(BOOT_1),
GPIO_GROUP(BOOT_2),
GPIO_GROUP(BOOT_3),
GPIO_GROUP(BOOT_4),
GPIO_GROUP(BOOT_5),
GPIO_GROUP(BOOT_6),
GPIO_GROUP(BOOT_7),
GPIO_GROUP(BOOT_8),
GPIO_GROUP(BOOT_9),
GPIO_GROUP(BOOT_10),
GPIO_GROUP(BOOT_11),
GPIO_GROUP(BOOT_12),
GPIO_GROUP(BOOT_13),
GPIO_GROUP(GPIOC_0),
GPIO_GROUP(GPIOC_1),
GPIO_GROUP(GPIOC_2),
GPIO_GROUP(GPIOC_3),
GPIO_GROUP(GPIOC_4),
GPIO_GROUP(GPIOC_5),
GPIO_GROUP(GPIOC_6),
GPIO_GROUP(GPIOC_7),
GPIO_GROUP(GPIOC_8),
GPIO_GROUP(GPIOC_9),
GPIO_GROUP(GPIOC_10),
GPIO_GROUP(GPIOC_11),
GPIO_GROUP(GPIOC_12),
GPIO_GROUP(GPIOC_13),
GPIO_GROUP(GPIOC_14),
GPIO_GROUP(GPIOW_0),
GPIO_GROUP(GPIOW_1),
GPIO_GROUP(GPIOW_2),
GPIO_GROUP(GPIOW_3),
GPIO_GROUP(GPIOW_4),
GPIO_GROUP(GPIOW_5),
GPIO_GROUP(GPIOW_6),
GPIO_GROUP(GPIOW_7),
GPIO_GROUP(GPIOW_8),
GPIO_GROUP(GPIOW_9),
GPIO_GROUP(GPIOW_10),
GPIO_GROUP(GPIOW_11),
GPIO_GROUP(GPIODV_0),
GPIO_GROUP(GPIODV_1),
GPIO_GROUP(GPIODV_2),
GPIO_GROUP(GPIODV_3),
GPIO_GROUP(GPIODV_4),
GPIO_GROUP(GPIODV_5),
GPIO_GROUP(GPIODV_6),
GPIO_GROUP(GPIODV_7),
GPIO_GROUP(GPIODV_8),
GPIO_GROUP(GPIODV_9),
GPIO_GROUP(GPIODV_10),
GPIO_GROUP(GPIODV_11),
/* bank BOOT */
GROUP(emmc_nand_d0, 1),
GROUP(emmc_nand_d1, 1),
GROUP(emmc_nand_d2, 1),
GROUP(emmc_nand_d3, 1),
GROUP(emmc_nand_d4, 1),
GROUP(emmc_nand_d5, 1),
GROUP(emmc_nand_d6, 1),
GROUP(emmc_nand_d7, 1),
GROUP(emmc_clk, 1),
GROUP(emmc_cmd, 1),
GROUP(emmc_nand_ds, 1),
GROUP(nand_ce0, 2),
GROUP(nand_ale, 2),
GROUP(nand_cle, 2),
GROUP(nand_wen_clk, 2),
GROUP(nand_ren_wr, 2),
GROUP(nor_hold, 3),
GROUP(nor_d, 3),
GROUP(nor_q, 3),
GROUP(nor_c, 3),
GROUP(nor_wp, 3),
GROUP(nor_cs, 3),
/* bank GPIOC */
GROUP(sdcard_d0, 1),
GROUP(sdcard_d1, 1),
GROUP(sdcard_d2, 1),
GROUP(sdcard_d3, 1),
GROUP(sdcard_clk, 1),
GROUP(sdcard_cmd, 1),
GROUP(spi0_mosi_c, 1),
GROUP(spi0_miso_c, 1),
GROUP(spi0_ss0_c, 1),
GROUP(spi0_clk_c, 1),
GROUP(spi1_mosi_c, 5),
GROUP(spi1_miso_c, 5),
GROUP(spi1_clk_c, 5),
GROUP(spi1_ss0_c, 5),
GROUP(spi1_ss1_c, 5),
GROUP(spi1_ss2, 5),
GROUP(i2c0_sda_c, 5),
GROUP(i2c0_sck_c, 5),
GROUP(i2c3_sda_c, 4),
GROUP(i2c3_sck_c, 4),
GROUP(uart_a_tx, 1),
GROUP(uart_a_rx, 1),
GROUP(uart_a_cts, 1),
GROUP(uart_a_rts, 1),
GROUP(pwm_b_c, 1),
GROUP(tsout_clk, 4),
GROUP(tsout_sop, 4),
GROUP(tsout_valid, 4),
GROUP(tsout_dout0, 4),
GROUP(tsout_dout1, 4),
GROUP(tsout_dout2, 4),
GROUP(tsout_dout3, 4),
GROUP(tsout_dout4, 4),
GROUP(tsout_dout5, 4),
GROUP(tsout_dout6, 4),
GROUP(tsout_dout7, 4),
GROUP(pdm_dclk_c, 2),
GROUP(pdm_din0_c, 2),
GROUP(pdm_din1_c, 2),
GROUP(pdm_din2_c, 2),
GROUP(pdm_din3, 2),
GROUP(mclk1_c, 3),
GROUP(tdmb_slv_sclk, 3),
GROUP(tdmb_slv_fs, 3),
GROUP(tdmb_din0_c6, 3),
GROUP(tdmb_din1_c7, 3),
GROUP(tdmb_din2, 3),
GROUP(tdmb_din3, 3),
GROUP(tdmb_din0_c12, 3),
GROUP(tdmb_din1_c11, 3),
GROUP(tdmb_sclk_c4, 3),
GROUP(tdmb_fs_c5, 3),
GROUP(tdmb_dout0_c0, 3),
GROUP(tdmb_dout1_c1, 3),
GROUP(tdmb_dout2, 3),
GROUP(tdmb_dout3, 3),
GROUP(tdmb_sclk_c13, 2),
GROUP(tdmb_fs_c14, 2),
GROUP(tdmb_dout0_c12, 2),
GROUP(tdmb_dout1_c11, 2),
GROUP(atv_if_agc_c, 6),
GROUP(dtv_if_agc_c6, 5),
GROUP(dtv_if_agc_c7, 5),
GROUP(dtv_rf_agc_c7, 6),
/* bank GPIOH */
GROUP(spi0_mosi_h, 2),
GROUP(spi0_miso_h, 2),
GROUP(spi0_ss0_h, 2),
GROUP(spi0_clk_h, 2),
GROUP(spi0_ss1, 2),
GROUP(spi0_ss2, 2),
GROUP(i2c1_sda_h, 1),
GROUP(i2c1_sck_h, 1),
GROUP(i2c2_sda_h, 3),
GROUP(i2c2_sck_h, 3),
GROUP(i2c3_sda_h1, 6),
GROUP(i2c3_sck_h0, 6),
GROUP(i2c3_sda_h20, 5),
GROUP(i2c3_sck_h19, 5),
GROUP(uart_b_tx, 4),
GROUP(uart_b_rx, 4),
GROUP(uart_b_cts, 4),
GROUP(uart_b_rts, 4),
GROUP(eth_mdio, 2),
GROUP(eth_mdc, 2),
GROUP(eth_rgmii_rx_clk, 2),
GROUP(eth_rx_dv, 2),
GROUP(eth_rxd0, 2),
GROUP(eth_rxd1, 2),
GROUP(eth_rxd2_rgmii, 2),
GROUP(eth_rxd3_rgmii, 2),
GROUP(eth_rgmii_tx_clk, 2),
GROUP(eth_txen, 2),
GROUP(eth_txd0, 2),
GROUP(eth_txd1, 2),
GROUP(eth_txd2_rgmii, 2),
GROUP(eth_txd3_rgmii, 2),
GROUP(eth_link_led, 4),
GROUP(eth_act_led, 4),
GROUP(pwm_c_h, 4),
GROUP(bt656_a_vs, 3),
GROUP(bt656_a_hs, 3),
GROUP(bt656_a_clk, 3),
GROUP(bt656_a_din0, 3),
GROUP(bt656_a_din1, 3),
GROUP(bt656_a_din2, 3),
GROUP(bt656_a_din3, 3),
GROUP(bt656_a_din4, 3),
GROUP(bt656_a_din5, 3),
GROUP(bt656_a_din6, 3),
GROUP(bt656_a_din7, 3),
GROUP(tsin_b_valid, 4),
GROUP(tsin_b_sop, 4),
GROUP(tsin_b_din0, 4),
GROUP(tsin_b_clk, 4),
GROUP(tsin_c_valid, 4),
GROUP(tsin_c_sop, 4),
GROUP(tsin_c_din0, 4),
GROUP(tsin_c_clk, 4),
GROUP(tcon_0, 1),
GROUP(tcon_1, 1),
GROUP(tcon_2, 1),
GROUP(tcon_3, 1),
GROUP(tcon_4, 1),
GROUP(tcon_5, 1),
GROUP(tcon_6, 1),
GROUP(tcon_7, 1),
GROUP(tcon_8, 1),
GROUP(tcon_9, 1),
GROUP(tcon_10, 1),
GROUP(tcon_11, 1),
GROUP(tcon_12, 1),
GROUP(tcon_13, 1),
GROUP(tcon_14, 1),
GROUP(tcon_15, 1),
GROUP(tcon_lock, 1),
GROUP(tcon_spi_mo, 1),
GROUP(tcon_spi_mi, 1),
GROUP(tcon_spi_clk, 1),
GROUP(tcon_spi_ss, 1),
GROUP(tcon_sfc_h2, 4),
GROUP(tcon_sfc_h16, 2),
GROUP(spdif_out_h, 5),
GROUP(mclk0_h, 5),
GROUP(tdma_din0_h, 5),
GROUP(tdma_din1_h, 5),
GROUP(tdma_din2_h, 5),
GROUP(tdma_din3_h, 5),
GROUP(tdma_sclk_h, 5),
GROUP(tdma_fs_h, 5),
GROUP(tdma_dout0_h, 5),
GROUP(tdma_dout1_h, 5),
GROUP(tdma_dout2_h, 5),
GROUP(tdma_dout3_h, 5),
GROUP(clk12_24, 3),
GROUP(gen_clk_ee_h17, 5),
GROUP(gen_clk_ee_h21, 5),
GROUP(vx1_htpdn, 3),
GROUP(vx1_lockn, 3),
/* bank GPIODV */
GROUP(spi1_mosi_dv, 4),
GROUP(spi1_miso_dv, 4),
GROUP(spi1_clk_dv, 4),
GROUP(spi1_ss0_dv, 4),
GROUP(spi1_ss1_dv, 4),
GROUP(i2c0_sda_dv, 1),
GROUP(i2c0_sck_dv, 1),
GROUP(i2c3_sda_dv, 6),
GROUP(i2c3_sck_dv, 6),
GROUP(uart_c_tx, 5),
GROUP(uart_c_rx, 5),
GROUP(uart_c_cts, 5),
GROUP(uart_c_rts, 5),
GROUP(iso7816_clk, 4),
GROUP(iso7816_data, 4),
GROUP(pwm_c_dv, 5),
GROUP(pwm_d_dv, 5),
GROUP(pwm_e_dv, 4),
GROUP(pwm_f_dv, 5),
GROUP(tsin_a_valid, 3),
GROUP(tsin_a_sop, 3),
GROUP(tsin_a_din0, 3),
GROUP(tsin_a_clk, 3),
GROUP(tsin_a_din1, 3),
GROUP(tsin_a_din2, 3),
GROUP(tsin_a_din3, 3),
GROUP(tsin_a_din4, 3),
GROUP(tsin_a_din5, 3),
GROUP(tsin_a_din6, 3),
GROUP(tsin_a_din7, 3),
GROUP(tcon_slv_sda, 2),
GROUP(tcon_slv_sck, 2),
GROUP(tcon_aging, 4),
GROUP(tcon_flicker, 2),
GROUP(spdif_in, 1),
GROUP(spdif_out_dv4, 1),
GROUP(spdif_out_dv11, 3),
GROUP(tdmc_slv_sclk, 2),
GROUP(tdmc_slv_fs, 2),
GROUP(tdmc_din0, 2),
GROUP(tdmc_din1, 2),
GROUP(tdmc_din2, 2),
GROUP(tdmc_din3, 2),
GROUP(tdmc_sclk, 1),
GROUP(tdmc_fs, 1),
GROUP(tdmc_dout0, 1),
GROUP(tdmc_dout1, 1),
GROUP(tdmc_dout2, 1),
GROUP(tdmc_dout3, 1),
GROUP(atv_if_agc_dv, 2),
GROUP(dtv_if_agc_dv2, 1),
GROUP(dtv_if_agc_dv3, 1),
GROUP(dtv_rf_agc_dv3, 2),
/* bank GPIOZ */
GROUP(i2c1_sda_z, 3),
GROUP(i2c1_sck_z, 3),
GROUP(i2c2_sda_z, 1),
GROUP(i2c2_sck_z, 1),
GROUP(pwm_a, 4),
GROUP(pwm_b_z, 4),
GROUP(pwm_c_z, 4),
GROUP(pwm_d_z, 4),
GROUP(pwm_e_z, 4),
GROUP(pwm_f_z, 4),
GROUP(pwm_vs_z5, 3),
GROUP(pwm_vs_z6, 3),
GROUP(pdm_dclk_z, 3),
GROUP(pdm_din0_z, 3),
GROUP(pdm_din1_z0, 2),
GROUP(pdm_din1_z9, 3),
GROUP(pdm_din2_z4, 2),
GROUP(pdm_din2_z10, 3),
GROUP(spdif_out_z, 1),
GROUP(mclk0_z, 1),
GROUP(mclk1_z, 1),
GROUP(tdma_slv_sclk, 2),
GROUP(tdma_slv_fs, 2),
GROUP(tdma_din0_z, 2),
GROUP(tdma_din1_z, 2),
GROUP(tdma_din2_z, 2),
GROUP(tdma_din3_z, 2),
GROUP(tdma_sclk_z, 1),
GROUP(tdma_fs_z, 1),
GROUP(tdma_dout0_z, 1),
GROUP(tdma_dout1_z, 1),
GROUP(tdma_dout2_z, 1),
GROUP(tdma_dout3_z, 1),
/* bank GPIOW */
GROUP(uart_ao_a_tx_w2, 2),
GROUP(uart_ao_a_rx_w3, 2),
GROUP(uart_ao_a_tx_w6, 2),
GROUP(uart_ao_a_rx_w7, 2),
GROUP(uart_ao_a_tx_w10, 2),
GROUP(uart_ao_a_rx_w11, 2),
GROUP(hdmirx_a_hpd, 1),
GROUP(hdmirx_a_det, 1),
GROUP(hdmirx_a_sda, 1),
GROUP(hdmirx_a_sck, 1),
GROUP(hdmirx_b_hpd, 1),
GROUP(hdmirx_b_det, 1),
GROUP(hdmirx_b_sda, 1),
GROUP(hdmirx_b_sck, 1),
GROUP(hdmirx_c_hpd, 1),
GROUP(hdmirx_c_det, 1),
GROUP(hdmirx_c_sda, 1),
GROUP(hdmirx_c_sck, 1),
};
/* uart_ao_a */
static const unsigned int uart_ao_a_tx_pins[] = {GPIOAO_0};
static const unsigned int uart_ao_a_rx_pins[] = {GPIOAO_1};
static const unsigned int uart_ao_a_cts_pins[] = {GPIOE_0};
static const unsigned int uart_ao_a_rts_pins[] = {GPIOE_1};
/* uart_ao_b */
static const unsigned int uart_ao_b_tx_2_pins[] = {GPIOAO_2};
static const unsigned int uart_ao_b_rx_3_pins[] = {GPIOAO_3};
static const unsigned int uart_ao_b_tx_8_pins[] = {GPIOAO_8};
static const unsigned int uart_ao_b_rx_9_pins[] = {GPIOAO_9};
static const unsigned int uart_ao_b_cts_pins[] = {GPIOE_0};
static const unsigned int uart_ao_b_rts_pins[] = {GPIOE_1};
/* i2c_ao */
static const unsigned int i2c_ao_sck_2_pins[] = {GPIOAO_2};
static const unsigned int i2c_ao_sda_3_pins[] = {GPIOAO_3};
static const unsigned int i2c_ao_sck_e_pins[] = {GPIOE_0};
static const unsigned int i2c_ao_sda_e_pins[] = {GPIOE_1};
/* i2c_ao_slave */
static const unsigned int i2c_ao_slave_sck_pins[] = {GPIOAO_2};
static const unsigned int i2c_ao_slave_sda_pins[] = {GPIOAO_3};
/* ir_in */
static const unsigned int remote_input_ao_pins[] = {GPIOAO_5};
/* ir_out */
static const unsigned int remote_out_ao_pins[] = {GPIOAO_4};
static const unsigned int remote_out_ao9_pins[] = {GPIOAO_9};
/* pwm_ao_a */
static const unsigned int pwm_ao_a_pins[] = {GPIOAO_11};
static const unsigned int pwm_ao_a_hiz_pins[] = {GPIOAO_11};
/* pwm_ao_b */
static const unsigned int pwm_ao_b_pins[] = {GPIOE_0};
/* pwm_ao_c */
static const unsigned int pwm_ao_c_4_pins[] = {GPIOAO_4};
static const unsigned int pwm_ao_c_hiz_4_pins[] = {GPIOAO_4};
static const unsigned int pwm_ao_c_6_pins[] = {GPIOAO_6};
static const unsigned int pwm_ao_c_hiz_7_pins[] = {GPIOAO_7};
/* pwm_ao_d */
static const unsigned int pwm_ao_d_5_pins[] = {GPIOAO_5};
static const unsigned int pwm_ao_d_10_pins[] = {GPIOAO_10};
static const unsigned int pwm_ao_d_e_pins[] = {GPIOE_1};
/* jtag_a */
static const unsigned int jtag_a_tdi_pins[] = {GPIOAO_8};
static const unsigned int jtag_a_tdo_pins[] = {GPIOAO_9};
static const unsigned int jtag_a_clk_pins[] = {GPIOAO_6};
static const unsigned int jtag_a_tms_pins[] = {GPIOAO_7};
/* cec_ao */
static const unsigned int cec_ao_a_pins[] = {GPIOAO_10};
static const unsigned int cec_ao_b_pins[] = {GPIOAO_10};
/* spdif_out_ao */
static const unsigned int spdif_out_ao_pins[] = {GPIOAO_6};
/* spdif_in_ao */
static const unsigned int spdif_in_ao_pins[] = {GPIOAO_7};
/* pwm_a_e2 */
static const unsigned int pwm_a_e2_pins[] = {GPIOE_2};
/* clk25_ee */
static const unsigned int clk25_ee_pins[] = {GPIOE_2};
/* clk12_24_ao */
static const unsigned int clk12_24_ao_pins[] = {GPIOE_2};
/* gen_clk_ee_ao */
static const unsigned int gen_clk_ee_ao_pins[] = {GPIOAO_11};
/* gen_clk_ao */
static const unsigned int gen_clk_ao_pins[] = {GPIOAO_11};
static struct meson_pmx_group meson_tl1_aobus_groups[] = {
GPIO_GROUP(GPIOAO_0),
GPIO_GROUP(GPIOAO_1),
GPIO_GROUP(GPIOAO_2),
GPIO_GROUP(GPIOAO_3),
GPIO_GROUP(GPIOAO_4),
GPIO_GROUP(GPIOAO_5),
GPIO_GROUP(GPIOAO_6),
GPIO_GROUP(GPIOAO_7),
GPIO_GROUP(GPIOAO_8),
GPIO_GROUP(GPIOAO_9),
GPIO_GROUP(GPIOAO_10),
GPIO_GROUP(GPIOAO_11),
GPIO_GROUP(GPIOE_0),
GPIO_GROUP(GPIOE_1),
GPIO_GROUP(GPIOE_2),
GPIO_GROUP(GPIO_TEST_N),
/* bank AO */
GROUP(uart_ao_a_tx, 1),
GROUP(uart_ao_a_rx, 1),
GROUP(uart_ao_a_cts, 1),
GROUP(uart_ao_a_rts, 1),
GROUP(uart_ao_b_tx_2, 2),
GROUP(uart_ao_b_rx_3, 2),
GROUP(uart_ao_b_tx_8, 3),
GROUP(uart_ao_b_rx_9, 3),
GROUP(uart_ao_b_cts, 2),
GROUP(uart_ao_b_rts, 2),
GROUP(i2c_ao_sck_2, 1),
GROUP(i2c_ao_sda_3, 1),
GROUP(i2c_ao_sck_e, 4),
GROUP(i2c_ao_sda_e, 4),
GROUP(i2c_ao_slave_sck, 3),
GROUP(i2c_ao_slave_sda, 3),
GROUP(remote_input_ao, 1),
GROUP(remote_out_ao, 1),
GROUP(remote_out_ao9, 2),
GROUP(pwm_ao_a, 3),
GROUP(pwm_ao_a_hiz, 2),
GROUP(pwm_ao_b, 3),
GROUP(pwm_ao_c_4, 3),
GROUP(pwm_ao_c_hiz_4, 4),
GROUP(pwm_ao_c_6, 3),
GROUP(pwm_ao_c_hiz_7, 3),
GROUP(pwm_ao_d_5, 3),
GROUP(pwm_ao_d_10, 3),
GROUP(pwm_ao_d_e, 3),
GROUP(jtag_a_tdi, 1),
GROUP(jtag_a_tdo, 1),
GROUP(jtag_a_clk, 1),
GROUP(jtag_a_tms, 1),
GROUP(cec_ao_a, 1),
GROUP(cec_ao_b, 2),
GROUP(spdif_out_ao, 2),
GROUP(spdif_in_ao, 2),
GROUP(pwm_a_e2, 3),
GROUP(clk12_24_ao, 1),
GROUP(clk25_ee, 2),
GROUP(gen_clk_ee_ao, 4),
GROUP(gen_clk_ao, 5),
};
static const char * const gpio_periphs_groups[] = {
"GPIOZ_0", "GPIOZ_1", "GPIOZ_2", "GPIOZ_3", "GPIOZ_4",
"GPIOZ_5", "GPIOZ_6", "GPIOZ_7", "GPIOZ_8", "GPIOZ_9",
"GPIOZ_10",
"GPIOH_0", "GPIOH_1", "GPIOH_2", "GPIOH_3", "GPIOH_4",
"GPIOH_5", "GPIOH_6", "GPIOH_7", "GPIOH_8", "GPIOH_9",
"GPIOH_10", "GPIOH_11", "GPIOH_12", "GPIOH_13", "GPIOH_14",
"GPIOH_15", "GPIOH_16", "GPIOH_17", "GPIOH_18", "GPIOH_19",
"GPIOH_20", "GPIOH_21", "GPIOH_22",
"BOOT_0", "BOOT_1", "BOOT_2", "BOOT_3", "BOOT_4",
"BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9",
"BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13",
"GPIOC_0", "GPIOC_1", "GPIOC_2", "GPIOC_3", "GPIOC_4",
"GPIOC_5", "GPIOC_6", "GPIOC_7", "GPIOC_8", "GPIOC_9",
"GPIOC_10", "GPIOC_11", "GPIOC_12", "GPIOC_13", "GPIOC_14",
"GPIOW_0", "GPIOW_1", "GPIOW_2", "GPIOW_3", "GPIOW_4",
"GPIOW_5", "GPIOW_6", "GPIOW_7", "GPIOW_8", "GPIOW_9",
"GPIOW_10", "GPIOW_11",
"GPIODV_0", "GPIODV_1", "GPIODV_2", "GPIODV_3", "GPIODV_4",
"GPIODV_5", "GPIODV_6", "GPIODV_7", "GPIODV_8", "GPIODV_9",
"GPIODV_10", "GPIODV_11",
};
static const char * const emmc_groups[] = {
"emmc_nand_d0", "emmc_nand_d1", "emmc_nand_d2",
"emmc_nand_d3", "emmc_nand_d4", "emmc_nand_d5",
"emmc_nand_d6", "emmc_nand_d7",
"emmc_clk", "emmc_cmd", "emmc_nand_ds",
};
static const char * const nand_groups[] = {
"emmc_nand_d0", "emmc_nand_d1", "emmc_nand_d2",
"emmc_nand_d3", "emmc_nand_d4", "emmc_nand_d5",
"emmc_nand_d6", "emmc_nand_d7",
"nand_ce0", "nand_ale", "nand_cle",
"nand_wen_clk", "nand_ren_wr", "emmc_nand_ds",
};
static const char * const nor_groups[] = {
"nor_d", "nor_q", "nor_c", "nor_cs",
"nor_hold", "nor_wp",
};
static const char * const sdcard_groups[] = {
"sdcard_d0", "sdcard_d1", "sdcard_d2", "sdcard_d3",
"sdcard_clk", "sdcard_cmd",
};
static const char * const spi0_groups[] = {
"spi0_mosi_c", "spi0_miso_c", "spi0_ss0_c", "spi0_clk_c",
"spi0_mosi_h", "spi0_miso_h", "spi0_ss0_h", "spi0_clk_h",
"spi0_ss1", "spi0_ss2",
};
static const char * const spi1_groups[] = {
"spi1_mosi_dv", "spi1_miso_dv", "spi1_ss0_dv", "spi1_clk_dv",
"spi1_ss1_dv",
"spi1_mosi_c", "spi1_miso_c", "spi1_ss0_c", "spi1_clk_c",
"spi1_ss1_c", "spi1_ss2",
};
static const char * const i2c0_groups[] = {
"i2c0_sda_c", "i2c0_sck_c",
"i2c0_sda_dv", "i2c0_sck_dv",
};
static const char * const i2c1_groups[] = {
"i2c1_sda_z", "i2c1_sck_z",
"i2c1_sda_h", "i2c1_sck_h",
};
static const char * const i2c2_groups[] = {
"i2c2_sda_h", "i2c2_sck_h",
"i2c2_sda_z", "i2c2_sck_z",
};
static const char * const i2c3_groups[] = {
"i2c3_sda_h1", "i2c3_sck_h0",
"i2c3_sda_h20", "i2c3_sck_h19",
"i2c3_sda_dv", "i2c3_sck_dv",
"i2c3_sda_c", "i2c3_sck_c",
};
static const char * const uart_a_groups[] = {
"uart_a_tx", "uart_a_rx", "uart_a_cts", "uart_a_rts",
};
static const char * const uart_b_groups[] = {
"uart_b_tx", "uart_b_rx", "uart_b_cts", "uart_b_rts",
};
static const char * const uart_c_groups[] = {
"uart_c_tx", "uart_c_rx", "uart_c_cts", "uart_c_rts",
};
static const char * const uart_ao_a_ee_groups[] = {
"uart_ao_a_rx_w3", "uart_ao_a_tx_w2",
"uart_ao_a_rx_w7", "uart_ao_a_tx_w6",
"uart_ao_a_rx_w11", "uart_ao_a_tx_w10",
};
static const char * const iso7816_groups[] = {
"iso7816_clk", "iso7816_data",
};
static const char * const eth_groups[] = {
"eth_rxd2_rgmii", "eth_rxd3_rgmii", "eth_rgmii_tx_clk",
"eth_txd2_rgmii", "eth_txd3_rgmii", "eth_rgmii_rx_clk",
"eth_txd0", "eth_txd1", "eth_txen", "eth_mdc",
"eth_rxd0", "eth_rxd1", "eth_rx_dv", "eth_mdio",
"eth_link_led", "eth_act_led",
};
static const char * const pwm_a_groups[] = {
"pwm_a",
};
static const char * const pwm_b_groups[] = {
"pwm_b_c", "pwm_b_z",
};
static const char * const pwm_c_groups[] = {
"pwm_c_dv", "pwm_c_h", "pwm_c_z",
};
static const char * const pwm_d_groups[] = {
"pwm_d_dv", "pwm_d_z",
};
static const char * const pwm_e_groups[] = {
"pwm_e_dv", "pwm_e_z",
};
static const char * const pwm_f_groups[] = {
"pwm_f_dv", "pwm_f_z",
};
static const char * const pwm_vs_groups[] = {
"pwm_vs_z5", "pwm_vs_z6",
};
static const char * const tsout_groups[] = {
"tsout_clk", "tsout_sop", "tsout_valid",
"tsout_dout0", "tsout_dout1", "tsout_dout2",
"tsout_dout3", "tsout_dout4", "tsout_dout5",
"tsout_dout6", "tsout_dout7",
};
static const char * const tcon_groups[] = {
"tcon_0", "tcon_1", "tcon_2", "tcon_3",
"tcon_4", "tcon_5", "tcon_6", "tcon_7",
"tcon_8", "tcon_9", "tcon_10", "tcon_11",
"tcon_12", "tcon_13", "tcon_14", "tcon_15",
"tcon_lock", "tcon_spi_mo", "tcon_spi_mi",
"tcon_spi_clk", "tcon_spi_ss", "tcon_slv_sda",
"tcon_slv_sck", "tcon_aging", "tcon_flicker",
"tcon_sfc_h2", "tcon_sfc_h16",
};
static const char * const bt656_groups[] = {
"bt656_a_vs", "bt656_a_hs", "bt656_a_clk",
"bt656_a_din0", "bt656_a_din1", "bt656_a_din2",
"bt656_a_din3", "bt656_a_din4", "bt656_a_din5",
"bt656_a_din6", "bt656_a_din7",
};
static const char * const tsin_a_groups[] = {
"tsin_a_valid", "tsin_a_sop", "tsin_a_clk",
"tsin_a_din0", "tsin_a_din1", "tsin_a_din2", "tsin_a_din3",
"tsin_a_din4", "tsin_a_din5", "tsin_a_din6", "tsin_a_din7",
};
static const char * const tsin_b_groups[] = {
"tsin_b_valid", "tsin_b_sop", "tsin_b_din0",
"tsin_b_clk",
};
static const char * const tsin_c_groups[] = {
"tsin_c_valid", "tsin_c_sop", "tsin_c_din0",
"tsin_c_clk",
};
static const char * const hdmirx_a_groups[] = {
"hdmirx_a_hpd", "hdmirx_a_det",
"hdmirx_a_sda", "hdmirx_a_sck",
};
static const char * const hdmirx_b_groups[] = {
"hdmirx_b_hpd", "hdmirx_b_det",
"hdmirx_b_sda", "hdmirx_b_sck",
};
static const char * const hdmirx_c_groups[] = {
"hdmirx_c_hpd", "hdmirx_c_det",
"hdmirx_c_sda", "hdmirx_c_sck",
};
static const char * const pdm_groups[] = {
"pdm_din0_c", "pdm_din1_c", "pdm_din2_c", "pdm_dclk_c",
"pdm_din3",
"pdm_din0_z", "pdm_din1_z0", "pdm_din1_z9", "pdm_din2_z4",
"pdm_din2_z10", "pdm_dclk_z",
};
static const char * const spdif_in_groups[] = {
"spdif_in",
};
static const char * const spdif_out_groups[] = {
"spdif_out_h", "spdif_out_z", "spdif_out_dv4",
"spdif_out_dv11",
};
static const char * const mclk0_groups[] = {
"mclk0_h", "mclk0_z",
};
static const char * const mclk1_groups[] = {
"mclk1_c", "mclk1_z",
};
static const char * const tdma_in_groups[] = {
"tdma_slv_sclk", "tdma_slv_fs",
"tdma_din0_z", "tdma_din1_z", "tdma_din2_z", "tdma_din3_z",
"tdma_din0_h", "tdma_din1_h", "tdma_din2_h", "tdma_din3_h",
};
static const char * const tdma_out_groups[] = {
"tdma_sclk_z", "tdma_fs_z",
"tdma_dout0_z", "tdma_dout1_z", "tdma_dout2_z", "tdma_dout3_z",
"tdma_sclk_h", "tdma_fs_h",
"tdma_dout0_h", "tdma_dout1_h", "tdma_dout2_h", "tdma_dout3_h",
};
static const char * const tdmb_in_groups[] = {
"tdmb_slv_sclk", "tdmb_slv_fs",
"tdmb_din0_c6", "tdmb_din1_c7", "tdmb_din2", "tdmb_din3",
"tdmb_din0_c12", "tdmb_din1_c11",
};
static const char * const tdmb_out_groups[] = {
"tdmb_sclk_c4", "tdmb_fs_c5",
"tdmb_dout0_c0", "tdmb_dout1_c1", "tdmb_dout2", "tdmb_dout3",
"tdmb_sclk_c13", "tdmb_fs_c14",
"tdmb_dout0_c12", "tdmb_dout1_c11",
};
static const char * const tdmc_in_groups[] = {
"tdmc_slv_sclk", "tdmc_slv_fs",
"tdmc_din0", "tdmc_din1", "tdmc_din2", "tdmc_din3",
};
static const char * const tdmc_out_groups[] = {
"tdmc_sclk", "tdmc_fs",
"tdmc_dout0", "tdmc_dout1", "tdmc_dout2", "tdmc_dout3",
};
static const char * const clk12_24_ee_groups[] = {
"clk12_24",
};
static const char * const gen_clk_ee_groups[] = {
"gen_clk_ee_h17", "gen_clk_ee_h21",
};
static const char * const vx1_groups[] = {
"vx1_htpdn", "vx1_lockn",
};
static const char * const atv_groups[] = {
"atv_if_agc_dv", "atv_if_agc_c",
};
static const char * const dtv_groups[] = {
"dtv_if_agc_dv2", "dtv_if_agc_dv3", "dtv_rf_agc_dv3",
"dtv_if_agc_c6", "dtv_if_agc_c7", "dtv_rf_agc_c7",
};
static const char * const gpio_aobus_groups[] = {
"GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3", "GPIOAO_4",
"GPIOAO_5", "GPIOAO_6", "GPIOAO_7", "GPIOAO_8", "GPIOAO_9",
"GPIOAO_10", "GPIOAO_11", "GPIOE_0", "GPIOE_1", "GPIOE_2",
"GPIO_TEST_N",
};
static const char * const uart_ao_a_groups[] = {
"uart_ao_a_tx", "uart_ao_a_rx",
"uart_ao_a_cts", "uart_ao_a_rts",
};
static const char * const uart_ao_b_groups[] = {
"uart_ao_b_tx_2", "uart_ao_b_rx_3",
"uart_ao_b_tx_8", "uart_ao_b_rx_9",
"uart_ao_b_cts", "uart_ao_b_rts",
};
static const char * const i2c_ao_groups[] = {
"i2c_ao_sck_2", "i2c_ao_sda_3",
"i2c_ao_sck_e", "i2c_ao_sda_e",
};
static const char * const i2c_ao_slave_groups[] = {
"i2c_ao_slave_sck", "i2c_ao_slave_sda",
};
static const char * const remote_input_ao_groups[] = {
"remote_input_ao",
};
static const char * const remote_out_ao_groups[] = {
"remote_out_ao",
"remote_out_ao9",
};
static const char * const pwm_ao_a_groups[] = {
"pwm_ao_a", "pwm_ao_a_hiz",
};
static const char * const pwm_ao_b_groups[] = {
"pwm_ao_b",
};
static const char * const pwm_ao_c_groups[] = {
"pwm_ao_c_4", "pwm_ao_c_hiz_4",
"pwm_ao_c_6", "pwm_ao_c_hiz_7",
};
static const char * const pwm_ao_d_groups[] = {
"pwm_ao_d_5", "pwm_ao_d_10", "pwm_ao_d_e",
};
static const char * const jtag_a_groups[] = {
"jtag_a_tdi", "jtag_a_tdo", "jtag_a_clk", "jtag_a_tms",
};
static const char * const cec_ao_groups[] = {
"cec_ao_a", "cec_ao_b",
};
static const char * const spdif_out_ao_groups[] = {
"spdif_out_ao",
};
static const char * const spdif_in_ao_groups[] = {
"spdif_in_ao",
};
static const char * const pwm_a_e2_groups[] = {
"pwm_a_e2",
};
static const char * const clk25_ee_groups[] = {
"clk25_ee",
};
static const char * const clk12_24_ao_groups[] = {
"clk12_24_ao",
};
static const char * const gen_clk_ee_ao_groups[] = {
"gen_clk_ee_ao",
};
static const char * const gen_clk_ao_groups[] = {
"gen_clk_ao",
};
static struct meson_pmx_func meson_tl1_periphs_functions[] = {
FUNCTION(gpio_periphs),
FUNCTION(emmc),
FUNCTION(nor),
FUNCTION(spi0),
FUNCTION(spi1),
FUNCTION(nand),
FUNCTION(sdcard),
FUNCTION(i2c0),
FUNCTION(i2c1),
FUNCTION(i2c2),
FUNCTION(i2c3),
FUNCTION(uart_a),
FUNCTION(uart_b),
FUNCTION(uart_c),
FUNCTION(uart_ao_a_ee),
FUNCTION(iso7816),
FUNCTION(eth),
FUNCTION(pwm_a),
FUNCTION(pwm_b),
FUNCTION(pwm_c),
FUNCTION(pwm_d),
FUNCTION(pwm_e),
FUNCTION(pwm_f),
FUNCTION(pwm_vs),
FUNCTION(tsout),
FUNCTION(tcon),
FUNCTION(bt656),
FUNCTION(tsin_a),
FUNCTION(tsin_b),
FUNCTION(tsin_c),
FUNCTION(hdmirx_a),
FUNCTION(hdmirx_b),
FUNCTION(hdmirx_c),
FUNCTION(pdm),
FUNCTION(spdif_in),
FUNCTION(spdif_out),
FUNCTION(mclk0),
FUNCTION(mclk1),
FUNCTION(tdma_in),
FUNCTION(tdma_out),
FUNCTION(tdmb_in),
FUNCTION(tdmb_out),
FUNCTION(tdmc_in),
FUNCTION(tdmc_out),
FUNCTION(clk12_24_ee),
FUNCTION(gen_clk_ee),
FUNCTION(vx1),
FUNCTION(atv),
FUNCTION(dtv),
};
static struct meson_pmx_func meson_tl1_aobus_functions[] = {
FUNCTION(gpio_aobus),
FUNCTION(uart_ao_a),
FUNCTION(uart_ao_b),
FUNCTION(i2c_ao),
FUNCTION(i2c_ao_slave),
FUNCTION(remote_input_ao),
FUNCTION(remote_out_ao),
FUNCTION(pwm_ao_a),
FUNCTION(pwm_ao_b),
FUNCTION(pwm_ao_c),
FUNCTION(pwm_ao_d),
FUNCTION(jtag_a),
FUNCTION(cec_ao),
FUNCTION(spdif_out_ao),
FUNCTION(spdif_in_ao),
FUNCTION(pwm_a_e2),
FUNCTION(clk12_24_ao),
FUNCTION(clk25_ee),
FUNCTION(gen_clk_ee_ao),
FUNCTION(gen_clk_ao),
};
static struct meson_bank meson_tl1_periphs_banks[] = {
/* name first last irq pullen pull dir out in */
BANK("Z", GPIOZ_0, GPIOZ_10, 12,
1, 0, 1, 0, 3, 0, 4, 0, 5, 0),
BANK("H", GPIOH_0, GPIOH_22, 23,
2, 0, 2, 0, 6, 0, 7, 0, 8, 0),
BANK("BOOT", BOOT_0, BOOT_13, 46,
0, 0, 0, 0, 0, 0, 1, 0, 2, 0),
BANK("C", GPIOC_0, GPIOC_14, 60,
3, 0, 3, 0, 9, 0, 10, 0, 11, 0),
BANK("W", GPIOW_0, GPIOW_11, 75,
4, 0, 4, 0, 12, 0, 13, 0, 14, 0),
BANK("DV", GPIODV_0, GPIODV_11, 87,
5, 0, 5, 0, 16, 0, 17, 0, 18, 0),
};
static struct meson_bank meson_tl1_aobus_banks[] = {
/* name first last irq pullen pull dir out in */
BANK("AO", GPIOAO_0, GPIOAO_11, 0,
3, 0, 2, 0, 0, 0, 4, 0, 1, 0),
BANK("E", GPIOE_0, GPIOE_2, 99,
3, 16, 2, 16, 0, 16, 4, 16, 1, 16),
BANK("TESTN", GPIO_TEST_N, GPIO_TEST_N, -1,
3, 31, 2, 31, 0, 31, 4, 31, 1, 31),
};
static struct meson_pmx_bank meson_tl1_periphs_pmx_banks[] = {
/* name first lask reg offset */
BANK_PMX("Z", GPIOZ_0, GPIOZ_10, 0x2, 0),
BANK_PMX("H", GPIOH_0, GPIOH_22, 0x7, 0),
BANK_PMX("BOOT", BOOT_0, BOOT_13, 0x0, 0),
BANK_PMX("C", GPIOC_0, GPIOC_14, 0x4, 0),
BANK_PMX("W", GPIOW_0, GPIOW_11, 0xa, 0),
BANK_PMX("DV", GPIODV_0, GPIODV_11, 0xc, 0),
};
static struct meson_axg_pmx_data meson_tl1_periphs_pmx_banks_data = {
.pmx_banks = meson_tl1_periphs_pmx_banks,
.num_pmx_banks = ARRAY_SIZE(meson_tl1_periphs_pmx_banks),
};
static struct meson_drive_bank meson_tl1_periphs_drive_banks[] = {
/* name first lask reg offset */
BANK_DRIVE("Z", GPIOZ_0, GPIOZ_10, 0x1, 0),
BANK_DRIVE("H", GPIOH_0, GPIOH_22, 0x2, 0),
BANK_DRIVE("BOOT", BOOT_0, BOOT_13, 0x0, 0),
BANK_DRIVE("C", GPIOC_0, GPIOC_14, 0x4, 0),
BANK_DRIVE("W", GPIOW_0, GPIOW_11, 0x5, 0),
BANK_DRIVE("DV", GPIODV_0, GPIODV_11, 0x6, 0),
};
static struct meson_drive_data meson_tl1_periphs_drive_data = {
.drive_banks = meson_tl1_periphs_drive_banks,
.num_drive_banks = ARRAY_SIZE(meson_tl1_periphs_drive_banks),
};
static struct meson_pmx_bank meson_tl1_aobus_pmx_banks[] = {
BANK_PMX("AO", GPIOAO_0, GPIOAO_11, 0x0, 0),
BANK_PMX("E", GPIOE_0, GPIOE_2, 0x1, 16),
BANK_PMX("TESTN", GPIO_TEST_N, GPIO_TEST_N, 0x1, 28),
};
static struct meson_axg_pmx_data meson_tl1_aobus_pmx_banks_data = {
.pmx_banks = meson_tl1_aobus_pmx_banks,
.num_pmx_banks = ARRAY_SIZE(meson_tl1_aobus_pmx_banks),
};
static struct meson_drive_bank meson_tl1_aobus_drive_banks[] = {
BANK_DRIVE("AO", GPIOAO_0, GPIOAO_11, 0x0, 0),
BANK_DRIVE("E", GPIOE_0, GPIOE_2, 0x1, 0),
BANK_DRIVE("TESTN", GPIO_TEST_N, GPIO_TEST_N, 0x1, 28),
};
static struct meson_drive_data meson_tl1_aobus_drive_data = {
.drive_banks = meson_tl1_aobus_drive_banks,
.num_drive_banks = ARRAY_SIZE(meson_tl1_aobus_drive_banks),
};
static int meson_tl1_aobus_init(struct meson_pinctrl *pc)
{
struct arm_smccc_res res;
/*set TEST_N to output*/
arm_smccc_smc(CMD_TEST_N_DIR, TEST_N_OUTPUT, 0, 0, 0, 0, 0, 0, &res);
return 0;
}
static struct meson_pinctrl_data meson_tl1_periphs_pinctrl_data = {
.name = "periphs-banks",
.init = NULL,
.pins = meson_tl1_periphs_pins,
.groups = meson_tl1_periphs_groups,
.funcs = meson_tl1_periphs_functions,
.banks = meson_tl1_periphs_banks,
.num_pins = ARRAY_SIZE(meson_tl1_periphs_pins),
.num_groups = ARRAY_SIZE(meson_tl1_periphs_groups),
.num_funcs = ARRAY_SIZE(meson_tl1_periphs_functions),
.num_banks = ARRAY_SIZE(meson_tl1_periphs_banks),
.pmx_ops = &meson_axg_pmx_ops,
.pmx_data = &meson_tl1_periphs_pmx_banks_data,
.pcf_ops = &meson_g12a_pinconf_ops,
.pcf_drv_data = &meson_tl1_periphs_drive_data,
};
static struct meson_pinctrl_data meson_tl1_aobus_pinctrl_data = {
.name = "aobus-banks",
.init = meson_tl1_aobus_init,
.pins = meson_tl1_aobus_pins,
.groups = meson_tl1_aobus_groups,
.funcs = meson_tl1_aobus_functions,
.banks = meson_tl1_aobus_banks,
.num_pins = ARRAY_SIZE(meson_tl1_aobus_pins),
.num_groups = ARRAY_SIZE(meson_tl1_aobus_groups),
.num_funcs = ARRAY_SIZE(meson_tl1_aobus_functions),
.num_banks = ARRAY_SIZE(meson_tl1_aobus_banks),
.pmx_ops = &meson_axg_pmx_ops,
.pmx_data = &meson_tl1_aobus_pmx_banks_data,
.pcf_ops = &meson_g12a_pinconf_ops,
.pcf_drv_data = &meson_tl1_aobus_drive_data,
};
static const struct of_device_id meson_tl1_pinctrl_dt_match[] = {
{
.compatible = "amlogic,meson-tl1-periphs-pinctrl",
.data = &meson_tl1_periphs_pinctrl_data,
},
{
.compatible = "amlogic,meson-tl1-aobus-pinctrl",
.data = &meson_tl1_aobus_pinctrl_data,
},
{ },
};
static struct platform_driver meson_tl1_pinctrl_driver = {
.probe = meson_pinctrl_probe,
.driver = {
.name = "meson-tl1-pinctrl",
.of_match_table = meson_tl1_pinctrl_dt_match,
},
};
static int __init tl1_pmx_init(void)
{
return platform_driver_register(&meson_tl1_pinctrl_driver);
}
static void __exit tl1_pmx_exit(void)
{
platform_driver_unregister(&meson_tl1_pinctrl_driver);
}
arch_initcall(tl1_pmx_init);
module_exit(tl1_pmx_exit);
MODULE_DESCRIPTION("tl1 pin control driver");
MODULE_LICENSE("GPL v2");