root/include/dt-bindings/pinctrl/pinctrl-starfive-jh7100.h
/* SPDX-License-Identifier: GPL-2.0 OR MIT */
/*
 * Copyright (C) 2021 Emil Renner Berthing <kernel@esmil.dk>
 */

#ifndef __DT_BINDINGS_PINCTRL_STARFIVE_JH7100_H__
#define __DT_BINDINGS_PINCTRL_STARFIVE_JH7100_H__

#define PAD_GPIO_OFFSET         0
#define PAD_FUNC_SHARE_OFFSET   64
#define PAD_GPIO(x)             (PAD_GPIO_OFFSET + (x))
#define PAD_FUNC_SHARE(x)       (PAD_FUNC_SHARE_OFFSET + (x))

/*
 * GPIOMUX bits:
 *  | 31 - 24 | 23 - 16 | 15 - 8 |     7    |     6    |  5 - 0  |
 *  |  dout   |  doen   |  din   | dout rev | doen rev | gpio nr |
 *
 * dout:     output signal
 * doen:     output enable signal
 * din:      optional input signal, 0xff = none
 * dout rev: output signal reverse bit
 * doen rev: output enable signal reverse bit
 * gpio nr:  gpio number, 0 - 63
 */
#define GPIOMUX(n, dout, doen, din) ( \
                (((dout) & 0x80000000) >> (31 - 7)) | (((dout) & 0xff) << 24) | \
                (((doen) & 0x80000000) >> (31 - 6)) | (((doen) & 0xff) << 16) | \
                (((din) & 0xff) << 8) | \
                ((n) & 0x3f))

#define GPO_REVERSE                             0x80000000

