Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/drivers/pinctrl/meson/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 36 kB image not shown  

Quelle  pinctrl-meson-s4.c   Sprache: C

 
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Pin controller and GPIO driver for Amlogic Meson S4 SoC.
 *
 * Copyright (c) 2021 Amlogic, Inc. All rights reserved.
 * Author: Qianggui Song <qianggui.song@amlogic.com>
 */


#include <dt-bindings/gpio/meson-s4-gpio.h>
#include "pinctrl-meson.h"
#include "pinctrl-meson-axg-pmx.h"

static const struct pinctrl_pin_desc meson_s4_periphs_pins[] = {
 MESON_PIN(GPIOE_0),
 MESON_PIN(GPIOE_1),

 MESON_PIN(GPIOB_0),
 MESON_PIN(GPIOB_1),
 MESON_PIN(GPIOB_2),
 MESON_PIN(GPIOB_3),
 MESON_PIN(GPIOB_4),
 MESON_PIN(GPIOB_5),
 MESON_PIN(GPIOB_6),
 MESON_PIN(GPIOB_7),
 MESON_PIN(GPIOB_8),
 MESON_PIN(GPIOB_9),
 MESON_PIN(GPIOB_10),
 MESON_PIN(GPIOB_11),
 MESON_PIN(GPIOB_12),
 MESON_PIN(GPIOB_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(GPIOD_0),
 MESON_PIN(GPIOD_1),
 MESON_PIN(GPIOD_2),
 MESON_PIN(GPIOD_3),
 MESON_PIN(GPIOD_4),
 MESON_PIN(GPIOD_5),
 MESON_PIN(GPIOD_6),
 MESON_PIN(GPIOD_7),
 MESON_PIN(GPIOD_8),
 MESON_PIN(GPIOD_9),
 MESON_PIN(GPIOD_10),
 MESON_PIN(GPIOD_11),

 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(GPIOX_0),
 MESON_PIN(GPIOX_1),
 MESON_PIN(GPIOX_2),
 MESON_PIN(GPIOX_3),
 MESON_PIN(GPIOX_4),
 MESON_PIN(GPIOX_5),
 MESON_PIN(GPIOX_6),
 MESON_PIN(GPIOX_7),
 MESON_PIN(GPIOX_8),
 MESON_PIN(GPIOX_9),
 MESON_PIN(GPIOX_10),
 MESON_PIN(GPIOX_11),
 MESON_PIN(GPIOX_12),
 MESON_PIN(GPIOX_13),
 MESON_PIN(GPIOX_14),
 MESON_PIN(GPIOX_15),
 MESON_PIN(GPIOX_16),
 MESON_PIN(GPIOX_17),
 MESON_PIN(GPIOX_18),
 MESON_PIN(GPIOX_19),

 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(GPIOZ_11),
 MESON_PIN(GPIOZ_12),

 MESON_PIN(GPIO_TEST_N),
};

/* BANK E func1 */
static const unsigned int i2c0_sda_pins[]  = { GPIOE_0 };
static const unsigned int i2c0_scl_pins[]  = { GPIOE_1 };

/* BANK E func2 */
static const unsigned int uart_b_tx_e_pins[]  = { GPIOE_0 };
static const unsigned int uart_b_rx_e_pins[]  = { GPIOE_1 };

/* BANK E func3 */
static const unsigned int pwm_h_pins[]   = { GPIOE_0 };
static const unsigned int pwm_j_pins[]   = { GPIOE_1 };

/* BANK B func1 */
static const unsigned int emmc_nand_d0_pins[]  = { GPIOB_0 };
static const unsigned int emmc_nand_d1_pins[]  = { GPIOB_1 };
static const unsigned int emmc_nand_d2_pins[]  = { GPIOB_2 };
static const unsigned int emmc_nand_d3_pins[]  = { GPIOB_3 };
static const unsigned int emmc_nand_d4_pins[]  = { GPIOB_4 };
static const unsigned int emmc_nand_d5_pins[]  = { GPIOB_5 };
static const unsigned int emmc_nand_d6_pins[]  = { GPIOB_6 };
static const unsigned int emmc_nand_d7_pins[]  = { GPIOB_7 };
static const unsigned int emmc_clk_pins[]  = { GPIOB_8 };
static const unsigned int emmc_rst_pins[]  = { GPIOB_9 };
static const unsigned int emmc_cmd_pins[]  = { GPIOB_10 };
static const unsigned int emmc_nand_ds_pins[]  = { GPIOB_11 };

/* Bank B func2 */
static const unsigned int nand_wen_clk_pins[]  = { GPIOB_8 };
static const unsigned int nand_ale_pins[]  = { GPIOB_9 };
static const unsigned int nand_ren_wr_pins[]  = { GPIOB_10 };
static const unsigned int nand_cle_pins[]  = { GPIOB_11 };
static const unsigned int nand_ce0_pins[]  = { GPIOB_12 };

/* Bank B func3 */
static const unsigned int spif_hold_pins[]  = { GPIOB_3 };
static const unsigned int spif_mo_pins[]  = { GPIOB_4 };
static const unsigned int spif_mi_pins[]  = { GPIOB_5 };
static const unsigned int spif_clk_pins[]  = { GPIOB_6 };
static const unsigned int spif_wp_pins[]  = { GPIOB_7 };
static const unsigned int spif_cs_pins[]  = { GPIOB_13 };

/* Bank C func1 */
static const unsigned int sdcard_d0_c_pins[]  = { GPIOC_0 };
static const unsigned int sdcard_d1_c_pins[]  = { GPIOC_1 };
static const unsigned int sdcard_d2_c_pins[]  = { GPIOC_2 };
static const unsigned int sdcard_d3_c_pins[]  = { GPIOC_3 };
static const unsigned int sdcard_clk_c_pins[]  = { GPIOC_4 };
static const unsigned int sdcard_cmd_c_pins[]  = { GPIOC_5 };
static const unsigned int sdcard_cd_pins[]  = { GPIOC_6 };

/* Bank C func2 */
static const unsigned int jtag_2_tdo_pins[]  = { GPIOC_0 };
static const unsigned int jtag_2_tdi_pins[]  = { GPIOC_1 };
static const unsigned int uart_b_rx_c_pins[]  = { GPIOC_2 };
static const unsigned int uart_b_tx_c_pins[]  = { GPIOC_3 };
static const unsigned int jtag_2_clk_pins[]  = { GPIOC_4 };
static const unsigned int jtag_2_tms_pins[]  = { GPIOC_5 };
static const unsigned int i2c1_sda_c_pins[]  = { GPIOC_6 };
static const unsigned int i2c1_scl_c_pins[]  = { GPIOC_7 };

/* Bank C func3 */
static const unsigned int pdm_din1_c_pins[]  = { GPIOC_0 };
static const unsigned int pdm_din0_c_pins[]  = { GPIOC_1 };
static const unsigned int i2c4_sda_c_pins[]  = { GPIOC_2 };
static const unsigned int i2c4_scl_c_pins[]  = { GPIOC_3 };
static const unsigned int pdm_dclk_c_pins[]  = { GPIOC_4 };
static const unsigned int iso7816_clk_c_pins[]  = { GPIOC_5 };
static const unsigned int iso7816_data_c_pins[]  = { GPIOC_6 };

/* Bank C func4 */
static const unsigned int tdm_d2_c_pins[]  = { GPIOC_0 };
static const unsigned int tdm_d3_c_pins[]  = { GPIOC_1 };
static const unsigned int tdm_fs1_c_pins[]  = { GPIOC_2 };
static const unsigned int tdm_sclk1_c_pins[]  = { GPIOC_3 };
static const unsigned int mclk_1_c_pins[]  = { GPIOC_4 };
static const unsigned int tdm_d4_c_pins[]  = { GPIOC_5 };
static const unsigned int tdm_d5_c_pins[]  = { GPIOC_6 };

/* Bank D func1 */
static const unsigned int uart_b_tx_d_pins[]  = { GPIOD_0 };
static const unsigned int uart_b_rx_d_pins[]  = { GPIOD_1 };
static const unsigned int uart_b_cts_d_pins[]  = { GPIOD_2 };
static const unsigned int uart_b_rts_d_pins[]  = { GPIOD_3 };
static const unsigned int remote_out_pins[]  = { GPIOD_4 };
static const unsigned int remote_in_pins[]  = { GPIOD_5 };
static const unsigned int jtag_1_clk_pins[]  = { GPIOD_6 };
static const unsigned int jtag_1_tms_pins[]  = { GPIOD_7 };
static const unsigned int jtag_1_tdi_pins[]  = { GPIOD_8 };
static const unsigned int jtag_1_tdo_pins[]  = { GPIOD_9 };
static const unsigned int clk12_24_pins[]  = { GPIOD_10 };
static const unsigned int pwm_g_hiz_pins[]  = { GPIOD_11 };

/* Bank D func2 */
static const unsigned int i2c4_sda_d_pins[]  = { GPIOD_2 };
static const unsigned int i2c4_scl_d_pins[]  = { GPIOD_3 };
static const unsigned int mclk_1_d_pins[]  = { GPIOD_4 };
static const unsigned int tdm_sclk1_d_pins[]  = { GPIOD_6 };
static const unsigned int tdm_fs1_d_pins[]  = { GPIOD_7 };
static const unsigned int tdm_d4_d_pins[]  = { GPIOD_8 };
static const unsigned int tdm_d3_d_pins[]  = { GPIOD_9 };
static const unsigned int tdm_d2_d_pins[]  = { GPIOD_10 };
static const unsigned int pwm_g_d_pins[]  = { GPIOD_11 };

/* Bank D func3 */
static const unsigned int uart_c_tx_pins[]  = { GPIOD_2 };
static const unsigned int uart_c_rx_pins[]  = { GPIOD_3 };
static const unsigned int pwm_b_d_pins[]  = { GPIOD_4 };
static const unsigned int pwm_a_d_pins[]  = { GPIOD_6 };
static const unsigned int pwm_c_d_pins[]  = { GPIOD_7 };
static const unsigned int pwm_d_d_pins[]  = { GPIOD_8 };
static const unsigned int pwm_i_d_pins[]  = { GPIOD_9 };

/* Bank D func4 */
static const unsigned int clk_32k_in_pins[]  = { GPIOD_2 };
static const unsigned int pwm_b_hiz_pins[]  = { GPIOD_4 };
static const unsigned int pwm_a_hiz_pins[]  = { GPIOD_6 };
static const unsigned int pwm_c_hiz_pins[]  = { GPIOD_7 };
static const unsigned int pdm_dclk_d_pins[]  = { GPIOD_8 };
static const unsigned int pdm_din0_d_pins[]  = { GPIOD_9 };
static const unsigned int pdm_din1_d_pins[]  = { GPIOD_10 };

/* Bank D func5 */
static const unsigned int mic_mute_en_pins[]  = { GPIOD_2 };
static const unsigned int mic_mute_key_pins[]  = { GPIOD_3 };
static const unsigned int i2c1_sda_d_pins[]  = { GPIOD_6 };
static const unsigned int i2c1_scl_d_pins[]  = { GPIOD_7 };
static const unsigned int i2c2_sda_d_pins[]  = { GPIOD_10 };
static const unsigned int i2c2_scl_d_pins[]  = { GPIOD_11 };

/* Bank D func6 */
static const unsigned int gen_clk_d_pins[]  = { GPIOD_10 };
static const unsigned int tsin_b_clk_c_pins[]  = { GPIOD_6 };
static const unsigned int tsin_b_sop_c_pins[]  = { GPIOD_7 };
static const unsigned int tsin_b_valid_c_pins[]  = { GPIOD_8 };
static const unsigned int tsin_b_d0_c_pins[]  = { GPIOD_9 };

/* Bank H func1 */
static const unsigned int hdmitx_sda_pins[]  = { GPIOH_0 };
static const unsigned int hdmitx_sck_pins[]  = { GPIOH_1 };
static const unsigned int hdmitx_hpd_in_pins[]  = { GPIOH_2 };
static const unsigned int ao_cec_a_pins[]  = { GPIOH_3 };
static const unsigned int spdif_out_h_pins[]  = { GPIOH_4 };
static const unsigned int spdif_in_pins[]  = { GPIOH_5 };
static const unsigned int i2c1_sda_h_pins[]  = { GPIOH_6 };
static const unsigned int i2c1_scl_h_pins[]  = { GPIOH_7 };
static const unsigned int i2c2_sda_h8_pins[]  = { GPIOH_8 };
static const unsigned int i2c2_scl_h9_pins[]  = { GPIOH_9 };
static const unsigned int eth_link_led_pins[]  = { GPIOH_10 };
static const unsigned int eth_act_led_pins[]  = { GPIOH_11 };

/* Bank H func2 */
static const unsigned int i2c2_sda_h0_pins[]  = { GPIOH_0 };
static const unsigned int i2c2_scl_h1_pins[]  = { GPIOH_1 };
static const unsigned int ao_cec_b_pins[]  = { GPIOH_3 };
static const unsigned int uart_d_tx_h_pins[]  = { GPIOH_4 };
static const unsigned int uart_d_rx_h_pins[]  = { GPIOH_5 };
static const unsigned int uart_d_cts_h_pins[]  = { GPIOH_6 };
static const unsigned int uart_d_rts_h_pins[]  = { GPIOH_7 };
static const unsigned int iso7816_clk_h_pins[]  = { GPIOH_8 };
static const unsigned int iso7816_data_h_pins[]  = { GPIOH_9 };
static const unsigned int uart_e_tx_h_pins[]  = { GPIOH_10 };
static const unsigned int uart_e_rx_h_pins[]  = { GPIOH_11 };

/* Bank H func3 */
static const unsigned int pwm_d_h_pins[]  = { GPIOH_6 };
static const unsigned int pwm_i_h_pins[]  = { GPIOH_7 };
static const unsigned int pdm_dclk_h_pins[]  = { GPIOH_8 };
static const unsigned int pdm_din0_h_pins[]  = { GPIOH_9 };
static const unsigned int pdm_din1_h_pins[]  = { GPIOH_10 };

/* Bank H func4 */
static const unsigned int mclk_1_h_pins[]  = { GPIOH_4 };
static const unsigned int tdm_sclk1_h_pins[]  = { GPIOH_5 };
static const unsigned int tdm_fs1_h_pins[]  = { GPIOH_6 };
static const unsigned int tdm_d2_h_pins[]  = { GPIOH_7 };
static const unsigned int tdm_d3_h_pins[]  = { GPIOH_8 };
static const unsigned int tdm_d4_h_pins[]  = { GPIOH_9 };

/* Bank H func5 */
static const unsigned int spi_a_miso_h_pins[]  = { GPIOH_4 };
static const unsigned int spi_a_mosi_h_pins[]  = { GPIOH_5 };
static const unsigned int spi_a_clk_h_pins[]  = { GPIOH_6 };
static const unsigned int spi_a_ss0_h_pins[]  = { GPIOH_7 };

/* Bank H func6 */
static const unsigned int gen_clk_h_pins[]  = { GPIOH_11 };
static const unsigned int tsin_b1_clk_pins[]  = { GPIOH_4 };
static const unsigned int tsin_b1_sop_pins[]  = { GPIOH_5 };
static const unsigned int tsin_b1_valid_pins[]  = { GPIOH_6 };
static const unsigned int tsin_b1_d0_pins[]  = { GPIOH_7 };

/* Bank X func1 */
static const unsigned int sdio_d0_pins[]  = { GPIOX_0 };
static const unsigned int sdio_d1_pins[]  = { GPIOX_1 };
static const unsigned int sdio_d2_pins[]  = { GPIOX_2 };
static const unsigned int sdio_d3_pins[]  = { GPIOX_3 };
static const unsigned int sdio_clk_pins[]  = { GPIOX_4 };
static const unsigned int sdio_cmd_pins[]  = { GPIOX_5 };
static const unsigned int pwm_a_x_pins[]  = { GPIOX_6 };
static const unsigned int pwm_f_x_pins[]  = { GPIOX_7 };
static const unsigned int tdm_d1_pins[]   = { GPIOX_8 };
static const unsigned int tdm_d0_pins[]   = { GPIOX_9 };
static const unsigned int tdm_fs0_pins[]  = { GPIOX_10 };
static const unsigned int tdm_sclk0_pins[]  = { GPIOX_11 };
static const unsigned int uart_a_tx_pins[]  = { GPIOX_12 };
static const unsigned int uart_a_rx_pins[]  = { GPIOX_13 };
static const unsigned int uart_a_cts_pins[]  = { GPIOX_14 };
static const unsigned int uart_a_rts_pins[]  = { GPIOX_15 };
static const unsigned int pwm_e_x_pins[]  = { GPIOX_16 };
static const unsigned int i2c1_sda_x_pins[]  = { GPIOX_17 };
static const unsigned int i2c1_scl_x_pins[]  = { GPIOX_18 };
static const unsigned int pwm_b_x_pins[]  = { GPIOX_19 };

/* Bank X func2 */
static const unsigned int pdm_din0_x_pins[]  = { GPIOX_8 };
static const unsigned int pdm_din1_x_pins[]  = { GPIOX_9 };
static const unsigned int pdm_dclk_x_pins[]  = { GPIOX_11 };

/* Bank X func3 */
static const unsigned int spi_a_mosi_x_pins[]  = { GPIOX_8 };
static const unsigned int spi_a_miso_x_pins[]  = { GPIOX_9 };
static const unsigned int spi_a_ss0_x_pins[]  = { GPIOX_10 };
static const unsigned int spi_a_clk_x_pins[]  = { GPIOX_11 };

/* Bank X func4 */
static const unsigned int pwm_c_x_pins[]  = { GPIOX_8 };
static const unsigned int i2c_slave_scl_pins[]  = { GPIOX_10 };
static const unsigned int i2c_slave_sda_pins[]  = { GPIOX_11 };

/* Bank X func5 */
static const unsigned int i2c3_sda_x_pins[]  = { GPIOX_10 };
static const unsigned int i2c3_scl_x_pins[]  = { GPIOX_11 };

/* Bank Z func1 */
static const unsigned int tdm_fs2_pins[]  = { GPIOZ_0 };
static const unsigned int tdm_sclk2_pins[]  = { GPIOZ_1 };
static const unsigned int tdm_d4_z_pins[]  = { GPIOZ_2 };
static const unsigned int tdm_d5_z_pins[]  = { GPIOZ_3 };
static const unsigned int tdm_d6_pins[]   = { GPIOZ_4 };
static const unsigned int tdm_d7_pins[]   = { GPIOZ_5 };
static const unsigned int mclk_2_pins[]   = { GPIOZ_6 };
static const unsigned int spdif_out_z_pins[]  = { GPIOZ_9 };
static const unsigned int dtv_a_if_agc_z10_pins[] = { GPIOZ_10 };
static const unsigned int uart_e_tx_z11_pins[]  = { GPIOZ_11 };
static const unsigned int uart_e_rx_z12_pins[]  = { GPIOZ_12 };

/* Bank Z func2 */
static const unsigned int tsin_a_clk_pins[]  = { GPIOZ_0 };
static const unsigned int tsin_a_sop_pins[]  = { GPIOZ_1 };
static const unsigned int tsin_a_valid_pins[]  = { GPIOZ_2 };
static const unsigned int tsin_a_din0_pins[]  = { GPIOZ_3 };
static const unsigned int dtv_a_if_agc_z6_pins[] = { GPIOZ_6 };
static const unsigned int dtv_b_if_agc_pins[]  = { GPIOZ_7 };
static const unsigned int i2c3_sda_z_pins[]  = { GPIOZ_8 };
static const unsigned int i2c3_scl_z_pins[]  = { GPIOZ_9 };
static const unsigned int dtv_a_rf_agc_pins[]  = { GPIOZ_10 };
static const unsigned int dtv_b_rf_agc_pins[]  = { GPIOZ_11 };

/* Bank Z func3 */
static const unsigned int sdcard_d0_z_pins[]  = { GPIOZ_0 };
static const unsigned int sdcard_d1_z_pins[]  = { GPIOZ_1 };
static const unsigned int sdcard_d2_z_pins[]  = { GPIOZ_2 };
static const unsigned int sdcard_d3_z_pins[]  = { GPIOZ_3 };
static const unsigned int sdcard_clk_z_pins[]  = { GPIOZ_4 };
static const unsigned int sdcard_cmd_z_pins[]  = { GPIOZ_5 };
static const unsigned int uart_e_tx_z8_pins[]  = { GPIOZ_8 };
static const unsigned int uart_e_rx_z9_pins[]  = { GPIOZ_9 };
static const unsigned int pdm_din1_z_pins[]  = { GPIOZ_10 };
static const unsigned int pdm_din0_z_pins[]  = { GPIOZ_11 };
static const unsigned int pdm_dclk_z_pins[]  = { GPIOZ_12 };

/* Bank Z func4 */
static const unsigned int spi_a_miso_z_pins[]  = { GPIOZ_0 };
static const unsigned int spi_a_mosi_z_pins[]  = { GPIOZ_1 };
static const unsigned int spi_a_clk_z_pins[]  = { GPIOZ_2 };
static const unsigned int spi_a_ss0_z_pins[]  = { GPIOZ_3 };
static const unsigned int spi_a_ss1_z_pins[]  = { GPIOZ_4 };
static const unsigned int spi_a_ss2_z_pins[]  = { GPIOZ_5 };
static const unsigned int i2c4_scl_z_pins[]  = { GPIOZ_11 };
static const unsigned int i2c4_sda_z_pins[]  = { GPIOZ_12 };

/* Bank Z func5 */
static const unsigned int uart_d_tx_z_pins[]  = { GPIOZ_0 };
static const unsigned int uart_d_rx_z_pins[]  = { GPIOZ_1 };
static const unsigned int uart_d_cts_z_pins[]  = { GPIOZ_2 };
static const unsigned int uart_d_rts_z_pins[]  = { GPIOZ_3 };
static const unsigned int pwm_g_z_pins[]  = { GPIOZ_4 };
static const unsigned int pwm_f_z_pins[]  = { GPIOZ_5 };
static const unsigned int pwm_e_z_pins[]  = { GPIOZ_6 };
static const unsigned int tsin_b_clk_z_pins[]  = { GPIOZ_7 };
static const unsigned int tsin_b_sop_z_pins[]  = { GPIOZ_10 };
static const unsigned int tsin_b_valid_z_pins[]  = { GPIOZ_11 };
static const unsigned int tsin_b_d0_z_pins[]  = { GPIOZ_12 };

/* Bank Z func6 */
static const unsigned int s2_demod_gpio7_pins[]  = { GPIOZ_0 };
static const unsigned int s2_demod_gpio6_pins[]  = { GPIOZ_1 };
static const unsigned int s2_demod_gpio5_pins[]  = { GPIOZ_2 };
static const unsigned int s2_demod_gpio4_pins[]  = { GPIOZ_3 };
static const unsigned int s2_demod_gpio3_pins[]  = { GPIOZ_4 };
static const unsigned int s2_demod_gpio2_pins[]  = { GPIOZ_5 };
static const unsigned int diseqc_out_pins[]  = { GPIOZ_7 };
static const unsigned int s2_demod_gpio1_pins[]  = { GPIOZ_8 };
static const unsigned int s2_demod_gpio0_pins[]  = { GPIOZ_12 };

/* Bank Z func7 */
static const unsigned int gen_clk_z9_pins[]  = { GPIOZ_9 };
static const unsigned int gen_clk_z12_pins[]  = { GPIOZ_12 };

static const struct meson_pmx_group meson_s4_periphs_groups[] = {
 GPIO_GROUP(GPIOE_0),
 GPIO_GROUP(GPIOE_1),

 GPIO_GROUP(GPIOB_0),
 GPIO_GROUP(GPIOB_1),
 GPIO_GROUP(GPIOB_2),
 GPIO_GROUP(GPIOB_3),
 GPIO_GROUP(GPIOB_4),
 GPIO_GROUP(GPIOB_5),
 GPIO_GROUP(GPIOB_6),
 GPIO_GROUP(GPIOB_7),
 GPIO_GROUP(GPIOB_8),
 GPIO_GROUP(GPIOB_9),
 GPIO_GROUP(GPIOB_10),
 GPIO_GROUP(GPIOB_11),
 GPIO_GROUP(GPIOB_12),
 GPIO_GROUP(GPIOB_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(GPIOD_0),
 GPIO_GROUP(GPIOD_1),
 GPIO_GROUP(GPIOD_2),
 GPIO_GROUP(GPIOD_3),
 GPIO_GROUP(GPIOD_4),
 GPIO_GROUP(GPIOD_5),
 GPIO_GROUP(GPIOD_6),
 GPIO_GROUP(GPIOD_7),
 GPIO_GROUP(GPIOD_8),
 GPIO_GROUP(GPIOD_9),
 GPIO_GROUP(GPIOD_10),
 GPIO_GROUP(GPIOD_11),

 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(GPIOX_0),
 GPIO_GROUP(GPIOX_1),
 GPIO_GROUP(GPIOX_2),
 GPIO_GROUP(GPIOX_3),
 GPIO_GROUP(GPIOX_4),
 GPIO_GROUP(GPIOX_5),
 GPIO_GROUP(GPIOX_6),
 GPIO_GROUP(GPIOX_7),
 GPIO_GROUP(GPIOX_8),
 GPIO_GROUP(GPIOX_9),
 GPIO_GROUP(GPIOX_10),
 GPIO_GROUP(GPIOX_11),
 GPIO_GROUP(GPIOX_12),
 GPIO_GROUP(GPIOX_13),
 GPIO_GROUP(GPIOX_14),
 GPIO_GROUP(GPIOX_15),
 GPIO_GROUP(GPIOX_16),
 GPIO_GROUP(GPIOX_17),
 GPIO_GROUP(GPIOX_18),
 GPIO_GROUP(GPIOX_19),

 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(GPIOZ_11),
 GPIO_GROUP(GPIOZ_12),

 GPIO_GROUP(GPIO_TEST_N),

 /* BANK E func1 */
 GROUP(i2c0_sda,   1),
 GROUP(i2c0_scl,   1),

 /* BANK E func2 */
 GROUP(uart_b_tx_e,  2),
 GROUP(uart_b_rx_e,  2),

 /* BANK E func3 */
 GROUP(pwm_h,   3),
 GROUP(pwm_j,   3),

 /* BANK B func1 */
 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_rst,   1),
 GROUP(emmc_cmd,   1),
 GROUP(emmc_nand_ds,  1),

 /* Bank B func2 */
 GROUP(nand_wen_clk,  2),
 GROUP(nand_ale,   2),
 GROUP(nand_ren_wr,  2),
 GROUP(nand_cle,   2),
 GROUP(nand_ce0,   2),

 /* Bank B func3 */
 GROUP(spif_hold,  3),
 GROUP(spif_mo,   3),
 GROUP(spif_mi,   3),
 GROUP(spif_clk,   3),
 GROUP(spif_wp,   3),
 GROUP(spif_cs,   3),

 /* Bank C func1 */
 GROUP(sdcard_d0_c,  1),
 GROUP(sdcard_d1_c,  1),
 GROUP(sdcard_d2_c,  1),
 GROUP(sdcard_d3_c,  1),
 GROUP(sdcard_clk_c,  1),
 GROUP(sdcard_cmd_c,  1),
 GROUP(sdcard_cd,  1),

 /* Bank C func2 */
 GROUP(jtag_2_tdo,  2),
 GROUP(jtag_2_tdi,  2),
 GROUP(uart_b_rx_c,  2),
 GROUP(uart_b_tx_c,  2),
 GROUP(jtag_2_clk,  2),
 GROUP(jtag_2_tms,  2),
 GROUP(i2c1_sda_c,  2),
 GROUP(i2c1_scl_c,  2),

 /* Bank C func3 */
 GROUP(pdm_din1_c,  3),
 GROUP(pdm_din0_c,  3),
 GROUP(i2c4_sda_c,  3),
 GROUP(i2c4_scl_c,  3),
 GROUP(pdm_dclk_c,  3),
 GROUP(iso7816_clk_c,  3),
 GROUP(iso7816_data_c,  3),

 /* Bank C func4 */
 GROUP(tdm_d2_c,   4),
 GROUP(tdm_d3_c,   4),
 GROUP(tdm_fs1_c,  4),
 GROUP(tdm_sclk1_c,  4),
 GROUP(mclk_1_c,   4),
 GROUP(tdm_d4_c,   4),
 GROUP(tdm_d5_c,   4),

 /* Bank D func1 */
 GROUP(uart_b_tx_d,  1),
 GROUP(uart_b_rx_d,  1),
 GROUP(uart_b_cts_d,  1),
 GROUP(uart_b_rts_d,  1),
 GROUP(remote_out,  1),
 GROUP(remote_in,  1),
 GROUP(jtag_1_clk,  1),
 GROUP(jtag_1_tms,  1),
 GROUP(jtag_1_tdi,  1),
 GROUP(jtag_1_tdo,  1),
 GROUP(clk12_24,   1),
 GROUP(pwm_g_hiz,  1),

 /* Bank D func2 */
 GROUP(i2c4_sda_d,  2),
 GROUP(i2c4_scl_d,  2),
 GROUP(mclk_1_d,   2),
 GROUP(tdm_sclk1_d,  2),
 GROUP(tdm_fs1_d,  2),
 GROUP(tdm_d4_d,   2),
 GROUP(tdm_d3_d,   2),
 GROUP(tdm_d2_d,   2),
 GROUP(pwm_g_d,   2),

 /* Bank D func3 */
 GROUP(uart_c_tx,  3),
 GROUP(uart_c_rx,  3),
 GROUP(pwm_b_d,   3),
 GROUP(pwm_a_d,   3),
 GROUP(pwm_c_d,   3),
 GROUP(pwm_d_d,   3),
 GROUP(pwm_i_d,   3),

 /* Bank D func4 */
 GROUP(clk_32k_in,  4),
 GROUP(pwm_b_hiz,  4),
 GROUP(pwm_a_hiz,  4),
 GROUP(pwm_c_hiz,  4),
 GROUP(pdm_dclk_d,  4),
 GROUP(pdm_din0_d,  4),
 GROUP(pdm_din1_d,  4),

 /* Bank D func5 */
 GROUP(mic_mute_en,  5),
 GROUP(mic_mute_key,  5),
 GROUP(i2c1_sda_d,  5),
 GROUP(i2c1_scl_d,  5),
 GROUP(i2c2_sda_d,  5),
 GROUP(i2c2_scl_d,  5),

 /* Bank D func6 */
 GROUP(gen_clk_d,  6),
 GROUP(tsin_b_clk_c,  6),
 GROUP(tsin_b_sop_c,  6),
 GROUP(tsin_b_valid_c,  6),
 GROUP(tsin_b_d0_c,  6),

 /* Bank H func1 */
 GROUP(hdmitx_sda,  1),
 GROUP(hdmitx_sck,  1),
 GROUP(hdmitx_hpd_in,  1),
 GROUP(ao_cec_a,   1),
 GROUP(spdif_out_h,  1),
 GROUP(spdif_in,   1),
 GROUP(i2c1_sda_h,  1),
 GROUP(i2c1_scl_h,  1),
 GROUP(i2c2_sda_h8,  1),
 GROUP(i2c2_scl_h9,  1),
 GROUP(eth_link_led,  1),
 GROUP(eth_act_led,  1),

 /* Bank H func2 */
 GROUP(i2c2_sda_h0,  2),
 GROUP(i2c2_scl_h1,  2),
 GROUP(ao_cec_b,   2),
 GROUP(uart_d_tx_h,  2),
 GROUP(uart_d_rx_h,  2),
 GROUP(uart_d_cts_h,  2),
 GROUP(uart_d_rts_h,  2),
 GROUP(iso7816_clk_h,  2),
 GROUP(iso7816_data_h,  2),
 GROUP(uart_e_tx_h,  2),
 GROUP(uart_e_rx_h,  2),

 /* Bank H func3 */
 GROUP(pwm_d_h,   3),
 GROUP(pwm_i_h,   3),
 GROUP(pdm_dclk_h,  3),
 GROUP(pdm_din0_h,  3),
 GROUP(pdm_din1_h,  3),

 /* Bank H func4 */
 GROUP(mclk_1_h,   4),
 GROUP(tdm_sclk1_h,  4),
 GROUP(tdm_fs1_h,  4),
 GROUP(tdm_d2_h,   4),
 GROUP(tdm_d3_h,   4),
 GROUP(tdm_d4_h,   4),

 /* Bank H func5 */
 GROUP(spi_a_miso_h,  5),
 GROUP(spi_a_mosi_h,  5),
 GROUP(spi_a_clk_h,  5),
 GROUP(spi_a_ss0_h,  5),

 /* Bank H func6 */
 GROUP(gen_clk_h,  6),
 GROUP(tsin_b1_clk,  6),
 GROUP(tsin_b1_sop,  6),
 GROUP(tsin_b1_valid,  6),
 GROUP(tsin_b1_d0,  6),

 /* Bank X func1 */
 GROUP(sdio_d0,   1),
 GROUP(sdio_d1,   1),
 GROUP(sdio_d2,   1),
 GROUP(sdio_d3,   1),
 GROUP(sdio_clk,   1),
 GROUP(sdio_cmd,   1),
 GROUP(pwm_a_x,   1),
 GROUP(pwm_f_x,   1),
 GROUP(tdm_d1,   1),
 GROUP(tdm_d0,   1),
 GROUP(tdm_fs0,   1),
 GROUP(tdm_sclk0,  1),
 GROUP(uart_a_tx,  1),
 GROUP(uart_a_rx,  1),
 GROUP(uart_a_cts,  1),
 GROUP(uart_a_rts,  1),
 GROUP(pwm_e_x,   1),
 GROUP(i2c1_sda_x,  1),
 GROUP(i2c1_scl_x,  1),
 GROUP(pwm_b_x,   1),

 /* Bank X func2 */
 GROUP(pdm_din0_x,  2),
 GROUP(pdm_din1_x,  2),
 GROUP(pdm_dclk_x,  2),

 /* Bank X func3 */
 GROUP(spi_a_mosi_x,  3),
 GROUP(spi_a_miso_x,  3),
 GROUP(spi_a_ss0_x,  3),
 GROUP(spi_a_clk_x,  3),

 /* Bank X func4 */
 GROUP(pwm_c_x,   4),
 GROUP(i2c_slave_scl,  4),
 GROUP(i2c_slave_sda,  4),

 /* Bank X func5 */
 GROUP(i2c3_sda_x,  5),
 GROUP(i2c3_scl_x,  5),

 /* Bank Z func1 */
 GROUP(tdm_fs2,   1),
 GROUP(tdm_sclk2,  1),
 GROUP(tdm_d4_z,   1),
 GROUP(tdm_d5_z,   1),
 GROUP(tdm_d6,   1),
 GROUP(tdm_d7,   1),
 GROUP(mclk_2,   1),
 GROUP(spdif_out_z,  1),
 GROUP(dtv_a_if_agc_z10,  1),
 GROUP(uart_e_tx_z11,  1),
 GROUP(uart_e_rx_z12,  1),

 /* Bank Z func2 */
 GROUP(tsin_a_clk,  2),
 GROUP(tsin_a_sop,  2),
 GROUP(tsin_a_valid,  2),
 GROUP(tsin_a_din0,  2),
 GROUP(dtv_a_if_agc_z6,  2),
 GROUP(dtv_b_if_agc,  2),
 GROUP(i2c3_sda_z,  2),
 GROUP(i2c3_scl_z,  2),
 GROUP(dtv_a_rf_agc,  2),
 GROUP(dtv_b_rf_agc,  2),

 /* Bank Z func3 */
 GROUP(sdcard_d0_z,  3),
 GROUP(sdcard_d1_z,  3),
 GROUP(sdcard_d2_z,  3),
 GROUP(sdcard_d3_z,  3),
 GROUP(sdcard_clk_z,  3),
 GROUP(sdcard_cmd_z,  3),
 GROUP(uart_e_tx_z8,  3),
 GROUP(uart_e_rx_z9,  3),
 GROUP(pdm_din1_z,  3),
 GROUP(pdm_din0_z,  3),
 GROUP(pdm_dclk_z,  3),

 /* Bank Z func4 */
 GROUP(spi_a_miso_z,  4),
 GROUP(spi_a_mosi_z,  4),
 GROUP(spi_a_clk_z,  4),
 GROUP(spi_a_ss0_z,  4),
 GROUP(spi_a_ss1_z,  4),
 GROUP(spi_a_ss2_z,  4),
 GROUP(i2c4_scl_z,  4),
 GROUP(i2c4_sda_z,  4),

 /* Bank Z func5 */
 GROUP(uart_d_tx_z,  5),
 GROUP(uart_d_rx_z,  5),
 GROUP(uart_d_cts_z,  5),
 GROUP(uart_d_rts_z,  5),
 GROUP(pwm_g_z,   5),
 GROUP(pwm_f_z,   5),
 GROUP(pwm_e_z,   5),
 GROUP(tsin_b_clk_z,  5),
 GROUP(tsin_b_sop_z,  5),
 GROUP(tsin_b_valid_z,  5),
 GROUP(tsin_b_d0_z,  5),

 /* Bank Z func6 */
 GROUP(s2_demod_gpio7,  6),
 GROUP(s2_demod_gpio6,  6),
 GROUP(s2_demod_gpio5,  6),
 GROUP(s2_demod_gpio4,  6),
 GROUP(s2_demod_gpio3,  6),
 GROUP(s2_demod_gpio2,  6),
 GROUP(diseqc_out,  6),
 GROUP(s2_demod_gpio1,  6),
 GROUP(s2_demod_gpio0,  6),

 /* Bank Z func7 */
 GROUP(gen_clk_z9,  7),
 GROUP(gen_clk_z12,  7),
};

static const char * const gpio_periphs_groups[] = {
 "GPIOE_0""GPIOE_1",

 "GPIOB_0""GPIOB_1""GPIOB_2""GPIOB_3""GPIOB_4""GPIOB_5",
 "GPIOB_6""GPIOB_7""GPIOB_8""GPIOB_9""GPIOB_10""GPIOB_11",
 "GPIOB_12""GPIOB_13",

 "GPIOC_0""GPIOC_1""GPIOC_2""GPIOC_3""GPIOC_4""GPIOC_5",
 "GPIOC_6""GPIOC_7",

 "GPIOD_0""GPIOD_1""GPIOD_2""GPIOD_3""GPIOD_4""GPIOD_5",
 "GPIOD_6""GPIOD_7""GPIOD_8""GPIOD_9""GPIOD_10""GPIOD_11",

 "GPIOH_0""GPIOH_1""GPIOH_2""GPIOH_3""GPIOH_4""GPIOH_5",
 "GPIOH_6""GPIOH_7""GPIOH_8""GPIOH_9""GPIOH_10""GPIOH_11",

 "GPIOX_0""GPIOX_1""GPIOX_2""GPIOX_3""GPIOX_4""GPIOX_5",
 "GPIOX_6""GPIOX_7""GPIOX_8""GPIOX_9""GPIOX_10""GPIOX_11",
 "GPIOX_12""GPIOX_13""GPIOX_14""GPIOX_15""GPIOX_16""GPIOX_17",
 "GPIOX_18""GPIOX_19",

 "GPIOZ_0""GPIOZ_1""GPIOZ_2""GPIOZ_3""GPIOZ_4""GPIOZ_5",
 "GPIOZ_6""GPIOZ_7""GPIOZ_8""GPIOZ_9""GPIOZ_10",
 "GPIOZ_11""GPIOZ_12",

 "GPIO_TEST_N",
};

static const char * const i2c0_groups[] = {
 "i2c0_sda""i2c0_scl",
};

static const char * const i2c1_groups[] = {
 "i2c1_sda_c""i2c1_scl_c",
 "i2c1_sda_d""i2c1_scl_d",
 "i2c1_sda_h""i2c1_scl_h",
 "i2c1_sda_x""i2c1_scl_x",
};

static const char * const i2c2_groups[] = {
 "i2c2_sda_d""i2c2_scl_d",
 "i2c2_sda_h8""i2c2_scl_h9",
 "i2c2_sda_h0""i2c2_scl_h1l,"
};

static const char * const i2c3_groups[] = {
 "i2c3_sda_x""i2c3_scl_x",
 "i2c3_sda_z""i2c3_scl_z",
};

static const char * const i2c4_groups[] = {
 "i2c4_sda_c""i2c4_scl_c",
 "i2c4_sda_d""i2c4_scl_d",
 "i2c4_scl_z""i2c4_sda_z",
};

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_e""uart_b_rx_e""uart_b_rx_c""uart_b_tx_c",
 "uart_b_tx_d""uart_b_rx_d""uart_b_cts_d""uart_b_rts_d",
};

