linux/drivers/pinctrl/actions/pinctrl-s900.c

// SPDX-License-Identifier: GPL-2.0+
/*
 * OWL S900 Pinctrl driver
 *
 * Copyright (c) 2014 Actions Semi Inc.
 * Author: David Liu <[email protected]>
 *
 * Copyright (c) 2018 Linaro Ltd.
 * Author: Manivannan Sadhasivam <[email protected]>
 */

#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinconf-generic.h>
#include "pinctrl-owl.h"

/* Pinctrl registers offset */
#define MFCTL0
#define MFCTL1
#define MFCTL2
#define MFCTL3
#define PAD_PULLCTL0
#define PAD_PULLCTL1
#define PAD_PULLCTL2
#define PAD_ST0
#define PAD_ST1
#define PAD_CTL
#define PAD_DRV0
#define PAD_DRV1
#define PAD_DRV2
#define PAD_SR0
#define PAD_SR1
#define PAD_SR2

#define _GPIOA(offset)
#define _GPIOB(offset)
#define _GPIOC(offset)
#define _GPIOD(offset)
#define _GPIOE(offset)
#define _GPIOF(offset)

#define NUM_GPIOS
#define _PIN(offset)

#define ETH_TXD0
#define ETH_TXD1
#define ETH_TXEN
#define ETH_RXER
#define ETH_CRS_DV
#define ETH_RXD1
#define ETH_RXD0
#define ETH_REF_CLK
#define ETH_MDC
#define ETH_MDIO
#define SIRQ0
#define SIRQ1
#define SIRQ2
#define I2S_D0
#define I2S_BCLK0
#define I2S_LRCLK0
#define I2S_MCLK0
#define I2S_D1
#define I2S_BCLK1
#define I2S_LRCLK1
#define I2S_MCLK1
#define ERAM_A5
#define ERAM_A6
#define ERAM_A7
#define ERAM_A8
#define ERAM_A9
#define ERAM_A10
#define ERAM_A11
#define SD0_D0
#define SD0_D1
#define SD0_D2
#define SD0_D3

#define SD1_D0
#define SD1_D1
#define SD1_D2
#define SD1_D3
#define SD0_CMD
#define SD0_CLK
#define SD1_CMD
#define SD1_CLK
#define SPI0_SCLK
#define SPI0_SS
#define SPI0_MISO
#define SPI0_MOSI
#define UART0_RX
#define UART0_TX
#define UART2_RX
#define UART2_TX
#define UART2_RTSB
#define UART2_CTSB
#define UART4_RX
#define UART4_TX
#define I2C0_SCLK
#define I2C0_SDATA
#define I2C1_SCLK
#define I2C1_SDATA
#define I2C2_SCLK
#define I2C2_SDATA
#define CSI0_DN0
#define CSI0_DP0
#define CSI0_DN1
#define CSI0_DP1
#define CSI0_CN
#define CSI0_CP

#define CSI0_DN2
#define CSI0_DP2
#define CSI0_DN3
#define CSI0_DP3
#define SENSOR0_PCLK
#define CSI1_DN0
#define CSI1_DP0
#define CSI1_DN1
#define CSI1_DP1
#define CSI1_CN
#define CSI1_CP
#define SENSOR0_CKOUT

#define LVDS_OEP
#define LVDS_OEN
#define LVDS_ODP
#define LVDS_ODN
#define LVDS_OCP
#define LVDS_OCN
#define LVDS_OBP
#define LVDS_OBN
#define LVDS_OAP
#define LVDS_OAN
#define LVDS_EEP
#define LVDS_EEN
#define LVDS_EDP
#define LVDS_EDN
#define LVDS_ECP
#define LVDS_ECN
#define LVDS_EBP
#define LVDS_EBN
#define LVDS_EAP
#define LVDS_EAN
#define DSI_DP3
#define DSI_DN3
#define DSI_DP1
#define DSI_DN1
#define DSI_CP
#define DSI_CN
#define DSI_DP0
#define DSI_DN0
#define DSI_DP2
#define DSI_DN2

