1*137ca342SEmil Renner Berthing# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2*137ca342SEmil Renner Berthing%YAML 1.2 3*137ca342SEmil Renner Berthing--- 4*137ca342SEmil Renner Berthing$id: http://devicetree.org/schemas/pinctrl/thead,th1520-pinctrl.yaml# 5*137ca342SEmil Renner Berthing$schema: http://devicetree.org/meta-schemas/core.yaml# 6*137ca342SEmil Renner Berthing 7*137ca342SEmil Renner Berthingtitle: T-Head TH1520 SoC pin controller 8*137ca342SEmil Renner Berthing 9*137ca342SEmil Renner Berthingmaintainers: 10*137ca342SEmil Renner Berthing - Emil Renner Berthing <emil.renner.berthing@canonical.com> 11*137ca342SEmil Renner Berthing 12*137ca342SEmil Renner Berthingdescription: | 13*137ca342SEmil Renner Berthing Pinmux and pinconf controller in the T-Head TH1520 RISC-V SoC. 14*137ca342SEmil Renner Berthing 15*137ca342SEmil Renner Berthing The TH1520 has 3 groups of pads each controlled from different memory ranges. 16*137ca342SEmil Renner Berthing Confusingly the memory ranges are named 17*137ca342SEmil Renner Berthing PADCTRL_AOSYS -> PAD Group 1 18*137ca342SEmil Renner Berthing PADCTRL1_APSYS -> PAD Group 2 19*137ca342SEmil Renner Berthing PADCTRL0_APSYS -> PAD Group 3 20*137ca342SEmil Renner Berthing 21*137ca342SEmil Renner Berthing Each pad can be muxed individually to up to 6 different functions. For most 22*137ca342SEmil Renner Berthing pads only a few of those 6 configurations are valid though, and a few pads in 23*137ca342SEmil Renner Berthing group 1 does not support muxing at all. 24*137ca342SEmil Renner Berthing 25*137ca342SEmil Renner Berthing Pinconf is fairly regular except for a few pads in group 1 that either can't 26*137ca342SEmil Renner Berthing be configured or has some special functions. The rest have configurable drive 27*137ca342SEmil Renner Berthing strength, input enable, schmitt trigger, slew rate, pull-up and pull-down in 28*137ca342SEmil Renner Berthing addition to a special strong pull up. 29*137ca342SEmil Renner Berthing 30*137ca342SEmil Renner Berthing Certain pads in group 1 can be muxed to AUDIO_PA0 - AUDIO_PA30 functions and 31*137ca342SEmil Renner Berthing are then meant to be used by the audio co-processor. Each such pad can then 32*137ca342SEmil Renner Berthing be further muxed to either audio GPIO or one of 4 functions such as UART, I2C 33*137ca342SEmil Renner Berthing and I2S. If the audio pad is muxed to one of the 4 functions then pinconf is 34*137ca342SEmil Renner Berthing also configured in different registers. All of this is done from a different 35*137ca342SEmil Renner Berthing AUDIO_IOCTRL memory range and is left to the audio co-processor for now. 36*137ca342SEmil Renner Berthing 37*137ca342SEmil Renner Berthingproperties: 38*137ca342SEmil Renner Berthing compatible: 39*137ca342SEmil Renner Berthing enum: 40*137ca342SEmil Renner Berthing - thead,th1520-pinctrl 41*137ca342SEmil Renner Berthing reg: 42*137ca342SEmil Renner Berthing maxItems: 1 43*137ca342SEmil Renner Berthing 44*137ca342SEmil Renner Berthing clocks: 45*137ca342SEmil Renner Berthing maxItems: 1 46*137ca342SEmil Renner Berthing 47*137ca342SEmil Renner Berthing thead,pad-group: 48*137ca342SEmil Renner Berthing description: | 49*137ca342SEmil Renner Berthing Select the pad group that is associated with the pin controller instance. 50*137ca342SEmil Renner Berthing 51*137ca342SEmil Renner Berthing Base Address Name Group 52*137ca342SEmil Renner Berthing 0xFF_FFF4_A000 PADCTRL_AOSYS 1 53*137ca342SEmil Renner Berthing 0xFF_E7F3_C000 PADCTRL1_APSYS 2 54*137ca342SEmil Renner Berthing 0xFF_EC00_7000 PADCTRL0_APSYS 3 55*137ca342SEmil Renner Berthing 56*137ca342SEmil Renner Berthing $ref: /schemas/types.yaml#/definitions/uint32 57*137ca342SEmil Renner Berthing enum: [1, 2, 3] 58*137ca342SEmil Renner Berthing 59*137ca342SEmil Renner Berthingrequired: 60*137ca342SEmil Renner Berthing - compatible 61*137ca342SEmil Renner Berthing - reg 62*137ca342SEmil Renner Berthing - clocks 63*137ca342SEmil Renner Berthing 64*137ca342SEmil Renner BerthingpatternProperties: 65*137ca342SEmil Renner Berthing '-[0-9]+$': 66*137ca342SEmil Renner Berthing type: object 67*137ca342SEmil Renner Berthing additionalProperties: false 68*137ca342SEmil Renner Berthing 69*137ca342SEmil Renner Berthing patternProperties: 70*137ca342SEmil Renner Berthing '-pins$': 71*137ca342SEmil Renner Berthing type: object 72*137ca342SEmil Renner Berthing allOf: 73*137ca342SEmil Renner Berthing - $ref: /schemas/pinctrl/pincfg-node.yaml# 74*137ca342SEmil Renner Berthing - $ref: /schemas/pinctrl/pinmux-node.yaml# 75*137ca342SEmil Renner Berthing 76*137ca342SEmil Renner Berthing additionalProperties: false 77*137ca342SEmil Renner Berthing 78*137ca342SEmil Renner Berthing description: 79*137ca342SEmil Renner Berthing A pinctrl node should contain at least one subnode describing one 80*137ca342SEmil Renner Berthing or more pads and their associated pinmux and pinconf settings. 81*137ca342SEmil Renner Berthing 82*137ca342SEmil Renner Berthing properties: 83*137ca342SEmil Renner Berthing pins: 84*137ca342SEmil Renner Berthing description: List of pads that properties in the node apply to. 85*137ca342SEmil Renner Berthing 86*137ca342SEmil Renner Berthing function: 87*137ca342SEmil Renner Berthing enum: [ gpio, pwm, uart, ir, i2c, spi, qspi, sdio, audio, i2s, 88*137ca342SEmil Renner Berthing gmac0, gmac1, dpu0, dpu1, isp, hdmi, bootsel, debug, 89*137ca342SEmil Renner Berthing clock, jtag, iso7816, efuse, reset ] 90*137ca342SEmil Renner Berthing description: The mux function to select for the given pins. 91*137ca342SEmil Renner Berthing 92*137ca342SEmil Renner Berthing bias-disable: true 93*137ca342SEmil Renner Berthing 94*137ca342SEmil Renner Berthing bias-pull-up: 95*137ca342SEmil Renner Berthing oneOf: 96*137ca342SEmil Renner Berthing - type: boolean 97*137ca342SEmil Renner Berthing description: Enable the regular 48kOhm pull-up 98*137ca342SEmil Renner Berthing - enum: [ 2100, 48000 ] 99*137ca342SEmil Renner Berthing description: Enable the strong 2.1kOhm pull-up or regular 48kOhm pull-up 100*137ca342SEmil Renner Berthing 101*137ca342SEmil Renner Berthing bias-pull-down: 102*137ca342SEmil Renner Berthing oneOf: 103*137ca342SEmil Renner Berthing - type: boolean 104*137ca342SEmil Renner Berthing - const: 44000 105*137ca342SEmil Renner Berthing description: Enable the regular 44kOhm pull-down 106*137ca342SEmil Renner Berthing 107*137ca342SEmil Renner Berthing drive-strength: 108*137ca342SEmil Renner Berthing enum: [ 1, 2, 3, 5, 7, 8, 10, 12, 13, 15, 16, 18, 20, 21, 23, 25 ] 109*137ca342SEmil Renner Berthing description: Drive strength in mA 110*137ca342SEmil Renner Berthing 111*137ca342SEmil Renner Berthing input-enable: true 112*137ca342SEmil Renner Berthing 113*137ca342SEmil Renner Berthing input-disable: true 114*137ca342SEmil Renner Berthing 115*137ca342SEmil Renner Berthing input-schmitt-enable: true 116*137ca342SEmil Renner Berthing 117*137ca342SEmil Renner Berthing input-schmitt-disable: true 118*137ca342SEmil Renner Berthing 119*137ca342SEmil Renner Berthing slew-rate: 120*137ca342SEmil Renner Berthing maximum: 1 121*137ca342SEmil Renner Berthing 122*137ca342SEmil Renner Berthing required: 123*137ca342SEmil Renner Berthing - pins 124*137ca342SEmil Renner Berthing 125*137ca342SEmil Renner BerthingadditionalProperties: false 126*137ca342SEmil Renner Berthing 127*137ca342SEmil Renner Berthingexamples: 128*137ca342SEmil Renner Berthing - | 129*137ca342SEmil Renner Berthing padctrl0_apsys: pinctrl@ec007000 { 130*137ca342SEmil Renner Berthing compatible = "thead,th1520-pinctrl"; 131*137ca342SEmil Renner Berthing reg = <0xec007000 0x1000>; 132*137ca342SEmil Renner Berthing clocks = <&apb_clk>; 133*137ca342SEmil Renner Berthing thead,pad-group = <3>; 134*137ca342SEmil Renner Berthing 135*137ca342SEmil Renner Berthing uart0_pins: uart0-0 { 136*137ca342SEmil Renner Berthing tx-pins { 137*137ca342SEmil Renner Berthing pins = "UART0_TXD"; 138*137ca342SEmil Renner Berthing function = "uart"; 139*137ca342SEmil Renner Berthing bias-disable; 140*137ca342SEmil Renner Berthing drive-strength = <3>; 141*137ca342SEmil Renner Berthing input-disable; 142*137ca342SEmil Renner Berthing input-schmitt-disable; 143*137ca342SEmil Renner Berthing slew-rate = <0>; 144*137ca342SEmil Renner Berthing }; 145*137ca342SEmil Renner Berthing 146*137ca342SEmil Renner Berthing rx-pins { 147*137ca342SEmil Renner Berthing pins = "UART0_RXD"; 148*137ca342SEmil Renner Berthing function = "uart"; 149*137ca342SEmil Renner Berthing bias-disable; 150*137ca342SEmil Renner Berthing drive-strength = <1>; 151*137ca342SEmil Renner Berthing input-enable; 152*137ca342SEmil Renner Berthing input-schmitt-enable; 153*137ca342SEmil Renner Berthing slew-rate = <0>; 154*137ca342SEmil Renner Berthing }; 155*137ca342SEmil Renner Berthing }; 156*137ca342SEmil Renner Berthing }; 157*137ca342SEmil Renner Berthing 158*137ca342SEmil Renner Berthing padctrl1_apsys: pinctrl@e7f3c000 { 159*137ca342SEmil Renner Berthing compatible = "thead,th1520-pinctrl"; 160*137ca342SEmil Renner Berthing reg = <0xe7f3c000 0x1000>; 161*137ca342SEmil Renner Berthing clocks = <&apb_clk>; 162*137ca342SEmil Renner Berthing thead,pad-group = <2>; 163*137ca342SEmil Renner Berthing 164*137ca342SEmil Renner Berthing i2c5_pins: i2c5-0 { 165*137ca342SEmil Renner Berthing i2c-pins { 166*137ca342SEmil Renner Berthing pins = "QSPI1_CSN0", /* I2C5_SCL */ 167*137ca342SEmil Renner Berthing "QSPI1_D0_MOSI"; /* I2C5_SDA */ 168*137ca342SEmil Renner Berthing function = "i2c"; 169*137ca342SEmil Renner Berthing bias-pull-up = <2100>; 170*137ca342SEmil Renner Berthing drive-strength = <7>; 171*137ca342SEmil Renner Berthing input-enable; 172*137ca342SEmil Renner Berthing input-schmitt-enable; 173*137ca342SEmil Renner Berthing slew-rate = <0>; 174*137ca342SEmil Renner Berthing }; 175*137ca342SEmil Renner Berthing }; 176*137ca342SEmil Renner Berthing }; 177