static const char * const uart_c_groups[] = {
 "uart_c_tx""uart_c_rx",
};

static const char * const uart_d_groups[] = {
 "uart_d_tx_h""uart_d_rx_h""uart_d_cts_h""uart_d_rts_h",
 "uart_d_tx_z""uart_d_rx_z""uart_d_cts_z""uart_d_rts_z",
};

static const char * const uart_e_groups[] = {
 "uart_e_tx_h""uart_e_rx_h""uart_e_tx_z11""uart_e_rx_z12",
 "uart_e_tx_z8""uart_e_rx_z9",
};

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_rst""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_wen_clk""nand_ale""nand_ren_wr""nand_cle""nand_ce0",
};

static const char * const spif_groups[] = {
 "spif_hold""spif_mo""spif_mi""spif_clk""spif_wp",
 "spif_cs",
};

static const char * const sdcard_groups[] = {
 "sdcard_d0_c""sdcard_d1_c""sdcard_d2_c""sdcard_d3_c",
 "sdcard_clk_c""sdcard_cmd_c""sdcard_cd",
 "sdcard_d0_z""sdcard_d1_z""sdcard_d2_z""sdcard_d3_z",
 "sdcard_clk_z""sdcard_cmd_z",
};

static const char * const jtag_1_groups[] = {
 "jtag_1_clk""jtag_1_tms""jtag_1_tdi""jtag_1_tdo",
};