#define NAND0_D0
#define NAND0_D1
#define NAND0_D2
#define NAND0_D3
#define NAND0_D4
#define NAND0_D5
#define NAND0_D6
#define NAND0_D7
#define NAND0_DQS
#define NAND0_DQSN
#define NAND0_ALE
#define NAND0_CLE
#define NAND0_CEB0
#define NAND0_CEB1
#define NAND0_CEB2
#define NAND0_CEB3
#define NAND1_D0
#define NAND1_D1
#define NAND1_D2
#define NAND1_D3
#define NAND1_D4
#define NAND1_D5
#define NAND1_D6
#define NAND1_D7
#define NAND1_DQS
#define NAND1_DQSN
#define NAND1_ALE
#define NAND1_CLE
#define NAND1_CEB0
#define NAND1_CEB1
#define NAND1_CEB2
#define NAND1_CEB3

#define PCM1_IN
#define PCM1_CLK
#define PCM1_SYNC
#define PCM1_OUT
#define UART3_RX
#define UART3_TX
#define UART3_RTSB
#define UART3_CTSB

/* System */
#define SGPIO0
#define SGPIO1
#define SGPIO2
#define SGPIO3

#define NUM_PADS

/* Pad names as specified in datasheet */
static const struct pinctrl_pin_desc s900_pads[] =;

enum s900_pinmux_functions {};

/* mfp0_22 */
static unsigned int lvds_oxx_uart4_mfp_pads[]	=;
static unsigned int lvds_oxx_uart4_mfp_funcs[]	=;
/* mfp0_21_20 */
static unsigned int rmii_mdc_mfp_pads[]		=;
static unsigned int rmii_mdc_mfp_funcs[]	=;
static unsigned int rmii_mdio_mfp_pads[]	=;
static unsigned int rmii_mdio_mfp_funcs[]	=;
/* mfp0_19 */
static unsigned int sirq0_mfp_pads[]		=;
static unsigned int sirq0_mfp_funcs[]		=;
static unsigned int sirq1_mfp_pads[]		=;
static unsigned int sirq1_mfp_funcs[]		=;
/* mfp0_18_16 */
static unsigned int rmii_txd0_mfp_pads[]	=;
static unsigned int rmii_txd0_mfp_funcs[]	=;
static unsigned int rmii_txd1_mfp_pads[]	=;
static unsigned int rmii_txd1_mfp_funcs[]	=;
/* mfp0_15_13 */
static unsigned int rmii_txen_mfp_pads[]	=;
static unsigned int rmii_txen_mfp_funcs[]	=;

static unsigned int rmii_rxer_mfp_pads[]	=;
static unsigned int rmii_rxer_mfp_funcs[]	=;
/* mfp0_12_11 */
static unsigned int rmii_crs_dv_mfp_pads[]	=;
static unsigned int rmii_crs_dv_mfp_funcs[]	=;
/* mfp0_10_8 */
static unsigned int rmii_rxd1_mfp_pads[]	=;
static unsigned int rmii_rxd1_mfp_funcs[]	=;
static unsigned int rmii_rxd0_mfp_pads[]	=;
static unsigned int rmii_rxd0_mfp_funcs[]	=;
/* mfp0_7_6 */
static unsigned int rmii_ref_clk_mfp_pads[]	=;
static unsigned int rmii_ref_clk_mfp_funcs[]	=;
/* mfp0_5 */
static unsigned int i2s_d0_mfp_pads[]		=;
static unsigned int i2s_d0_mfp_funcs[]		=;
static unsigned int i2s_d1_mfp_pads[]		=;
static unsigned int i2s_d1_mfp_funcs[]		=;

