Documentation / devicetree / bindings / pinctrl / sunplus,sp7021-pinctrl.yaml


Based on kernel version 6.11. Page generated on 2024-09-24 08:21 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# Copyright (C) Sunplus Co., Ltd.
%YAML 1.2
---
$id: http://devicetree.org/schemas/pinctrl/sunplus,sp7021-pinctrl.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Sunplus SP7021 Pin Controller

maintainers:
  - Dvorkin Dmitry <dvorkin@tibbo.com>
  - Wells Lu <wellslutw@gmail.com>

description: |
  The Sunplus SP7021 pin controller is used to control SoC pins. Please
  refer to pinctrl-bindings.txt in this directory for details of the common
  pinctrl bindings used by client devices.
 
  SP7021 has 99 digital GPIO pins which are numbered from GPIO 0 to 98. All
  are multiplexed with some special function pins. SP7021 has 3 types of
  special function pins:
 
  (1) function-group pins:
      Ex 1 (SPI-NOR flash):
        If control-field SPI_FLASH_SEL is set to 1, GPIO 83, 84, 86 and 87
        will be pins of SPI-NOR flash. If it is set to 2, GPIO 76, 78, 79
        and 81 will be pins of SPI-NOR flash.
 
      Ex 2 (UART_0):
        If control-bit UA0_SEL is set to 1, GPIO 88 and 89 will be TX and
        RX pins of UART_0 (UART channel 0).
 
      Ex 3 (eMMC):
        If control-bit EMMC_SEL is set to 1, GPIO 72, 73, 74, 75, 76, 77,
        78, 79, 80, 81 will be pins of an eMMC device.
 
      Properties "function" and "groups" are used to select function-group
      pins.
 
  (2) fully pin-mux (like phone exchange mux) pins:
      GPIO 8 to 71 are 'fully pin-mux' pins. Any pins of peripherals of
      SP7021 (ex: UART_1, UART_2, UART_3, UART_4, I2C_0, I2C_1, and etc.)
      can be routed to any pins of fully pin-mux pins.
 
      Ex 1 (UART channel 1):
        If control-field UA1_TX_SEL is set to 3, TX pin of UART_1 will be
        routed to GPIO 10 (3 - 1 + 8 = 10).
        If control-field UA1_RX_SEL is set to 4, RX pin of UART_1 will be
        routed to GPIO 11 (4 - 1 + 8 = 11).
        If control-field UA1_RTS_SEL is set to 5, RTS pin of UART_1 will
        be routed to GPIO 12 (5 - 1 + 8 = 12).
        If control-field UA1_CTS_SEL is set to 6, CTS pin of UART_1 will
        be routed to GPIO 13 (6 - 1 + 8 = 13).
 
      Ex 2 (I2C channel 0):
        If control-field I2C0_CLK_SEL is set to 20, CLK pin of I2C_0 will
        be routed to GPIO 27 (20 - 1 + 8 = 27).
        If control-field I2C0_DATA_SEL is set to 21, DATA pin of I2C_0
        will be routed to GPIO 28 (21 - 1 + 9 = 28).
 
      Totally, SP7021 has 120 peripheral pins. The peripheral pins can be
      routed to any of 64 'fully pin-mux' pins.
 
  (3) I/O processor pins
      SP7021 has a built-in I/O processor.
      Any GPIO pins (GPIO 0 to 98) can be set to pins of I/O processor.
 
  Vendor property "sunplus,pins" is used to select "fully pin-mux" pins,
  "I/O processor pins" and "digital GPIO" pins.
 
  The device node of pin controller of Sunplus SP7021 has following
  properties.

properties:
  compatible:
    const: sunplus,sp7021-pctl

  gpio-controller: true
 
  '#gpio-cells':
    const: 2

  reg:
    items:
      - description: the MOON2 registers
      - description: the GPIOXT registers
      - description: the FIRST registers
      - description: the MOON1 registers

  reg-names:
    items:
      - const: moon2
      - const: gpioxt
      - const: first
      - const: moon1

  clocks:
    maxItems: 1

  resets:
    maxItems: 1