static const char * const jtag_2_groups[] = {
 "jtag_2_tdo""jtag_2_tdi""jtag_2_clk""jtag_2_tms",
};

static const char * const pdm_groups[] = {
 "pdm_din1_c""pdm_din0_c""pdm_dclk_c",
 "pdm_dclk_d""pdm_din0_d""pdm_din1_d",
 "pdm_dclk_h""pdm_din0_h""pdm_din1_h",
 "pdm_din0_x""pdm_din1_x""pdm_dclk_x",
 "pdm_din1_z""pdm_din0_z""pdm_dclk_z",
};

static const char * const iso7816_groups[] = {
 "iso7816_clk_c""iso7816_data_c",
 "iso7816_clk_h""iso7816_data_h",
};

static const char * const tdm_groups[] = {
 "tdm_d2_c""tdm_d3_c""tdm_fs1_c""tdm_d4_c""tdm_d5_c""tdm_sclk1_c",
 "tdm_fs1_d""tdm_d4_d""tdm_d3_d""tdm_d2_d""tdm_sclk1_d",
 "tdm_sclk1_h""tdm_fs1_h""tdm_d2_h""tdm_d3_h""tdm_d4_h",
 "tdm_d1""tdm_d0""tdm_fs0""tdm_sclk0""tdm_fs2""tdm_sclk2",
 "tdm_d4_z""tdm_d5_z""tdm_d6""tdm_d7",
};