/* mfp0_4_3 */
static unsigned int i2s_lr_m_clk0_mfp_pads[]	=;
static unsigned int i2s_lr_m_clk0_mfp_funcs[]	=;
/* mfp0_2 */
static unsigned int i2s_bclk0_mfp_pads[]	=;
static unsigned int i2s_bclk0_mfp_funcs[]	=;
static unsigned int i2s_bclk1_mclk1_mfp_pads[]	=;
static unsigned int i2s_bclk1_mclk1_mfp_funcs[] =;
/* mfp0_1_0 */
static unsigned int pcm1_in_out_mfp_pads[]	=;
static unsigned int pcm1_in_out_mfp_funcs[]	=;
static unsigned int pcm1_clk_mfp_pads[]		=;
static unsigned int pcm1_clk_mfp_funcs[]	=;
static unsigned int pcm1_sync_mfp_pads[]	=;
static unsigned int pcm1_sync_mfp_funcs[]	=;
/* mfp1_31_29 */
static unsigned int eram_a5_mfp_pads[]		=;
static unsigned int eram_a5_mfp_funcs[]		=;
static unsigned int eram_a6_mfp_pads[]		=;
static unsigned int eram_a6_mfp_funcs[]		=;
static unsigned int eram_a7_mfp_pads[]		=;
static unsigned int eram_a7_mfp_funcs[]		=;
/* mfp1_28_26 */
static unsigned int eram_a8_mfp_pads[]		=;
static unsigned int eram_a8_mfp_funcs[]		=;
static unsigned int eram_a9_mfp_pads[]		=;
static unsigned int eram_a9_mfp_funcs[]		=;
static unsigned int eram_a10_mfp_pads[]		=;
static unsigned int eram_a10_mfp_funcs[]	=;
/* mfp1_25_23 */
static unsigned int eram_a11_mfp_pads[]		=;
static unsigned int eram_a11_mfp_funcs[]	=;
/* mfp1_22 */
static unsigned int lvds_oep_odn_mfp_pads[]	=;
static unsigned int lvds_oep_odn_mfp_funcs[]	=;
static unsigned int lvds_ocp_obn_mfp_pads[]	=;
static unsigned int lvds_ocp_obn_mfp_funcs[]	=;
static unsigned int lvds_oap_oan_mfp_pads[]	=;
static unsigned int lvds_oap_oan_mfp_funcs[]	=;
/* mfp1_21 */
static unsigned int lvds_e_mfp_pads[]		=;
static unsigned int lvds_e_mfp_funcs[]		=;
/* mfp1_5_4 */
static unsigned int spi0_sclk_mosi_mfp_pads[]	=;
static unsigned int spi0_sclk_mosi_mfp_funcs[]	=;
/* mfp1_3_1 */
static unsigned int spi0_ss_mfp_pads[]		=;
static unsigned int spi0_ss_mfp_funcs[]		=;
static unsigned int spi0_miso_mfp_pads[]	=;
static unsigned int spi0_miso_mfp_funcs[]	=;
/* mfp2_23 */
static unsigned int uart2_rtsb_mfp_pads[]	=;
static unsigned int uart2_rtsb_mfp_funcs[]	=;
/* mfp2_22 */
static unsigned int uart2_ctsb_mfp_pads[]	=;
static unsigned int uart2_ctsb_mfp_funcs[]	=;
/* mfp2_21 */
static unsigned int uart3_rtsb_mfp_pads[]	=;
static unsigned int uart3_rtsb_mfp_funcs[]	=;
/* mfp2_20 */
static unsigned int uart3_ctsb_mfp_pads[]	=;
static unsigned int uart3_ctsb_mfp_funcs[]	=;
/* mfp2_19_17 */
static unsigned int sd0_d0_mfp_pads[]		=;
static unsigned int sd0_d0_mfp_funcs[]		=;
/* mfp2_16_14 */
static unsigned int sd0_d1_mfp_pads[]		=;
static unsigned int sd0_d1_mfp_funcs[]		=;
/* mfp_13_11 */
static unsigned int sd0_d2_d3_mfp_pads[]	=;
static unsigned int sd0_d2_d3_mfp_funcs[]	=;
/* mfp2_10_9 */
static unsigned int sd1_d0_d3_mfp_pads[]	=;
static unsigned int sd1_d0_d3_mfp_funcs[]	=;
/* mfp2_8_7 */
static unsigned int sd0_cmd_mfp_pads[]		=;
static unsigned int sd0_cmd_mfp_funcs[]		=;
/* mfp2_6_5 */
static unsigned int sd0_clk_mfp_pads[]		=;
static unsigned int sd0_clk_mfp_funcs[]		=;
/* mfp2_4_3 */
static unsigned int sd1_cmd_clk_mfp_pads[]	=;
static unsigned int sd1_cmd_clk_mfp_funcs[]	=;
/* mfp2_2_0 */
static unsigned int uart0_rx_mfp_pads[]		=;
static unsigned int uart0_rx_mfp_funcs[]	=;
/* mfp3_27 */
static unsigned int nand0_d0_ceb3_mfp_pads[]	=;
static unsigned int nand0_d0_ceb3_mfp_funcs[]	=;
/* mfp3_21_19 */
static unsigned int uart0_tx_mfp_pads[]		=;
static unsigned int uart0_tx_mfp_funcs[]	=;
/* mfp3_18_16 */
static unsigned int i2c0_mfp_pads[]		=;
static unsigned int i2c0_mfp_funcs[]		=;
/* mfp3_15 */
static unsigned int csi0_cn_cp_mfp_pads[]	=;
static unsigned int csi0_cn_cp_mfp_funcs[]	=;
/* mfp3_14 */
static unsigned int csi0_dn0_dp3_mfp_pads[]	=;
static unsigned int csi0_dn0_dp3_mfp_funcs[]	=;
/* mfp3_13 */
static unsigned int csi1_dn0_cp_mfp_pads[]	=;
static unsigned int csi1_dn0_cp_mfp_funcs[]	=;
/* mfp3_12_dsi */
static unsigned int dsi_dp3_dn1_mfp_pads[]	=;
static unsigned int dsi_dp3_dn1_mfp_funcs[]	=;
static unsigned int dsi_cp_dn0_mfp_pads[]	=;
static unsigned int dsi_cp_dn0_mfp_funcs[]	=;
static unsigned int dsi_dp2_dn2_mfp_pads[]	=;
static unsigned int dsi_dp2_dn2_mfp_funcs[]	=;
/* mfp3_11 */
static unsigned int nand1_d0_ceb1_mfp_pads[]	=;
static unsigned int nand1_d0_ceb1_mfp_funcs[]	=;
/* mfp3_10 */
static unsigned int nand1_ceb3_mfp_pads[]	=;
static unsigned int nand1_ceb3_mfp_funcs[]	=;
static unsigned int nand1_ceb0_mfp_pads[]	=;
static unsigned int nand1_ceb0_mfp_funcs[]	=;
/* mfp3_9 */
static unsigned int csi1_dn0_dp0_mfp_pads[]	=;
static unsigned int csi1_dn0_dp0_mfp_funcs[]	=;
/* mfp3_8 */
static unsigned int uart4_rx_tx_mfp_pads[]	=;
static unsigned int uart4_rx_tx_mfp_funcs[]	=;
/* PADDRV group data */
/* drv0 */
static unsigned int sgpio3_drv_pads[]		=;
static unsigned int sgpio2_drv_pads[]		=;
static unsigned int sgpio1_drv_pads[]		=;
static unsigned int sgpio0_drv_pads[]		=;
static unsigned int rmii_tx_d0_d1_drv_pads[]	=;
static unsigned int rmii_txen_rxer_drv_pads[]	=;
static unsigned int rmii_crs_dv_drv_pads[]	=;
static unsigned int rmii_rx_d1_d0_drv_pads[]	=;
static unsigned int rmii_ref_clk_drv_pads[]	=;
static unsigned int rmii_mdc_mdio_drv_pads[]	=;
static unsigned int sirq_0_1_drv_pads[]		=;
static unsigned int sirq2_drv_pads[]		=;
static unsigned int i2s_d0_d1_drv_pads[]	=;
static unsigned int i2s_lr_m_clk0_drv_pads[]	=;
static unsigned int i2s_blk1_mclk1_drv_pads[]	=;
static unsigned int pcm1_in_out_drv_pads[]	=;
/* drv1 */
static unsigned int lvds_oap_oan_drv_pads[]	=;
static unsigned int lvds_oep_odn_drv_pads[]	=;
static unsigned int lvds_ocp_obn_drv_pads[]	=;
static unsigned int lvds_e_drv_pads[]		=;
static unsigned int sd0_d3_d0_drv_pads[]	=;
static unsigned int sd1_d3_d0_drv_pads[]	=;
static unsigned int sd0_sd1_cmd_clk_drv_pads[]	=;
static unsigned int spi0_sclk_mosi_drv_pads[]	=;
static unsigned int spi0_ss_miso_drv_pads[]	=;
static unsigned int uart0_rx_tx_drv_pads[]	=;
static unsigned int uart4_rx_tx_drv_pads[]	=;
static unsigned int uart2_drv_pads[]		=;
static unsigned int uart3_drv_pads[]		=;
/* drv2 */
static unsigned int i2c0_drv_pads[]		=;
static unsigned int i2c1_drv_pads[]		=;
static unsigned int i2c2_drv_pads[]		=;
static unsigned int sensor0_drv_pads[]		=;
/* SR group data */
/* sr0 */
static unsigned int sgpio3_sr_pads[]		=;
static unsigned int sgpio2_sr_pads[]		=;
static unsigned int sgpio1_sr_pads[]		=;
static unsigned int sgpio0_sr_pads[]		=;
static unsigned int rmii_tx_d0_d1_sr_pads[]	=;
static unsigned int rmii_txen_rxer_sr_pads[]	=;
static unsigned int rmii_crs_dv_sr_pads[]	=;
static unsigned int rmii_rx_d1_d0_sr_pads[]	=;
static unsigned int rmii_ref_clk_sr_pads[]	=;
static unsigned int rmii_mdc_mdio_sr_pads[]	=;
static unsigned int sirq_0_1_sr_pads[]		=;
static unsigned int sirq2_sr_pads[]		=;
static unsigned int i2s_do_d1_sr_pads[]		=;
static unsigned int i2s_lr_m_clk0_sr_pads[]	=;
static unsigned int i2s_bclk0_mclk1_sr_pads[]	=;
static unsigned int pcm1_in_out_sr_pads[]	=;
/* sr1 */
static unsigned int sd1_d3_d0_sr_pads[]		=;
static unsigned int sd0_sd1_clk_cmd_sr_pads[]	=;
static unsigned int spi0_sclk_mosi_sr_pads[]	=;
static unsigned int spi0_ss_miso_sr_pads[]	=;
static unsigned int uart0_rx_tx_sr_pads[]	=;
static unsigned int uart4_rx_tx_sr_pads[]	=;
static unsigned int uart2_sr_pads[]		=;
static unsigned int uart3_sr_pads[]		=;
/* sr2 */
static unsigned int i2c0_sr_pads[]		=;
static unsigned int i2c1_sr_pads[]		=;
static unsigned int i2c2_sr_pads[]		=;
static unsigned int sensor0_sr_pads[]		=;


