1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __ARCH_DOVE_MPP_CODED_H 3*4882a593Smuzhiyun #define __ARCH_DOVE_MPP_CODED_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #define MPP(_num, _sel, _in, _out) ( \ 6*4882a593Smuzhiyun /* MPP number */ ((_num) & 0xff) | \ 7*4882a593Smuzhiyun /* MPP select value */ (((_sel) & 0xf) << 8) | \ 8*4882a593Smuzhiyun /* may be input signal */ ((!!(_in)) << 12) | \ 9*4882a593Smuzhiyun /* may be output signal */ ((!!(_out)) << 13)) 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define MPP0_GPIO0 MPP(0, 0x0, 1, 1) 12*4882a593Smuzhiyun #define MPP0_UA2_RTSn MPP(0, 0x2, 0, 0) 13*4882a593Smuzhiyun #define MPP0_SDIO0_CD MPP(0, 0x3, 0, 0) 14*4882a593Smuzhiyun #define MPP0_LCD0_PWM MPP(0, 0xf, 0, 0) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #define MPP1_GPIO1 MPP(1, 0x0, 1, 1) 17*4882a593Smuzhiyun #define MPP1_UA2_CTSn MPP(1, 0x2, 0, 0) 18*4882a593Smuzhiyun #define MPP1_SDIO0_WP MPP(1, 0x3, 0, 0) 19*4882a593Smuzhiyun #define MPP1_LCD1_PWM MPP(1, 0xf, 0, 0) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define MPP2_GPIO2 MPP(2, 0x0, 1, 1) 22*4882a593Smuzhiyun #define MPP2_SATA_PRESENT MPP(2, 0x1, 0, 0) 23*4882a593Smuzhiyun #define MPP2_UA2_TXD MPP(2, 0x2, 0, 0) 24*4882a593Smuzhiyun #define MPP2_SDIO0_BUS_POWER MPP(2, 0x3, 0, 0) 25*4882a593Smuzhiyun #define MPP2_UA_RTSn1 MPP(2, 0x4, 0, 0) 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define MPP3_GPIO3 MPP(3, 0x0, 1, 1) 28*4882a593Smuzhiyun #define MPP3_SATA_ACT MPP(3, 0x1, 0, 0) 29*4882a593Smuzhiyun #define MPP3_UA2_RXD MPP(3, 0x2, 0, 0) 30*4882a593Smuzhiyun #define MPP3_SDIO0_LED_CTRL MPP(3, 0x3, 0, 0) 31*4882a593Smuzhiyun #define MPP3_UA_CTSn1 MPP(3, 0x4, 0, 0) 32*4882a593Smuzhiyun #define MPP3_SPI_LCD_CS1 MPP(3, 0xf, 0, 0) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define MPP4_GPIO4 MPP(4, 0x0, 1, 1) 35*4882a593Smuzhiyun #define MPP4_UA3_RTSn MPP(4, 0x2, 0, 0) 36*4882a593Smuzhiyun #define MPP4_SDIO1_CD MPP(4, 0x3, 0, 0) 37*4882a593Smuzhiyun #define MPP4_SPI_1_MISO MPP(4, 0x4, 0, 0) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun #define MPP5_GPIO5 MPP(5, 0x0, 1, 1) 40*4882a593Smuzhiyun #define MPP5_UA3_CTSn MPP(5, 0x2, 0, 0) 41*4882a593Smuzhiyun #define MPP5_SDIO1_WP MPP(5, 0x3, 0, 0) 42*4882a593Smuzhiyun #define MPP5_SPI_1_CS MPP(5, 0x4, 0, 0) 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define MPP6_GPIO6 MPP(6, 0x0, 1, 1) 45*4882a593Smuzhiyun #define MPP6_UA3_TXD MPP(6, 0x2, 0, 0) 46*4882a593Smuzhiyun #define MPP6_SDIO1_BUS_POWER MPP(6, 0x3, 0, 0) 47*4882a593Smuzhiyun #define MPP6_SPI_1_MOSI MPP(6, 0x4, 0, 0) 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define MPP7_GPIO7 MPP(7, 0x0, 1, 1) 50*4882a593Smuzhiyun #define MPP7_UA3_RXD MPP(7, 0x2, 0, 0) 51*4882a593Smuzhiyun #define MPP7_SDIO1_LED_CTRL MPP(7, 0x3, 0, 0) 52*4882a593Smuzhiyun #define MPP7_SPI_1_SCK MPP(7, 0x4, 0, 0) 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #define MPP8_GPIO8 MPP(8, 0x0, 1, 1) 55*4882a593Smuzhiyun #define MPP8_WD_RST_OUT MPP(8, 0x1, 0, 0) 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #define MPP9_GPIO9 MPP(9, 0x0, 1, 1) 58*4882a593Smuzhiyun #define MPP9_PEX1_CLKREQn MPP(9, 0x5, 0, 0) 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun #define MPP10_GPIO10 MPP(10, 0x0, 1, 1) 61*4882a593Smuzhiyun #define MPP10_SSP_SCLK MPP(10, 0x5, 0, 0) 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #define MPP11_GPIO11 MPP(11, 0x0, 1, 1) 64*4882a593Smuzhiyun #define MPP11_SATA_PRESENT MPP(11, 0x1, 0, 0) 65*4882a593Smuzhiyun #define MPP11_SATA_ACT MPP(11, 0x2, 0, 0) 66*4882a593Smuzhiyun #define MPP11_SDIO0_LED_CTRL MPP(11, 0x3, 0, 0) 67*4882a593Smuzhiyun #define MPP11_SDIO1_LED_CTRL MPP(11, 0x4, 0, 0) 68*4882a593Smuzhiyun #define MPP11_PEX0_CLKREQn MPP(11, 0x5, 0, 0) 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #define MPP12_GPIO12 MPP(12, 0x0, 1, 1) 71*4882a593Smuzhiyun #define MPP12_SATA_ACT MPP(12, 0x1, 0, 0) 72*4882a593Smuzhiyun #define MPP12_UA2_RTSn MPP(12, 0x2, 0, 0) 73*4882a593Smuzhiyun #define MPP12_AD0_I2S_EXT_MCLK MPP(12, 0x3, 0, 0) 74*4882a593Smuzhiyun #define MPP12_SDIO1_CD MPP(12, 0x4, 0, 0) 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun #define MPP13_GPIO13 MPP(13, 0x0, 1, 1) 77*4882a593Smuzhiyun #define MPP13_UA2_CTSn MPP(13, 0x2, 0, 0) 78*4882a593Smuzhiyun #define MPP13_AD1_I2S_EXT_MCLK MPP(13, 0x3, 0, 0) 79*4882a593Smuzhiyun #define MPP13_SDIO1WP MPP(13, 0x4, 0, 0) 80*4882a593Smuzhiyun #define MPP13_SSP_EXTCLK MPP(13, 0x5, 0, 0) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #define MPP14_GPIO14 MPP(14, 0x0, 1, 1) 83*4882a593Smuzhiyun #define MPP14_UA2_TXD MPP(14, 0x2, 0, 0) 84*4882a593Smuzhiyun #define MPP14_SDIO1_BUS_POWER MPP(14, 0x4, 0, 0) 85*4882a593Smuzhiyun #define MPP14_SSP_RXD MPP(14, 0x5, 0, 0) 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #define MPP15_GPIO15 MPP(15, 0x0, 1, 1) 88*4882a593Smuzhiyun #define MPP15_UA2_RXD MPP(15, 0x2, 0, 0) 89*4882a593Smuzhiyun #define MPP15_SDIO1_LED_CTRL MPP(15, 0x4, 0, 0) 90*4882a593Smuzhiyun #define MPP15_SSP_SFRM MPP(15, 0x5, 0, 0) 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define MPP16_GPIO16 MPP(16, 0x0, 1, 1) 93*4882a593Smuzhiyun #define MPP16_UA3_RTSn MPP(16, 0x2, 0, 0) 94*4882a593Smuzhiyun #define MPP16_SDIO0_CD MPP(16, 0x3, 0, 0) 95*4882a593Smuzhiyun #define MPP16_SPI_LCD_CS1 MPP(16, 0x4, 0, 0) 96*4882a593Smuzhiyun #define MPP16_AC97_SDATA_IN1 MPP(16, 0x5, 0, 0) 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #define MPP17_GPIO17 MPP(17, 0x0, 1, 1) 99*4882a593Smuzhiyun #define MPP17_AC97_SYSCLK_OUT MPP(17, 0x1, 0, 0) 100*4882a593Smuzhiyun #define MPP17_UA3_CTSn MPP(17, 0x2, 0, 0) 101*4882a593Smuzhiyun #define MPP17_SDIO0_WP MPP(17, 0x3, 0, 0) 102*4882a593Smuzhiyun #define MPP17_TW_SDA2 MPP(17, 0x4, 0, 0) 103*4882a593Smuzhiyun #define MPP17_AC97_SDATA_IN2 MPP(17, 0x5, 0, 0) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun #define MPP18_GPIO18 MPP(18, 0x0, 1, 1) 106*4882a593Smuzhiyun #define MPP18_UA3_TXD MPP(18, 0x2, 0, 0) 107*4882a593Smuzhiyun #define MPP18_SDIO0_BUS_POWER MPP(18, 0x3, 0, 0) 108*4882a593Smuzhiyun #define MPP18_LCD0_PWM MPP(18, 0x4, 0, 0) 109*4882a593Smuzhiyun #define MPP18_AC_SDATA_IN3 MPP(18, 0x5, 0, 0) 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #define MPP19_GPIO19 MPP(19, 0x0, 1, 1) 112*4882a593Smuzhiyun #define MPP19_UA3_RXD MPP(19, 0x2, 0, 0) 113*4882a593Smuzhiyun #define MPP19_SDIO0_LED_CTRL MPP(19, 0x3, 0, 0) 114*4882a593Smuzhiyun #define MPP19_TW_SCK2 MPP(19, 0x4, 0, 0) 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun #define MPP20_GPIO20 MPP(20, 0x0, 1, 1) 117*4882a593Smuzhiyun #define MPP20_AC97_SYSCLK_OUT MPP(20, 0x1, 0, 0) 118*4882a593Smuzhiyun #define MPP20_SPI_LCD_MISO MPP(20, 0x2, 0, 0) 119*4882a593Smuzhiyun #define MPP20_SDIO1_CD MPP(20, 0x3, 0, 0) 120*4882a593Smuzhiyun #define MPP20_SDIO0_CD MPP(20, 0x5, 0, 0) 121*4882a593Smuzhiyun #define MPP20_SPI_1_MISO MPP(20, 0x6, 0, 0) 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun #define MPP21_GPIO21 MPP(21, 0x0, 1, 1) 124*4882a593Smuzhiyun #define MPP21_UA1_RTSn MPP(21, 0x1, 0, 0) 125*4882a593Smuzhiyun #define MPP21_SPI_LCD_CS0 MPP(21, 0x2, 0, 0) 126*4882a593Smuzhiyun #define MPP21_SDIO1_WP MPP(21, 0x3, 0, 0) 127*4882a593Smuzhiyun #define MPP21_SSP_SFRM MPP(21, 0x4, 0, 0) 128*4882a593Smuzhiyun #define MPP21_SDIO0_WP MPP(21, 0x5, 0, 0) 129*4882a593Smuzhiyun #define MPP21_SPI_1_CS MPP(21, 0x6, 0, 0) 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun #define MPP22_GPIO22 MPP(22, 0x0, 1, 1) 132*4882a593Smuzhiyun #define MPP22_UA1_CTSn MPP(22, 0x1, 0, 0) 133*4882a593Smuzhiyun #define MPP22_SPI_LCD_MOSI MPP(22, 0x2, 0, 0) 134*4882a593Smuzhiyun #define MPP22_SDIO1_BUS_POWER MPP(22, 0x3, 0, 0) 135*4882a593Smuzhiyun #define MPP22_SSP_TXD MPP(22, 0x4, 0, 0) 136*4882a593Smuzhiyun #define MPP22_SDIO0_BUS_POWER MPP(22, 0x5, 0, 0) 137*4882a593Smuzhiyun #define MPP22_SPI_1_MOSI MPP(22, 0x6, 0, 0) 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun #define MPP23_GPIO23 MPP(23, 0x0, 1, 1) 140*4882a593Smuzhiyun #define MPP23_SPI_LCD_SCK MPP(23, 0x2, 0, 0) 141*4882a593Smuzhiyun #define MPP23_SDIO1_LED_CTRL MPP(23, 0x3, 0, 0) 142*4882a593Smuzhiyun #define MPP23_SSP_SCLK MPP(23, 0x4, 0, 0) 143*4882a593Smuzhiyun #define MPP23_SDIO0_LED_CTRL MPP(23, 0x5, 0, 0) 144*4882a593Smuzhiyun #define MPP23_SPI_1_SCK MPP(23, 0x6, 0, 0) 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun #define MPP_MAX 23 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun #define MPP_GRP(_grp, _mode) MPP((_grp), (_mode), 0, 0) 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun /* for MPP groups _num is a group index */ 151*4882a593Smuzhiyun enum dove_mpp_grp_idx { 152*4882a593Smuzhiyun MPP_24_39 = 2, 153*4882a593Smuzhiyun MPP_40_45 = 0, 154*4882a593Smuzhiyun MPP_46_51 = 1, 155*4882a593Smuzhiyun MPP_58_61 = 5, 156*4882a593Smuzhiyun MPP_62_63 = 4, 157*4882a593Smuzhiyun MPP_GRP_MAX = 5, 158*4882a593Smuzhiyun }; 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun #define MPP_GRP_24_39_GPIO MPP_GRP(MPP_24_39, 0x1) 161*4882a593Smuzhiyun #define MPP_GRP_24_39_CAM MPP_GRP(MPP_24_39, 0x0) 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun #define MPP_GRP_40_45_GPIO MPP_GRP(MPP_40_45, 0x1) 164*4882a593Smuzhiyun #define MPP_GRP_40_45_SD0 MPP_GRP(MPP_40_45, 0x0) 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun #define MPP_GRP_46_51_GPIO MPP_GRP(MPP_46_51, 0x1) 167*4882a593Smuzhiyun #define MPP_GRP_46_51_SD1 MPP_GRP(MPP_46_51, 0x0) 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun #define MPP_GRP_58_61_GPIO MPP_GRP(MPP_58_61, 0x1) 170*4882a593Smuzhiyun #define MPP_GRP_58_61_SPI MPP_GRP(MPP_58_61, 0x0) 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun #define MPP_GRP_62_63_GPIO MPP_GRP(MPP_62_63, 0x1) 173*4882a593Smuzhiyun #define MPP_GRP_62_63_UA1 MPP_GRP(MPP_62_63, 0x0) 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun /* The MPP[64:71] control differs from other groups */ 176*4882a593Smuzhiyun #define MPP_GRP_NFC_64_71_GPO 0x1 177*4882a593Smuzhiyun #define MPP_GRP_NFC_64_71_NFC 0x0 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun /* 180*4882a593Smuzhiyun * The MPP[52:57] functionality is encoded by 4 bits in different 181*4882a593Smuzhiyun * registers. The _num field in this case encodes those bits in 182*4882a593Smuzhiyun * correspodence with Table 135 of 88AP510 Functional specification 183*4882a593Smuzhiyun */ 184*4882a593Smuzhiyun #define MPP_GRP_AU1_52_57_AU1 0x0 185*4882a593Smuzhiyun #define MPP_GRP_AU1_52_57_AU1_GPIO57 0x2 186*4882a593Smuzhiyun #define MPP_GRP_AU1_52_57_GPIO 0xa 187*4882a593Smuzhiyun #define MPP_GRP_AU1_52_57_TW_GPIO 0xb 188*4882a593Smuzhiyun #define MPP_GRP_AU1_52_57_AU1_SSP 0xc 189*4882a593Smuzhiyun #define MPP_GRP_AU1_52_57_SSP_GPIO 0xe 190*4882a593Smuzhiyun #define MPP_GRP_AU1_52_57_SSP_TW 0xf 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun void dove_mpp_conf(unsigned int *mpp_list, 193*4882a593Smuzhiyun unsigned int *mpp_grp_list, 194*4882a593Smuzhiyun unsigned int grp_au1_52_57, 195*4882a593Smuzhiyun unsigned int grp_nfc_64_71); 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun #endif /* __ARCH_DOVE_MPP_CODED_H */ 198