patternProperties:
  '-pins$':
    type: object
    description: |
      A pinctrl node should contain at least one subnodes representing the
      pins or function-pins group available on the machine. Each subnode
      will list the pins it needs, and how they should be configured.
 
      Pinctrl node's client devices use subnodes for desired pin
      configuration. Client device subnodes use below standard properties.
    $ref: pinmux-node.yaml#

    properties:
      sunplus,pins:
        description: |
          Define 'sunplus,pins' which are used by pinctrl node's client
          device.
 
          It consists of one or more integers which represents the config
          setting for corresponding pin. Each integer defines a individual
          pin in which:
 
          Bit 32~24: defines GPIO number. Its range is 0 ~ 98.
          Bit 23~16: defines types: (1) fully pin-mux pins
                                    (2) IO processor pins
                                    (3) digital GPIO pins
          Bit 15~8:  defines pins of peripherals (which are defined in
                     'include/dt-binging/pinctrl/sppctl.h').
          Bit 7~0:   defines types or initial-state of digital GPIO pins.
 
          Please use macro SPPCTL_IOPAD to define the integers for pins.

        $ref: /schemas/types.yaml#/definitions/uint32-array

      function:
        description: |
          Define pin-function which is used by pinctrl node's client device.
          The name should be one of string in the following enumeration.
        $ref: /schemas/types.yaml#/definitions/string
        enum: [ SPI_FLASH, SPI_FLASH_4BIT, SPI_NAND, CARD0_EMMC, SD_CARD,
                UA0, FPGA_IFX, HDMI_TX, LCDIF, USB0_OTG, USB1_OTG ]

      groups:
        description: |
          Define pin-group in a specified pin-function.
          The name should be one of string in the following enumeration.
        $ref: /schemas/types.yaml#/definitions/string
        enum: [ SPI_FLASH1, SPI_FLASH2, SPI_FLASH_4BIT1, SPI_FLASH_4BIT2,
                SPI_NAND, CARD0_EMMC, SD_CARD, UA0, FPGA_IFX, HDMI_TX1,
                HDMI_TX2, HDMI_TX3, LCDIF, USB0_OTG, USB1_OTG ]

      sunplus,zerofunc:
        description: |
          This is a vendor specific property. It is used to disable pins
          which are not used by pinctrl node's client device.
          Some pins may be enabled by boot-loader. We can use this
          property to disable them.
        $ref: /schemas/types.yaml#/definitions/uint32-array

    additionalProperties: false

    allOf:
      - if:
          properties:
            function:
              enum:
                - SPI_FLASH
        then:
          properties:
            groups:
              enum:
                - SPI_FLASH1
                - SPI_FLASH2
      - if:
          properties:
            function:
              enum:
                - SPI_FLASH_4BIT
        then:
          properties:
            groups:
              enum:
                - SPI_FLASH_4BIT1
                - SPI_FLASH_4BIT2
      - if:
          properties:
            function:
              enum:
                - SPI_NAND
        then:
          properties:
            groups:
              enum:
                - SPI_NAND
      - if:
          properties:
            function:
              enum:
                - CARD0_EMMC
        then:
          properties:
            groups:
              enum:
                - CARD0_EMMC
      - if:
          properties:
            function:
              enum:
                - SD_CARD
        then:
          properties:
            groups:
              enum:
                - SD_CARD
      - if:
          properties:
            function:
              enum:
                - UA0
        then:
          properties:
            groups:
              enum:
                - UA0
      - if:
          properties:
            function:
              enum:
                - FPGA_IFX
        then:
          properties:
            groups:
              enum:
                - FPGA_IFX
      - if:
          properties:
            function:
              enum:
                - HDMI_TX
        then:
          properties:
            groups:
              enum:
                - HDMI_TX1
                - HDMI_TX2
                - HDMI_TX3
      - if:
          properties:
            function:
              enum:
                - LCDIF
        then:
          properties:
            groups:
              enum:
                - LCDIF
      - if:
          properties:
            function:
              enum:
                - USB0_OTG
        then:
          properties:
            groups:
              enum:
                - USB0_OTG
      - if:
          properties:
            function:
              enum:
                - USB1_OTG
        then:
          properties:
            groups:
              enum:
                - USB1_OTG

required:
  - compatible
  - reg
  - reg-names
  - "#gpio-cells"
  - gpio-controller
  - clocks
  - resets