/* Pinctrl groups */
static const struct owl_pingroup s900_groups[] =;

static const char * const eram_groups[] =;

static const char * const eth_rmii_groups[] =;

static const char * const eth_smii_groups[] =;

static const char * const spi0_groups[] =;

static const char * const spi1_groups[] =;

static const char * const spi2_groups[] =;

static const char * const spi3_groups[] =;

static const char * const sens0_groups[] =;

static const char * const uart0_groups[] =;

static const char * const uart1_groups[] =;

static const char * const uart2_groups[] =;

static const char * const uart3_groups[] =;

static const char * const uart4_groups[] =;

static const char * const uart5_groups[] =;

static const char * const uart6_groups[] =;

static const char * const i2s0_groups[] =;

static const char * const i2s1_groups[] =;

static const char * const pcm0_groups[] =;

static const char * const pcm1_groups[] =;

static const char * const jtag_groups[] =;

static const char * const pwm0_groups[] =;

static const char * const pwm1_groups[] =;

static const char * const pwm2_groups[] =;

static const char * const pwm3_groups[] =;

static const char * const pwm4_groups[] =;

static const char * const pwm5_groups[] =;

static const char * const sd0_groups[] =;

static const char * const sd1_groups[] =;

static const char * const sd2_groups[] =;

static const char * const sd3_groups[] =;