#define GPO_LOW                                 0
#define GPO_HIGH                                1
#define GPO_ENABLE                              0
#define GPO_DISABLE                             1
#define GPO_CLK_GMAC_PAPHYREF                   2
#define GPO_JTAG_TDO                            3
#define GPO_JTAG_TDO_OEN                        4
#define GPO_DMIC_CLK_OUT                        5
#define GPO_DSP_JTDOEN_PAD                      6
#define GPO_DSP_JTDO_PAD                        7
#define GPO_I2C0_PAD_SCK_OE                     8
#define GPO_I2C0_PAD_SCK_OEN                    (GPO_I2C0_PAD_SCK_OE | GPO_REVERSE)
#define GPO_I2C0_PAD_SDA_OE                     9
#define GPO_I2C0_PAD_SDA_OEN                    (GPO_I2C0_PAD_SDA_OE | GPO_REVERSE)
#define GPO_I2C1_PAD_SCK_OE                     10
#define GPO_I2C1_PAD_SCK_OEN                    (GPO_I2C1_PAD_SCK_OE | GPO_REVERSE)
#define GPO_I2C1_PAD_SDA_OE                     11
#define GPO_I2C1_PAD_SDA_OEN                    (GPO_I2C1_PAD_SDA_OE | GPO_REVERSE)
#define GPO_I2C2_PAD_SCK_OE                     12
#define GPO_I2C2_PAD_SCK_OEN                    (GPO_I2C2_PAD_SCK_OE | GPO_REVERSE)
#define GPO_I2C2_PAD_SDA_OE                     13
#define GPO_I2C2_PAD_SDA_OEN                    (GPO_I2C2_PAD_SDA_OE | GPO_REVERSE)
#define GPO_I2C3_PAD_SCK_OE                     14
#define GPO_I2C3_PAD_SCK_OEN                    (GPO_I2C3_PAD_SCK_OE | GPO_REVERSE)
#define GPO_I2C3_PAD_SDA_OE                     15
#define GPO_I2C3_PAD_SDA_OEN                    (GPO_I2C3_PAD_SDA_OE | GPO_REVERSE)
#define GPO_I2SRX_BCLK_OUT                      16
#define GPO_I2SRX_BCLK_OUT_OEN                  17
#define GPO_I2SRX_LRCK_OUT                      18
#define GPO_I2SRX_LRCK_OUT_OEN                  19
#define GPO_I2SRX_MCLK_OUT                      20
#define GPO_I2STX_BCLK_OUT                      21
#define GPO_I2STX_BCLK_OUT_OEN                  22
#define GPO_I2STX_LRCK_OUT                      23
#define GPO_I2STX_LRCK_OUT_OEN                  24
#define GPO_I2STX_MCLK_OUT                      25
#define GPO_I2STX_SDOUT0                        26
#define GPO_I2STX_SDOUT1                        27
#define GPO_LCD_PAD_CSM_N                       28
#define GPO_PWM_PAD_OE_N_BIT0                   29
#define GPO_PWM_PAD_OE_N_BIT1                   30
#define GPO_PWM_PAD_OE_N_BIT2                   31
#define GPO_PWM_PAD_OE_N_BIT3                   32
#define GPO_PWM_PAD_OE_N_BIT4                   33
#define GPO_PWM_PAD_OE_N_BIT5                   34
#define GPO_PWM_PAD_OE_N_BIT6                   35
#define GPO_PWM_PAD_OE_N_BIT7                   36
#define GPO_PWM_PAD_OUT_BIT0                    37
#define GPO_PWM_PAD_OUT_BIT1                    38
#define GPO_PWM_PAD_OUT_BIT2                    39
#define GPO_PWM_PAD_OUT_BIT3                    40
#define GPO_PWM_PAD_OUT_BIT4                    41
#define GPO_PWM_PAD_OUT_BIT5                    42
#define GPO_PWM_PAD_OUT_BIT6                    43
#define GPO_PWM_PAD_OUT_BIT7                    44
#define GPO_PWMDAC_LEFT_OUT                     45
#define GPO_PWMDAC_RIGHT_OUT                    46
#define GPO_QSPI_CSN1_OUT                       47
#define GPO_QSPI_CSN2_OUT                       48
#define GPO_QSPI_CSN3_OUT                       49
#define GPO_REGISTER23_SCFG_CMSENSOR_RST0       50
#define GPO_REGISTER23_SCFG_CMSENSOR_RST1       51
#define GPO_REGISTER32_SCFG_GMAC_PHY_RSTN       52
#define GPO_SDIO0_PAD_CARD_POWER_EN             53
#define GPO_SDIO0_PAD_CCLK_OUT                  54
#define GPO_SDIO0_PAD_CCMD_OE                   55
#define GPO_SDIO0_PAD_CCMD_OEN                  (GPO_SDIO0_PAD_CCMD_OE | GPO_REVERSE)
#define GPO_SDIO0_PAD_CCMD_OUT                  56
#define GPO_SDIO0_PAD_CDATA_OE_BIT0             57
#define GPO_SDIO0_PAD_CDATA_OEN_BIT0            (GPO_SDIO0_PAD_CDATA_OE_BIT0 | GPO_REVERSE)
#define GPO_SDIO0_PAD_CDATA_OE_BIT1             58
#define GPO_SDIO0_PAD_CDATA_OEN_BIT1            (GPO_SDIO0_PAD_CDATA_OE_BIT1 | GPO_REVERSE)
#define GPO_SDIO0_PAD_CDATA_OE_BIT2             59
#define GPO_SDIO0_PAD_CDATA_OEN_BIT2            (GPO_SDIO0_PAD_CDATA_OE_BIT2 | GPO_REVERSE)
#define GPO_SDIO0_PAD_CDATA_OE_BIT3             60
#define GPO_SDIO0_PAD_CDATA_OEN_BIT3            (GPO_SDIO0_PAD_CDATA_OE_BIT3 | GPO_REVERSE)
#define GPO_SDIO0_PAD_CDATA_OE_BIT4             61
#define GPO_SDIO0_PAD_CDATA_OEN_BIT4            (GPO_SDIO0_PAD_CDATA_OE_BIT4 | GPO_REVERSE)
#define GPO_SDIO0_PAD_CDATA_OE_BIT5             62
#define GPO_SDIO0_PAD_CDATA_OEN_BIT5            (GPO_SDIO0_PAD_CDATA_OE_BIT5 | GPO_REVERSE)
#define GPO_SDIO0_PAD_CDATA_OE_BIT6             63
#define GPO_SDIO0_PAD_CDATA_OEN_BIT6            (GPO_SDIO0_PAD_CDATA_OE_BIT6 | GPO_REVERSE)
#define GPO_SDIO0_PAD_CDATA_OE_BIT7             64
#define GPO_SDIO0_PAD_CDATA_OEN_BIT7            (GPO_SDIO0_PAD_CDATA_OE_BIT7 | GPO_REVERSE)
#define GPO_SDIO0_PAD_CDATA_OUT_BIT0            65
#define GPO_SDIO0_PAD_CDATA_OUT_BIT1            66
#define GPO_SDIO0_PAD_CDATA_OUT_BIT2            67
#define GPO_SDIO0_PAD_CDATA_OUT_BIT3            68
#define GPO_SDIO0_PAD_CDATA_OUT_BIT4            69
#define GPO_SDIO0_PAD_CDATA_OUT_BIT5            70
#define GPO_SDIO0_PAD_CDATA_OUT_BIT6            71
#define GPO_SDIO0_PAD_CDATA_OUT_BIT7            72
#define GPO_SDIO0_PAD_RST_N                     73
#define GPO_SDIO1_PAD_CARD_POWER_EN             74
#define GPO_SDIO1_PAD_CCLK_OUT                  75
#define GPO_SDIO1_PAD_CCMD_OE                   76
#define GPO_SDIO1_PAD_CCMD_OEN                  (GPO_SDIO1_PAD_CCMD_OE | GPO_REVERSE)
#define GPO_SDIO1_PAD_CCMD_OUT                  77
#define GPO_SDIO1_PAD_CDATA_OE_BIT0             78
#define GPO_SDIO1_PAD_CDATA_OEN_BIT0            (GPO_SDIO1_PAD_CDATA_OE_BIT0 | GPO_REVERSE)
#define GPO_SDIO1_PAD_CDATA_OE_BIT1             79
#define GPO_SDIO1_PAD_CDATA_OEN_BIT1            (GPO_SDIO1_PAD_CDATA_OE_BIT1 | GPO_REVERSE)
#define GPO_SDIO1_PAD_CDATA_OE_BIT2             80
#define GPO_SDIO1_PAD_CDATA_OEN_BIT2            (GPO_SDIO1_PAD_CDATA_OE_BIT2 | GPO_REVERSE)
#define GPO_SDIO1_PAD_CDATA_OE_BIT3             81
#define GPO_SDIO1_PAD_CDATA_OEN_BIT3            (GPO_SDIO1_PAD_CDATA_OE_BIT3 | GPO_REVERSE)
#define GPO_SDIO1_PAD_CDATA_OE_BIT4             82
#define GPO_SDIO1_PAD_CDATA_OEN_BIT4            (GPO_SDIO1_PAD_CDATA_OE_BIT4 | GPO_REVERSE)
#define GPO_SDIO1_PAD_CDATA_OE_BIT5             83
#define GPO_SDIO1_PAD_CDATA_OEN_BIT5            (GPO_SDIO1_PAD_CDATA_OE_BIT5 | GPO_REVERSE)
#define GPO_SDIO1_PAD_CDATA_OE_BIT6             84
#define GPO_SDIO1_PAD_CDATA_OEN_BIT6            (GPO_SDIO1_PAD_CDATA_OE_BIT6 | GPO_REVERSE)
#define GPO_SDIO1_PAD_CDATA_OE_BIT7             85
#define GPO_SDIO1_PAD_CDATA_OEN_BIT7            (GPO_SDIO1_PAD_CDATA_OE_BIT7 | GPO_REVERSE)
#define GPO_SDIO1_PAD_CDATA_OUT_BIT0            86
#define GPO_SDIO1_PAD_CDATA_OUT_BIT1            87
#define GPO_SDIO1_PAD_CDATA_OUT_BIT2            88
#define GPO_SDIO1_PAD_CDATA_OUT_BIT3            89
#define GPO_SDIO1_PAD_CDATA_OUT_BIT4            90
#define GPO_SDIO1_PAD_CDATA_OUT_BIT5            91
#define GPO_SDIO1_PAD_CDATA_OUT_BIT6            92
#define GPO_SDIO1_PAD_CDATA_OUT_BIT7            93
#define GPO_SDIO1_PAD_RST_N                     94
#define GPO_SPDIF_TX_SDOUT                      95
#define GPO_SPDIF_TX_SDOUT_OEN                  96
#define GPO_SPI0_PAD_OE_N                       97
#define GPO_SPI0_PAD_SCK_OUT                    98
#define GPO_SPI0_PAD_SS_0_N                     99
#define GPO_SPI0_PAD_SS_1_N                     100
#define GPO_SPI0_PAD_TXD                        101
#define GPO_SPI1_PAD_OE_N                       102
#define GPO_SPI1_PAD_SCK_OUT                    103
#define GPO_SPI1_PAD_SS_0_N                     104
#define GPO_SPI1_PAD_SS_1_N                     105
#define GPO_SPI1_PAD_TXD                        106
#define GPO_SPI2_PAD_OE_N                       107
#define GPO_SPI2_PAD_SCK_OUT                    108
#define GPO_SPI2_PAD_SS_0_N                     109
#define GPO_SPI2_PAD_SS_1_N                     110
#define GPO_SPI2_PAD_TXD                        111
#define GPO_SPI2AHB_PAD_OE_N_BIT0               112
#define GPO_SPI2AHB_PAD_OE_N_BIT1               113
#define GPO_SPI2AHB_PAD_OE_N_BIT2               114
#define GPO_SPI2AHB_PAD_OE_N_BIT3               115
#define GPO_SPI2AHB_PAD_TXD_BIT0                116
#define GPO_SPI2AHB_PAD_TXD_BIT1                117
#define GPO_SPI2AHB_PAD_TXD_BIT2                118
#define GPO_SPI2AHB_PAD_TXD_BIT3                119
#define GPO_SPI3_PAD_OE_N                       120
#define GPO_SPI3_PAD_SCK_OUT                    121
#define GPO_SPI3_PAD_SS_0_N                     122
#define GPO_SPI3_PAD_SS_1_N                     123
#define GPO_SPI3_PAD_TXD                        124
#define GPO_UART0_PAD_DTRN                      125
#define GPO_UART0_PAD_RTSN                      126
#define GPO_UART0_PAD_SOUT                      127
#define GPO_UART1_PAD_SOUT                      128
#define GPO_UART2_PAD_DTR_N                     129
#define GPO_UART2_PAD_RTS_N                     130
#define GPO_UART2_PAD_SOUT                      131
#define GPO_UART3_PAD_SOUT                      132
#define GPO_USB_DRV_BUS                         133