static const char * const mclk_1_groups[] = {
 "mclk_1_c""mclk_1_d""mclk_1_h""mclk_2",
};

static const char * const mclk_2_groups[] = {
 "mclk_2",
};

static const char * const remote_out_groups[] = {
 "remote_out",
};

static const char * const remote_in_groups[] = {
 "remote_in",
};

static const char * const clk12_24_groups[] = {
 "clk12_24",
};

static const char * const clk_32k_in_groups[] = {
 "clk_32k_in",
};

static const char * const pwm_a_hiz_groups[] = {
 "pwm_a_hiz",
};

static const char * const pwm_b_hiz_groups[] = {
 "pwm_b_hiz",
};

static const char * const pwm_c_hiz_groups[] = {
 "pwm_c_hiz",
};

static const char * const pwm_g_hiz_groups[] = {
 "pwm_g_hiz",
};

static const char * const pwm_a_groups[] = {
 "pwm_a_d",
};

static const char * const pwm_b_groups[] = {
 "pwm_b_d""pwm_b_x",
};

static const char * const pwm_c_groups[] = {
 "pwm_c_d""pwm_c_x",
};

static const char * const pwm_d_groups[] = {
 "pwm_d_d""pwm_d_h",
};

static const char * const pwm_e_groups[] = {
 "pwm_e_x""pwm_e_z",
};