static const char * const i2c0_groups[] =;

static const char * const i2c1_groups[] =;

static const char * const i2c2_groups[] =;

static const char * const i2c3_groups[] =;

static const char * const i2c4_groups[] =;

static const char * const i2c5_groups[] =;


static const char * const lvds_groups[] =;

static const char * const usb20_groups[] =;

static const char * const usb30_groups[] =;

static const char * const gpu_groups[] =;

static const char * const mipi_csi0_groups[] =;

static const char * const mipi_csi1_groups[] =;

static const char * const mipi_dsi_groups[] =;

static const char * const nand0_groups[] =;

static const char * const nand1_groups[] =;

static const char * const spdif_groups[] =;

static const char * const sirq0_groups[] =;

static const char * const sirq1_groups[] =;

static const char * const sirq2_groups[] =;

static const struct owl_pinmux_func s900_functions[] =;

/* PAD_PULLCTL0 */
static PAD_PULLCTL_CONF(ETH_RXER, 0, 18, 2);
static PAD_PULLCTL_CONF(SIRQ0, 0, 16, 2);
static PAD_PULLCTL_CONF(SIRQ1, 0, 14, 2);
static PAD_PULLCTL_CONF(SIRQ2, 0, 12, 2);
static PAD_PULLCTL_CONF(I2C0_SDATA, 0, 10, 2);
static PAD_PULLCTL_CONF(I2C0_SCLK, 0, 8, 2);
static PAD_PULLCTL_CONF(ERAM_A5, 0, 6, 2);
static PAD_PULLCTL_CONF(ERAM_A6, 0, 4, 2);
static PAD_PULLCTL_CONF(ERAM_A7, 0, 2, 2);
static PAD_PULLCTL_CONF(ERAM_A10, 0, 0, 2);