#define GPI_CPU_JTAG_TCK                        0
#define GPI_CPU_JTAG_TDI                        1
#define GPI_CPU_JTAG_TMS                        2
#define GPI_CPU_JTAG_TRST                       3
#define GPI_DMIC_SDIN_BIT0                      4
#define GPI_DMIC_SDIN_BIT1                      5
#define GPI_DSP_JTCK_PAD                        6
#define GPI_DSP_JTDI_PAD                        7
#define GPI_DSP_JTMS_PAD                        8
#define GPI_DSP_TRST_PAD                        9
#define GPI_I2C0_PAD_SCK_IN                     10
#define GPI_I2C0_PAD_SDA_IN                     11
#define GPI_I2C1_PAD_SCK_IN                     12
#define GPI_I2C1_PAD_SDA_IN                     13
#define GPI_I2C2_PAD_SCK_IN                     14
#define GPI_I2C2_PAD_SDA_IN                     15
#define GPI_I2C3_PAD_SCK_IN                     16
#define GPI_I2C3_PAD_SDA_IN                     17
#define GPI_I2SRX_BCLK_IN                       18
#define GPI_I2SRX_LRCK_IN                       19
#define GPI_I2SRX_SDIN_BIT0                     20
#define GPI_I2SRX_SDIN_BIT1                     21
#define GPI_I2SRX_SDIN_BIT2                     22
#define GPI_I2STX_BCLK_IN                       23
#define GPI_I2STX_LRCK_IN                       24
#define GPI_SDIO0_PAD_CARD_DETECT_N             25
#define GPI_SDIO0_PAD_CARD_WRITE_PRT            26
#define GPI_SDIO0_PAD_CCMD_IN                   27
#define GPI_SDIO0_PAD_CDATA_IN_BIT0             28
#define GPI_SDIO0_PAD_CDATA_IN_BIT1             29
#define GPI_SDIO0_PAD_CDATA_IN_BIT2             30
#define GPI_SDIO0_PAD_CDATA_IN_BIT3             31
#define GPI_SDIO0_PAD_CDATA_IN_BIT4             32
#define GPI_SDIO0_PAD_CDATA_IN_BIT5             33
#define GPI_SDIO0_PAD_CDATA_IN_BIT6             34
#define GPI_SDIO0_PAD_CDATA_IN_BIT7             35
#define GPI_SDIO1_PAD_CARD_DETECT_N             36
#define GPI_SDIO1_PAD_CARD_WRITE_PRT            37
#define GPI_SDIO1_PAD_CCMD_IN                   38
#define GPI_SDIO1_PAD_CDATA_IN_BIT0             39
#define GPI_SDIO1_PAD_CDATA_IN_BIT1             40
#define GPI_SDIO1_PAD_CDATA_IN_BIT2             41
#define GPI_SDIO1_PAD_CDATA_IN_BIT3             42
#define GPI_SDIO1_PAD_CDATA_IN_BIT4             43
#define GPI_SDIO1_PAD_CDATA_IN_BIT5             44
#define GPI_SDIO1_PAD_CDATA_IN_BIT6             45
#define GPI_SDIO1_PAD_CDATA_IN_BIT7             46
#define GPI_SPDIF_RX_SDIN                       47
#define GPI_SPI0_PAD_RXD                        48
#define GPI_SPI0_PAD_SS_IN_N                    49
#define GPI_SPI1_PAD_RXD                        50
#define GPI_SPI1_PAD_SS_IN_N                    51
#define GPI_SPI2_PAD_RXD                        52
#define GPI_SPI2_PAD_SS_IN_N                    53
#define GPI_SPI2AHB_PAD_RXD_BIT0                54
#define GPI_SPI2AHB_PAD_RXD_BIT1                55
#define GPI_SPI2AHB_PAD_RXD_BIT2                56
#define GPI_SPI2AHB_PAD_RXD_BIT3                57
#define GPI_SPI2AHB_PAD_SS_N                    58
#define GPI_SPI2AHB_SLV_SCLKIN                  59
#define GPI_SPI3_PAD_RXD                        60
#define GPI_SPI3_PAD_SS_IN_N                    61
#define GPI_UART0_PAD_CTSN                      62
#define GPI_UART0_PAD_DCDN                      63
#define GPI_UART0_PAD_DSRN                      64
#define GPI_UART0_PAD_RIN                       65
#define GPI_UART0_PAD_SIN                       66
#define GPI_UART1_PAD_SIN                       67
#define GPI_UART2_PAD_CTS_N                     68
#define GPI_UART2_PAD_DCD_N                     69
#define GPI_UART2_PAD_DSR_N                     70
#define GPI_UART2_PAD_RI_N                      71
#define GPI_UART2_PAD_SIN                       72
#define GPI_UART3_PAD_SIN                       73
#define GPI_USB_OVER_CURRENT                    74

#define GPI_NONE                                0xff

#endif /* __DT_BINDINGS_PINCTRL_STARFIVE_JH7100_H__ */