additionalProperties: false

allOf:
  - $ref: pinctrl.yaml#

examples:
  - |
    #include <dt-bindings/pinctrl/sppctl-sp7021.h>
 
    pinctrl@9c000100 {
        compatible = "sunplus,sp7021-pctl";
        reg = <0x9c000100 0x100>, <0x9c000300 0x100>,
              <0x9c0032e4 0x1c>, <0x9c000080 0x20>;
        reg-names = "moon2", "gpioxt", "first", "moon1";
        gpio-controller;
        #gpio-cells = <2>;
        clocks = <&clkc 0x83>;
        resets = <&rstc 0x73>;
 
        uart0-pins {
            function = "UA0";
            groups = "UA0";
        };
 
        spinand0-pins {
            function = "SPI_NAND";
            groups = "SPI_NAND";
        };
 
        uart1-pins {
            sunplus,pins = <
                SPPCTL_IOPAD(11, SPPCTL_PCTL_G_PMUX, MUXF_UA1_TX, 0)
                SPPCTL_IOPAD(10, SPPCTL_PCTL_G_PMUX, MUXF_UA1_RX, 0)
            >;
        };
 
        uart2-pins {
            sunplus,pins = <
                SPPCTL_IOPAD(20, SPPCTL_PCTL_G_PMUX, MUXF_UA1_TX, 0)
                SPPCTL_IOPAD(21, SPPCTL_PCTL_G_PMUX, MUXF_UA1_RX, 0)
                SPPCTL_IOPAD(22, SPPCTL_PCTL_G_PMUX, MUXF_UA1_RTS, 0)
                SPPCTL_IOPAD(23, SPPCTL_PCTL_G_PMUX, MUXF_UA1_CTS, 0)
            >;
        };
 
        emmc-pins {
            function = "CARD0_EMMC";
            groups = "CARD0_EMMC";
        };
 
        sdcard-pins {
            function = "SD_CARD";
            groups = "SD_CARD";
            sunplus,pins = < SPPCTL_IOPAD(91, SPPCTL_PCTL_G_GPIO, 0, 0) >;
        };
 
        hdmi_A_tx1-pins {
            function = "HDMI_TX";
            groups = "HDMI_TX1";
        };
        hdmi_A_tx2-pins {
            function = "HDMI_TX";
            groups = "HDMI_TX2";
        };
        hdmi_A_tx3-pins {
            function = "HDMI_TX";
            groups = "HDMI_TX3";
        };
 
        ethernet-pins {
            sunplus,pins = <
                SPPCTL_IOPAD(49,SPPCTL_PCTL_G_PMUX,MUXF_L2SW_CLK_OUT,0)
                SPPCTL_IOPAD(44,SPPCTL_PCTL_G_PMUX,MUXF_L2SW_MAC_SMI_MDC,0)
                SPPCTL_IOPAD(43,SPPCTL_PCTL_G_PMUX,MUXF_L2SW_MAC_SMI_MDIO,0)
                SPPCTL_IOPAD(52,SPPCTL_PCTL_G_PMUX,MUXF_L2SW_P0_MAC_RMII_TXEN,0)
                SPPCTL_IOPAD(50,SPPCTL_PCTL_G_PMUX,MUXF_L2SW_P0_MAC_RMII_TXD0,0)
                SPPCTL_IOPAD(51,SPPCTL_PCTL_G_PMUX,MUXF_L2SW_P0_MAC_RMII_TXD1,0)
                SPPCTL_IOPAD(46,SPPCTL_PCTL_G_PMUX,MUXF_L2SW_P0_MAC_RMII_CRSDV,0)
                SPPCTL_IOPAD(47,SPPCTL_PCTL_G_PMUX,MUXF_L2SW_P0_MAC_RMII_RXD0,0)
                SPPCTL_IOPAD(48,SPPCTL_PCTL_G_PMUX,MUXF_L2SW_P0_MAC_RMII_RXD1,0)
            >;
            sunplus,zerofunc = <
                MUXF_L2SW_LED_FLASH0
                MUXF_L2SW_LED_ON0
                MUXF_L2SW_P0_MAC_RMII_RXER
            >;
        };
    };
...