/* PAD_PULLCTL1 */
static PAD_PULLCTL_CONF(PCM1_IN, 1, 30, 2);
static PAD_PULLCTL_CONF(PCM1_OUT, 1, 28, 2);
static PAD_PULLCTL_CONF(SD0_D0, 1, 26, 2);
static PAD_PULLCTL_CONF(SD0_D1, 1, 24, 2);
static PAD_PULLCTL_CONF(SD0_D2, 1, 22, 2);
static PAD_PULLCTL_CONF(SD0_D3, 1, 20, 2);
static PAD_PULLCTL_CONF(SD0_CMD, 1, 18, 2);
static PAD_PULLCTL_CONF(SD0_CLK, 1, 16, 2);
static PAD_PULLCTL_CONF(SD1_CMD, 1, 14, 2);
static PAD_PULLCTL_CONF(SD1_D0, 1, 12, 2);
static PAD_PULLCTL_CONF(SD1_D1, 1, 10, 2);
static PAD_PULLCTL_CONF(SD1_D2, 1, 8, 2);
static PAD_PULLCTL_CONF(SD1_D3, 1, 6, 2);
static PAD_PULLCTL_CONF(UART0_RX, 1, 4, 2);
static PAD_PULLCTL_CONF(UART0_TX, 1, 2, 2);

