1*c66ec88fSEmmanuel VadotNuvoton NPCM7XX Pin Controllers 2*c66ec88fSEmmanuel Vadot 3*c66ec88fSEmmanuel VadotThe Nuvoton BMC NPCM7XX Pin Controller multi-function routed through 4*c66ec88fSEmmanuel Vadotthe multiplexing block, Each pin supports GPIO functionality (GPIOx) 5*c66ec88fSEmmanuel Vadotand multiple functions that directly connect the pin to different 6*c66ec88fSEmmanuel Vadothardware blocks. 7*c66ec88fSEmmanuel Vadot 8*c66ec88fSEmmanuel VadotRequired properties: 9*c66ec88fSEmmanuel Vadot- #address-cells : should be 1. 10*c66ec88fSEmmanuel Vadot- #size-cells : should be 1. 11*c66ec88fSEmmanuel Vadot- compatible : "nuvoton,npcm750-pinctrl" for Poleg NPCM7XX. 12*c66ec88fSEmmanuel Vadot- ranges : defines mapping ranges between pin controller node (parent) 13*c66ec88fSEmmanuel Vadot to GPIO bank node (children). 14*c66ec88fSEmmanuel Vadot 15*c66ec88fSEmmanuel Vadot=== GPIO Bank Subnode === 16*c66ec88fSEmmanuel Vadot 17*c66ec88fSEmmanuel VadotThe NPCM7XX has 8 GPIO Banks each GPIO bank supports 32 GPIO. 18*c66ec88fSEmmanuel Vadot 19*c66ec88fSEmmanuel VadotRequired GPIO Bank subnode-properties: 20*c66ec88fSEmmanuel Vadot- reg : specifies physical base address and size of the GPIO 21*c66ec88fSEmmanuel Vadot bank registers. 22*c66ec88fSEmmanuel Vadot- gpio-controller : Marks the device node as a GPIO controller. 23*c66ec88fSEmmanuel Vadot- #gpio-cells : Must be <2>. The first cell is the gpio pin number 24*c66ec88fSEmmanuel Vadot and the second cell is used for optional parameters. 25*c66ec88fSEmmanuel Vadot- interrupts : contain the GPIO bank interrupt with flags for falling edge. 26*c66ec88fSEmmanuel Vadot- gpio-ranges : defines the range of pins managed by the GPIO bank controller. 27*c66ec88fSEmmanuel Vadot 28*c66ec88fSEmmanuel VadotFor example, GPIO bank subnodes like the following: 29*c66ec88fSEmmanuel Vadot gpio0: gpio@f0010000 { 30*c66ec88fSEmmanuel Vadot gpio-controller; 31*c66ec88fSEmmanuel Vadot #gpio-cells = <2>; 32*c66ec88fSEmmanuel Vadot reg = <0x0 0x80>; 33*c66ec88fSEmmanuel Vadot interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>; 34*c66ec88fSEmmanuel Vadot gpio-ranges = <&pinctrl 0 0 32>; 35*c66ec88fSEmmanuel Vadot }; 36*c66ec88fSEmmanuel Vadot 37*c66ec88fSEmmanuel Vadot=== Pin Mux Subnode === 38*c66ec88fSEmmanuel Vadot 39*c66ec88fSEmmanuel Vadot- pin: A string containing the name of the pin 40*c66ec88fSEmmanuel Vadot An array of strings, each string containing the name of a pin. 41*c66ec88fSEmmanuel Vadot These pin are used for selecting pin configuration. 42*c66ec88fSEmmanuel Vadot 43*c66ec88fSEmmanuel VadotThe following are the list of pins available: 44*c66ec88fSEmmanuel Vadot "GPIO0/IOX1DI", "GPIO1/IOX1LD", "GPIO2/IOX1CK", "GPIO3/IOX1D0", 45*c66ec88fSEmmanuel Vadot "GPIO4/IOX2DI/SMB1DSDA", "GPIO5/IOX2LD/SMB1DSCL", "GPIO6/IOX2CK/SMB2DSDA", 46*c66ec88fSEmmanuel Vadot "GPIO7/IOX2D0/SMB2DSCL", "GPIO8/LKGPO1", "GPIO9/LKGPO2", "GPIO10/IOXHLD", 47*c66ec88fSEmmanuel Vadot "GPIO11/IOXHCK", "GPIO12/GSPICK/SMB5BSCL", "GPIO13/GSPIDO/SMB5BSDA", 48*c66ec88fSEmmanuel Vadot "GPIO14/GSPIDI/SMB5CSCL", "GPIO15/GSPICS/SMB5CSDA", "GPIO16/LKGPO0", 49*c66ec88fSEmmanuel Vadot "GPIO17/PSPI2DI/SMB4DEN","GPIO18/PSPI2D0/SMB4BSDA", "GPIO19/PSPI2CK/SMB4BSCL", 50*c66ec88fSEmmanuel Vadot "GPIO20/SMB4CSDA/SMB15SDA", "GPIO21/SMB4CSCL/SMB15SCL", "GPIO22/SMB4DSDA/SMB14SDA", 51*c66ec88fSEmmanuel Vadot "GPIO23/SMB4DSCL/SMB14SCL", "GPIO24/IOXHDO", "GPIO25/IOXHDI", "GPIO26/SMB5SDA", 52*c66ec88fSEmmanuel Vadot "GPIO27/SMB5SCL", "GPIO28/SMB4SDA", "GPIO29/SMB4SCL", "GPIO30/SMB3SDA", 53*c66ec88fSEmmanuel Vadot "GPIO31/SMB3SCL", "GPIO32/nSPI0CS1","SPI0D2", "SPI0D3", "GPIO37/SMB3CSDA", 54*c66ec88fSEmmanuel Vadot "GPIO38/SMB3CSCL", "GPIO39/SMB3BSDA", "GPIO40/SMB3BSCL", "GPIO41/BSPRXD", 55*c66ec88fSEmmanuel Vadot "GPO42/BSPTXD/STRAP11", "GPIO43/RXD1/JTMS2/BU1RXD", "GPIO44/nCTS1/JTDI2/BU1CTS", 56*c66ec88fSEmmanuel Vadot "GPIO45/nDCD1/JTDO2", "GPIO46/nDSR1/JTCK2", "GPIO47/nRI1/JCP_RDY2", 57*c66ec88fSEmmanuel Vadot "GPIO48/TXD2/BSPTXD", "GPIO49/RXD2/BSPRXD", "GPIO50/nCTS2", "GPO51/nRTS2/STRAP2", 58*c66ec88fSEmmanuel Vadot "GPIO52/nDCD2", "GPO53/nDTR2_BOUT2/STRAP1", "GPIO54/nDSR2", "GPIO55/nRI2", 59*c66ec88fSEmmanuel Vadot "GPIO56/R1RXERR", "GPIO57/R1MDC", "GPIO58/R1MDIO", "GPIO59/SMB3DSDA", 60*c66ec88fSEmmanuel Vadot "GPIO60/SMB3DSCL", "GPO61/nDTR1_BOUT1/STRAP6", "GPO62/nRTST1/STRAP5", 61*c66ec88fSEmmanuel Vadot "GPO63/TXD1/STRAP4", "GPIO64/FANIN0", "GPIO65/FANIN1", "GPIO66/FANIN2", 62*c66ec88fSEmmanuel Vadot "GPIO67/FANIN3", "GPIO68/FANIN4", "GPIO69/FANIN5", "GPIO70/FANIN6", "GPIO71/FANIN7", 63*c66ec88fSEmmanuel Vadot "GPIO72/FANIN8", "GPIO73/FANIN9", "GPIO74/FANIN10", "GPIO75/FANIN11", 64*c66ec88fSEmmanuel Vadot "GPIO76/FANIN12", "GPIO77/FANIN13","GPIO78/FANIN14", "GPIO79/FANIN15", 65*c66ec88fSEmmanuel Vadot "GPIO80/PWM0", "GPIO81/PWM1", "GPIO82/PWM2", "GPIO83/PWM3", "GPIO84/R2TXD0", 66*c66ec88fSEmmanuel Vadot "GPIO85/R2TXD1", "GPIO86/R2TXEN", "GPIO87/R2RXD0", "GPIO88/R2RXD1", "GPIO89/R2CRSDV", 67*c66ec88fSEmmanuel Vadot "GPIO90/R2RXERR", "GPIO91/R2MDC", "GPIO92/R2MDIO", "GPIO93/GA20/SMB5DSCL", 68*c66ec88fSEmmanuel Vadot "GPIO94/nKBRST/SMB5DSDA", "GPIO95/nLRESET/nESPIRST", "GPIO96/RG1TXD0", 69*c66ec88fSEmmanuel Vadot "GPIO97/RG1TXD1", "GPIO98/RG1TXD2", "GPIO99/RG1TXD3","GPIO100/RG1TXC", 70*c66ec88fSEmmanuel Vadot "GPIO101/RG1TXCTL", "GPIO102/RG1RXD0", "GPIO103/RG1RXD1", "GPIO104/RG1RXD2", 71*c66ec88fSEmmanuel Vadot "GPIO105/RG1RXD3", "GPIO106/RG1RXC", "GPIO107/RG1RXCTL", "GPIO108/RG1MDC", 72*c66ec88fSEmmanuel Vadot "GPIO109/RG1MDIO", "GPIO110/RG2TXD0/DDRV0", "GPIO111/RG2TXD1/DDRV1", 73*c66ec88fSEmmanuel Vadot "GPIO112/RG2TXD2/DDRV2", "GPIO113/RG2TXD3/DDRV3", "GPIO114/SMB0SCL", 74*c66ec88fSEmmanuel Vadot "GPIO115/SMB0SDA", "GPIO116/SMB1SCL", "GPIO117/SMB1SDA", "GPIO118/SMB2SCL", 75*c66ec88fSEmmanuel Vadot "GPIO119/SMB2SDA", "GPIO120/SMB2CSDA", "GPIO121/SMB2CSCL", "GPIO122/SMB2BSDA", 76*c66ec88fSEmmanuel Vadot "GPIO123/SMB2BSCL", "GPIO124/SMB1CSDA", "GPIO125/SMB1CSCL","GPIO126/SMB1BSDA", 77*c66ec88fSEmmanuel Vadot "GPIO127/SMB1BSCL", "GPIO128/SMB8SCL", "GPIO129/SMB8SDA", "GPIO130/SMB9SCL", 78*c66ec88fSEmmanuel Vadot "GPIO131/SMB9SDA", "GPIO132/SMB10SCL", "GPIO133/SMB10SDA","GPIO134/SMB11SCL", 79*c66ec88fSEmmanuel Vadot "GPIO135/SMB11SDA", "GPIO136/SD1DT0", "GPIO137/SD1DT1", "GPIO138/SD1DT2", 80*c66ec88fSEmmanuel Vadot "GPIO139/SD1DT3", "GPIO140/SD1CLK", "GPIO141/SD1WP", "GPIO142/SD1CMD", 81*c66ec88fSEmmanuel Vadot "GPIO143/SD1CD/SD1PWR", "GPIO144/PWM4", "GPIO145/PWM5", "GPIO146/PWM6", 82*c66ec88fSEmmanuel Vadot "GPIO147/PWM7", "GPIO148/MMCDT4", "GPIO149/MMCDT5", "GPIO150/MMCDT6", 83*c66ec88fSEmmanuel Vadot "GPIO151/MMCDT7", "GPIO152/MMCCLK", "GPIO153/MMCWP", "GPIO154/MMCCMD", 84*c66ec88fSEmmanuel Vadot "GPIO155/nMMCCD/nMMCRST", "GPIO156/MMCDT0", "GPIO157/MMCDT1", "GPIO158/MMCDT2", 85*c66ec88fSEmmanuel Vadot "GPIO159/MMCDT3", "GPIO160/CLKOUT/RNGOSCOUT", "GPIO161/nLFRAME/nESPICS", 86*c66ec88fSEmmanuel Vadot "GPIO162/SERIRQ", "GPIO163/LCLK/ESPICLK", "GPIO164/LAD0/ESPI_IO0", 87*c66ec88fSEmmanuel Vadot "GPIO165/LAD1/ESPI_IO1", "GPIO166/LAD2/ESPI_IO2", "GPIO167/LAD3/ESPI_IO3", 88*c66ec88fSEmmanuel Vadot "GPIO168/nCLKRUN/nESPIALERT", "GPIO169/nSCIPME", "GPIO170/nSMI", "GPIO171/SMB6SCL", 89*c66ec88fSEmmanuel Vadot "GPIO172/SMB6SDA", "GPIO173/SMB7SCL", "GPIO174/SMB7SDA", "GPIO175/PSPI1CK/FANIN19", 90*c66ec88fSEmmanuel Vadot "GPIO176/PSPI1DO/FANIN18", "GPIO177/PSPI1DI/FANIN17", "GPIO178/R1TXD0", 91*c66ec88fSEmmanuel Vadot "GPIO179/R1TXD1", "GPIO180/R1TXEN", "GPIO181/R1RXD0", "GPIO182/R1RXD1", 92*c66ec88fSEmmanuel Vadot "GPIO183/SPI3CK", "GPO184/SPI3D0/STRAP9", "GPO185/SPI3D1/STRAP10", 93*c66ec88fSEmmanuel Vadot "GPIO186/nSPI3CS0", "GPIO187/nSPI3CS1", "GPIO188/SPI3D2/nSPI3CS2", 94*c66ec88fSEmmanuel Vadot "GPIO189/SPI3D3/nSPI3CS3", "GPIO190/nPRD_SMI", "GPIO191", "GPIO192", "GPIO193/R1CRSDV", 95*c66ec88fSEmmanuel Vadot "GPIO194/SMB0BSCL", "GPIO195/SMB0BSDA", "GPIO196/SMB0CSCL", "GPIO197/SMB0DEN", 96*c66ec88fSEmmanuel Vadot "GPIO198/SMB0DSDA", "GPIO199/SMB0DSCL", "GPIO200/R2CK", "GPIO201/R1CK", 97*c66ec88fSEmmanuel Vadot "GPIO202/SMB0CSDA", "GPIO203/FANIN16", "GPIO204/DDC2SCL", "GPIO205/DDC2SDA", 98*c66ec88fSEmmanuel Vadot "GPIO206/HSYNC2", "GPIO207/VSYNC2", "GPIO208/RG2TXC/DVCK", "GPIO209/RG2TXCTL/DDRV4", 99*c66ec88fSEmmanuel Vadot "GPIO210/RG2RXD0/DDRV5", "GPIO211/RG2RXD1/DDRV6", "GPIO212/RG2RXD2/DDRV7", 100*c66ec88fSEmmanuel Vadot "GPIO213/RG2RXD3/DDRV8", "GPIO214/RG2RXC/DDRV9", "GPIO215/RG2RXCTL/DDRV10", 101*c66ec88fSEmmanuel Vadot "GPIO216/RG2MDC/DDRV11", "GPIO217/RG2MDIO/DVHSYNC", "GPIO218/nWDO1", 102*c66ec88fSEmmanuel Vadot "GPIO219/nWDO2", "GPIO220/SMB12SCL", "GPIO221/SMB12SDA", "GPIO222/SMB13SCL", 103*c66ec88fSEmmanuel Vadot "GPIO223/SMB13SDA", "GPIO224/SPIXCK", "GPO225/SPIXD0/STRAP12", "GPO226/SPIXD1/STRAP13", 104*c66ec88fSEmmanuel Vadot "GPIO227/nSPIXCS0", "GPIO228/nSPIXCS1", "GPO229/SPIXD2/STRAP3", "GPIO230/SPIXD3", 105*c66ec88fSEmmanuel Vadot "GPIO231/nCLKREQ", "GPI255/DACOSEL" 106*c66ec88fSEmmanuel Vadot 107*c66ec88fSEmmanuel VadotOptional Properties: 108*c66ec88fSEmmanuel Vadot bias-disable, bias-pull-down, bias-pull-up, input-enable, 109*c66ec88fSEmmanuel Vadot input-disable, output-high, output-low, drive-push-pull, 110*c66ec88fSEmmanuel Vadot drive-open-drain, input-debounce, slew-rate, drive-strength 111*c66ec88fSEmmanuel Vadot 112*c66ec88fSEmmanuel Vadot slew-rate valid arguments are: 113*c66ec88fSEmmanuel Vadot <0> - slow 114*c66ec88fSEmmanuel Vadot <1> - fast 115*c66ec88fSEmmanuel Vadot drive-strength valid arguments are: 116*c66ec88fSEmmanuel Vadot <2> - 2mA 117*c66ec88fSEmmanuel Vadot <4> - 4mA 118*c66ec88fSEmmanuel Vadot <8> - 8mA 119*c66ec88fSEmmanuel Vadot <12> - 12mA 120*c66ec88fSEmmanuel Vadot <16> - 16mA 121*c66ec88fSEmmanuel Vadot <24> - 24mA 122*c66ec88fSEmmanuel Vadot 123*c66ec88fSEmmanuel VadotFor example, pinctrl might have pinmux subnodes like the following: 124*c66ec88fSEmmanuel Vadot 125*c66ec88fSEmmanuel Vadot gpio0_iox1d1_pin: gpio0-iox1d1-pin { 126*c66ec88fSEmmanuel Vadot pins = "GPIO0/IOX1DI"; 127*c66ec88fSEmmanuel Vadot output-high; 128*c66ec88fSEmmanuel Vadot }; 129*c66ec88fSEmmanuel Vadot gpio0_iox1ck_pin: gpio0-iox1ck-pin { 130*c66ec88fSEmmanuel Vadot pins = "GPIO2/IOX1CK"; 131*c66ec88fSEmmanuel Vadot output_high; 132*c66ec88fSEmmanuel Vadot }; 133*c66ec88fSEmmanuel Vadot 134*c66ec88fSEmmanuel Vadot=== Pin Group Subnode === 135*c66ec88fSEmmanuel Vadot 136*c66ec88fSEmmanuel VadotRequired pin group subnode-properties: 137*c66ec88fSEmmanuel Vadot- groups : A string containing the name of the group to mux. 138*c66ec88fSEmmanuel Vadot- function: A string containing the name of the function to mux to the 139*c66ec88fSEmmanuel Vadot group. 140*c66ec88fSEmmanuel Vadot 141*c66ec88fSEmmanuel VadotThe following are the list of the available groups and functions : 142*c66ec88fSEmmanuel Vadot smb0, smb0b, smb0c, smb0d, smb0den, smb1, smb1b, smb1c, smb1d, 143*c66ec88fSEmmanuel Vadot smb2, smb2b, smb2c, smb2d, smb3, smb3b, smb3c, smb3d, smb4, smb4b, 144*c66ec88fSEmmanuel Vadot smb4c, smb4d, smb4den, smb5, smb5b, smb5c, smb5d, ga20kbc, smb6, 145*c66ec88fSEmmanuel Vadot smb7, smb8, smb9, smb10, smb11, smb12, smb13, smb14, smb15, fanin0, 146*c66ec88fSEmmanuel Vadot fanin1, fanin2, fanin3, fanin4, fanin5, fanin6, fanin7, fanin8, 147*c66ec88fSEmmanuel Vadot fanin9, fanin10, fanin11 fanin12 fanin13, fanin14, fanin15, faninx, 148*c66ec88fSEmmanuel Vadot pwm0, pwm1, pwm2, pwm3, pwm4, pwm5, pwm6, pwm7, rg1, rg1mdio, rg2, 149*c66ec88fSEmmanuel Vadot rg2mdio, ddr, uart1, uart2, bmcuart0a, bmcuart0b, bmcuart1, iox1, 150*c66ec88fSEmmanuel Vadot iox2, ioxh, gspi, mmc, mmcwp, mmccd, mmcrst, mmc8, r1, r1err, r1md, 151*c66ec88fSEmmanuel Vadot r2, r2err, r2md, sd1, sd1pwr, wdog1, wdog2, scipme, sci, serirq, 152*c66ec88fSEmmanuel Vadot jtag2, spix, spixcs1, pspi1, pspi2, ddc, clkreq, clkout, spi3, spi3cs1, 153*c66ec88fSEmmanuel Vadot spi3quad, spi3cs2, spi3cs3, spi0cs1, lpc, lpcclk, espi, lkgpo0, lkgpo1, 154*c66ec88fSEmmanuel Vadot lkgpo2, nprd_smi 155*c66ec88fSEmmanuel Vadot 156*c66ec88fSEmmanuel VadotFor example, pinctrl might have group subnodes like the following: 157*c66ec88fSEmmanuel Vadot r1err_pins: r1err-pins { 158*c66ec88fSEmmanuel Vadot groups = "r1err"; 159*c66ec88fSEmmanuel Vadot function = "r1err"; 160*c66ec88fSEmmanuel Vadot }; 161*c66ec88fSEmmanuel Vadot r1md_pins: r1md-pins { 162*c66ec88fSEmmanuel Vadot groups = "r1md"; 163*c66ec88fSEmmanuel Vadot function = "r1md"; 164*c66ec88fSEmmanuel Vadot }; 165*c66ec88fSEmmanuel Vadot r1_pins: r1-pins { 166*c66ec88fSEmmanuel Vadot groups = "r1"; 167*c66ec88fSEmmanuel Vadot function = "r1"; 168*c66ec88fSEmmanuel Vadot }; 169*c66ec88fSEmmanuel Vadot 170*c66ec88fSEmmanuel VadotExamples 171*c66ec88fSEmmanuel Vadot======== 172*c66ec88fSEmmanuel Vadotpinctrl: pinctrl@f0800000 { 173*c66ec88fSEmmanuel Vadot #address-cells = <1>; 174*c66ec88fSEmmanuel Vadot #size-cells = <1>; 175*c66ec88fSEmmanuel Vadot compatible = "nuvoton,npcm750-pinctrl"; 176*c66ec88fSEmmanuel Vadot ranges = <0 0xf0010000 0x8000>; 177*c66ec88fSEmmanuel Vadot 178*c66ec88fSEmmanuel Vadot gpio0: gpio@f0010000 { 179*c66ec88fSEmmanuel Vadot gpio-controller; 180*c66ec88fSEmmanuel Vadot #gpio-cells = <2>; 181*c66ec88fSEmmanuel Vadot reg = <0x0 0x80>; 182*c66ec88fSEmmanuel Vadot interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>; 183*c66ec88fSEmmanuel Vadot gpio-ranges = <&pinctrl 0 0 32>; 184*c66ec88fSEmmanuel Vadot }; 185*c66ec88fSEmmanuel Vadot 186*c66ec88fSEmmanuel Vadot .... 187*c66ec88fSEmmanuel Vadot 188*c66ec88fSEmmanuel Vadot gpio7: gpio@f0017000 { 189*c66ec88fSEmmanuel Vadot gpio-controller; 190*c66ec88fSEmmanuel Vadot #gpio-cells = <2>; 191*c66ec88fSEmmanuel Vadot reg = <0x7000 0x80>; 192*c66ec88fSEmmanuel Vadot interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>; 193*c66ec88fSEmmanuel Vadot gpio-ranges = <&pinctrl 0 224 32>; 194*c66ec88fSEmmanuel Vadot }; 195*c66ec88fSEmmanuel Vadot 196*c66ec88fSEmmanuel Vadot gpio0_iox1d1_pin: gpio0-iox1d1-pin { 197*c66ec88fSEmmanuel Vadot pins = "GPIO0/IOX1DI"; 198*c66ec88fSEmmanuel Vadot output-high; 199*c66ec88fSEmmanuel Vadot }; 200*c66ec88fSEmmanuel Vadot 201*c66ec88fSEmmanuel Vadot iox1_pins: iox1-pins { 202*c66ec88fSEmmanuel Vadot groups = "iox1"; 203*c66ec88fSEmmanuel Vadot function = "iox1"; 204*c66ec88fSEmmanuel Vadot }; 205*c66ec88fSEmmanuel Vadot iox2_pins: iox2-pins { 206*c66ec88fSEmmanuel Vadot groups = "iox2"; 207*c66ec88fSEmmanuel Vadot function = "iox2"; 208*c66ec88fSEmmanuel Vadot }; 209*c66ec88fSEmmanuel Vadot 210*c66ec88fSEmmanuel Vadot .... 211*c66ec88fSEmmanuel Vadot 212*c66ec88fSEmmanuel Vadot clkreq_pins: clkreq-pins { 213*c66ec88fSEmmanuel Vadot groups = "clkreq"; 214*c66ec88fSEmmanuel Vadot function = "clkreq"; 215*c66ec88fSEmmanuel Vadot }; 216*c66ec88fSEmmanuel Vadot}; 217