static const char * const pwm_f_groups[] = {
 "pwm_f_x""pwm_f_z",
};

static const char * const pwm_g_groups[] = {
 "pwm_g_d""pwm_g_z",
};

static const char * const pwm_h_groups[] = {
 "pwm_h",
};

static const char * const pwm_i_groups[] = {
 "pwm_i_d""pwm_i_h"
};

static const char * const pwm_j_groups[] = {
 "pwm_j",
};

static const char * const mic_mute_groups[] = {
 "mic_mute_en""mic_mute_key",
};

static const char * const hdmitx_groups[] = {
 "hdmitx_sda""hdmitx_sck""hdmitx_hpd_in",
};

static const char * const ao_cec_a_groups[] = {
 "ao_cec_a",
};

static const char * const ao_cec_b_groups[] = {
 "ao_cec_b",
};

static const char * const spdif_out_groups[] = {
 "spdif_out_h""spdif_out_z",
};

static const char * const spdif_in_groups[] = {
 "spdif_in",
};

static const char * const eth_groups[] = {
 "eth_link_led""eth_act_led",
};

static const char * const spi_a_groups[] = {
 "spi_a_miso_h""spi_a_mosi_h""spi_a_clk_h""spi_a_ss0_h",

 "spi_a_mosi_x""spi_a_miso_x""spi_a_ss0_x""spi_a_clk_x",

 "spi_a_miso_z""spi_a_mosi_z""spi_a_clk_z""spi_a_ss0_z",
 "spi_a_ss1_z""spi_a_ss2_z",
};