/* PAD_PULLCTL2 */
static PAD_PULLCTL_CONF(I2C2_SDATA, 2, 26, 2);
static PAD_PULLCTL_CONF(I2C2_SCLK, 2, 24, 2);
static PAD_PULLCTL_CONF(SPI0_SCLK, 2, 22, 2);
static PAD_PULLCTL_CONF(SPI0_MOSI, 2, 20, 2);
static PAD_PULLCTL_CONF(I2C1_SDATA, 2, 18, 2);
static PAD_PULLCTL_CONF(I2C1_SCLK, 2, 16, 2);
static PAD_PULLCTL_CONF(NAND0_D0, 2, 15, 1);
static PAD_PULLCTL_CONF(NAND0_D1, 2, 15, 1);
static PAD_PULLCTL_CONF(NAND0_D2, 2, 15, 1);
static PAD_PULLCTL_CONF(NAND0_D3, 2, 15, 1);
static PAD_PULLCTL_CONF(NAND0_D4, 2, 15, 1);
static PAD_PULLCTL_CONF(NAND0_D5, 2, 15, 1);
static PAD_PULLCTL_CONF(NAND0_D6, 2, 15, 1);
static PAD_PULLCTL_CONF(NAND0_D7, 2, 15, 1);
static PAD_PULLCTL_CONF(NAND0_DQSN, 2, 14, 1);
static PAD_PULLCTL_CONF(NAND0_DQS, 2, 13, 1);
static PAD_PULLCTL_CONF(NAND1_D0, 2, 12, 1);
static PAD_PULLCTL_CONF(NAND1_D1, 2, 12, 1);
static PAD_PULLCTL_CONF(NAND1_D2, 2, 12, 1);
static PAD_PULLCTL_CONF(NAND1_D3, 2, 12, 1);
static PAD_PULLCTL_CONF(NAND1_D4, 2, 12, 1);
static PAD_PULLCTL_CONF(NAND1_D5, 2, 12, 1);
static PAD_PULLCTL_CONF(NAND1_D6, 2, 12, 1);
static PAD_PULLCTL_CONF(NAND1_D7, 2, 12, 1);
static PAD_PULLCTL_CONF(NAND1_DQSN, 2, 11, 1);
static PAD_PULLCTL_CONF(NAND1_DQS, 2, 10, 1);
static PAD_PULLCTL_CONF(SGPIO2, 2, 8, 2);
static PAD_PULLCTL_CONF(SGPIO3, 2, 6, 2);
static PAD_PULLCTL_CONF(UART4_RX, 2, 4, 2);
static PAD_PULLCTL_CONF(UART4_TX, 2, 2, 2);

/* PAD_ST0 */
static PAD_ST_CONF(I2C0_SDATA, 0, 30, 1);
static PAD_ST_CONF(UART0_RX, 0, 29, 1);
static PAD_ST_CONF(ETH_MDC, 0, 28, 1);
static PAD_ST_CONF(I2S_MCLK1, 0, 23, 1);
static PAD_ST_CONF(ETH_REF_CLK, 0, 22, 1);
static PAD_ST_CONF(ETH_TXEN, 0, 21, 1);
static PAD_ST_CONF(ETH_TXD0, 0, 20, 1);
static PAD_ST_CONF(I2S_LRCLK1, 0, 19, 1);
static PAD_ST_CONF(SGPIO2, 0, 18, 1);
static PAD_ST_CONF(SGPIO3, 0, 17, 1);
static PAD_ST_CONF(UART4_TX, 0, 16, 1);
static PAD_ST_CONF(I2S_D1, 0, 15, 1);
static PAD_ST_CONF(UART0_TX, 0, 14, 1);
static PAD_ST_CONF(SPI0_SCLK, 0, 13, 1);
static PAD_ST_CONF(SD0_CLK, 0, 12, 1);
static PAD_ST_CONF(ERAM_A5, 0, 11, 1);
static PAD_ST_CONF(I2C0_SCLK, 0, 7, 1);
static PAD_ST_CONF(ERAM_A9, 0, 6, 1);
static PAD_ST_CONF(LVDS_OEP, 0, 5, 1);
static PAD_ST_CONF(LVDS_ODN, 0, 4, 1);
static PAD_ST_CONF(LVDS_OAP, 0, 3, 1);
static PAD_ST_CONF(I2S_BCLK1, 0, 2, 1);

/* PAD_ST1 */
static PAD_ST_CONF(I2S_LRCLK0, 1, 29, 1);
static PAD_ST_CONF(UART4_RX, 1, 28, 1);
static PAD_ST_CONF(UART3_CTSB, 1, 27, 1);
static PAD_ST_CONF(UART3_RTSB, 1, 26, 1);
static PAD_ST_CONF(UART3_RX, 1, 25, 1);
static PAD_ST_CONF(UART2_RTSB, 1, 24, 1);
static PAD_ST_CONF(UART2_CTSB, 1, 23, 1);
static PAD_ST_CONF(UART2_RX, 1, 22, 1);
static PAD_ST_CONF(ETH_RXD0, 1, 21, 1);
static PAD_ST_CONF(ETH_RXD1, 1, 20, 1);
static PAD_ST_CONF(ETH_CRS_DV, 1, 19, 1);
static PAD_ST_CONF(ETH_RXER, 1, 18, 1);
static PAD_ST_CONF(ETH_TXD1, 1, 17, 1);
static PAD_ST_CONF(LVDS_OCP, 1, 16, 1);
static PAD_ST_CONF(LVDS_OBP, 1, 15, 1);
static PAD_ST_CONF(LVDS_OBN, 1, 14, 1);
static PAD_ST_CONF(PCM1_OUT, 1, 12, 1);
static PAD_ST_CONF(PCM1_CLK, 1, 11, 1);
static PAD_ST_CONF(PCM1_IN, 1, 10, 1);
static PAD_ST_CONF(PCM1_SYNC, 1, 9, 1);
static PAD_ST_CONF(I2C1_SCLK, 1, 8, 1);
static PAD_ST_CONF(I2C1_SDATA, 1, 7, 1);
static PAD_ST_CONF(I2C2_SCLK, 1, 6, 1);
static PAD_ST_CONF(I2C2_SDATA, 1, 5, 1);
static PAD_ST_CONF(SPI0_MOSI, 1, 4, 1);
static PAD_ST_CONF(SPI0_MISO, 1, 3, 1);
static PAD_ST_CONF(SPI0_SS, 1, 2, 1);
static PAD_ST_CONF(I2S_BCLK0, 1, 1, 1);
static PAD_ST_CONF(I2S_MCLK0, 1, 0, 1);

/* Pad info table */
static const struct owl_padinfo s900_padinfo[NUM_PADS] =;

static const struct owl_gpio_port s900_gpio_ports[] =;

enum s900_pinconf_pull {};

static int s900_pad_pinconf_arg2val(const struct owl_padinfo *info,
				unsigned int param,
				u32 *arg)
{}

static int s900_pad_pinconf_val2arg(const struct owl_padinfo *padinfo,
				unsigned int param,
				u32 *arg)
{}

static struct owl_pinctrl_soc_data s900_pinctrl_data =;

static int s900_pinctrl_probe(struct platform_device *pdev)
{}

static const struct of_device_id s900_pinctrl_of_match[] =;

static struct platform_driver s900_pinctrl_driver =;

static int __init s900_pinctrl_init(void)
{}
arch_initcall(s900_pinctrl_init);

static void __exit s900_pinctrl_exit(void)
{}
module_exit(s900_pinctrl_exit);

MODULE_AUTHOR();
MODULE_AUTHOR();
MODULE_DESCRIPTION();