static const char * const gen_clk_groups[] = {
 "gen_clk_h""gen_clk_z9""gen_clk_z12",
};

static const char * const sdio_groups[] = {
 "sdio_d0""sdio_d1""sdio_d2""sdio_d3""sdio_clk""sdio_cmd",
};

static const char * const i2c_slave_groups[] = {
 "i2c_slave_scl""i2c_slave_sda",
};

static const char * const dtv_groups[] = {
 "dtv_a_if_agc_z10""dtv_a_if_agc_z6""dtv_b_if_agc",
 "dtv_a_rf_agc""dtv_b_rf_agc",
};

static const char * const tsin_a_groups[] = {
 "tsin_a_clk""tsin_a_sop""tsin_a_valid""tsin_a_din0",
};

static const char * const tsin_b_groups[] = {
 "tsin_b_clk_c""tsin_b_sop_c""tsin_b_valid_c""tsin_b_d0_c",
 "tsin_b_clk_z""tsin_b_sop_z""tsin_b_valid_z""tsin_b_d0_z",
};

static const char * const tsin_b1_groups[] = {
 "tsin_b1_clk""tsin_b1_sop""tsin_b1_valid""tsin_b1_d0",
};

static const char * const diseqc_out_groups[] = {
 "diseqc_out",
};

static const char * const s2_demod_groups[] = {
 "s2_demod_gpio7""s2_demod_gpio6""s2_demod_gpio5""s2_demod_gpio4",
 "s2_demod_gpio3""s2_demod_gpio2""s2_demod_gpio1""s2_demod_gpio0",
};

static const struct meson_pmx_func meson_s4_periphs_functions[] = {
 FUNCTION(gpio_periphs),
 FUNCTION(i2c0),
 FUNCTION(i2c1),
 FUNCTION(i2c2),
 FUNCTION(i2c3),
 FUNCTION(i2c4),
 FUNCTION(uart_a),
 FUNCTION(uart_b),
 FUNCTION(uart_c),
 FUNCTION(uart_d),
 FUNCTION(uart_e),
 FUNCTION(emmc),
 FUNCTION(nand),
 FUNCTION(spif),
 FUNCTION(sdcard),
 FUNCTION(jtag_1),
 FUNCTION(jtag_2),
 FUNCTION(pdm),
 FUNCTION(iso7816),
 FUNCTION(tdm),
 FUNCTION(mclk_1),
 FUNCTION(mclk_2),
 FUNCTION(remote_out),
 FUNCTION(remote_in),
 FUNCTION(clk12_24),
 FUNCTION(clk_32k_in),
 FUNCTION(pwm_a_hiz),
 FUNCTION(pwm_b_hiz),
 FUNCTION(pwm_c_hiz),
 FUNCTION(pwm_g_hiz),
 FUNCTION(pwm_a),
 FUNCTION(pwm_b),
 FUNCTION(pwm_c),
 FUNCTION(pwm_d),
 FUNCTION(pwm_e),
 FUNCTION(pwm_f),
 FUNCTION(pwm_g),
 FUNCTION(pwm_h),
 FUNCTION(pwm_i),
 FUNCTION(pwm_j),
 FUNCTION(mic_mute),
 FUNCTION(hdmitx),
 FUNCTION(ao_cec_a),
 FUNCTION(ao_cec_b),
 FUNCTION(spdif_out),
 FUNCTION(spdif_in),
 FUNCTION(eth),
 FUNCTION(spi_a),
 FUNCTION(gen_clk),
 FUNCTION(sdio),
 FUNCTION(i2c_slave),
 FUNCTION(dtv),
 FUNCTION(tsin_a),
 FUNCTION(tsin_b),
 FUNCTION(tsin_b1),
 FUNCTION(diseqc_out),
 FUNCTION(s2_demod),
};

static const struct meson_bank meson_s4_periphs_banks[] = {
 /* name  first  last  irq  pullen  pull  dir  out  in */
 BANK_DS("B", GPIOB_0,    GPIOB_13,  0, 13,
  0x63,  0,  0x64,  0,  0x62, 0,  0x61, 0,  0x60, 0, 0x67, 0),
 BANK_DS("C", GPIOC_0,    GPIOC_7,   14, 21,
  0x53,  0,  0x54,  0,  0x52, 0,  0x51, 0,  0x50, 0, 0x57, 0),
 BANK_DS("E", GPIOE_0,    GPIOE_1,   22, 23,
  0x43,  0,  0x44,  0,  0x42, 0,  0x41, 0,  0x40, 0, 0x47, 0),
 BANK_DS("D", GPIOD_0,    GPIOD_11,  24, 35,
  0x33,  0,  0x34,  0,  0x32, 0,  0x31, 0,  0x30, 0, 0x37, 0),
 BANK_DS("H", GPIOH_0,    GPIOH_11,  36, 47,
  0x23,  0,  0x24,  0,  0x22, 0,  0x21, 0,  0x20, 0, 0x27, 0),
 BANK_DS("X", GPIOX_0,    GPIOX_19,   48, 67,
  0x13,  0,  0x14,  0,  0x12, 0,  0x11, 0,  0x10, 0, 0x17, 0),
 BANK_DS("Z", GPIOZ_0,    GPIOZ_12,  68, 80,
  0x03,  0,  0x04,  0,  0x02, 0,  0x01, 0,  0x00, 0, 0x07, 0),
 BANK_DS("TEST_N", GPIO_TEST_N,    GPIO_TEST_N,   -1, -1,
  0x83,  0,  0x84,  0,  0x82, 0,  0x81,  0, 0x80, 0, 0x87, 0),
};

static const struct meson_pmx_bank meson_s4_periphs_pmx_banks[] = {
 /*name             first  lask        reg offset*/
 BANK_PMX("B",      GPIOB_0,     GPIOB_13,    0x00, 0),
 BANK_PMX("C",      GPIOC_0,     GPIOC_7,     0x9,  0),
 BANK_PMX("E",      GPIOE_0,     GPIOE_1,     0x12, 0),
 BANK_PMX("D",      GPIOD_0,     GPIOD_11,    0x10, 0),
 BANK_PMX("H",      GPIOH_0,     GPIOH_11,    0xb,  0),
 BANK_PMX("X",      GPIOX_0,     GPIOX_19,    0x3,  0),
 BANK_PMX("Z",      GPIOZ_0,     GPIOZ_12,    0x6,  0),
 BANK_PMX("TEST_N", GPIO_TEST_N, GPIO_TEST_N, 0xf,  0)
};

static const struct meson_axg_pmx_data meson_s4_periphs_pmx_banks_data = {
 .pmx_banks = meson_s4_periphs_pmx_banks,
 .num_pmx_banks = ARRAY_SIZE(meson_s4_periphs_pmx_banks),
};

static const struct meson_pinctrl_data meson_s4_periphs_pinctrl_data = {
 .name  = "periphs-banks",
 .pins  = meson_s4_periphs_pins,
 .groups  = meson_s4_periphs_groups,
 .funcs  = meson_s4_periphs_functions,
 .banks  = meson_s4_periphs_banks,
 .num_pins = ARRAY_SIZE(meson_s4_periphs_pins),
 .num_groups = ARRAY_SIZE(meson_s4_periphs_groups),
 .num_funcs = ARRAY_SIZE(meson_s4_periphs_functions),
 .num_banks = ARRAY_SIZE(meson_s4_periphs_banks),
 .pmx_ops = &meson_axg_pmx_ops,
 .pmx_data = &meson_s4_periphs_pmx_banks_data,
 .parse_dt = &meson_a1_parse_dt_extra,
};

static const struct of_device_id meson_s4_pinctrl_dt_match[] = {
 {
  .compatible = "amlogic,meson-s4-periphs-pinctrl",
  .data = &meson_s4_periphs_pinctrl_data,
 },
 { }
};
MODULE_DEVICE_TABLE(of, meson_s4_pinctrl_dt_match);

static struct platform_driver meson_s4_pinctrl_driver = {
 .probe  = meson_pinctrl_probe,
 .driver = {
  .name = "meson-s4-pinctrl",
  .of_match_table = meson_s4_pinctrl_dt_match,
 },
};
module_platform_driver(meson_s4_pinctrl_driver);

MODULE_DESCRIPTION("Amlogic Meson S4 SoC pinctrl driver");
MODULE_LICENSE("Dual BSD/GPL");

Messung V0.5
C=96 H=97 G=96

¤ Dauer der Verarbeitung: 0.11 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.