Merge tag 'pinctrl-v6.0-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 10 Aug 2022 18:01:44 +0000 (11:01 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 10 Aug 2022 18:01:44 +0000 (11:01 -0700)
Pull pin control updates from Linus Walleij:
 "Outside the pinctrl driver and DT bindings we hit some Arm DT files,
  patched by the maintainers.

  Other than that it is business as usual.

  Core changes:

   - Add PINCTRL_PINGROUP() helper macro (and use it in the AMD driver).

  New drivers:

   - Intel Meteor Lake support.

   - Reneasas RZ/V2M and r8a779g0 (R-Car V4H).

   - AXP209 variants AXP221, AXP223 and AXP809.

   - Qualcomm MSM8909, PM8226, PMP8074 and SM6375.

   - Allwinner D1.

  Improvements:

   - Proper pin multiplexing in the AMD driver.

   - Mediatek MT8192 can use generic drive strength and pin bias, then
     fixes on top plus some I2C pin group fixes.

   - Have the Allwinner Sunplus SP7021 use the generic DT schema and
     make interrupts optional.

   - Handle Qualcomm SC7280 ADSP.

   - Handle Qualcomm MSM8916 CAMSS GP clock muxing.

   - High impedance bias on ZynqMP.

   - Serialize StarFive access to MMIO.

   - Immutable gpiochip for BCM2835, Ingenic, Qualcomm SPMI GPIO"

* tag 'pinctrl-v6.0-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (117 commits)
  dt-bindings: pinctrl: qcom,pmic-gpio: add PM8226 constraints
  pinctrl: qcom: Make PINCTRL_SM8450 depend on PINCTRL_MSM
  pinctrl: qcom: sm8250: Fix PDC map
  pinctrl: amd: Fix an unused variable
  dt-bindings: pinctrl: mt8186: Add and use drive-strength-microamp
  dt-bindings: pinctrl: mt8186: Add gpio-line-names property
  ARM: dts: imxrt1170-pinfunc: Add pinctrl binding header
  pinctrl: amd: Use unicode for debugfs output
  pinctrl: amd: Fix newline declaration in debugfs output
  pinctrl: at91: Fix typo 'the the' in comment
  dt-bindings: pinctrl: st,stm32: Correct 'resets' property name
  pinctrl: mvebu: Missing a blank line after declarations.
  pinctrl: qcom: Add SM6375 TLMM driver
  dt-bindings: pinctrl: Add DT schema for SM6375 TLMM
  dt-bindings: pinctrl: mt8195: Use drive-strength-microamp in examples
  Revert "pinctrl: qcom: spmi-gpio: make the irqchip immutable"
  pinctrl: imx93: Add MODULE_DEVICE_TABLE()
  pinctrl: sunxi: Add driver for Allwinner D1
  pinctrl: sunxi: Make some layout parameters dynamic
  pinctrl: sunxi: Refactor register/offset calculation
  ...

88 files changed:
Documentation/devicetree/bindings/gpio/x-powers,axp209-gpio.yaml
Documentation/devicetree/bindings/pinctrl/allwinner,sun4i-a10-pinctrl.yaml
Documentation/devicetree/bindings/pinctrl/nuvoton,wpcm450-pinctrl.yaml
Documentation/devicetree/bindings/pinctrl/pinctrl-mt8186.yaml
Documentation/devicetree/bindings/pinctrl/pinctrl-mt8192.yaml
Documentation/devicetree/bindings/pinctrl/pinctrl-mt8195.yaml
Documentation/devicetree/bindings/pinctrl/qcom,msm8909-tlmm.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/pinctrl/qcom,pmic-gpio.yaml
Documentation/devicetree/bindings/pinctrl/qcom,sc7280-lpass-lpi-pinctrl.yaml
Documentation/devicetree/bindings/pinctrl/qcom,sm6375-tlmm.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/pinctrl/renesas,pfc.yaml
Documentation/devicetree/bindings/pinctrl/renesas,rzv2m-pinctrl.yaml [new file with mode: 0644]
Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
Documentation/devicetree/bindings/pinctrl/sunplus,sp7021-pinctrl.yaml
Documentation/devicetree/bindings/pinctrl/xlnx,zynqmp-pinctrl.yaml
MAINTAINERS
arch/arm/boot/dts/imxrt1170-pinfunc.h [new file with mode: 0644]
arch/arm/boot/dts/sun6i-a31.dtsi
arch/arm/boot/dts/sun8i-a23-a33.dtsi
arch/arm/boot/dts/sun9i-a80.dtsi
drivers/pinctrl/Kconfig
drivers/pinctrl/aspeed/pinmux-aspeed.h
drivers/pinctrl/bcm/pinctrl-bcm2835.c
drivers/pinctrl/core.c
drivers/pinctrl/freescale/pinctrl-imx93.c
drivers/pinctrl/intel/Kconfig
drivers/pinctrl/intel/Makefile
drivers/pinctrl/intel/pinctrl-baytrail.c
drivers/pinctrl/intel/pinctrl-cherryview.c
drivers/pinctrl/intel/pinctrl-intel.c
drivers/pinctrl/intel/pinctrl-intel.h
drivers/pinctrl/intel/pinctrl-lynxpoint.c
drivers/pinctrl/intel/pinctrl-merrifield.c
drivers/pinctrl/intel/pinctrl-meteorlake.c [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-mt8192.c
drivers/pinctrl/mvebu/pinctrl-mvebu.c
drivers/pinctrl/nomadik/pinctrl-nomadik.c
drivers/pinctrl/pinctrl-amd.c
drivers/pinctrl/pinctrl-amd.h
drivers/pinctrl/pinctrl-at91-pio4.c
drivers/pinctrl/pinctrl-at91.c
drivers/pinctrl/pinctrl-axp209.c
drivers/pinctrl/pinctrl-ingenic.c
drivers/pinctrl/pinctrl-ocelot.c
drivers/pinctrl/pinctrl-starfive.c
drivers/pinctrl/pinctrl-zynqmp.c
drivers/pinctrl/qcom/Kconfig
drivers/pinctrl/qcom/Makefile
drivers/pinctrl/qcom/pinctrl-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-lpass-lpi.h
drivers/pinctrl/qcom/pinctrl-msm8909.c [new file with mode: 0644]
drivers/pinctrl/qcom/pinctrl-msm8916.c
drivers/pinctrl/qcom/pinctrl-sc7280-lpass-lpi.c
drivers/pinctrl/qcom/pinctrl-sm6375.c [new file with mode: 0644]
drivers/pinctrl/qcom/pinctrl-sm8250.c
drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
drivers/pinctrl/renesas/Kconfig
drivers/pinctrl/renesas/Makefile
drivers/pinctrl/renesas/core.c
drivers/pinctrl/renesas/pfc-r8a779f0.c
drivers/pinctrl/renesas/pfc-r8a779g0.c [new file with mode: 0644]
drivers/pinctrl/renesas/pinctrl-rzg2l.c
drivers/pinctrl/renesas/pinctrl-rzv2m.c [new file with mode: 0644]
drivers/pinctrl/renesas/sh_pfc.h
drivers/pinctrl/samsung/pinctrl-exynos.c
drivers/pinctrl/samsung/pinctrl-exynos.h
drivers/pinctrl/samsung/pinctrl-samsung.c
drivers/pinctrl/samsung/pinctrl-samsung.h
drivers/pinctrl/sunxi/Kconfig
drivers/pinctrl/sunxi/Makefile
drivers/pinctrl/sunxi/pinctrl-sun20i-d1.c [new file with mode: 0644]
drivers/pinctrl/sunxi/pinctrl-sun50i-a100-r.c
drivers/pinctrl/sunxi/pinctrl-sun50i-a100.c
drivers/pinctrl/sunxi/pinctrl-sun50i-a64-r.c
drivers/pinctrl/sunxi/pinctrl-sun50i-h6-r.c
drivers/pinctrl/sunxi/pinctrl-sun50i-h616-r.c
drivers/pinctrl/sunxi/pinctrl-sun50i-h616.c
drivers/pinctrl/sunxi/pinctrl-sun6i-a31-r.c
drivers/pinctrl/sunxi/pinctrl-sun8i-a23-r.c
drivers/pinctrl/sunxi/pinctrl-sun8i-a83t-r.c
drivers/pinctrl/sunxi/pinctrl-sun9i-a80-r.c
drivers/pinctrl/sunxi/pinctrl-sunxi.c
drivers/pinctrl/sunxi/pinctrl-sunxi.h
include/dt-bindings/pinctrl/r7s9210-pinctrl.h
include/dt-bindings/pinctrl/rzg2l-pinctrl.h
include/dt-bindings/pinctrl/rzv2m-pinctrl.h [new file with mode: 0644]
include/linux/firmware/xlnx-zynqmp.h
include/linux/pinctrl/pinctrl.h

index 0f628b088cec8a84264fca05849a170d1da2cec3..14486aee97b43639c4b93f76a3e2c727b07b4343 100644 (file)
@@ -19,7 +19,13 @@ properties:
     oneOf:
       - enum:
           - x-powers,axp209-gpio
+          - x-powers,axp221-gpio
           - x-powers,axp813-gpio
+      - items:
+          - enum:
+              - x-powers,axp223-gpio
+              - x-powers,axp809-gpio
+          - const: x-powers,axp221-gpio
       - items:
           - const: x-powers,axp803-gpio
           - const: x-powers,axp813-gpio
index 0681b9a3965f0632d990fb52c96e0ab0cbf9ab8b..d19d65c870aa24bcc1b2131cff02b2f87f2144ac 100644 (file)
@@ -46,6 +46,7 @@ properties:
       - allwinner,sun8i-v3s-pinctrl
       - allwinner,sun9i-a80-pinctrl
       - allwinner,sun9i-a80-r-pinctrl
+      - allwinner,sun20i-d1-pinctrl
       - allwinner,sun50i-a64-pinctrl
       - allwinner,sun50i-a64-r-pinctrl
       - allwinner,sun50i-a100-pinctrl
@@ -80,9 +81,6 @@ properties:
       - const: hosc
       - const: losc
 
-  resets:
-    maxItems: 1
-
   gpio-controller: true
   interrupt-controller: true
   gpio-line-names: true
@@ -181,6 +179,18 @@ allOf:
           minItems: 7
           maxItems: 7
 
+  - if:
+      properties:
+        compatible:
+          enum:
+            - allwinner,sun20i-d1-pinctrl
+
+    then:
+      properties:
+        interrupts:
+          minItems: 6
+          maxItems: 6
+
   - if:
       properties:
         compatible:
index 47a56b83a610d3e34e7077ef9685ef593a422135..7a11beb8f222dd7d77d38c78c7caa561b9cb54f1 100644 (file)
@@ -152,7 +152,7 @@ examples:
       pinctrl-names = "default";
       pinctrl-0 = <&pinctrl_uid>, <&pinmux_uid>;
 
-      uid {
+      button-uid {
         label = "UID";
         linux,code = <102>;
         gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
index 8a2bb860829105253232718400f581ea93b6a7e2..1eeb885ce0c6b5dbffd21be675ecb3c5b3458ef3 100644 (file)
@@ -28,6 +28,8 @@ properties:
   gpio-ranges:
     maxItems: 1
 
+  gpio-line-names: true
+
   reg:
     description: |
       Physical address base for gpio base registers. There are 8 different GPIO
@@ -105,31 +107,8 @@ patternProperties:
           drive-strength:
             enum: [2, 4, 6, 8, 10, 12, 14, 16]
 
-          mediatek,drive-strength-adv:
-            description: |
-              Describe the specific driving setup property.
-              For I2C pins, the existing generic driving setup can only support
-              2/4/6/8/10/12/14/16mA driving. But in specific driving setup, they
-              can support 0.125/0.25/0.5/1mA adjustment. If we enable specific
-              driving setup, the existing generic setup will be disabled.
-              The specific driving setup is controlled by E1E0EN.
-              When E1=0/E0=0, the strength is 0.125mA.
-              When E1=0/E0=1, the strength is 0.25mA.
-              When E1=1/E0=0, the strength is 0.5mA.
-              When E1=1/E0=1, the strength is 1mA.
-              EN is used to enable or disable the specific driving setup.
-              Valid arguments are described as below:
-              0: (E1, E0, EN) = (0, 0, 0)
-              1: (E1, E0, EN) = (0, 0, 1)
-              2: (E1, E0, EN) = (0, 1, 0)
-              3: (E1, E0, EN) = (0, 1, 1)
-              4: (E1, E0, EN) = (1, 0, 0)
-              5: (E1, E0, EN) = (1, 0, 1)
-              6: (E1, E0, EN) = (1, 1, 0)
-              7: (E1, E0, EN) = (1, 1, 1)
-              So the valid arguments are from 0 to 7.
-            $ref: /schemas/types.yaml#/definitions/uint32
-            enum: [0, 1, 2, 3, 4, 5, 6, 7]
+          drive-strength-microamp:
+            enum: [125, 250, 500, 1000]
 
           bias-pull-down:
             oneOf:
@@ -291,7 +270,7 @@ examples:
           pinmux = <PINMUX_GPIO127__FUNC_SCL0>,
                    <PINMUX_GPIO128__FUNC_SDA0>;
           bias-pull-up = <MTK_PULL_SET_RSEL_001>;
-          mediatek,drive-strength-adv = <7>;
+          drive-strength-microamp = <1000>;
         };
       };
     };
index c90a132fbc790e325cbb5629a781a89b633f9362..e0e943e5b8746df69679e3ab2c148d0c675387e8 100644 (file)
@@ -80,46 +80,30 @@ patternProperties:
               dt-bindings/pinctrl/mt65xx.h. It can only support 2/4/6/8/10/12/14/16mA in mt8192.
             enum: [2, 4, 6, 8, 10, 12, 14, 16]
 
-          mediatek,drive-strength-adv:
-            description: |
-              Describe the specific driving setup property.
-              For I2C pins, the existing generic driving setup can only support
-              2/4/6/8/10/12/14/16mA driving. But in specific driving setup, they
-              can support 0.125/0.25/0.5/1mA adjustment. If we enable specific
-              driving setup, the existing generic setup will be disabled.
-              The specific driving setup is controlled by E1E0EN.
-              When E1=0/E0=0, the strength is 0.125mA.
-              When E1=0/E0=1, the strength is 0.25mA.
-              When E1=1/E0=0, the strength is 0.5mA.
-              When E1=1/E0=1, the strength is 1mA.
-              EN is used to enable or disable the specific driving setup.
-              Valid arguments are described as below:
-              0: (E1, E0, EN) = (0, 0, 0)
-              1: (E1, E0, EN) = (0, 0, 1)
-              2: (E1, E0, EN) = (0, 1, 0)
-              3: (E1, E0, EN) = (0, 1, 1)
-              4: (E1, E0, EN) = (1, 0, 0)
-              5: (E1, E0, EN) = (1, 0, 1)
-              6: (E1, E0, EN) = (1, 1, 0)
-              7: (E1, E0, EN) = (1, 1, 1)
-              So the valid arguments are from 0 to 7.
-            $ref: /schemas/types.yaml#/definitions/uint32
-            enum: [0, 1, 2, 3, 4, 5, 6, 7]
-
-          mediatek,pull-up-adv:
-            description: |
-              Pull up settings for 2 pull resistors, R0 and R1. User can
-              configure those special pins. Valid arguments are described as below:
-              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
-              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
-              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
-              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
-            $ref: /schemas/types.yaml#/definitions/uint32
-            enum: [0, 1, 2, 3]
-
-          bias-pull-down: true
-
-          bias-pull-up: true
+          drive-strength-microamp:
+            enum: [125, 250, 500, 1000]
+
+          bias-pull-down:
+            oneOf:
+              - type: boolean
+                description: normal pull down.
+              - enum: [100, 101, 102, 103]
+                description: PUPD/R1/R0 pull down type. See MTK_PUPD_SET_R1R0_
+                  defines in dt-bindings/pinctrl/mt65xx.h.
+              - enum: [200, 201, 202, 203]
+                description: RSEL pull down type. See MTK_PULL_SET_RSEL_
+                  defines in dt-bindings/pinctrl/mt65xx.h.
+
+          bias-pull-up:
+            oneOf:
+              - type: boolean
+                description: normal pull up.
+              - enum: [100, 101, 102, 103]
+                description: PUPD/R1/R0 pull up type. See MTK_PUPD_SET_R1R0_
+                  defines in dt-bindings/pinctrl/mt65xx.h.
+              - enum: [200, 201, 202, 203]
+                description: RSEL pull up type. See MTK_PULL_SET_RSEL_
+                  defines in dt-bindings/pinctrl/mt65xx.h.
 
           bias-disable: true
 
index c5b755514c46f4ca970e1a34dabad06c388a8223..66fe17e9e4d334180c17afaebbe9e2ef1da6b201 100644 (file)
@@ -29,6 +29,8 @@ properties:
     description: gpio valid number range.
     maxItems: 1
 
+  gpio-line-names: true
+
   reg:
     description: |
       Physical address base for gpio base registers. There are 8 GPIO
@@ -49,7 +51,7 @@ properties:
     description: The interrupt outputs to sysirq.
     maxItems: 1
 
-  mediatek,rsel_resistance_in_si_unit:
+  mediatek,rsel-resistance-in-si-unit:
     type: boolean
     description: |
       Identifying i2c pins pull up/down type which is RSEL. It can support
@@ -98,31 +100,8 @@ patternProperties:
           drive-strength:
             enum: [2, 4, 6, 8, 10, 12, 14, 16]
 
-          mediatek,drive-strength-adv:
-            description: |
-              Describe the specific driving setup property.
-              For I2C pins, the existing generic driving setup can only support
-              2/4/6/8/10/12/14/16mA driving. But in specific driving setup, they
-              can support 0.125/0.25/0.5/1mA adjustment. If we enable specific
-              driving setup, the existing generic setup will be disabled.
-              The specific driving setup is controlled by E1E0EN.
-              When E1=0/E0=0, the strength is 0.125mA.
-              When E1=0/E0=1, the strength is 0.25mA.
-              When E1=1/E0=0, the strength is 0.5mA.
-              When E1=1/E0=1, the strength is 1mA.
-              EN is used to enable or disable the specific driving setup.
-              Valid arguments are described as below:
-              0: (E1, E0, EN) = (0, 0, 0)
-              1: (E1, E0, EN) = (0, 0, 1)
-              2: (E1, E0, EN) = (0, 1, 0)
-              3: (E1, E0, EN) = (0, 1, 1)
-              4: (E1, E0, EN) = (1, 0, 0)
-              5: (E1, E0, EN) = (1, 0, 1)
-              6: (E1, E0, EN) = (1, 1, 0)
-              7: (E1, E0, EN) = (1, 1, 1)
-              So the valid arguments are from 0 to 7.
-            $ref: /schemas/types.yaml#/definitions/uint32
-            enum: [0, 1, 2, 3, 4, 5, 6, 7]
+          drive-strength-microamp:
+            enum: [125, 250, 500, 1000]
 
           bias-pull-down:
             oneOf:
@@ -142,7 +121,7 @@ patternProperties:
               "MTK_PUPD_SET_R1R0_11" define in mt8195.
               For pull down type is RSEL, it can add RSEL define & resistance
               value(ohm) to set different resistance by identifying property
-              "mediatek,rsel_resistance_in_si_unit".
+              "mediatek,rsel-resistance-in-si-unit".
               It can support "MTK_PULL_SET_RSEL_000" & "MTK_PULL_SET_RSEL_001"
               & "MTK_PULL_SET_RSEL_010" & "MTK_PULL_SET_RSEL_011"
               & "MTK_PULL_SET_RSEL_100" & "MTK_PULL_SET_RSEL_101"
@@ -161,7 +140,7 @@ patternProperties:
               };
               An example of using si unit resistance value(ohm):
               &pio {
-                mediatek,rsel_resistance_in_si_unit;
+                mediatek,rsel-resistance-in-si-unit;
               }
               pincontroller {
                 i2c0_pin {
@@ -190,7 +169,7 @@ patternProperties:
               "MTK_PUPD_SET_R1R0_11" define in mt8195.
               For pull up type is RSEL, it can add RSEL define & resistance
               value(ohm) to set different resistance by identifying property
-              "mediatek,rsel_resistance_in_si_unit".
+              "mediatek,rsel-resistance-in-si-unit".
               It can support "MTK_PULL_SET_RSEL_000" & "MTK_PULL_SET_RSEL_001"
               & "MTK_PULL_SET_RSEL_010" & "MTK_PULL_SET_RSEL_011"
               & "MTK_PULL_SET_RSEL_100" & "MTK_PULL_SET_RSEL_101"
@@ -209,7 +188,7 @@ patternProperties:
               };
               An example of using si unit resistance value(ohm):
               &pio {
-                mediatek,rsel_resistance_in_si_unit;
+                mediatek,rsel-resistance-in-si-unit;
               }
               pincontroller {
                 i2c0-pins {
@@ -302,7 +281,7 @@ examples:
           pinmux = <PINMUX_GPIO8__FUNC_SDA0>,
                    <PINMUX_GPIO9__FUNC_SCL0>;
           bias-disable;
-          mediatek,drive-strength-adv = <7>;
+          drive-strength-microamp = <1000>;
         };
       };
     };
diff --git a/Documentation/devicetree/bindings/pinctrl/qcom,msm8909-tlmm.yaml b/Documentation/devicetree/bindings/pinctrl/qcom,msm8909-tlmm.yaml
new file mode 100644 (file)
index 0000000..e035300
--- /dev/null
@@ -0,0 +1,152 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/qcom,msm8909-tlmm.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm Technologies, Inc. MSM8909 TLMM block
+
+maintainers:
+  - Stephan Gerhold <stephan@gerhold.net>
+
+description: |
+  This binding describes the Top Level Mode Multiplexer (TLMM) block found
+  in the MSM8909 platform.
+
+allOf:
+  - $ref: /schemas/pinctrl/qcom,tlmm-common.yaml#
+
+properties:
+  compatible:
+    const: qcom,msm8909-tlmm
+
+  reg:
+    maxItems: 1
+
+  interrupts: true
+  interrupt-controller: true
+  '#interrupt-cells': true
+  gpio-controller: true
+  gpio-reserved-ranges: true
+  '#gpio-cells': true
+  gpio-ranges: true
+  wakeup-parent: true
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+patternProperties:
+  '-state$':
+    oneOf:
+      - $ref: "#/$defs/qcom-msm8909-tlmm-state"
+      - patternProperties:
+          ".*":
+            $ref: "#/$defs/qcom-msm8909-tlmm-state"
+
+$defs:
+  qcom-msm8909-tlmm-state:
+    type: object
+    description:
+      Pinctrl node's client devices use subnodes for desired pin configuration.
+      Client device subnodes use below standard properties.
+    $ref: "qcom,tlmm-common.yaml#/$defs/qcom-tlmm-state"
+
+    properties:
+      pins:
+        description:
+          List of gpio pins affected by the properties specified in this
+          subnode.
+        items:
+          oneOf:
+            - pattern: "^gpio([0-9]|[1-9][0-9]|10[0-9]|11[0-7])$"
+            - enum: [ sdc1_clk, sdc1_cmd, sdc1_data, sdc2_clk, sdc2_cmd,
+                      sdc2_data, qdsd_clk, qdsd_cmd, qdsd_data0, qdsd_data1,
+                      qdsd_data2, qdsd_data3 ]
+        minItems: 1
+        maxItems: 16
+
+      function:
+        description:
+          Specify the alternative function to be configured for the specified
+          pins.
+        enum: [ adsp_ext, atest_bbrx0, atest_bbrx1, atest_char, atest_char0,
+                atest_char1, atest_char2, atest_char3, atest_combodac,
+                atest_gpsadc0, atest_gpsadc1, atest_wlan0, atest_wlan1,
+                bimc_dte0, bimc_dte1, blsp_i2c1, blsp_i2c2, blsp_i2c3,
+                blsp_i2c4, blsp_i2c5, blsp_i2c6, blsp_spi1, blsp_spi1_cs1,
+                blsp_spi1_cs2, blsp_spi1_cs3, blsp_spi2, blsp_spi2_cs1,
+                blsp_spi2_cs2, blsp_spi2_cs3, blsp_spi3, blsp_spi3_cs1,
+                blsp_spi3_cs2, blsp_spi3_cs3, blsp_spi4, blsp_spi5, blsp_spi6,
+                blsp_uart1, blsp_uart2, blsp_uim1, blsp_uim2, cam_mclk,
+                cci_async, cci_timer0, cci_timer1, cci_timer2, cdc_pdm0,
+                dbg_out, dmic0_clk, dmic0_data, ebi0_wrcdc, ebi2_a, ebi2_lcd,
+                ext_lpass, gcc_gp1_clk_a, gcc_gp1_clk_b, gcc_gp2_clk_a,
+                gcc_gp2_clk_b, gcc_gp3_clk_a, gcc_gp3_clk_b, gcc_plltest, gpio,
+                gsm0_tx, ldo_en, ldo_update, m_voc, mdp_vsync, modem_tsync,
+                nav_pps, nav_tsync, pa_indicator, pbs0, pbs1, pbs2,
+                pri_mi2s_data0_a, pri_mi2s_data0_b, pri_mi2s_data1_a,
+                pri_mi2s_data1_b, pri_mi2s_mclk_a, pri_mi2s_mclk_b,
+                pri_mi2s_sck_a, pri_mi2s_sck_b, pri_mi2s_ws_a, pri_mi2s_ws_b,
+                prng_rosc, pwr_crypto_enabled_a, pwr_crypto_enabled_b,
+                pwr_modem_enabled_a, pwr_modem_enabled_b, pwr_nav_enabled_a,
+                pwr_nav_enabled_b, qdss_cti_trig_in_a0, qdss_cti_trig_in_a1,
+                qdss_cti_trig_in_b0, qdss_cti_trig_in_b1, qdss_cti_trig_out_a0,
+                qdss_cti_trig_out_a1, qdss_cti_trig_out_b0,
+                qdss_cti_trig_out_b1, qdss_traceclk_a, qdss_tracectl_a,
+                qdss_tracedata_a, qdss_tracedata_b, sd_write, sec_mi2s,
+                smb_int, ssbi0, ssbi1, uim1_clk, uim1_data, uim1_present,
+                uim1_reset, uim2_clk, uim2_data, uim2_present, uim2_reset,
+                uim3_clk, uim3_data, uim3_present, uim3_reset, uim_batt,
+                wcss_bt, wcss_fm, wcss_wlan ]
+
+      bias-disable: true
+      bias-pull-down: true
+      bias-pull-up: true
+      drive-strength: true
+      input-enable: true
+      output-high: true
+      output-low: true
+
+    required:
+      - pins
+      - function
+
+    additionalProperties: false
+
+examples:
+  - |
+        #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+        pinctrl@1000000 {
+                compatible = "qcom,msm8909-tlmm";
+                reg = <0x1000000 0x300000>;
+                interrupts = <GIC_SPI 208 IRQ_TYPE_LEVEL_HIGH>;
+                gpio-controller;
+                #gpio-cells = <2>;
+                gpio-ranges = <&tlmm 0 0 117>;
+                interrupt-controller;
+                #interrupt-cells = <2>;
+
+                gpio-wo-subnode-state {
+                        pins = "gpio1";
+                        function = "gpio";
+                };
+
+                uart-w-subnodes-state {
+                        rx {
+                                pins = "gpio4";
+                                function = "blsp_uart1";
+                                bias-pull-up;
+                        };
+
+                        tx {
+                                pins = "gpio5";
+                                function = "blsp_uart1";
+                                bias-disable;
+                        };
+                };
+        };
+...
index 6f2efc3772cbe54d3633ba107270ffd6d2a3c387..694898f382be5f1ecf86b0fa2918450bfdb82032 100644 (file)
@@ -52,6 +52,7 @@ properties:
           - qcom,pmi8998-gpio
           - qcom,pmk8350-gpio
           - qcom,pmm8155au-gpio
+          - qcom,pmp8074-gpio
           - qcom,pmr735a-gpio
           - qcom,pmr735b-gpio
           - qcom,pms405-gpio
@@ -158,6 +159,7 @@ allOf:
         compatible:
           contains:
             enum:
+              - qcom,pm8226-gpio
               - qcom,pm8350b-gpio
               - qcom,pm8950-gpio
     then:
@@ -233,6 +235,7 @@ allOf:
               - qcom,pm8150b-gpio
               - qcom,pm8150l-gpio
               - qcom,pmc8180c-gpio
+              - qcom,pmp8074-gpio
               - qcom,pms405-gpio
     then:
       properties:
@@ -415,6 +418,7 @@ $defs:
                  - gpio1-gpio10 for pmi8994
                  - gpio1-gpio4 for pmk8350
                  - gpio1-gpio10 for pmm8155au
+                 - gpio1-gpio12 for pmp8074 (holes on gpio1 and gpio12)
                  - gpio1-gpio4 for pmr735a
                  - gpio1-gpio4 for pmr735b
                  - gpio1-gpio12 for pms405 (holes on gpio1, gpio9
index d32ee32776e8f6481d1e7f65e6c8a96115a952e4..33d1d37fdf6db1496f15bacde42e145f2575c51e 100644 (file)
@@ -19,6 +19,11 @@ properties:
   compatible:
     const: qcom,sc7280-lpass-lpi-pinctrl
 
+  qcom,adsp-bypass-mode:
+    description:
+      Tells ADSP is in bypass mode.
+    type: boolean
+
   reg:
     minItems: 2
     maxItems: 2
diff --git a/Documentation/devicetree/bindings/pinctrl/qcom,sm6375-tlmm.yaml b/Documentation/devicetree/bindings/pinctrl/qcom,sm6375-tlmm.yaml
new file mode 100644 (file)
index 0000000..3908807
--- /dev/null
@@ -0,0 +1,158 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/qcom,sm6375-tlmm.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm Technologies, Inc. SM6375 TLMM block
+
+maintainers:
+  - Konrad Dybcio <konrad.dybcio@somainline.org>
+
+description: |
+  This binding describes the Top Level Mode Multiplexer (TLMM) block found
+  in the SM6375 platform.
+
+allOf:
+  - $ref: "pinctrl.yaml#"
+  - $ref: /schemas/pinctrl/qcom,tlmm-common.yaml#
+
+properties:
+  compatible:
+    const: qcom,sm6375-tlmm
+
+  reg:
+    maxItems: 1
+
+  interrupts: true
+  interrupt-controller: true
+  '#interrupt-cells': true
+  gpio-controller: true
+  gpio-reserved-ranges: true
+  '#gpio-cells': true
+  gpio-ranges: true
+  wakeup-parent: true
+
+required:
+  - compatible
+  - reg
+
+additionalProperties: false
+
+patternProperties:
+  '-state$':
+    oneOf:
+      - $ref: "#/$defs/qcom-sm6375-tlmm-state"
+      - patternProperties:
+          ".*":
+            $ref: "#/$defs/qcom-sm6375-tlmm-state"
+
+$defs:
+  qcom-sm6375-tlmm-state:
+    type: object
+    description:
+      Pinctrl node's client devices use subnodes for desired pin configuration.
+      Client device subnodes use below standard properties.
+    $ref: "qcom,tlmm-common.yaml#/$defs/qcom-tlmm-state"
+
+    properties:
+      pins:
+        description:
+          List of gpio pins affected by the properties specified in this
+          subnode.
+        items:
+          oneOf:
+            - pattern: "^gpio([0-9]|[1-9][0-9]|1[0-4][0-9]|15[0-6])$"
+            - enum: [ ufs_reset, sdc1_clk, sdc1_cmd, sdc1_data, sdc2_clk,
+                      sdc2_cmd, sdc2_data ]
+        minItems: 1
+        maxItems: 36
+
+      function:
+        description:
+          Specify the alternative function to be configured for the specified
+          pins.
+
+        enum: [ adsp_ext, agera_pll, atest_char, atest_char0, atest_char1,
+                atest_char2, atest_char3, atest_tsens, atest_tsens2,
+                atest_usb1, atest_usb10, atest_usb11, atest_usb12,
+                atest_usb13, atest_usb2, atest_usb20, atest_usb21,
+                atest_usb22, atest_usb23, audio_ref, btfm_slimbus, cam_mclk,
+                cci_async, cci_i2c, cci_timer0, cci_timer1, cci_timer2,
+                cci_timer3, cci_timer4, cri_trng, dbg_out, ddr_bist,
+                ddr_pxi0, ddr_pxi1, ddr_pxi2, ddr_pxi3, dp_hot, edp_lcd,
+                gcc_gp1, gcc_gp2, gcc_gp3, gp_pdm0, gp_pdm1, gp_pdm2, gpio,
+                gps_tx, ibi_i3c, jitter_bist, ldo_en, ldo_update, lpass_ext,
+                m_voc, mclk, mdp_vsync, mdp_vsync0, mdp_vsync1, mdp_vsync2,
+                mdp_vsync3, mi2s_0, mi2s_1, mi2s_2, mss_lte, nav_gpio,
+                nav_pps, pa_indicator, phase_flag0, phase_flag1, phase_flag10,
+                phase_flag11, phase_flag12, phase_flag13, phase_flag14,
+                phase_flag15, phase_flag16, phase_flag17, phase_flag18,
+                phase_flag19, phase_flag2, phase_flag20, phase_flag21,
+                phase_flag22, phase_flag23, phase_flag24, phase_flag25,
+                phase_flag26, phase_flag27, phase_flag28, phase_flag29,
+                phase_flag3, phase_flag30, phase_flag31, phase_flag4,
+                phase_flag5, phase_flag6, phase_flag7, phase_flag8,
+                phase_flag9, pll_bist, pll_bypassnl, pll_clk, pll_reset,
+                prng_rosc0, prng_rosc1, prng_rosc2, prng_rosc3, qdss_cti,
+                qdss_gpio, qdss_gpio0, qdss_gpio1, qdss_gpio10, qdss_gpio11,
+                qdss_gpio12, qdss_gpio13, qdss_gpio14, qdss_gpio15,
+                qdss_gpio2, qdss_gpio3, qdss_gpio4, qdss_gpio5, qdss_gpio6,
+                qdss_gpio7, qdss_gpio8, qdss_gpio9, qlink0_enable,
+                qlink0_request, qlink0_wmss, qlink1_enable, qlink1_request,
+                qlink1_wmss, qup00, qup01, qup02, qup10, qup11_f1, qup11_f2,
+                qup12, qup13_f1, qup13_f2, qup14, sd_write, sdc1_tb, sdc2_tb,
+                sp_cmu, tgu_ch0, tgu_ch1, tgu_ch2, tgu_ch3, tsense_pwm1,
+                tsense_pwm2, uim1_clk, uim1_data, uim1_present, uim1_reset,
+                uim2_clk, uim2_data, uim2_present, uim2_reset, usb2phy_ac,
+                usb_phy, vfr_1, vsense_trigger, wlan1_adc0, wlan1_adc1,
+                wlan2_adc0, wlan2_adc1 ]
+
+
+      bias-disable: true
+      bias-pull-down: true
+      bias-pull-up: true
+      drive-strength: true
+      input-enable: true
+      output-high: true
+      output-low: true
+
+    required:
+      - pins
+      - function
+
+    additionalProperties: false
+
+examples:
+  - |
+        #include <dt-bindings/interrupt-controller/arm-gic.h>
+        pinctrl@500000 {
+                compatible = "qcom,sm6375-tlmm";
+                reg = <0x00500000 0x800000>;
+                interrupts = <GIC_SPI 227 IRQ_TYPE_LEVEL_HIGH>;
+                gpio-controller;
+                #gpio-cells = <2>;
+                interrupt-controller;
+                #interrupt-cells = <2>;
+                gpio-ranges = <&tlmm 0 0 157>;
+
+                gpio-wo-subnode-state {
+                        pins = "gpio1";
+                        function = "gpio";
+                };
+
+                uart-w-subnodes-state {
+                        rx {
+                                pins = "gpio18";
+                                function = "qup13_f2";
+                                bias-pull-up;
+                        };
+
+                        tx {
+                                pins = "gpio19";
+                                function = "qup13_f2";
+                                bias-disable;
+                        };
+                };
+        };
+...
index 2a57df75d832f14bd12fc4a6fdcc5dec9294e8dc..4fc758fea7e676d7f019f0844fd8d19943593c6a 100644 (file)
@@ -45,6 +45,7 @@ properties:
       - renesas,pfc-r8a77995    # R-Car D3
       - renesas,pfc-r8a779a0    # R-Car V3U
       - renesas,pfc-r8a779f0    # R-Car S4-8
+      - renesas,pfc-r8a779g0    # R-Car V4H
       - renesas,pfc-sh73a0      # SH-Mobile AG5
 
   reg:
diff --git a/Documentation/devicetree/bindings/pinctrl/renesas,rzv2m-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/renesas,rzv2m-pinctrl.yaml
new file mode 100644 (file)
index 0000000..eac6245
--- /dev/null
@@ -0,0 +1,170 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/renesas,rzv2m-pinctrl.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Renesas RZ/V2M combined Pin and GPIO controller
+
+maintainers:
+  - Geert Uytterhoeven <geert+renesas@glider.be>
+  - Phil Edworthy <phil.edworthy@renesas.com>
+
+description:
+  The Renesas RZ/V2M SoC features a combined Pin and GPIO controller.
+  Pin multiplexing and GPIO configuration is performed on a per-pin basis.
+  Each port features up to 16 pins, each of them configurable for GPIO function
+  (port mode) or in alternate function mode.
+  Up to 8 different alternate function modes exist for each single pin.
+
+properties:
+  compatible:
+    const: renesas,r9a09g011-pinctrl # RZ/V2M
+
+  reg:
+    maxItems: 1
+
+  gpio-controller: true
+
+  '#gpio-cells':
+    const: 2
+    description:
+      The first cell contains the global GPIO port index, constructed using the
+      RZV2M_GPIO() helper macro in <dt-bindings/pinctrl/rzv2m-pinctrl.h> and the
+      second cell represents consumer flag as mentioned in ../gpio/gpio.txt
+      E.g. "RZV2M_GPIO(8, 1)" for P8_1.
+
+  gpio-ranges:
+    maxItems: 1
+
+  interrupts:
+    description: INEXINT[0..38] corresponding to individual pin inputs.
+    maxItems: 39
+
+  clocks:
+    maxItems: 1
+
+  power-domains:
+    maxItems: 1
+
+  resets:
+    maxItems: 1
+
+additionalProperties:
+  anyOf:
+    - type: object
+      allOf:
+        - $ref: pincfg-node.yaml#
+        - $ref: pinmux-node.yaml#
+
+      description:
+        Pin controller client devices use pin configuration subnodes (children
+        and grandchildren) for desired pin configuration.
+        Client device subnodes use below standard properties.
+
+      properties:
+        phandle: true
+        pinmux:
+          description:
+            Values are constructed from GPIO port number, pin number, and
+            alternate function configuration number using the RZV2M_PORT_PINMUX()
+            helper macro in <dt-bindings/pinctrl/rzv2m-pinctrl.h>.
+        pins: true
+        bias-disable: true
+        bias-pull-down: true
+        bias-pull-up: true
+        drive-strength-microamp:
+          # Superset of supported values
+          enum: [ 1600, 1800, 2000, 3200, 3800, 4000, 6400, 7800, 8000,
+                  9000, 9600, 11000, 12000, 13000, 18000 ]
+        slew-rate:
+          description: 0 is slow slew rate, 1 is fast slew rate
+          enum: [ 0, 1 ]
+        gpio-hog: true
+        gpios: true
+        output-high: true
+        output-low: true
+        line-name: true
+
+    - type: object
+      properties:
+        phandle: true
+
+      additionalProperties:
+        $ref: "#/additionalProperties/anyOf/0"
+
+allOf:
+  - $ref: "pinctrl.yaml#"
+
+required:
+  - compatible
+  - reg
+  - gpio-controller
+  - '#gpio-cells'
+  - gpio-ranges
+  - interrupts
+  - clocks
+  - power-domains
+  - resets
+
+examples:
+  - |
+    #include <dt-bindings/pinctrl/rzv2m-pinctrl.h>
+    #include <dt-bindings/clock/r9a09g011-cpg.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+    pinctrl: pinctrl@b6250000 {
+            compatible = "renesas,r9a09g011-pinctrl";
+            reg = <0xb6250000 0x800>;
+
+            gpio-controller;
+            #gpio-cells = <2>;
+            gpio-ranges = <&pinctrl 0 0 352>;
+            interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
+                         <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
+            clocks = <&cpg CPG_MOD R9A09G011_PFC_PCLK>;
+            resets = <&cpg R9A09G011_PFC_PRESETN>;
+            power-domains = <&cpg>;
+
+            i2c2_pins: i2c2 {
+                    pinmux = <RZV2M_PORT_PINMUX(3, 8, 2)>, /* SDA */
+                             <RZV2M_PORT_PINMUX(3, 9, 2)>; /* SCL */
+            };
+    };
index 335ffc1353b5c0537a413f0507a3c835767fcb94..d35dcc4f024219ba869d72ce4506f7ab8553a502 100644 (file)
@@ -59,6 +59,7 @@ properties:
 patternProperties:
   '^gpio@[0-9a-f]*$':
     type: object
+    additionalProperties: false
     properties:
       gpio-controller: true
       '#gpio-cells':
@@ -68,8 +69,7 @@ patternProperties:
         maxItems: 1
       clocks:
         maxItems: 1
-      reset:
-        minItems: 1
+      resets:
         maxItems: 1
       gpio-ranges:
         minItems: 1
index d8e75b3e64f1ec2aeaf70406d588cf73486c1d15..15092fdd4b5bbbaa84e48388f8cebd6ac4c1ac30 100644 (file)
@@ -288,11 +288,14 @@ required:
 
 additionalProperties: false
 
+allOf:
+  - $ref: "pinctrl.yaml#"
+
 examples:
   - |
     #include <dt-bindings/pinctrl/sppctl-sp7021.h>
 
-    pinctl@9c000100 {
+    pinctrl@9c000100 {
         compatible = "sunplus,sp7021-pctl";
         reg = <0x9c000100 0x100>, <0x9c000300 0x100>,
               <0x9c0032e4 0x1c>, <0x9c000080 0x20>;
index 2722dc7bb03daaf05e4b66a13395a51acda92427..1e2b9b627b12699ddd727ae11184dd9062887a0a 100644 (file)
@@ -274,6 +274,10 @@ patternProperties:
           slew-rate:
             enum: [0, 1]
 
+          output-enable:
+            description:
+              This will internally disable the tri-state for MIO pins.
+
           drive-strength:
             description:
               Selects the drive strength for MIO pins, in mA.
index 4b08856c0846b2066fc65736791abaa178065694..9b6c0f0bda1418421e074dae7a3e229f4ddf68f6 100644 (file)
@@ -16061,6 +16061,7 @@ T:      git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
 F:     Documentation/devicetree/bindings/pinctrl/
 F:     Documentation/driver-api/pin-control.rst
 F:     drivers/pinctrl/
+F:     include/dt-bindings/pinctrl/
 F:     include/linux/pinctrl/
 
 PIN CONTROLLER - AMD
diff --git a/arch/arm/boot/dts/imxrt1170-pinfunc.h b/arch/arm/boot/dts/imxrt1170-pinfunc.h
new file mode 100644 (file)
index 0000000..3b9fff2
--- /dev/null
@@ -0,0 +1,1561 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
+/*
+ * Copyright (C) 2021
+ * Author(s): Jesse Taube <Mr.Bossman075@gmail.com>
+ */
+
+#ifndef _DT_BINDINGS_PINCTRL_IMXRT1170_PINFUNC_H
+#define _DT_BINDINGS_PINCTRL_IMXRT1170_PINFUNC_H
+
+#define IMX_PAD_SION           0x40000000
+
+/*
+ * The pin function ID is a tuple of
+ * <mux_reg conf_reg input_reg mux_mode input_val>
+ */
+
+#define IOMUXC_GPIO_LPSR_00_FLEXCAN3_TX                                0x000 0x040 0x0 0x0 0x0
+#define IOMUXC_GPIO_LPSR_00_MIC_CLK                            0x000 0x040 0x0 0x1 0x0
+#define IOMUXC_GPIO_LPSR_00_MQS_RIGHT                          0x000 0x040 0x0 0x2 0x0
+#define IOMUXC_GPIO_LPSR_00_ARM_CM4_EVENTO                     0x000 0x040 0x0 0x3 0x0
+#define IOMUXC_GPIO_LPSR_00_GPIO_MUX6_IO00                     0x000 0x040 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_00_LPUART12_TXD                       0x000 0x040 0x0B0 0x6 0x0
+#define IOMUXC_GPIO_LPSR_00_SAI4_MCLK                          0x000 0x040 0x0C8 0x7 0x0
+#define IOMUXC_GPIO_LPSR_00_GPIO12_IO00                                0x000 0x040 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_LPSR_01_FLEXCAN3_RX                                0x004 0x044 0x080 0x0 0x0
+#define IOMUXC_GPIO_LPSR_01_MIC_BITSTREAM0                     0x004 0x044 0x0B4 0x1 0x0
+#define IOMUXC_GPIO_LPSR_01_MQS_LEFT                           0x004 0x044 0x0 0x2 0x0
+#define IOMUXC_GPIO_LPSR_01_ARM_CM4_EVENTI                     0x004 0x044 0x0 0x3 0x0
+#define IOMUXC_GPIO_LPSR_01_GPIO_MUX6_IO01                     0x004 0x044 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_01_LPUART12_RXD                       0x004 0x044 0x0AC 0x6 0x0
+#define IOMUXC_GPIO_LPSR_01_GPIO12_IO01                                0x004 0x044 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_LPSR_02_GPIO12_IO02                                0x008 0x048 0x0 0xA 0x0
+#define IOMUXC_GPIO_LPSR_02_SRC_BOOT_MODE00                    0x008 0x048 0x0 0x0 0x0
+#define IOMUXC_GPIO_LPSR_02_LPSPI5_SCK                         0x008 0x048 0x098 0x1 0x0
+#define IOMUXC_GPIO_LPSR_02_SAI4_TX_DATA                       0x008 0x048 0x0 0x2 0x0
+#define IOMUXC_GPIO_LPSR_02_MQS_RIGHT                          0x008 0x048 0x0 0x3 0x0
+#define IOMUXC_GPIO_LPSR_02_GPIO_MUX6_IO02                     0x008 0x048 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_LPSR_03_SRC_BOOT_MODE01                    0x00C 0x04C 0x0 0x0 0x0
+#define IOMUXC_GPIO_LPSR_03_LPSPI5_PCS0                                0x00C 0x04C 0x094 0x1 0x0
+#define IOMUXC_GPIO_LPSR_03_SAI4_TX_SYNC                       0x00C 0x04C 0x0DC 0x2 0x0
+#define IOMUXC_GPIO_LPSR_03_MQS_LEFT                           0x00C 0x04C 0x0 0x3 0x0
+#define IOMUXC_GPIO_LPSR_03_GPIO_MUX6_IO03                     0x00C 0x04C 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_03_GPIO12_IO03                                0x00C 0x04C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_LPSR_04_LPI2C5_SDA                         0x010 0x050 0x088 0x0 0x0
+#define IOMUXC_GPIO_LPSR_04_LPSPI5_SOUT                                0x010 0x050 0x0A0 0x1 0x0
+#define IOMUXC_GPIO_LPSR_04_SAI4_TX_BCLK                       0x010 0x050 0x0D8 0x2 0x0
+#define IOMUXC_GPIO_LPSR_04_LPUART12_RTS_B                     0x010 0x050 0x0 0x3 0x0
+#define IOMUXC_GPIO_LPSR_04_GPIO_MUX6_IO04                     0x010 0x050 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_04_LPUART11_TXD                       0x010 0x050 0x0A8 0x6 0x0
+#define IOMUXC_GPIO_LPSR_04_GPIO12_IO04                                0x010 0x050 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_LPSR_05_GPIO12_IO05                                0x014 0x054 0x0 0xA 0x0
+#define IOMUXC_GPIO_LPSR_05_LPI2C5_SCL                         0x014 0x054 0x084 0x0 0x0
+#define IOMUXC_GPIO_LPSR_05_LPSPI5_SIN                         0x014 0x054 0x09C 0x1 0x0
+#define IOMUXC_GPIO_LPSR_05_SAI4_MCLK                          0x014 0x054 0x0C8 0x2 0x1
+#define IOMUXC_GPIO_LPSR_05_LPUART12_CTS_B                     0x014 0x054 0x0 0x3 0x0
+#define IOMUXC_GPIO_LPSR_05_GPIO_MUX6_IO05                     0x014 0x054 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_05_LPUART11_RXD                       0x014 0x054 0x0A4 0x6 0x0
+#define IOMUXC_GPIO_LPSR_05_NMI_GLUE_NMI                       0x014 0x054 0x0C4 0x7 0x0
+
+#define IOMUXC_GPIO_LPSR_06_LPI2C6_SDA                         0x018 0x058 0x090 0x0 0x0
+#define IOMUXC_GPIO_LPSR_06_SAI4_RX_DATA                       0x018 0x058 0x0D0 0x2 0x0
+#define IOMUXC_GPIO_LPSR_06_LPUART12_TXD                       0x018 0x058 0x0B0 0x3 0x1
+#define IOMUXC_GPIO_LPSR_06_LPSPI6_PCS3                                0x018 0x058 0x0 0x4 0x0
+#define IOMUXC_GPIO_LPSR_06_GPIO_MUX6_IO06                     0x018 0x058 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_06_FLEXCAN3_TX                                0x018 0x058 0x0 0x6 0x0
+#define IOMUXC_GPIO_LPSR_06_PIT2_TRIGGER3                      0x018 0x058 0x0 0x7 0x0
+#define IOMUXC_GPIO_LPSR_06_LPSPI5_PCS1                                0x018 0x058 0x0 0x8 0x0
+#define IOMUXC_GPIO_LPSR_06_GPIO12_IO06                                0x018 0x058 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_LPSR_07_LPI2C6_SCL                         0x01C 0x05C 0x08C 0x0 0x0
+#define IOMUXC_GPIO_LPSR_07_SAI4_RX_BCLK                       0x01C 0x05C 0x0CC 0x2 0x0
+#define IOMUXC_GPIO_LPSR_07_LPUART12_RXD                       0x01C 0x05C 0x0AC 0x3 0x1
+#define IOMUXC_GPIO_LPSR_07_LPSPI6_PCS2                                0x01C 0x05C 0x0 0x4 0x0
+#define IOMUXC_GPIO_LPSR_07_GPIO_MUX6_IO07                     0x01C 0x05C 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_07_FLEXCAN3_RX                                0x01C 0x05C 0x080 0x6 0x1
+#define IOMUXC_GPIO_LPSR_07_PIT2_TRIGGER2                      0x01C 0x05C 0x0 0x7 0x0
+#define IOMUXC_GPIO_LPSR_07_LPSPI5_PCS2                                0x01C 0x05C 0x0 0x8 0x0
+#define IOMUXC_GPIO_LPSR_07_GPIO12_IO07                                0x01C 0x05C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_LPSR_08_GPIO12_IO08                                0x020 0x060 0x0 0xA 0x0
+#define IOMUXC_GPIO_LPSR_08_LPUART11_TXD                       0x020 0x060 0x0A8 0x0 0x1
+#define IOMUXC_GPIO_LPSR_08_FLEXCAN3_TX                                0x020 0x060 0x0 0x1 0x0
+#define IOMUXC_GPIO_LPSR_08_SAI4_RX_SYNC                       0x020 0x060 0x0D4 0x2 0x0
+#define IOMUXC_GPIO_LPSR_08_MIC_CLK                            0x020 0x060 0x0 0x3 0x0
+#define IOMUXC_GPIO_LPSR_08_LPSPI6_PCS1                                0x020 0x060 0x0 0x4 0x0
+#define IOMUXC_GPIO_LPSR_08_GPIO_MUX6_IO08                     0x020 0x060 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_08_LPI2C5_SDA                         0x020 0x060 0x088 0x6 0x1
+#define IOMUXC_GPIO_LPSR_08_PIT2_TRIGGER1                      0x020 0x060 0x0 0x7 0x0
+#define IOMUXC_GPIO_LPSR_08_LPSPI5_PCS3                                0x020 0x060 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_LPSR_09_GPIO12_IO09                                0x024 0x064 0x0 0xA 0x0
+#define IOMUXC_GPIO_LPSR_09_LPUART11_RXD                       0x024 0x064 0x0A4 0x0 0x1
+#define IOMUXC_GPIO_LPSR_09_FLEXCAN3_RX                                0x024 0x064 0x080 0x1 0x2
+#define IOMUXC_GPIO_LPSR_09_PIT2_TRIGGER0                      0x024 0x064 0x0 0x2 0x0
+#define IOMUXC_GPIO_LPSR_09_MIC_BITSTREAM0                     0x024 0x064 0x0B4 0x3 0x1
+#define IOMUXC_GPIO_LPSR_09_LPSPI6_PCS0                                0x024 0x064 0x0 0x4 0x0
+#define IOMUXC_GPIO_LPSR_09_GPIO_MUX6_IO09                     0x024 0x064 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_09_LPI2C5_SCL                         0x024 0x064 0x084 0x6 0x1
+#define IOMUXC_GPIO_LPSR_09_SAI4_TX_DATA                       0x024 0x064 0x0 0x7 0x0
+
+#define IOMUXC_GPIO_LPSR_10_GPIO12_IO10                                0x028 0x068 0x0 0xA 0x0
+#define IOMUXC_GPIO_LPSR_10_JTAG_MUX_TRSTB                     0x028 0x068 0x0 0x0 0x0
+#define IOMUXC_GPIO_LPSR_10_LPUART11_CTS_B                     0x028 0x068 0x0 0x1 0x0
+#define IOMUXC_GPIO_LPSR_10_LPI2C6_SDA                         0x028 0x068 0x090 0x2 0x1
+#define IOMUXC_GPIO_LPSR_10_MIC_BITSTREAM1                     0x028 0x068 0x0B8 0x3 0x0
+#define IOMUXC_GPIO_LPSR_10_LPSPI6_SCK                         0x028 0x068 0x0 0x4 0x0
+#define IOMUXC_GPIO_LPSR_10_GPIO_MUX6_IO10                     0x028 0x068 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_10_LPI2C5_SCLS                                0x028 0x068 0x0 0x6 0x0
+#define IOMUXC_GPIO_LPSR_10_SAI4_TX_SYNC                       0x028 0x068 0x0DC 0x7 0x1
+#define IOMUXC_GPIO_LPSR_10_LPUART12_TXD                       0x028 0x068 0x0B0 0x8 0x2
+
+#define IOMUXC_GPIO_LPSR_11_JTAG_MUX_TDO                       0x02C 0x06C 0x0 0x0 0x0
+#define IOMUXC_GPIO_LPSR_11_LPUART11_RTS_B                     0x02C 0x06C 0x0 0x1 0x0
+#define IOMUXC_GPIO_LPSR_11_LPI2C6_SCL                         0x02C 0x06C 0x08C 0x2 0x1
+#define IOMUXC_GPIO_LPSR_11_MIC_BITSTREAM2                     0x02C 0x06C 0x0BC 0x3 0x0
+#define IOMUXC_GPIO_LPSR_11_LPSPI6_SOUT                                0x02C 0x06C 0x0 0x4 0x0
+#define IOMUXC_GPIO_LPSR_11_GPIO_MUX6_IO11                     0x02C 0x06C 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_11_LPI2C5_SDAS                                0x02C 0x06C 0x0 0x6 0x0
+#define IOMUXC_GPIO_LPSR_11_ARM_TRACE_SWO                      0x02C 0x06C 0x0 0x7 0x0
+#define IOMUXC_GPIO_LPSR_11_LPUART12_RXD                       0x02C 0x06C 0x0AC 0x8 0x2
+#define IOMUXC_GPIO_LPSR_11_GPIO12_IO11                                0x02C 0x06C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_LPSR_12_GPIO12_IO12                                0x030 0x070 0x0 0xA 0x0
+#define IOMUXC_GPIO_LPSR_12_JTAG_MUX_TDI                       0x030 0x070 0x0 0x0 0x0
+#define IOMUXC_GPIO_LPSR_12_PIT2_TRIGGER0                      0x030 0x070 0x0 0x1 0x0
+#define IOMUXC_GPIO_LPSR_12_MIC_BITSTREAM3                     0x030 0x070 0x0C0 0x3 0x0
+#define IOMUXC_GPIO_LPSR_12_LPSPI6_SIN                         0x030 0x070 0x0 0x4 0x0
+#define IOMUXC_GPIO_LPSR_12_GPIO_MUX6_IO12                     0x030 0x070 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_12_LPI2C5_HREQ                                0x030 0x070 0x0 0x6 0x0
+#define IOMUXC_GPIO_LPSR_12_SAI4_TX_BCLK                       0x030 0x070 0x0D8 0x7 0x1
+#define IOMUXC_GPIO_LPSR_12_LPSPI5_SCK                         0x030 0x070 0x098 0x8 0x1
+
+#define IOMUXC_GPIO_LPSR_13_GPIO12_IO13                                0x034 0x074 0x0 0xA 0x0
+#define IOMUXC_GPIO_LPSR_13_JTAG_MUX_MOD                       0x034 0x074 0x0 0x0 0x0
+#define IOMUXC_GPIO_LPSR_13_MIC_BITSTREAM1                     0x034 0x074 0x0B8 0x1 0x1
+#define IOMUXC_GPIO_LPSR_13_PIT2_TRIGGER1                      0x034 0x074 0x0 0x2 0x0
+#define IOMUXC_GPIO_LPSR_13_GPIO_MUX6_IO13                     0x034 0x074 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_13_SAI4_RX_DATA                       0x034 0x074 0x0D0 0x7 0x1
+#define IOMUXC_GPIO_LPSR_13_LPSPI5_PCS0                                0x034 0x074 0x094 0x8 0x1
+
+#define IOMUXC_GPIO_LPSR_14_JTAG_MUX_TCK                       0x038 0x078 0x0 0x0 0x0
+#define IOMUXC_GPIO_LPSR_14_MIC_BITSTREAM2                     0x038 0x078 0x0BC 0x1 0x1
+#define IOMUXC_GPIO_LPSR_14_PIT2_TRIGGER2                      0x038 0x078 0x0 0x2 0x0
+#define IOMUXC_GPIO_LPSR_14_GPIO_MUX6_IO14                     0x038 0x078 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_14_SAI4_RX_BCLK                       0x038 0x078 0x0CC 0x7 0x1
+#define IOMUXC_GPIO_LPSR_14_LPSPI5_SOUT                                0x038 0x078 0x0A0 0x8 0x1
+#define IOMUXC_GPIO_LPSR_14_GPIO12_IO14                                0x038 0x078 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_LPSR_15_GPIO12_IO15                                0x03C 0x07C 0x0 0xA 0x0
+#define IOMUXC_GPIO_LPSR_15_JTAG_MUX_TMS                       0x03C 0x07C 0x0 0x0 0x0
+#define IOMUXC_GPIO_LPSR_15_MIC_BITSTREAM3                     0x03C 0x07C 0x0C0 0x1 0x1
+#define IOMUXC_GPIO_LPSR_15_PIT2_TRIGGER3                      0x03C 0x07C 0x0 0x2 0x0
+#define IOMUXC_GPIO_LPSR_15_GPIO_MUX6_IO15                     0x03C 0x07C 0x0 0x5 0x0
+#define IOMUXC_GPIO_LPSR_15_SAI4_RX_SYNC                       0x03C 0x07C 0x0D4 0x7 0x1
+#define IOMUXC_GPIO_LPSR_15_LPSPI5_SIN                         0x03C 0x07C 0x09C 0x8 0x1
+
+#define IOMUXC_WAKEUP_DIG_GPIO13_IO00                          0x40C94000 0x40C94040 0x0 0x5 0x0
+#define IOMUXC_WAKEUP_DIG_NMI_GLUE_NMI                         0x40C94000 0x40C94040 0x0C4 0x7 0x1
+
+#define IOMUXC_PMIC_ON_REQ_DIG_SNVS_LP_PMIC_ON_REQ             0x40C94004 0x40C94044 0x0 0x0 0x0
+#define IOMUXC_PMIC_ON_REQ_DIG_GPIO13_IO01                     0x40C94004 0x40C94044 0x0 0x5 0x0
+
+#define IOMUXC_PMIC_STBY_REQ_DIG_CCM_PMIC_VSTBY_REQ            0x40C94008 0x40C94048 0x0 0x0 0x0
+#define IOMUXC_PMIC_STBY_REQ_DIG_GPIO13_IO02                   0x40C94008 0x40C94048 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_00_DIG_SNVS_TAMPER0                   0x40C9400C 0x40C9404C 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_00_DIG_GPIO13_IO03                    0x40C9400C 0x40C9404C 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_01_DIG_SNVS_TAMPER1                   0x40C94010 0x40C94050 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_01_DIG_GPIO13_IO04                    0x40C94010 0x40C94050 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_02_DIG_SNVS_TAMPER2                   0x40C94014 0x40C94054 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_02_DIG_GPIO13_IO05                    0x40C94014 0x40C94054 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_03_DIG_SNVS_TAMPER3                   0x40C94018 0x40C94058 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_03_DIG_GPIO13_IO06                    0x40C94018 0x40C94058 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_04_DIG_SNVS_TAMPER4                   0x40C9401C 0x40C9405C 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_04_DIG_GPIO13_IO07                    0x40C9401C 0x40C9405C 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_05_DIG_SNVS_TAMPER5                   0x40C94020 0x40C94060 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_05_DIG_GPIO13_IO08                    0x40C94020 0x40C94060 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_06_DIG_SNVS_TAMPER6                   0x40C94024 0x40C94064 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_06_DIG_GPIO13_IO09                    0x40C94024 0x40C94064 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_07_DIG_SNVS_TAMPER7                   0x40C94028 0x40C94068 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_07_DIG_GPIO13_IO10                    0x40C94028 0x40C94068 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_08_DIG_SNVS_TAMPER8                   0x40C9402C 0x40C9406C 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_08_DIG_GPIO13_IO11                    0x40C9402C 0x40C9406C 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SNVS_09_DIG_SNVS_TAMPER9                   0x40C94030 0x40C94070 0x0 0x0 0x0
+#define IOMUXC_GPIO_SNVS_09_DIG_GPIO13_IO12                    0x40C94030 0x40C94070 0x0 0x5 0x0
+
+#define IOMUXC_TEST_MODE_DIG                                   0x0 0x40C94034 0x0 0x0 0x0
+
+#define IOMUXC_POR_B_DIG                                       0x0 0x40C94038 0x0 0x0 0x0
+
+#define IOMUXC_ONOFF_DIG                                       0x0 0x40C9403C 0x0 0x0 0x0
+
+#define IOMUXC_GPIO_EMC_B1_00_SEMC_DATA00                      0x010 0x254 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_00_FLEXPWM4_PWM0_A                  0x010 0x254 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_00_GPIO_MUX1_IO00                   0x010 0x254 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_00_FLEXIO1_D00                      0x010 0x254 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_00_GPIO7_IO00                       0x010 0x254 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_01_GPIO7_IO01                       0x014 0x258 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_01_SEMC_DATA01                      0x014 0x258 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_01_FLEXPWM4_PWM0_B                  0x014 0x258 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_01_GPIO_MUX1_IO01                   0x014 0x258 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_01_FLEXIO1_D01                      0x014 0x258 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_02_SEMC_DATA02                      0x018 0x25C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_02_FLEXPWM4_PWM1_A                  0x018 0x25C 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_02_GPIO_MUX1_IO02                   0x018 0x25C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_02_FLEXIO1_D02                      0x018 0x25C 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_02_GPIO7_IO02                       0x018 0x25C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_03_SEMC_DATA03                      0x01C 0x260 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_03_FLEXPWM4_PWM1_B                  0x01C 0x260 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_03_GPIO_MUX1_IO03                   0x01C 0x260 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_03_FLEXIO1_D03                      0x01C 0x260 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_03_GPIO7_IO03                       0x01C 0x260 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_04_GPIO7_IO04                       0x020 0x264 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_04_SEMC_DATA04                      0x020 0x264 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_04_FLEXPWM4_PWM2_A                  0x020 0x264 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_04_GPIO_MUX1_IO04                   0x020 0x264 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_04_FLEXIO1_D04                      0x020 0x264 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_05_SEMC_DATA05                      0x024 0x268 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_05_FLEXPWM4_PWM2_B                  0x024 0x268 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_05_GPIO_MUX1_IO05                   0x024 0x268 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_05_FLEXIO1_D05                      0x024 0x268 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_05_GPIO7_IO05                       0x024 0x268 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_06_SEMC_DATA06                      0x028 0x26C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_06_FLEXPWM2_PWM0_A                  0x028 0x26C 0x518 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_06_GPIO_MUX1_IO06                   0x028 0x26C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_06_FLEXIO1_D06                      0x028 0x26C 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_06_GPIO7_IO06                       0x028 0x26C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_07_GPIO7_IO07                       0x02C 0x270 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_07_SEMC_DATA07                      0x02C 0x270 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_07_FLEXPWM2_PWM0_B                  0x02C 0x270 0x524 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_07_GPIO_MUX1_IO07                   0x02C 0x270 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_07_FLEXIO1_D07                      0x02C 0x270 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_08_SEMC_DM00                                0x030 0x274 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_08_FLEXPWM2_PWM1_A                  0x030 0x274 0x51C 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_08_GPIO_MUX1_IO08                   0x030 0x274 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_08_FLEXIO1_D08                      0x030 0x274 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_08_GPIO7_IO08                       0x030 0x274 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_09_SEMC_ADDR00                      0x034 0x278 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_09_FLEXPWM2_PWM1_B                  0x034 0x278 0x528 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_09_GPT5_CAPTURE1                    0x034 0x278 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_09_GPIO_MUX1_IO09                   0x034 0x278 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_09_FLEXIO1_D09                      0x034 0x278 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_09_GPIO7_IO09                       0x034 0x278 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_10_SEMC_ADDR01                      0x038 0x27C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_10_FLEXPWM2_PWM2_A                  0x038 0x27C 0x520 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_10_GPT5_CAPTURE2                    0x038 0x27C 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_10_GPIO_MUX1_IO10                   0x038 0x27C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_10_FLEXIO1_D10                      0x038 0x27C 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_10_GPIO7_IO10                       0x038 0x27C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_11_GPIO7_IO11                       0x03C 0x280 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_11_SEMC_ADDR02                      0x03C 0x280 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_11_FLEXPWM2_PWM2_B                  0x03C 0x280 0x52C 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_11_GPT5_COMPARE1                    0x03C 0x280 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_11_GPIO_MUX1_IO11                   0x03C 0x280 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_11_FLEXIO1_D11                      0x03C 0x280 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_12_SEMC_ADDR03                      0x040 0x284 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_12_XBAR1_INOUT04                    0x040 0x284 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_12_GPT5_COMPARE2                    0x040 0x284 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_12_GPIO_MUX1_IO12                   0x040 0x284 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_12_FLEXIO1_D12                      0x040 0x284 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_12_GPIO7_IO12                       0x040 0x284 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_13_SEMC_ADDR04                      0x044 0x288 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_13_XBAR1_INOUT05                    0x044 0x288 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_13_GPT5_COMPARE3                    0x044 0x288 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_13_GPIO_MUX1_IO13                   0x044 0x288 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_13_FLEXIO1_D13                      0x044 0x288 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_13_GPIO7_IO13                       0x044 0x288 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_14_GPIO7_IO14                       0x048 0x28C 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_14_SEMC_ADDR05                      0x048 0x28C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_14_XBAR1_INOUT06                    0x048 0x28C 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_14_GPT5_CLK                         0x048 0x28C 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_14_GPIO_MUX1_IO14                   0x048 0x28C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_14_FLEXIO1_D14                      0x048 0x28C 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_15_SEMC_ADDR06                      0x04C 0x290 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_15_XBAR1_INOUT07                    0x04C 0x290 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_15_GPIO_MUX1_IO15                   0x04C 0x290 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_15_FLEXIO1_D15                      0x04C 0x290 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_15_GPIO7_IO15                       0x04C 0x290 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_16_SEMC_ADDR07                      0x050 0x294 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_16_XBAR1_INOUT08                    0x050 0x294 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_16_GPIO_MUX1_IO16                   0x050 0x294 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_16_FLEXIO1_D16                      0x050 0x294 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_16_GPIO7_IO16                       0x050 0x294 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_17_GPIO7_IO17                       0x054 0x298 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_17_SEMC_ADDR08                      0x054 0x298 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_17_FLEXPWM4_PWM3_A                  0x054 0x298 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_17_TMR1_TIMER0                      0x054 0x298 0x63C 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_17_GPIO_MUX1_IO17                   0x054 0x298 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_17_FLEXIO1_D17                      0x054 0x298 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_18_SEMC_ADDR09                      0x058 0x29C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_18_FLEXPWM4_PWM3_B                  0x058 0x29C 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_18_TMR2_TIMER0                      0x058 0x29C 0x648 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_18_GPIO_MUX1_IO18                   0x058 0x29C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_18_FLEXIO1_D18                      0x058 0x29C 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_18_GPIO7_IO18                       0x058 0x29C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_19_SEMC_ADDR11                      0x05C 0x2A0 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_19_FLEXPWM2_PWM3_A                  0x05C 0x2A0 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_19_TMR3_TIMER0                      0x05C 0x2A0 0x654 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_19_GPIO_MUX1_IO19                   0x05C 0x2A0 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_19_FLEXIO1_D19                      0x05C 0x2A0 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_19_GPIO7_IO19                       0x05C 0x2A0 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_20_SEMC_ADDR12                      0x060 0x2A4 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_20_FLEXPWM2_PWM3_B                  0x060 0x2A4 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_20_TMR4_TIMER0                      0x060 0x2A4 0x660 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_20_GPIO_MUX1_IO20                   0x060 0x2A4 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_20_FLEXIO1_D20                      0x060 0x2A4 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_20_GPIO7_IO20                       0x060 0x2A4 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_21_GPIO7_IO21                       0x064 0x2A8 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_21_SEMC_BA0                         0x064 0x2A8 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_21_FLEXPWM3_PWM3_A                  0x064 0x2A8 0x53C 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_21_GPIO_MUX1_IO21                   0x064 0x2A8 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_21_FLEXIO1_D21                      0x064 0x2A8 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_22_GPIO7_IO22                       0x068 0x2AC 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_22_SEMC_BA1                         0x068 0x2AC 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_22_FLEXPWM3_PWM3_B                  0x068 0x2AC 0x54C 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_22_GPIO_MUX1_IO22                   0x068 0x2AC 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_22_FLEXIO1_D22                      0x068 0x2AC 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_23_SEMC_ADDR10                      0x06C 0x2B0 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_23_FLEXPWM1_PWM0_A                  0x06C 0x2B0 0x500 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_23_GPIO_MUX1_IO23                   0x06C 0x2B0 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_23_FLEXIO1_D23                      0x06C 0x2B0 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_23_GPIO7_IO23                       0x06C 0x2B0 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_24_GPIO7_IO24                       0x070 0x2B4 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_24_SEMC_CAS                         0x070 0x2B4 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_24_FLEXPWM1_PWM0_B                  0x070 0x2B4 0x50C 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_24_GPIO_MUX1_IO24                   0x070 0x2B4 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_24_FLEXIO1_D24                      0x070 0x2B4 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_25_GPIO7_IO25                       0x074 0x2B8 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_25_SEMC_RAS                         0x074 0x2B8 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_25_FLEXPWM1_PWM1_A                  0x074 0x2B8 0x504 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_25_GPIO_MUX1_IO25                   0x074 0x2B8 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_25_FLEXIO1_D25                      0x074 0x2B8 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_26_SEMC_CLK                         0x078 0x2BC 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_26_FLEXPWM1_PWM1_B                  0x078 0x2BC 0x510 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_26_GPIO_MUX1_IO26                   0x078 0x2BC 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_26_FLEXIO1_D26                      0x078 0x2BC 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_26_GPIO7_IO26                       0x078 0x2BC 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_27_GPIO7_IO27                       0x07C 0x2C0 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_27_SEMC_CKE                         0x07C 0x2C0 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_27_FLEXPWM1_PWM2_A                  0x07C 0x2C0 0x508 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_27_GPIO_MUX1_IO27                   0x07C 0x2C0 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_27_FLEXIO1_D27                      0x07C 0x2C0 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_28_GPIO7_IO28                       0x080 0x2C4 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_28_SEMC_WE                          0x080 0x2C4 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_28_FLEXPWM1_PWM2_B                  0x080 0x2C4 0x514 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_28_GPIO_MUX1_IO28                   0x080 0x2C4 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_28_FLEXIO1_D28                      0x080 0x2C4 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_29_SEMC_CS0                         0x084 0x2C8 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_29_FLEXPWM3_PWM0_A                  0x084 0x2C8 0x530 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_29_GPIO_MUX1_IO29                   0x084 0x2C8 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_29_FLEXIO1_D29                      0x084 0x2C8 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_29_GPIO7_IO29                       0x084 0x2C8 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_30_SEMC_DATA08                      0x088 0x2CC 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_30_FLEXPWM3_PWM0_B                  0x088 0x2CC 0x540 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_30_GPIO_MUX1_IO30                   0x088 0x2CC 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_30_FLEXIO1_D30                      0x088 0x2CC 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B1_30_GPIO7_IO30                       0x088 0x2CC 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_31_GPIO7_IO31                       0x08C 0x2D0 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_31_SEMC_DATA09                      0x08C 0x2D0 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_31_FLEXPWM3_PWM1_A                  0x08C 0x2D0 0x534 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_31_GPIO_MUX1_IO31                   0x08C 0x2D0 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_31_FLEXIO1_D31                      0x08C 0x2D0 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_EMC_B1_32_GPIO8_IO00                       0x090 0x2D4 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_32_SEMC_DATA10                      0x090 0x2D4 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_32_FLEXPWM3_PWM1_B                  0x090 0x2D4 0x544 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_32_GPIO_MUX2_IO00                   0x090 0x2D4 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_EMC_B1_33_SEMC_DATA11                      0x094 0x2D8 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_33_FLEXPWM3_PWM2_A                  0x094 0x2D8 0x538 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_33_GPIO_MUX2_IO01                   0x094 0x2D8 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_33_GPIO8_IO01                       0x094 0x2D8 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_34_GPIO8_IO02                       0x098 0x2DC 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_34_SEMC_DATA12                      0x098 0x2DC 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_34_FLEXPWM3_PWM2_B                  0x098 0x2DC 0x548 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_34_GPIO_MUX2_IO02                   0x098 0x2DC 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_EMC_B1_35_GPIO8_IO03                       0x09C 0x2E0 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_35_SEMC_DATA13                      0x09C 0x2E0 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_35_XBAR1_INOUT09                    0x09C 0x2E0 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_35_GPIO_MUX2_IO03                   0x09C 0x2E0 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_EMC_B1_36_SEMC_DATA14                      0x0A0 0x2E4 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_36_XBAR1_INOUT10                    0x0A0 0x2E4 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_36_GPIO_MUX2_IO04                   0x0A0 0x2E4 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_36_GPIO8_IO04                       0x0A0 0x2E4 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_37_GPIO8_IO05                       0x0A4 0x2E8 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_37_SEMC_DATA15                      0x0A4 0x2E8 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_37_XBAR1_INOUT11                    0x0A4 0x2E8 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_37_GPIO_MUX2_IO05                   0x0A4 0x2E8 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_EMC_B1_38_GPIO8_IO06                       0x0A8 0x2EC 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_38_SEMC_DM01                                0x0A8 0x2EC 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_38_FLEXPWM1_PWM3_A                  0x0A8 0x2EC 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_38_TMR1_TIMER1                      0x0A8 0x2EC 0x640 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_38_GPIO_MUX2_IO06                   0x0A8 0x2EC 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_EMC_B1_39_SEMC_DQS                         0x0AC 0x2F0 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_39_FLEXPWM1_PWM3_B                  0x0AC 0x2F0 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_39_TMR2_TIMER1                      0x0AC 0x2F0 0x64C 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_39_GPIO_MUX2_IO07                   0x0AC 0x2F0 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_39_GPIO8_IO07                       0x0AC 0x2F0 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_40_SEMC_RDY                         0x0B0 0x2F4 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_40_XBAR1_INOUT12                    0x0B0 0x2F4 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_40_MQS_RIGHT                                0x0B0 0x2F4 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_40_LPUART6_TXD                      0x0B0 0x2F4 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B1_40_GPIO_MUX2_IO08                   0x0B0 0x2F4 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_40_ENET_1G_MDC                      0x0B0 0x2F4 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B1_40_CCM_CLKO1                                0x0B0 0x2F4 0x0 0x9 0x0
+#define IOMUXC_GPIO_EMC_B1_40_GPIO8_IO08                       0x0B0 0x2F4 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B1_41_GPIO8_IO09                       0x0B4 0x2F8 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B1_41_SEMC_CSX00                       0x0B4 0x2F8 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B1_41_XBAR1_INOUT13                    0x0B4 0x2F8 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B1_41_MQS_LEFT                         0x0B4 0x2F8 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B1_41_LPUART6_RXD                      0x0B4 0x2F8 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B1_41_FLEXSPI2_B_DATA07                        0x0B4 0x2F8 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B1_41_GPIO_MUX2_IO09                   0x0B4 0x2F8 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B1_41_ENET_1G_MDIO                     0x0B4 0x2F8 0x4C8 0x7 0x0
+#define IOMUXC_GPIO_EMC_B1_41_CCM_CLKO2                                0x0B4 0x2F8 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_EMC_B2_00_SEMC_DATA16                      0x0B8 0x2FC 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_00_CCM_ENET_REF_CLK_25M             0x0B8 0x2FC 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_00_TMR3_TIMER1                      0x0B8 0x2FC 0x658 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_00_LPUART6_CTS_B                    0x0B8 0x2FC 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_00_FLEXSPI2_B_DATA06                        0x0B8 0x2FC 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_00_GPIO_MUX2_IO10                   0x0B8 0x2FC 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_00_XBAR1_INOUT20                    0x0B8 0x2FC 0x6D8 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_00_ENET_QOS_1588_EVENT1_OUT         0x0B8 0x2FC 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_00_LPSPI1_SCK                       0x0B8 0x2FC 0x5D0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_00_LPI2C2_SCL                       0x0B8 0x2FC 0x5B4 0x9 0x0
+#define IOMUXC_GPIO_EMC_B2_00_GPIO8_IO10                       0x0B8 0x2FC 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_00_FLEXPWM3_PWM0_A                  0x0B8 0x2FC 0x530 0xB 0x1
+
+#define IOMUXC_GPIO_EMC_B2_01_SEMC_DATA17                      0x0BC 0x300 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_01_USDHC2_CD_B                      0x0BC 0x300 0x6D0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_01_TMR4_TIMER1                      0x0BC 0x300 0x664 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_01_LPUART6_RTS_B                    0x0BC 0x300 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_01_FLEXSPI2_B_DATA05                        0x0BC 0x300 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_01_GPIO_MUX2_IO11                   0x0BC 0x300 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_01_XBAR1_INOUT21                    0x0BC 0x300 0x6DC 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_01_ENET_QOS_1588_EVENT1_IN          0x0BC 0x300 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_01_LPSPI1_PCS0                      0x0BC 0x300 0x5CC 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_01_LPI2C2_SDA                       0x0BC 0x300 0x5B8 0x9 0x0
+#define IOMUXC_GPIO_EMC_B2_01_GPIO8_IO11                       0x0BC 0x300 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_01_FLEXPWM3_PWM0_B                  0x0BC 0x300 0x540 0xB 0x1
+
+#define IOMUXC_GPIO_EMC_B2_02_SEMC_DATA18                      0x0C0 0x304 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_02_USDHC2_WP                                0x0C0 0x304 0x6D4 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_02_VIDEO_MUX_CSI_DATA23             0x0C0 0x304 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_02_FLEXSPI2_B_DATA04                        0x0C0 0x304 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_02_GPIO_MUX2_IO12                   0x0C0 0x304 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_02_XBAR1_INOUT22                    0x0C0 0x304 0x6E0 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_02_ENET_QOS_1588_EVENT1_AUX_IN      0x0C0 0x304 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_02_LPSPI1_SOUT                      0x0C0 0x304 0x5D8 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_02_GPIO8_IO12                       0x0C0 0x304 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_02_FLEXPWM3_PWM1_A                  0x0C0 0x304 0x534 0xB 0x1
+
+#define IOMUXC_GPIO_EMC_B2_03_SEMC_DATA19                      0x0C4 0x308 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_03_USDHC2_VSELECT                   0x0C4 0x308 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_03_VIDEO_MUX_CSI_DATA22             0x0C4 0x308 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_03_FLEXSPI2_B_DATA03                        0x0C4 0x308 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_03_GPIO_MUX2_IO13                   0x0C4 0x308 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_03_XBAR1_INOUT23                    0x0C4 0x308 0x6E4 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_03_ENET_1G_TX_DATA03                        0x0C4 0x308 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_03_LPSPI1_SIN                       0x0C4 0x308 0x5D4 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_03_GPIO8_IO13                       0x0C4 0x308 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_03_FLEXPWM3_PWM1_B                  0x0C4 0x308 0x544 0xB 0x1
+
+#define IOMUXC_GPIO_EMC_B2_04_SEMC_DATA20                      0x0C8 0x30C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_04_USDHC2_RESET_B                   0x0C8 0x30C 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_04_SAI2_MCLK                                0x0C8 0x30C 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_04_VIDEO_MUX_CSI_DATA21             0x0C8 0x30C 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_04_FLEXSPI2_B_DATA02                        0x0C8 0x30C 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_04_GPIO_MUX2_IO14                   0x0C8 0x30C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_04_XBAR1_INOUT24                    0x0C8 0x30C 0x6E8 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_04_ENET_1G_TX_DATA02                        0x0C8 0x30C 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_04_LPSPI3_SCK                       0x0C8 0x30C 0x600 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_04_GPIO8_IO14                       0x0C8 0x30C 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_04_FLEXPWM3_PWM2_A                  0x0C8 0x30C 0x538 0xB 0x1
+
+#define IOMUXC_GPIO_EMC_B2_05_SEMC_DATA21                      0x0CC 0x310 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_05_GPT3_CLK                         0x0CC 0x310 0x598 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_05_SAI2_RX_SYNC                     0x0CC 0x310 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_05_VIDEO_MUX_CSI_DATA20             0x0CC 0x310 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_05_FLEXSPI2_B_DATA01                        0x0CC 0x310 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_05_GPIO_MUX2_IO15                   0x0CC 0x310 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_05_XBAR1_INOUT25                    0x0CC 0x310 0x6EC 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_05_ENET_1G_RX_CLK                   0x0CC 0x310 0x4CC 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_05_LPSPI3_PCS0                      0x0CC 0x310 0x5F0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_05_PIT1_TRIGGER0                    0x0CC 0x310 0x0 0x9 0x0
+#define IOMUXC_GPIO_EMC_B2_05_GPIO8_IO15                       0x0CC 0x310 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_05_FLEXPWM3_PWM2_B                  0x0CC 0x310 0x548 0xB 0x1
+
+#define IOMUXC_GPIO_EMC_B2_06_SEMC_DATA22                      0x0D0 0x314 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_06_GPT3_CAPTURE1                    0x0D0 0x314 0x590 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_06_GPIO8_IO16                       0x0D0 0x314 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_06_SAI2_RX_BCLK                     0x0D0 0x314 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_06_FLEXPWM3_PWM3_A                  0x0D0 0x314 0x53C 0xB 0x1
+#define IOMUXC_GPIO_EMC_B2_06_VIDEO_MUX_CSI_DATA19             0x0D0 0x314 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_06_FLEXSPI2_B_DATA00                        0x0D0 0x314 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_06_GPIO_MUX2_IO16                   0x0D0 0x314 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_06_XBAR1_INOUT26                    0x0D0 0x314 0x6F0 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_06_ENET_1G_TX_ER                    0x0D0 0x314 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_06_LPSPI3_SOUT                      0x0D0 0x314 0x608 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_06_PIT1_TRIGGER1                    0x0D0 0x314 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_EMC_B2_07_SEMC_DATA23                      0x0D4 0x318 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_07_GPT3_CAPTURE2                    0x0D4 0x318 0x594 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_07_SAI2_RX_DATA                     0x0D4 0x318 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_07_VIDEO_MUX_CSI_DATA18             0x0D4 0x318 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_07_FLEXSPI2_B_DQS                   0x0D4 0x318 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_07_GPIO_MUX2_IO17                   0x0D4 0x318 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_07_XBAR1_INOUT27                    0x0D4 0x318 0x6F4 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_07_ENET_1G_RX_DATA03                        0x0D4 0x318 0x4DC 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_07_LPSPI3_SIN                       0x0D4 0x318 0x604 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_07_PIT1_TRIGGER2                    0x0D4 0x318 0x0 0x9 0x0
+#define IOMUXC_GPIO_EMC_B2_07_GPIO8_IO17                       0x0D4 0x318 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_07_FLEXPWM3_PWM3_B                  0x0D4 0x318 0x54C 0xB 0x1
+
+#define IOMUXC_GPIO_EMC_B2_08_SEMC_DM02                                0x0D8 0x31C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_08_GPT3_COMPARE1                    0x0D8 0x31C 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_08_SAI2_TX_DATA                     0x0D8 0x31C 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_08_VIDEO_MUX_CSI_DATA17             0x0D8 0x31C 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_08_FLEXSPI2_B_SS0_B                 0x0D8 0x31C 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_08_GPIO_MUX2_IO18                   0x0D8 0x31C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_08_XBAR1_INOUT28                    0x0D8 0x31C 0x6F8 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_08_ENET_1G_RX_DATA02                        0x0D8 0x31C 0x4D8 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_08_LPSPI3_PCS1                      0x0D8 0x31C 0x5F4 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_08_PIT1_TRIGGER3                    0x0D8 0x31C 0x0 0x9 0x0
+#define IOMUXC_GPIO_EMC_B2_08_GPIO8_IO18                       0x0D8 0x31C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B2_09_GPIO8_IO19                       0x0DC 0x320 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_09_SEMC_DATA24                      0x0DC 0x320 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_09_GPT3_COMPARE2                    0x0DC 0x320 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_09_SAI2_TX_BCLK                     0x0DC 0x320 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_09_VIDEO_MUX_CSI_DATA16             0x0DC 0x320 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_09_FLEXSPI2_B_SCLK                  0x0DC 0x320 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_09_GPIO_MUX2_IO19                   0x0DC 0x320 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_09_XBAR1_INOUT29                    0x0DC 0x320 0x6FC 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_09_ENET_1G_CRS                      0x0DC 0x320 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_09_LPSPI3_PCS2                      0x0DC 0x320 0x5F8 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_09_TMR1_TIMER0                      0x0DC 0x320 0x63C 0x9 0x1
+
+#define IOMUXC_GPIO_EMC_B2_10_GPIO8_IO20                       0x0E0 0x324 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_10_SEMC_DATA25                      0x0E0 0x324 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_10_GPT3_COMPARE3                    0x0E0 0x324 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_10_SAI2_TX_SYNC                     0x0E0 0x324 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_10_VIDEO_MUX_CSI_FIELD              0x0E0 0x324 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_10_FLEXSPI2_A_SCLK                  0x0E0 0x324 0x58C 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_10_GPIO_MUX2_IO20                   0x0E0 0x324 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_10_XBAR1_INOUT30                    0x0E0 0x324 0x700 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_10_ENET_1G_COL                      0x0E0 0x324 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_10_LPSPI3_PCS3                      0x0E0 0x324 0x5FC 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_10_TMR1_TIMER1                      0x0E0 0x324 0x640 0x9 0x1
+
+#define IOMUXC_GPIO_EMC_B2_11_SEMC_DATA26                      0x0E4 0x328 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_11_SPDIF_IN                         0x0E4 0x328 0x6B4 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_11_ENET_1G_TX_DATA00                        0x0E4 0x328 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_11_SAI3_RX_SYNC                     0x0E4 0x328 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_11_FLEXSPI2_A_SS0_B                 0x0E4 0x328 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_11_GPIO_MUX2_IO21                   0x0E4 0x328 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_11_XBAR1_INOUT31                    0x0E4 0x328 0x704 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_11_EMVSIM1_IO                       0x0E4 0x328 0x69C 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_11_TMR1_TIMER2                      0x0E4 0x328 0x644 0x9 0x0
+#define IOMUXC_GPIO_EMC_B2_11_GPIO8_IO21                       0x0E4 0x328 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B2_12_SEMC_DATA27                      0x0E8 0x32C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_12_SPDIF_OUT                                0x0E8 0x32C 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_12_ENET_1G_TX_DATA01                        0x0E8 0x32C 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_12_SAI3_RX_BCLK                     0x0E8 0x32C 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_12_FLEXSPI2_A_DQS                   0x0E8 0x32C 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_12_GPIO_MUX2_IO22                   0x0E8 0x32C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_12_XBAR1_INOUT32                    0x0E8 0x32C 0x708 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_12_EMVSIM1_CLK                      0x0E8 0x32C 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_12_TMR1_TIMER3                      0x0E8 0x32C 0x0 0x9 0x0
+#define IOMUXC_GPIO_EMC_B2_12_GPIO8_IO22                       0x0E8 0x32C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B2_13_GPIO8_IO23                       0x0EC 0x330 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_13_SEMC_DATA28                      0x0EC 0x330 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_13_ENET_1G_TX_EN                    0x0EC 0x330 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_13_SAI3_RX_DATA                     0x0EC 0x330 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_13_FLEXSPI2_A_DATA00                        0x0EC 0x330 0x57C 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_13_GPIO_MUX2_IO23                   0x0EC 0x330 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_13_XBAR1_INOUT33                    0x0EC 0x330 0x70C 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_13_EMVSIM1_RST                      0x0EC 0x330 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_13_TMR2_TIMER0                      0x0EC 0x330 0x648 0x9 0x1
+
+#define IOMUXC_GPIO_EMC_B2_14_SEMC_DATA29                      0x0F0 0x334 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_14_ENET_1G_TX_CLK_IO                        0x0F0 0x334 0x4E8 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_14_SAI3_TX_DATA                     0x0F0 0x334 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_14_FLEXSPI2_A_DATA01                        0x0F0 0x334 0x580 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_14_GPIO_MUX2_IO24                   0x0F0 0x334 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_14_XBAR1_INOUT34                    0x0F0 0x334 0x710 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_14_SFA_ipp_do_atx_clk_under_test    0x0F0 0x334 0x0 0x7 0x0
+#define IOMUXC_GPIO_EMC_B2_14_EMVSIM1_SVEN                     0x0F0 0x334 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_14_TMR2_TIMER1                      0x0F0 0x334 0x64C 0x9 0x1
+#define IOMUXC_GPIO_EMC_B2_14_GPIO8_IO24                       0x0F0 0x334 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B2_15_SEMC_DATA30                      0x0F4 0x338 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_15_ENET_1G_RX_DATA00                        0x0F4 0x338 0x4D0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_15_SAI3_TX_BCLK                     0x0F4 0x338 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_15_FLEXSPI2_A_DATA02                        0x0F4 0x338 0x584 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_15_GPIO_MUX2_IO25                   0x0F4 0x338 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_15_XBAR1_INOUT35                    0x0F4 0x338 0x714 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_15_EMVSIM1_PD                       0x0F4 0x338 0x6A0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_15_TMR2_TIMER2                      0x0F4 0x338 0x650 0x9 0x0
+#define IOMUXC_GPIO_EMC_B2_15_GPIO8_IO25                       0x0F4 0x338 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B2_16_GPIO8_IO26                       0x0F8 0x33C 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_16_SEMC_DATA31                      0x0F8 0x33C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_16_XBAR1_INOUT14                    0x0F8 0x33C 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_16_ENET_1G_RX_DATA01                        0x0F8 0x33C 0x4D4 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_16_SAI3_TX_SYNC                     0x0F8 0x33C 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_16_FLEXSPI2_A_DATA03                        0x0F8 0x33C 0x588 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_16_GPIO_MUX2_IO26                   0x0F8 0x33C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_16_EMVSIM1_POWER_FAIL               0x0F8 0x33C 0x6A4 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_16_TMR2_TIMER3                      0x0F8 0x33C 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_EMC_B2_17_SEMC_DM03                                0x0FC 0x340 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_17_XBAR1_INOUT15                    0x0FC 0x340 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_17_ENET_1G_RX_EN                    0x0FC 0x340 0x4E0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_17_SAI3_MCLK                                0x0FC 0x340 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_17_FLEXSPI2_A_DATA04                        0x0FC 0x340 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_17_GPIO_MUX2_IO27                   0x0FC 0x340 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_17_WDOG1_ANY                                0x0FC 0x340 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_17_TMR3_TIMER0                      0x0FC 0x340 0x654 0x9 0x1
+#define IOMUXC_GPIO_EMC_B2_17_GPIO8_IO27                       0x0FC 0x340 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B2_18_SEMC_DQS4                                0x100 0x344 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_18_XBAR1_INOUT16                    0x100 0x344 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_18_ENET_1G_RX_ER                    0x100 0x344 0x4E4 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_18_EWM_OUT_B                                0x100 0x344 0x0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_18_FLEXSPI2_A_DATA05                        0x100 0x344 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_18_GPIO_MUX2_IO28                   0x100 0x344 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_18_FLEXSPI1_A_DQS                   0x100 0x344 0x550 0x6 0x0
+#define IOMUXC_GPIO_EMC_B2_18_WDOG1_B                          0x100 0x344 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_18_TMR3_TIMER1                      0x100 0x344 0x658 0x9 0x1
+#define IOMUXC_GPIO_EMC_B2_18_GPIO8_IO28                       0x100 0x344 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_EMC_B2_19_GPIO8_IO29                       0x104 0x348 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_19_SEMC_CLKX00                      0x104 0x348 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_19_ENET_MDC                         0x104 0x348 0x0 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_19_ENET_1G_MDC                      0x104 0x348 0x0 0x2 0x0
+#define IOMUXC_GPIO_EMC_B2_19_ENET_1G_REF_CLK                  0x104 0x348 0x4C4 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_19_FLEXSPI2_A_DATA06                        0x104 0x348 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_19_GPIO_MUX2_IO29                   0x104 0x348 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_19_ENET_QOS_MDC                     0x104 0x348 0x0 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_19_TMR3_TIMER2                      0x104 0x348 0x65C 0x9 0x0
+
+#define IOMUXC_GPIO_EMC_B2_20_GPIO8_IO30                       0x108 0x34C 0x0 0xA 0x0
+#define IOMUXC_GPIO_EMC_B2_20_SEMC_CLKX01                      0x108 0x34C 0x0 0x0 0x0
+#define IOMUXC_GPIO_EMC_B2_20_ENET_MDIO                                0x108 0x34C 0x4AC 0x1 0x0
+#define IOMUXC_GPIO_EMC_B2_20_ENET_1G_MDIO                     0x108 0x34C 0x4C8 0x2 0x1
+#define IOMUXC_GPIO_EMC_B2_20_ENET_QOS_REF_CLK                 0x108 0x34C 0x4A0 0x3 0x0
+#define IOMUXC_GPIO_EMC_B2_20_FLEXSPI2_A_DATA07                        0x108 0x34C 0x0 0x4 0x0
+#define IOMUXC_GPIO_EMC_B2_20_GPIO_MUX2_IO30                   0x108 0x34C 0x0 0x5 0x0
+#define IOMUXC_GPIO_EMC_B2_20_ENET_QOS_MDIO                    0x108 0x34C 0x4EC 0x8 0x0
+#define IOMUXC_GPIO_EMC_B2_20_TMR3_TIMER3                      0x108 0x34C 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_AD_00_GPIO8_IO31                           0x10C 0x350 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_00_EMVSIM1_IO                           0x10C 0x350 0x69C 0x0 0x1
+#define IOMUXC_GPIO_AD_00_FLEXCAN2_TX                          0x10C 0x350 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_00_ENET_1G_1588_EVENT1_IN               0x10C 0x350 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_00_GPT2_CAPTURE1                                0x10C 0x350 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_00_FLEXPWM1_PWM0_A                      0x10C 0x350 0x500 0x4 0x1
+#define IOMUXC_GPIO_AD_00_GPIO_MUX2_IO31                       0x10C 0x350 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_00_LPUART7_TXD                          0x10C 0x350 0x630 0x6 0x0
+#define IOMUXC_GPIO_AD_00_FLEXIO2_D00                          0x10C 0x350 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_00_FLEXSPI2_B_SS1_B                     0x10C 0x350 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_AD_01_GPIO9_IO00                           0x110 0x354 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_01_EMVSIM1_CLK                          0x110 0x354 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_01_FLEXCAN2_RX                          0x110 0x354 0x49C 0x1 0x0
+#define IOMUXC_GPIO_AD_01_ENET_1G_1588_EVENT1_OUT              0x110 0x354 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_01_GPT2_CAPTURE2                                0x110 0x354 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_01_FLEXPWM1_PWM0_B                      0x110 0x354 0x50C 0x4 0x1
+#define IOMUXC_GPIO_AD_01_GPIO_MUX3_IO00                       0x110 0x354 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_01_LPUART7_RXD                          0x110 0x354 0x62C 0x6 0x0
+#define IOMUXC_GPIO_AD_01_FLEXIO2_D01                          0x110 0x354 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_01_FLEXSPI2_A_SS1_B                     0x110 0x354 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_AD_02_GPIO9_IO01                           0x114 0x358 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_02_EMVSIM1_RST                          0x114 0x358 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_02_LPUART7_CTS_B                                0x114 0x358 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_02_ENET_1G_1588_EVENT2_IN               0x114 0x358 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_02_GPT2_COMPARE1                                0x114 0x358 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_02_FLEXPWM1_PWM1_A                      0x114 0x358 0x504 0x4 0x1
+#define IOMUXC_GPIO_AD_02_GPIO_MUX3_IO01                       0x114 0x358 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_02_LPUART8_TXD                          0x114 0x358 0x638 0x6 0x0
+#define IOMUXC_GPIO_AD_02_FLEXIO2_D02                          0x114 0x358 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_02_VIDEO_MUX_EXT_DCIC1                  0x114 0x358 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_AD_03_GPIO9_IO02                           0x118 0x35C 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_03_EMVSIM1_SVEN                         0x118 0x35C 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_03_LPUART7_RTS_B                                0x118 0x35C 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_03_ENET_1G_1588_EVENT2_OUT              0x118 0x35C 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_03_GPT2_COMPARE2                                0x118 0x35C 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_03_FLEXPWM1_PWM1_B                      0x118 0x35C 0x510 0x4 0x1
+#define IOMUXC_GPIO_AD_03_GPIO_MUX3_IO02                       0x118 0x35C 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_03_LPUART8_RXD                          0x118 0x35C 0x634 0x6 0x0
+#define IOMUXC_GPIO_AD_03_FLEXIO2_D03                          0x118 0x35C 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_03_VIDEO_MUX_EXT_DCIC2                  0x118 0x35C 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_AD_04_EMVSIM1_PD                           0x11C 0x360 0x6A0 0x0 0x1
+#define IOMUXC_GPIO_AD_04_LPUART8_CTS_B                                0x11C 0x360 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_04_ENET_1G_1588_EVENT3_IN               0x11C 0x360 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_04_GPT2_COMPARE3                                0x11C 0x360 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_04_FLEXPWM1_PWM2_A                      0x11C 0x360 0x508 0x4 0x1
+#define IOMUXC_GPIO_AD_04_GPIO_MUX3_IO03                       0x11C 0x360 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_04_WDOG1_B                              0x11C 0x360 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_04_FLEXIO2_D04                          0x11C 0x360 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_04_TMR4_TIMER0                          0x11C 0x360 0x660 0x9 0x1
+#define IOMUXC_GPIO_AD_04_GPIO9_IO03                           0x11C 0x360 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_AD_05_EMVSIM1_POWER_FAIL                   0x120 0x364 0x6A4 0x0 0x1
+#define IOMUXC_GPIO_AD_05_LPUART8_RTS_B                                0x120 0x364 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_05_ENET_1G_1588_EVENT3_OUT              0x120 0x364 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_05_GPT2_CLK                             0x120 0x364 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_05_FLEXPWM1_PWM2_B                      0x120 0x364 0x514 0x4 0x1
+#define IOMUXC_GPIO_AD_05_GPIO_MUX3_IO04                       0x120 0x364 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_05_WDOG2_B                              0x120 0x364 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_05_FLEXIO2_D05                          0x120 0x364 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_05_TMR4_TIMER1                          0x120 0x364 0x664 0x9 0x1
+#define IOMUXC_GPIO_AD_05_GPIO9_IO04                           0x120 0x364 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_AD_06_USB_OTG2_OC                          0x124 0x368 0x6B8 0x0 0x0
+#define IOMUXC_GPIO_AD_06_FLEXCAN1_TX                          0x124 0x368 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_06_EMVSIM2_IO                           0x124 0x368 0x6A8 0x2 0x0
+#define IOMUXC_GPIO_AD_06_GPT3_CAPTURE1                                0x124 0x368 0x590 0x3 0x1
+#define IOMUXC_GPIO_AD_06_VIDEO_MUX_CSI_DATA15                 0x124 0x368 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_06_GPIO_MUX3_IO05                       0x124 0x368 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_06_ENET_1588_EVENT1_IN                  0x124 0x368 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_06_FLEXIO2_D06                          0x124 0x368 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_06_TMR4_TIMER2                          0x124 0x368 0x668 0x9 0x0
+#define IOMUXC_GPIO_AD_06_GPIO9_IO05                           0x124 0x368 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_06_FLEXPWM1_PWM0_X                      0x124 0x368 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_07_USB_OTG2_PWR                         0x128 0x36C 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_07_FLEXCAN1_RX                          0x128 0x36C 0x498 0x1 0x0
+#define IOMUXC_GPIO_AD_07_EMVSIM2_CLK                          0x128 0x36C 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_07_GPT3_CAPTURE2                                0x128 0x36C 0x594 0x3 0x1
+#define IOMUXC_GPIO_AD_07_VIDEO_MUX_CSI_DATA14                 0x128 0x36C 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_07_GPIO_MUX3_IO06                       0x128 0x36C 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_07_ENET_1588_EVENT1_OUT                 0x128 0x36C 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_07_FLEXIO2_D07                          0x128 0x36C 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_07_TMR4_TIMER3                          0x128 0x36C 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_07_GPIO9_IO06                           0x128 0x36C 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_07_FLEXPWM1_PWM1_X                      0x128 0x36C 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_08_USBPHY2_OTG_ID                       0x12C 0x370 0x6C4 0x0 0x0
+#define IOMUXC_GPIO_AD_08_LPI2C1_SCL                           0x12C 0x370 0x5AC 0x1 0x0
+#define IOMUXC_GPIO_AD_08_EMVSIM2_RST                          0x12C 0x370 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_08_GPT3_COMPARE1                                0x12C 0x370 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_08_VIDEO_MUX_CSI_DATA13                 0x12C 0x370 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_08_GPIO_MUX3_IO07                       0x12C 0x370 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_08_ENET_1588_EVENT2_IN                  0x12C 0x370 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_08_FLEXIO2_D08                          0x12C 0x370 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_08_GPIO9_IO07                           0x12C 0x370 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_08_FLEXPWM1_PWM2_X                      0x12C 0x370 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_09_USBPHY1_OTG_ID                       0x130 0x374 0x6C0 0x0 0x0
+#define IOMUXC_GPIO_AD_09_LPI2C1_SDA                           0x130 0x374 0x5B0 0x1 0x0
+#define IOMUXC_GPIO_AD_09_EMVSIM2_SVEN                         0x130 0x374 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_09_GPT3_COMPARE2                                0x130 0x374 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_09_VIDEO_MUX_CSI_DATA12                 0x130 0x374 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_09_GPIO_MUX3_IO08                       0x130 0x374 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_09_ENET_1588_EVENT2_OUT                 0x130 0x374 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_09_FLEXIO2_D09                          0x130 0x374 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_09_GPIO9_IO08                           0x130 0x374 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_09_FLEXPWM1_PWM3_X                      0x130 0x374 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_10_USB_OTG1_PWR                         0x134 0x378 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_10_LPI2C1_SCLS                          0x134 0x378 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_10_EMVSIM2_PD                           0x134 0x378 0x6AC 0x2 0x0
+#define IOMUXC_GPIO_AD_10_GPT3_COMPARE3                                0x134 0x378 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_10_VIDEO_MUX_CSI_DATA11                 0x134 0x378 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_10_GPIO_MUX3_IO09                       0x134 0x378 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_10_ENET_1588_EVENT3_IN                  0x134 0x378 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_10_FLEXIO2_D10                          0x134 0x378 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_10_GPIO9_IO09                           0x134 0x378 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_10_FLEXPWM2_PWM0_X                      0x134 0x378 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_11_USB_OTG1_OC                          0x138 0x37C 0x6BC 0x0 0x0
+#define IOMUXC_GPIO_AD_11_LPI2C1_SDAS                          0x138 0x37C 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_11_EMVSIM2_POWER_FAIL                   0x138 0x37C 0x6B0 0x2 0x0
+#define IOMUXC_GPIO_AD_11_GPT3_CLK                             0x138 0x37C 0x598 0x3 0x1
+#define IOMUXC_GPIO_AD_11_VIDEO_MUX_CSI_DATA10                 0x138 0x37C 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_11_GPIO_MUX3_IO10                       0x138 0x37C 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_11_ENET_1588_EVENT3_OUT                 0x138 0x37C 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_11_FLEXIO2_D11                          0x138 0x37C 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_11_GPIO9_IO10                           0x138 0x37C 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_11_FLEXPWM2_PWM1_X                      0x138 0x37C 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_12_SPDIF_LOCK                           0x13C 0x380 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_12_LPI2C1_HREQ                          0x13C 0x380 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_12_GPT1_CAPTURE1                                0x13C 0x380 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_12_FLEXSPI1_B_DATA03                    0x13C 0x380 0x570 0x3 0x0
+#define IOMUXC_GPIO_AD_12_VIDEO_MUX_CSI_PIXCLK                 0x13C 0x380 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_12_GPIO_MUX3_IO11                       0x13C 0x380 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_12_ENET_TX_DATA03                       0x13C 0x380 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_12_FLEXIO2_D12                          0x13C 0x380 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_12_EWM_OUT_B                            0x13C 0x380 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_12_GPIO9_IO11                           0x13C 0x380 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_12_FLEXPWM2_PWM2_X                      0x13C 0x380 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_13_SPDIF_SR_CLK                         0x140 0x384 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_13_PIT1_TRIGGER0                                0x140 0x384 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_13_GPT1_CAPTURE2                                0x140 0x384 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_13_FLEXSPI1_B_DATA02                    0x140 0x384 0x56C 0x3 0x0
+#define IOMUXC_GPIO_AD_13_VIDEO_MUX_CSI_MCLK                   0x140 0x384 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_13_GPIO_MUX3_IO12                       0x140 0x384 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_13_ENET_TX_DATA02                       0x140 0x384 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_13_FLEXIO2_D13                          0x140 0x384 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_13_REF_CLK_32K                          0x140 0x384 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_13_GPIO9_IO12                           0x140 0x384 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_13_FLEXPWM2_PWM3_X                      0x140 0x384 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_14_SPDIF_EXT_CLK                                0x144 0x388 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_14_REF_CLK_24M                          0x144 0x388 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_14_GPT1_COMPARE1                                0x144 0x388 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_14_FLEXSPI1_B_DATA01                    0x144 0x388 0x568 0x3 0x0
+#define IOMUXC_GPIO_AD_14_VIDEO_MUX_CSI_VSYNC                  0x144 0x388 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_14_GPIO_MUX3_IO13                       0x144 0x388 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_14_ENET_RX_CLK                          0x144 0x388 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_14_FLEXIO2_D14                          0x144 0x388 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_14_CCM_ENET_REF_CLK_25M                 0x144 0x388 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_14_GPIO9_IO13                           0x144 0x388 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_14_FLEXPWM3_PWM0_X                      0x144 0x388 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_15_GPIO9_IO14                           0x148 0x38C 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_15_FLEXPWM3_PWM1_X                      0x148 0x38C 0x0 0xB 0x0
+#define IOMUXC_GPIO_AD_15_SPDIF_IN                             0x148 0x38C 0x6B4 0x0 0x1
+#define IOMUXC_GPIO_AD_15_LPUART10_TXD                         0x148 0x38C 0x628 0x1 0x0
+#define IOMUXC_GPIO_AD_15_GPT1_COMPARE2                                0x148 0x38C 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_15_FLEXSPI1_B_DATA00                    0x148 0x38C 0x564 0x3 0x0
+#define IOMUXC_GPIO_AD_15_VIDEO_MUX_CSI_HSYNC                  0x148 0x38C 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_15_GPIO_MUX3_IO14                       0x148 0x38C 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_15_ENET_TX_ER                           0x148 0x38C 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_15_FLEXIO2_D15                          0x148 0x38C 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_AD_16_SPDIF_OUT                            0x14C 0x390 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_16_LPUART10_RXD                         0x14C 0x390 0x624 0x1 0x0
+#define IOMUXC_GPIO_AD_16_GPT1_COMPARE3                                0x14C 0x390 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_16_FLEXSPI1_B_SCLK                      0x14C 0x390 0x578 0x3 0x0
+#define IOMUXC_GPIO_AD_16_VIDEO_MUX_CSI_DATA09                 0x14C 0x390 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_16_GPIO_MUX3_IO15                       0x14C 0x390 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_16_ENET_RX_DATA03                       0x14C 0x390 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_16_FLEXIO2_D16                          0x14C 0x390 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_16_ENET_1G_MDC                          0x14C 0x390 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_16_GPIO9_IO15                           0x14C 0x390 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_16_FLEXPWM3_PWM2_X                      0x14C 0x390 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_17_SAI1_MCLK                            0x150 0x394 0x66C 0x0 0x0
+#define IOMUXC_GPIO_AD_17_ACMP1_OUT                            0x150 0x394 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_17_GPT1_CLK                             0x150 0x394 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_17_FLEXSPI1_A_DQS                       0x150 0x394 0x550 0x3 0x1
+#define IOMUXC_GPIO_AD_17_VIDEO_MUX_CSI_DATA08                 0x150 0x394 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_17_GPIO_MUX3_IO16                       0x150 0x394 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_17_ENET_RX_DATA02                       0x150 0x394 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_17_FLEXIO2_D17                          0x150 0x394 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_17_ENET_1G_MDIO                         0x150 0x394 0x4C8 0x9 0x2
+#define IOMUXC_GPIO_AD_17_GPIO9_IO16                           0x150 0x394 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_17_FLEXPWM3_PWM3_X                      0x150 0x394 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_18_GPIO9_IO17                           0x154 0x398 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_18_FLEXPWM4_PWM0_X                      0x154 0x398 0x0 0xB 0x0
+#define IOMUXC_GPIO_AD_18_SAI1_RX_SYNC                         0x154 0x398 0x678 0x0 0x0
+#define IOMUXC_GPIO_AD_18_ACMP2_OUT                            0x154 0x398 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_18_LPSPI1_PCS1                          0x154 0x398 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_18_FLEXSPI1_A_SS0_B                     0x154 0x398 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_18_VIDEO_MUX_CSI_DATA07                 0x154 0x398 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_18_GPIO_MUX3_IO17                       0x154 0x398 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_18_ENET_CRS                             0x154 0x398 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_18_FLEXIO2_D18                          0x154 0x398 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_18_LPI2C2_SCL                           0x154 0x398 0x5B4 0x9 0x1
+
+#define IOMUXC_GPIO_AD_19_SAI1_RX_BCLK                         0x158 0x39C 0x670 0x0 0x0
+#define IOMUXC_GPIO_AD_19_ACMP3_OUT                            0x158 0x39C 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_19_LPSPI1_PCS2                          0x158 0x39C 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_19_FLEXSPI1_A_SCLK                      0x158 0x39C 0x574 0x3 0x0
+#define IOMUXC_GPIO_AD_19_VIDEO_MUX_CSI_DATA06                 0x158 0x39C 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_19_GPIO_MUX3_IO18                       0x158 0x39C 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_19_ENET_COL                             0x158 0x39C 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_19_FLEXIO2_D19                          0x158 0x39C 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_19_LPI2C2_SDA                           0x158 0x39C 0x5B8 0x9 0x1
+#define IOMUXC_GPIO_AD_19_GPIO9_IO18                           0x158 0x39C 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_19_FLEXPWM4_PWM1_X                      0x158 0x39C 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_20_SAI1_RX_DATA00                       0x15C 0x3A0 0x674 0x0 0x0
+#define IOMUXC_GPIO_AD_20_ACMP4_OUT                            0x15C 0x3A0 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_20_LPSPI1_PCS3                          0x15C 0x3A0 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_20_FLEXSPI1_A_DATA00                    0x15C 0x3A0 0x554 0x3 0x0
+#define IOMUXC_GPIO_AD_20_VIDEO_MUX_CSI_DATA05                 0x15C 0x3A0 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_20_GPIO_MUX3_IO19                       0x15C 0x3A0 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_20_KPP_ROW07                            0x15C 0x3A0 0x5A8 0x6 0x0
+#define IOMUXC_GPIO_AD_20_FLEXIO2_D20                          0x15C 0x3A0 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_20_ENET_QOS_1588_EVENT2_OUT             0x15C 0x3A0 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_20_GPIO9_IO19                           0x15C 0x3A0 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_20_FLEXPWM4_PWM2_X                      0x15C 0x3A0 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_21_SAI1_TX_DATA00                       0x160 0x3A4 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_21_LPSPI2_PCS1                          0x160 0x3A4 0x5E0 0x2 0x0
+#define IOMUXC_GPIO_AD_21_FLEXSPI1_A_DATA01                    0x160 0x3A4 0x558 0x3 0x0
+#define IOMUXC_GPIO_AD_21_VIDEO_MUX_CSI_DATA04                 0x160 0x3A4 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_21_GPIO_MUX3_IO20                       0x160 0x3A4 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_21_KPP_COL07                            0x160 0x3A4 0x5A0 0x6 0x0
+#define IOMUXC_GPIO_AD_21_FLEXIO2_D21                          0x160 0x3A4 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_21_ENET_QOS_1588_EVENT2_IN              0x160 0x3A4 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_21_GPIO9_IO20                           0x160 0x3A4 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_21_FLEXPWM4_PWM3_X                      0x160 0x3A4 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_22_GPIO9_IO21                           0x164 0x3A8 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_22_SAI1_TX_BCLK                         0x164 0x3A8 0x67C 0x0 0x0
+#define IOMUXC_GPIO_AD_22_LPSPI2_PCS2                          0x164 0x3A8 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_22_FLEXSPI1_A_DATA02                    0x164 0x3A8 0x55C 0x3 0x0
+#define IOMUXC_GPIO_AD_22_VIDEO_MUX_CSI_DATA03                 0x164 0x3A8 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_22_GPIO_MUX3_IO21                       0x164 0x3A8 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_22_KPP_ROW06                            0x164 0x3A8 0x5A4 0x6 0x0
+#define IOMUXC_GPIO_AD_22_FLEXIO2_D22                          0x164 0x3A8 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_22_ENET_QOS_1588_EVENT3_OUT             0x164 0x3A8 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_AD_23_SAI1_TX_SYNC                         0x168 0x3AC 0x680 0x0 0x0
+#define IOMUXC_GPIO_AD_23_LPSPI2_PCS3                          0x168 0x3AC 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_23_FLEXSPI1_A_DATA03                    0x168 0x3AC 0x560 0x3 0x0
+#define IOMUXC_GPIO_AD_23_VIDEO_MUX_CSI_DATA02                 0x168 0x3AC 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_23_GPIO_MUX3_IO22                       0x168 0x3AC 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_23_KPP_COL06                            0x168 0x3AC 0x59C 0x6 0x0
+#define IOMUXC_GPIO_AD_23_FLEXIO2_D23                          0x168 0x3AC 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_23_ENET_QOS_1588_EVENT3_IN              0x168 0x3AC 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_23_GPIO9_IO22                           0x168 0x3AC 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_AD_24_LPUART1_TXD                          0x16C 0x3B0 0x620 0x0 0x0
+#define IOMUXC_GPIO_AD_24_LPSPI2_SCK                           0x16C 0x3B0 0x5E4 0x1 0x0
+#define IOMUXC_GPIO_AD_24_VIDEO_MUX_CSI_DATA00                 0x16C 0x3B0 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_24_ENET_RX_EN                           0x16C 0x3B0 0x4B8 0x3 0x0
+#define IOMUXC_GPIO_AD_24_FLEXPWM2_PWM0_A                      0x16C 0x3B0 0x518 0x4 0x1
+#define IOMUXC_GPIO_AD_24_GPIO_MUX3_IO23                       0x16C 0x3B0 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_24_KPP_ROW05                            0x16C 0x3B0 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_24_FLEXIO2_D24                          0x16C 0x3B0 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_24_LPI2C4_SCL                           0x16C 0x3B0 0x5C4 0x9 0x0
+#define IOMUXC_GPIO_AD_24_GPIO9_IO23                           0x16C 0x3B0 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_AD_25_GPIO9_IO24                           0x170 0x3B4 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_25_LPUART1_RXD                          0x170 0x3B4 0x61C 0x0 0x0
+#define IOMUXC_GPIO_AD_25_LPSPI2_PCS0                          0x170 0x3B4 0x5DC 0x1 0x0
+#define IOMUXC_GPIO_AD_25_VIDEO_MUX_CSI_DATA01                 0x170 0x3B4 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_25_ENET_RX_ER                           0x170 0x3B4 0x4BC 0x3 0x0
+#define IOMUXC_GPIO_AD_25_FLEXPWM2_PWM0_B                      0x170 0x3B4 0x524 0x4 0x1
+#define IOMUXC_GPIO_AD_25_GPIO_MUX3_IO24                       0x170 0x3B4 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_25_KPP_COL05                            0x170 0x3B4 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_25_FLEXIO2_D25                          0x170 0x3B4 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_25_LPI2C4_SDA                           0x170 0x3B4 0x5C8 0x9 0x0
+
+#define IOMUXC_GPIO_AD_26_LPUART1_CTS_B                                0x174 0x3B8 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_26_LPSPI2_SOUT                          0x174 0x3B8 0x5EC 0x1 0x0
+#define IOMUXC_GPIO_AD_26_SEMC_CSX01                           0x174 0x3B8 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_26_ENET_RX_DATA00                       0x174 0x3B8 0x4B0 0x3 0x0
+#define IOMUXC_GPIO_AD_26_FLEXPWM2_PWM1_A                      0x174 0x3B8 0x51C 0x4 0x1
+#define IOMUXC_GPIO_AD_26_GPIO_MUX3_IO25                       0x174 0x3B8 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_26_KPP_ROW04                            0x174 0x3B8 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_26_FLEXIO2_D26                          0x174 0x3B8 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_26_ENET_QOS_MDC                         0x174 0x3B8 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_26_GPIO9_IO25                           0x174 0x3B8 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_26_USDHC2_CD_B                          0x174 0x3B8 0x6D0 0xB 0x1
+
+#define IOMUXC_GPIO_AD_27_LPUART1_RTS_B                                0x178 0x3BC 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_27_LPSPI2_SIN                           0x178 0x3BC 0x5E8 0x1 0x0
+#define IOMUXC_GPIO_AD_27_SEMC_CSX02                           0x178 0x3BC 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_27_ENET_RX_DATA01                       0x178 0x3BC 0x4B4 0x3 0x0
+#define IOMUXC_GPIO_AD_27_FLEXPWM2_PWM1_B                      0x178 0x3BC 0x528 0x4 0x1
+#define IOMUXC_GPIO_AD_27_GPIO_MUX3_IO26                       0x178 0x3BC 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_27_KPP_COL04                            0x178 0x3BC 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_27_FLEXIO2_D27                          0x178 0x3BC 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_27_ENET_QOS_MDIO                                0x178 0x3BC 0x4EC 0x9 0x1
+#define IOMUXC_GPIO_AD_27_GPIO9_IO26                           0x178 0x3BC 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_27_USDHC2_WP                            0x178 0x3BC 0x6D4 0xB 0x1
+
+#define IOMUXC_GPIO_AD_28_GPIO9_IO27                           0x17C 0x3C0 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_28_USDHC2_VSELECT                       0x17C 0x3C0 0x0 0xB 0x0
+#define IOMUXC_GPIO_AD_28_LPSPI1_SCK                           0x17C 0x3C0 0x5D0 0x0 0x1
+#define IOMUXC_GPIO_AD_28_LPUART5_TXD                          0x17C 0x3C0 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_28_SEMC_CSX03                           0x17C 0x3C0 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_28_ENET_TX_EN                           0x17C 0x3C0 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_28_FLEXPWM2_PWM2_A                      0x17C 0x3C0 0x520 0x4 0x1
+#define IOMUXC_GPIO_AD_28_GPIO_MUX3_IO27                       0x17C 0x3C0 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_28_KPP_ROW03                            0x17C 0x3C0 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_28_FLEXIO2_D28                          0x17C 0x3C0 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_28_VIDEO_MUX_EXT_DCIC1                  0x17C 0x3C0 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_AD_29_LPSPI1_PCS0                          0x180 0x3C4 0x5CC 0x0 0x1
+#define IOMUXC_GPIO_AD_29_LPUART5_RXD                          0x180 0x3C4 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_29_ENET_REF_CLK                         0x180 0x3C4 0x4A8 0x2 0x0
+#define IOMUXC_GPIO_AD_29_ENET_TX_CLK                          0x180 0x3C4 0x4C0 0x3 0x0
+#define IOMUXC_GPIO_AD_29_FLEXPWM2_PWM2_B                      0x180 0x3C4 0x52C 0x4 0x1
+#define IOMUXC_GPIO_AD_29_GPIO_MUX3_IO28                       0x180 0x3C4 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_29_KPP_COL03                            0x180 0x3C4 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_29_FLEXIO2_D29                          0x180 0x3C4 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_29_VIDEO_MUX_EXT_DCIC2                  0x180 0x3C4 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_29_GPIO9_IO28                           0x180 0x3C4 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_29_USDHC2_RESET_B                       0x180 0x3C4 0x0 0xB 0x0
+
+#define IOMUXC_GPIO_AD_30_LPSPI1_SOUT                          0x184 0x3C8 0x5D8 0x0 0x1
+#define IOMUXC_GPIO_AD_30_USB_OTG2_OC                          0x184 0x3C8 0x6B8 0x1 0x1
+#define IOMUXC_GPIO_AD_30_FLEXCAN2_TX                          0x184 0x3C8 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_30_ENET_TX_DATA00                       0x184 0x3C8 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_30_LPUART3_TXD                          0x184 0x3C8 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_30_GPIO_MUX3_IO29                       0x184 0x3C8 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_30_KPP_ROW02                            0x184 0x3C8 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_30_FLEXIO2_D30                          0x184 0x3C8 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_30_WDOG2_RESET_B_DEB                    0x184 0x3C8 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_30_GPIO9_IO29                           0x184 0x3C8 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_AD_31_LPSPI1_SIN                           0x188 0x3CC 0x5D4 0x0 0x1
+#define IOMUXC_GPIO_AD_31_USB_OTG2_PWR                         0x188 0x3CC 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_31_FLEXCAN2_RX                          0x188 0x3CC 0x49C 0x2 0x1
+#define IOMUXC_GPIO_AD_31_ENET_TX_DATA01                       0x188 0x3CC 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_31_LPUART3_RXD                          0x188 0x3CC 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_31_GPIO_MUX3_IO30                       0x188 0x3CC 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_31_KPP_COL02                            0x188 0x3CC 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_31_FLEXIO2_D31                          0x188 0x3CC 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_31_WDOG1_RESET_B_DEB                    0x188 0x3CC 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_31_GPIO9_IO30                           0x188 0x3CC 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_AD_32_GPIO9_IO31                           0x18C 0x3D0 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_32_LPI2C1_SCL                           0x18C 0x3D0 0x5AC 0x0 0x1
+#define IOMUXC_GPIO_AD_32_USBPHY2_OTG_ID                       0x18C 0x3D0 0x6C4 0x1 0x1
+#define IOMUXC_GPIO_AD_32_PGMC_PMIC_RDY                                0x18C 0x3D0 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_32_ENET_MDC                             0x18C 0x3D0 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_32_USDHC1_CD_B                          0x18C 0x3D0 0x6C8 0x4 0x0
+#define IOMUXC_GPIO_AD_32_GPIO_MUX3_IO31                       0x18C 0x3D0 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_32_KPP_ROW01                            0x18C 0x3D0 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_32_LPUART10_TXD                         0x18C 0x3D0 0x628 0x8 0x1
+#define IOMUXC_GPIO_AD_32_ENET_1G_MDC                          0x18C 0x3D0 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_AD_33_LPI2C1_SDA                           0x190 0x3D4 0x5B0 0x0 0x1
+#define IOMUXC_GPIO_AD_33_USBPHY1_OTG_ID                       0x190 0x3D4 0x6C0 0x1 0x1
+#define IOMUXC_GPIO_AD_33_XBAR1_INOUT17                                0x190 0x3D4 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_33_ENET_MDIO                            0x190 0x3D4 0x4AC 0x3 0x1
+#define IOMUXC_GPIO_AD_33_USDHC1_WP                            0x190 0x3D4 0x6CC 0x4 0x0
+#define IOMUXC_GPIO_AD_33_GPIO_MUX4_IO00                       0x190 0x3D4 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_33_KPP_COL01                            0x190 0x3D4 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_33_LPUART10_RXD                         0x190 0x3D4 0x624 0x8 0x1
+#define IOMUXC_GPIO_AD_33_ENET_1G_MDIO                         0x190 0x3D4 0x4C8 0x9 0x3
+#define IOMUXC_GPIO_AD_33_GPIO10_IO00                          0x190 0x3D4 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_AD_34_ENET_1G_1588_EVENT0_IN               0x194 0x3D8 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_34_USB_OTG1_PWR                         0x194 0x3D8 0x0 0x1 0x0
+#define IOMUXC_GPIO_AD_34_XBAR1_INOUT18                                0x194 0x3D8 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_34_ENET_1588_EVENT0_IN                  0x194 0x3D8 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_34_USDHC1_VSELECT                       0x194 0x3D8 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_34_GPIO_MUX4_IO01                       0x194 0x3D8 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_34_KPP_ROW00                            0x194 0x3D8 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_34_LPUART10_CTS_B                       0x194 0x3D8 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_34_WDOG1_ANY                            0x194 0x3D8 0x0 0x9 0x0
+#define IOMUXC_GPIO_AD_34_GPIO10_IO01                          0x194 0x3D8 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_AD_35_GPIO10_IO02                          0x198 0x3DC 0x0 0xA 0x0
+#define IOMUXC_GPIO_AD_35_ENET_1G_1588_EVENT0_OUT              0x198 0x3DC 0x0 0x0 0x0
+#define IOMUXC_GPIO_AD_35_USB_OTG1_OC                          0x198 0x3DC 0x6BC 0x1 0x1
+#define IOMUXC_GPIO_AD_35_XBAR1_INOUT19                                0x198 0x3DC 0x0 0x2 0x0
+#define IOMUXC_GPIO_AD_35_ENET_1588_EVENT0_OUT                 0x198 0x3DC 0x0 0x3 0x0
+#define IOMUXC_GPIO_AD_35_USDHC1_RESET_B                       0x198 0x3DC 0x0 0x4 0x0
+#define IOMUXC_GPIO_AD_35_GPIO_MUX4_IO02                       0x198 0x3DC 0x0 0x5 0x0
+#define IOMUXC_GPIO_AD_35_KPP_COL00                            0x198 0x3DC 0x0 0x6 0x0
+#define IOMUXC_GPIO_AD_35_LPUART10_RTS_B                       0x198 0x3DC 0x0 0x8 0x0
+#define IOMUXC_GPIO_AD_35_FLEXSPI1_B_SS1_B                     0x198 0x3DC 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_SD_B1_00_USDHC1_CMD                                0x19C 0x3E0 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B1_00_XBAR1_INOUT20                     0x19C 0x3E0 0x6D8 0x2 0x1
+#define IOMUXC_GPIO_SD_B1_00_GPT4_CAPTURE1                     0x19C 0x3E0 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B1_00_GPIO_MUX4_IO03                    0x19C 0x3E0 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B1_00_FLEXSPI2_A_SS0_B                  0x19C 0x3E0 0x0 0x6 0x0
+#define IOMUXC_GPIO_SD_B1_00_KPP_ROW07                         0x19C 0x3E0 0x5A8 0x8 0x1
+#define IOMUXC_GPIO_SD_B1_00_GPIO10_IO03                       0x19C 0x3E0 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_SD_B1_01_USDHC1_CLK                                0x1A0 0x3E4 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B1_01_XBAR1_INOUT21                     0x1A0 0x3E4 0x6DC 0x2 0x1
+#define IOMUXC_GPIO_SD_B1_01_GPT4_CAPTURE2                     0x1A0 0x3E4 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B1_01_GPIO_MUX4_IO04                    0x1A0 0x3E4 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B1_01_FLEXSPI2_A_SCLK                   0x1A0 0x3E4 0x58C 0x6 0x1
+#define IOMUXC_GPIO_SD_B1_01_KPP_COL07                         0x1A0 0x3E4 0x5A0 0x8 0x1
+#define IOMUXC_GPIO_SD_B1_01_GPIO10_IO04                       0x1A0 0x3E4 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_SD_B1_02_GPIO10_IO05                       0x1A4 0x3E8 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B1_02_USDHC1_DATA0                      0x1A4 0x3E8 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B1_02_XBAR1_INOUT22                     0x1A4 0x3E8 0x6E0 0x2 0x1
+#define IOMUXC_GPIO_SD_B1_02_GPT4_COMPARE1                     0x1A4 0x3E8 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B1_02_GPIO_MUX4_IO05                    0x1A4 0x3E8 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B1_02_FLEXSPI2_A_DATA00                 0x1A4 0x3E8 0x57C 0x6 0x1
+#define IOMUXC_GPIO_SD_B1_02_KPP_ROW06                         0x1A4 0x3E8 0x5A4 0x8 0x1
+#define IOMUXC_GPIO_SD_B1_02_FLEXSPI1_A_SS1_B                  0x1A4 0x3E8 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_SD_B1_03_USDHC1_DATA1                      0x1A8 0x3EC 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B1_03_XBAR1_INOUT23                     0x1A8 0x3EC 0x6E4 0x2 0x1
+#define IOMUXC_GPIO_SD_B1_03_GPT4_COMPARE2                     0x1A8 0x3EC 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B1_03_GPIO_MUX4_IO06                    0x1A8 0x3EC 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B1_03_FLEXSPI2_A_DATA01                 0x1A8 0x3EC 0x580 0x6 0x1
+#define IOMUXC_GPIO_SD_B1_03_KPP_COL06                         0x1A8 0x3EC 0x59C 0x8 0x1
+#define IOMUXC_GPIO_SD_B1_03_FLEXSPI1_B_SS1_B                  0x1A8 0x3EC 0x0 0x9 0x0
+#define IOMUXC_GPIO_SD_B1_03_GPIO10_IO06                       0x1A8 0x3EC 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_SD_B1_04_USDHC1_DATA2                      0x1AC 0x3F0 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B1_04_XBAR1_INOUT24                     0x1AC 0x3F0 0x6E8 0x2 0x1
+#define IOMUXC_GPIO_SD_B1_04_GPT4_COMPARE3                     0x1AC 0x3F0 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B1_04_GPIO_MUX4_IO07                    0x1AC 0x3F0 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B1_04_FLEXSPI2_A_DATA02                 0x1AC 0x3F0 0x584 0x6 0x1
+#define IOMUXC_GPIO_SD_B1_04_FLEXSPI1_B_SS0_B                  0x1AC 0x3F0 0x0 0x8 0x0
+#define IOMUXC_GPIO_SD_B1_04_ENET_QOS_1588_EVENT2_AUX_IN       0x1AC 0x3F0 0x0 0x9 0x0
+#define IOMUXC_GPIO_SD_B1_04_GPIO10_IO07                       0x1AC 0x3F0 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_SD_B1_05_GPIO10_IO08                       0x1B0 0x3F4 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B1_05_USDHC1_DATA3                      0x1B0 0x3F4 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B1_05_XBAR1_INOUT25                     0x1B0 0x3F4 0x6EC 0x2 0x1
+#define IOMUXC_GPIO_SD_B1_05_GPT4_CLK                          0x1B0 0x3F4 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B1_05_GPIO_MUX4_IO08                    0x1B0 0x3F4 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B1_05_FLEXSPI2_A_DATA03                 0x1B0 0x3F4 0x588 0x6 0x1
+#define IOMUXC_GPIO_SD_B1_05_FLEXSPI1_B_DQS                    0x1B0 0x3F4 0x0 0x8 0x0
+#define IOMUXC_GPIO_SD_B1_05_ENET_QOS_1588_EVENT3_AUX_IN       0x1B0 0x3F4 0x0 0x9 0x0
+
+#define IOMUXC_GPIO_SD_B2_00_GPIO10_IO09                       0x1B4 0x3F8 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B2_00_USDHC2_DATA3                      0x1B4 0x3F8 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_00_FLEXSPI1_B_DATA03                 0x1B4 0x3F8 0x570 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_00_ENET_1G_RX_EN                     0x1B4 0x3F8 0x4E0 0x2 0x1
+#define IOMUXC_GPIO_SD_B2_00_LPUART9_TXD                       0x1B4 0x3F8 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_00_LPSPI4_SCK                                0x1B4 0x3F8 0x610 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_00_GPIO_MUX4_IO09                    0x1B4 0x3F8 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SD_B2_01_USDHC2_DATA2                      0x1B8 0x3FC 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_01_FLEXSPI1_B_DATA02                 0x1B8 0x3FC 0x56C 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_01_ENET_1G_RX_CLK                    0x1B8 0x3FC 0x4CC 0x2 0x1
+#define IOMUXC_GPIO_SD_B2_01_LPUART9_RXD                       0x1B8 0x3FC 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_01_LPSPI4_PCS0                       0x1B8 0x3FC 0x60C 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_01_GPIO_MUX4_IO10                    0x1B8 0x3FC 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B2_01_GPIO10_IO10                       0x1B8 0x3FC 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_SD_B2_02_GPIO10_IO11                       0x1BC 0x400 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B2_02_USDHC2_DATA1                      0x1BC 0x400 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_02_FLEXSPI1_B_DATA01                 0x1BC 0x400 0x568 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_02_ENET_1G_RX_DATA00                 0x1BC 0x400 0x4D0 0x2 0x1
+#define IOMUXC_GPIO_SD_B2_02_LPUART9_CTS_B                     0x1BC 0x400 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_02_LPSPI4_SOUT                       0x1BC 0x400 0x618 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_02_GPIO_MUX4_IO11                    0x1BC 0x400 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SD_B2_03_GPIO10_IO12                       0x1C0 0x404 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B2_03_USDHC2_DATA0                      0x1C0 0x404 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_03_FLEXSPI1_B_DATA00                 0x1C0 0x404 0x564 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_03_ENET_1G_RX_DATA01                 0x1C0 0x404 0x4D4 0x2 0x1
+#define IOMUXC_GPIO_SD_B2_03_LPUART9_RTS_B                     0x1C0 0x404 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_03_LPSPI4_SIN                                0x1C0 0x404 0x614 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_03_GPIO_MUX4_IO12                    0x1C0 0x404 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SD_B2_04_USDHC2_CLK                                0x1C4 0x408 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_04_FLEXSPI1_B_SCLK                   0x1C4 0x408 0x578 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_04_ENET_1G_RX_DATA02                 0x1C4 0x408 0x4D8 0x2 0x1
+#define IOMUXC_GPIO_SD_B2_04_FLEXSPI1_A_SS1_B                  0x1C4 0x408 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_04_LPSPI4_PCS1                       0x1C4 0x408 0x0 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_04_GPIO_MUX4_IO13                    0x1C4 0x408 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B2_04_GPIO10_IO13                       0x1C4 0x408 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_SD_B2_05_GPIO10_IO14                       0x1C8 0x40C 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B2_05_USDHC2_CMD                                0x1C8 0x40C 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_05_FLEXSPI1_A_DQS                    0x1C8 0x40C 0x550 0x1 0x2
+#define IOMUXC_GPIO_SD_B2_05_ENET_1G_RX_DATA03                 0x1C8 0x40C 0x4DC 0x2 0x1
+#define IOMUXC_GPIO_SD_B2_05_FLEXSPI1_B_SS0_B                  0x1C8 0x40C 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_05_LPSPI4_PCS2                       0x1C8 0x40C 0x0 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_05_GPIO_MUX4_IO14                    0x1C8 0x40C 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SD_B2_06_GPIO10_IO15                       0x1CC 0x410 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B2_06_USDHC2_RESET_B                    0x1CC 0x410 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_06_FLEXSPI1_A_SS0_B                  0x1CC 0x410 0x0 0x1 0x0
+#define IOMUXC_GPIO_SD_B2_06_ENET_1G_TX_DATA03                 0x1CC 0x410 0x0 0x2 0x0
+#define IOMUXC_GPIO_SD_B2_06_LPSPI4_PCS3                       0x1CC 0x410 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_06_GPT6_CAPTURE1                     0x1CC 0x410 0x0 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_06_GPIO_MUX4_IO15                    0x1CC 0x410 0x0 0x5 0x0
+
+#define IOMUXC_GPIO_SD_B2_07_USDHC2_STROBE                     0x1D0 0x414 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_07_FLEXSPI1_A_SCLK                   0x1D0 0x414 0x574 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_07_ENET_1G_TX_DATA02                 0x1D0 0x414 0x0 0x2 0x0
+#define IOMUXC_GPIO_SD_B2_07_LPUART3_CTS_B                     0x1D0 0x414 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_07_GPT6_CAPTURE2                     0x1D0 0x414 0x0 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_07_GPIO_MUX4_IO16                    0x1D0 0x414 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B2_07_LPSPI2_SCK                                0x1D0 0x414 0x5E4 0x6 0x1
+#define IOMUXC_GPIO_SD_B2_07_ENET_TX_ER                                0x1D0 0x414 0x0 0x8 0x0
+#define IOMUXC_GPIO_SD_B2_07_ENET_QOS_REF_CLK                  0x1D0 0x414 0x4A0 0x9 0x1
+#define IOMUXC_GPIO_SD_B2_07_GPIO10_IO16                       0x1D0 0x414 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_SD_B2_08_GPIO10_IO17                       0x1D4 0x418 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B2_08_USDHC2_DATA4                      0x1D4 0x418 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_08_FLEXSPI1_A_DATA00                 0x1D4 0x418 0x554 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_08_ENET_1G_TX_DATA01                 0x1D4 0x418 0x0 0x2 0x0
+#define IOMUXC_GPIO_SD_B2_08_LPUART3_RTS_B                     0x1D4 0x418 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_08_GPT6_COMPARE1                     0x1D4 0x418 0x0 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_08_GPIO_MUX4_IO17                    0x1D4 0x418 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B2_08_LPSPI2_PCS0                       0x1D4 0x418 0x5DC 0x6 0x1
+
+#define IOMUXC_GPIO_SD_B2_09_GPIO10_IO18                       0x1D8 0x41C 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B2_09_USDHC2_DATA5                      0x1D8 0x41C 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_09_FLEXSPI1_A_DATA01                 0x1D8 0x41C 0x558 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_09_ENET_1G_TX_DATA00                 0x1D8 0x41C 0x0 0x2 0x0
+#define IOMUXC_GPIO_SD_B2_09_LPUART5_CTS_B                     0x1D8 0x41C 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_09_GPT6_COMPARE2                     0x1D8 0x41C 0x0 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_09_GPIO_MUX4_IO18                    0x1D8 0x41C 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B2_09_LPSPI2_SOUT                       0x1D8 0x41C 0x5EC 0x6 0x1
+
+#define IOMUXC_GPIO_SD_B2_10_GPIO10_IO19                       0x1DC 0x420 0x0 0xA 0x0
+#define IOMUXC_GPIO_SD_B2_10_USDHC2_DATA6                      0x1DC 0x420 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_10_FLEXSPI1_A_DATA02                 0x1DC 0x420 0x55C 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_10_ENET_1G_TX_EN                     0x1DC 0x420 0x0 0x2 0x0
+#define IOMUXC_GPIO_SD_B2_10_LPUART5_RTS_B                     0x1DC 0x420 0x0 0x3 0x0
+#define IOMUXC_GPIO_SD_B2_10_GPT6_COMPARE3                     0x1DC 0x420 0x0 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_10_GPIO_MUX4_IO19                    0x1DC 0x420 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B2_10_LPSPI2_SIN                                0x1DC 0x420 0x5E8 0x6 0x1
+
+#define IOMUXC_GPIO_SD_B2_11_USDHC2_DATA7                      0x1E0 0x424 0x0 0x0 0x0
+#define IOMUXC_GPIO_SD_B2_11_FLEXSPI1_A_DATA03                 0x1E0 0x424 0x560 0x1 0x1
+#define IOMUXC_GPIO_SD_B2_11_ENET_1G_TX_CLK_IO                 0x1E0 0x424 0x4E8 0x2 0x1
+#define IOMUXC_GPIO_SD_B2_11_ENET_1G_REF_CLK                   0x1E0 0x424 0x4C4 0x3 0x1
+#define IOMUXC_GPIO_SD_B2_11_GPT6_CLK                          0x1E0 0x424 0x0 0x4 0x0
+#define IOMUXC_GPIO_SD_B2_11_GPIO_MUX4_IO20                    0x1E0 0x424 0x0 0x5 0x0
+#define IOMUXC_GPIO_SD_B2_11_LPSPI2_PCS1                       0x1E0 0x424 0x5E0 0x6 0x1
+#define IOMUXC_GPIO_SD_B2_11_GPIO10_IO20                       0x1E0 0x424 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B1_00_VIDEO_MUX_LCDIF_CLK             0x1E4 0x428 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_00_ENET_1G_RX_EN                   0x1E4 0x428 0x4E0 0x1 0x2
+#define IOMUXC_GPIO_DISP_B1_00_TMR1_TIMER0                     0x1E4 0x428 0x63C 0x3 0x2
+#define IOMUXC_GPIO_DISP_B1_00_XBAR1_INOUT26                   0x1E4 0x428 0x6F0 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_00_GPIO_MUX4_IO21                  0x1E4 0x428 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_00_ENET_QOS_RX_EN                  0x1E4 0x428 0x4F8 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_00_GPIO10_IO21                     0x1E4 0x428 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B1_01_VIDEO_MUX_LCDIF_ENABLE          0x1E8 0x42C 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_01_ENET_1G_RX_CLK                  0x1E8 0x42C 0x4CC 0x1 0x2
+#define IOMUXC_GPIO_DISP_B1_01_ENET_1G_RX_ER                   0x1E8 0x42C 0x4E4 0x2 0x1
+#define IOMUXC_GPIO_DISP_B1_01_TMR1_TIMER1                     0x1E8 0x42C 0x640 0x3 0x2
+#define IOMUXC_GPIO_DISP_B1_01_XBAR1_INOUT27                   0x1E8 0x42C 0x6F4 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_01_GPIO_MUX4_IO22                  0x1E8 0x42C 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_01_ENET_QOS_RX_CLK                 0x1E8 0x42C 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_01_ENET_QOS_RX_ER                  0x1E8 0x42C 0x4FC 0x9 0x0
+#define IOMUXC_GPIO_DISP_B1_01_GPIO10_IO22                     0x1E8 0x42C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B1_02_GPIO10_IO23                     0x1EC 0x430 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B1_02_VIDEO_MUX_LCDIF_HSYNC           0x1EC 0x430 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_02_ENET_1G_RX_DATA00               0x1EC 0x430 0x4D0 0x1 0x2
+#define IOMUXC_GPIO_DISP_B1_02_LPI2C3_SCL                      0x1EC 0x430 0x5BC 0x2 0x0
+#define IOMUXC_GPIO_DISP_B1_02_TMR1_TIMER2                     0x1EC 0x430 0x644 0x3 0x1
+#define IOMUXC_GPIO_DISP_B1_02_XBAR1_INOUT28                   0x1EC 0x430 0x6F8 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_02_GPIO_MUX4_IO23                  0x1EC 0x430 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_02_ENET_QOS_RX_DATA00              0x1EC 0x430 0x4F0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_02_LPUART1_TXD                     0x1EC 0x430 0x620 0x9 0x1
+
+#define IOMUXC_GPIO_DISP_B1_03_VIDEO_MUX_LCDIF_VSYNC           0x1F0 0x434 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_03_ENET_1G_RX_DATA01               0x1F0 0x434 0x4D4 0x1 0x2
+#define IOMUXC_GPIO_DISP_B1_03_LPI2C3_SDA                      0x1F0 0x434 0x5C0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B1_03_TMR2_TIMER0                     0x1F0 0x434 0x648 0x3 0x2
+#define IOMUXC_GPIO_DISP_B1_03_XBAR1_INOUT29                   0x1F0 0x434 0x6FC 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_03_GPIO_MUX4_IO24                  0x1F0 0x434 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_03_ENET_QOS_RX_DATA01              0x1F0 0x434 0x4F4 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_03_LPUART1_RXD                     0x1F0 0x434 0x61C 0x9 0x1
+#define IOMUXC_GPIO_DISP_B1_03_GPIO10_IO24                     0x1F0 0x434 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B1_04_VIDEO_MUX_LCDIF_DATA00          0x1F4 0x438 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_04_ENET_1G_RX_DATA02               0x1F4 0x438 0x4D8 0x1 0x2
+#define IOMUXC_GPIO_DISP_B1_04_LPUART4_RXD                     0x1F4 0x438 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B1_04_TMR2_TIMER1                     0x1F4 0x438 0x64C 0x3 0x2
+#define IOMUXC_GPIO_DISP_B1_04_XBAR1_INOUT30                   0x1F4 0x438 0x700 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_04_GPIO_MUX4_IO25                  0x1F4 0x438 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_04_ENET_QOS_RX_DATA02              0x1F4 0x438 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_04_LPSPI3_SCK                      0x1F4 0x438 0x600 0x9 0x1
+#define IOMUXC_GPIO_DISP_B1_04_GPIO10_IO25                     0x1F4 0x438 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B1_05_GPIO10_IO26                     0x1F8 0x43C 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B1_05_VIDEO_MUX_LCDIF_DATA01          0x1F8 0x43C 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_05_ENET_1G_RX_DATA03               0x1F8 0x43C 0x4DC 0x1 0x2
+#define IOMUXC_GPIO_DISP_B1_05_LPUART4_CTS_B                   0x1F8 0x43C 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B1_05_TMR2_TIMER2                     0x1F8 0x43C 0x650 0x3 0x1
+#define IOMUXC_GPIO_DISP_B1_05_XBAR1_INOUT31                   0x1F8 0x43C 0x704 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_05_GPIO_MUX4_IO26                  0x1F8 0x43C 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_05_ENET_QOS_RX_DATA03              0x1F8 0x43C 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_05_LPSPI3_SIN                      0x1F8 0x43C 0x604 0x9 0x1
+
+#define IOMUXC_GPIO_DISP_B1_06_VIDEO_MUX_LCDIF_DATA02          0x1FC 0x440 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_06_ENET_1G_TX_DATA03               0x1FC 0x440 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B1_06_LPUART4_TXD                     0x1FC 0x440 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B1_06_TMR3_TIMER0                     0x1FC 0x440 0x654 0x3 0x2
+#define IOMUXC_GPIO_DISP_B1_06_XBAR1_INOUT32                   0x1FC 0x440 0x708 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_06_GPIO_MUX4_IO27                  0x1FC 0x440 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_06_SRC_BT_CFG00                    0x1FC 0x440 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B1_06_ENET_QOS_TX_DATA03              0x1FC 0x440 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_06_LPSPI3_SOUT                     0x1FC 0x440 0x608 0x9 0x1
+#define IOMUXC_GPIO_DISP_B1_06_GPIO10_IO27                     0x1FC 0x440 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B1_07_VIDEO_MUX_LCDIF_DATA03          0x200 0x444 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_07_ENET_1G_TX_DATA02               0x200 0x444 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B1_07_LPUART4_RTS_B                   0x200 0x444 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B1_07_TMR3_TIMER1                     0x200 0x444 0x658 0x3 0x2
+#define IOMUXC_GPIO_DISP_B1_07_XBAR1_INOUT33                   0x200 0x444 0x70C 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_07_GPIO_MUX4_IO28                  0x200 0x444 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_07_SRC_BT_CFG01                    0x200 0x444 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B1_07_ENET_QOS_TX_DATA02              0x200 0x444 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_07_LPSPI3_PCS0                     0x200 0x444 0x5F0 0x9 0x1
+#define IOMUXC_GPIO_DISP_B1_07_GPIO10_IO28                     0x200 0x444 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B1_08_GPIO10_IO29                     0x204 0x448 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B1_08_VIDEO_MUX_LCDIF_DATA04          0x204 0x448 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_08_ENET_1G_TX_DATA01               0x204 0x448 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B1_08_USDHC1_CD_B                     0x204 0x448 0x6C8 0x2 0x1
+#define IOMUXC_GPIO_DISP_B1_08_TMR3_TIMER2                     0x204 0x448 0x65C 0x3 0x1
+#define IOMUXC_GPIO_DISP_B1_08_XBAR1_INOUT34                   0x204 0x448 0x710 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_08_GPIO_MUX4_IO29                  0x204 0x448 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_08_SRC_BT_CFG02                    0x204 0x448 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B1_08_ENET_QOS_TX_DATA01              0x204 0x448 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_08_LPSPI3_PCS1                     0x204 0x448 0x5F4 0x9 0x1
+
+#define IOMUXC_GPIO_DISP_B1_09_VIDEO_MUX_LCDIF_DATA05          0x208 0x44C 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_09_ENET_1G_TX_DATA00               0x208 0x44C 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B1_09_USDHC1_WP                       0x208 0x44C 0x6CC 0x2 0x1
+#define IOMUXC_GPIO_DISP_B1_09_TMR4_TIMER0                     0x208 0x44C 0x660 0x3 0x2
+#define IOMUXC_GPIO_DISP_B1_09_XBAR1_INOUT35                   0x208 0x44C 0x714 0x4 0x1
+#define IOMUXC_GPIO_DISP_B1_09_GPIO_MUX4_IO30                  0x208 0x44C 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_09_SRC_BT_CFG03                    0x208 0x44C 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B1_09_ENET_QOS_TX_DATA00              0x208 0x44C 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_09_LPSPI3_PCS2                     0x208 0x44C 0x5F8 0x9 0x1
+#define IOMUXC_GPIO_DISP_B1_09_GPIO10_IO30                     0x208 0x44C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B1_10_VIDEO_MUX_LCDIF_DATA06          0x20C 0x450 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_10_ENET_1G_TX_EN                   0x20C 0x450 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B1_10_USDHC1_RESET_B                  0x20C 0x450 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B1_10_TMR4_TIMER1                     0x20C 0x450 0x664 0x3 0x2
+#define IOMUXC_GPIO_DISP_B1_10_XBAR1_INOUT36                   0x20C 0x450 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B1_10_GPIO_MUX4_IO31                  0x20C 0x450 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_10_SRC_BT_CFG04                    0x20C 0x450 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B1_10_ENET_QOS_TX_EN                  0x20C 0x450 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_10_LPSPI3_PCS3                     0x20C 0x450 0x5FC 0x9 0x1
+#define IOMUXC_GPIO_DISP_B1_10_GPIO10_IO31                     0x20C 0x450 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B1_11_VIDEO_MUX_LCDIF_DATA07          0x210 0x454 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B1_11_ENET_1G_TX_CLK_IO               0x210 0x454 0x4E8 0x1 0x2
+#define IOMUXC_GPIO_DISP_B1_11_ENET_1G_REF_CLK                 0x210 0x454 0x4C4 0x2 0x2
+#define IOMUXC_GPIO_DISP_B1_11_TMR4_TIMER2                     0x210 0x454 0x668 0x3 0x1
+#define IOMUXC_GPIO_DISP_B1_11_XBAR1_INOUT37                   0x210 0x454 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B1_11_GPIO_MUX5_IO00                  0x210 0x454 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B1_11_SRC_BT_CFG05                    0x210 0x454 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B1_11_ENET_QOS_TX_CLK                 0x210 0x454 0x4A4 0x8 0x0
+#define IOMUXC_GPIO_DISP_B1_11_ENET_QOS_REF_CLK                        0x210 0x454 0x4A0 0x9 0x2
+#define IOMUXC_GPIO_DISP_B1_11_GPIO11_IO00                     0x210 0x454 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B2_00_GPIO11_IO01                     0x214 0x458 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_00_VIDEO_MUX_LCDIF_DATA08          0x214 0x458 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_00_WDOG1_B                         0x214 0x458 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B2_00_MQS_RIGHT                       0x214 0x458 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_00_ENET_1G_TX_ER                   0x214 0x458 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_00_SAI1_TX_DATA03                  0x214 0x458 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B2_00_GPIO_MUX5_IO01                  0x214 0x458 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_00_SRC_BT_CFG06                    0x214 0x458 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B2_00_ENET_QOS_TX_ER                  0x214 0x458 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_DISP_B2_01_VIDEO_MUX_LCDIF_DATA09          0x218 0x45C 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_01_USDHC1_VSELECT                  0x218 0x45C 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B2_01_MQS_LEFT                                0x218 0x45C 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_01_WDOG2_B                         0x218 0x45C 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_01_SAI1_TX_DATA02                  0x218 0x45C 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B2_01_GPIO_MUX5_IO02                  0x218 0x45C 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_01_SRC_BT_CFG07                    0x218 0x45C 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B2_01_EWM_OUT_B                       0x218 0x45C 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B2_01_CCM_ENET_REF_CLK_25M            0x218 0x45C 0x0 0x9 0x0
+#define IOMUXC_GPIO_DISP_B2_01_GPIO11_IO02                     0x218 0x45C 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B2_02_GPIO11_IO03                     0x21C 0x460 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_02_VIDEO_MUX_LCDIF_DATA10          0x21C 0x460 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_02_ENET_TX_DATA00                  0x21C 0x460 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B2_02_PIT1_TRIGGER3                   0x21C 0x460 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_02_ARM_TRACE00                     0x21C 0x460 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_02_SAI1_TX_DATA01                  0x21C 0x460 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B2_02_GPIO_MUX5_IO03                  0x21C 0x460 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_02_SRC_BT_CFG08                    0x21C 0x460 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B2_02_ENET_QOS_TX_DATA00              0x21C 0x460 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_DISP_B2_03_GPIO11_IO04                     0x220 0x464 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_03_VIDEO_MUX_LCDIF_DATA11          0x220 0x464 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_03_ENET_TX_DATA01                  0x220 0x464 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B2_03_PIT1_TRIGGER2                   0x220 0x464 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_03_ARM_TRACE01                     0x220 0x464 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_03_SAI1_MCLK                       0x220 0x464 0x66C 0x4 0x1
+#define IOMUXC_GPIO_DISP_B2_03_GPIO_MUX5_IO04                  0x220 0x464 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_03_SRC_BT_CFG09                    0x220 0x464 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B2_03_ENET_QOS_TX_DATA01              0x220 0x464 0x0 0x8 0x0
+
+#define IOMUXC_GPIO_DISP_B2_04_VIDEO_MUX_LCDIF_DATA12          0x224 0x468 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_04_ENET_TX_EN                      0x224 0x468 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B2_04_PIT1_TRIGGER1                   0x224 0x468 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_04_ARM_TRACE02                     0x224 0x468 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_04_SAI1_RX_SYNC                    0x224 0x468 0x678 0x4 0x1
+#define IOMUXC_GPIO_DISP_B2_04_GPIO_MUX5_IO05                  0x224 0x468 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_04_SRC_BT_CFG10                    0x224 0x468 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B2_04_ENET_QOS_TX_EN                  0x224 0x468 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B2_04_GPIO11_IO05                     0x224 0x468 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B2_05_GPIO11_IO06                     0x228 0x46C 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_05_VIDEO_MUX_LCDIF_DATA13          0x228 0x46C 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_05_ENET_TX_CLK                     0x228 0x46C 0x4C0 0x1 0x1
+#define IOMUXC_GPIO_DISP_B2_05_ENET_REF_CLK                    0x228 0x46C 0x4A8 0x2 0x1
+#define IOMUXC_GPIO_DISP_B2_05_ARM_TRACE03                     0x228 0x46C 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_05_SAI1_RX_BCLK                    0x228 0x46C 0x670 0x4 0x1
+#define IOMUXC_GPIO_DISP_B2_05_GPIO_MUX5_IO06                  0x228 0x46C 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_05_SRC_BT_CFG11                    0x228 0x46C 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B2_05_ENET_QOS_TX_CLK                 0x228 0x46C 0x4A4 0x8 0x1
+
+#define IOMUXC_GPIO_DISP_B2_06_GPIO11_IO07                     0x22C 0x470 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_06_VIDEO_MUX_LCDIF_DATA14          0x22C 0x470 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_06_ENET_RX_DATA00                  0x22C 0x470 0x4B0 0x1 0x1
+#define IOMUXC_GPIO_DISP_B2_06_LPUART7_TXD                     0x22C 0x470 0x630 0x2 0x1
+#define IOMUXC_GPIO_DISP_B2_06_ARM_TRACE_CLK                   0x22C 0x470 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_06_SAI1_RX_DATA00                  0x22C 0x470 0x674 0x4 0x1
+#define IOMUXC_GPIO_DISP_B2_06_GPIO_MUX5_IO07                  0x22C 0x470 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_06_ENET_QOS_RX_DATA00              0x22C 0x470 0x4F0 0x8 0x1
+
+#define IOMUXC_GPIO_DISP_B2_07_VIDEO_MUX_LCDIF_DATA15          0x230 0x474 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_07_ENET_RX_DATA01                  0x230 0x474 0x4B4 0x1 0x1
+#define IOMUXC_GPIO_DISP_B2_07_LPUART7_RXD                     0x230 0x474 0x62C 0x2 0x1
+#define IOMUXC_GPIO_DISP_B2_07_ARM_TRACE_SWO                   0x230 0x474 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_07_SAI1_TX_DATA00                  0x230 0x474 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B2_07_GPIO_MUX5_IO08                  0x230 0x474 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_07_ENET_QOS_RX_DATA01              0x230 0x474 0x4F4 0x8 0x1
+#define IOMUXC_GPIO_DISP_B2_07_GPIO11_IO08                     0x230 0x474 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B2_08_GPIO11_IO09                     0x234 0x478 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_08_VIDEO_MUX_LCDIF_DATA16          0x234 0x478 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_08_ENET_RX_EN                      0x234 0x478 0x4B8 0x1 0x1
+#define IOMUXC_GPIO_DISP_B2_08_LPUART8_TXD                     0x234 0x478 0x638 0x2 0x1
+#define IOMUXC_GPIO_DISP_B2_08_ARM_CM7_EVENTO                  0x234 0x478 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_08_SAI1_TX_BCLK                    0x234 0x478 0x67C 0x4 0x1
+#define IOMUXC_GPIO_DISP_B2_08_GPIO_MUX5_IO09                  0x234 0x478 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_08_ENET_QOS_RX_EN                  0x234 0x478 0x4F8 0x8 0x1
+#define IOMUXC_GPIO_DISP_B2_08_LPUART1_TXD                     0x234 0x478 0x620 0x9 0x2
+
+#define IOMUXC_GPIO_DISP_B2_09_GPIO11_IO10                     0x238 0x47C 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_09_VIDEO_MUX_LCDIF_DATA17          0x238 0x47C 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_09_ENET_RX_ER                      0x238 0x47C 0x4BC 0x1 0x1
+#define IOMUXC_GPIO_DISP_B2_09_LPUART8_RXD                     0x238 0x47C 0x634 0x2 0x1
+#define IOMUXC_GPIO_DISP_B2_09_ARM_CM7_EVENTI                  0x238 0x47C 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_09_SAI1_TX_SYNC                    0x238 0x47C 0x680 0x4 0x1
+#define IOMUXC_GPIO_DISP_B2_09_GPIO_MUX5_IO10                  0x238 0x47C 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_09_ENET_QOS_RX_ER                  0x238 0x47C 0x4FC 0x8 0x1
+#define IOMUXC_GPIO_DISP_B2_09_LPUART1_RXD                     0x238 0x47C 0x61C 0x9 0x2
+
+#define IOMUXC_GPIO_DISP_B2_10_GPIO11_IO11                     0x23C 0x480 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_10_VIDEO_MUX_LCDIF_DATA18          0x23C 0x480 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_10_EMVSIM2_IO                      0x23C 0x480 0x6A8 0x1 0x1
+#define IOMUXC_GPIO_DISP_B2_10_LPUART2_TXD                     0x23C 0x480 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_10_WDOG2_RESET_B_DEB               0x23C 0x480 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_10_XBAR1_INOUT38                   0x23C 0x480 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B2_10_GPIO_MUX5_IO11                  0x23C 0x480 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_10_LPI2C3_SCL                      0x23C 0x480 0x5BC 0x6 0x1
+#define IOMUXC_GPIO_DISP_B2_10_ENET_QOS_RX_ER                  0x23C 0x480 0x4FC 0x8 0x2
+#define IOMUXC_GPIO_DISP_B2_10_SPDIF_IN                                0x23C 0x480 0x6B4 0x9 0x2
+
+#define IOMUXC_GPIO_DISP_B2_11_VIDEO_MUX_LCDIF_DATA19          0x240 0x484 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_11_EMVSIM2_CLK                     0x240 0x484 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B2_11_LPUART2_RXD                     0x240 0x484 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_11_WDOG1_RESET_B_DEB               0x240 0x484 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_11_XBAR1_INOUT39                   0x240 0x484 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B2_11_GPIO_MUX5_IO12                  0x240 0x484 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_11_LPI2C3_SDA                      0x240 0x484 0x5C0 0x6 0x1
+#define IOMUXC_GPIO_DISP_B2_11_ENET_QOS_CRS                    0x240 0x484 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B2_11_SPDIF_OUT                       0x240 0x484 0x0 0x9 0x0
+#define IOMUXC_GPIO_DISP_B2_11_GPIO11_IO12                     0x240 0x484 0x0 0xA 0x0
+
+#define IOMUXC_GPIO_DISP_B2_12_GPIO11_IO13                     0x244 0x488 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_12_VIDEO_MUX_LCDIF_DATA20          0x244 0x488 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_12_EMVSIM2_RST                     0x244 0x488 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B2_12_FLEXCAN1_TX                     0x244 0x488 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_12_LPUART2_CTS_B                   0x244 0x488 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_12_XBAR1_INOUT40                   0x244 0x488 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B2_12_GPIO_MUX5_IO13                  0x244 0x488 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_12_LPI2C4_SCL                      0x244 0x488 0x5C4 0x6 0x1
+#define IOMUXC_GPIO_DISP_B2_12_ENET_QOS_COL                    0x244 0x488 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B2_12_LPSPI4_SCK                      0x244 0x488 0x610 0x9 0x1
+
+#define IOMUXC_GPIO_DISP_B2_13_GPIO11_IO14                     0x248 0x48C 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_13_VIDEO_MUX_LCDIF_DATA21          0x248 0x48C 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_13_EMVSIM2_SVEN                    0x248 0x48C 0x0 0x1 0x0
+#define IOMUXC_GPIO_DISP_B2_13_FLEXCAN1_RX                     0x248 0x48C 0x498 0x2 0x1
+#define IOMUXC_GPIO_DISP_B2_13_LPUART2_RTS_B                   0x248 0x48C 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_13_ENET_REF_CLK                    0x248 0x48C 0x4A8 0x4 0x2
+#define IOMUXC_GPIO_DISP_B2_13_GPIO_MUX5_IO14                  0x248 0x48C 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_13_LPI2C4_SDA                      0x248 0x48C 0x5C8 0x6 0x1
+#define IOMUXC_GPIO_DISP_B2_13_ENET_QOS_1588_EVENT0_OUT                0x248 0x48C 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B2_13_LPSPI4_SIN                      0x248 0x48C 0x614 0x9 0x1
+
+#define IOMUXC_GPIO_DISP_B2_14_GPIO_MUX5_IO15                  0x24C 0x490 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_14_FLEXCAN1_TX                     0x24C 0x490 0x0 0x6 0x0
+#define IOMUXC_GPIO_DISP_B2_14_ENET_QOS_1588_EVENT0_IN         0x24C 0x490 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B2_14_LPSPI4_SOUT                     0x24C 0x490 0x618 0x9 0x1
+#define IOMUXC_GPIO_DISP_B2_14_GPIO11_IO15                     0x24C 0x490 0x0 0xA 0x0
+#define IOMUXC_GPIO_DISP_B2_14_VIDEO_MUX_LCDIF_DATA22          0x24C 0x490 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_14_EMVSIM2_PD                      0x24C 0x490 0x6AC 0x1 0x1
+#define IOMUXC_GPIO_DISP_B2_14_WDOG2_B                         0x24C 0x490 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_14_VIDEO_MUX_EXT_DCIC1             0x24C 0x490 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_14_ENET_1G_REF_CLK                 0x24C 0x490 0x4C4 0x4 0x3
+
+#define IOMUXC_GPIO_DISP_B2_15_VIDEO_MUX_LCDIF_DATA23          0x250 0x494 0x0 0x0 0x0
+#define IOMUXC_GPIO_DISP_B2_15_EMVSIM2_POWER_FAIL              0x250 0x494 0x6B0 0x1 0x1
+#define IOMUXC_GPIO_DISP_B2_15_WDOG1_B                         0x250 0x494 0x0 0x2 0x0
+#define IOMUXC_GPIO_DISP_B2_15_VIDEO_MUX_EXT_DCIC2             0x250 0x494 0x0 0x3 0x0
+#define IOMUXC_GPIO_DISP_B2_15_PIT1_TRIGGER0                   0x250 0x494 0x0 0x4 0x0
+#define IOMUXC_GPIO_DISP_B2_15_GPIO_MUX5_IO16                  0x250 0x494 0x0 0x5 0x0
+#define IOMUXC_GPIO_DISP_B2_15_FLEXCAN1_RX                     0x250 0x494 0x498 0x6 0x2
+#define IOMUXC_GPIO_DISP_B2_15_ENET_QOS_1588_EVENT0_AUX_IN     0x250 0x494 0x0 0x8 0x0
+#define IOMUXC_GPIO_DISP_B2_15_LPSPI4_PCS0                     0x250 0x494 0x60C 0x9 0x1
+#define IOMUXC_GPIO_DISP_B2_15_GPIO11_IO16                     0x250 0x494 0x0 0xA 0x0
+
+#endif  /* _DT_BINDINGS_PINCTRL_IMXRT1170_PINFUNC_H */
index 70e634b37aae0a840d0f141bad83b17d07ba9761..6cdadba6a3acf26c6293cd2f9d2c528c82051e3f 100644 (file)
                                     <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&apb0_gates 0>, <&osc24M>, <&rtc CLK_OSC32K>;
                        clock-names = "apb", "hosc", "losc";
-                       resets = <&apb0_rst 0>;
                        gpio-controller;
                        interrupt-controller;
                        #interrupt-cells = <3>;
index 1a262a05fdcb25c05781e925fb1005dbccc7a53c..f630ab55bb6ad3b91e38342795b8a14f8286462f 100644 (file)
                        interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&apb0_gates 0>, <&osc24M>, <&rtc CLK_OSC32K>;
                        clock-names = "apb", "hosc", "losc";
-                       resets = <&apb0_rst 0>;
                        gpio-controller;
                        interrupt-controller;
                        #interrupt-cells = <3>;
index ce4fa6706d06822b0f32fbdbea9449751570651d..7d3f3300f4316d5710b868646c3e6365cc58de70 100644 (file)
                                     <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
                        clocks = <&apbs_gates 0>, <&osc24M>, <&osc32k>;
                        clock-names = "apb", "hosc", "losc";
-                       resets = <&apbs_rst 0>;
                        gpio-controller;
                        interrupt-controller;
                        #interrupt-cells = <3>;
index bff144c97e66ec9556a2565745560bbdb09853b4..1cf74b0c42e56f19fb690774eb06eb3bd644b8c8 100644 (file)
@@ -311,7 +311,7 @@ config PINCTRL_MICROCHIP_SGPIO
          LED controller.
 
 config PINCTRL_OCELOT
-       bool "Pinctrl driver for the Microsemi Ocelot and Jaguar2 SoCs"
+       tristate "Pinctrl driver for the Microsemi Ocelot and Jaguar2 SoCs"
        depends on OF
        depends on HAS_IOMEM
        select GPIOLIB
index 4d7548686f3939b50301cfec3310a0570d430c61..aaa78a61319640933a279ed5abf58c64c061d247 100644 (file)
@@ -632,7 +632,7 @@ struct aspeed_pin_desc {
        SIG_EXPR_LIST_ALIAS(pin, sig, group)
 
 /**
- * Similar to the above, but for pins with a dual expressions (DE) and
+ * Similar to the above, but for pins with a dual expressions (DE)
  * and a single group (SG) of pins.
  *
  * @pin: The pin the signal will be routed to
index dad453054776806aa7a7a32e52fbe9ba30ccaf18..7857e612a10080ea04fd75ef45860a6c797b0984 100644 (file)
@@ -507,7 +507,7 @@ static void bcm2835_gpio_irq_config(struct bcm2835_pinctrl *pc,
        }
 }
 
-static void bcm2835_gpio_irq_enable(struct irq_data *data)
+static void bcm2835_gpio_irq_unmask(struct irq_data *data)
 {
        struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
        struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
@@ -516,13 +516,15 @@ static void bcm2835_gpio_irq_enable(struct irq_data *data)
        unsigned bank = GPIO_REG_OFFSET(gpio);
        unsigned long flags;
 
+       gpiochip_enable_irq(chip, gpio);
+
        raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
        set_bit(offset, &pc->enabled_irq_map[bank]);
        bcm2835_gpio_irq_config(pc, gpio, true);
        raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
 }
 
-static void bcm2835_gpio_irq_disable(struct irq_data *data)
+static void bcm2835_gpio_irq_mask(struct irq_data *data)
 {
        struct gpio_chip *chip = irq_data_get_irq_chip_data(data);
        struct bcm2835_pinctrl *pc = gpiochip_get_data(chip);
@@ -537,6 +539,8 @@ static void bcm2835_gpio_irq_disable(struct irq_data *data)
        bcm2835_gpio_set_bit(pc, GPEDS0, gpio);
        clear_bit(offset, &pc->enabled_irq_map[bank]);
        raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
+
+       gpiochip_disable_irq(chip, gpio);
 }
 
 static int __bcm2835_gpio_irq_set_type_disabled(struct bcm2835_pinctrl *pc,
@@ -693,16 +697,15 @@ static int bcm2835_gpio_irq_set_wake(struct irq_data *data, unsigned int on)
        return ret;
 }
 
-static struct irq_chip bcm2835_gpio_irq_chip = {
+static const struct irq_chip bcm2835_gpio_irq_chip = {
        .name = MODULE_NAME,
-       .irq_enable = bcm2835_gpio_irq_enable,
-       .irq_disable = bcm2835_gpio_irq_disable,
        .irq_set_type = bcm2835_gpio_irq_set_type,
        .irq_ack = bcm2835_gpio_irq_ack,
-       .irq_mask = bcm2835_gpio_irq_disable,
-       .irq_unmask = bcm2835_gpio_irq_enable,
+       .irq_mask = bcm2835_gpio_irq_mask,
+       .irq_unmask = bcm2835_gpio_irq_unmask,
        .irq_set_wake = bcm2835_gpio_irq_set_wake,
-       .flags = IRQCHIP_MASK_ON_SUSPEND,
+       .flags = (IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE),
+       GPIOCHIP_IRQ_RESOURCE_HELPERS,
 };
 
 static int bcm2835_pctl_get_groups_count(struct pinctrl_dev *pctldev)
@@ -1280,7 +1283,7 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev)
        pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range);
 
        girq = &pc->gpio_chip.irq;
-       girq->chip = &bcm2835_gpio_irq_chip;
+       gpio_irq_chip_set_chip(girq, &bcm2835_gpio_irq_chip);
        girq->parent_handler = bcm2835_gpio_irq_handler;
        girq->num_parents = BCM2835_NUM_IRQS;
        girq->parents = devm_kcalloc(dev, BCM2835_NUM_IRQS,
index ffe39336fcacab4effb5c0ead36c3b0acc66f13f..9e57f4c62e609c3d3db203cfd475bee0196ba793 100644 (file)
@@ -126,7 +126,7 @@ struct pinctrl_dev *get_pinctrl_dev_from_of_node(struct device_node *np)
        mutex_lock(&pinctrldev_list_mutex);
 
        list_for_each_entry(pctldev, &pinctrldev_list, node)
-               if (pctldev->dev->of_node == np) {
+               if (device_match_of_node(pctldev->dev, np)) {
                        mutex_unlock(&pinctrldev_list_mutex);
                        return pctldev;
                }
index 417e41b37a6fd7ed078d506faed55194ac0ffc45..91b3ee1e6fa90affa3faf25ba7cad79195d2d7de 100644 (file)
@@ -247,6 +247,7 @@ static const struct of_device_id imx93_pinctrl_of_match[] = {
        { .compatible = "fsl,imx93-iomuxc", },
        { /* sentinel */ }
 };
+MODULE_DEVICE_TABLE(of, imx93_pinctrl_of_match);
 
 static int imx93_pinctrl_probe(struct platform_device *pdev)
 {
index e5ec8b8956da1633d40d8a5dd37586ebd7844b4a..078eec8af4a44d883b8ae83c84d500821c070773 100644 (file)
@@ -151,6 +151,14 @@ config PINCTRL_LEWISBURG
          This pinctrl driver provides an interface that allows configuring
          of Intel Lewisburg pins and using them as GPIOs.
 
+config PINCTRL_METEORLAKE
+       tristate "Intel Meteor Lake pinctrl and GPIO driver"
+       depends on ACPI
+       select PINCTRL_INTEL
+       help
+         This pinctrl driver provides an interface that allows configuring
+         of Intel Meteor Lake pins and using them as GPIOs.
+
 config PINCTRL_SUNRISEPOINT
        tristate "Intel Sunrisepoint pinctrl and GPIO driver"
        depends on ACPI
index 181ffcf34d627e2b79dc476713117691eb1085ac..bb87e7bc7b20eeae5f6aecf0281bf44aec61b6ea 100644 (file)
@@ -18,5 +18,6 @@ obj-$(CONFIG_PINCTRL_ICELAKE)         += pinctrl-icelake.o
 obj-$(CONFIG_PINCTRL_JASPERLAKE)       += pinctrl-jasperlake.o
 obj-$(CONFIG_PINCTRL_LAKEFIELD)                += pinctrl-lakefield.o
 obj-$(CONFIG_PINCTRL_LEWISBURG)                += pinctrl-lewisburg.o
+obj-$(CONFIG_PINCTRL_METEORLAKE)       += pinctrl-meteorlake.o
 obj-$(CONFIG_PINCTRL_SUNRISEPOINT)     += pinctrl-sunrisepoint.o
 obj-$(CONFIG_PINCTRL_TIGERLAKE)                += pinctrl-tigerlake.o
index 31f8f271628c86c638b90510a2bcde246cf91edb..67db79f3805100753c52bbe82d8c7cf018e08500 100644 (file)
@@ -603,7 +603,7 @@ static const char *byt_get_group_name(struct pinctrl_dev *pctldev,
 {
        struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
 
-       return vg->soc->groups[selector].name;
+       return vg->soc->groups[selector].grp.name;
 }
 
 static int byt_get_group_pins(struct pinctrl_dev *pctldev,
@@ -613,8 +613,8 @@ static int byt_get_group_pins(struct pinctrl_dev *pctldev,
 {
        struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
 
-       *pins           = vg->soc->groups[selector].pins;
-       *num_pins       = vg->soc->groups[selector].npins;
+       *pins           = vg->soc->groups[selector].grp.pins;
+       *num_pins       = vg->soc->groups[selector].grp.npins;
 
        return 0;
 }
@@ -662,15 +662,15 @@ static void byt_set_group_simple_mux(struct intel_pinctrl *vg,
 
        raw_spin_lock_irqsave(&byt_lock, flags);
 
-       for (i = 0; i < group.npins; i++) {
+       for (i = 0; i < group.grp.npins; i++) {
                void __iomem *padcfg0;
                u32 value;
 
-               padcfg0 = byt_gpio_reg(vg, group.pins[i], BYT_CONF0_REG);
+               padcfg0 = byt_gpio_reg(vg, group.grp.pins[i], BYT_CONF0_REG);
                if (!padcfg0) {
                        dev_warn(vg->dev,
                                 "Group %s, pin %i not muxed (no padcfg0)\n",
-                                group.name, i);
+                                group.grp.name, i);
                        continue;
                }
 
@@ -692,15 +692,15 @@ static void byt_set_group_mixed_mux(struct intel_pinctrl *vg,
 
        raw_spin_lock_irqsave(&byt_lock, flags);
 
-       for (i = 0; i < group.npins; i++) {
+       for (i = 0; i < group.grp.npins; i++) {
                void __iomem *padcfg0;
                u32 value;
 
-               padcfg0 = byt_gpio_reg(vg, group.pins[i], BYT_CONF0_REG);
+               padcfg0 = byt_gpio_reg(vg, group.grp.pins[i], BYT_CONF0_REG);
                if (!padcfg0) {
                        dev_warn(vg->dev,
                                 "Group %s, pin %i not muxed (no padcfg0)\n",
-                                group.name, i);
+                                group.grp.name, i);
                        continue;
                }
 
index 26b2a425d201d2a977d086e6d1cb75c3983c9dc5..5c4fd16e5b010df54098207c9c023fab2e8c3040 100644 (file)
@@ -627,7 +627,7 @@ static const char *chv_get_group_name(struct pinctrl_dev *pctldev,
 {
        struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
 
-       return pctrl->soc->groups[group].name;
+       return pctrl->soc->groups[group].grp.name;
 }
 
 static int chv_get_group_pins(struct pinctrl_dev *pctldev, unsigned int group,
@@ -635,8 +635,8 @@ static int chv_get_group_pins(struct pinctrl_dev *pctldev, unsigned int group,
 {
        struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
 
-       *pins = pctrl->soc->groups[group].pins;
-       *npins = pctrl->soc->groups[group].npins;
+       *pins = pctrl->soc->groups[group].grp.pins;
+       *npins = pctrl->soc->groups[group].grp.npins;
        return 0;
 }
 
@@ -721,16 +721,16 @@ static int chv_pinmux_set_mux(struct pinctrl_dev *pctldev,
        raw_spin_lock_irqsave(&chv_lock, flags);
 
        /* Check first that the pad is not locked */
-       for (i = 0; i < grp->npins; i++) {
-               if (chv_pad_locked(pctrl, grp->pins[i])) {
+       for (i = 0; i < grp->grp.npins; i++) {
+               if (chv_pad_locked(pctrl, grp->grp.pins[i])) {
                        raw_spin_unlock_irqrestore(&chv_lock, flags);
-                       dev_warn(dev, "unable to set mode for locked pin %u\n", grp->pins[i]);
+                       dev_warn(dev, "unable to set mode for locked pin %u\n", grp->grp.pins[i]);
                        return -EBUSY;
                }
        }
 
-       for (i = 0; i < grp->npins; i++) {
-               int pin = grp->pins[i];
+       for (i = 0; i < grp->grp.npins; i++) {
+               int pin = grp->grp.pins[i];
                unsigned int mode;
                bool invert_oe;
                u32 value;
index fd093e36c3a882b9fab2735472386d5d5efdd980..52ecd66ce357fceaabbd4e5980c6e9c36994af81 100644 (file)
@@ -279,7 +279,7 @@ static const char *intel_get_group_name(struct pinctrl_dev *pctldev,
 {
        struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
 
-       return pctrl->soc->groups[group].name;
+       return pctrl->soc->groups[group].grp.name;
 }
 
 static int intel_get_group_pins(struct pinctrl_dev *pctldev, unsigned int group,
@@ -287,8 +287,8 @@ static int intel_get_group_pins(struct pinctrl_dev *pctldev, unsigned int group,
 {
        struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
 
-       *pins = pctrl->soc->groups[group].pins;
-       *npins = pctrl->soc->groups[group].npins;
+       *pins = pctrl->soc->groups[group].grp.pins;
+       *npins = pctrl->soc->groups[group].grp.npins;
        return 0;
 }
 
@@ -391,19 +391,19 @@ static int intel_pinmux_set_mux(struct pinctrl_dev *pctldev,
         * All pins in the groups needs to be accessible and writable
         * before we can enable the mux for this group.
         */
-       for (i = 0; i < grp->npins; i++) {
-               if (!intel_pad_usable(pctrl, grp->pins[i])) {
+       for (i = 0; i < grp->grp.npins; i++) {
+               if (!intel_pad_usable(pctrl, grp->grp.pins[i])) {
                        raw_spin_unlock_irqrestore(&pctrl->lock, flags);
                        return -EBUSY;
                }
        }
 
        /* Now enable the mux setting for each pin in the group */
-       for (i = 0; i < grp->npins; i++) {
+       for (i = 0; i < grp->grp.npins; i++) {
                void __iomem *padcfg0;
                u32 value;
 
-               padcfg0 = intel_get_padcfg(pctrl, grp->pins[i], PADCFG0);
+               padcfg0 = intel_get_padcfg(pctrl, grp->grp.pins[i], PADCFG0);
                value = readl(padcfg0);
 
                value &= ~PADCFG0_PMODE_MASK;
index 710341bb67ccc484bf8e265636c612d70434095e..65628423bf6399bfb851acb61bffdfedd69df00f 100644 (file)
@@ -24,17 +24,12 @@ struct device;
 
 /**
  * struct intel_pingroup - Description about group of pins
- * @name: Name of the groups
- * @pins: All pins in this group
- * @npins: Number of pins in this groups
- * @mode: Native mode in which the group is muxed out @pins. Used if @modes
- *        is %NULL.
+ * @grp: Generic data of the pin group (name and pins)
+ * @mode: Native mode in which the group is muxed out @pins. Used if @modes is %NULL.
  * @modes: If not %NULL this will hold mode for each pin in @pins
  */
 struct intel_pingroup {
-       const char *name;
-       const unsigned int *pins;
-       size_t npins;
+       struct pingroup grp;
        unsigned short mode;
        const unsigned int *modes;
 };
@@ -156,15 +151,11 @@ struct intel_community {
  *     a single integer or an array of integers in which case mode is per
  *     pin.
  */
-#define PIN_GROUP(n, p, m)                                     \
-       {                                                       \
-               .name = (n),                                    \
-               .pins = (p),                                    \
-               .npins = ARRAY_SIZE((p)),                       \
-               .mode = __builtin_choose_expr(                  \
-                       __builtin_constant_p((m)), (m), 0),     \
-               .modes = __builtin_choose_expr(                 \
-                       __builtin_constant_p((m)), NULL, (m)),  \
+#define PIN_GROUP(n, p, m)                                                             \
+       {                                                                               \
+               .grp = PINCTRL_PINGROUP((n), (p), ARRAY_SIZE((p))),                     \
+               .mode = __builtin_choose_expr(__builtin_constant_p((m)), (m), 0),       \
+               .modes = __builtin_choose_expr(__builtin_constant_p((m)), NULL, (m)),   \
        }
 
 #define FUNCTION(n, g)                         \
index 4fb39eb30902cbe1baad3c75bec0afaac9ffa403..5d1abee30f8f1577a053cd5fe328d227189733ae 100644 (file)
@@ -282,7 +282,7 @@ static const char *lp_get_group_name(struct pinctrl_dev *pctldev,
 {
        struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev);
 
-       return lg->soc->groups[selector].name;
+       return lg->soc->groups[selector].grp.name;
 }
 
 static int lp_get_group_pins(struct pinctrl_dev *pctldev,
@@ -292,8 +292,8 @@ static int lp_get_group_pins(struct pinctrl_dev *pctldev,
 {
        struct intel_pinctrl *lg = pinctrl_dev_get_drvdata(pctldev);
 
-       *pins           = lg->soc->groups[selector].pins;
-       *num_pins       = lg->soc->groups[selector].npins;
+       *pins           = lg->soc->groups[selector].grp.pins;
+       *num_pins       = lg->soc->groups[selector].grp.npins;
 
        return 0;
 }
@@ -366,8 +366,8 @@ static int lp_pinmux_set_mux(struct pinctrl_dev *pctldev,
        raw_spin_lock_irqsave(&lg->lock, flags);
 
        /* Now enable the mux setting for each pin in the group */
-       for (i = 0; i < grp->npins; i++) {
-               void __iomem *reg = lp_gpio_reg(&lg->chip, grp->pins[i], LP_CONFIG1);
+       for (i = 0; i < grp->grp.npins; i++) {
+               void __iomem *reg = lp_gpio_reg(&lg->chip, grp->grp.pins[i], LP_CONFIG1);
                u32 value;
 
                value = ioread32(reg);
index 3ae141e0b42155200322af360db5db3a9c0700d2..5e752818adb4d480dd7e8aee1044cf1ae0bb432e 100644 (file)
@@ -520,7 +520,7 @@ static const char *mrfld_get_group_name(struct pinctrl_dev *pctldev,
 {
        struct mrfld_pinctrl *mp = pinctrl_dev_get_drvdata(pctldev);
 
-       return mp->groups[group].name;
+       return mp->groups[group].grp.name;
 }
 
 static int mrfld_get_group_pins(struct pinctrl_dev *pctldev, unsigned int group,
@@ -528,8 +528,8 @@ static int mrfld_get_group_pins(struct pinctrl_dev *pctldev, unsigned int group,
 {
        struct mrfld_pinctrl *mp = pinctrl_dev_get_drvdata(pctldev);
 
-       *pins = mp->groups[group].pins;
-       *npins = mp->groups[group].npins;
+       *pins = mp->groups[group].grp.pins;
+       *npins = mp->groups[group].grp.npins;
        return 0;
 }
 
@@ -604,15 +604,15 @@ static int mrfld_pinmux_set_mux(struct pinctrl_dev *pctldev,
         * All pins in the groups needs to be accessible and writable
         * before we can enable the mux for this group.
         */
-       for (i = 0; i < grp->npins; i++) {
-               if (!mrfld_buf_available(mp, grp->pins[i]))
+       for (i = 0; i < grp->grp.npins; i++) {
+               if (!mrfld_buf_available(mp, grp->grp.pins[i]))
                        return -EBUSY;
        }
 
        /* Now enable the mux setting for each pin in the group */
        raw_spin_lock_irqsave(&mp->lock, flags);
-       for (i = 0; i < grp->npins; i++)
-               mrfld_update_bufcfg(mp, grp->pins[i], bits, mask);
+       for (i = 0; i < grp->grp.npins; i++)
+               mrfld_update_bufcfg(mp, grp->grp.pins[i], bits, mask);
        raw_spin_unlock_irqrestore(&mp->lock, flags);
 
        return 0;
diff --git a/drivers/pinctrl/intel/pinctrl-meteorlake.c b/drivers/pinctrl/intel/pinctrl-meteorlake.c
new file mode 100644 (file)
index 0000000..9576dcd
--- /dev/null
@@ -0,0 +1,417 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Intel Meteor Lake PCH pinctrl/GPIO driver
+ *
+ * Copyright (C) 2022, Intel Corporation
+ * Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+ */
+
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#include <linux/pinctrl/pinctrl.h>
+
+#include "pinctrl-intel.h"
+
+#define MTL_PAD_OWN    0x0b0
+#define MTL_PADCFGLOCK 0x110
+#define MTL_HOSTSW_OWN 0x140
+#define MTL_GPI_IS     0x200
+#define MTL_GPI_IE     0x210
+
+#define MTL_GPP(r, s, e, g)                            \
+       {                                               \
+               .reg_num = (r),                         \
+               .base = (s),                            \
+               .size = ((e) - (s) + 1),                \
+               .gpio_base = (g),                       \
+       }
+
+#define MTL_COMMUNITY(b, s, e, g)                      \
+       {                                               \
+               .barno = (b),                           \
+               .padown_offset = MTL_PAD_OWN,           \
+               .padcfglock_offset = MTL_PADCFGLOCK,    \
+               .hostown_offset = MTL_HOSTSW_OWN,       \
+               .is_offset = MTL_GPI_IS,                \
+               .ie_offset = MTL_GPI_IE,                \
+               .pin_base = (s),                        \
+               .npins = ((e) - (s) + 1),               \
+               .gpps = (g),                            \
+               .ngpps = ARRAY_SIZE(g),                 \
+       }
+
+/* Meteor Lake-P */
+static const struct pinctrl_pin_desc mtlp_pins[] = {
+       /* CPU */
+       PINCTRL_PIN(0, "PECI"),
+       PINCTRL_PIN(1, "UFS_RESET_B"),
+       PINCTRL_PIN(2, "VIDSOUT"),
+       PINCTRL_PIN(3, "VIDSCK"),
+       PINCTRL_PIN(4, "VIDALERT_B"),
+       /* GPP_V */
+       PINCTRL_PIN(5, "BATLOW_B"),
+       PINCTRL_PIN(6, "AC_PRESENT"),
+       PINCTRL_PIN(7, "SOC_WAKE_B"),
+       PINCTRL_PIN(8, "PWRBTN_B"),
+       PINCTRL_PIN(9, "SLP_S3_B"),
+       PINCTRL_PIN(10, "SLP_S4_B"),
+       PINCTRL_PIN(11, "SLP_A_B"),
+       PINCTRL_PIN(12, "GPP_V_7"),
+       PINCTRL_PIN(13, "SUSCLK"),
+       PINCTRL_PIN(14, "SLP_WLAN_B"),
+       PINCTRL_PIN(15, "SLP_S5_B"),
+       PINCTRL_PIN(16, "LANPHYPC"),
+       PINCTRL_PIN(17, "SLP_LAN_B"),
+       PINCTRL_PIN(18, "GPP_V_13"),
+       PINCTRL_PIN(19, "WAKE_B"),
+       PINCTRL_PIN(20, "GPP_V_15"),
+       PINCTRL_PIN(21, "GPP_V_16"),
+       PINCTRL_PIN(22, "GPP_V_17"),
+       PINCTRL_PIN(23, "GPP_V_18"),
+       PINCTRL_PIN(24, "CATERR_B"),
+       PINCTRL_PIN(25, "PROCHOT_B"),
+       PINCTRL_PIN(26, "THERMTRIP_B"),
+       PINCTRL_PIN(27, "DSI_DE_TE_2_GENLOCK_REF"),
+       PINCTRL_PIN(28, "DSI_DE_TE_1_DISP_UTILS"),
+       /* GPP_C */
+       PINCTRL_PIN(29, "SMBCLK"),
+       PINCTRL_PIN(30, "SMBDATA"),
+       PINCTRL_PIN(31, "SMBALERT_B"),
+       PINCTRL_PIN(32, "SML0CLK"),
+       PINCTRL_PIN(33, "SML0DATA"),
+       PINCTRL_PIN(34, "GPP_C_5"),
+       PINCTRL_PIN(35, "GPP_C_6"),
+       PINCTRL_PIN(36, "GPP_C_7"),
+       PINCTRL_PIN(37, "GPP_C_8"),
+       PINCTRL_PIN(38, "GPP_C_9"),
+       PINCTRL_PIN(39, "GPP_C_10"),
+       PINCTRL_PIN(40, "GPP_C_11"),
+       PINCTRL_PIN(41, "GPP_C_12"),
+       PINCTRL_PIN(42, "GPP_C_13"),
+       PINCTRL_PIN(43, "GPP_C_14"),
+       PINCTRL_PIN(44, "GPP_C_15"),
+       PINCTRL_PIN(45, "GPP_C_16"),
+       PINCTRL_PIN(46, "GPP_C_17"),
+       PINCTRL_PIN(47, "GPP_C_18"),
+       PINCTRL_PIN(48, "GPP_C_19"),
+       PINCTRL_PIN(49, "GPP_C_20"),
+       PINCTRL_PIN(50, "GPP_C_21"),
+       PINCTRL_PIN(51, "GPP_C_22"),
+       PINCTRL_PIN(52, "GPP_C_23"),
+       /* GPP_A */
+       PINCTRL_PIN(53, "ESPI_IO_0"),
+       PINCTRL_PIN(54, "ESPI_IO_1"),
+       PINCTRL_PIN(55, "ESPI_IO_2"),
+       PINCTRL_PIN(56, "ESPI_IO_3"),
+       PINCTRL_PIN(57, "ESPI_CS0_B"),
+       PINCTRL_PIN(58, "ESPI_CLK"),
+       PINCTRL_PIN(59, "ESPI_RESET_B"),
+       PINCTRL_PIN(60, "GPP_A_7"),
+       PINCTRL_PIN(61, "GPP_A_8"),
+       PINCTRL_PIN(62, "GPP_A_9"),
+       PINCTRL_PIN(63, "GPP_A_10"),
+       PINCTRL_PIN(64, "GPP_A_11"),
+       PINCTRL_PIN(65, "GPP_A_12"),
+       PINCTRL_PIN(66, "ESPI_CS1_B"),
+       PINCTRL_PIN(67, "ESPI_CS2_B"),
+       PINCTRL_PIN(68, "ESPI_CS3_B"),
+       PINCTRL_PIN(69, "ESPI_ALERT0_B"),
+       PINCTRL_PIN(70, "ESPI_ALERT1_B"),
+       PINCTRL_PIN(71, "ESPI_ALERT2_B"),
+       PINCTRL_PIN(72, "ESPI_ALERT3_B"),
+       PINCTRL_PIN(73, "GPP_A_20"),
+       PINCTRL_PIN(74, "GPP_A_21"),
+       PINCTRL_PIN(75, "GPP_A_22"),
+       PINCTRL_PIN(76, "GPP_A_23"),
+       PINCTRL_PIN(77, "ESPI_CLK_LOOPBK"),
+       /* GPP_E */
+       PINCTRL_PIN(78, "GPP_E_0"),
+       PINCTRL_PIN(79, "GPP_E_1"),
+       PINCTRL_PIN(80, "GPP_E_2"),
+       PINCTRL_PIN(81, "GPP_E_3"),
+       PINCTRL_PIN(82, "GPP_E_4"),
+       PINCTRL_PIN(83, "GPP_E_5"),
+       PINCTRL_PIN(84, "GPP_E_6"),
+       PINCTRL_PIN(85, "GPP_E_7"),
+       PINCTRL_PIN(86, "GPP_E_8"),
+       PINCTRL_PIN(87, "GPP_E_9"),
+       PINCTRL_PIN(88, "GPP_E_10"),
+       PINCTRL_PIN(89, "GPP_E_11"),
+       PINCTRL_PIN(90, "GPP_E_12"),
+       PINCTRL_PIN(91, "GPP_E_13"),
+       PINCTRL_PIN(92, "GPP_E_14"),
+       PINCTRL_PIN(93, "SLP_DRAM_B"),
+       PINCTRL_PIN(94, "GPP_E_16"),
+       PINCTRL_PIN(95, "GPP_E_17"),
+       PINCTRL_PIN(96, "GPP_E_18"),
+       PINCTRL_PIN(97, "GPP_E_19"),
+       PINCTRL_PIN(98, "GPP_E_20"),
+       PINCTRL_PIN(99, "GPP_E_21"),
+       PINCTRL_PIN(100, "DNX_FORCE_RELOAD"),
+       PINCTRL_PIN(101, "GPP_E_23"),
+       PINCTRL_PIN(102, "THC0_GSPI0_CLK_LOOPBK"),
+       /* GPP_H */
+       PINCTRL_PIN(103, "GPP_H_0"),
+       PINCTRL_PIN(104, "GPP_H_1"),
+       PINCTRL_PIN(105, "GPP_H_2"),
+       PINCTRL_PIN(106, "GPP_H_3"),
+       PINCTRL_PIN(107, "GPP_H_4"),
+       PINCTRL_PIN(108, "GPP_H_5"),
+       PINCTRL_PIN(109, "GPP_H_6"),
+       PINCTRL_PIN(110, "GPP_H_7"),
+       PINCTRL_PIN(111, "GPP_H_8"),
+       PINCTRL_PIN(112, "GPP_H_9"),
+       PINCTRL_PIN(113, "GPP_H_10"),
+       PINCTRL_PIN(114, "GPP_H_11"),
+       PINCTRL_PIN(115, "GPP_H_12"),
+       PINCTRL_PIN(116, "CPU_C10_GATE_B"),
+       PINCTRL_PIN(117, "GPP_H_14"),
+       PINCTRL_PIN(118, "GPP_H_15"),
+       PINCTRL_PIN(119, "GPP_H_16"),
+       PINCTRL_PIN(120, "GPP_H_17"),
+       PINCTRL_PIN(121, "GPP_H_18"),
+       PINCTRL_PIN(122, "GPP_H_19"),
+       PINCTRL_PIN(123, "GPP_H_20"),
+       PINCTRL_PIN(124, "GPP_H_21"),
+       PINCTRL_PIN(125, "GPP_H_22"),
+       PINCTRL_PIN(126, "GPP_H_23"),
+       PINCTRL_PIN(127, "LPI3C1_CLK_LOOPBK"),
+       PINCTRL_PIN(128, "I3C0_CLK_LOOPBK"),
+       /* GPP_F */
+       PINCTRL_PIN(129, "CNV_BRI_DT"),
+       PINCTRL_PIN(130, "CNV_BRI_RSP"),
+       PINCTRL_PIN(131, "CNV_RGI_DT"),
+       PINCTRL_PIN(132, "CNV_RGI_RSP"),
+       PINCTRL_PIN(133, "CNV_RF_RESET_B"),
+       PINCTRL_PIN(134, "CRF_CLKREQ"),
+       PINCTRL_PIN(135, "GPP_F_6"),
+       PINCTRL_PIN(136, "FUSA_DIAGTEST_EN"),
+       PINCTRL_PIN(137, "FUSA_DIAGTEST_MODE"),
+       PINCTRL_PIN(138, "BOOTMPC"),
+       PINCTRL_PIN(139, "GPP_F_10"),
+       PINCTRL_PIN(140, "GPP_F_11"),
+       PINCTRL_PIN(141, "GSXDOUT"),
+       PINCTRL_PIN(142, "GSXSLOAD"),
+       PINCTRL_PIN(143, "GSXDIN"),
+       PINCTRL_PIN(144, "GSXSRESETB"),
+       PINCTRL_PIN(145, "GSXCLK"),
+       PINCTRL_PIN(146, "GMII_MDC_0"),
+       PINCTRL_PIN(147, "GMII_MDIO_0"),
+       PINCTRL_PIN(148, "GPP_F_19"),
+       PINCTRL_PIN(149, "GPP_F_20"),
+       PINCTRL_PIN(150, "GPP_F_21"),
+       PINCTRL_PIN(151, "GPP_F_22"),
+       PINCTRL_PIN(152, "GPP_F_23"),
+       PINCTRL_PIN(153, "THC1_GSPI1_CLK_LOOPBK"),
+       PINCTRL_PIN(154, "GSPI0A_CLK_LOOPBK"),
+       /* SPI0 */
+       PINCTRL_PIN(155, "SPI0_IO_2"),
+       PINCTRL_PIN(156, "SPI0_IO_3"),
+       PINCTRL_PIN(157, "SPI0_MOSI_IO_0"),
+       PINCTRL_PIN(158, "SPI0_MISO_IO_1"),
+       PINCTRL_PIN(159, "SPI0_TPM_CS_B"),
+       PINCTRL_PIN(160, "SPI0_FLASH_0_CS_B"),
+       PINCTRL_PIN(161, "SPI0_FLASH_1_CS_B"),
+       PINCTRL_PIN(162, "SPI0_CLK"),
+       PINCTRL_PIN(163, "L_BKLTEN"),
+       PINCTRL_PIN(164, "L_BKLTCTL"),
+       PINCTRL_PIN(165, "L_VDDEN"),
+       PINCTRL_PIN(166, "SYS_PWROK"),
+       PINCTRL_PIN(167, "SYS_RESET_B"),
+       PINCTRL_PIN(168, "MLK_RST_B"),
+       PINCTRL_PIN(169, "SPI0_CLK_LOOPBK"),
+       /* vGPIO_3 */
+       PINCTRL_PIN(170, "ESPI_USB_OCB_0"),
+       PINCTRL_PIN(171, "ESPI_USB_OCB_1"),
+       PINCTRL_PIN(172, "ESPI_USB_OCB_2"),
+       PINCTRL_PIN(173, "ESPI_USB_OCB_3"),
+       PINCTRL_PIN(174, "USB_CPU_OCB_0"),
+       PINCTRL_PIN(175, "USB_CPU_OCB_1"),
+       PINCTRL_PIN(176, "USB_CPU_OCB_2"),
+       PINCTRL_PIN(177, "USB_CPU_OCB_3"),
+       PINCTRL_PIN(178, "TS0_IN_INT"),
+       PINCTRL_PIN(179, "TS1_IN_INT"),
+       PINCTRL_PIN(180, "THC0_WOT_INT"),
+       PINCTRL_PIN(181, "THC1_WOT_INT"),
+       PINCTRL_PIN(182, "THC0_WHC_INT"),
+       PINCTRL_PIN(183, "THC1_WHC_INT"),
+       /* GPP_S */
+       PINCTRL_PIN(184, "GPP_S_0"),
+       PINCTRL_PIN(185, "GPP_S_1"),
+       PINCTRL_PIN(186, "GPP_S_2"),
+       PINCTRL_PIN(187, "GPP_S_3"),
+       PINCTRL_PIN(188, "GPP_S_4"),
+       PINCTRL_PIN(189, "GPP_S_5"),
+       PINCTRL_PIN(190, "GPP_S_6"),
+       PINCTRL_PIN(191, "GPP_S_7"),
+       /* JTAG */
+       PINCTRL_PIN(192, "JTAG_MBPB0"),
+       PINCTRL_PIN(193, "JTAG_MBPB1"),
+       PINCTRL_PIN(194, "JTAG_MBPB2"),
+       PINCTRL_PIN(195, "JTAG_MBPB3"),
+       PINCTRL_PIN(196, "JTAG_TDO"),
+       PINCTRL_PIN(197, "PRDY_B"),
+       PINCTRL_PIN(198, "PREQ_B"),
+       PINCTRL_PIN(199, "JTAG_TDI"),
+       PINCTRL_PIN(200, "JTAG_TMS"),
+       PINCTRL_PIN(201, "JTAG_TCK"),
+       PINCTRL_PIN(202, "DBG_PMODE"),
+       PINCTRL_PIN(203, "JTAG_TRST_B"),
+       /* GPP_B */
+       PINCTRL_PIN(204, "ADM_VID_0"),
+       PINCTRL_PIN(205, "ADM_VID_1"),
+       PINCTRL_PIN(206, "GPP_B_2"),
+       PINCTRL_PIN(207, "GPP_B_3"),
+       PINCTRL_PIN(208, "GPP_B_4"),
+       PINCTRL_PIN(209, "GPP_B_5"),
+       PINCTRL_PIN(210, "GPP_B_6"),
+       PINCTRL_PIN(211, "GPP_B_7"),
+       PINCTRL_PIN(212, "GPP_B_8"),
+       PINCTRL_PIN(213, "GPP_B_9"),
+       PINCTRL_PIN(214, "GPP_B_10"),
+       PINCTRL_PIN(215, "GPP_B_11"),
+       PINCTRL_PIN(216, "SLP_S0_B"),
+       PINCTRL_PIN(217, "PLTRST_B"),
+       PINCTRL_PIN(218, "GPP_B_14"),
+       PINCTRL_PIN(219, "GPP_B_15"),
+       PINCTRL_PIN(220, "GPP_B_16"),
+       PINCTRL_PIN(221, "GPP_B_17"),
+       PINCTRL_PIN(222, "GPP_B_18"),
+       PINCTRL_PIN(223, "GPP_B_19"),
+       PINCTRL_PIN(224, "GPP_B_20"),
+       PINCTRL_PIN(225, "GPP_B_21"),
+       PINCTRL_PIN(226, "GPP_B_22"),
+       PINCTRL_PIN(227, "GPP_B_23"),
+       PINCTRL_PIN(228, "ISH_I3C0_CLK_LOOPBK"),
+       /* GPP_D */
+       PINCTRL_PIN(229, "GPP_D_0"),
+       PINCTRL_PIN(230, "GPP_D_1"),
+       PINCTRL_PIN(231, "GPP_D_2"),
+       PINCTRL_PIN(232, "GPP_D_3"),
+       PINCTRL_PIN(233, "GPP_D_4"),
+       PINCTRL_PIN(234, "GPP_D_5"),
+       PINCTRL_PIN(235, "GPP_D_6"),
+       PINCTRL_PIN(236, "GPP_D_7"),
+       PINCTRL_PIN(237, "GPP_D_8"),
+       PINCTRL_PIN(238, "GPP_D_9"),
+       PINCTRL_PIN(239, "HDA_BCLK"),
+       PINCTRL_PIN(240, "HDA_SYNC"),
+       PINCTRL_PIN(241, "HDA_SDO"),
+       PINCTRL_PIN(242, "HDA_SDI_0"),
+       PINCTRL_PIN(243, "GPP_D_14"),
+       PINCTRL_PIN(244, "GPP_D_15"),
+       PINCTRL_PIN(245, "GPP_D_16"),
+       PINCTRL_PIN(246, "HDA_RST_B"),
+       PINCTRL_PIN(247, "GPP_D_18"),
+       PINCTRL_PIN(248, "GPP_D_19"),
+       PINCTRL_PIN(249, "GPP_D_20"),
+       PINCTRL_PIN(250, "UFS_REFCLK"),
+       PINCTRL_PIN(251, "BPKI3C_SDA"),
+       PINCTRL_PIN(252, "BPKI3C_SCL"),
+       PINCTRL_PIN(253, "BOOTHALT_B"),
+       /* vGPIO */
+       PINCTRL_PIN(254, "CNV_BTEN"),
+       PINCTRL_PIN(255, "CNV_BT_HOST_WAKEB"),
+       PINCTRL_PIN(256, "CNV_BT_IF_SELECT"),
+       PINCTRL_PIN(257, "vCNV_BT_UART_TXD"),
+       PINCTRL_PIN(258, "vCNV_BT_UART_RXD"),
+       PINCTRL_PIN(259, "vCNV_BT_UART_CTS_B"),
+       PINCTRL_PIN(260, "vCNV_BT_UART_RTS_B"),
+       PINCTRL_PIN(261, "vCNV_MFUART1_TXD"),
+       PINCTRL_PIN(262, "vCNV_MFUART1_RXD"),
+       PINCTRL_PIN(263, "vCNV_MFUART1_CTS_B"),
+       PINCTRL_PIN(264, "vCNV_MFUART1_RTS_B"),
+       PINCTRL_PIN(265, "vUART0_TXD"),
+       PINCTRL_PIN(266, "vUART0_RXD"),
+       PINCTRL_PIN(267, "vUART0_CTS_B"),
+       PINCTRL_PIN(268, "vUART0_RTS_B"),
+       PINCTRL_PIN(269, "vISH_UART0_TXD"),
+       PINCTRL_PIN(270, "vISH_UART0_RXD"),
+       PINCTRL_PIN(271, "vISH_UART0_CTS_B"),
+       PINCTRL_PIN(272, "vISH_UART0_RTS_B"),
+       PINCTRL_PIN(273, "vCNV_BT_I2S_BCLK"),
+       PINCTRL_PIN(274, "vCNV_BT_I2S_WS_SYNC"),
+       PINCTRL_PIN(275, "vCNV_BT_I2S_SDO"),
+       PINCTRL_PIN(276, "vCNV_BT_I2S_SDI"),
+       PINCTRL_PIN(277, "vI2S2_SCLK"),
+       PINCTRL_PIN(278, "vI2S2_SFRM"),
+       PINCTRL_PIN(279, "vI2S2_TXD"),
+       PINCTRL_PIN(280, "vI2S2_RXD"),
+       PINCTRL_PIN(281, "vCNV_BT_I2S_BCLK_2"),
+       PINCTRL_PIN(282, "vCNV_BT_I2S_WS_SYNC_2"),
+       PINCTRL_PIN(283, "vCNV_BT_I2S_SDO_2"),
+       PINCTRL_PIN(284, "vCNV_BT_I2S_SDI_2"),
+       PINCTRL_PIN(285, "vI2S2_SCLK_2"),
+       PINCTRL_PIN(286, "vI2S2_SFRM_2"),
+       PINCTRL_PIN(287, "vI2S2_TXD_2"),
+       PINCTRL_PIN(288, "vI2S2_RXD_2"),
+};
+
+static const struct intel_padgroup mtlp_community0_gpps[] = {
+       MTL_GPP(0, 0, 4, 0),            /* CPU */
+       MTL_GPP(1, 5, 28, 32),          /* GPP_V */
+       MTL_GPP(2, 29, 52, 64),         /* GPP_C */
+};
+
+static const struct intel_padgroup mtlp_community1_gpps[] = {
+       MTL_GPP(0, 53, 77, 96),         /* GPP_A */
+       MTL_GPP(1, 78, 102, 128),       /* GPP_E */
+};
+
+static const struct intel_padgroup mtlp_community3_gpps[] = {
+       MTL_GPP(0, 103, 128, 160),      /* GPP_H */
+       MTL_GPP(1, 129, 154, 192),      /* GPP_F */
+       MTL_GPP(2, 155, 169, 224),      /* SPI0 */
+       MTL_GPP(3, 170, 183, 256),      /* vGPIO_3 */
+};
+
+static const struct intel_padgroup mtlp_community4_gpps[] = {
+       MTL_GPP(0, 184, 191, 288),      /* GPP_S */
+       MTL_GPP(1, 192, 203, 320),      /* JTAG */
+};
+
+static const struct intel_padgroup mtlp_community5_gpps[] = {
+       MTL_GPP(0, 204, 228, 352),      /* GPP_B */
+       MTL_GPP(1, 229, 253, 384),      /* GPP_D */
+       MTL_GPP(2, 254, 285, 416),      /* vGPIO_0 */
+       MTL_GPP(3, 286, 288, 448),      /* vGPIO_1 */
+};
+
+static const struct intel_community mtlp_communities[] = {
+       MTL_COMMUNITY(0, 0, 52, mtlp_community0_gpps),
+       MTL_COMMUNITY(1, 53, 102, mtlp_community1_gpps),
+       MTL_COMMUNITY(2, 103, 183, mtlp_community3_gpps),
+       MTL_COMMUNITY(3, 184, 203, mtlp_community4_gpps),
+       MTL_COMMUNITY(4, 204, 288, mtlp_community5_gpps),
+};
+
+static const struct intel_pinctrl_soc_data mtlp_soc_data = {
+       .pins = mtlp_pins,
+       .npins = ARRAY_SIZE(mtlp_pins),
+       .communities = mtlp_communities,
+       .ncommunities = ARRAY_SIZE(mtlp_communities),
+};
+
+static const struct acpi_device_id mtl_pinctrl_acpi_match[] = {
+       { "INTC1083", (kernel_ulong_t)&mtlp_soc_data },
+       { }
+};
+MODULE_DEVICE_TABLE(acpi, mtl_pinctrl_acpi_match);
+
+static INTEL_PINCTRL_PM_OPS(mtl_pinctrl_pm_ops);
+
+static struct platform_driver mtl_pinctrl_driver = {
+       .probe = intel_pinctrl_probe_by_hid,
+       .driver = {
+               .name = "meteorlake-pinctrl",
+               .acpi_match_table = mtl_pinctrl_acpi_match,
+               .pm = &mtl_pinctrl_pm_ops,
+       },
+};
+module_platform_driver(mtl_pinctrl_driver);
+
+MODULE_AUTHOR("Andy Shevchenko <andriy.shevchenko@linux.intel.com>");
+MODULE_DESCRIPTION("Intel Meteor Lake PCH pinctrl/GPIO driver");
+MODULE_LICENSE("GPL v2");
index acccde9262baeba34d5abfe1d0c1cc70f88c57c1..78c02b7c81f064239594c9eb7e7e43d8d47d0bdb 100644 (file)
@@ -1107,24 +1107,10 @@ static const struct mtk_pin_field_calc mt8192_pin_pupd_range[] = {
        PIN_FIELD_BASE(54, 54, 1, 0x0060, 0x10, 2, 1),
        PIN_FIELD_BASE(55, 55, 1, 0x0060, 0x10, 4, 1),
        PIN_FIELD_BASE(56, 56, 1, 0x0060, 0x10, 3, 1),
-       PIN_FIELD_BASE(118, 118, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(119, 119, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(120, 120, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(121, 121, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(122, 122, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(123, 123, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(124, 124, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(125, 125, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(139, 139, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(140, 140, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(141, 141, 4, 0x00e0, 0x10, 31, 1),
-       PIN_FIELD_BASE(142, 142, 4, 0x00e0, 0x10, 31, 1),
        PIN_FIELD_BASE(152, 152, 7, 0x0090, 0x10, 3, 1),
        PIN_FIELD_BASE(153, 153, 7, 0x0090, 0x10, 2, 1),
        PIN_FIELD_BASE(154, 154, 7, 0x0090, 0x10, 0, 1),
        PIN_FIELD_BASE(155, 155, 7, 0x0090, 0x10, 1, 1),
-       PIN_FIELD_BASE(160, 160, 7, 0x00f0, 0x10, 31, 1),
-       PIN_FIELD_BASE(161, 161, 7, 0x00f0, 0x10, 31, 1),
        PIN_FIELD_BASE(183, 183, 9, 0x0030, 0x10, 1, 1),
        PIN_FIELD_BASE(184, 184, 9, 0x0030, 0x10, 2, 1),
        PIN_FIELD_BASE(185, 185, 9, 0x0030, 0x10, 4, 1),
@@ -1137,12 +1123,6 @@ static const struct mtk_pin_field_calc mt8192_pin_pupd_range[] = {
        PIN_FIELD_BASE(192, 192, 9, 0x0030, 0x10, 0, 1),
        PIN_FIELD_BASE(193, 193, 9, 0x0030, 0x10, 5, 1),
        PIN_FIELD_BASE(194, 194, 9, 0x0030, 0x10, 11, 1),
-       PIN_FIELD_BASE(200, 200, 8, 0x0070, 0x10, 31, 1),
-       PIN_FIELD_BASE(201, 201, 8, 0x0070, 0x10, 31, 1),
-       PIN_FIELD_BASE(202, 202, 5, 0x0070, 0x10, 31, 1),
-       PIN_FIELD_BASE(203, 203, 5, 0x0070, 0x10, 31, 1),
-       PIN_FIELD_BASE(204, 204, 8, 0x0070, 0x10, 31, 1),
-       PIN_FIELD_BASE(205, 205, 8, 0x0070, 0x10, 31, 1),
 };
 
 static const struct mtk_pin_field_calc mt8192_pin_r0_range[] = {
@@ -1164,24 +1144,10 @@ static const struct mtk_pin_field_calc mt8192_pin_r0_range[] = {
        PIN_FIELD_BASE(54, 54, 1, 0x0080, 0x10, 2, 1),
        PIN_FIELD_BASE(55, 55, 1, 0x0080, 0x10, 4, 1),
        PIN_FIELD_BASE(56, 56, 1, 0x0080, 0x10, 3, 1),
-       PIN_FIELD_BASE(118, 118, 4, 0x00e0, 0x10, 0, 1),
-       PIN_FIELD_BASE(119, 119, 4, 0x00e0, 0x10, 12, 1),
-       PIN_FIELD_BASE(120, 120, 4, 0x00e0, 0x10, 10, 1),
-       PIN_FIELD_BASE(121, 121, 4, 0x00e0, 0x10, 22, 1),
-       PIN_FIELD_BASE(122, 122, 4, 0x00e0, 0x10, 8, 1),
-       PIN_FIELD_BASE(123, 123, 4, 0x00e0, 0x10, 20, 1),
-       PIN_FIELD_BASE(124, 124, 4, 0x00e0, 0x10, 6, 1),
-       PIN_FIELD_BASE(125, 125, 4, 0x00e0, 0x10, 18, 1),
-       PIN_FIELD_BASE(139, 139, 4, 0x00e0, 0x10, 4, 1),
-       PIN_FIELD_BASE(140, 140, 4, 0x00e0, 0x10, 16, 1),
-       PIN_FIELD_BASE(141, 141, 4, 0x00e0, 0x10, 2, 1),
-       PIN_FIELD_BASE(142, 142, 4, 0x00e0, 0x10, 14, 1),
        PIN_FIELD_BASE(152, 152, 7, 0x00c0, 0x10, 3, 1),
        PIN_FIELD_BASE(153, 153, 7, 0x00c0, 0x10, 2, 1),
        PIN_FIELD_BASE(154, 154, 7, 0x00c0, 0x10, 0, 1),
        PIN_FIELD_BASE(155, 155, 7, 0x00c0, 0x10, 1, 1),
-       PIN_FIELD_BASE(160, 160, 7, 0x00f0, 0x10, 0, 1),
-       PIN_FIELD_BASE(161, 161, 7, 0x00f0, 0x10, 2, 1),
        PIN_FIELD_BASE(183, 183, 9, 0x0040, 0x10, 1, 1),
        PIN_FIELD_BASE(184, 184, 9, 0x0040, 0x10, 2, 1),
        PIN_FIELD_BASE(185, 185, 9, 0x0040, 0x10, 4, 1),
@@ -1194,12 +1160,6 @@ static const struct mtk_pin_field_calc mt8192_pin_r0_range[] = {
        PIN_FIELD_BASE(192, 192, 9, 0x0040, 0x10, 0, 1),
        PIN_FIELD_BASE(193, 193, 9, 0x0040, 0x10, 5, 1),
        PIN_FIELD_BASE(194, 194, 9, 0x0040, 0x10, 11, 1),
-       PIN_FIELD_BASE(200, 200, 8, 0x0070, 0x10, 2, 1),
-       PIN_FIELD_BASE(201, 201, 8, 0x0070, 0x10, 6, 1),
-       PIN_FIELD_BASE(202, 202, 5, 0x0070, 0x10, 0, 1),
-       PIN_FIELD_BASE(203, 203, 5, 0x0070, 0x10, 2, 1),
-       PIN_FIELD_BASE(204, 204, 8, 0x0070, 0x10, 0, 1),
-       PIN_FIELD_BASE(205, 205, 8, 0x0070, 0x10, 4, 1),
 };
 
 static const struct mtk_pin_field_calc mt8192_pin_r1_range[] = {
@@ -1221,24 +1181,10 @@ static const struct mtk_pin_field_calc mt8192_pin_r1_range[] = {
        PIN_FIELD_BASE(54, 54, 1, 0x0090, 0x10, 2, 1),
        PIN_FIELD_BASE(55, 55, 1, 0x0090, 0x10, 4, 1),
        PIN_FIELD_BASE(56, 56, 1, 0x0090, 0x10, 3, 1),
-       PIN_FIELD_BASE(118, 118, 4, 0x00e0, 0x10, 1, 1),
-       PIN_FIELD_BASE(119, 119, 4, 0x00e0, 0x10, 13, 1),
-       PIN_FIELD_BASE(120, 120, 4, 0x00e0, 0x10, 11, 1),
-       PIN_FIELD_BASE(121, 121, 4, 0x00e0, 0x10, 23, 1),
-       PIN_FIELD_BASE(122, 122, 4, 0x00e0, 0x10, 9, 1),
-       PIN_FIELD_BASE(123, 123, 4, 0x00e0, 0x10, 21, 1),
-       PIN_FIELD_BASE(124, 124, 4, 0x00e0, 0x10, 7, 1),
-       PIN_FIELD_BASE(125, 125, 4, 0x00e0, 0x10, 19, 1),
-       PIN_FIELD_BASE(139, 139, 4, 0x00e0, 0x10, 5, 1),
-       PIN_FIELD_BASE(140, 140, 4, 0x00e0, 0x10, 17, 1),
-       PIN_FIELD_BASE(141, 141, 4, 0x00e0, 0x10, 3, 1),
-       PIN_FIELD_BASE(142, 142, 4, 0x00e0, 0x10, 15, 1),
        PIN_FIELD_BASE(152, 152, 7, 0x00d0, 0x10, 3, 1),
        PIN_FIELD_BASE(153, 153, 7, 0x00d0, 0x10, 2, 1),
        PIN_FIELD_BASE(154, 154, 7, 0x00d0, 0x10, 0, 1),
        PIN_FIELD_BASE(155, 155, 7, 0x00d0, 0x10, 1, 1),
-       PIN_FIELD_BASE(160, 160, 7, 0x00f0, 0x10, 1, 1),
-       PIN_FIELD_BASE(161, 161, 7, 0x00f0, 0x10, 3, 1),
        PIN_FIELD_BASE(183, 183, 9, 0x0050, 0x10, 1, 1),
        PIN_FIELD_BASE(184, 184, 9, 0x0050, 0x10, 2, 1),
        PIN_FIELD_BASE(185, 185, 9, 0x0050, 0x10, 4, 1),
@@ -1251,83 +1197,169 @@ static const struct mtk_pin_field_calc mt8192_pin_r1_range[] = {
        PIN_FIELD_BASE(192, 192, 9, 0x0050, 0x10, 0, 1),
        PIN_FIELD_BASE(193, 193, 9, 0x0050, 0x10, 5, 1),
        PIN_FIELD_BASE(194, 194, 9, 0x0050, 0x10, 11, 1),
-       PIN_FIELD_BASE(200, 200, 8, 0x0070, 0x10, 3, 1),
-       PIN_FIELD_BASE(201, 201, 8, 0x0070, 0x10, 7, 1),
-       PIN_FIELD_BASE(202, 202, 5, 0x0070, 0x10, 1, 1),
-       PIN_FIELD_BASE(203, 203, 5, 0x0070, 0x10, 3, 1),
-       PIN_FIELD_BASE(204, 204, 8, 0x0070, 0x10, 1, 1),
-       PIN_FIELD_BASE(205, 205, 8, 0x0070, 0x10, 5, 1),
 };
 
-static const struct mtk_pin_field_calc mt8192_pin_e1e0en_range[] = {
-       PIN_FIELD_BASE(118, 118, 4, 0x0040, 0x10, 0, 1),
-       PIN_FIELD_BASE(119, 119, 4, 0x0040, 0x10, 18, 1),
-       PIN_FIELD_BASE(120, 120, 4, 0x0040, 0x10, 15, 1),
-       PIN_FIELD_BASE(121, 121, 4, 0x0050, 0x10, 3, 1),
-       PIN_FIELD_BASE(122, 122, 4, 0x0040, 0x10, 12, 1),
-       PIN_FIELD_BASE(123, 123, 4, 0x0050, 0x10, 0, 1),
-       PIN_FIELD_BASE(124, 124, 4, 0x0040, 0x10, 9, 1),
-       PIN_FIELD_BASE(125, 125, 4, 0x0040, 0x10, 27, 1),
-       PIN_FIELD_BASE(139, 139, 4, 0x0040, 0x10, 6, 1),
-       PIN_FIELD_BASE(140, 140, 4, 0x0040, 0x10, 24, 1),
-       PIN_FIELD_BASE(141, 141, 4, 0x0040, 0x10, 3, 1),
-       PIN_FIELD_BASE(142, 142, 4, 0x0040, 0x10, 21, 1),
-       PIN_FIELD_BASE(160, 160, 7, 0x0030, 0x10, 0, 1),
-       PIN_FIELD_BASE(161, 161, 7, 0x0030, 0x10, 3, 1),
-       PIN_FIELD_BASE(200, 200, 8, 0x0010, 0x10, 3, 1),
-       PIN_FIELD_BASE(201, 201, 8, 0x0010, 0x10, 9, 1),
-       PIN_FIELD_BASE(202, 202, 5, 0x0020, 0x10, 0, 1),
-       PIN_FIELD_BASE(203, 203, 5, 0x0020, 0x10, 3, 1),
-       PIN_FIELD_BASE(204, 204, 8, 0x0010, 0x10, 0, 1),
-       PIN_FIELD_BASE(205, 205, 8, 0x0010, 0x10, 6, 1),
-};
+static const struct mtk_pin_field_calc mt8192_pin_drv_adv_range[] = {
+       PIN_FIELD_BASE(89, 89, 2, 0x0040, 0x10, 0, 5),
+       PIN_FIELD_BASE(90, 90, 2, 0x0040, 0x10, 5, 5),
 
-static const struct mtk_pin_field_calc mt8192_pin_e0_range[] = {
-       PIN_FIELD_BASE(118, 118, 4, 0x0040, 0x10, 1, 1),
-       PIN_FIELD_BASE(119, 119, 4, 0x0040, 0x10, 19, 1),
-       PIN_FIELD_BASE(120, 120, 4, 0x0040, 0x10, 16, 1),
-       PIN_FIELD_BASE(121, 121, 4, 0x0050, 0x10, 4, 1),
-       PIN_FIELD_BASE(122, 122, 4, 0x0040, 0x10, 13, 1),
-       PIN_FIELD_BASE(123, 123, 4, 0x0050, 0x10, 1, 1),
-       PIN_FIELD_BASE(124, 124, 4, 0x0040, 0x10, 10, 1),
-       PIN_FIELD_BASE(125, 125, 4, 0x0040, 0x10, 28, 1),
-       PIN_FIELD_BASE(139, 139, 4, 0x0040, 0x10, 7, 1),
-       PIN_FIELD_BASE(140, 140, 4, 0x0040, 0x10, 25, 1),
-       PIN_FIELD_BASE(141, 141, 4, 0x0040, 0x10, 4, 1),
-       PIN_FIELD_BASE(142, 142, 4, 0x0040, 0x10, 22, 1),
-       PIN_FIELD_BASE(160, 160, 7, 0x0030, 0x10, 1, 1),
-       PIN_FIELD_BASE(161, 161, 7, 0x0030, 0x10, 4, 1),
-       PIN_FIELD_BASE(200, 200, 8, 0x0010, 0x10, 4, 1),
-       PIN_FIELD_BASE(201, 201, 8, 0x0010, 0x10, 10, 1),
-       PIN_FIELD_BASE(202, 202, 5, 0x0020, 0x10, 1, 1),
-       PIN_FIELD_BASE(203, 203, 5, 0x0020, 0x10, 4, 1),
-       PIN_FIELD_BASE(204, 204, 8, 0x0010, 0x10, 1, 1),
-       PIN_FIELD_BASE(205, 205, 8, 0x0010, 0x10, 7, 1),
+       PIN_FIELD_BASE(118, 118, 4, 0x0040, 0x10, 0, 3),
+       PIN_FIELD_BASE(119, 119, 4, 0x0040, 0x10, 18, 3),
+       PIN_FIELD_BASE(120, 120, 4, 0x0040, 0x10, 15, 3),
+       PIN_FIELD_BASE(121, 121, 4, 0x0050, 0x10, 3, 3),
+       PIN_FIELD_BASE(122, 122, 4, 0x0040, 0x10, 12, 3),
+       PIN_FIELD_BASE(123, 123, 4, 0x0050, 0x10, 0, 3),
+       PIN_FIELD_BASE(124, 124, 4, 0x0040, 0x10, 9, 3),
+       PIN_FIELD_BASE(125, 125, 4, 0x0040, 0x10, 27, 3),
+       PIN_FIELD_BASE(139, 139, 4, 0x0040, 0x10, 6, 3),
+       PIN_FIELD_BASE(140, 140, 4, 0x0040, 0x10, 24, 3),
+       PIN_FIELD_BASE(141, 141, 4, 0x0040, 0x10, 3, 3),
+       PIN_FIELD_BASE(142, 142, 4, 0x0040, 0x10, 21, 3),
+       PIN_FIELD_BASE(160, 160, 7, 0x0030, 0x10, 0, 3),
+       PIN_FIELD_BASE(161, 161, 7, 0x0030, 0x10, 3, 3),
+       PIN_FIELD_BASE(200, 200, 8, 0x0010, 0x10, 3, 3),
+       PIN_FIELD_BASE(201, 201, 8, 0x0010, 0x10, 9, 3),
+       PIN_FIELD_BASE(202, 202, 5, 0x0020, 0x10, 0, 3),
+       PIN_FIELD_BASE(203, 203, 5, 0x0020, 0x10, 3, 3),
+       PIN_FIELD_BASE(204, 204, 8, 0x0010, 0x10, 0, 3),
+       PIN_FIELD_BASE(205, 205, 8, 0x0010, 0x10, 6, 3),
 };
 
-static const struct mtk_pin_field_calc mt8192_pin_e1_range[] = {
-       PIN_FIELD_BASE(118, 118, 4, 0x0040, 0x10, 2, 1),
-       PIN_FIELD_BASE(119, 119, 4, 0x0040, 0x10, 20, 1),
-       PIN_FIELD_BASE(120, 120, 4, 0x0040, 0x10, 17, 1),
-       PIN_FIELD_BASE(121, 121, 4, 0x0050, 0x10, 5, 1),
-       PIN_FIELD_BASE(122, 122, 4, 0x0040, 0x10, 14, 1),
-       PIN_FIELD_BASE(123, 123, 4, 0x0050, 0x10, 2, 1),
-       PIN_FIELD_BASE(124, 124, 4, 0x0040, 0x10, 11, 1),
-       PIN_FIELD_BASE(125, 125, 4, 0x0040, 0x10, 29, 1),
-       PIN_FIELD_BASE(139, 139, 4, 0x0040, 0x10, 8, 1),
-       PIN_FIELD_BASE(140, 140, 4, 0x0040, 0x10, 26, 1),
-       PIN_FIELD_BASE(141, 141, 4, 0x0040, 0x10, 5, 1),
-       PIN_FIELD_BASE(142, 142, 4, 0x0040, 0x10, 23, 1),
-       PIN_FIELD_BASE(160, 160, 7, 0x0030, 0x10, 2, 1),
-       PIN_FIELD_BASE(161, 161, 7, 0x0030, 0x10, 5, 1),
-       PIN_FIELD_BASE(200, 200, 8, 0x0010, 0x10, 5, 1),
-       PIN_FIELD_BASE(201, 201, 8, 0x0010, 0x10, 11, 1),
-       PIN_FIELD_BASE(202, 202, 5, 0x0020, 0x10, 2, 1),
-       PIN_FIELD_BASE(203, 203, 5, 0x0020, 0x10, 5, 1),
-       PIN_FIELD_BASE(204, 204, 8, 0x0010, 0x10, 2, 1),
-       PIN_FIELD_BASE(205, 205, 8, 0x0010, 0x10, 8, 1),
+static const struct mtk_pin_field_calc mt8192_pin_rsel_range[] = {
+       PIN_FIELD_BASE(118, 118, 4, 0x00e0, 0x10, 0, 2),
+       PIN_FIELD_BASE(119, 119, 4, 0x00e0, 0x10, 12, 2),
+       PIN_FIELD_BASE(120, 120, 4, 0x00e0, 0x10, 10, 2),
+       PIN_FIELD_BASE(121, 121, 4, 0x00e0, 0x10, 22, 2),
+       PIN_FIELD_BASE(122, 122, 4, 0x00e0, 0x10, 8, 2),
+       PIN_FIELD_BASE(123, 123, 4, 0x00e0, 0x10, 20, 2),
+       PIN_FIELD_BASE(124, 124, 4, 0x00e0, 0x10, 6, 2),
+       PIN_FIELD_BASE(125, 125, 4, 0x00e0, 0x10, 18, 2),
+       PIN_FIELD_BASE(139, 139, 4, 0x00e0, 0x10, 4, 2),
+       PIN_FIELD_BASE(140, 140, 4, 0x00e0, 0x10, 16, 2),
+       PIN_FIELD_BASE(141, 141, 4, 0x00e0, 0x10, 2, 2),
+       PIN_FIELD_BASE(142, 142, 4, 0x00e0, 0x10, 14, 2),
+       PIN_FIELD_BASE(160, 160, 7, 0x00f0, 0x10, 0, 2),
+       PIN_FIELD_BASE(161, 161, 7, 0x00f0, 0x10, 2, 2),
+       PIN_FIELD_BASE(200, 200, 8, 0x0070, 0x10, 2, 2),
+       PIN_FIELD_BASE(201, 201, 8, 0x0070, 0x10, 6, 2),
+       PIN_FIELD_BASE(202, 202, 5, 0x0070, 0x10, 0, 2),
+       PIN_FIELD_BASE(203, 203, 5, 0x0070, 0x10, 2, 2),
+       PIN_FIELD_BASE(204, 204, 8, 0x0070, 0x10, 0, 2),
+       PIN_FIELD_BASE(205, 205, 8, 0x0070, 0x10, 4, 2),
 };
 
+static const unsigned int mt8192_pull_type[] = {
+       MTK_PULL_PU_PD_TYPE,/*0*/ MTK_PULL_PU_PD_TYPE,/*1*/
+       MTK_PULL_PU_PD_TYPE,/*2*/ MTK_PULL_PU_PD_TYPE,/*3*/
+       MTK_PULL_PU_PD_TYPE,/*4*/ MTK_PULL_PU_PD_TYPE,/*5*/
+       MTK_PULL_PU_PD_TYPE,/*6*/ MTK_PULL_PU_PD_TYPE,/*7*/
+       MTK_PULL_PU_PD_TYPE,/*8*/ MTK_PULL_PU_PD_TYPE,/*9*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*10*/ MTK_PULL_PUPD_R1R0_TYPE,/*11*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*12*/ MTK_PULL_PUPD_R1R0_TYPE,/*13*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*14*/ MTK_PULL_PUPD_R1R0_TYPE,/*15*/
+       MTK_PULL_PU_PD_TYPE,/*16*/ MTK_PULL_PU_PD_TYPE,/*17*/
+       MTK_PULL_PU_PD_TYPE,/*18*/ MTK_PULL_PU_PD_TYPE,/*19*/
+       MTK_PULL_PU_PD_TYPE,/*20*/ MTK_PULL_PU_PD_TYPE,/*21*/
+       MTK_PULL_PU_PD_TYPE,/*22*/ MTK_PULL_PU_PD_TYPE,/*23*/
+       MTK_PULL_PU_PD_TYPE,/*24*/ MTK_PULL_PU_PD_TYPE,/*25*/
+       MTK_PULL_PU_PD_TYPE,/*26*/ MTK_PULL_PU_PD_TYPE,/*27*/
+       MTK_PULL_PU_PD_TYPE,/*28*/ MTK_PULL_PU_PD_TYPE,/*29*/
+       MTK_PULL_PU_PD_TYPE,/*30*/ MTK_PULL_PU_PD_TYPE,/*31*/
+       MTK_PULL_PU_PD_TYPE,/*32*/ MTK_PULL_PU_PD_TYPE,/*33*/
+       MTK_PULL_PU_PD_TYPE,/*34*/ MTK_PULL_PU_PD_TYPE,/*35*/
+       MTK_PULL_PU_PD_TYPE,/*36*/ MTK_PULL_PU_PD_TYPE,/*37*/
+       MTK_PULL_PU_PD_TYPE,/*38*/ MTK_PULL_PU_PD_TYPE,/*39*/
+       MTK_PULL_PU_PD_TYPE,/*40*/ MTK_PULL_PU_PD_TYPE,/*41*/
+       MTK_PULL_PU_PD_TYPE,/*42*/ MTK_PULL_PU_PD_TYPE,/*43*/
+       MTK_PULL_PU_PD_TYPE,/*44*/ MTK_PULL_PUPD_R1R0_TYPE,/*45*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*46*/ MTK_PULL_PUPD_R1R0_TYPE,/*47*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*48*/ MTK_PULL_PUPD_R1R0_TYPE,/*49*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*50*/ MTK_PULL_PUPD_R1R0_TYPE,/*51*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*52*/ MTK_PULL_PUPD_R1R0_TYPE,/*53*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*54*/ MTK_PULL_PUPD_R1R0_TYPE,/*55*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*56*/ MTK_PULL_PU_PD_TYPE,/*57*/
+       MTK_PULL_PU_PD_TYPE,/*58*/ MTK_PULL_PU_PD_TYPE,/*59*/
+       MTK_PULL_PU_PD_TYPE,/*60*/ MTK_PULL_PU_PD_TYPE,/*61*/
+       MTK_PULL_PU_PD_TYPE,/*62*/ MTK_PULL_PU_PD_TYPE,/*63*/
+       MTK_PULL_PU_PD_TYPE,/*64*/ MTK_PULL_PU_PD_TYPE,/*65*/
+       MTK_PULL_PU_PD_TYPE,/*66*/ MTK_PULL_PU_PD_TYPE,/*67*/
+       MTK_PULL_PU_PD_TYPE,/*68*/ MTK_PULL_PU_PD_TYPE,/*69*/
+       MTK_PULL_PU_PD_TYPE,/*70*/ MTK_PULL_PU_PD_TYPE,/*71*/
+       MTK_PULL_PU_PD_TYPE,/*72*/ MTK_PULL_PU_PD_TYPE,/*73*/
+       MTK_PULL_PU_PD_TYPE,/*74*/ MTK_PULL_PU_PD_TYPE,/*75*/
+       MTK_PULL_PU_PD_TYPE,/*76*/ MTK_PULL_PU_PD_TYPE,/*77*/
+       MTK_PULL_PU_PD_TYPE,/*78*/ MTK_PULL_PU_PD_TYPE,/*79*/
+       MTK_PULL_PU_PD_TYPE,/*80*/ MTK_PULL_PU_PD_TYPE,/*81*/
+       MTK_PULL_PU_PD_TYPE,/*82*/ MTK_PULL_PU_PD_TYPE,/*83*/
+       MTK_PULL_PU_PD_TYPE,/*84*/ MTK_PULL_PU_PD_TYPE,/*85*/
+       MTK_PULL_PU_PD_TYPE,/*86*/ MTK_PULL_PU_PD_TYPE,/*87*/
+       MTK_PULL_PU_PD_TYPE,/*88*/ MTK_PULL_PU_PD_TYPE,/*89*/
+       MTK_PULL_PU_PD_TYPE,/*90*/ MTK_PULL_PU_PD_TYPE,/*91*/
+       MTK_PULL_PU_PD_TYPE,/*92*/ MTK_PULL_PU_PD_TYPE,/*93*/
+       MTK_PULL_PU_PD_TYPE,/*94*/ MTK_PULL_PU_PD_TYPE,/*95*/
+       MTK_PULL_PU_PD_TYPE,/*96*/ MTK_PULL_PU_PD_TYPE,/*97*/
+       MTK_PULL_PU_PD_TYPE,/*98*/ MTK_PULL_PU_PD_TYPE,/*99*/
+       MTK_PULL_PU_PD_TYPE,/*100*/ MTK_PULL_PU_PD_TYPE,/*101*/
+       MTK_PULL_PU_PD_TYPE,/*102*/ MTK_PULL_PU_PD_TYPE,/*103*/
+       MTK_PULL_PU_PD_TYPE,/*104*/ MTK_PULL_PU_PD_TYPE,/*105*/
+       MTK_PULL_PU_PD_TYPE,/*106*/ MTK_PULL_PU_PD_TYPE,/*107*/
+       MTK_PULL_PU_PD_TYPE,/*108*/ MTK_PULL_PU_PD_TYPE,/*109*/
+       MTK_PULL_PU_PD_TYPE,/*110*/ MTK_PULL_PU_PD_TYPE,/*111*/
+       MTK_PULL_PU_PD_TYPE,/*112*/ MTK_PULL_PU_PD_TYPE,/*113*/
+       MTK_PULL_PU_PD_TYPE,/*114*/ MTK_PULL_PU_PD_TYPE,/*115*/
+       MTK_PULL_PU_PD_TYPE,/*116*/ MTK_PULL_PU_PD_TYPE,/*117*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*118*/ MTK_PULL_PU_PD_RSEL_TYPE,/*119*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*120*/ MTK_PULL_PU_PD_RSEL_TYPE,/*121*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*122*/ MTK_PULL_PU_PD_RSEL_TYPE,/*123*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*124*/ MTK_PULL_PU_PD_RSEL_TYPE,/*125*/
+       MTK_PULL_PU_PD_TYPE,/*126*/ MTK_PULL_PU_PD_TYPE,/*127*/
+       MTK_PULL_PU_PD_TYPE,/*128*/ MTK_PULL_PU_PD_TYPE,/*129*/
+       MTK_PULL_PU_PD_TYPE,/*130*/ MTK_PULL_PU_PD_TYPE,/*131*/
+       MTK_PULL_PU_PD_TYPE,/*132*/ MTK_PULL_PU_PD_TYPE,/*133*/
+       MTK_PULL_PU_PD_TYPE,/*134*/ MTK_PULL_PU_PD_TYPE,/*135*/
+       MTK_PULL_PU_PD_TYPE,/*136*/ MTK_PULL_PU_PD_TYPE,/*137*/
+       MTK_PULL_PU_PD_TYPE,/*138*/ MTK_PULL_PU_PD_RSEL_TYPE,/*139*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*140*/ MTK_PULL_PU_PD_RSEL_TYPE,/*141*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*142*/ MTK_PULL_PU_PD_TYPE,/*143*/
+       MTK_PULL_PU_PD_TYPE,/*144*/ MTK_PULL_PU_PD_TYPE,/*145*/
+       MTK_PULL_PU_PD_TYPE,/*146*/ MTK_PULL_PU_PD_TYPE,/*147*/
+       MTK_PULL_PU_PD_TYPE,/*148*/ MTK_PULL_PU_PD_TYPE,/*149*/
+       MTK_PULL_PU_PD_TYPE,/*150*/ MTK_PULL_PU_PD_TYPE,/*151*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*152*/ MTK_PULL_PUPD_R1R0_TYPE,/*153*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*154*/ MTK_PULL_PUPD_R1R0_TYPE,/*155*/
+       MTK_PULL_PU_PD_TYPE,/*156*/ MTK_PULL_PU_PD_TYPE,/*157*/
+       MTK_PULL_PU_PD_TYPE,/*158*/ MTK_PULL_PU_PD_TYPE,/*159*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*160*/ MTK_PULL_PU_PD_RSEL_TYPE,/*161*/
+       MTK_PULL_PU_PD_TYPE,/*162*/ MTK_PULL_PU_PD_TYPE,/*163*/
+       MTK_PULL_PU_PD_TYPE,/*164*/ MTK_PULL_PU_PD_TYPE,/*165*/
+       MTK_PULL_PU_PD_TYPE,/*166*/ MTK_PULL_PU_PD_TYPE,/*167*/
+       MTK_PULL_PU_PD_TYPE,/*168*/ MTK_PULL_PU_PD_TYPE,/*169*/
+       MTK_PULL_PU_PD_TYPE,/*170*/ MTK_PULL_PU_PD_TYPE,/*171*/
+       MTK_PULL_PU_PD_TYPE,/*172*/ MTK_PULL_PU_PD_TYPE,/*173*/
+       MTK_PULL_PU_PD_TYPE,/*174*/ MTK_PULL_PU_PD_TYPE,/*175*/
+       MTK_PULL_PU_PD_TYPE,/*176*/ MTK_PULL_PU_PD_TYPE,/*177*/
+       MTK_PULL_PU_PD_TYPE,/*178*/ MTK_PULL_PU_PD_TYPE,/*179*/
+       MTK_PULL_PU_PD_TYPE,/*180*/ MTK_PULL_PU_PD_TYPE,/*181*/
+       MTK_PULL_PU_PD_TYPE,/*182*/ MTK_PULL_PUPD_R1R0_TYPE,/*183*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*184*/ MTK_PULL_PUPD_R1R0_TYPE,/*185*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*186*/ MTK_PULL_PUPD_R1R0_TYPE,/*187*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*188*/ MTK_PULL_PUPD_R1R0_TYPE,/*189*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*190*/ MTK_PULL_PUPD_R1R0_TYPE,/*191*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*192*/ MTK_PULL_PUPD_R1R0_TYPE,/*193*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*194*/ MTK_PULL_PU_PD_TYPE,/*195*/
+       MTK_PULL_PU_PD_TYPE,/*196*/ MTK_PULL_PU_PD_TYPE,/*197*/
+       MTK_PULL_PU_PD_TYPE,/*198*/ MTK_PULL_PU_PD_TYPE,/*199*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*200*/ MTK_PULL_PU_PD_RSEL_TYPE,/*201*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*202*/ MTK_PULL_PU_PD_RSEL_TYPE,/*203*/
+       MTK_PULL_PU_PD_RSEL_TYPE,/*204*/ MTK_PULL_PU_PD_RSEL_TYPE,/*205*/
+       MTK_PULL_PU_PD_TYPE,/*206*/ MTK_PULL_PU_PD_TYPE,/*207*/
+       MTK_PULL_PU_PD_TYPE,/*208*/ MTK_PULL_PU_PD_TYPE,/*209*/
+       MTK_PULL_PU_PD_TYPE,/*210*/ MTK_PULL_PU_PD_TYPE,/*211*/
+       MTK_PULL_PU_PD_TYPE,/*212*/ MTK_PULL_PU_PD_TYPE,/*213*/
+       MTK_PULL_PU_PD_TYPE,/*214*/ MTK_PULL_PU_PD_TYPE,/*215*/
+       MTK_PULL_PU_PD_TYPE,/*216*/ MTK_PULL_PU_PD_TYPE,/*217*/
+       MTK_PULL_PU_PD_TYPE,/*218*/ MTK_PULL_PU_PD_TYPE,/*219*/
+};
 
 static const char * const mt8192_pinctrl_register_base_names[] = {
        "iocfg0", "iocfg_rm", "iocfg_bm", "iocfg_bl", "iocfg_br",
@@ -1355,9 +1387,8 @@ static const struct mtk_pin_reg_calc mt8192_reg_cals[PINCTRL_PIN_REG_MAX] = {
        [PINCTRL_PIN_REG_PUPD] = MTK_RANGE(mt8192_pin_pupd_range),
        [PINCTRL_PIN_REG_R0] = MTK_RANGE(mt8192_pin_r0_range),
        [PINCTRL_PIN_REG_R1] = MTK_RANGE(mt8192_pin_r1_range),
-       [PINCTRL_PIN_REG_DRV_EN] = MTK_RANGE(mt8192_pin_e1e0en_range),
-       [PINCTRL_PIN_REG_DRV_E0] = MTK_RANGE(mt8192_pin_e0_range),
-       [PINCTRL_PIN_REG_DRV_E1] = MTK_RANGE(mt8192_pin_e1_range),
+       [PINCTRL_PIN_REG_DRV_ADV] = MTK_RANGE(mt8192_pin_drv_adv_range),
+       [PINCTRL_PIN_REG_RSEL] = MTK_RANGE(mt8192_pin_rsel_range),
 };
 
 static const struct mtk_pin_soc mt8192_data = {
@@ -1367,17 +1398,16 @@ static const struct mtk_pin_soc mt8192_data = {
        .ngrps = ARRAY_SIZE(mtk_pins_mt8192),
        .base_names = mt8192_pinctrl_register_base_names,
        .nbase_names = ARRAY_SIZE(mt8192_pinctrl_register_base_names),
+       .pull_type = mt8192_pull_type,
        .eint_hw = &mt8192_eint_hw,
        .nfuncs = 8,
        .gpio_m = 0,
        .bias_set_combo = mtk_pinconf_bias_set_combo,
        .bias_get_combo = mtk_pinconf_bias_get_combo,
-       .drive_set = mtk_pinconf_drive_set_raw,
-       .drive_get = mtk_pinconf_drive_get_raw,
-       .adv_pull_get = mtk_pinconf_adv_pull_get,
-       .adv_pull_set = mtk_pinconf_adv_pull_set,
-       .adv_drive_get = mtk_pinconf_adv_drive_get,
-       .adv_drive_set = mtk_pinconf_adv_drive_set,
+       .drive_set = mtk_pinconf_drive_set_rev1,
+       .drive_get = mtk_pinconf_drive_get_rev1,
+       .adv_drive_get = mtk_pinconf_adv_drive_get_raw,
+       .adv_drive_set = mtk_pinconf_adv_drive_set_raw,
 };
 
 static const struct of_device_id mt8192_pinctrl_of_match[] = {
index a1f93859e7ca557d55e9f7eb41a95dfbc696ce18..8ef0a97d2bf55158c12ab6cac56d4c6c26089e3e 100644 (file)
@@ -96,10 +96,12 @@ static struct mvebu_pinctrl_group *mvebu_pinctrl_find_group_by_name(
        struct mvebu_pinctrl *pctl, const char *name)
 {
        unsigned n;
+
        for (n = 0; n < pctl->num_groups; n++) {
                if (strcmp(name, pctl->groups[n].name) == 0)
                        return &pctl->groups[n];
        }
+
        return NULL;
 }
 
@@ -108,6 +110,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_setting_by_val(
        unsigned long config)
 {
        unsigned n;
+
        for (n = 0; n < grp->num_settings; n++) {
                if (config == grp->settings[n].val) {
                        if (!pctl->variant || (pctl->variant &
@@ -115,6 +118,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_setting_by_val(
                                return &grp->settings[n];
                }
        }
+
        return NULL;
 }
 
@@ -123,6 +127,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_setting_by_name(
        const char *name)
 {
        unsigned n;
+
        for (n = 0; n < grp->num_settings; n++) {
                if (strcmp(name, grp->settings[n].name) == 0) {
                        if (!pctl->variant || (pctl->variant &
@@ -130,6 +135,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_setting_by_name(
                                return &grp->settings[n];
                }
        }
+
        return NULL;
 }
 
@@ -137,6 +143,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_gpio_setting(
        struct mvebu_pinctrl *pctl, struct mvebu_pinctrl_group *grp)
 {
        unsigned n;
+
        for (n = 0; n < grp->num_settings; n++) {
                if (grp->settings[n].flags &
                        (MVEBU_SETTING_GPO | MVEBU_SETTING_GPI)) {
@@ -145,6 +152,7 @@ static struct mvebu_mpp_ctrl_setting *mvebu_pinctrl_find_gpio_setting(
                                return &grp->settings[n];
                }
        }
+
        return NULL;
 }
 
@@ -152,10 +160,12 @@ static struct mvebu_pinctrl_function *mvebu_pinctrl_find_function_by_name(
        struct mvebu_pinctrl *pctl, const char *name)
 {
        unsigned n;
+
        for (n = 0; n < pctl->num_functions; n++) {
                if (strcmp(name, pctl->functions[n].name) == 0)
                        return &pctl->functions[n];
        }
+
        return NULL;
 }
 
index 640e50d94f27ef970837f9e400efd3b928fa3daa..f5014d09d81a222bcc39eff62a01ade384f08839 100644 (file)
@@ -1421,8 +1421,10 @@ static int nmk_pinctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
 
        has_config = nmk_pinctrl_dt_get_config(np, &configs);
        np_config = of_parse_phandle(np, "ste,config", 0);
-       if (np_config)
+       if (np_config) {
                has_config |= nmk_pinctrl_dt_get_config(np_config, &configs);
+               of_node_put(np_config);
+       }
        if (has_config) {
                const char *gpio_name;
                const char *pin;
index 0645c2c24f508b48ccb9909843ea206a1d2c1406..4691a33bc374fc9e5dddc6bd250ce1610ff47686 100644 (file)
@@ -6,8 +6,6 @@
  * Authors: Ken Xue <Ken.Xue@amd.com>
  *      Wu, Jeff <Jeff.Wu@amd.com>
  *
- * Contact Information: Nehal Shah <Nehal-bakulchandra.Shah@amd.com>
- *                     Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
  */
 
 #include <linux/err.h>
@@ -31,6 +29,7 @@
 #include <linux/bitops.h>
 #include <linux/pinctrl/pinconf.h>
 #include <linux/pinctrl/pinconf-generic.h>
+#include <linux/pinctrl/pinmux.h>
 
 #include "core.h"
 #include "pinctrl-utils.h"
@@ -203,8 +202,6 @@ static void amd_gpio_dbg_show(struct seq_file *s, struct gpio_chip *gc)
        struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
 
        bool tmr_out_unit;
-       unsigned int time;
-       unsigned int unit;
        bool tmr_large;
 
        char *level_trig;
@@ -218,13 +215,13 @@ static void amd_gpio_dbg_show(struct seq_file *s, struct gpio_chip *gc)
        char *pull_up_sel;
        char *pull_up_enable;
        char *pull_down_enable;
-       char *output_value;
-       char *output_enable;
+       char *orientation;
        char debounce_value[40];
        char *debounce_enable;
 
        for (bank = 0; bank < gpio_dev->hwbank_num; bank++) {
-               seq_printf(s, "GPIO bank%d\t", bank);
+               unsigned int time = 0;
+               unsigned int unit = 0;
 
                switch (bank) {
                case 0:
@@ -247,8 +244,9 @@ static void amd_gpio_dbg_show(struct seq_file *s, struct gpio_chip *gc)
                        /* Illegal bank number, ignore */
                        continue;
                }
+               seq_printf(s, "GPIO bank%d\n", bank);
                for (; i < pin_num; i++) {
-                       seq_printf(s, "pin%d\t", i);
+                       seq_printf(s, "📌%d\t", i);
                        raw_spin_lock_irqsave(&gpio_dev->lock, flags);
                        pin_reg = readl(gpio_dev->base + i * 4);
                        raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
@@ -256,84 +254,91 @@ static void amd_gpio_dbg_show(struct seq_file *s, struct gpio_chip *gc)
                        if (pin_reg & BIT(INTERRUPT_ENABLE_OFF)) {
                                u8 level = (pin_reg >> ACTIVE_LEVEL_OFF) &
                                                ACTIVE_LEVEL_MASK;
-                               interrupt_enable = "interrupt is enabled|";
+                               interrupt_enable = "+";
 
                                if (level == ACTIVE_LEVEL_HIGH)
-                                       active_level = "Active high|";
+                                       active_level = "";
                                else if (level == ACTIVE_LEVEL_LOW)
-                                       active_level = "Active low|";
+                                       active_level = "";
                                else if (!(pin_reg & BIT(LEVEL_TRIG_OFF)) &&
                                         level == ACTIVE_LEVEL_BOTH)
-                                       active_level = "Active on both|";
+                                       active_level = "b";
                                else
-                                       active_level = "Unknown Active level|";
+                                       active_level = "?";
 
                                if (pin_reg & BIT(LEVEL_TRIG_OFF))
-                                       level_trig = "Level trigger|";
+                                       level_trig = "level";
                                else
-                                       level_trig = "Edge trigger|";
+                                       level_trig = " edge";
 
                        } else {
-                               interrupt_enable =
-                                       "interrupt is disabled|";
-                               active_level = " ";
-                               level_trig = " ";
+                               interrupt_enable = "∅";
+                               active_level = "∅";
+                               level_trig = "    ∅";
                        }
 
                        if (pin_reg & BIT(INTERRUPT_MASK_OFF))
-                               interrupt_mask =
-                                       "interrupt is unmasked|";
+                               interrupt_mask = "-";
                        else
-                               interrupt_mask =
-                                       "interrupt is masked|";
+                               interrupt_mask = "+";
+                       seq_printf(s, "int %s (🎭 %s)| active-%s| %s-🔫| ",
+                                  interrupt_enable,
+                                  interrupt_mask,
+                                  active_level,
+                                  level_trig);
 
                        if (pin_reg & BIT(WAKE_CNTRL_OFF_S0I3))
-                               wake_cntrl0 = "enable wakeup in S0i3 state|";
+                               wake_cntrl0 = "+";
                        else
-                               wake_cntrl0 = "disable wakeup in S0i3 state|";
+                               wake_cntrl0 = "∅";
+                       seq_printf(s, "S0i3 🌅 %s| ", wake_cntrl0);
 
                        if (pin_reg & BIT(WAKE_CNTRL_OFF_S3))
-                               wake_cntrl1 = "enable wakeup in S3 state|";
+                               wake_cntrl1 = "+";
                        else
-                               wake_cntrl1 = "disable wakeup in S3 state|";
+                               wake_cntrl1 = "∅";
+                       seq_printf(s, "S3 🌅 %s| ", wake_cntrl1);
 
                        if (pin_reg & BIT(WAKE_CNTRL_OFF_S4))
-                               wake_cntrl2 = "enable wakeup in S4/S5 state|";
+                               wake_cntrl2 = "+";
                        else
-                               wake_cntrl2 = "disable wakeup in S4/S5 state|";
+                               wake_cntrl2 = "∅";
+                       seq_printf(s, "S4/S5 🌅 %s| ", wake_cntrl2);
 
                        if (pin_reg & BIT(PULL_UP_ENABLE_OFF)) {
-                               pull_up_enable = "pull-up is enabled|";
+                               pull_up_enable = "+";
                                if (pin_reg & BIT(PULL_UP_SEL_OFF))
-                                       pull_up_sel = "8k pull-up|";
+                                       pull_up_sel = "8k";
                                else
-                                       pull_up_sel = "4k pull-up|";
+                                       pull_up_sel = "4k";
                        } else {
-                               pull_up_enable = "pull-up is disabled|";
-                               pull_up_sel = " ";
+                               pull_up_enable = "";
+                               pull_up_sel = "  ";
                        }
+                       seq_printf(s, "pull-↑ %s (%s)| ",
+                                  pull_up_enable,
+                                  pull_up_sel);
 
                        if (pin_reg & BIT(PULL_DOWN_ENABLE_OFF))
-                               pull_down_enable = "pull-down is enabled|";
+                               pull_down_enable = "+";
                        else
-                               pull_down_enable = "Pull-down is disabled|";
+                               pull_down_enable = "∅";
+                       seq_printf(s, "pull-↓ %s| ", pull_down_enable);
 
                        if (pin_reg & BIT(OUTPUT_ENABLE_OFF)) {
-                               pin_sts = " ";
-                               output_enable = "output is enabled|";
+                               pin_sts = "output";
                                if (pin_reg & BIT(OUTPUT_VALUE_OFF))
-                                       output_value = "output is high|";
+                                       orientation = "↑";
                                else
-                                       output_value = "output is low|";
+                                       orientation = "↓";
                        } else {
-                               output_enable = "output is disabled|";
-                               output_value = " ";
-
+                               pin_sts = "input ";
                                if (pin_reg & BIT(PIN_STS_OFF))
-                                       pin_sts = "input is high|";
+                                       orientation = "↑";
                                else
-                                       pin_sts = "input is low|";
+                                       orientation = "↓";
                        }
+                       seq_printf(s, "%s %s| ", pin_sts, orientation);
 
                        db_cntrl = (DB_CNTRl_MASK << DB_CNTRL_OFF) & pin_reg;
                        if (db_cntrl) {
@@ -352,27 +357,18 @@ static void amd_gpio_dbg_show(struct seq_file *s, struct gpio_chip *gc)
                                                unit = 61;
                                }
                                if ((DB_TYPE_REMOVE_GLITCH << DB_CNTRL_OFF) == db_cntrl)
-                                       debounce_enable = "debouncing filter (high and low) enabled|";
+                                       debounce_enable = "b +";
                                else if ((DB_TYPE_PRESERVE_LOW_GLITCH << DB_CNTRL_OFF) == db_cntrl)
-                                       debounce_enable = "debouncing filter (low) enabled|";
+                                       debounce_enable = "↓ +";
                                else
-                                       debounce_enable = "debouncing filter (high) enabled|";
+                                       debounce_enable = "↑ +";
 
-                               snprintf(debounce_value, sizeof(debounce_value),
-                                        "debouncing timeout is %u (us)|", time * unit);
                        } else {
-                               debounce_enable = "debouncing filter disabled|";
-                               snprintf(debounce_value, sizeof(debounce_value), " ");
+                               debounce_enable = "  ∅";
                        }
-
-                       seq_printf(s, "%s %s %s %s %s %s\n"
-                               " %s %s %s %s %s %s %s %s %s 0x%x\n",
-                               level_trig, active_level, interrupt_enable,
-                               interrupt_mask, wake_cntrl0, wake_cntrl1,
-                               wake_cntrl2, pin_sts, pull_up_sel,
-                               pull_up_enable, pull_down_enable,
-                               output_value, output_enable,
-                               debounce_enable, debounce_value, pin_reg);
+                       snprintf(debounce_value, sizeof(debounce_value), "%u", time * unit);
+                       seq_printf(s, "debounce %s (⏰ %sus)| ", debounce_enable, debounce_value);
+                       seq_printf(s, " 0x%x\n", pin_reg);
                }
        }
 }
@@ -917,6 +913,7 @@ static int amd_gpio_suspend(struct device *dev)
 {
        struct amd_gpio *gpio_dev = dev_get_drvdata(dev);
        struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
+       unsigned long flags;
        int i;
 
        for (i = 0; i < desc->npins; i++) {
@@ -925,7 +922,9 @@ static int amd_gpio_suspend(struct device *dev)
                if (!amd_gpio_should_save(gpio_dev, pin))
                        continue;
 
-               gpio_dev->saved_regs[i] = readl(gpio_dev->base + pin*4);
+               raw_spin_lock_irqsave(&gpio_dev->lock, flags);
+               gpio_dev->saved_regs[i] = readl(gpio_dev->base + pin * 4) & ~PIN_IRQ_PENDING;
+               raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
        }
 
        return 0;
@@ -935,6 +934,7 @@ static int amd_gpio_resume(struct device *dev)
 {
        struct amd_gpio *gpio_dev = dev_get_drvdata(dev);
        struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
+       unsigned long flags;
        int i;
 
        for (i = 0; i < desc->npins; i++) {
@@ -943,7 +943,10 @@ static int amd_gpio_resume(struct device *dev)
                if (!amd_gpio_should_save(gpio_dev, pin))
                        continue;
 
-               writel(gpio_dev->saved_regs[i], gpio_dev->base + pin*4);
+               raw_spin_lock_irqsave(&gpio_dev->lock, flags);
+               gpio_dev->saved_regs[i] |= readl(gpio_dev->base + pin * 4) & PIN_IRQ_PENDING;
+               writel(gpio_dev->saved_regs[i], gpio_dev->base + pin * 4);
+               raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
        }
 
        return 0;
@@ -955,14 +958,115 @@ static const struct dev_pm_ops amd_gpio_pm_ops = {
 };
 #endif
 
+static int amd_get_functions_count(struct pinctrl_dev *pctldev)
+{
+       return ARRAY_SIZE(pmx_functions);
+}
+
+static const char *amd_get_fname(struct pinctrl_dev *pctrldev, unsigned int selector)
+{
+       return pmx_functions[selector].name;
+}
+
+static int amd_get_groups(struct pinctrl_dev *pctrldev, unsigned int selector,
+                         const char * const **groups,
+                         unsigned int * const num_groups)
+{
+       struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctrldev);
+
+       if (!gpio_dev->iomux_base) {
+               dev_err(&gpio_dev->pdev->dev, "iomux function %d group not supported\n", selector);
+               return -EINVAL;
+       }
+
+       *groups = pmx_functions[selector].groups;
+       *num_groups = pmx_functions[selector].ngroups;
+       return 0;
+}
+
+static int amd_set_mux(struct pinctrl_dev *pctrldev, unsigned int function, unsigned int group)
+{
+       struct amd_gpio *gpio_dev = pinctrl_dev_get_drvdata(pctrldev);
+       struct device *dev = &gpio_dev->pdev->dev;
+       struct pin_desc *pd;
+       int ind, index;
+
+       if (!gpio_dev->iomux_base)
+               return -EINVAL;
+
+       for (index = 0; index < NSELECTS; index++) {
+               if (strcmp(gpio_dev->groups[group].name,  pmx_functions[function].groups[index]))
+                       continue;
+
+               if (readb(gpio_dev->iomux_base + pmx_functions[function].index) ==
+                               FUNCTION_INVALID) {
+                       dev_err(dev, "IOMUX_GPIO 0x%x not present or supported\n",
+                               pmx_functions[function].index);
+                       return -EINVAL;
+               }
+
+               writeb(index, gpio_dev->iomux_base + pmx_functions[function].index);
+
+               if (index != (readb(gpio_dev->iomux_base + pmx_functions[function].index) &
+                                       FUNCTION_MASK)) {
+                       dev_err(dev, "IOMUX_GPIO 0x%x not present or supported\n",
+                               pmx_functions[function].index);
+                       return -EINVAL;
+               }
+
+               for (ind = 0; ind < gpio_dev->groups[group].npins; ind++) {
+                       if (strncmp(gpio_dev->groups[group].name, "IMX_F", strlen("IMX_F")))
+                               continue;
+
+                       pd = pin_desc_get(gpio_dev->pctrl, gpio_dev->groups[group].pins[ind]);
+                       pd->mux_owner = gpio_dev->groups[group].name;
+               }
+               break;
+       }
+
+       return 0;
+}
+
+static const struct pinmux_ops amd_pmxops = {
+       .get_functions_count = amd_get_functions_count,
+       .get_function_name = amd_get_fname,
+       .get_function_groups = amd_get_groups,
+       .set_mux = amd_set_mux,
+};
+
 static struct pinctrl_desc amd_pinctrl_desc = {
        .pins   = kerncz_pins,
        .npins = ARRAY_SIZE(kerncz_pins),
        .pctlops = &amd_pinctrl_ops,
+       .pmxops = &amd_pmxops,
        .confops = &amd_pinconf_ops,
        .owner = THIS_MODULE,
 };
 
+static void amd_get_iomux_res(struct amd_gpio *gpio_dev)
+{
+       struct pinctrl_desc *desc = &amd_pinctrl_desc;
+       struct device *dev = &gpio_dev->pdev->dev;
+       int index;
+
+       index = device_property_match_string(dev, "pinctrl-resource-names",  "iomux");
+       if (index < 0) {
+               dev_warn(dev, "failed to get iomux index\n");
+               goto out_no_pinmux;
+       }
+
+       gpio_dev->iomux_base = devm_platform_ioremap_resource(gpio_dev->pdev, index);
+       if (IS_ERR(gpio_dev->iomux_base)) {
+               dev_warn(dev, "Failed to get iomux %d io resource\n", index);
+               goto out_no_pinmux;
+       }
+
+       return;
+
+out_no_pinmux:
+       desc->pmxops = NULL;
+}
+
 static int amd_gpio_probe(struct platform_device *pdev)
 {
        int ret = 0;
@@ -977,17 +1081,12 @@ static int amd_gpio_probe(struct platform_device *pdev)
 
        raw_spin_lock_init(&gpio_dev->lock);
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res) {
+       gpio_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
+       if (IS_ERR(gpio_dev->base)) {
                dev_err(&pdev->dev, "Failed to get gpio io resource.\n");
-               return -EINVAL;
+               return PTR_ERR(gpio_dev->base);
        }
 
-       gpio_dev->base = devm_ioremap(&pdev->dev, res->start,
-                                               resource_size(res));
-       if (!gpio_dev->base)
-               return -ENOMEM;
-
        gpio_dev->irq = platform_get_irq(pdev, 0);
        if (gpio_dev->irq < 0)
                return gpio_dev->irq;
@@ -1020,6 +1119,7 @@ static int amd_gpio_probe(struct platform_device *pdev)
        gpio_dev->ngroups = ARRAY_SIZE(kerncz_groups);
 
        amd_pinctrl_desc.name = dev_name(&pdev->dev);
+       amd_get_iomux_res(gpio_dev);
        gpio_dev->pctrl = devm_pinctrl_register(&pdev->dev, &amd_pinctrl_desc,
                                                gpio_dev);
        if (IS_ERR(gpio_dev->pctrl)) {
index 1d431707365456af3df7cd6c6415a1a6ff44c89b..c8635998465db39bc21d152e30d3eccdce0484d4 100644 (file)
 
 #define CLR_INTR_STAT  0x1UL
 
-struct amd_pingroup {
-       const char *name;
-       const unsigned *pins;
-       unsigned npins;
-};
+#define NSELECTS       0x4
+
+#define FUNCTION_MASK          GENMASK(1, 0)
+#define FUNCTION_INVALID       GENMASK(7, 0)
 
 struct amd_function {
        const char *name;
-       const char * const *groups;
+       const char * const groups[NSELECTS];
        unsigned ngroups;
+       int index;
 };
 
 struct amd_gpio {
        raw_spinlock_t          lock;
        void __iomem            *base;
+       void __iomem            *iomux_base;
 
-       const struct amd_pingroup *groups;
+       const struct pingroup *groups;
        u32 ngroups;
        struct pinctrl_dev *pctrl;
        struct gpio_chip        gc;
@@ -288,45 +289,1332 @@ static const struct pinctrl_pin_desc kerncz_pins[] = {
        PINCTRL_PIN(183, "GPIO_183"),
 };
 
-static const unsigned i2c0_pins[] = {145, 146};
-static const unsigned i2c1_pins[] = {147, 148};
-static const unsigned i2c2_pins[] = {113, 114};
-static const unsigned i2c3_pins[] = {19, 20};
+#define AMD_PINS(...) (const unsigned int []){__VA_ARGS__}
+
+enum amd_functions {
+       IMX_F0_GPIO0,
+       IMX_F1_GPIO0,
+       IMX_F2_GPIO0,
+       IMX_F3_GPIO0,
+       IMX_F0_GPIO1,
+       IMX_F1_GPIO1,
+       IMX_F2_GPIO1,
+       IMX_F3_GPIO1,
+       IMX_F0_GPIO2,
+       IMX_F1_GPIO2,
+       IMX_F2_GPIO2,
+       IMX_F3_GPIO2,
+       IMX_F0_GPIO3,
+       IMX_F1_GPIO3,
+       IMX_F2_GPIO3,
+       IMX_F3_GPIO3,
+       IMX_F0_GPIO4,
+       IMX_F1_GPIO4,
+       IMX_F2_GPIO4,
+       IMX_F3_GPIO4,
+       IMX_F0_GPIO5,
+       IMX_F1_GPIO5,
+       IMX_F2_GPIO5,
+       IMX_F3_GPIO5,
+       IMX_F0_GPIO6,
+       IMX_F1_GPIO6,
+       IMX_F2_GPIO6,
+       IMX_F3_GPIO6,
+       IMX_F0_GPIO7,
+       IMX_F1_GPIO7,
+       IMX_F2_GPIO7,
+       IMX_F3_GPIO7,
+       IMX_F0_GPIO8,
+       IMX_F1_GPIO8,
+       IMX_F2_GPIO8,
+       IMX_F3_GPIO8,
+       IMX_F0_GPIO9,
+       IMX_F1_GPIO9,
+       IMX_F2_GPIO9,
+       IMX_F3_GPIO9,
+       IMX_F0_GPIO10,
+       IMX_F1_GPIO10,
+       IMX_F2_GPIO10,
+       IMX_F3_GPIO10,
+       IMX_F0_GPIO11,
+       IMX_F1_GPIO11,
+       IMX_F2_GPIO11,
+       IMX_F3_GPIO11,
+       IMX_F0_GPIO12,
+       IMX_F1_GPIO12,
+       IMX_F2_GPIO12,
+       IMX_F3_GPIO12,
+       IMX_F0_GPIO13,
+       IMX_F1_GPIO13,
+       IMX_F2_GPIO13,
+       IMX_F3_GPIO13,
+       IMX_F0_GPIO14,
+       IMX_F1_GPIO14,
+       IMX_F2_GPIO14,
+       IMX_F3_GPIO14,
+       IMX_F0_GPIO15,
+       IMX_F1_GPIO15,
+       IMX_F2_GPIO15,
+       IMX_F3_GPIO15,
+       IMX_F0_GPIO16,
+       IMX_F1_GPIO16,
+       IMX_F2_GPIO16,
+       IMX_F3_GPIO16,
+       IMX_F0_GPIO17,
+       IMX_F1_GPIO17,
+       IMX_F2_GPIO17,
+       IMX_F3_GPIO17,
+       IMX_F0_GPIO18,
+       IMX_F1_GPIO18,
+       IMX_F2_GPIO18,
+       IMX_F3_GPIO18,
+       IMX_F0_GPIO19,
+       IMX_F1_GPIO19,
+       IMX_F2_GPIO19,
+       IMX_F3_GPIO19,
+       IMX_F0_GPIO20,
+       IMX_F1_GPIO20,
+       IMX_F2_GPIO20,
+       IMX_F3_GPIO20,
+       IMX_F0_GPIO21,
+       IMX_F1_GPIO21,
+       IMX_F2_GPIO21,
+       IMX_F3_GPIO21,
+       IMX_F0_GPIO22,
+       IMX_F1_GPIO22,
+       IMX_F2_GPIO22,
+       IMX_F3_GPIO22,
+       IMX_F0_GPIO23,
+       IMX_F1_GPIO23,
+       IMX_F2_GPIO23,
+       IMX_F3_GPIO23,
+       IMX_F0_GPIO24,
+       IMX_F1_GPIO24,
+       IMX_F2_GPIO24,
+       IMX_F3_GPIO24,
+       IMX_F0_GPIO25,
+       IMX_F1_GPIO25,
+       IMX_F2_GPIO25,
+       IMX_F3_GPIO25,
+       IMX_F0_GPIO26,
+       IMX_F1_GPIO26,
+       IMX_F2_GPIO26,
+       IMX_F3_GPIO26,
+       IMX_F0_GPIO27,
+       IMX_F1_GPIO27,
+       IMX_F2_GPIO27,
+       IMX_F3_GPIO27,
+       IMX_F0_GPIO28,
+       IMX_F1_GPIO28,
+       IMX_F2_GPIO28,
+       IMX_F3_GPIO28,
+       IMX_F0_GPIO29,
+       IMX_F1_GPIO29,
+       IMX_F2_GPIO29,
+       IMX_F3_GPIO29,
+       IMX_F0_GPIO30,
+       IMX_F1_GPIO30,
+       IMX_F2_GPIO30,
+       IMX_F3_GPIO30,
+       IMX_F0_GPIO31,
+       IMX_F1_GPIO31,
+       IMX_F2_GPIO31,
+       IMX_F3_GPIO31,
+       IMX_F0_GPIO32,
+       IMX_F1_GPIO32,
+       IMX_F2_GPIO32,
+       IMX_F3_GPIO32,
+       IMX_F0_GPIO33,
+       IMX_F1_GPIO33,
+       IMX_F2_GPIO33,
+       IMX_F3_GPIO33,
+       IMX_F0_GPIO34,
+       IMX_F1_GPIO34,
+       IMX_F2_GPIO34,
+       IMX_F3_GPIO34,
+       IMX_F0_GPIO35,
+       IMX_F1_GPIO35,
+       IMX_F2_GPIO35,
+       IMX_F3_GPIO35,
+       IMX_F0_GPIO36,
+       IMX_F1_GPIO36,
+       IMX_F2_GPIO36,
+       IMX_F3_GPIO36,
+       IMX_F0_GPIO37,
+       IMX_F1_GPIO37,
+       IMX_F2_GPIO37,
+       IMX_F3_GPIO37,
+       IMX_F0_GPIO38,
+       IMX_F1_GPIO38,
+       IMX_F2_GPIO38,
+       IMX_F3_GPIO38,
+       IMX_F0_GPIO39,
+       IMX_F1_GPIO39,
+       IMX_F2_GPIO39,
+       IMX_F3_GPIO39,
+       IMX_F0_GPIO40,
+       IMX_F1_GPIO40,
+       IMX_F2_GPIO40,
+       IMX_F3_GPIO40,
+       IMX_F0_GPIO41,
+       IMX_F1_GPIO41,
+       IMX_F2_GPIO41,
+       IMX_F3_GPIO41,
+       IMX_F0_GPIO42,
+       IMX_F1_GPIO42,
+       IMX_F2_GPIO42,
+       IMX_F3_GPIO42,
+       IMX_F0_GPIO43,
+       IMX_F1_GPIO43,
+       IMX_F2_GPIO43,
+       IMX_F3_GPIO43,
+       IMX_F0_GPIO44,
+       IMX_F1_GPIO44,
+       IMX_F2_GPIO44,
+       IMX_F3_GPIO44,
+       IMX_F0_GPIO45,
+       IMX_F1_GPIO45,
+       IMX_F2_GPIO45,
+       IMX_F3_GPIO45,
+       IMX_F0_GPIO46,
+       IMX_F1_GPIO46,
+       IMX_F2_GPIO46,
+       IMX_F3_GPIO46,
+       IMX_F0_GPIO47,
+       IMX_F1_GPIO47,
+       IMX_F2_GPIO47,
+       IMX_F3_GPIO47,
+       IMX_F0_GPIO48,
+       IMX_F1_GPIO48,
+       IMX_F2_GPIO48,
+       IMX_F3_GPIO48,
+       IMX_F0_GPIO49,
+       IMX_F1_GPIO49,
+       IMX_F2_GPIO49,
+       IMX_F3_GPIO49,
+       IMX_F0_GPIO50,
+       IMX_F1_GPIO50,
+       IMX_F2_GPIO50,
+       IMX_F3_GPIO50,
+       IMX_F0_GPIO51,
+       IMX_F1_GPIO51,
+       IMX_F2_GPIO51,
+       IMX_F3_GPIO51,
+       IMX_F0_GPIO52,
+       IMX_F1_GPIO52,
+       IMX_F2_GPIO52,
+       IMX_F3_GPIO52,
+       IMX_F0_GPIO53,
+       IMX_F1_GPIO53,
+       IMX_F2_GPIO53,
+       IMX_F3_GPIO53,
+       IMX_F0_GPIO54,
+       IMX_F1_GPIO54,
+       IMX_F2_GPIO54,
+       IMX_F3_GPIO54,
+       IMX_F0_GPIO55,
+       IMX_F1_GPIO55,
+       IMX_F2_GPIO55,
+       IMX_F3_GPIO55,
+       IMX_F0_GPIO56,
+       IMX_F1_GPIO56,
+       IMX_F2_GPIO56,
+       IMX_F3_GPIO56,
+       IMX_F0_GPIO57,
+       IMX_F1_GPIO57,
+       IMX_F2_GPIO57,
+       IMX_F3_GPIO57,
+       IMX_F0_GPIO58,
+       IMX_F1_GPIO58,
+       IMX_F2_GPIO58,
+       IMX_F3_GPIO58,
+       IMX_F0_GPIO59,
+       IMX_F1_GPIO59,
+       IMX_F2_GPIO59,
+       IMX_F3_GPIO59,
+       IMX_F0_GPIO60,
+       IMX_F1_GPIO60,
+       IMX_F2_GPIO60,
+       IMX_F3_GPIO60,
+       IMX_F0_GPIO61,
+       IMX_F1_GPIO61,
+       IMX_F2_GPIO61,
+       IMX_F3_GPIO61,
+       IMX_F0_GPIO62,
+       IMX_F1_GPIO62,
+       IMX_F2_GPIO62,
+       IMX_F3_GPIO62,
+       IMX_F0_GPIO64,
+       IMX_F1_GPIO64,
+       IMX_F2_GPIO64,
+       IMX_F3_GPIO64,
+       IMX_F0_GPIO65,
+       IMX_F1_GPIO65,
+       IMX_F2_GPIO65,
+       IMX_F3_GPIO65,
+       IMX_F0_GPIO66,
+       IMX_F1_GPIO66,
+       IMX_F2_GPIO66,
+       IMX_F3_GPIO66,
+       IMX_F0_GPIO67,
+       IMX_F1_GPIO67,
+       IMX_F2_GPIO67,
+       IMX_F3_GPIO67,
+       IMX_F0_GPIO68,
+       IMX_F1_GPIO68,
+       IMX_F2_GPIO68,
+       IMX_F3_GPIO68,
+       IMX_F0_GPIO69,
+       IMX_F1_GPIO69,
+       IMX_F2_GPIO69,
+       IMX_F3_GPIO69,
+       IMX_F0_GPIO70,
+       IMX_F1_GPIO70,
+       IMX_F2_GPIO70,
+       IMX_F3_GPIO70,
+       IMX_F0_GPIO71,
+       IMX_F1_GPIO71,
+       IMX_F2_GPIO71,
+       IMX_F3_GPIO71,
+       IMX_F0_GPIO72,
+       IMX_F1_GPIO72,
+       IMX_F2_GPIO72,
+       IMX_F3_GPIO72,
+       IMX_F0_GPIO73,
+       IMX_F1_GPIO73,
+       IMX_F2_GPIO73,
+       IMX_F3_GPIO73,
+       IMX_F0_GPIO74,
+       IMX_F1_GPIO74,
+       IMX_F2_GPIO74,
+       IMX_F3_GPIO74,
+       IMX_F0_GPIO75,
+       IMX_F1_GPIO75,
+       IMX_F2_GPIO75,
+       IMX_F3_GPIO75,
+       IMX_F0_GPIO76,
+       IMX_F1_GPIO76,
+       IMX_F2_GPIO76,
+       IMX_F3_GPIO76,
+       IMX_F0_GPIO77,
+       IMX_F1_GPIO77,
+       IMX_F2_GPIO77,
+       IMX_F3_GPIO77,
+       IMX_F0_GPIO78,
+       IMX_F1_GPIO78,
+       IMX_F2_GPIO78,
+       IMX_F3_GPIO78,
+       IMX_F0_GPIO79,
+       IMX_F1_GPIO79,
+       IMX_F2_GPIO79,
+       IMX_F3_GPIO79,
+       IMX_F0_GPIO80,
+       IMX_F1_GPIO80,
+       IMX_F2_GPIO80,
+       IMX_F3_GPIO80,
+       IMX_F0_GPIO81,
+       IMX_F1_GPIO81,
+       IMX_F2_GPIO81,
+       IMX_F3_GPIO81,
+       IMX_F0_GPIO82,
+       IMX_F1_GPIO82,
+       IMX_F2_GPIO82,
+       IMX_F3_GPIO82,
+       IMX_F0_GPIO83,
+       IMX_F1_GPIO83,
+       IMX_F2_GPIO83,
+       IMX_F3_GPIO83,
+       IMX_F0_GPIO84,
+       IMX_F1_GPIO84,
+       IMX_F2_GPIO84,
+       IMX_F3_GPIO84,
+       IMX_F0_GPIO85,
+       IMX_F1_GPIO85,
+       IMX_F2_GPIO85,
+       IMX_F3_GPIO85,
+       IMX_F0_GPIO86,
+       IMX_F1_GPIO86,
+       IMX_F2_GPIO86,
+       IMX_F3_GPIO86,
+       IMX_F0_GPIO87,
+       IMX_F1_GPIO87,
+       IMX_F2_GPIO87,
+       IMX_F3_GPIO87,
+       IMX_F0_GPIO88,
+       IMX_F1_GPIO88,
+       IMX_F2_GPIO88,
+       IMX_F3_GPIO88,
+       IMX_F0_GPIO89,
+       IMX_F1_GPIO89,
+       IMX_F2_GPIO89,
+       IMX_F3_GPIO89,
+       IMX_F0_GPIO90,
+       IMX_F1_GPIO90,
+       IMX_F2_GPIO90,
+       IMX_F3_GPIO90,
+       IMX_F0_GPIO91,
+       IMX_F1_GPIO91,
+       IMX_F2_GPIO91,
+       IMX_F3_GPIO91,
+       IMX_F0_GPIO92,
+       IMX_F1_GPIO92,
+       IMX_F2_GPIO92,
+       IMX_F3_GPIO92,
+       IMX_F0_GPIO93,
+       IMX_F1_GPIO93,
+       IMX_F2_GPIO93,
+       IMX_F3_GPIO93,
+       IMX_F0_GPIO94,
+       IMX_F1_GPIO94,
+       IMX_F2_GPIO94,
+       IMX_F3_GPIO94,
+       IMX_F0_GPIO95,
+       IMX_F1_GPIO95,
+       IMX_F2_GPIO95,
+       IMX_F3_GPIO95,
+       IMX_F0_GPIO96,
+       IMX_F1_GPIO96,
+       IMX_F2_GPIO96,
+       IMX_F3_GPIO96,
+       IMX_F0_GPIO97,
+       IMX_F1_GPIO97,
+       IMX_F2_GPIO97,
+       IMX_F3_GPIO97,
+       IMX_F0_GPIO98,
+       IMX_F1_GPIO98,
+       IMX_F2_GPIO98,
+       IMX_F3_GPIO98,
+       IMX_F0_GPIO99,
+       IMX_F1_GPIO99,
+       IMX_F2_GPIO99,
+       IMX_F3_GPIO99,
+       IMX_F0_GPIO100,
+       IMX_F1_GPIO100,
+       IMX_F2_GPIO100,
+       IMX_F3_GPIO100,
+       IMX_F0_GPIO101,
+       IMX_F1_GPIO101,
+       IMX_F2_GPIO101,
+       IMX_F3_GPIO101,
+       IMX_F0_GPIO102,
+       IMX_F1_GPIO102,
+       IMX_F2_GPIO102,
+       IMX_F3_GPIO102,
+       IMX_F0_GPIO103,
+       IMX_F1_GPIO103,
+       IMX_F2_GPIO103,
+       IMX_F3_GPIO103,
+       IMX_F0_GPIO104,
+       IMX_F1_GPIO104,
+       IMX_F2_GPIO104,
+       IMX_F3_GPIO104,
+       IMX_F0_GPIO105,
+       IMX_F1_GPIO105,
+       IMX_F2_GPIO105,
+       IMX_F3_GPIO105,
+       IMX_F0_GPIO106,
+       IMX_F1_GPIO106,
+       IMX_F2_GPIO106,
+       IMX_F3_GPIO106,
+       IMX_F0_GPIO107,
+       IMX_F1_GPIO107,
+       IMX_F2_GPIO107,
+       IMX_F3_GPIO107,
+       IMX_F0_GPIO108,
+       IMX_F1_GPIO108,
+       IMX_F2_GPIO108,
+       IMX_F3_GPIO108,
+       IMX_F0_GPIO109,
+       IMX_F1_GPIO109,
+       IMX_F2_GPIO109,
+       IMX_F3_GPIO109,
+       IMX_F0_GPIO110,
+       IMX_F1_GPIO110,
+       IMX_F2_GPIO110,
+       IMX_F3_GPIO110,
+       IMX_F0_GPIO111,
+       IMX_F1_GPIO111,
+       IMX_F2_GPIO111,
+       IMX_F3_GPIO111,
+       IMX_F0_GPIO112,
+       IMX_F1_GPIO112,
+       IMX_F2_GPIO112,
+       IMX_F3_GPIO112,
+       IMX_F0_GPIO113,
+       IMX_F1_GPIO113,
+       IMX_F2_GPIO113,
+       IMX_F3_GPIO113,
+       IMX_F0_GPIO114,
+       IMX_F1_GPIO114,
+       IMX_F2_GPIO114,
+       IMX_F3_GPIO114,
+       IMX_F0_GPIO115,
+       IMX_F1_GPIO115,
+       IMX_F2_GPIO115,
+       IMX_F3_GPIO115,
+       IMX_F0_GPIO116,
+       IMX_F1_GPIO116,
+       IMX_F2_GPIO116,
+       IMX_F3_GPIO116,
+       IMX_F0_GPIO117,
+       IMX_F1_GPIO117,
+       IMX_F2_GPIO117,
+       IMX_F3_GPIO117,
+       IMX_F0_GPIO118,
+       IMX_F1_GPIO118,
+       IMX_F2_GPIO118,
+       IMX_F3_GPIO118,
+       IMX_F0_GPIO119,
+       IMX_F1_GPIO119,
+       IMX_F2_GPIO119,
+       IMX_F3_GPIO119,
+       IMX_F0_GPIO120,
+       IMX_F1_GPIO120,
+       IMX_F2_GPIO120,
+       IMX_F3_GPIO120,
+       IMX_F0_GPIO121,
+       IMX_F1_GPIO121,
+       IMX_F2_GPIO121,
+       IMX_F3_GPIO121,
+       IMX_F0_GPIO122,
+       IMX_F1_GPIO122,
+       IMX_F2_GPIO122,
+       IMX_F3_GPIO122,
+       IMX_F0_GPIO123,
+       IMX_F1_GPIO123,
+       IMX_F2_GPIO123,
+       IMX_F3_GPIO123,
+       IMX_F0_GPIO124,
+       IMX_F1_GPIO124,
+       IMX_F2_GPIO124,
+       IMX_F3_GPIO124,
+       IMX_F0_GPIO125,
+       IMX_F1_GPIO125,
+       IMX_F2_GPIO125,
+       IMX_F3_GPIO125,
+       IMX_F0_GPIO126,
+       IMX_F1_GPIO126,
+       IMX_F2_GPIO126,
+       IMX_F3_GPIO126,
+       IMX_F0_GPIO127,
+       IMX_F1_GPIO127,
+       IMX_F2_GPIO127,
+       IMX_F3_GPIO127,
+       IMX_F0_GPIO128,
+       IMX_F1_GPIO128,
+       IMX_F2_GPIO128,
+       IMX_F3_GPIO128,
+       IMX_F0_GPIO129,
+       IMX_F1_GPIO129,
+       IMX_F2_GPIO129,
+       IMX_F3_GPIO129,
+       IMX_F0_GPIO130,
+       IMX_F1_GPIO130,
+       IMX_F2_GPIO130,
+       IMX_F3_GPIO130,
+       IMX_F0_GPIO131,
+       IMX_F1_GPIO131,
+       IMX_F2_GPIO131,
+       IMX_F3_GPIO131,
+       IMX_F0_GPIO132,
+       IMX_F1_GPIO132,
+       IMX_F2_GPIO132,
+       IMX_F3_GPIO132,
+       IMX_F0_GPIO133,
+       IMX_F1_GPIO133,
+       IMX_F2_GPIO133,
+       IMX_F3_GPIO133,
+       IMX_F0_GPIO134,
+       IMX_F1_GPIO134,
+       IMX_F2_GPIO134,
+       IMX_F3_GPIO134,
+       IMX_F0_GPIO135,
+       IMX_F1_GPIO135,
+       IMX_F2_GPIO135,
+       IMX_F3_GPIO135,
+       IMX_F0_GPIO136,
+       IMX_F1_GPIO136,
+       IMX_F2_GPIO136,
+       IMX_F3_GPIO136,
+       IMX_F0_GPIO137,
+       IMX_F1_GPIO137,
+       IMX_F2_GPIO137,
+       IMX_F3_GPIO137,
+       IMX_F0_GPIO138,
+       IMX_F1_GPIO138,
+       IMX_F2_GPIO138,
+       IMX_F3_GPIO138,
+       IMX_F0_GPIO139,
+       IMX_F1_GPIO139,
+       IMX_F2_GPIO139,
+       IMX_F3_GPIO139,
+       IMX_F0_GPIO140,
+       IMX_F1_GPIO140,
+       IMX_F2_GPIO140,
+       IMX_F3_GPIO140,
+       IMX_F0_GPIO141,
+       IMX_F1_GPIO141,
+       IMX_F2_GPIO141,
+       IMX_F3_GPIO141,
+       IMX_F0_GPIO142,
+       IMX_F1_GPIO142,
+       IMX_F2_GPIO142,
+       IMX_F3_GPIO142,
+       IMX_F0_GPIO143,
+       IMX_F1_GPIO143,
+       IMX_F2_GPIO143,
+       IMX_F3_GPIO143,
+       IMX_F0_GPIO144,
+       IMX_F1_GPIO144,
+       IMX_F2_GPIO144,
+       IMX_F3_GPIO144,
+};
+
+#define AMD_PINCTRL_FUNC_GRP(_number, _func)                                           \
+       [IMX_F##_func##_GPIO##_number] =                                                \
+               PINCTRL_PINGROUP("IMX_F"#_func "_GPIO"#_number, AMD_PINS(_number), 1)
+
+static const struct pingroup kerncz_groups[] = {
+       AMD_PINCTRL_FUNC_GRP(0, 0),
+       AMD_PINCTRL_FUNC_GRP(0, 1),
+       AMD_PINCTRL_FUNC_GRP(0, 2),
+       AMD_PINCTRL_FUNC_GRP(0, 3),
+       AMD_PINCTRL_FUNC_GRP(1, 0),
+       AMD_PINCTRL_FUNC_GRP(1, 1),
+       AMD_PINCTRL_FUNC_GRP(1, 2),
+       AMD_PINCTRL_FUNC_GRP(1, 3),
+       AMD_PINCTRL_FUNC_GRP(2, 0),
+       AMD_PINCTRL_FUNC_GRP(2, 1),
+       AMD_PINCTRL_FUNC_GRP(2, 2),
+       AMD_PINCTRL_FUNC_GRP(2, 3),
+       AMD_PINCTRL_FUNC_GRP(3, 0),
+       AMD_PINCTRL_FUNC_GRP(3, 1),
+       AMD_PINCTRL_FUNC_GRP(3, 2),
+       AMD_PINCTRL_FUNC_GRP(3, 3),
+       AMD_PINCTRL_FUNC_GRP(4, 0),
+       AMD_PINCTRL_FUNC_GRP(4, 1),
+       AMD_PINCTRL_FUNC_GRP(4, 2),
+       AMD_PINCTRL_FUNC_GRP(4, 3),
+       AMD_PINCTRL_FUNC_GRP(5, 0),
+       AMD_PINCTRL_FUNC_GRP(5, 1),
+       AMD_PINCTRL_FUNC_GRP(5, 2),
+       AMD_PINCTRL_FUNC_GRP(5, 3),
+       AMD_PINCTRL_FUNC_GRP(6, 0),
+       AMD_PINCTRL_FUNC_GRP(6, 1),
+       AMD_PINCTRL_FUNC_GRP(6, 2),
+       AMD_PINCTRL_FUNC_GRP(6, 3),
+       AMD_PINCTRL_FUNC_GRP(7, 0),
+       AMD_PINCTRL_FUNC_GRP(7, 1),
+       AMD_PINCTRL_FUNC_GRP(7, 2),
+       AMD_PINCTRL_FUNC_GRP(7, 3),
+       AMD_PINCTRL_FUNC_GRP(8, 0),
+       AMD_PINCTRL_FUNC_GRP(8, 1),
+       AMD_PINCTRL_FUNC_GRP(8, 2),
+       AMD_PINCTRL_FUNC_GRP(8, 3),
+       AMD_PINCTRL_FUNC_GRP(9, 0),
+       AMD_PINCTRL_FUNC_GRP(9, 1),
+       AMD_PINCTRL_FUNC_GRP(9, 2),
+       AMD_PINCTRL_FUNC_GRP(9, 3),
+       AMD_PINCTRL_FUNC_GRP(10, 0),
+       AMD_PINCTRL_FUNC_GRP(10, 1),
+       AMD_PINCTRL_FUNC_GRP(10, 2),
+       AMD_PINCTRL_FUNC_GRP(10, 3),
+       AMD_PINCTRL_FUNC_GRP(11, 0),
+       AMD_PINCTRL_FUNC_GRP(11, 1),
+       AMD_PINCTRL_FUNC_GRP(11, 2),
+       AMD_PINCTRL_FUNC_GRP(11, 3),
+       AMD_PINCTRL_FUNC_GRP(12, 0),
+       AMD_PINCTRL_FUNC_GRP(12, 1),
+       AMD_PINCTRL_FUNC_GRP(12, 2),
+       AMD_PINCTRL_FUNC_GRP(12, 3),
+       AMD_PINCTRL_FUNC_GRP(13, 0),
+       AMD_PINCTRL_FUNC_GRP(13, 1),
+       AMD_PINCTRL_FUNC_GRP(13, 2),
+       AMD_PINCTRL_FUNC_GRP(13, 3),
+       AMD_PINCTRL_FUNC_GRP(14, 0),
+       AMD_PINCTRL_FUNC_GRP(14, 1),
+       AMD_PINCTRL_FUNC_GRP(14, 2),
+       AMD_PINCTRL_FUNC_GRP(14, 3),
+       AMD_PINCTRL_FUNC_GRP(15, 0),
+       AMD_PINCTRL_FUNC_GRP(15, 1),
+       AMD_PINCTRL_FUNC_GRP(15, 2),
+       AMD_PINCTRL_FUNC_GRP(15, 3),
+       AMD_PINCTRL_FUNC_GRP(16, 0),
+       AMD_PINCTRL_FUNC_GRP(16, 1),
+       AMD_PINCTRL_FUNC_GRP(16, 2),
+       AMD_PINCTRL_FUNC_GRP(16, 3),
+       AMD_PINCTRL_FUNC_GRP(17, 0),
+       AMD_PINCTRL_FUNC_GRP(17, 1),
+       AMD_PINCTRL_FUNC_GRP(17, 2),
+       AMD_PINCTRL_FUNC_GRP(17, 3),
+       AMD_PINCTRL_FUNC_GRP(18, 0),
+       AMD_PINCTRL_FUNC_GRP(18, 1),
+       AMD_PINCTRL_FUNC_GRP(18, 2),
+       AMD_PINCTRL_FUNC_GRP(18, 3),
+       AMD_PINCTRL_FUNC_GRP(19, 0),
+       AMD_PINCTRL_FUNC_GRP(19, 1),
+       AMD_PINCTRL_FUNC_GRP(19, 2),
+       AMD_PINCTRL_FUNC_GRP(19, 3),
+       AMD_PINCTRL_FUNC_GRP(20, 0),
+       AMD_PINCTRL_FUNC_GRP(20, 1),
+       AMD_PINCTRL_FUNC_GRP(20, 2),
+       AMD_PINCTRL_FUNC_GRP(20, 3),
+       AMD_PINCTRL_FUNC_GRP(21, 0),
+       AMD_PINCTRL_FUNC_GRP(21, 1),
+       AMD_PINCTRL_FUNC_GRP(21, 2),
+       AMD_PINCTRL_FUNC_GRP(21, 3),
+       AMD_PINCTRL_FUNC_GRP(22, 0),
+       AMD_PINCTRL_FUNC_GRP(22, 1),
+       AMD_PINCTRL_FUNC_GRP(22, 2),
+       AMD_PINCTRL_FUNC_GRP(22, 3),
+       AMD_PINCTRL_FUNC_GRP(23, 0),
+       AMD_PINCTRL_FUNC_GRP(23, 1),
+       AMD_PINCTRL_FUNC_GRP(23, 2),
+       AMD_PINCTRL_FUNC_GRP(23, 3),
+       AMD_PINCTRL_FUNC_GRP(24, 0),
+       AMD_PINCTRL_FUNC_GRP(24, 1),
+       AMD_PINCTRL_FUNC_GRP(24, 2),
+       AMD_PINCTRL_FUNC_GRP(24, 3),
+       AMD_PINCTRL_FUNC_GRP(25, 0),
+       AMD_PINCTRL_FUNC_GRP(25, 1),
+       AMD_PINCTRL_FUNC_GRP(25, 2),
+       AMD_PINCTRL_FUNC_GRP(25, 3),
+       AMD_PINCTRL_FUNC_GRP(26, 0),
+       AMD_PINCTRL_FUNC_GRP(26, 1),
+       AMD_PINCTRL_FUNC_GRP(26, 2),
+       AMD_PINCTRL_FUNC_GRP(26, 3),
+       AMD_PINCTRL_FUNC_GRP(27, 0),
+       AMD_PINCTRL_FUNC_GRP(27, 1),
+       AMD_PINCTRL_FUNC_GRP(27, 2),
+       AMD_PINCTRL_FUNC_GRP(27, 3),
+       AMD_PINCTRL_FUNC_GRP(28, 0),
+       AMD_PINCTRL_FUNC_GRP(28, 1),
+       AMD_PINCTRL_FUNC_GRP(28, 2),
+       AMD_PINCTRL_FUNC_GRP(28, 3),
+       AMD_PINCTRL_FUNC_GRP(29, 0),
+       AMD_PINCTRL_FUNC_GRP(29, 1),
+       AMD_PINCTRL_FUNC_GRP(29, 2),
+       AMD_PINCTRL_FUNC_GRP(29, 3),
+       AMD_PINCTRL_FUNC_GRP(30, 0),
+       AMD_PINCTRL_FUNC_GRP(30, 1),
+       AMD_PINCTRL_FUNC_GRP(30, 2),
+       AMD_PINCTRL_FUNC_GRP(30, 3),
+       AMD_PINCTRL_FUNC_GRP(31, 0),
+       AMD_PINCTRL_FUNC_GRP(31, 1),
+       AMD_PINCTRL_FUNC_GRP(31, 2),
+       AMD_PINCTRL_FUNC_GRP(31, 3),
+       AMD_PINCTRL_FUNC_GRP(32, 0),
+       AMD_PINCTRL_FUNC_GRP(32, 1),
+       AMD_PINCTRL_FUNC_GRP(32, 2),
+       AMD_PINCTRL_FUNC_GRP(32, 3),
+       AMD_PINCTRL_FUNC_GRP(33, 0),
+       AMD_PINCTRL_FUNC_GRP(33, 1),
+       AMD_PINCTRL_FUNC_GRP(33, 2),
+       AMD_PINCTRL_FUNC_GRP(33, 3),
+       AMD_PINCTRL_FUNC_GRP(34, 0),
+       AMD_PINCTRL_FUNC_GRP(34, 1),
+       AMD_PINCTRL_FUNC_GRP(34, 2),
+       AMD_PINCTRL_FUNC_GRP(34, 3),
+       AMD_PINCTRL_FUNC_GRP(35, 0),
+       AMD_PINCTRL_FUNC_GRP(35, 1),
+       AMD_PINCTRL_FUNC_GRP(35, 2),
+       AMD_PINCTRL_FUNC_GRP(35, 3),
+       AMD_PINCTRL_FUNC_GRP(36, 0),
+       AMD_PINCTRL_FUNC_GRP(36, 1),
+       AMD_PINCTRL_FUNC_GRP(36, 2),
+       AMD_PINCTRL_FUNC_GRP(36, 3),
+       AMD_PINCTRL_FUNC_GRP(37, 0),
+       AMD_PINCTRL_FUNC_GRP(37, 1),
+       AMD_PINCTRL_FUNC_GRP(37, 2),
+       AMD_PINCTRL_FUNC_GRP(37, 3),
+       AMD_PINCTRL_FUNC_GRP(38, 0),
+       AMD_PINCTRL_FUNC_GRP(38, 1),
+       AMD_PINCTRL_FUNC_GRP(38, 2),
+       AMD_PINCTRL_FUNC_GRP(38, 3),
+       AMD_PINCTRL_FUNC_GRP(39, 0),
+       AMD_PINCTRL_FUNC_GRP(39, 1),
+       AMD_PINCTRL_FUNC_GRP(39, 2),
+       AMD_PINCTRL_FUNC_GRP(39, 3),
+       AMD_PINCTRL_FUNC_GRP(40, 0),
+       AMD_PINCTRL_FUNC_GRP(40, 1),
+       AMD_PINCTRL_FUNC_GRP(40, 2),
+       AMD_PINCTRL_FUNC_GRP(40, 3),
+       AMD_PINCTRL_FUNC_GRP(41, 0),
+       AMD_PINCTRL_FUNC_GRP(41, 1),
+       AMD_PINCTRL_FUNC_GRP(41, 2),
+       AMD_PINCTRL_FUNC_GRP(41, 3),
+       AMD_PINCTRL_FUNC_GRP(42, 0),
+       AMD_PINCTRL_FUNC_GRP(42, 1),
+       AMD_PINCTRL_FUNC_GRP(42, 2),
+       AMD_PINCTRL_FUNC_GRP(42, 3),
+       AMD_PINCTRL_FUNC_GRP(43, 0),
+       AMD_PINCTRL_FUNC_GRP(43, 1),
+       AMD_PINCTRL_FUNC_GRP(43, 2),
+       AMD_PINCTRL_FUNC_GRP(43, 3),
+       AMD_PINCTRL_FUNC_GRP(44, 0),
+       AMD_PINCTRL_FUNC_GRP(44, 1),
+       AMD_PINCTRL_FUNC_GRP(44, 2),
+       AMD_PINCTRL_FUNC_GRP(44, 3),
+       AMD_PINCTRL_FUNC_GRP(45, 0),
+       AMD_PINCTRL_FUNC_GRP(45, 1),
+       AMD_PINCTRL_FUNC_GRP(45, 2),
+       AMD_PINCTRL_FUNC_GRP(45, 3),
+       AMD_PINCTRL_FUNC_GRP(46, 0),
+       AMD_PINCTRL_FUNC_GRP(46, 1),
+       AMD_PINCTRL_FUNC_GRP(46, 2),
+       AMD_PINCTRL_FUNC_GRP(46, 3),
+       AMD_PINCTRL_FUNC_GRP(47, 0),
+       AMD_PINCTRL_FUNC_GRP(47, 1),
+       AMD_PINCTRL_FUNC_GRP(47, 2),
+       AMD_PINCTRL_FUNC_GRP(47, 3),
+       AMD_PINCTRL_FUNC_GRP(48, 0),
+       AMD_PINCTRL_FUNC_GRP(48, 1),
+       AMD_PINCTRL_FUNC_GRP(48, 2),
+       AMD_PINCTRL_FUNC_GRP(48, 3),
+       AMD_PINCTRL_FUNC_GRP(49, 0),
+       AMD_PINCTRL_FUNC_GRP(49, 1),
+       AMD_PINCTRL_FUNC_GRP(49, 2),
+       AMD_PINCTRL_FUNC_GRP(49, 3),
+       AMD_PINCTRL_FUNC_GRP(50, 0),
+       AMD_PINCTRL_FUNC_GRP(50, 1),
+       AMD_PINCTRL_FUNC_GRP(50, 2),
+       AMD_PINCTRL_FUNC_GRP(50, 3),
+       AMD_PINCTRL_FUNC_GRP(51, 0),
+       AMD_PINCTRL_FUNC_GRP(51, 1),
+       AMD_PINCTRL_FUNC_GRP(51, 2),
+       AMD_PINCTRL_FUNC_GRP(51, 3),
+       AMD_PINCTRL_FUNC_GRP(52, 0),
+       AMD_PINCTRL_FUNC_GRP(52, 1),
+       AMD_PINCTRL_FUNC_GRP(52, 2),
+       AMD_PINCTRL_FUNC_GRP(52, 3),
+       AMD_PINCTRL_FUNC_GRP(53, 0),
+       AMD_PINCTRL_FUNC_GRP(53, 1),
+       AMD_PINCTRL_FUNC_GRP(53, 2),
+       AMD_PINCTRL_FUNC_GRP(53, 3),
+       AMD_PINCTRL_FUNC_GRP(54, 0),
+       AMD_PINCTRL_FUNC_GRP(54, 1),
+       AMD_PINCTRL_FUNC_GRP(54, 2),
+       AMD_PINCTRL_FUNC_GRP(54, 3),
+       AMD_PINCTRL_FUNC_GRP(55, 0),
+       AMD_PINCTRL_FUNC_GRP(55, 1),
+       AMD_PINCTRL_FUNC_GRP(55, 2),
+       AMD_PINCTRL_FUNC_GRP(55, 3),
+       AMD_PINCTRL_FUNC_GRP(56, 0),
+       AMD_PINCTRL_FUNC_GRP(56, 1),
+       AMD_PINCTRL_FUNC_GRP(56, 2),
+       AMD_PINCTRL_FUNC_GRP(56, 3),
+       AMD_PINCTRL_FUNC_GRP(57, 0),
+       AMD_PINCTRL_FUNC_GRP(57, 1),
+       AMD_PINCTRL_FUNC_GRP(57, 2),
+       AMD_PINCTRL_FUNC_GRP(57, 3),
+       AMD_PINCTRL_FUNC_GRP(58, 0),
+       AMD_PINCTRL_FUNC_GRP(58, 1),
+       AMD_PINCTRL_FUNC_GRP(58, 2),
+       AMD_PINCTRL_FUNC_GRP(58, 3),
+       AMD_PINCTRL_FUNC_GRP(59, 0),
+       AMD_PINCTRL_FUNC_GRP(59, 1),
+       AMD_PINCTRL_FUNC_GRP(59, 2),
+       AMD_PINCTRL_FUNC_GRP(59, 3),
+       AMD_PINCTRL_FUNC_GRP(60, 0),
+       AMD_PINCTRL_FUNC_GRP(60, 1),
+       AMD_PINCTRL_FUNC_GRP(60, 2),
+       AMD_PINCTRL_FUNC_GRP(60, 3),
+       AMD_PINCTRL_FUNC_GRP(61, 0),
+       AMD_PINCTRL_FUNC_GRP(61, 1),
+       AMD_PINCTRL_FUNC_GRP(61, 2),
+       AMD_PINCTRL_FUNC_GRP(61, 3),
+       AMD_PINCTRL_FUNC_GRP(62, 0),
+       AMD_PINCTRL_FUNC_GRP(62, 1),
+       AMD_PINCTRL_FUNC_GRP(62, 2),
+       AMD_PINCTRL_FUNC_GRP(62, 3),
+       AMD_PINCTRL_FUNC_GRP(64, 0),
+       AMD_PINCTRL_FUNC_GRP(64, 1),
+       AMD_PINCTRL_FUNC_GRP(64, 2),
+       AMD_PINCTRL_FUNC_GRP(64, 3),
+       AMD_PINCTRL_FUNC_GRP(65, 0),
+       AMD_PINCTRL_FUNC_GRP(65, 1),
+       AMD_PINCTRL_FUNC_GRP(65, 2),
+       AMD_PINCTRL_FUNC_GRP(65, 3),
+       AMD_PINCTRL_FUNC_GRP(66, 0),
+       AMD_PINCTRL_FUNC_GRP(66, 1),
+       AMD_PINCTRL_FUNC_GRP(66, 2),
+       AMD_PINCTRL_FUNC_GRP(66, 3),
+       AMD_PINCTRL_FUNC_GRP(67, 0),
+       AMD_PINCTRL_FUNC_GRP(67, 1),
+       AMD_PINCTRL_FUNC_GRP(67, 2),
+       AMD_PINCTRL_FUNC_GRP(67, 3),
+       AMD_PINCTRL_FUNC_GRP(68, 0),
+       AMD_PINCTRL_FUNC_GRP(68, 1),
+       AMD_PINCTRL_FUNC_GRP(68, 2),
+       AMD_PINCTRL_FUNC_GRP(68, 3),
+       AMD_PINCTRL_FUNC_GRP(69, 0),
+       AMD_PINCTRL_FUNC_GRP(69, 1),
+       AMD_PINCTRL_FUNC_GRP(69, 2),
+       AMD_PINCTRL_FUNC_GRP(69, 3),
+       AMD_PINCTRL_FUNC_GRP(70, 0),
+       AMD_PINCTRL_FUNC_GRP(70, 1),
+       AMD_PINCTRL_FUNC_GRP(70, 2),
+       AMD_PINCTRL_FUNC_GRP(70, 3),
+       AMD_PINCTRL_FUNC_GRP(71, 0),
+       AMD_PINCTRL_FUNC_GRP(71, 1),
+       AMD_PINCTRL_FUNC_GRP(71, 2),
+       AMD_PINCTRL_FUNC_GRP(71, 3),
+       AMD_PINCTRL_FUNC_GRP(72, 0),
+       AMD_PINCTRL_FUNC_GRP(72, 1),
+       AMD_PINCTRL_FUNC_GRP(72, 2),
+       AMD_PINCTRL_FUNC_GRP(72, 3),
+       AMD_PINCTRL_FUNC_GRP(73, 0),
+       AMD_PINCTRL_FUNC_GRP(73, 1),
+       AMD_PINCTRL_FUNC_GRP(73, 2),
+       AMD_PINCTRL_FUNC_GRP(73, 3),
+       AMD_PINCTRL_FUNC_GRP(74, 0),
+       AMD_PINCTRL_FUNC_GRP(74, 1),
+       AMD_PINCTRL_FUNC_GRP(74, 2),
+       AMD_PINCTRL_FUNC_GRP(74, 3),
+       AMD_PINCTRL_FUNC_GRP(75, 0),
+       AMD_PINCTRL_FUNC_GRP(75, 1),
+       AMD_PINCTRL_FUNC_GRP(75, 2),
+       AMD_PINCTRL_FUNC_GRP(75, 3),
+       AMD_PINCTRL_FUNC_GRP(76, 0),
+       AMD_PINCTRL_FUNC_GRP(76, 1),
+       AMD_PINCTRL_FUNC_GRP(76, 2),
+       AMD_PINCTRL_FUNC_GRP(76, 3),
+       AMD_PINCTRL_FUNC_GRP(77, 0),
+       AMD_PINCTRL_FUNC_GRP(77, 1),
+       AMD_PINCTRL_FUNC_GRP(77, 2),
+       AMD_PINCTRL_FUNC_GRP(77, 3),
+       AMD_PINCTRL_FUNC_GRP(78, 0),
+       AMD_PINCTRL_FUNC_GRP(78, 1),
+       AMD_PINCTRL_FUNC_GRP(78, 2),
+       AMD_PINCTRL_FUNC_GRP(78, 3),
+       AMD_PINCTRL_FUNC_GRP(79, 0),
+       AMD_PINCTRL_FUNC_GRP(79, 1),
+       AMD_PINCTRL_FUNC_GRP(79, 2),
+       AMD_PINCTRL_FUNC_GRP(79, 3),
+       AMD_PINCTRL_FUNC_GRP(80, 0),
+       AMD_PINCTRL_FUNC_GRP(80, 1),
+       AMD_PINCTRL_FUNC_GRP(80, 2),
+       AMD_PINCTRL_FUNC_GRP(80, 3),
+       AMD_PINCTRL_FUNC_GRP(81, 0),
+       AMD_PINCTRL_FUNC_GRP(81, 1),
+       AMD_PINCTRL_FUNC_GRP(81, 2),
+       AMD_PINCTRL_FUNC_GRP(81, 3),
+       AMD_PINCTRL_FUNC_GRP(82, 0),
+       AMD_PINCTRL_FUNC_GRP(82, 1),
+       AMD_PINCTRL_FUNC_GRP(82, 2),
+       AMD_PINCTRL_FUNC_GRP(82, 3),
+       AMD_PINCTRL_FUNC_GRP(83, 0),
+       AMD_PINCTRL_FUNC_GRP(83, 1),
+       AMD_PINCTRL_FUNC_GRP(83, 2),
+       AMD_PINCTRL_FUNC_GRP(83, 3),
+       AMD_PINCTRL_FUNC_GRP(84, 0),
+       AMD_PINCTRL_FUNC_GRP(84, 1),
+       AMD_PINCTRL_FUNC_GRP(84, 2),
+       AMD_PINCTRL_FUNC_GRP(84, 3),
+       AMD_PINCTRL_FUNC_GRP(85, 0),
+       AMD_PINCTRL_FUNC_GRP(85, 1),
+       AMD_PINCTRL_FUNC_GRP(85, 2),
+       AMD_PINCTRL_FUNC_GRP(85, 3),
+       AMD_PINCTRL_FUNC_GRP(86, 0),
+       AMD_PINCTRL_FUNC_GRP(86, 1),
+       AMD_PINCTRL_FUNC_GRP(86, 2),
+       AMD_PINCTRL_FUNC_GRP(86, 3),
+       AMD_PINCTRL_FUNC_GRP(87, 0),
+       AMD_PINCTRL_FUNC_GRP(87, 1),
+       AMD_PINCTRL_FUNC_GRP(87, 2),
+       AMD_PINCTRL_FUNC_GRP(87, 3),
+       AMD_PINCTRL_FUNC_GRP(88, 0),
+       AMD_PINCTRL_FUNC_GRP(88, 1),
+       AMD_PINCTRL_FUNC_GRP(88, 2),
+       AMD_PINCTRL_FUNC_GRP(88, 3),
+       AMD_PINCTRL_FUNC_GRP(89, 0),
+       AMD_PINCTRL_FUNC_GRP(89, 1),
+       AMD_PINCTRL_FUNC_GRP(89, 2),
+       AMD_PINCTRL_FUNC_GRP(89, 3),
+       AMD_PINCTRL_FUNC_GRP(90, 0),
+       AMD_PINCTRL_FUNC_GRP(90, 1),
+       AMD_PINCTRL_FUNC_GRP(90, 2),
+       AMD_PINCTRL_FUNC_GRP(90, 3),
+       AMD_PINCTRL_FUNC_GRP(91, 0),
+       AMD_PINCTRL_FUNC_GRP(91, 1),
+       AMD_PINCTRL_FUNC_GRP(91, 2),
+       AMD_PINCTRL_FUNC_GRP(91, 3),
+       AMD_PINCTRL_FUNC_GRP(92, 0),
+       AMD_PINCTRL_FUNC_GRP(92, 1),
+       AMD_PINCTRL_FUNC_GRP(92, 2),
+       AMD_PINCTRL_FUNC_GRP(92, 3),
+       AMD_PINCTRL_FUNC_GRP(93, 0),
+       AMD_PINCTRL_FUNC_GRP(93, 1),
+       AMD_PINCTRL_FUNC_GRP(93, 2),
+       AMD_PINCTRL_FUNC_GRP(93, 3),
+       AMD_PINCTRL_FUNC_GRP(94, 0),
+       AMD_PINCTRL_FUNC_GRP(94, 1),
+       AMD_PINCTRL_FUNC_GRP(94, 2),
+       AMD_PINCTRL_FUNC_GRP(94, 3),
+       AMD_PINCTRL_FUNC_GRP(95, 0),
+       AMD_PINCTRL_FUNC_GRP(95, 1),
+       AMD_PINCTRL_FUNC_GRP(95, 2),
+       AMD_PINCTRL_FUNC_GRP(95, 3),
+       AMD_PINCTRL_FUNC_GRP(96, 0),
+       AMD_PINCTRL_FUNC_GRP(96, 1),
+       AMD_PINCTRL_FUNC_GRP(96, 2),
+       AMD_PINCTRL_FUNC_GRP(96, 3),
+       AMD_PINCTRL_FUNC_GRP(97, 0),
+       AMD_PINCTRL_FUNC_GRP(97, 1),
+       AMD_PINCTRL_FUNC_GRP(97, 2),
+       AMD_PINCTRL_FUNC_GRP(97, 3),
+       AMD_PINCTRL_FUNC_GRP(98, 0),
+       AMD_PINCTRL_FUNC_GRP(98, 1),
+       AMD_PINCTRL_FUNC_GRP(98, 2),
+       AMD_PINCTRL_FUNC_GRP(98, 3),
+       AMD_PINCTRL_FUNC_GRP(99, 0),
+       AMD_PINCTRL_FUNC_GRP(99, 1),
+       AMD_PINCTRL_FUNC_GRP(99, 2),
+       AMD_PINCTRL_FUNC_GRP(99, 3),
+       AMD_PINCTRL_FUNC_GRP(100, 0),
+       AMD_PINCTRL_FUNC_GRP(100, 1),
+       AMD_PINCTRL_FUNC_GRP(100, 2),
+       AMD_PINCTRL_FUNC_GRP(100, 3),
+       AMD_PINCTRL_FUNC_GRP(101, 0),
+       AMD_PINCTRL_FUNC_GRP(101, 1),
+       AMD_PINCTRL_FUNC_GRP(101, 2),
+       AMD_PINCTRL_FUNC_GRP(101, 3),
+       AMD_PINCTRL_FUNC_GRP(102, 0),
+       AMD_PINCTRL_FUNC_GRP(102, 1),
+       AMD_PINCTRL_FUNC_GRP(102, 2),
+       AMD_PINCTRL_FUNC_GRP(102, 3),
+       AMD_PINCTRL_FUNC_GRP(103, 0),
+       AMD_PINCTRL_FUNC_GRP(103, 1),
+       AMD_PINCTRL_FUNC_GRP(103, 2),
+       AMD_PINCTRL_FUNC_GRP(103, 3),
+       AMD_PINCTRL_FUNC_GRP(104, 0),
+       AMD_PINCTRL_FUNC_GRP(104, 1),
+       AMD_PINCTRL_FUNC_GRP(104, 2),
+       AMD_PINCTRL_FUNC_GRP(104, 3),
+       AMD_PINCTRL_FUNC_GRP(105, 0),
+       AMD_PINCTRL_FUNC_GRP(105, 1),
+       AMD_PINCTRL_FUNC_GRP(105, 2),
+       AMD_PINCTRL_FUNC_GRP(105, 3),
+       AMD_PINCTRL_FUNC_GRP(106, 0),
+       AMD_PINCTRL_FUNC_GRP(106, 1),
+       AMD_PINCTRL_FUNC_GRP(106, 2),
+       AMD_PINCTRL_FUNC_GRP(106, 3),
+       AMD_PINCTRL_FUNC_GRP(107, 0),
+       AMD_PINCTRL_FUNC_GRP(107, 1),
+       AMD_PINCTRL_FUNC_GRP(107, 2),
+       AMD_PINCTRL_FUNC_GRP(107, 3),
+       AMD_PINCTRL_FUNC_GRP(108, 0),
+       AMD_PINCTRL_FUNC_GRP(108, 1),
+       AMD_PINCTRL_FUNC_GRP(108, 2),
+       AMD_PINCTRL_FUNC_GRP(108, 3),
+       AMD_PINCTRL_FUNC_GRP(109, 0),
+       AMD_PINCTRL_FUNC_GRP(109, 1),
+       AMD_PINCTRL_FUNC_GRP(109, 2),
+       AMD_PINCTRL_FUNC_GRP(109, 3),
+       AMD_PINCTRL_FUNC_GRP(110, 0),
+       AMD_PINCTRL_FUNC_GRP(110, 1),
+       AMD_PINCTRL_FUNC_GRP(110, 2),
+       AMD_PINCTRL_FUNC_GRP(110, 3),
+       AMD_PINCTRL_FUNC_GRP(111, 0),
+       AMD_PINCTRL_FUNC_GRP(111, 1),
+       AMD_PINCTRL_FUNC_GRP(111, 2),
+       AMD_PINCTRL_FUNC_GRP(111, 3),
+       AMD_PINCTRL_FUNC_GRP(112, 0),
+       AMD_PINCTRL_FUNC_GRP(112, 1),
+       AMD_PINCTRL_FUNC_GRP(112, 2),
+       AMD_PINCTRL_FUNC_GRP(112, 3),
+       AMD_PINCTRL_FUNC_GRP(113, 0),
+       AMD_PINCTRL_FUNC_GRP(113, 1),
+       AMD_PINCTRL_FUNC_GRP(113, 2),
+       AMD_PINCTRL_FUNC_GRP(113, 3),
+       AMD_PINCTRL_FUNC_GRP(114, 0),
+       AMD_PINCTRL_FUNC_GRP(114, 1),
+       AMD_PINCTRL_FUNC_GRP(114, 2),
+       AMD_PINCTRL_FUNC_GRP(114, 3),
+       AMD_PINCTRL_FUNC_GRP(115, 0),
+       AMD_PINCTRL_FUNC_GRP(115, 1),
+       AMD_PINCTRL_FUNC_GRP(115, 2),
+       AMD_PINCTRL_FUNC_GRP(115, 3),
+       AMD_PINCTRL_FUNC_GRP(116, 0),
+       AMD_PINCTRL_FUNC_GRP(116, 1),
+       AMD_PINCTRL_FUNC_GRP(116, 2),
+       AMD_PINCTRL_FUNC_GRP(116, 3),
+       AMD_PINCTRL_FUNC_GRP(117, 0),
+       AMD_PINCTRL_FUNC_GRP(117, 1),
+       AMD_PINCTRL_FUNC_GRP(117, 2),
+       AMD_PINCTRL_FUNC_GRP(117, 3),
+       AMD_PINCTRL_FUNC_GRP(118, 0),
+       AMD_PINCTRL_FUNC_GRP(118, 1),
+       AMD_PINCTRL_FUNC_GRP(118, 2),
+       AMD_PINCTRL_FUNC_GRP(118, 3),
+       AMD_PINCTRL_FUNC_GRP(119, 0),
+       AMD_PINCTRL_FUNC_GRP(119, 1),
+       AMD_PINCTRL_FUNC_GRP(119, 2),
+       AMD_PINCTRL_FUNC_GRP(119, 3),
+       AMD_PINCTRL_FUNC_GRP(120, 0),
+       AMD_PINCTRL_FUNC_GRP(120, 1),
+       AMD_PINCTRL_FUNC_GRP(120, 2),
+       AMD_PINCTRL_FUNC_GRP(120, 3),
+       AMD_PINCTRL_FUNC_GRP(121, 0),
+       AMD_PINCTRL_FUNC_GRP(121, 1),
+       AMD_PINCTRL_FUNC_GRP(121, 2),
+       AMD_PINCTRL_FUNC_GRP(121, 3),
+       AMD_PINCTRL_FUNC_GRP(122, 0),
+       AMD_PINCTRL_FUNC_GRP(122, 1),
+       AMD_PINCTRL_FUNC_GRP(122, 2),
+       AMD_PINCTRL_FUNC_GRP(122, 3),
+       AMD_PINCTRL_FUNC_GRP(123, 0),
+       AMD_PINCTRL_FUNC_GRP(123, 1),
+       AMD_PINCTRL_FUNC_GRP(123, 2),
+       AMD_PINCTRL_FUNC_GRP(123, 3),
+       AMD_PINCTRL_FUNC_GRP(124, 0),
+       AMD_PINCTRL_FUNC_GRP(124, 1),
+       AMD_PINCTRL_FUNC_GRP(124, 2),
+       AMD_PINCTRL_FUNC_GRP(124, 3),
+       AMD_PINCTRL_FUNC_GRP(125, 0),
+       AMD_PINCTRL_FUNC_GRP(125, 1),
+       AMD_PINCTRL_FUNC_GRP(125, 2),
+       AMD_PINCTRL_FUNC_GRP(125, 3),
+       AMD_PINCTRL_FUNC_GRP(126, 0),
+       AMD_PINCTRL_FUNC_GRP(126, 1),
+       AMD_PINCTRL_FUNC_GRP(126, 2),
+       AMD_PINCTRL_FUNC_GRP(126, 3),
+       AMD_PINCTRL_FUNC_GRP(127, 0),
+       AMD_PINCTRL_FUNC_GRP(127, 1),
+       AMD_PINCTRL_FUNC_GRP(127, 2),
+       AMD_PINCTRL_FUNC_GRP(127, 3),
+       AMD_PINCTRL_FUNC_GRP(128, 0),
+       AMD_PINCTRL_FUNC_GRP(128, 1),
+       AMD_PINCTRL_FUNC_GRP(128, 2),
+       AMD_PINCTRL_FUNC_GRP(128, 3),
+       AMD_PINCTRL_FUNC_GRP(129, 0),
+       AMD_PINCTRL_FUNC_GRP(129, 1),
+       AMD_PINCTRL_FUNC_GRP(129, 2),
+       AMD_PINCTRL_FUNC_GRP(129, 3),
+       AMD_PINCTRL_FUNC_GRP(130, 0),
+       AMD_PINCTRL_FUNC_GRP(130, 1),
+       AMD_PINCTRL_FUNC_GRP(130, 2),
+       AMD_PINCTRL_FUNC_GRP(130, 3),
+       AMD_PINCTRL_FUNC_GRP(131, 0),
+       AMD_PINCTRL_FUNC_GRP(131, 1),
+       AMD_PINCTRL_FUNC_GRP(131, 2),
+       AMD_PINCTRL_FUNC_GRP(131, 3),
+       AMD_PINCTRL_FUNC_GRP(132, 0),
+       AMD_PINCTRL_FUNC_GRP(132, 1),
+       AMD_PINCTRL_FUNC_GRP(132, 2),
+       AMD_PINCTRL_FUNC_GRP(132, 3),
+       AMD_PINCTRL_FUNC_GRP(133, 0),
+       AMD_PINCTRL_FUNC_GRP(133, 1),
+       AMD_PINCTRL_FUNC_GRP(133, 2),
+       AMD_PINCTRL_FUNC_GRP(133, 3),
+       AMD_PINCTRL_FUNC_GRP(134, 0),
+       AMD_PINCTRL_FUNC_GRP(134, 1),
+       AMD_PINCTRL_FUNC_GRP(134, 2),
+       AMD_PINCTRL_FUNC_GRP(134, 3),
+       AMD_PINCTRL_FUNC_GRP(135, 0),
+       AMD_PINCTRL_FUNC_GRP(135, 1),
+       AMD_PINCTRL_FUNC_GRP(135, 2),
+       AMD_PINCTRL_FUNC_GRP(135, 3),
+       AMD_PINCTRL_FUNC_GRP(136, 0),
+       AMD_PINCTRL_FUNC_GRP(136, 1),
+       AMD_PINCTRL_FUNC_GRP(136, 2),
+       AMD_PINCTRL_FUNC_GRP(136, 3),
+       AMD_PINCTRL_FUNC_GRP(137, 0),
+       AMD_PINCTRL_FUNC_GRP(137, 1),
+       AMD_PINCTRL_FUNC_GRP(137, 2),
+       AMD_PINCTRL_FUNC_GRP(137, 3),
+       AMD_PINCTRL_FUNC_GRP(138, 0),
+       AMD_PINCTRL_FUNC_GRP(138, 1),
+       AMD_PINCTRL_FUNC_GRP(138, 2),
+       AMD_PINCTRL_FUNC_GRP(138, 3),
+       AMD_PINCTRL_FUNC_GRP(139, 0),
+       AMD_PINCTRL_FUNC_GRP(139, 1),
+       AMD_PINCTRL_FUNC_GRP(139, 2),
+       AMD_PINCTRL_FUNC_GRP(139, 3),
+       AMD_PINCTRL_FUNC_GRP(140, 0),
+       AMD_PINCTRL_FUNC_GRP(140, 1),
+       AMD_PINCTRL_FUNC_GRP(140, 2),
+       AMD_PINCTRL_FUNC_GRP(140, 3),
+       AMD_PINCTRL_FUNC_GRP(141, 0),
+       AMD_PINCTRL_FUNC_GRP(141, 1),
+       AMD_PINCTRL_FUNC_GRP(141, 2),
+       AMD_PINCTRL_FUNC_GRP(141, 3),
+       AMD_PINCTRL_FUNC_GRP(142, 0),
+       AMD_PINCTRL_FUNC_GRP(142, 1),
+       AMD_PINCTRL_FUNC_GRP(142, 2),
+       AMD_PINCTRL_FUNC_GRP(142, 3),
+       AMD_PINCTRL_FUNC_GRP(143, 0),
+       AMD_PINCTRL_FUNC_GRP(143, 1),
+       AMD_PINCTRL_FUNC_GRP(143, 2),
+       AMD_PINCTRL_FUNC_GRP(143, 3),
+       AMD_PINCTRL_FUNC_GRP(144, 0),
+       AMD_PINCTRL_FUNC_GRP(144, 1),
+       AMD_PINCTRL_FUNC_GRP(144, 2),
+       AMD_PINCTRL_FUNC_GRP(144, 3),
+
+       PINCTRL_PINGROUP("i2c0", AMD_PINS(145, 146), 2),
+       PINCTRL_PINGROUP("i2c1", AMD_PINS(147, 148), 2),
+       PINCTRL_PINGROUP("i2c2", AMD_PINS(113, 114), 2),
+       PINCTRL_PINGROUP("i2c3", AMD_PINS(19, 20), 2),
+       PINCTRL_PINGROUP("uart0", AMD_PINS(135, 136, 137, 138, 139), 5),
+       PINCTRL_PINGROUP("uart1", AMD_PINS(140, 141, 142, 143, 144), 5),
+};
 
-static const unsigned uart0_pins[] = {135, 136, 137, 138, 139};
-static const unsigned uart1_pins[] = {140, 141, 142, 143, 144};
+#define AMD_PMUX_FUNC(_number) {                                               \
+       .name = "iomux_gpio_"#_number,                                          \
+       .groups = {                                                             \
+               "IMX_F0_GPIO"#_number, "IMX_F1_GPIO"#_number,                   \
+               "IMX_F2_GPIO"#_number, "IMX_F3_GPIO"#_number,                   \
+       },                                                                      \
+       .index = _number,                                                       \
+       .ngroups = NSELECTS,                                                    \
+}
 
-static const struct amd_pingroup kerncz_groups[] = {
-       {
-               .name = "i2c0",
-               .pins = i2c0_pins,
-               .npins = 2,
-       },
-       {
-               .name = "i2c1",
-               .pins = i2c1_pins,
-               .npins = 2,
-       },
-       {
-               .name = "i2c2",
-               .pins = i2c2_pins,
-               .npins = 2,
-       },
-       {
-               .name = "i2c3",
-               .pins = i2c3_pins,
-               .npins = 2,
-       },
-       {
-               .name = "uart0",
-               .pins = uart0_pins,
-               .npins = 5,
-       },
-       {
-               .name = "uart1",
-               .pins = uart1_pins,
-               .npins = 5,
-       },
+static const struct amd_function pmx_functions[] = {
+       AMD_PMUX_FUNC(0),
+       AMD_PMUX_FUNC(1),
+       AMD_PMUX_FUNC(2),
+       AMD_PMUX_FUNC(3),
+       AMD_PMUX_FUNC(4),
+       AMD_PMUX_FUNC(5),
+       AMD_PMUX_FUNC(6),
+       AMD_PMUX_FUNC(7),
+       AMD_PMUX_FUNC(8),
+       AMD_PMUX_FUNC(9),
+       AMD_PMUX_FUNC(10),
+       AMD_PMUX_FUNC(11),
+       AMD_PMUX_FUNC(12),
+       AMD_PMUX_FUNC(13),
+       AMD_PMUX_FUNC(14),
+       AMD_PMUX_FUNC(15),
+       AMD_PMUX_FUNC(16),
+       AMD_PMUX_FUNC(17),
+       AMD_PMUX_FUNC(18),
+       AMD_PMUX_FUNC(19),
+       AMD_PMUX_FUNC(20),
+       AMD_PMUX_FUNC(21),
+       AMD_PMUX_FUNC(22),
+       AMD_PMUX_FUNC(23),
+       AMD_PMUX_FUNC(24),
+       AMD_PMUX_FUNC(25),
+       AMD_PMUX_FUNC(26),
+       AMD_PMUX_FUNC(27),
+       AMD_PMUX_FUNC(28),
+       AMD_PMUX_FUNC(29),
+       AMD_PMUX_FUNC(30),
+       AMD_PMUX_FUNC(31),
+       AMD_PMUX_FUNC(32),
+       AMD_PMUX_FUNC(33),
+       AMD_PMUX_FUNC(34),
+       AMD_PMUX_FUNC(35),
+       AMD_PMUX_FUNC(36),
+       AMD_PMUX_FUNC(37),
+       AMD_PMUX_FUNC(38),
+       AMD_PMUX_FUNC(39),
+       AMD_PMUX_FUNC(40),
+       AMD_PMUX_FUNC(41),
+       AMD_PMUX_FUNC(42),
+       AMD_PMUX_FUNC(43),
+       AMD_PMUX_FUNC(44),
+       AMD_PMUX_FUNC(45),
+       AMD_PMUX_FUNC(46),
+       AMD_PMUX_FUNC(47),
+       AMD_PMUX_FUNC(48),
+       AMD_PMUX_FUNC(49),
+       AMD_PMUX_FUNC(50),
+       AMD_PMUX_FUNC(51),
+       AMD_PMUX_FUNC(52),
+       AMD_PMUX_FUNC(53),
+       AMD_PMUX_FUNC(54),
+       AMD_PMUX_FUNC(55),
+       AMD_PMUX_FUNC(56),
+       AMD_PMUX_FUNC(57),
+       AMD_PMUX_FUNC(58),
+       AMD_PMUX_FUNC(59),
+       AMD_PMUX_FUNC(60),
+       AMD_PMUX_FUNC(61),
+       AMD_PMUX_FUNC(62),
+       AMD_PMUX_FUNC(64),
+       AMD_PMUX_FUNC(65),
+       AMD_PMUX_FUNC(66),
+       AMD_PMUX_FUNC(67),
+       AMD_PMUX_FUNC(68),
+       AMD_PMUX_FUNC(69),
+       AMD_PMUX_FUNC(70),
+       AMD_PMUX_FUNC(71),
+       AMD_PMUX_FUNC(72),
+       AMD_PMUX_FUNC(73),
+       AMD_PMUX_FUNC(74),
+       AMD_PMUX_FUNC(75),
+       AMD_PMUX_FUNC(76),
+       AMD_PMUX_FUNC(77),
+       AMD_PMUX_FUNC(78),
+       AMD_PMUX_FUNC(79),
+       AMD_PMUX_FUNC(80),
+       AMD_PMUX_FUNC(81),
+       AMD_PMUX_FUNC(82),
+       AMD_PMUX_FUNC(83),
+       AMD_PMUX_FUNC(84),
+       AMD_PMUX_FUNC(85),
+       AMD_PMUX_FUNC(86),
+       AMD_PMUX_FUNC(87),
+       AMD_PMUX_FUNC(88),
+       AMD_PMUX_FUNC(89),
+       AMD_PMUX_FUNC(90),
+       AMD_PMUX_FUNC(91),
+       AMD_PMUX_FUNC(92),
+       AMD_PMUX_FUNC(93),
+       AMD_PMUX_FUNC(94),
+       AMD_PMUX_FUNC(95),
+       AMD_PMUX_FUNC(96),
+       AMD_PMUX_FUNC(97),
+       AMD_PMUX_FUNC(98),
+       AMD_PMUX_FUNC(99),
+       AMD_PMUX_FUNC(100),
+       AMD_PMUX_FUNC(101),
+       AMD_PMUX_FUNC(102),
+       AMD_PMUX_FUNC(103),
+       AMD_PMUX_FUNC(104),
+       AMD_PMUX_FUNC(105),
+       AMD_PMUX_FUNC(106),
+       AMD_PMUX_FUNC(107),
+       AMD_PMUX_FUNC(108),
+       AMD_PMUX_FUNC(109),
+       AMD_PMUX_FUNC(110),
+       AMD_PMUX_FUNC(111),
+       AMD_PMUX_FUNC(112),
+       AMD_PMUX_FUNC(113),
+       AMD_PMUX_FUNC(114),
+       AMD_PMUX_FUNC(115),
+       AMD_PMUX_FUNC(116),
+       AMD_PMUX_FUNC(117),
+       AMD_PMUX_FUNC(118),
+       AMD_PMUX_FUNC(119),
+       AMD_PMUX_FUNC(120),
+       AMD_PMUX_FUNC(121),
+       AMD_PMUX_FUNC(122),
+       AMD_PMUX_FUNC(123),
+       AMD_PMUX_FUNC(124),
+       AMD_PMUX_FUNC(125),
+       AMD_PMUX_FUNC(126),
+       AMD_PMUX_FUNC(127),
+       AMD_PMUX_FUNC(128),
+       AMD_PMUX_FUNC(129),
+       AMD_PMUX_FUNC(130),
+       AMD_PMUX_FUNC(131),
+       AMD_PMUX_FUNC(132),
+       AMD_PMUX_FUNC(133),
+       AMD_PMUX_FUNC(134),
+       AMD_PMUX_FUNC(135),
+       AMD_PMUX_FUNC(136),
+       AMD_PMUX_FUNC(137),
+       AMD_PMUX_FUNC(138),
+       AMD_PMUX_FUNC(139),
+       AMD_PMUX_FUNC(140),
+       AMD_PMUX_FUNC(141),
+       AMD_PMUX_FUNC(142),
+       AMD_PMUX_FUNC(143),
+       AMD_PMUX_FUNC(144),
 };
 
 #endif
index 517f2a6330ad90fd56f1596a0e989c979f206497..82b921fd630d5261d8f912c8e294cc3a1652dbfc 100644 (file)
@@ -237,8 +237,6 @@ static void atmel_gpio_irq_unmask(struct irq_data *d)
                         BIT(pin->line));
 }
 
-#ifdef CONFIG_PM_SLEEP
-
 static int atmel_gpio_irq_set_wake(struct irq_data *d, unsigned int on)
 {
        struct atmel_pioctrl *atmel_pioctrl = irq_data_get_irq_chip_data(d);
@@ -255,9 +253,6 @@ static int atmel_gpio_irq_set_wake(struct irq_data *d, unsigned int on)
 
        return 0;
 }
-#else
-#define atmel_gpio_irq_set_wake NULL
-#endif /* CONFIG_PM_SLEEP */
 
 static struct irq_chip atmel_gpio_irq_chip = {
        .name           = "GPIO",
@@ -265,7 +260,7 @@ static struct irq_chip atmel_gpio_irq_chip = {
        .irq_mask       = atmel_gpio_irq_mask,
        .irq_unmask     = atmel_gpio_irq_unmask,
        .irq_set_type   = atmel_gpio_irq_set_type,
-       .irq_set_wake   = atmel_gpio_irq_set_wake,
+       .irq_set_wake   = pm_sleep_ptr(atmel_gpio_irq_set_wake),
 };
 
 static int atmel_gpio_to_irq(struct gpio_chip *chip, unsigned int offset)
index d91a010e65f5c5272980fd05c1382e8a36a9f2e0..5634fa063ebfe9eb72249f966fce0d0c0f7cb9b0 100644 (file)
@@ -1615,8 +1615,6 @@ static void gpio_irq_ack(struct irq_data *d)
        /* the interrupt is already cleared before by reading ISR */
 }
 
-#ifdef CONFIG_PM
-
 static u32 wakeups[MAX_GPIO_BANKS];
 static u32 backups[MAX_GPIO_BANKS];
 
@@ -1683,10 +1681,6 @@ void at91_pinctrl_gpio_resume(void)
        }
 }
 
-#else
-#define gpio_irq_set_wake      NULL
-#endif /* CONFIG_PM */
-
 static void gpio_irq_handler(struct irq_desc *desc)
 {
        struct irq_chip *chip = irq_desc_get_chip(desc);
@@ -1741,14 +1735,14 @@ static int at91_gpio_of_irq_setup(struct platform_device *pdev,
        gpio_irqchip->irq_disable = gpio_irq_mask;
        gpio_irqchip->irq_mask = gpio_irq_mask;
        gpio_irqchip->irq_unmask = gpio_irq_unmask;
-       gpio_irqchip->irq_set_wake = gpio_irq_set_wake;
+       gpio_irqchip->irq_set_wake = pm_ptr(gpio_irq_set_wake);
        gpio_irqchip->irq_set_type = at91_gpio->ops->irq_type;
 
        /* Disable irqs of this PIO controller */
        writel_relaxed(~0, at91_gpio->regbase + PIO_IDR);
 
        /*
-        * Let the generic code handle this edge IRQ, the the chained
+        * Let the generic code handle this edge IRQ, the chained
         * handler will perform the actual work of handling the parent
         * interrupt.
         */
index 207cbae3a7bf9f44cb3f75ac34d33d38d05fcae9..7ab20ac15391e842015b4414aba913edbf777197 100644 (file)
@@ -73,7 +73,7 @@ static const struct pinctrl_pin_desc axp209_pins[] = {
        PINCTRL_PIN(2, "GPIO2"),
 };
 
-static const struct pinctrl_pin_desc axp813_pins[] = {
+static const struct pinctrl_pin_desc axp22x_pins[] = {
        PINCTRL_PIN(0, "GPIO0"),
        PINCTRL_PIN(1, "GPIO1"),
 };
@@ -87,9 +87,16 @@ static const struct axp20x_pctrl_desc axp20x_data = {
        .adc_mux = AXP20X_MUX_ADC,
 };
 
+static const struct axp20x_pctrl_desc axp22x_data = {
+       .pins   = axp22x_pins,
+       .npins  = ARRAY_SIZE(axp22x_pins),
+       .ldo_mask = BIT(0) | BIT(1),
+       .gpio_status_offset = 0,
+};
+
 static const struct axp20x_pctrl_desc axp813_data = {
-       .pins   = axp813_pins,
-       .npins  = ARRAY_SIZE(axp813_pins),
+       .pins   = axp22x_pins,
+       .npins  = ARRAY_SIZE(axp22x_pins),
        .ldo_mask = BIT(0) | BIT(1),
        .adc_mask = BIT(0),
        .gpio_status_offset = 0,
@@ -388,6 +395,7 @@ static int axp20x_build_funcs_groups(struct platform_device *pdev)
 
 static const struct of_device_id axp20x_pctl_match[] = {
        { .compatible = "x-powers,axp209-gpio", .data = &axp20x_data, },
+       { .compatible = "x-powers,axp221-gpio", .data = &axp22x_data, },
        { .compatible = "x-powers,axp813-gpio", .data = &axp813_data, },
        { }
 };
index 1ca11616db742c55b1302412058ec0d03ec7357e..3a9ee9c8af11676aaaed388a3cc1ef43c9061e10 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/pinctrl/pinconf-generic.h>
 #include <linux/platform_device.h>
 #include <linux/regmap.h>
+#include <linux/seq_file.h>
 #include <linux/slab.h>
 
 #include "core.h"
@@ -135,7 +136,6 @@ struct ingenic_pinctrl {
 struct ingenic_gpio_chip {
        struct ingenic_pinctrl *jzpc;
        struct gpio_chip gc;
-       struct irq_chip irq_chip;
        unsigned int irq, reg_base;
 };
 
@@ -3393,7 +3393,7 @@ static void ingenic_gpio_irq_mask(struct irq_data *irqd)
 {
        struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
        struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
-       int irq = irqd->hwirq;
+       irq_hw_number_t irq = irqd_to_hwirq(irqd);
 
        if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
                ingenic_gpio_set_bit(jzgc, GPIO_MSK, irq, true);
@@ -3405,7 +3405,7 @@ static void ingenic_gpio_irq_unmask(struct irq_data *irqd)
 {
        struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
        struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
-       int irq = irqd->hwirq;
+       irq_hw_number_t irq = irqd_to_hwirq(irqd);
 
        if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
                ingenic_gpio_set_bit(jzgc, GPIO_MSK, irq, false);
@@ -3417,7 +3417,9 @@ static void ingenic_gpio_irq_enable(struct irq_data *irqd)
 {
        struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
        struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
-       int irq = irqd->hwirq;
+       irq_hw_number_t irq = irqd_to_hwirq(irqd);
+
+       gpiochip_enable_irq(gc, irq);
 
        if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
                ingenic_gpio_set_bit(jzgc, JZ4770_GPIO_INT, irq, true);
@@ -3433,7 +3435,7 @@ static void ingenic_gpio_irq_disable(struct irq_data *irqd)
 {
        struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
        struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
-       int irq = irqd->hwirq;
+       irq_hw_number_t irq = irqd_to_hwirq(irqd);
 
        ingenic_gpio_irq_mask(irqd);
 
@@ -3443,13 +3445,15 @@ static void ingenic_gpio_irq_disable(struct irq_data *irqd)
                ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_SELECT, irq, false);
        else
                ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPIER, irq, false);
+
+       gpiochip_disable_irq(gc, irq);
 }
 
 static void ingenic_gpio_irq_ack(struct irq_data *irqd)
 {
        struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
        struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
-       int irq = irqd->hwirq;
+       irq_hw_number_t irq = irqd_to_hwirq(irqd);
        bool high;
 
        if ((irqd_get_trigger_type(irqd) == IRQ_TYPE_EDGE_BOTH) &&
@@ -3477,6 +3481,7 @@ static int ingenic_gpio_irq_set_type(struct irq_data *irqd, unsigned int type)
 {
        struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
        struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
+       irq_hw_number_t irq = irqd_to_hwirq(irqd);
 
        switch (type) {
        case IRQ_TYPE_EDGE_BOTH:
@@ -3498,12 +3503,12 @@ static int ingenic_gpio_irq_set_type(struct irq_data *irqd, unsigned int type)
                 * best we can do is to set up a single-edge interrupt and then
                 * switch to the opposing edge when ACKing the interrupt.
                 */
-               bool high = ingenic_gpio_get_value(jzgc, irqd->hwirq);
+               bool high = ingenic_gpio_get_value(jzgc, irq);
 
                type = high ? IRQ_TYPE_LEVEL_LOW : IRQ_TYPE_LEVEL_HIGH;
        }
 
-       irq_set_type(jzgc, irqd->hwirq, type);
+       irq_set_type(jzgc, irq, type);
        return 0;
 }
 
@@ -3668,22 +3673,45 @@ static const struct pinctrl_ops ingenic_pctlops = {
 static int ingenic_gpio_irq_request(struct irq_data *data)
 {
        struct gpio_chip *gpio_chip = irq_data_get_irq_chip_data(data);
+       irq_hw_number_t irq = irqd_to_hwirq(data);
        int ret;
 
-       ret = ingenic_gpio_direction_input(gpio_chip, data->hwirq);
+       ret = ingenic_gpio_direction_input(gpio_chip, irq);
        if (ret)
                return ret;
 
-       return gpiochip_reqres_irq(gpio_chip, data->hwirq);
+       return gpiochip_reqres_irq(gpio_chip, irq);
 }
 
 static void ingenic_gpio_irq_release(struct irq_data *data)
+{
+       struct gpio_chip *gpio_chip = irq_data_get_irq_chip_data(data);
+       irq_hw_number_t irq = irqd_to_hwirq(data);
+
+       return gpiochip_relres_irq(gpio_chip, irq);
+}
+
+static void ingenic_gpio_irq_print_chip(struct irq_data *data, struct seq_file *p)
 {
        struct gpio_chip *gpio_chip = irq_data_get_irq_chip_data(data);
 
-       return gpiochip_relres_irq(gpio_chip, data->hwirq);
+       seq_printf(p, "%s", gpio_chip->label);
 }
 
+static const struct irq_chip ingenic_gpio_irqchip = {
+       .irq_enable             = ingenic_gpio_irq_enable,
+       .irq_disable            = ingenic_gpio_irq_disable,
+       .irq_unmask             = ingenic_gpio_irq_unmask,
+       .irq_mask               = ingenic_gpio_irq_mask,
+       .irq_ack                = ingenic_gpio_irq_ack,
+       .irq_set_type           = ingenic_gpio_irq_set_type,
+       .irq_set_wake           = ingenic_gpio_irq_set_wake,
+       .irq_request_resources  = ingenic_gpio_irq_request,
+       .irq_release_resources  = ingenic_gpio_irq_release,
+       .irq_print_chip         = ingenic_gpio_irq_print_chip,
+       .flags                  = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE,
+};
+
 static int ingenic_pinmux_set_pin_fn(struct ingenic_pinctrl *jzpc,
                int pin, int func)
 {
@@ -4172,20 +4200,8 @@ static int __init ingenic_gpio_probe(struct ingenic_pinctrl *jzpc,
        if (!jzgc->irq)
                return -EINVAL;
 
-       jzgc->irq_chip.name = jzgc->gc.label;
-       jzgc->irq_chip.irq_enable = ingenic_gpio_irq_enable;
-       jzgc->irq_chip.irq_disable = ingenic_gpio_irq_disable;
-       jzgc->irq_chip.irq_unmask = ingenic_gpio_irq_unmask;
-       jzgc->irq_chip.irq_mask = ingenic_gpio_irq_mask;
-       jzgc->irq_chip.irq_ack = ingenic_gpio_irq_ack;
-       jzgc->irq_chip.irq_set_type = ingenic_gpio_irq_set_type;
-       jzgc->irq_chip.irq_set_wake = ingenic_gpio_irq_set_wake;
-       jzgc->irq_chip.irq_request_resources = ingenic_gpio_irq_request;
-       jzgc->irq_chip.irq_release_resources = ingenic_gpio_irq_release;
-       jzgc->irq_chip.flags = IRQCHIP_MASK_ON_SUSPEND;
-
        girq = &jzgc->gc.irq;
-       girq->chip = &jzgc->irq_chip;
+       gpio_irq_chip_set_chip(girq, &ingenic_gpio_irqchip);
        girq->parent_handler = ingenic_gpio_irq_handler;
        girq->num_parents = 1;
        girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents),
index 771dd1f4fbe04858586368081469470540096cdc..c5fd154990c8b4b61bd52ca5b733ad9a930738a8 100644 (file)
@@ -1944,6 +1944,7 @@ static const struct of_device_id ocelot_pinctrl_of_match[] = {
        { .compatible = "microchip,lan966x-pinctrl", .data = &lan966x_desc },
        {},
 };
+MODULE_DEVICE_TABLE(of, ocelot_pinctrl_of_match);
 
 static struct regmap *ocelot_pinctrl_create_pincfg(struct platform_device *pdev,
                                                   const struct ocelot_pinctrl *info)
@@ -2050,4 +2051,5 @@ static struct platform_driver ocelot_pinctrl_driver = {
        },
        .probe = ocelot_pinctrl_probe,
 };
-builtin_platform_driver(ocelot_pinctrl_driver);
+module_platform_driver(ocelot_pinctrl_driver);
+MODULE_LICENSE("Dual MIT/GPL");
index 2a86c1035cc88cf415a406e0d85893855705ac9c..3eb40e230d981238ae03952b449ebd5b40266f4c 100644 (file)
@@ -207,6 +207,7 @@ struct starfive_pinctrl {
        void __iomem *base;
        void __iomem *padctl;
        struct pinctrl_dev *pctl;
+       struct mutex mutex; /* serialize adding groups and functions */
 };
 
 static inline unsigned int starfive_pin_to_gpio(const struct starfive_pinctrl *sfp,
@@ -522,6 +523,7 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
 
        nmaps = 0;
        ngroups = 0;
+       mutex_lock(&sfp->mutex);
        for_each_child_of_node(np, child) {
                int npins;
                int i;
@@ -615,12 +617,14 @@ static int starfive_dt_node_to_map(struct pinctrl_dev *pctldev,
 
        *maps = map;
        *num_maps = nmaps;
+       mutex_unlock(&sfp->mutex);
        return 0;
 
 put_child:
        of_node_put(child);
 free_map:
        pinctrl_utils_free_map(pctldev, map, nmaps);
+       mutex_unlock(&sfp->mutex);
        return ret;
 }
 
@@ -1267,6 +1271,7 @@ static int starfive_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, sfp);
        sfp->gc.parent = dev;
        raw_spin_lock_init(&sfp->lock);
+       mutex_init(&sfp->mutex);
 
        ret = devm_pinctrl_register_and_init(dev, &starfive_desc, sfp, &sfp->pctl);
        if (ret)
index e14012209992f997d086e15fc2462b08bbd6e938..7d2fbf8a02cd667b2e3ef4161fa3544027b5eb0a 100644 (file)
@@ -163,6 +163,8 @@ static const char *zynqmp_pmux_get_function_name(struct pinctrl_dev *pctldev,
  * @num_groups:        Number of function groups.
  *
  * Get function's group count and group names.
+ *
+ * Return: 0
  */
 static int zynqmp_pmux_get_function_groups(struct pinctrl_dev *pctldev,
                                           unsigned int selector,
@@ -410,6 +412,10 @@ static int zynqmp_pinconf_cfg_set(struct pinctrl_dev *pctldev,
 
                        break;
                case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
+                       param = PM_PINCTRL_CONFIG_TRI_STATE;
+                       arg = PM_PINCTRL_TRI_STATE_ENABLE;
+                       ret = zynqmp_pm_pinctrl_set_config(pin, param, arg);
+                       break;
                case PIN_CONFIG_MODE_LOW_POWER:
                        /*
                         * These cases are mentioned in dts but configurable
@@ -418,6 +424,11 @@ static int zynqmp_pinconf_cfg_set(struct pinctrl_dev *pctldev,
                         */
                        ret = 0;
                        break;
+               case PIN_CONFIG_OUTPUT_ENABLE:
+                       param = PM_PINCTRL_CONFIG_TRI_STATE;
+                       arg = PM_PINCTRL_TRI_STATE_DISABLE;
+                       ret = zynqmp_pm_pinctrl_set_config(pin, param, arg);
+                       break;
                default:
                        dev_warn(pctldev->dev,
                                 "unsupported configuration parameter '%u'\n",
index 3daeb97723918f0a3dea6d98d9c46fbdc214bfe0..f415c13caae044ad387b7c4c85ca7bfa3f1862cf 100644 (file)
@@ -113,6 +113,14 @@ config PINCTRL_MSM8X74
          This is the pinctrl, pinmux, pinconf and gpiolib driver for the
          Qualcomm TLMM block found in the Qualcomm 8974 platform.
 
+config PINCTRL_MSM8909
+       tristate "Qualcomm 8909 pin controller driver"
+       depends on OF
+       depends on PINCTRL_MSM
+       help
+         This is the pinctrl, pinmux, pinconf and gpiolib driver for the
+         Qualcomm TLMM block found on the Qualcomm MSM8909 platform.
+
 config PINCTRL_MSM8916
        tristate "Qualcomm 8916 pin controller driver"
        depends on OF
@@ -320,6 +328,15 @@ config PINCTRL_SM6350
         Qualcomm Technologies Inc TLMM block found on the Qualcomm
         Technologies Inc SM6350 platform.
 
+config PINCTRL_SM6375
+       tristate "Qualcomm Technologies Inc SM6375 pin controller driver"
+       depends on GPIOLIB && OF
+       depends on PINCTRL_MSM
+       help
+        This is the pinctrl, pinmux, pinconf and gpiolib driver for the
+        Qualcomm Technologies Inc TLMM block found on the Qualcomm
+        Technologies Inc SM6375 platform.
+
 config PINCTRL_SDX65
        tristate "Qualcomm Technologies Inc SDX65 pin controller driver"
        depends on GPIOLIB && OF
@@ -367,7 +384,7 @@ config PINCTRL_SM8350
 config PINCTRL_SM8450
        tristate "Qualcomm Technologies Inc SM8450 pin controller driver"
        depends on GPIOLIB && OF
-       select PINCTRL_MSM
+       depends on PINCTRL_MSM
        help
          This is the pinctrl, pinmux, pinconf and gpiolib driver for the
          Qualcomm Technologies Inc TLMM block found on the Qualcomm
index 4f0ee7597f81c1fe9b5a7da7680de6460f5b4787..fbd64853a24db299974de85138a65318650cdc03 100644 (file)
@@ -11,6 +11,7 @@ obj-$(CONFIG_PINCTRL_MSM8226) += pinctrl-msm8226.o
 obj-$(CONFIG_PINCTRL_MSM8660)  += pinctrl-msm8660.o
 obj-$(CONFIG_PINCTRL_MSM8960)  += pinctrl-msm8960.o
 obj-$(CONFIG_PINCTRL_MSM8X74)  += pinctrl-msm8x74.o
+obj-$(CONFIG_PINCTRL_MSM8909)  += pinctrl-msm8909.o
 obj-$(CONFIG_PINCTRL_MSM8916)  += pinctrl-msm8916.o
 obj-$(CONFIG_PINCTRL_MSM8953)  += pinctrl-msm8953.o
 obj-$(CONFIG_PINCTRL_MSM8976)  += pinctrl-msm8976.o
@@ -37,6 +38,7 @@ obj-$(CONFIG_PINCTRL_SDX55) += pinctrl-sdx55.o
 obj-$(CONFIG_PINCTRL_SM6115) += pinctrl-sm6115.o
 obj-$(CONFIG_PINCTRL_SM6125) += pinctrl-sm6125.o
 obj-$(CONFIG_PINCTRL_SM6350) += pinctrl-sm6350.o
+obj-$(CONFIG_PINCTRL_SM6375) += pinctrl-sm6375.o
 obj-$(CONFIG_PINCTRL_SDX65) += pinctrl-sdx65.o
 obj-$(CONFIG_PINCTRL_SM8150) += pinctrl-sm8150.o
 obj-$(CONFIG_PINCTRL_SM8250) += pinctrl-sm8250.o
index 74810ec4df4478eb9a80dba79da34ecaad06c5c8..e97ce45b6d538aacbdf5837623730c17c3045c3f 100644 (file)
@@ -401,7 +401,7 @@ int lpi_pinctrl_probe(struct platform_device *pdev)
                return dev_err_probe(dev, PTR_ERR(pctrl->slew_base),
                                     "Slew resource not provided\n");
 
-       if (data->is_clk_optional)
+       if (of_property_read_bool(dev->of_node, "qcom,adsp-bypass-mode"))
                ret = devm_clk_bulk_get_optional(dev, MAX_LPI_NUM_CLKS, pctrl->clks);
        else
                ret = devm_clk_bulk_get(dev, MAX_LPI_NUM_CLKS, pctrl->clks);
index 759d5d8da562ae197ec0599b3ed50352e4e9fc4c..afbac2a6c82ca33e68434bc656a6938dc4a80a7b 100644 (file)
@@ -77,7 +77,6 @@ struct lpi_pinctrl_variant_data {
        int ngroups;
        const struct lpi_function *functions;
        int nfunctions;
-       bool is_clk_optional;
 };
 
 int lpi_pinctrl_probe(struct platform_device *pdev);
diff --git a/drivers/pinctrl/qcom/pinctrl-msm8909.c b/drivers/pinctrl/qcom/pinctrl-msm8909.c
new file mode 100644 (file)
index 0000000..6dd15b9
--- /dev/null
@@ -0,0 +1,956 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Copyright (C) 2022, Kernkonzept GmbH.
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/pinctrl/pinctrl.h>
+
+#include "pinctrl-msm.h"
+
+#define FUNCTION(fname)                                        \
+       [msm_mux_##fname] = {                           \
+               .name = #fname,                         \
+               .groups = fname##_groups,               \
+               .ngroups = ARRAY_SIZE(fname##_groups),  \
+       }
+
+#define REG_SIZE 0x1000
+#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9)       \
+       {                                               \
+               .name = "gpio" #id,                     \
+               .pins = gpio##id##_pins,                \
+               .npins = ARRAY_SIZE(gpio##id##_pins),   \
+               .funcs = (int[]){                       \
+                       msm_mux_gpio,                   \
+                       msm_mux_##f1,                   \
+                       msm_mux_##f2,                   \
+                       msm_mux_##f3,                   \
+                       msm_mux_##f4,                   \
+                       msm_mux_##f5,                   \
+                       msm_mux_##f6,                   \
+                       msm_mux_##f7,                   \
+                       msm_mux_##f8,                   \
+                       msm_mux_##f9,                   \
+               },                                      \
+               .nfuncs = 10,                           \
+               .ctl_reg = REG_SIZE * id,               \
+               .io_reg = 0x4 + REG_SIZE * id,          \
+               .intr_cfg_reg = 0x8 + REG_SIZE * id,    \
+               .intr_status_reg = 0xc + REG_SIZE * id, \
+               .intr_target_reg = 0x8 + REG_SIZE * id, \
+               .mux_bit = 2,                           \
+               .pull_bit = 0,                          \
+               .drv_bit = 6,                           \
+               .oe_bit = 9,                            \
+               .in_bit = 0,                            \
+               .out_bit = 1,                           \
+               .intr_enable_bit = 0,                   \
+               .intr_status_bit = 0,                   \
+               .intr_target_bit = 5,                   \
+               .intr_target_kpss_val = 4,              \
+               .intr_raw_status_bit = 4,               \
+               .intr_polarity_bit = 1,                 \
+               .intr_detection_bit = 2,                \
+               .intr_detection_width = 2,              \
+       }
+
+#define SDC_QDSD_PINGROUP(pg_name, ctl, pull, drv)     \
+       {                                               \
+               .name = #pg_name,                       \
+               .pins = pg_name##_pins,                 \
+               .npins = ARRAY_SIZE(pg_name##_pins),    \
+               .ctl_reg = ctl,                         \
+               .io_reg = 0,                            \
+               .intr_cfg_reg = 0,                      \
+               .intr_status_reg = 0,                   \
+               .intr_target_reg = 0,                   \
+               .mux_bit = -1,                          \
+               .pull_bit = pull,                       \
+               .drv_bit = drv,                         \
+               .oe_bit = -1,                           \
+               .in_bit = -1,                           \
+               .out_bit = -1,                          \
+               .intr_enable_bit = -1,                  \
+               .intr_status_bit = -1,                  \
+               .intr_target_bit = -1,                  \
+               .intr_raw_status_bit = -1,              \
+               .intr_polarity_bit = -1,                \
+               .intr_detection_bit = -1,               \
+               .intr_detection_width = -1,             \
+       }
+static const struct pinctrl_pin_desc msm8909_pins[] = {
+       PINCTRL_PIN(0, "GPIO_0"),
+       PINCTRL_PIN(1, "GPIO_1"),
+       PINCTRL_PIN(2, "GPIO_2"),
+       PINCTRL_PIN(3, "GPIO_3"),
+       PINCTRL_PIN(4, "GPIO_4"),
+       PINCTRL_PIN(5, "GPIO_5"),
+       PINCTRL_PIN(6, "GPIO_6"),
+       PINCTRL_PIN(7, "GPIO_7"),
+       PINCTRL_PIN(8, "GPIO_8"),
+       PINCTRL_PIN(9, "GPIO_9"),
+       PINCTRL_PIN(10, "GPIO_10"),
+       PINCTRL_PIN(11, "GPIO_11"),
+       PINCTRL_PIN(12, "GPIO_12"),
+       PINCTRL_PIN(13, "GPIO_13"),
+       PINCTRL_PIN(14, "GPIO_14"),
+       PINCTRL_PIN(15, "GPIO_15"),
+       PINCTRL_PIN(16, "GPIO_16"),
+       PINCTRL_PIN(17, "GPIO_17"),
+       PINCTRL_PIN(18, "GPIO_18"),
+       PINCTRL_PIN(19, "GPIO_19"),
+       PINCTRL_PIN(20, "GPIO_20"),
+       PINCTRL_PIN(21, "GPIO_21"),
+       PINCTRL_PIN(22, "GPIO_22"),
+       PINCTRL_PIN(23, "GPIO_23"),
+       PINCTRL_PIN(24, "GPIO_24"),
+       PINCTRL_PIN(25, "GPIO_25"),
+       PINCTRL_PIN(26, "GPIO_26"),
+       PINCTRL_PIN(27, "GPIO_27"),
+       PINCTRL_PIN(28, "GPIO_28"),
+       PINCTRL_PIN(29, "GPIO_29"),
+       PINCTRL_PIN(30, "GPIO_30"),
+       PINCTRL_PIN(31, "GPIO_31"),
+       PINCTRL_PIN(32, "GPIO_32"),
+       PINCTRL_PIN(33, "GPIO_33"),
+       PINCTRL_PIN(34, "GPIO_34"),
+       PINCTRL_PIN(35, "GPIO_35"),
+       PINCTRL_PIN(36, "GPIO_36"),
+       PINCTRL_PIN(37, "GPIO_37"),
+       PINCTRL_PIN(38, "GPIO_38"),
+       PINCTRL_PIN(39, "GPIO_39"),
+       PINCTRL_PIN(40, "GPIO_40"),
+       PINCTRL_PIN(41, "GPIO_41"),
+       PINCTRL_PIN(42, "GPIO_42"),
+       PINCTRL_PIN(43, "GPIO_43"),
+       PINCTRL_PIN(44, "GPIO_44"),
+       PINCTRL_PIN(45, "GPIO_45"),
+       PINCTRL_PIN(46, "GPIO_46"),
+       PINCTRL_PIN(47, "GPIO_47"),
+       PINCTRL_PIN(48, "GPIO_48"),
+       PINCTRL_PIN(49, "GPIO_49"),
+       PINCTRL_PIN(50, "GPIO_50"),
+       PINCTRL_PIN(51, "GPIO_51"),
+       PINCTRL_PIN(52, "GPIO_52"),
+       PINCTRL_PIN(53, "GPIO_53"),
+       PINCTRL_PIN(54, "GPIO_54"),
+       PINCTRL_PIN(55, "GPIO_55"),
+       PINCTRL_PIN(56, "GPIO_56"),
+       PINCTRL_PIN(57, "GPIO_57"),
+       PINCTRL_PIN(58, "GPIO_58"),
+       PINCTRL_PIN(59, "GPIO_59"),
+       PINCTRL_PIN(60, "GPIO_60"),
+       PINCTRL_PIN(61, "GPIO_61"),
+       PINCTRL_PIN(62, "GPIO_62"),
+       PINCTRL_PIN(63, "GPIO_63"),
+       PINCTRL_PIN(64, "GPIO_64"),
+       PINCTRL_PIN(65, "GPIO_65"),
+       PINCTRL_PIN(66, "GPIO_66"),
+       PINCTRL_PIN(67, "GPIO_67"),
+       PINCTRL_PIN(68, "GPIO_68"),
+       PINCTRL_PIN(69, "GPIO_69"),
+       PINCTRL_PIN(70, "GPIO_70"),
+       PINCTRL_PIN(71, "GPIO_71"),
+       PINCTRL_PIN(72, "GPIO_72"),
+       PINCTRL_PIN(73, "GPIO_73"),
+       PINCTRL_PIN(74, "GPIO_74"),
+       PINCTRL_PIN(75, "GPIO_75"),
+       PINCTRL_PIN(76, "GPIO_76"),
+       PINCTRL_PIN(77, "GPIO_77"),
+       PINCTRL_PIN(78, "GPIO_78"),
+       PINCTRL_PIN(79, "GPIO_79"),
+       PINCTRL_PIN(80, "GPIO_80"),
+       PINCTRL_PIN(81, "GPIO_81"),
+       PINCTRL_PIN(82, "GPIO_82"),
+       PINCTRL_PIN(83, "GPIO_83"),
+       PINCTRL_PIN(84, "GPIO_84"),
+       PINCTRL_PIN(85, "GPIO_85"),
+       PINCTRL_PIN(86, "GPIO_86"),
+       PINCTRL_PIN(87, "GPIO_87"),
+       PINCTRL_PIN(88, "GPIO_88"),
+       PINCTRL_PIN(89, "GPIO_89"),
+       PINCTRL_PIN(90, "GPIO_90"),
+       PINCTRL_PIN(91, "GPIO_91"),
+       PINCTRL_PIN(92, "GPIO_92"),
+       PINCTRL_PIN(93, "GPIO_93"),
+       PINCTRL_PIN(94, "GPIO_94"),
+       PINCTRL_PIN(95, "GPIO_95"),
+       PINCTRL_PIN(96, "GPIO_96"),
+       PINCTRL_PIN(97, "GPIO_97"),
+       PINCTRL_PIN(98, "GPIO_98"),
+       PINCTRL_PIN(99, "GPIO_99"),
+       PINCTRL_PIN(100, "GPIO_100"),
+       PINCTRL_PIN(101, "GPIO_101"),
+       PINCTRL_PIN(102, "GPIO_102"),
+       PINCTRL_PIN(103, "GPIO_103"),
+       PINCTRL_PIN(104, "GPIO_104"),
+       PINCTRL_PIN(105, "GPIO_105"),
+       PINCTRL_PIN(106, "GPIO_106"),
+       PINCTRL_PIN(107, "GPIO_107"),
+       PINCTRL_PIN(108, "GPIO_108"),
+       PINCTRL_PIN(109, "GPIO_109"),
+       PINCTRL_PIN(110, "GPIO_110"),
+       PINCTRL_PIN(111, "GPIO_111"),
+       PINCTRL_PIN(112, "GPIO_112"),
+       PINCTRL_PIN(113, "SDC1_CLK"),
+       PINCTRL_PIN(114, "SDC1_CMD"),
+       PINCTRL_PIN(115, "SDC1_DATA"),
+       PINCTRL_PIN(116, "SDC2_CLK"),
+       PINCTRL_PIN(117, "SDC2_CMD"),
+       PINCTRL_PIN(118, "SDC2_DATA"),
+       PINCTRL_PIN(119, "QDSD_CLK"),
+       PINCTRL_PIN(120, "QDSD_CMD"),
+       PINCTRL_PIN(121, "QDSD_DATA0"),
+       PINCTRL_PIN(122, "QDSD_DATA1"),
+       PINCTRL_PIN(123, "QDSD_DATA2"),
+       PINCTRL_PIN(124, "QDSD_DATA3"),
+};
+
+#define DECLARE_MSM_GPIO_PINS(pin) \
+       static const unsigned int gpio##pin##_pins[] = { pin }
+DECLARE_MSM_GPIO_PINS(0);
+DECLARE_MSM_GPIO_PINS(1);
+DECLARE_MSM_GPIO_PINS(2);
+DECLARE_MSM_GPIO_PINS(3);
+DECLARE_MSM_GPIO_PINS(4);
+DECLARE_MSM_GPIO_PINS(5);
+DECLARE_MSM_GPIO_PINS(6);
+DECLARE_MSM_GPIO_PINS(7);
+DECLARE_MSM_GPIO_PINS(8);
+DECLARE_MSM_GPIO_PINS(9);
+DECLARE_MSM_GPIO_PINS(10);
+DECLARE_MSM_GPIO_PINS(11);
+DECLARE_MSM_GPIO_PINS(12);
+DECLARE_MSM_GPIO_PINS(13);
+DECLARE_MSM_GPIO_PINS(14);
+DECLARE_MSM_GPIO_PINS(15);
+DECLARE_MSM_GPIO_PINS(16);
+DECLARE_MSM_GPIO_PINS(17);
+DECLARE_MSM_GPIO_PINS(18);
+DECLARE_MSM_GPIO_PINS(19);
+DECLARE_MSM_GPIO_PINS(20);
+DECLARE_MSM_GPIO_PINS(21);
+DECLARE_MSM_GPIO_PINS(22);
+DECLARE_MSM_GPIO_PINS(23);
+DECLARE_MSM_GPIO_PINS(24);
+DECLARE_MSM_GPIO_PINS(25);
+DECLARE_MSM_GPIO_PINS(26);
+DECLARE_MSM_GPIO_PINS(27);
+DECLARE_MSM_GPIO_PINS(28);
+DECLARE_MSM_GPIO_PINS(29);
+DECLARE_MSM_GPIO_PINS(30);
+DECLARE_MSM_GPIO_PINS(31);
+DECLARE_MSM_GPIO_PINS(32);
+DECLARE_MSM_GPIO_PINS(33);
+DECLARE_MSM_GPIO_PINS(34);
+DECLARE_MSM_GPIO_PINS(35);
+DECLARE_MSM_GPIO_PINS(36);
+DECLARE_MSM_GPIO_PINS(37);
+DECLARE_MSM_GPIO_PINS(38);
+DECLARE_MSM_GPIO_PINS(39);
+DECLARE_MSM_GPIO_PINS(40);
+DECLARE_MSM_GPIO_PINS(41);
+DECLARE_MSM_GPIO_PINS(42);
+DECLARE_MSM_GPIO_PINS(43);
+DECLARE_MSM_GPIO_PINS(44);
+DECLARE_MSM_GPIO_PINS(45);
+DECLARE_MSM_GPIO_PINS(46);
+DECLARE_MSM_GPIO_PINS(47);
+DECLARE_MSM_GPIO_PINS(48);
+DECLARE_MSM_GPIO_PINS(49);
+DECLARE_MSM_GPIO_PINS(50);
+DECLARE_MSM_GPIO_PINS(51);
+DECLARE_MSM_GPIO_PINS(52);
+DECLARE_MSM_GPIO_PINS(53);
+DECLARE_MSM_GPIO_PINS(54);
+DECLARE_MSM_GPIO_PINS(55);
+DECLARE_MSM_GPIO_PINS(56);
+DECLARE_MSM_GPIO_PINS(57);
+DECLARE_MSM_GPIO_PINS(58);
+DECLARE_MSM_GPIO_PINS(59);
+DECLARE_MSM_GPIO_PINS(60);
+DECLARE_MSM_GPIO_PINS(61);
+DECLARE_MSM_GPIO_PINS(62);
+DECLARE_MSM_GPIO_PINS(63);
+DECLARE_MSM_GPIO_PINS(64);
+DECLARE_MSM_GPIO_PINS(65);
+DECLARE_MSM_GPIO_PINS(66);
+DECLARE_MSM_GPIO_PINS(67);
+DECLARE_MSM_GPIO_PINS(68);
+DECLARE_MSM_GPIO_PINS(69);
+DECLARE_MSM_GPIO_PINS(70);
+DECLARE_MSM_GPIO_PINS(71);
+DECLARE_MSM_GPIO_PINS(72);
+DECLARE_MSM_GPIO_PINS(73);
+DECLARE_MSM_GPIO_PINS(74);
+DECLARE_MSM_GPIO_PINS(75);
+DECLARE_MSM_GPIO_PINS(76);
+DECLARE_MSM_GPIO_PINS(77);
+DECLARE_MSM_GPIO_PINS(78);
+DECLARE_MSM_GPIO_PINS(79);
+DECLARE_MSM_GPIO_PINS(80);
+DECLARE_MSM_GPIO_PINS(81);
+DECLARE_MSM_GPIO_PINS(82);
+DECLARE_MSM_GPIO_PINS(83);
+DECLARE_MSM_GPIO_PINS(84);
+DECLARE_MSM_GPIO_PINS(85);
+DECLARE_MSM_GPIO_PINS(86);
+DECLARE_MSM_GPIO_PINS(87);
+DECLARE_MSM_GPIO_PINS(88);
+DECLARE_MSM_GPIO_PINS(89);
+DECLARE_MSM_GPIO_PINS(90);
+DECLARE_MSM_GPIO_PINS(91);
+DECLARE_MSM_GPIO_PINS(92);
+DECLARE_MSM_GPIO_PINS(93);
+DECLARE_MSM_GPIO_PINS(94);
+DECLARE_MSM_GPIO_PINS(95);
+DECLARE_MSM_GPIO_PINS(96);
+DECLARE_MSM_GPIO_PINS(97);
+DECLARE_MSM_GPIO_PINS(98);
+DECLARE_MSM_GPIO_PINS(99);
+DECLARE_MSM_GPIO_PINS(100);
+DECLARE_MSM_GPIO_PINS(101);
+DECLARE_MSM_GPIO_PINS(102);
+DECLARE_MSM_GPIO_PINS(103);
+DECLARE_MSM_GPIO_PINS(104);
+DECLARE_MSM_GPIO_PINS(105);
+DECLARE_MSM_GPIO_PINS(106);
+DECLARE_MSM_GPIO_PINS(107);
+DECLARE_MSM_GPIO_PINS(108);
+DECLARE_MSM_GPIO_PINS(109);
+DECLARE_MSM_GPIO_PINS(110);
+DECLARE_MSM_GPIO_PINS(111);
+DECLARE_MSM_GPIO_PINS(112);
+
+static const unsigned int sdc1_clk_pins[] = { 113 };
+static const unsigned int sdc1_cmd_pins[] = { 114 };
+static const unsigned int sdc1_data_pins[] = { 115 };
+static const unsigned int sdc2_clk_pins[] = { 116 };
+static const unsigned int sdc2_cmd_pins[] = { 117 };
+static const unsigned int sdc2_data_pins[] = { 118 };
+static const unsigned int qdsd_clk_pins[] = { 119 };
+static const unsigned int qdsd_cmd_pins[] = { 120 };
+static const unsigned int qdsd_data0_pins[] = { 121 };
+static const unsigned int qdsd_data1_pins[] = { 122 };
+static const unsigned int qdsd_data2_pins[] = { 123 };
+static const unsigned int qdsd_data3_pins[] = { 124 };
+
+enum msm8909_functions {
+       msm_mux_gpio,
+       msm_mux_adsp_ext,
+       msm_mux_atest_bbrx0,
+       msm_mux_atest_bbrx1,
+       msm_mux_atest_char,
+       msm_mux_atest_char0,
+       msm_mux_atest_char1,
+       msm_mux_atest_char2,
+       msm_mux_atest_char3,
+       msm_mux_atest_combodac,
+       msm_mux_atest_gpsadc0,
+       msm_mux_atest_gpsadc1,
+       msm_mux_atest_wlan0,
+       msm_mux_atest_wlan1,
+       msm_mux_bimc_dte0,
+       msm_mux_bimc_dte1,
+       msm_mux_blsp_i2c1,
+       msm_mux_blsp_i2c2,
+       msm_mux_blsp_i2c3,
+       msm_mux_blsp_i2c4,
+       msm_mux_blsp_i2c5,
+       msm_mux_blsp_i2c6,
+       msm_mux_blsp_spi1,
+       msm_mux_blsp_spi1_cs1,
+       msm_mux_blsp_spi1_cs2,
+       msm_mux_blsp_spi1_cs3,
+       msm_mux_blsp_spi2,
+       msm_mux_blsp_spi2_cs1,
+       msm_mux_blsp_spi2_cs2,
+       msm_mux_blsp_spi2_cs3,
+       msm_mux_blsp_spi3,
+       msm_mux_blsp_spi3_cs1,
+       msm_mux_blsp_spi3_cs2,
+       msm_mux_blsp_spi3_cs3,
+       msm_mux_blsp_spi4,
+       msm_mux_blsp_spi5,
+       msm_mux_blsp_spi6,
+       msm_mux_blsp_uart1,
+       msm_mux_blsp_uart2,
+       msm_mux_blsp_uim1,
+       msm_mux_blsp_uim2,
+       msm_mux_cam_mclk,
+       msm_mux_cci_async,
+       msm_mux_cci_timer0,
+       msm_mux_cci_timer1,
+       msm_mux_cci_timer2,
+       msm_mux_cdc_pdm0,
+       msm_mux_dbg_out,
+       msm_mux_dmic0_clk,
+       msm_mux_dmic0_data,
+       msm_mux_ebi0_wrcdc,
+       msm_mux_ebi2_a,
+       msm_mux_ebi2_lcd,
+       msm_mux_ext_lpass,
+       msm_mux_gcc_gp1_clk_a,
+       msm_mux_gcc_gp1_clk_b,
+       msm_mux_gcc_gp2_clk_a,
+       msm_mux_gcc_gp2_clk_b,
+       msm_mux_gcc_gp3_clk_a,
+       msm_mux_gcc_gp3_clk_b,
+       msm_mux_gcc_plltest,
+       msm_mux_gsm0_tx,
+       msm_mux_ldo_en,
+       msm_mux_ldo_update,
+       msm_mux_m_voc,
+       msm_mux_mdp_vsync,
+       msm_mux_modem_tsync,
+       msm_mux_nav_pps,
+       msm_mux_nav_tsync,
+       msm_mux_pa_indicator,
+       msm_mux_pbs0,
+       msm_mux_pbs1,
+       msm_mux_pbs2,
+       msm_mux_pri_mi2s_data0_a,
+       msm_mux_pri_mi2s_data0_b,
+       msm_mux_pri_mi2s_data1_a,
+       msm_mux_pri_mi2s_data1_b,
+       msm_mux_pri_mi2s_mclk_a,
+       msm_mux_pri_mi2s_mclk_b,
+       msm_mux_pri_mi2s_sck_a,
+       msm_mux_pri_mi2s_sck_b,
+       msm_mux_pri_mi2s_ws_a,
+       msm_mux_pri_mi2s_ws_b,
+       msm_mux_prng_rosc,
+       msm_mux_pwr_crypto_enabled_a,
+       msm_mux_pwr_crypto_enabled_b,
+       msm_mux_pwr_modem_enabled_a,
+       msm_mux_pwr_modem_enabled_b,
+       msm_mux_pwr_nav_enabled_a,
+       msm_mux_pwr_nav_enabled_b,
+       msm_mux_qdss_cti_trig_in_a0,
+       msm_mux_qdss_cti_trig_in_a1,
+       msm_mux_qdss_cti_trig_in_b0,
+       msm_mux_qdss_cti_trig_in_b1,
+       msm_mux_qdss_cti_trig_out_a0,
+       msm_mux_qdss_cti_trig_out_a1,
+       msm_mux_qdss_cti_trig_out_b0,
+       msm_mux_qdss_cti_trig_out_b1,
+       msm_mux_qdss_traceclk_a,
+       msm_mux_qdss_tracectl_a,
+       msm_mux_qdss_tracedata_a,
+       msm_mux_qdss_tracedata_b,
+       msm_mux_sd_write,
+       msm_mux_sec_mi2s,
+       msm_mux_smb_int,
+       msm_mux_ssbi0,
+       msm_mux_ssbi1,
+       msm_mux_uim1_clk,
+       msm_mux_uim1_data,
+       msm_mux_uim1_present,
+       msm_mux_uim1_reset,
+       msm_mux_uim2_clk,
+       msm_mux_uim2_data,
+       msm_mux_uim2_present,
+       msm_mux_uim2_reset,
+       msm_mux_uim3_clk,
+       msm_mux_uim3_data,
+       msm_mux_uim3_present,
+       msm_mux_uim3_reset,
+       msm_mux_uim_batt,
+       msm_mux_wcss_bt,
+       msm_mux_wcss_fm,
+       msm_mux_wcss_wlan,
+       msm_mux__,
+};
+
+static const char * const adsp_ext_groups[] = { "gpio38" };
+static const char * const atest_bbrx0_groups[] = { "gpio37" };
+static const char * const atest_bbrx1_groups[] = { "gpio36" };
+static const char * const atest_char0_groups[] = { "gpio62" };
+static const char * const atest_char1_groups[] = { "gpio61" };
+static const char * const atest_char2_groups[] = { "gpio60" };
+static const char * const atest_char3_groups[] = { "gpio59" };
+static const char * const atest_char_groups[] = { "gpio63" };
+static const char * const atest_combodac_groups[] = {
+       "gpio32", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42", "gpio43",
+       "gpio44", "gpio45", "gpio47", "gpio48", "gpio66", "gpio81", "gpio83",
+       "gpio84", "gpio85", "gpio86", "gpio94", "gpio95", "gpio110"
+};
+static const char * const atest_gpsadc0_groups[] = { "gpio65" };
+static const char * const atest_gpsadc1_groups[] = { "gpio79" };
+static const char * const atest_wlan0_groups[] = { "gpio96" };
+static const char * const atest_wlan1_groups[] = { "gpio97" };
+static const char * const bimc_dte0_groups[] = { "gpio6", "gpio59" };
+static const char * const bimc_dte1_groups[] = { "gpio7", "gpio60" };
+static const char * const blsp_i2c1_groups[] = { "gpio6", "gpio7" };
+static const char * const blsp_i2c2_groups[] = { "gpio111", "gpio112" };
+static const char * const blsp_i2c3_groups[] = { "gpio29", "gpio30" };
+static const char * const blsp_i2c4_groups[] = { "gpio14", "gpio15" };
+static const char * const blsp_i2c5_groups[] = { "gpio18", "gpio19" };
+static const char * const blsp_i2c6_groups[] = { "gpio10", "gpio11" };
+static const char * const blsp_spi1_cs1_groups[] = { "gpio97" };
+static const char * const blsp_spi1_cs2_groups[] = { "gpio37" };
+static const char * const blsp_spi1_cs3_groups[] = { "gpio65" };
+static const char * const blsp_spi1_groups[] = {
+       "gpio4", "gpio5", "gpio6", "gpio7"
+};
+static const char * const blsp_spi2_cs1_groups[] = { "gpio98" };
+static const char * const blsp_spi2_cs2_groups[] = { "gpio17" };
+static const char * const blsp_spi2_cs3_groups[] = { "gpio5" };
+static const char * const blsp_spi2_groups[] = {
+       "gpio20", "gpio21", "gpio111", "gpio112"
+};
+static const char * const blsp_spi3_cs1_groups[] = { "gpio95" };
+static const char * const blsp_spi3_cs2_groups[] = { "gpio65" };
+static const char * const blsp_spi3_cs3_groups[] = { "gpio4" };
+static const char * const blsp_spi3_groups[] = {
+       "gpio0", "gpio1", "gpio2", "gpio3"
+};
+static const char * const blsp_spi4_groups[] = {
+       "gpio12", "gpio13", "gpio14", "gpio15"
+};
+static const char * const blsp_spi5_groups[] = {
+       "gpio16", "gpio17", "gpio18", "gpio19"
+};
+static const char * const blsp_spi6_groups[] = {
+       "gpio8", "gpio9", "gpio10", "gpio11"
+};
+static const char * const blsp_uart1_groups[] = {
+       "gpio4", "gpio5", "gpio6", "gpio7"
+};
+static const char * const blsp_uart2_groups[] = {
+       "gpio20", "gpio21", "gpio111", "gpio112"
+};
+static const char * const blsp_uim1_groups[] = { "gpio4", "gpio5" };
+static const char * const blsp_uim2_groups[] = { "gpio20", "gpio21" };
+static const char * const cam_mclk_groups[] = { "gpio26", "gpio27" };
+static const char * const cci_async_groups[] = { "gpio33" };
+static const char * const cci_timer0_groups[] = { "gpio31" };
+static const char * const cci_timer1_groups[] = { "gpio32" };
+static const char * const cci_timer2_groups[] = { "gpio38" };
+static const char * const cdc_pdm0_groups[] = {
+       "gpio59", "gpio60", "gpio61", "gpio62", "gpio63", "gpio64"
+};
+static const char * const dbg_out_groups[] = { "gpio10" };
+static const char * const dmic0_clk_groups[] = { "gpio4" };
+static const char * const dmic0_data_groups[] = { "gpio5" };
+static const char * const ebi0_wrcdc_groups[] = { "gpio64" };
+static const char * const ebi2_a_groups[] = { "gpio99" };
+static const char * const ebi2_lcd_groups[] = {
+       "gpio24", "gpio24", "gpio25", "gpio95"
+};
+static const char * const ext_lpass_groups[] = { "gpio45" };
+static const char * const gcc_gp1_clk_a_groups[] = { "gpio49" };
+static const char * const gcc_gp1_clk_b_groups[] = { "gpio14" };
+static const char * const gcc_gp2_clk_a_groups[] = { "gpio50" };
+static const char * const gcc_gp2_clk_b_groups[] = { "gpio12" };
+static const char * const gcc_gp3_clk_a_groups[] = { "gpio51" };
+static const char * const gcc_gp3_clk_b_groups[] = { "gpio13" };
+static const char * const gcc_plltest_groups[] = { "gpio66", "gpio67" };
+static const char * const gpio_groups[] = {
+       "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
+       "gpio8", "gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14",
+       "gpio15", "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21",
+       "gpio22", "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28",
+       "gpio29", "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35",
+       "gpio36", "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42",
+       "gpio43", "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49",
+       "gpio50", "gpio51", "gpio52", "gpio53", "gpio54", "gpio55", "gpio56",
+       "gpio57", "gpio58", "gpio59", "gpio60", "gpio61", "gpio62", "gpio63",
+       "gpio64", "gpio65", "gpio66", "gpio67", "gpio68", "gpio69", "gpio70",
+       "gpio71", "gpio72", "gpio73", "gpio74", "gpio75", "gpio76", "gpio77",
+       "gpio78", "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84",
+       "gpio85", "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91",
+       "gpio92", "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98",
+       "gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104",
+       "gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110",
+       "gpio111", "gpio112"
+};
+static const char * const gsm0_tx_groups[] = { "gpio85" };
+static const char * const ldo_en_groups[] = { "gpio99" };
+static const char * const ldo_update_groups[] = { "gpio98" };
+static const char * const m_voc_groups[] = { "gpio8", "gpio95" };
+static const char * const mdp_vsync_groups[] = { "gpio24", "gpio25" };
+static const char * const modem_tsync_groups[] = { "gpio83" };
+static const char * const nav_pps_groups[] = { "gpio83" };
+static const char * const nav_tsync_groups[] = { "gpio83" };
+static const char * const pa_indicator_groups[] = { "gpio82" };
+static const char * const pbs0_groups[] = { "gpio90" };
+static const char * const pbs1_groups[] = { "gpio91" };
+static const char * const pbs2_groups[] = { "gpio92" };
+static const char * const pri_mi2s_data0_a_groups[] = { "gpio62" };
+static const char * const pri_mi2s_data0_b_groups[] = { "gpio95" };
+static const char * const pri_mi2s_data1_a_groups[] = { "gpio63" };
+static const char * const pri_mi2s_data1_b_groups[] = { "gpio96" };
+static const char * const pri_mi2s_mclk_a_groups[] = { "gpio59" };
+static const char * const pri_mi2s_mclk_b_groups[] = { "gpio98" };
+static const char * const pri_mi2s_sck_a_groups[] = { "gpio60" };
+static const char * const pri_mi2s_sck_b_groups[] = { "gpio94" };
+static const char * const pri_mi2s_ws_a_groups[] = { "gpio61" };
+static const char * const pri_mi2s_ws_b_groups[] = { "gpio110" };
+static const char * const prng_rosc_groups[] = { "gpio43" };
+static const char * const pwr_crypto_enabled_a_groups[] = { "gpio35" };
+static const char * const pwr_crypto_enabled_b_groups[] = { "gpio96" };
+static const char * const pwr_modem_enabled_a_groups[] = { "gpio28" };
+static const char * const pwr_modem_enabled_b_groups[] = { "gpio94" };
+static const char * const pwr_nav_enabled_a_groups[] = { "gpio34" };
+static const char * const pwr_nav_enabled_b_groups[] = { "gpio95" };
+static const char * const qdss_cti_trig_in_a0_groups[] = { "gpio20" };
+static const char * const qdss_cti_trig_in_a1_groups[] = { "gpio49" };
+static const char * const qdss_cti_trig_in_b0_groups[] = { "gpio21" };
+static const char * const qdss_cti_trig_in_b1_groups[] = { "gpio50" };
+static const char * const qdss_cti_trig_out_a0_groups[] = { "gpio23" };
+static const char * const qdss_cti_trig_out_a1_groups[] = { "gpio52" };
+static const char * const qdss_cti_trig_out_b0_groups[] = { "gpio22" };
+static const char * const qdss_cti_trig_out_b1_groups[] = { "gpio51" };
+static const char * const qdss_traceclk_a_groups[] = { "gpio46" };
+static const char * const qdss_tracectl_a_groups[] = { "gpio45" };
+static const char * const qdss_tracedata_a_groups[] = {
+       "gpio8", "gpio9", "gpio10", "gpio39", "gpio40", "gpio41", "gpio42",
+       "gpio43", "gpio47", "gpio48", "gpio58", "gpio65", "gpio94", "gpio96",
+       "gpio97"
+};
+static const char * const qdss_tracedata_b_groups[] = {
+       "gpio14", "gpio16", "gpio17", "gpio29", "gpio30", "gpio31", "gpio32",
+       "gpio33", "gpio34", "gpio35", "gpio36", "gpio37", "gpio93"
+};
+static const char * const sd_write_groups[] = { "gpio99" };
+static const char * const sec_mi2s_groups[] = {
+       "gpio0", "gpio1", "gpio2", "gpio3", "gpio98"
+};
+static const char * const smb_int_groups[] = { "gpio58" };
+static const char * const ssbi0_groups[] = { "gpio88" };
+static const char * const ssbi1_groups[] = { "gpio89" };
+static const char * const uim1_clk_groups[] = { "gpio54" };
+static const char * const uim1_data_groups[] = { "gpio53" };
+static const char * const uim1_present_groups[] = { "gpio56" };
+static const char * const uim1_reset_groups[] = { "gpio55" };
+static const char * const uim2_clk_groups[] = { "gpio50" };
+static const char * const uim2_data_groups[] = { "gpio49" };
+static const char * const uim2_present_groups[] = { "gpio52" };
+static const char * const uim2_reset_groups[] = { "gpio51" };
+static const char * const uim3_clk_groups[] = { "gpio23" };
+static const char * const uim3_data_groups[] = { "gpio20" };
+static const char * const uim3_present_groups[] = { "gpio21" };
+static const char * const uim3_reset_groups[] = { "gpio22" };
+static const char * const uim_batt_groups[] = { "gpio57" };
+static const char * const wcss_bt_groups[] = { "gpio39", "gpio47", "gpio48" };
+static const char * const wcss_fm_groups[] = { "gpio45", "gpio46" };
+static const char * const wcss_wlan_groups[] = {
+       "gpio40", "gpio41", "gpio42", "gpio43", "gpio44"
+};
+
+static const struct msm_function msm8909_functions[] = {
+       FUNCTION(adsp_ext),
+       FUNCTION(atest_bbrx0),
+       FUNCTION(atest_bbrx1),
+       FUNCTION(atest_char),
+       FUNCTION(atest_char0),
+       FUNCTION(atest_char1),
+       FUNCTION(atest_char2),
+       FUNCTION(atest_char3),
+       FUNCTION(atest_combodac),
+       FUNCTION(atest_gpsadc0),
+       FUNCTION(atest_gpsadc1),
+       FUNCTION(atest_wlan0),
+       FUNCTION(atest_wlan1),
+       FUNCTION(bimc_dte0),
+       FUNCTION(bimc_dte1),
+       FUNCTION(blsp_i2c1),
+       FUNCTION(blsp_i2c2),
+       FUNCTION(blsp_i2c3),
+       FUNCTION(blsp_i2c4),
+       FUNCTION(blsp_i2c5),
+       FUNCTION(blsp_i2c6),
+       FUNCTION(blsp_spi1),
+       FUNCTION(blsp_spi1_cs1),
+       FUNCTION(blsp_spi1_cs2),
+       FUNCTION(blsp_spi1_cs3),
+       FUNCTION(blsp_spi2),
+       FUNCTION(blsp_spi2_cs1),
+       FUNCTION(blsp_spi2_cs2),
+       FUNCTION(blsp_spi2_cs3),
+       FUNCTION(blsp_spi3),
+       FUNCTION(blsp_spi3_cs1),
+       FUNCTION(blsp_spi3_cs2),
+       FUNCTION(blsp_spi3_cs3),
+       FUNCTION(blsp_spi4),
+       FUNCTION(blsp_spi5),
+       FUNCTION(blsp_spi6),
+       FUNCTION(blsp_uart1),
+       FUNCTION(blsp_uart2),
+       FUNCTION(blsp_uim1),
+       FUNCTION(blsp_uim2),
+       FUNCTION(cam_mclk),
+       FUNCTION(cci_async),
+       FUNCTION(cci_timer0),
+       FUNCTION(cci_timer1),
+       FUNCTION(cci_timer2),
+       FUNCTION(cdc_pdm0),
+       FUNCTION(dbg_out),
+       FUNCTION(dmic0_clk),
+       FUNCTION(dmic0_data),
+       FUNCTION(ebi0_wrcdc),
+       FUNCTION(ebi2_a),
+       FUNCTION(ebi2_lcd),
+       FUNCTION(ext_lpass),
+       FUNCTION(gcc_gp1_clk_a),
+       FUNCTION(gcc_gp1_clk_b),
+       FUNCTION(gcc_gp2_clk_a),
+       FUNCTION(gcc_gp2_clk_b),
+       FUNCTION(gcc_gp3_clk_a),
+       FUNCTION(gcc_gp3_clk_b),
+       FUNCTION(gcc_plltest),
+       FUNCTION(gpio),
+       FUNCTION(gsm0_tx),
+       FUNCTION(ldo_en),
+       FUNCTION(ldo_update),
+       FUNCTION(m_voc),
+       FUNCTION(mdp_vsync),
+       FUNCTION(modem_tsync),
+       FUNCTION(nav_pps),
+       FUNCTION(nav_tsync),
+       FUNCTION(pa_indicator),
+       FUNCTION(pbs0),
+       FUNCTION(pbs1),
+       FUNCTION(pbs2),
+       FUNCTION(pri_mi2s_data0_a),
+       FUNCTION(pri_mi2s_data0_b),
+       FUNCTION(pri_mi2s_data1_a),
+       FUNCTION(pri_mi2s_data1_b),
+       FUNCTION(pri_mi2s_mclk_a),
+       FUNCTION(pri_mi2s_mclk_b),
+       FUNCTION(pri_mi2s_sck_a),
+       FUNCTION(pri_mi2s_sck_b),
+       FUNCTION(pri_mi2s_ws_a),
+       FUNCTION(pri_mi2s_ws_b),
+       FUNCTION(prng_rosc),
+       FUNCTION(pwr_crypto_enabled_a),
+       FUNCTION(pwr_crypto_enabled_b),
+       FUNCTION(pwr_modem_enabled_a),
+       FUNCTION(pwr_modem_enabled_b),
+       FUNCTION(pwr_nav_enabled_a),
+       FUNCTION(pwr_nav_enabled_b),
+       FUNCTION(qdss_cti_trig_in_a0),
+       FUNCTION(qdss_cti_trig_in_a1),
+       FUNCTION(qdss_cti_trig_in_b0),
+       FUNCTION(qdss_cti_trig_in_b1),
+       FUNCTION(qdss_cti_trig_out_a0),
+       FUNCTION(qdss_cti_trig_out_a1),
+       FUNCTION(qdss_cti_trig_out_b0),
+       FUNCTION(qdss_cti_trig_out_b1),
+       FUNCTION(qdss_traceclk_a),
+       FUNCTION(qdss_tracectl_a),
+       FUNCTION(qdss_tracedata_a),
+       FUNCTION(qdss_tracedata_b),
+       FUNCTION(sd_write),
+       FUNCTION(sec_mi2s),
+       FUNCTION(smb_int),
+       FUNCTION(ssbi0),
+       FUNCTION(ssbi1),
+       FUNCTION(uim1_clk),
+       FUNCTION(uim1_data),
+       FUNCTION(uim1_present),
+       FUNCTION(uim1_reset),
+       FUNCTION(uim2_clk),
+       FUNCTION(uim2_data),
+       FUNCTION(uim2_present),
+       FUNCTION(uim2_reset),
+       FUNCTION(uim3_clk),
+       FUNCTION(uim3_data),
+       FUNCTION(uim3_present),
+       FUNCTION(uim3_reset),
+       FUNCTION(uim_batt),
+       FUNCTION(wcss_bt),
+       FUNCTION(wcss_fm),
+       FUNCTION(wcss_wlan),
+};
+
+static const struct msm_pingroup msm8909_groups[] = {
+       PINGROUP(0, blsp_spi3, sec_mi2s, _, _, _, _, _, _, _),
+       PINGROUP(1, blsp_spi3, sec_mi2s, _, _, _, _, _, _, _),
+       PINGROUP(2, blsp_spi3, sec_mi2s, _, _, _, _, _, _, _),
+       PINGROUP(3, blsp_spi3, sec_mi2s, _, _, _, _, _, _, _),
+       PINGROUP(4, blsp_spi1, blsp_uart1, blsp_uim1, blsp_spi3_cs3, dmic0_clk, _, _, _, _),
+       PINGROUP(5, blsp_spi1, blsp_uart1, blsp_uim1, blsp_spi2_cs3, dmic0_data, _, _, _, _),
+       PINGROUP(6, blsp_spi1, blsp_uart1, blsp_i2c1, _, _, _, _, _, bimc_dte0),
+       PINGROUP(7, blsp_spi1, blsp_uart1, blsp_i2c1, _, _, _, _, _, bimc_dte1),
+       PINGROUP(8, blsp_spi6, m_voc, _, _, _, _, _, qdss_tracedata_a, _),
+       PINGROUP(9, blsp_spi6, _, _, _, _, _, qdss_tracedata_a, _, _),
+       PINGROUP(10, blsp_spi6, blsp_i2c6, dbg_out, qdss_tracedata_a, _, _, _, _, _),
+       PINGROUP(11, blsp_spi6, blsp_i2c6, _, _, _, _, _, _, _),
+       PINGROUP(12, blsp_spi4, gcc_gp2_clk_b, _, _, _, _, _, _, _),
+       PINGROUP(13, blsp_spi4, gcc_gp3_clk_b, _, _, _, _, _, _, _),
+       PINGROUP(14, blsp_spi4, blsp_i2c4, gcc_gp1_clk_b, _, _, _, _, _, qdss_tracedata_b),
+       PINGROUP(15, blsp_spi4, blsp_i2c4, _, _, _, _, _, _, _),
+       PINGROUP(16, blsp_spi5, _, _, _, _, _, qdss_tracedata_b, _, _),
+       PINGROUP(17, blsp_spi5, blsp_spi2_cs2, _, _, _, _, _, qdss_tracedata_b, _),
+       PINGROUP(18, blsp_spi5, blsp_i2c5, _, _, _, _, _, _, _),
+       PINGROUP(19, blsp_spi5, blsp_i2c5, _, _, _, _, _, _, _),
+       PINGROUP(20, uim3_data, blsp_spi2, blsp_uart2, blsp_uim2, _, qdss_cti_trig_in_a0, _, _, _),
+       PINGROUP(21, uim3_present, blsp_spi2, blsp_uart2, blsp_uim2, _, qdss_cti_trig_in_b0, _, _, _),
+       PINGROUP(22, uim3_reset, _, qdss_cti_trig_out_b0, _, _, _, _, _, _),
+       PINGROUP(23, uim3_clk, qdss_cti_trig_out_a0, _, _, _, _, _, _, _),
+       PINGROUP(24, mdp_vsync, ebi2_lcd, ebi2_lcd, _, _, _, _, _, _),
+       PINGROUP(25, mdp_vsync, ebi2_lcd, _, _, _, _, _, _, _),
+       PINGROUP(26, cam_mclk, _, _, _, _, _, _, _, _),
+       PINGROUP(27, cam_mclk, _, _, _, _, _, _, _, _),
+       PINGROUP(28, _, pwr_modem_enabled_a, _, _, _, _, _, _, _),
+       PINGROUP(29, blsp_i2c3, _, _, _, _, _, qdss_tracedata_b, _, _),
+       PINGROUP(30, blsp_i2c3, _, _, _, _, _, qdss_tracedata_b, _, _),
+       PINGROUP(31, cci_timer0, _, _, _, _, _, _, qdss_tracedata_b, _),
+       PINGROUP(32, cci_timer1, _, qdss_tracedata_b, _, atest_combodac, _, _, _, _),
+       PINGROUP(33, cci_async, qdss_tracedata_b, _, _, _, _, _, _, _),
+       PINGROUP(34, pwr_nav_enabled_a, qdss_tracedata_b, _, _, _, _, _, _, _),
+       PINGROUP(35, pwr_crypto_enabled_a, qdss_tracedata_b, _, _, _, _, _, _, _),
+       PINGROUP(36, qdss_tracedata_b, _, atest_bbrx1, _, _, _, _, _, _),
+       PINGROUP(37, blsp_spi1_cs2, qdss_tracedata_b, _, atest_bbrx0, _, _, _, _, _),
+       PINGROUP(38, cci_timer2, adsp_ext, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(39, wcss_bt, qdss_tracedata_a, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(40, wcss_wlan, qdss_tracedata_a, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(41, wcss_wlan, qdss_tracedata_a, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(42, wcss_wlan, qdss_tracedata_a, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(43, wcss_wlan, prng_rosc, qdss_tracedata_a, _, atest_combodac, _, _, _, _),
+       PINGROUP(44, wcss_wlan, _, atest_combodac, _, _, _, _, _, _),
+       PINGROUP(45, wcss_fm, ext_lpass, qdss_tracectl_a, _, atest_combodac, _, _, _, _),
+       PINGROUP(46, wcss_fm, qdss_traceclk_a, _, _, _, _, _, _, _),
+       PINGROUP(47, wcss_bt, qdss_tracedata_a, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(48, wcss_bt, qdss_tracedata_a, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(49, uim2_data, gcc_gp1_clk_a, qdss_cti_trig_in_a1, _, _, _, _, _, _),
+       PINGROUP(50, uim2_clk, gcc_gp2_clk_a, qdss_cti_trig_in_b1, _, _, _, _, _, _),
+       PINGROUP(51, uim2_reset, gcc_gp3_clk_a, qdss_cti_trig_out_b1, _, _, _, _, _, _),
+       PINGROUP(52, uim2_present, qdss_cti_trig_out_a1, _, _, _, _, _, _, _),
+       PINGROUP(53, uim1_data, _, _, _, _, _, _, _, _),
+       PINGROUP(54, uim1_clk, _, _, _, _, _, _, _, _),
+       PINGROUP(55, uim1_reset, _, _, _, _, _, _, _, _),
+       PINGROUP(56, uim1_present, _, _, _, _, _, _, _, _),
+       PINGROUP(57, uim_batt, _, _, _, _, _, _, _, _),
+       PINGROUP(58, qdss_tracedata_a, smb_int, _, _, _, _, _, _, _),
+       PINGROUP(59, cdc_pdm0, pri_mi2s_mclk_a, atest_char3, _, _, _, _, _, bimc_dte0),
+       PINGROUP(60, cdc_pdm0, pri_mi2s_sck_a, atest_char2, _, _, _, _, _, bimc_dte1),
+       PINGROUP(61, cdc_pdm0, pri_mi2s_ws_a, atest_char1, _, _, _, _, _, _),
+       PINGROUP(62, cdc_pdm0, pri_mi2s_data0_a, atest_char0, _, _, _, _, _, _),
+       PINGROUP(63, cdc_pdm0, pri_mi2s_data1_a, atest_char, _, _, _, _, _, _),
+       PINGROUP(64, cdc_pdm0, _, _, _, _, _, ebi0_wrcdc, _, _),
+       PINGROUP(65, blsp_spi3_cs2, blsp_spi1_cs3, qdss_tracedata_a, _, atest_gpsadc0, _, _, _, _),
+       PINGROUP(66, _, gcc_plltest, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(67, _, gcc_plltest, _, _, _, _, _, _, _),
+       PINGROUP(68, _, _, _, _, _, _, _, _, _),
+       PINGROUP(69, _, _, _, _, _, _, _, _, _),
+       PINGROUP(70, _, _, _, _, _, _, _, _, _),
+       PINGROUP(71, _, _, _, _, _, _, _, _, _),
+       PINGROUP(72, _, _, _, _, _, _, _, _, _),
+       PINGROUP(73, _, _, _, _, _, _, _, _, _),
+       PINGROUP(74, _, _, _, _, _, _, _, _, _),
+       PINGROUP(75, _, _, _, _, _, _, _, _, _),
+       PINGROUP(76, _, _, _, _, _, _, _, _, _),
+       PINGROUP(77, _, _, _, _, _, _, _, _, _),
+       PINGROUP(78, _, _, _, _, _, _, _, _, _),
+       PINGROUP(79, _, _, atest_gpsadc1, _, _, _, _, _, _),
+       PINGROUP(80, _, _, _, _, _, _, _, _, _),
+       PINGROUP(81, _, _, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(82, _, pa_indicator, _, _, _, _, _, _, _),
+       PINGROUP(83, _, modem_tsync, nav_tsync, nav_pps, _, atest_combodac, _, _, _),
+       PINGROUP(84, _, _, atest_combodac, _, _, _, _, _, _),
+       PINGROUP(85, gsm0_tx, _, _, atest_combodac, _, _, _, _, _),
+       PINGROUP(86, _, _, atest_combodac, _, _, _, _, _, _),
+       PINGROUP(87, _, _, _, _, _, _, _, _, _),
+       PINGROUP(88, _, ssbi0, _, _, _, _, _, _, _),
+       PINGROUP(89, _, ssbi1, _, _, _, _, _, _, _),
+       PINGROUP(90, pbs0, _, _, _, _, _, _, _, _),
+       PINGROUP(91, pbs1, _, _, _, _, _, _, _, _),
+       PINGROUP(92, pbs2, _, _, _, _, _, _, _, _),
+       PINGROUP(93, qdss_tracedata_b, _, _, _, _, _, _, _, _),
+       PINGROUP(94, pri_mi2s_sck_b, pwr_modem_enabled_b, qdss_tracedata_a, _, atest_combodac, _, _, _, _),
+       PINGROUP(95, blsp_spi3_cs1, pri_mi2s_data0_b, ebi2_lcd, m_voc, pwr_nav_enabled_b, _, atest_combodac, _, _),
+       PINGROUP(96, pri_mi2s_data1_b, _, pwr_crypto_enabled_b, qdss_tracedata_a, _, atest_wlan0, _, _, _),
+       PINGROUP(97, blsp_spi1_cs1, qdss_tracedata_a, _, atest_wlan1, _, _, _, _, _),
+       PINGROUP(98, sec_mi2s, pri_mi2s_mclk_b, blsp_spi2_cs1, ldo_update, _, _, _, _, _),
+       PINGROUP(99, ebi2_a, sd_write, ldo_en, _, _, _, _, _, _),
+       PINGROUP(100, _, _, _, _, _, _, _, _, _),
+       PINGROUP(101, _, _, _, _, _, _, _, _, _),
+       PINGROUP(102, _, _, _, _, _, _, _, _, _),
+       PINGROUP(103, _, _, _, _, _, _, _, _, _),
+       PINGROUP(104, _, _, _, _, _, _, _, _, _),
+       PINGROUP(105, _, _, _, _, _, _, _, _, _),
+       PINGROUP(106, _, _, _, _, _, _, _, _, _),
+       PINGROUP(107, _, _, _, _, _, _, _, _, _),
+       PINGROUP(108, _, _, _, _, _, _, _, _, _),
+       PINGROUP(109, _, _, _, _, _, _, _, _, _),
+       PINGROUP(110, pri_mi2s_ws_b, _, atest_combodac, _, _, _, _, _, _),
+       PINGROUP(111, blsp_spi2, blsp_uart2, blsp_i2c2, _, _, _, _, _, _),
+       PINGROUP(112, blsp_spi2, blsp_uart2, blsp_i2c2, _, _, _, _, _, _),
+       SDC_QDSD_PINGROUP(sdc1_clk, 0x10a000, 13, 6),
+       SDC_QDSD_PINGROUP(sdc1_cmd, 0x10a000, 11, 3),
+       SDC_QDSD_PINGROUP(sdc1_data, 0x10a000, 9, 0),
+       SDC_QDSD_PINGROUP(sdc2_clk, 0x109000, 14, 6),
+       SDC_QDSD_PINGROUP(sdc2_cmd, 0x109000, 11, 3),
+       SDC_QDSD_PINGROUP(sdc2_data, 0x109000, 9, 0),
+       SDC_QDSD_PINGROUP(qdsd_clk, 0x19c000, 3, 0),
+       SDC_QDSD_PINGROUP(qdsd_cmd, 0x19c000, 8, 5),
+       SDC_QDSD_PINGROUP(qdsd_data0, 0x19c000, 13, 10),
+       SDC_QDSD_PINGROUP(qdsd_data1, 0x19c000, 18, 15),
+       SDC_QDSD_PINGROUP(qdsd_data2, 0x19c000, 23, 20),
+       SDC_QDSD_PINGROUP(qdsd_data3, 0x19c000, 28, 25),
+};
+
+static const struct msm_gpio_wakeirq_map msm8909_mpm_map[] = {
+       { 65, 3 }, { 5, 4 }, { 11, 5 }, { 12, 6 }, { 64, 7 }, { 58, 8 },
+       { 50, 9 }, { 13, 10 }, { 49, 11 }, { 20, 12 }, { 21, 13 }, { 25, 14 },
+       { 46, 15 }, { 45, 16 }, { 28, 17 }, { 44, 18 }, { 31, 19 }, { 43, 20 },
+       { 42, 21 }, { 34, 22 }, { 35, 23 }, { 36, 24 }, { 37, 25 }, { 38, 26 },
+       { 39, 27 }, { 40, 28 }, { 41, 29 }, { 90, 30 }, { 91, 32 }, { 92, 33 },
+       { 94, 34 }, { 95, 35 }, { 96, 36 }, { 97, 37 }, { 98, 38 },
+       { 110, 39 }, { 111, 40 }, { 112, 41 }, { 105, 42 }, { 107, 43 },
+       { 47, 50 }, { 48, 51 },
+};
+
+static const struct msm_pinctrl_soc_data msm8909_pinctrl = {
+       .pins = msm8909_pins,
+       .npins = ARRAY_SIZE(msm8909_pins),
+       .functions = msm8909_functions,
+       .nfunctions = ARRAY_SIZE(msm8909_functions),
+       .groups = msm8909_groups,
+       .ngroups = ARRAY_SIZE(msm8909_groups),
+       .ngpios = 113,
+       .wakeirq_map = msm8909_mpm_map,
+       .nwakeirq_map = ARRAY_SIZE(msm8909_mpm_map),
+};
+
+static int msm8909_pinctrl_probe(struct platform_device *pdev)
+{
+       return msm_pinctrl_probe(pdev, &msm8909_pinctrl);
+}
+
+static const struct of_device_id msm8909_pinctrl_of_match[] = {
+       { .compatible = "qcom,msm8909-tlmm", },
+       { },
+};
+MODULE_DEVICE_TABLE(of, msm8909_pinctrl_of_match);
+
+static struct platform_driver msm8909_pinctrl_driver = {
+       .driver = {
+               .name = "msm8909-pinctrl",
+               .of_match_table = msm8909_pinctrl_of_match,
+       },
+       .probe = msm8909_pinctrl_probe,
+       .remove = msm_pinctrl_remove,
+};
+
+static int __init msm8909_pinctrl_init(void)
+{
+       return platform_driver_register(&msm8909_pinctrl_driver);
+}
+arch_initcall(msm8909_pinctrl_init);
+
+static void __exit msm8909_pinctrl_exit(void)
+{
+       platform_driver_unregister(&msm8909_pinctrl_driver);
+}
+module_exit(msm8909_pinctrl_exit);
+
+MODULE_DESCRIPTION("Qualcomm MSM8909 TLMM pinctrl driver");
+MODULE_LICENSE("GPL");
index 396db12ae904829052b7a1fb5f0d6a9d4cb64e92..bf68913ba8212bea9e2fb260f9cf54fdf2a711d4 100644 (file)
@@ -844,8 +844,8 @@ static const struct msm_pingroup msm8916_groups[] = {
        PINGROUP(28, pwr_modem_enabled_a, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, atest_combodac),
        PINGROUP(29, cci_i2c, NA, NA, NA, NA, NA, qdss_tracedata_b, NA, atest_combodac),
        PINGROUP(30, cci_i2c, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
-       PINGROUP(31, cci_timer0, NA, NA, NA, NA, NA, NA, NA, NA),
-       PINGROUP(32, cci_timer1, NA, NA, NA, NA, NA, NA, NA, NA),
+       PINGROUP(31, cci_timer0, flash_strobe, NA, NA, NA, NA, NA, NA, NA),
+       PINGROUP(32, cci_timer1, flash_strobe, NA, NA, NA, NA, NA, NA, NA),
        PINGROUP(33, cci_async, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
        PINGROUP(34, pwr_nav_enabled_a, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
        PINGROUP(35, pwr_crypto_enabled_a, NA, NA, NA, NA, NA, NA, NA, qdss_tracedata_b),
index 2add9a4520c254153e7ef27544db0c63715dd767..d615b6c55b89197dbad45ce8d4bc319142cfe7e4 100644 (file)
@@ -141,7 +141,6 @@ static const struct lpi_pinctrl_variant_data sc7280_lpi_data = {
        .ngroups = ARRAY_SIZE(sc7280_groups),
        .functions = sc7280_functions,
        .nfunctions = ARRAY_SIZE(sc7280_functions),
-       .is_clk_optional = true,
 };
 
 static const struct of_device_id lpi_pinctrl_of_match[] = {
diff --git a/drivers/pinctrl/qcom/pinctrl-sm6375.c b/drivers/pinctrl/qcom/pinctrl-sm6375.c
new file mode 100644 (file)
index 0000000..1138e68
--- /dev/null
@@ -0,0 +1,1544 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022, Konrad Dybcio <konrad.dybcio@somainline.org>
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/pinctrl/pinctrl.h>
+
+#include "pinctrl-msm.h"
+
+#define FUNCTION(fname)                                        \
+       [msm_mux_##fname] = {                           \
+               .name = #fname,                         \
+               .groups = fname##_groups,               \
+               .ngroups = ARRAY_SIZE(fname##_groups),  \
+       }
+
+#define REG_BASE 0x100000
+#define REG_SIZE 0x1000
+#define PINGROUP(id, f1, f2, f3, f4, f5, f6, f7, f8, f9)       \
+       {                                               \
+               .name = "gpio" #id,                     \
+               .pins = gpio##id##_pins,                \
+               .npins = (unsigned int)ARRAY_SIZE(gpio##id##_pins),     \
+               .funcs = (int[]){                       \
+                       msm_mux_gpio, /* gpio mode */   \
+                       msm_mux_##f1,                   \
+                       msm_mux_##f2,                   \
+                       msm_mux_##f3,                   \
+                       msm_mux_##f4,                   \
+                       msm_mux_##f5,                   \
+                       msm_mux_##f6,                   \
+                       msm_mux_##f7,                   \
+                       msm_mux_##f8,                   \
+                       msm_mux_##f9                    \
+               },                                      \
+               .nfuncs = 10,                           \
+               .ctl_reg = REG_SIZE * id,               \
+               .io_reg = REG_SIZE * id + 0x4,          \
+               .intr_cfg_reg = REG_SIZE * id + 0x8,    \
+               .intr_status_reg = REG_SIZE * id + 0xc, \
+               .intr_target_reg = REG_SIZE * id + 0x8, \
+               .mux_bit = 2,                   \
+               .pull_bit = 0,                  \
+               .drv_bit = 6,                   \
+               .egpio_enable = 12,             \
+               .egpio_present = 11,            \
+               .oe_bit = 9,                    \
+               .in_bit = 0,                    \
+               .out_bit = 1,                   \
+               .intr_enable_bit = 0,           \
+               .intr_status_bit = 0,           \
+               .intr_target_bit = 5,           \
+               .intr_target_kpss_val = 3,      \
+               .intr_raw_status_bit = 4,       \
+               .intr_polarity_bit = 1,         \
+               .intr_detection_bit = 2,        \
+               .intr_detection_width = 2,      \
+       }
+
+#define SDC_PINGROUP(pg_name, ctl, pull, drv)  \
+       {                                               \
+               .name = #pg_name,                       \
+               .pins = pg_name##_pins,                 \
+               .npins = (unsigned int)ARRAY_SIZE(pg_name##_pins),      \
+               .ctl_reg = ctl,                         \
+               .io_reg = 0,                            \
+               .intr_cfg_reg = 0,                      \
+               .intr_status_reg = 0,                   \
+               .intr_target_reg = 0,                   \
+               .mux_bit = -1,                          \
+               .pull_bit = pull,                       \
+               .drv_bit = drv,                         \
+               .oe_bit = -1,                           \
+               .in_bit = -1,                           \
+               .out_bit = -1,                          \
+               .intr_enable_bit = -1,                  \
+               .intr_status_bit = -1,                  \
+               .intr_target_bit = -1,                  \
+               .intr_raw_status_bit = -1,              \
+               .intr_polarity_bit = -1,                \
+               .intr_detection_bit = -1,               \
+               .intr_detection_width = -1,             \
+       }
+
+#define UFS_RESET(pg_name, offset)                             \
+       {                                               \
+               .name = #pg_name,                       \
+               .pins = pg_name##_pins,                 \
+               .npins = (unsigned int)ARRAY_SIZE(pg_name##_pins),      \
+               .ctl_reg = offset,                      \
+               .io_reg = offset + 0x4,                 \
+               .intr_cfg_reg = 0,                      \
+               .intr_status_reg = 0,                   \
+               .intr_target_reg = 0,                   \
+               .mux_bit = -1,                          \
+               .pull_bit = 3,                          \
+               .drv_bit = 0,                           \
+               .oe_bit = -1,                           \
+               .in_bit = -1,                           \
+               .out_bit = 0,                           \
+               .intr_enable_bit = -1,                  \
+               .intr_status_bit = -1,                  \
+               .intr_target_bit = -1,                  \
+               .intr_raw_status_bit = -1,              \
+               .intr_polarity_bit = -1,                \
+               .intr_detection_bit = -1,               \
+               .intr_detection_width = -1,             \
+       }
+
+static const struct pinctrl_pin_desc sm6375_pins[] = {
+       PINCTRL_PIN(0, "GPIO_0"),
+       PINCTRL_PIN(1, "GPIO_1"),
+       PINCTRL_PIN(2, "GPIO_2"),
+       PINCTRL_PIN(3, "GPIO_3"),
+       PINCTRL_PIN(4, "GPIO_4"),
+       PINCTRL_PIN(5, "GPIO_5"),
+       PINCTRL_PIN(6, "GPIO_6"),
+       PINCTRL_PIN(7, "GPIO_7"),
+       PINCTRL_PIN(8, "GPIO_8"),
+       PINCTRL_PIN(9, "GPIO_9"),
+       PINCTRL_PIN(10, "GPIO_10"),
+       PINCTRL_PIN(11, "GPIO_11"),
+       PINCTRL_PIN(12, "GPIO_12"),
+       PINCTRL_PIN(13, "GPIO_13"),
+       PINCTRL_PIN(14, "GPIO_14"),
+       PINCTRL_PIN(15, "GPIO_15"),
+       PINCTRL_PIN(16, "GPIO_16"),
+       PINCTRL_PIN(17, "GPIO_17"),
+       PINCTRL_PIN(18, "GPIO_18"),
+       PINCTRL_PIN(19, "GPIO_19"),
+       PINCTRL_PIN(20, "GPIO_20"),
+       PINCTRL_PIN(21, "GPIO_21"),
+       PINCTRL_PIN(22, "GPIO_22"),
+       PINCTRL_PIN(23, "GPIO_23"),
+       PINCTRL_PIN(24, "GPIO_24"),
+       PINCTRL_PIN(25, "GPIO_25"),
+       PINCTRL_PIN(26, "GPIO_26"),
+       PINCTRL_PIN(27, "GPIO_27"),
+       PINCTRL_PIN(28, "GPIO_28"),
+       PINCTRL_PIN(29, "GPIO_29"),
+       PINCTRL_PIN(30, "GPIO_30"),
+       PINCTRL_PIN(31, "GPIO_31"),
+       PINCTRL_PIN(32, "GPIO_32"),
+       PINCTRL_PIN(33, "GPIO_33"),
+       PINCTRL_PIN(34, "GPIO_34"),
+       PINCTRL_PIN(35, "GPIO_35"),
+       PINCTRL_PIN(36, "GPIO_36"),
+       PINCTRL_PIN(37, "GPIO_37"),
+       PINCTRL_PIN(38, "GPIO_38"),
+       PINCTRL_PIN(39, "GPIO_39"),
+       PINCTRL_PIN(40, "GPIO_40"),
+       PINCTRL_PIN(41, "GPIO_41"),
+       PINCTRL_PIN(42, "GPIO_42"),
+       PINCTRL_PIN(43, "GPIO_43"),
+       PINCTRL_PIN(44, "GPIO_44"),
+       PINCTRL_PIN(45, "GPIO_45"),
+       PINCTRL_PIN(46, "GPIO_46"),
+       PINCTRL_PIN(47, "GPIO_47"),
+       PINCTRL_PIN(48, "GPIO_48"),
+       PINCTRL_PIN(49, "GPIO_49"),
+       PINCTRL_PIN(50, "GPIO_50"),
+       PINCTRL_PIN(51, "GPIO_51"),
+       PINCTRL_PIN(52, "GPIO_52"),
+       PINCTRL_PIN(53, "GPIO_53"),
+       PINCTRL_PIN(54, "GPIO_54"),
+       PINCTRL_PIN(55, "GPIO_55"),
+       PINCTRL_PIN(56, "GPIO_56"),
+       PINCTRL_PIN(57, "GPIO_57"),
+       PINCTRL_PIN(58, "GPIO_58"),
+       PINCTRL_PIN(59, "GPIO_59"),
+       PINCTRL_PIN(60, "GPIO_60"),
+       PINCTRL_PIN(61, "GPIO_61"),
+       PINCTRL_PIN(62, "GPIO_62"),
+       PINCTRL_PIN(63, "GPIO_63"),
+       PINCTRL_PIN(64, "GPIO_64"),
+       PINCTRL_PIN(65, "GPIO_65"),
+       PINCTRL_PIN(66, "GPIO_66"),
+       PINCTRL_PIN(67, "GPIO_67"),
+       PINCTRL_PIN(68, "GPIO_68"),
+       PINCTRL_PIN(69, "GPIO_69"),
+       PINCTRL_PIN(70, "GPIO_70"),
+       PINCTRL_PIN(71, "GPIO_71"),
+       PINCTRL_PIN(72, "GPIO_72"),
+       PINCTRL_PIN(73, "GPIO_73"),
+       PINCTRL_PIN(74, "GPIO_74"),
+       PINCTRL_PIN(75, "GPIO_75"),
+       PINCTRL_PIN(76, "GPIO_76"),
+       PINCTRL_PIN(77, "GPIO_77"),
+       PINCTRL_PIN(78, "GPIO_78"),
+       PINCTRL_PIN(79, "GPIO_79"),
+       PINCTRL_PIN(80, "GPIO_80"),
+       PINCTRL_PIN(81, "GPIO_81"),
+       PINCTRL_PIN(82, "GPIO_82"),
+       PINCTRL_PIN(83, "GPIO_83"),
+       PINCTRL_PIN(84, "GPIO_84"),
+       PINCTRL_PIN(85, "GPIO_85"),
+       PINCTRL_PIN(86, "GPIO_86"),
+       PINCTRL_PIN(87, "GPIO_87"),
+       PINCTRL_PIN(88, "GPIO_88"),
+       PINCTRL_PIN(89, "GPIO_89"),
+       PINCTRL_PIN(90, "GPIO_90"),
+       PINCTRL_PIN(91, "GPIO_91"),
+       PINCTRL_PIN(92, "GPIO_92"),
+       PINCTRL_PIN(93, "GPIO_93"),
+       PINCTRL_PIN(94, "GPIO_94"),
+       PINCTRL_PIN(95, "GPIO_95"),
+       PINCTRL_PIN(96, "GPIO_96"),
+       PINCTRL_PIN(97, "GPIO_97"),
+       PINCTRL_PIN(98, "GPIO_98"),
+       PINCTRL_PIN(99, "GPIO_99"),
+       PINCTRL_PIN(100, "GPIO_100"),
+       PINCTRL_PIN(101, "GPIO_101"),
+       PINCTRL_PIN(102, "GPIO_102"),
+       PINCTRL_PIN(103, "GPIO_103"),
+       PINCTRL_PIN(104, "GPIO_104"),
+       PINCTRL_PIN(105, "GPIO_105"),
+       PINCTRL_PIN(106, "GPIO_106"),
+       PINCTRL_PIN(107, "GPIO_107"),
+       PINCTRL_PIN(108, "GPIO_108"),
+       PINCTRL_PIN(109, "GPIO_109"),
+       PINCTRL_PIN(110, "GPIO_110"),
+       PINCTRL_PIN(111, "GPIO_111"),
+       PINCTRL_PIN(112, "GPIO_112"),
+       PINCTRL_PIN(113, "GPIO_113"),
+       PINCTRL_PIN(114, "GPIO_114"),
+       PINCTRL_PIN(115, "GPIO_115"),
+       PINCTRL_PIN(116, "GPIO_116"),
+       PINCTRL_PIN(117, "GPIO_117"),
+       PINCTRL_PIN(118, "GPIO_118"),
+       PINCTRL_PIN(119, "GPIO_119"),
+       PINCTRL_PIN(120, "GPIO_120"),
+       PINCTRL_PIN(121, "GPIO_121"),
+       PINCTRL_PIN(122, "GPIO_122"),
+       PINCTRL_PIN(123, "GPIO_123"),
+       PINCTRL_PIN(124, "GPIO_124"),
+       PINCTRL_PIN(125, "GPIO_125"),
+       PINCTRL_PIN(126, "GPIO_126"),
+       PINCTRL_PIN(127, "GPIO_127"),
+       PINCTRL_PIN(128, "GPIO_128"),
+       PINCTRL_PIN(129, "GPIO_129"),
+       PINCTRL_PIN(130, "GPIO_130"),
+       PINCTRL_PIN(131, "GPIO_131"),
+       PINCTRL_PIN(132, "GPIO_132"),
+       PINCTRL_PIN(133, "GPIO_133"),
+       PINCTRL_PIN(134, "GPIO_134"),
+       PINCTRL_PIN(135, "GPIO_135"),
+       PINCTRL_PIN(136, "GPIO_136"),
+       PINCTRL_PIN(137, "GPIO_137"),
+       PINCTRL_PIN(138, "GPIO_138"),
+       PINCTRL_PIN(139, "GPIO_139"),
+       PINCTRL_PIN(140, "GPIO_140"),
+       PINCTRL_PIN(141, "GPIO_141"),
+       PINCTRL_PIN(142, "GPIO_142"),
+       PINCTRL_PIN(143, "GPIO_143"),
+       PINCTRL_PIN(144, "GPIO_144"),
+       PINCTRL_PIN(145, "GPIO_145"),
+       PINCTRL_PIN(146, "GPIO_146"),
+       PINCTRL_PIN(147, "GPIO_147"),
+       PINCTRL_PIN(148, "GPIO_148"),
+       PINCTRL_PIN(149, "GPIO_149"),
+       PINCTRL_PIN(150, "GPIO_150"),
+       PINCTRL_PIN(151, "GPIO_151"),
+       PINCTRL_PIN(152, "GPIO_152"),
+       PINCTRL_PIN(153, "GPIO_153"),
+       PINCTRL_PIN(154, "GPIO_154"),
+       PINCTRL_PIN(155, "GPIO_155"),
+       PINCTRL_PIN(156, "UFS_RESET"),
+       PINCTRL_PIN(157, "SDC1_RCLK"),
+       PINCTRL_PIN(158, "SDC1_CLK"),
+       PINCTRL_PIN(159, "SDC1_CMD"),
+       PINCTRL_PIN(160, "SDC1_DATA"),
+       PINCTRL_PIN(161, "SDC2_CLK"),
+       PINCTRL_PIN(162, "SDC2_CMD"),
+       PINCTRL_PIN(163, "SDC2_DATA"),
+};
+
+#define DECLARE_MSM_GPIO_PINS(pin) \
+       static const unsigned int gpio##pin##_pins[] = { pin }
+DECLARE_MSM_GPIO_PINS(0);
+DECLARE_MSM_GPIO_PINS(1);
+DECLARE_MSM_GPIO_PINS(2);
+DECLARE_MSM_GPIO_PINS(3);
+DECLARE_MSM_GPIO_PINS(4);
+DECLARE_MSM_GPIO_PINS(5);
+DECLARE_MSM_GPIO_PINS(6);
+DECLARE_MSM_GPIO_PINS(7);
+DECLARE_MSM_GPIO_PINS(8);
+DECLARE_MSM_GPIO_PINS(9);
+DECLARE_MSM_GPIO_PINS(10);
+DECLARE_MSM_GPIO_PINS(11);
+DECLARE_MSM_GPIO_PINS(12);
+DECLARE_MSM_GPIO_PINS(13);
+DECLARE_MSM_GPIO_PINS(14);
+DECLARE_MSM_GPIO_PINS(15);
+DECLARE_MSM_GPIO_PINS(16);
+DECLARE_MSM_GPIO_PINS(17);
+DECLARE_MSM_GPIO_PINS(18);
+DECLARE_MSM_GPIO_PINS(19);
+DECLARE_MSM_GPIO_PINS(20);
+DECLARE_MSM_GPIO_PINS(21);
+DECLARE_MSM_GPIO_PINS(22);
+DECLARE_MSM_GPIO_PINS(23);
+DECLARE_MSM_GPIO_PINS(24);
+DECLARE_MSM_GPIO_PINS(25);
+DECLARE_MSM_GPIO_PINS(26);
+DECLARE_MSM_GPIO_PINS(27);
+DECLARE_MSM_GPIO_PINS(28);
+DECLARE_MSM_GPIO_PINS(29);
+DECLARE_MSM_GPIO_PINS(30);
+DECLARE_MSM_GPIO_PINS(31);
+DECLARE_MSM_GPIO_PINS(32);
+DECLARE_MSM_GPIO_PINS(33);
+DECLARE_MSM_GPIO_PINS(34);
+DECLARE_MSM_GPIO_PINS(35);
+DECLARE_MSM_GPIO_PINS(36);
+DECLARE_MSM_GPIO_PINS(37);
+DECLARE_MSM_GPIO_PINS(38);
+DECLARE_MSM_GPIO_PINS(39);
+DECLARE_MSM_GPIO_PINS(40);
+DECLARE_MSM_GPIO_PINS(41);
+DECLARE_MSM_GPIO_PINS(42);
+DECLARE_MSM_GPIO_PINS(43);
+DECLARE_MSM_GPIO_PINS(44);
+DECLARE_MSM_GPIO_PINS(45);
+DECLARE_MSM_GPIO_PINS(46);
+DECLARE_MSM_GPIO_PINS(47);
+DECLARE_MSM_GPIO_PINS(48);
+DECLARE_MSM_GPIO_PINS(49);
+DECLARE_MSM_GPIO_PINS(50);
+DECLARE_MSM_GPIO_PINS(51);
+DECLARE_MSM_GPIO_PINS(52);
+DECLARE_MSM_GPIO_PINS(53);
+DECLARE_MSM_GPIO_PINS(54);
+DECLARE_MSM_GPIO_PINS(55);
+DECLARE_MSM_GPIO_PINS(56);
+DECLARE_MSM_GPIO_PINS(57);
+DECLARE_MSM_GPIO_PINS(58);
+DECLARE_MSM_GPIO_PINS(59);
+DECLARE_MSM_GPIO_PINS(60);
+DECLARE_MSM_GPIO_PINS(61);
+DECLARE_MSM_GPIO_PINS(62);
+DECLARE_MSM_GPIO_PINS(63);
+DECLARE_MSM_GPIO_PINS(64);
+DECLARE_MSM_GPIO_PINS(65);
+DECLARE_MSM_GPIO_PINS(66);
+DECLARE_MSM_GPIO_PINS(67);
+DECLARE_MSM_GPIO_PINS(68);
+DECLARE_MSM_GPIO_PINS(69);
+DECLARE_MSM_GPIO_PINS(70);
+DECLARE_MSM_GPIO_PINS(71);
+DECLARE_MSM_GPIO_PINS(72);
+DECLARE_MSM_GPIO_PINS(73);
+DECLARE_MSM_GPIO_PINS(74);
+DECLARE_MSM_GPIO_PINS(75);
+DECLARE_MSM_GPIO_PINS(76);
+DECLARE_MSM_GPIO_PINS(77);
+DECLARE_MSM_GPIO_PINS(78);
+DECLARE_MSM_GPIO_PINS(79);
+DECLARE_MSM_GPIO_PINS(80);
+DECLARE_MSM_GPIO_PINS(81);
+DECLARE_MSM_GPIO_PINS(82);
+DECLARE_MSM_GPIO_PINS(83);
+DECLARE_MSM_GPIO_PINS(84);
+DECLARE_MSM_GPIO_PINS(85);
+DECLARE_MSM_GPIO_PINS(86);
+DECLARE_MSM_GPIO_PINS(87);
+DECLARE_MSM_GPIO_PINS(88);
+DECLARE_MSM_GPIO_PINS(89);
+DECLARE_MSM_GPIO_PINS(90);
+DECLARE_MSM_GPIO_PINS(91);
+DECLARE_MSM_GPIO_PINS(92);
+DECLARE_MSM_GPIO_PINS(93);
+DECLARE_MSM_GPIO_PINS(94);
+DECLARE_MSM_GPIO_PINS(95);
+DECLARE_MSM_GPIO_PINS(96);
+DECLARE_MSM_GPIO_PINS(97);
+DECLARE_MSM_GPIO_PINS(98);
+DECLARE_MSM_GPIO_PINS(99);
+DECLARE_MSM_GPIO_PINS(100);
+DECLARE_MSM_GPIO_PINS(101);
+DECLARE_MSM_GPIO_PINS(102);
+DECLARE_MSM_GPIO_PINS(103);
+DECLARE_MSM_GPIO_PINS(104);
+DECLARE_MSM_GPIO_PINS(105);
+DECLARE_MSM_GPIO_PINS(106);
+DECLARE_MSM_GPIO_PINS(107);
+DECLARE_MSM_GPIO_PINS(108);
+DECLARE_MSM_GPIO_PINS(109);
+DECLARE_MSM_GPIO_PINS(110);
+DECLARE_MSM_GPIO_PINS(111);
+DECLARE_MSM_GPIO_PINS(112);
+DECLARE_MSM_GPIO_PINS(113);
+DECLARE_MSM_GPIO_PINS(114);
+DECLARE_MSM_GPIO_PINS(115);
+DECLARE_MSM_GPIO_PINS(116);
+DECLARE_MSM_GPIO_PINS(117);
+DECLARE_MSM_GPIO_PINS(118);
+DECLARE_MSM_GPIO_PINS(119);
+DECLARE_MSM_GPIO_PINS(120);
+DECLARE_MSM_GPIO_PINS(121);
+DECLARE_MSM_GPIO_PINS(122);
+DECLARE_MSM_GPIO_PINS(123);
+DECLARE_MSM_GPIO_PINS(124);
+DECLARE_MSM_GPIO_PINS(125);
+DECLARE_MSM_GPIO_PINS(126);
+DECLARE_MSM_GPIO_PINS(127);
+DECLARE_MSM_GPIO_PINS(128);
+DECLARE_MSM_GPIO_PINS(129);
+DECLARE_MSM_GPIO_PINS(130);
+DECLARE_MSM_GPIO_PINS(131);
+DECLARE_MSM_GPIO_PINS(132);
+DECLARE_MSM_GPIO_PINS(133);
+DECLARE_MSM_GPIO_PINS(134);
+DECLARE_MSM_GPIO_PINS(135);
+DECLARE_MSM_GPIO_PINS(136);
+DECLARE_MSM_GPIO_PINS(137);
+DECLARE_MSM_GPIO_PINS(138);
+DECLARE_MSM_GPIO_PINS(139);
+DECLARE_MSM_GPIO_PINS(140);
+DECLARE_MSM_GPIO_PINS(141);
+DECLARE_MSM_GPIO_PINS(142);
+DECLARE_MSM_GPIO_PINS(143);
+DECLARE_MSM_GPIO_PINS(144);
+DECLARE_MSM_GPIO_PINS(145);
+DECLARE_MSM_GPIO_PINS(146);
+DECLARE_MSM_GPIO_PINS(147);
+DECLARE_MSM_GPIO_PINS(148);
+DECLARE_MSM_GPIO_PINS(149);
+DECLARE_MSM_GPIO_PINS(150);
+DECLARE_MSM_GPIO_PINS(151);
+DECLARE_MSM_GPIO_PINS(152);
+DECLARE_MSM_GPIO_PINS(153);
+DECLARE_MSM_GPIO_PINS(154);
+DECLARE_MSM_GPIO_PINS(155);
+
+
+static const unsigned int sdc1_rclk_pins[] = { 157 };
+static const unsigned int sdc1_clk_pins[] = { 158 };
+static const unsigned int sdc1_cmd_pins[] = { 159 };
+static const unsigned int sdc1_data_pins[] = { 160 };
+static const unsigned int sdc2_clk_pins[] = { 161 };
+static const unsigned int sdc2_cmd_pins[] = { 162 };
+static const unsigned int sdc2_data_pins[] = { 163 };
+static const unsigned int ufs_reset_pins[] = { 156 };
+
+enum sm6375_functions {
+       msm_mux_adsp_ext,
+       msm_mux_agera_pll,
+       msm_mux_atest_char,
+       msm_mux_atest_char0,
+       msm_mux_atest_char1,
+       msm_mux_atest_char2,
+       msm_mux_atest_char3,
+       msm_mux_atest_tsens,
+       msm_mux_atest_tsens2,
+       msm_mux_atest_usb1,
+       msm_mux_atest_usb10,
+       msm_mux_atest_usb11,
+       msm_mux_atest_usb12,
+       msm_mux_atest_usb13,
+       msm_mux_atest_usb2,
+       msm_mux_atest_usb20,
+       msm_mux_atest_usb21,
+       msm_mux_atest_usb22,
+       msm_mux_atest_usb23,
+       msm_mux_audio_ref,
+       msm_mux_btfm_slimbus,
+       msm_mux_cam_mclk,
+       msm_mux_cci_async,
+       msm_mux_cci_i2c,
+       msm_mux_cci_timer0,
+       msm_mux_cci_timer1,
+       msm_mux_cci_timer2,
+       msm_mux_cci_timer3,
+       msm_mux_cci_timer4,
+       msm_mux_cri_trng,
+       msm_mux_dbg_out,
+       msm_mux_ddr_bist,
+       msm_mux_ddr_pxi0,
+       msm_mux_ddr_pxi1,
+       msm_mux_ddr_pxi2,
+       msm_mux_ddr_pxi3,
+       msm_mux_dp_hot,
+       msm_mux_edp_lcd,
+       msm_mux_gcc_gp1,
+       msm_mux_gcc_gp2,
+       msm_mux_gcc_gp3,
+       msm_mux_gp_pdm0,
+       msm_mux_gp_pdm1,
+       msm_mux_gp_pdm2,
+       msm_mux_gpio,
+       msm_mux_gps_tx,
+       msm_mux_ibi_i3c,
+       msm_mux_jitter_bist,
+       msm_mux_ldo_en,
+       msm_mux_ldo_update,
+       msm_mux_lpass_ext,
+       msm_mux_m_voc,
+       msm_mux_mclk,
+       msm_mux_mdp_vsync,
+       msm_mux_mdp_vsync0,
+       msm_mux_mdp_vsync1,
+       msm_mux_mdp_vsync2,
+       msm_mux_mdp_vsync3,
+       msm_mux_mi2s_0,
+       msm_mux_mi2s_1,
+       msm_mux_mi2s_2,
+       msm_mux_mss_lte,
+       msm_mux_nav_gpio,
+       msm_mux_nav_pps,
+       msm_mux_pa_indicator,
+       msm_mux_phase_flag0,
+       msm_mux_phase_flag1,
+       msm_mux_phase_flag10,
+       msm_mux_phase_flag11,
+       msm_mux_phase_flag12,
+       msm_mux_phase_flag13,
+       msm_mux_phase_flag14,
+       msm_mux_phase_flag15,
+       msm_mux_phase_flag16,
+       msm_mux_phase_flag17,
+       msm_mux_phase_flag18,
+       msm_mux_phase_flag19,
+       msm_mux_phase_flag2,
+       msm_mux_phase_flag20,
+       msm_mux_phase_flag21,
+       msm_mux_phase_flag22,
+       msm_mux_phase_flag23,
+       msm_mux_phase_flag24,
+       msm_mux_phase_flag25,
+       msm_mux_phase_flag26,
+       msm_mux_phase_flag27,
+       msm_mux_phase_flag28,
+       msm_mux_phase_flag29,
+       msm_mux_phase_flag3,
+       msm_mux_phase_flag30,
+       msm_mux_phase_flag31,
+       msm_mux_phase_flag4,
+       msm_mux_phase_flag5,
+       msm_mux_phase_flag6,
+       msm_mux_phase_flag7,
+       msm_mux_phase_flag8,
+       msm_mux_phase_flag9,
+       msm_mux_pll_bist,
+       msm_mux_pll_bypassnl,
+       msm_mux_pll_clk,
+       msm_mux_pll_reset,
+       msm_mux_prng_rosc0,
+       msm_mux_prng_rosc1,
+       msm_mux_prng_rosc2,
+       msm_mux_prng_rosc3,
+       msm_mux_qdss_cti,
+       msm_mux_qdss_gpio,
+       msm_mux_qdss_gpio0,
+       msm_mux_qdss_gpio1,
+       msm_mux_qdss_gpio10,
+       msm_mux_qdss_gpio11,
+       msm_mux_qdss_gpio12,
+       msm_mux_qdss_gpio13,
+       msm_mux_qdss_gpio14,
+       msm_mux_qdss_gpio15,
+       msm_mux_qdss_gpio2,
+       msm_mux_qdss_gpio3,
+       msm_mux_qdss_gpio4,
+       msm_mux_qdss_gpio5,
+       msm_mux_qdss_gpio6,
+       msm_mux_qdss_gpio7,
+       msm_mux_qdss_gpio8,
+       msm_mux_qdss_gpio9,
+       msm_mux_qlink0_enable,
+       msm_mux_qlink0_request,
+       msm_mux_qlink0_wmss,
+       msm_mux_qlink1_enable,
+       msm_mux_qlink1_request,
+       msm_mux_qlink1_wmss,
+       msm_mux_qup00,
+       msm_mux_qup01,
+       msm_mux_qup02,
+       msm_mux_qup10,
+       msm_mux_qup11_f1,
+       msm_mux_qup11_f2,
+       msm_mux_qup12,
+       msm_mux_qup13_f1,
+       msm_mux_qup13_f2,
+       msm_mux_qup14,
+       msm_mux_sd_write,
+       msm_mux_sdc1_tb,
+       msm_mux_sdc2_tb,
+       msm_mux_sp_cmu,
+       msm_mux_tgu_ch0,
+       msm_mux_tgu_ch1,
+       msm_mux_tgu_ch2,
+       msm_mux_tgu_ch3,
+       msm_mux_tsense_pwm1,
+       msm_mux_tsense_pwm2,
+       msm_mux_uim1_clk,
+       msm_mux_uim1_data,
+       msm_mux_uim1_present,
+       msm_mux_uim1_reset,
+       msm_mux_uim2_clk,
+       msm_mux_uim2_data,
+       msm_mux_uim2_present,
+       msm_mux_uim2_reset,
+       msm_mux_usb2phy_ac,
+       msm_mux_usb_phy,
+       msm_mux_vfr_1,
+       msm_mux_vsense_trigger,
+       msm_mux_wlan1_adc0,
+       msm_mux_wlan1_adc1,
+       msm_mux_wlan2_adc0,
+       msm_mux_wlan2_adc1,
+       msm_mux__,
+};
+
+static const char * const gpio_groups[] = {
+       "gpio0", "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
+       "gpio8", "gpio9", "gpio11", "gpio12", "gpio13", "gpio14", "gpio15",
+       "gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21", "gpio22",
+       "gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28", "gpio29",
+       "gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35", "gpio36",
+       "gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42", "gpio43",
+       "gpio44", "gpio45", "gpio46", "gpio47", "gpio48", "gpio49", "gpio50",
+       "gpio51", "gpio52", "gpio53", "gpio56", "gpio57", "gpio58", "gpio59",
+       "gpio60", "gpio61", "gpio62", "gpio63", "gpio64", "gpio65", "gpio66",
+       "gpio67", "gpio68", "gpio69", "gpio75", "gpio76", "gpio77", "gpio78",
+       "gpio79", "gpio80", "gpio81", "gpio82", "gpio83", "gpio84", "gpio85",
+       "gpio86", "gpio87", "gpio88", "gpio89", "gpio90", "gpio91", "gpio92",
+       "gpio93", "gpio94", "gpio95", "gpio96", "gpio97", "gpio98", "gpio99",
+       "gpio100", "gpio101", "gpio102", "gpio103", "gpio104", "gpio105",
+       "gpio106", "gpio107", "gpio108", "gpio109", "gpio110", "gpio111",
+       "gpio112", "gpio113", "gpio114", "gpio115", "gpio116", "gpio117",
+       "gpio118", "gpio119", "gpio120", "gpio124", "gpio125", "gpio126",
+       "gpio127", "gpio128", "gpio129", "gpio130", "gpio131", "gpio132",
+       "gpio133", "gpio134", "gpio135", "gpio136", "gpio141", "gpio142",
+       "gpio143", "gpio150", "gpio151", "gpio152", "gpio153", "gpio154",
+       "gpio155",
+};
+static const char * const agera_pll_groups[] = {
+       "gpio89",
+};
+static const char * const cci_async_groups[] = {
+       "gpio35", "gpio36", "gpio48", "gpio52", "gpio53",
+};
+static const char * const cci_i2c_groups[] = {
+       "gpio2", "gpio3", "gpio39", "gpio40", "gpio41", "gpio42", "gpio43",
+       "gpio44",
+};
+static const char * const gps_tx_groups[] = {
+       "gpio101", "gpio102", "gpio107", "gpio108",
+};
+static const char * const gp_pdm0_groups[] = {
+       "gpio37", "gpio68",
+};
+static const char * const gp_pdm1_groups[] = {
+       "gpio8", "gpio52",
+};
+static const char * const gp_pdm2_groups[] = {
+       "gpio57",
+};
+static const char * const jitter_bist_groups[] = {
+       "gpio90",
+};
+static const char * const mclk_groups[] = {
+       "gpio93",
+};
+static const char * const mdp_vsync_groups[] = {
+       "gpio6", "gpio23", "gpio24", "gpio27", "gpio28",
+};
+static const char * const mss_lte_groups[] = {
+       "gpio65", "gpio66",
+};
+static const char * const nav_pps_groups[] = {
+       "gpio101", "gpio101", "gpio102", "gpio102",
+};
+static const char * const pll_bist_groups[] = {
+       "gpio27",
+};
+static const char * const qlink0_wmss_groups[] = {
+       "gpio103",
+};
+static const char * const qlink1_wmss_groups[] = {
+       "gpio106",
+};
+static const char * const usb_phy_groups[] = {
+       "gpio124",
+};
+static const char * const adsp_ext_groups[] = {
+       "gpio87",
+};
+static const char * const atest_char_groups[] = {
+       "gpio95",
+};
+static const char * const atest_char0_groups[] = {
+       "gpio96",
+};
+static const char * const atest_char1_groups[] = {
+       "gpio97",
+};
+static const char * const atest_char2_groups[] = {
+       "gpio98",
+};
+static const char * const atest_char3_groups[] = {
+       "gpio99",
+};
+static const char * const atest_tsens_groups[] = {
+       "gpio92",
+};
+static const char * const atest_tsens2_groups[] = {
+       "gpio93",
+};
+static const char * const atest_usb1_groups[] = {
+       "gpio83",
+};
+static const char * const atest_usb10_groups[] = {
+       "gpio84",
+};
+static const char * const atest_usb11_groups[] = {
+       "gpio85",
+};
+static const char * const atest_usb12_groups[] = {
+       "gpio86",
+};
+static const char * const atest_usb13_groups[] = {
+       "gpio87",
+};
+static const char * const atest_usb2_groups[] = {
+       "gpio88",
+};
+static const char * const atest_usb20_groups[] = {
+       "gpio89",
+};
+static const char * const atest_usb21_groups[] = {
+       "gpio90",
+};
+static const char * const atest_usb22_groups[] = {
+       "gpio91",
+};
+static const char * const atest_usb23_groups[] = {
+       "gpio92",
+};
+static const char * const audio_ref_groups[] = {
+       "gpio60",
+};
+static const char * const btfm_slimbus_groups[] = {
+       "gpio67", "gpio68", "gpio86", "gpio87",
+};
+static const char * const cam_mclk_groups[] = {
+       "gpio29", "gpio30", "gpio31", "gpio32", "gpio33",
+};
+static const char * const cci_timer0_groups[] = {
+       "gpio34",
+};
+static const char * const cci_timer1_groups[] = {
+       "gpio35",
+};
+static const char * const cci_timer2_groups[] = {
+       "gpio36",
+};
+static const char * const cci_timer3_groups[] = {
+       "gpio37",
+};
+static const char * const cci_timer4_groups[] = {
+       "gpio38",
+};
+static const char * const cri_trng_groups[] = {
+       "gpio0", "gpio1", "gpio2",
+};
+static const char * const dbg_out_groups[] = {
+       "gpio3",
+};
+static const char * const ddr_bist_groups[] = {
+       "gpio19", "gpio20", "gpio21", "gpio22",
+};
+static const char * const ddr_pxi0_groups[] = {
+       "gpio86", "gpio90",
+};
+static const char * const ddr_pxi1_groups[] = {
+       "gpio87", "gpio91",
+};
+static const char * const ddr_pxi2_groups[] = {
+       "gpio88", "gpio92",
+};
+static const char * const ddr_pxi3_groups[] = {
+       "gpio89", "gpio93",
+};
+static const char * const dp_hot_groups[] = {
+       "gpio12", "gpio118",
+};
+static const char * const edp_lcd_groups[] = {
+       "gpio23",
+};
+static const char * const gcc_gp1_groups[] = {
+       "gpio48", "gpio58",
+};
+static const char * const gcc_gp2_groups[] = {
+       "gpio21",
+};
+static const char * const gcc_gp3_groups[] = {
+       "gpio22",
+};
+static const char * const ibi_i3c_groups[] = {
+       "gpio0", "gpio1",
+};
+static const char * const ldo_en_groups[] = {
+       "gpio95",
+};
+static const char * const ldo_update_groups[] = {
+       "gpio96",
+};
+static const char * const lpass_ext_groups[] = {
+       "gpio60", "gpio93",
+};
+static const char * const m_voc_groups[] = {
+       "gpio12",
+};
+static const char * const mdp_vsync0_groups[] = {
+       "gpio47",
+};
+static const char * const mdp_vsync1_groups[] = {
+       "gpio48",
+};
+static const char * const mdp_vsync2_groups[] = {
+       "gpio56",
+};
+static const char * const mdp_vsync3_groups[] = {
+       "gpio57",
+};
+static const char * const mi2s_0_groups[] = {
+       "gpio88", "gpio89", "gpio90", "gpio91",
+};
+static const char * const mi2s_1_groups[] = {
+       "gpio67", "gpio68", "gpio86", "gpio87",
+};
+static const char * const mi2s_2_groups[] = {
+       "gpio60",
+};
+static const char * const nav_gpio_groups[] = {
+       "gpio101", "gpio102",
+};
+static const char * const pa_indicator_groups[] = {
+       "gpio118",
+};
+static const char * const phase_flag0_groups[] = {
+       "gpio12",
+};
+static const char * const phase_flag1_groups[] = {
+       "gpio17",
+};
+static const char * const phase_flag10_groups[] = {
+       "gpio41",
+};
+static const char * const phase_flag11_groups[] = {
+       "gpio42",
+};
+static const char * const phase_flag12_groups[] = {
+       "gpio43",
+};
+static const char * const phase_flag13_groups[] = {
+       "gpio44",
+};
+static const char * const phase_flag14_groups[] = {
+       "gpio45",
+};
+static const char * const phase_flag15_groups[] = {
+       "gpio46",
+};
+static const char * const phase_flag16_groups[] = {
+       "gpio47",
+};
+static const char * const phase_flag17_groups[] = {
+       "gpio48",
+};
+static const char * const phase_flag18_groups[] = {
+       "gpio49",
+};
+static const char * const phase_flag19_groups[] = {
+       "gpio50",
+};
+static const char * const phase_flag2_groups[] = {
+       "gpio18",
+};
+static const char * const phase_flag20_groups[] = {
+       "gpio51",
+};
+static const char * const phase_flag21_groups[] = {
+       "gpio52",
+};
+static const char * const phase_flag22_groups[] = {
+       "gpio53",
+};
+static const char * const phase_flag23_groups[] = {
+       "gpio56",
+};
+static const char * const phase_flag24_groups[] = {
+       "gpio57",
+};
+static const char * const phase_flag25_groups[] = {
+       "gpio60",
+};
+static const char * const phase_flag26_groups[] = {
+       "gpio61",
+};
+static const char * const phase_flag27_groups[] = {
+       "gpio62",
+};
+static const char * const phase_flag28_groups[] = {
+       "gpio63",
+};
+static const char * const phase_flag29_groups[] = {
+       "gpio64",
+};
+static const char * const phase_flag3_groups[] = {
+       "gpio34",
+};
+static const char * const phase_flag30_groups[] = {
+       "gpio67",
+};
+static const char * const phase_flag31_groups[] = {
+       "gpio68",
+};
+static const char * const phase_flag4_groups[] = {
+       "gpio35",
+};
+static const char * const phase_flag5_groups[] = {
+       "gpio36",
+};
+static const char * const phase_flag6_groups[] = {
+       "gpio37",
+};
+static const char * const phase_flag7_groups[] = {
+       "gpio38",
+};
+static const char * const phase_flag8_groups[] = {
+       "gpio39",
+};
+static const char * const phase_flag9_groups[] = {
+       "gpio40",
+};
+static const char * const pll_bypassnl_groups[] = {
+       "gpio13",
+};
+static const char * const pll_clk_groups[] = {
+       "gpio98",
+};
+static const char * const pll_reset_groups[] = {
+       "gpio14",
+};
+static const char * const prng_rosc0_groups[] = {
+       "gpio97",
+};
+static const char * const prng_rosc1_groups[] = {
+       "gpio98",
+};
+static const char * const prng_rosc2_groups[] = {
+       "gpio99",
+};
+static const char * const prng_rosc3_groups[] = {
+       "gpio100",
+};
+static const char * const qdss_cti_groups[] = {
+       "gpio2", "gpio3", "gpio6", "gpio7", "gpio61", "gpio62", "gpio86",
+       "gpio87",
+};
+static const char * const qdss_gpio_groups[] = {
+       "gpio8", "gpio9", "gpio63", "gpio64",
+};
+static const char * const qdss_gpio0_groups[] = {
+       "gpio39", "gpio65",
+};
+static const char * const qdss_gpio1_groups[] = {
+       "gpio40", "gpio66",
+};
+static const char * const qdss_gpio10_groups[] = {
+       "gpio50", "gpio56",
+};
+static const char * const qdss_gpio11_groups[] = {
+       "gpio51", "gpio57",
+};
+static const char * const qdss_gpio12_groups[] = {
+       "gpio34", "gpio52",
+};
+static const char * const qdss_gpio13_groups[] = {
+       "gpio35", "gpio53",
+};
+static const char * const qdss_gpio14_groups[] = {
+       "gpio27", "gpio36",
+};
+static const char * const qdss_gpio15_groups[] = {
+       "gpio28", "gpio37",
+};
+static const char * const qdss_gpio2_groups[] = {
+       "gpio38", "gpio41",
+};
+static const char * const qdss_gpio3_groups[] = {
+       "gpio42", "gpio47",
+};
+static const char * const qdss_gpio4_groups[] = {
+       "gpio43", "gpio88",
+};
+static const char * const qdss_gpio5_groups[] = {
+       "gpio44", "gpio89",
+};
+static const char * const qdss_gpio6_groups[] = {
+       "gpio45", "gpio90",
+};
+static const char * const qdss_gpio7_groups[] = {
+       "gpio46", "gpio91",
+};
+static const char * const qdss_gpio8_groups[] = {
+       "gpio48", "gpio92",
+};
+static const char * const qdss_gpio9_groups[] = {
+       "gpio49", "gpio93",
+};
+static const char * const qlink0_enable_groups[] = {
+       "gpio105",
+};
+static const char * const qlink0_request_groups[] = {
+       "gpio104",
+};
+static const char * const qlink1_enable_groups[] = {
+       "gpio108",
+};
+static const char * const qlink1_request_groups[] = {
+       "gpio107",
+};
+static const char * const qup00_groups[] = {
+       "gpio0", "gpio1", "gpio2", "gpio3",
+};
+static const char * const qup01_groups[] = {
+       "gpio61", "gpio62", "gpio63", "gpio64",
+};
+static const char * const qup02_groups[] = {
+       "gpio45", "gpio46", "gpio48", "gpio56", "gpio57",
+};
+static const char * const qup10_groups[] = {
+       "gpio13", "gpio14", "gpio15", "gpio16", "gpio17",
+};
+static const char * const qup11_f1_groups[] = {
+       "gpio27", "gpio28",
+};
+static const char * const qup11_f2_groups[] = {
+       "gpio27", "gpio28",
+};
+
+static const char * const qup12_groups[] = {
+       "gpio19", "gpio19", "gpio20", "gpio20",
+};
+static const char * const qup13_f1_groups[] = {
+       "gpio25", "gpio26",
+};
+static const char * const qup13_f2_groups[] = {
+       "gpio25", "gpio26",
+};
+static const char * const qup14_groups[] = {
+       "gpio4", "gpio4", "gpio5", "gpio5",
+};
+static const char * const sd_write_groups[] = {
+       "gpio85",
+};
+static const char * const sdc1_tb_groups[] = {
+       "gpio4",
+};
+static const char * const sdc2_tb_groups[] = {
+       "gpio5",
+};
+static const char * const sp_cmu_groups[] = {
+       "gpio3",
+};
+static const char * const tgu_ch0_groups[] = {
+       "gpio61",
+};
+static const char * const tgu_ch1_groups[] = {
+       "gpio62",
+};
+static const char * const tgu_ch2_groups[] = {
+       "gpio63",
+};
+static const char * const tgu_ch3_groups[] = {
+       "gpio64",
+};
+static const char * const tsense_pwm1_groups[] = {
+       "gpio88",
+};
+static const char * const tsense_pwm2_groups[] = {
+       "gpio88",
+};
+static const char * const uim1_clk_groups[] = {
+       "gpio80",
+};
+static const char * const uim1_data_groups[] = {
+       "gpio79",
+};
+static const char * const uim1_present_groups[] = {
+       "gpio82",
+};
+static const char * const uim1_reset_groups[] = {
+       "gpio81",
+};
+static const char * const uim2_clk_groups[] = {
+       "gpio76",
+};
+static const char * const uim2_data_groups[] = {
+       "gpio75",
+};
+static const char * const uim2_present_groups[] = {
+       "gpio78",
+};
+static const char * const uim2_reset_groups[] = {
+       "gpio77",
+};
+static const char * const usb2phy_ac_groups[] = {
+       "gpio47",
+};
+static const char * const vfr_1_groups[] = {
+       "gpio49",
+};
+static const char * const vsense_trigger_groups[] = {
+       "gpio89",
+};
+static const char * const wlan1_adc0_groups[] = {
+       "gpio90",
+};
+static const char * const wlan1_adc1_groups[] = {
+       "gpio92",
+};
+static const char * const wlan2_adc0_groups[] = {
+       "gpio91",
+};
+static const char * const wlan2_adc1_groups[] = {
+       "gpio93",
+};
+
+static const struct msm_function sm6375_functions[] = {
+       FUNCTION(adsp_ext),
+       FUNCTION(agera_pll),
+       FUNCTION(atest_char),
+       FUNCTION(atest_char0),
+       FUNCTION(atest_char1),
+       FUNCTION(atest_char2),
+       FUNCTION(atest_char3),
+       FUNCTION(atest_tsens),
+       FUNCTION(atest_tsens2),
+       FUNCTION(atest_usb1),
+       FUNCTION(atest_usb10),
+       FUNCTION(atest_usb11),
+       FUNCTION(atest_usb12),
+       FUNCTION(atest_usb13),
+       FUNCTION(atest_usb2),
+       FUNCTION(atest_usb20),
+       FUNCTION(atest_usb21),
+       FUNCTION(atest_usb22),
+       FUNCTION(atest_usb23),
+       FUNCTION(audio_ref),
+       FUNCTION(btfm_slimbus),
+       FUNCTION(cam_mclk),
+       FUNCTION(cci_async),
+       FUNCTION(cci_i2c),
+       FUNCTION(cci_timer0),
+       FUNCTION(cci_timer1),
+       FUNCTION(cci_timer2),
+       FUNCTION(cci_timer3),
+       FUNCTION(cci_timer4),
+       FUNCTION(cri_trng),
+       FUNCTION(dbg_out),
+       FUNCTION(ddr_bist),
+       FUNCTION(ddr_pxi0),
+       FUNCTION(ddr_pxi1),
+       FUNCTION(ddr_pxi2),
+       FUNCTION(ddr_pxi3),
+       FUNCTION(dp_hot),
+       FUNCTION(edp_lcd),
+       FUNCTION(gcc_gp1),
+       FUNCTION(gcc_gp2),
+       FUNCTION(gcc_gp3),
+       FUNCTION(gp_pdm0),
+       FUNCTION(gp_pdm1),
+       FUNCTION(gp_pdm2),
+       FUNCTION(gpio),
+       FUNCTION(gps_tx),
+       FUNCTION(ibi_i3c),
+       FUNCTION(jitter_bist),
+       FUNCTION(ldo_en),
+       FUNCTION(ldo_update),
+       FUNCTION(lpass_ext),
+       FUNCTION(m_voc),
+       FUNCTION(mclk),
+       FUNCTION(mdp_vsync),
+       FUNCTION(mdp_vsync0),
+       FUNCTION(mdp_vsync1),
+       FUNCTION(mdp_vsync2),
+       FUNCTION(mdp_vsync3),
+       FUNCTION(mi2s_0),
+       FUNCTION(mi2s_1),
+       FUNCTION(mi2s_2),
+       FUNCTION(mss_lte),
+       FUNCTION(nav_gpio),
+       FUNCTION(nav_pps),
+       FUNCTION(pa_indicator),
+       FUNCTION(phase_flag0),
+       FUNCTION(phase_flag1),
+       FUNCTION(phase_flag10),
+       FUNCTION(phase_flag11),
+       FUNCTION(phase_flag12),
+       FUNCTION(phase_flag13),
+       FUNCTION(phase_flag14),
+       FUNCTION(phase_flag15),
+       FUNCTION(phase_flag16),
+       FUNCTION(phase_flag17),
+       FUNCTION(phase_flag18),
+       FUNCTION(phase_flag19),
+       FUNCTION(phase_flag2),
+       FUNCTION(phase_flag20),
+       FUNCTION(phase_flag21),
+       FUNCTION(phase_flag22),
+       FUNCTION(phase_flag23),
+       FUNCTION(phase_flag24),
+       FUNCTION(phase_flag25),
+       FUNCTION(phase_flag26),
+       FUNCTION(phase_flag27),
+       FUNCTION(phase_flag28),
+       FUNCTION(phase_flag29),
+       FUNCTION(phase_flag3),
+       FUNCTION(phase_flag30),
+       FUNCTION(phase_flag31),
+       FUNCTION(phase_flag4),
+       FUNCTION(phase_flag5),
+       FUNCTION(phase_flag6),
+       FUNCTION(phase_flag7),
+       FUNCTION(phase_flag8),
+       FUNCTION(phase_flag9),
+       FUNCTION(pll_bist),
+       FUNCTION(pll_bypassnl),
+       FUNCTION(pll_clk),
+       FUNCTION(pll_reset),
+       FUNCTION(prng_rosc0),
+       FUNCTION(prng_rosc1),
+       FUNCTION(prng_rosc2),
+       FUNCTION(prng_rosc3),
+       FUNCTION(qdss_cti),
+       FUNCTION(qdss_gpio),
+       FUNCTION(qdss_gpio0),
+       FUNCTION(qdss_gpio1),
+       FUNCTION(qdss_gpio10),
+       FUNCTION(qdss_gpio11),
+       FUNCTION(qdss_gpio12),
+       FUNCTION(qdss_gpio13),
+       FUNCTION(qdss_gpio14),
+       FUNCTION(qdss_gpio15),
+       FUNCTION(qdss_gpio2),
+       FUNCTION(qdss_gpio3),
+       FUNCTION(qdss_gpio4),
+       FUNCTION(qdss_gpio5),
+       FUNCTION(qdss_gpio6),
+       FUNCTION(qdss_gpio7),
+       FUNCTION(qdss_gpio8),
+       FUNCTION(qdss_gpio9),
+       FUNCTION(qlink0_enable),
+       FUNCTION(qlink0_request),
+       FUNCTION(qlink0_wmss),
+       FUNCTION(qlink1_enable),
+       FUNCTION(qlink1_request),
+       FUNCTION(qlink1_wmss),
+       FUNCTION(qup00),
+       FUNCTION(qup01),
+       FUNCTION(qup02),
+       FUNCTION(qup10),
+       FUNCTION(qup11_f1),
+       FUNCTION(qup11_f2),
+       FUNCTION(qup12),
+       FUNCTION(qup13_f1),
+       FUNCTION(qup13_f2),
+       FUNCTION(qup14),
+       FUNCTION(sd_write),
+       FUNCTION(sdc1_tb),
+       FUNCTION(sdc2_tb),
+       FUNCTION(sp_cmu),
+       FUNCTION(tgu_ch0),
+       FUNCTION(tgu_ch1),
+       FUNCTION(tgu_ch2),
+       FUNCTION(tgu_ch3),
+       FUNCTION(tsense_pwm1),
+       FUNCTION(tsense_pwm2),
+       FUNCTION(uim1_clk),
+       FUNCTION(uim1_data),
+       FUNCTION(uim1_present),
+       FUNCTION(uim1_reset),
+       FUNCTION(uim2_clk),
+       FUNCTION(uim2_data),
+       FUNCTION(uim2_present),
+       FUNCTION(uim2_reset),
+       FUNCTION(usb2phy_ac),
+       FUNCTION(usb_phy),
+       FUNCTION(vfr_1),
+       FUNCTION(vsense_trigger),
+       FUNCTION(wlan1_adc0),
+       FUNCTION(wlan1_adc1),
+       FUNCTION(wlan2_adc0),
+       FUNCTION(wlan2_adc1),
+};
+
+/*
+ * Every pin is maintained as a single group, and missing or non-existing pin
+ * would be maintained as dummy group to synchronize pin group index with
+ * pin descriptor registered with pinctrl core.
+ * Clients would not be able to request these dummy pin groups.
+ */
+static const struct msm_pingroup sm6375_groups[] = {
+       [0] = PINGROUP(0, ibi_i3c, qup00, cri_trng, _, _, _, _, _, _),
+       [1] = PINGROUP(1, ibi_i3c, qup00, cri_trng, _, _, _, _, _, _),
+       [2] = PINGROUP(2, qup00, cci_i2c, cri_trng, qdss_cti, _, _, _, _, _),
+       [3] = PINGROUP(3, qup00, cci_i2c, sp_cmu, dbg_out, qdss_cti, _, _, _, _),
+       [4] = PINGROUP(4, qup14, qup14, sdc1_tb, _, _, _, _, _, _),
+       [5] = PINGROUP(5, qup14, qup14, sdc2_tb, _, _, _, _, _, _),
+       [6] = PINGROUP(6, mdp_vsync, qdss_cti, _, _, _, _, _, _, _),
+       [7] = PINGROUP(7, qdss_cti, _, _, _, _, _, _, _, _),
+       [8] = PINGROUP(8, gp_pdm1, qdss_gpio, _, _, _, _, _, _, _),
+       [9] = PINGROUP(9, qdss_gpio, _, _, _, _, _, _, _, _),
+       [10] = PINGROUP(10, _, _, _, _, _, _, _, _, _),
+       [11] = PINGROUP(11, _, _, _, _, _, _, _, _, _),
+       [12] = PINGROUP(12, m_voc, dp_hot, _, phase_flag0, _, _, _, _, _),
+       [13] = PINGROUP(13, qup10, pll_bypassnl, _, _, _, _, _, _, _),
+       [14] = PINGROUP(14, qup10, pll_reset, _, _, _, _, _, _, _),
+       [15] = PINGROUP(15, qup10, _, _, _, _, _, _, _, _),
+       [16] = PINGROUP(16, qup10, _, _, _, _, _, _, _, _),
+       [17] = PINGROUP(17, _, phase_flag1, qup10, _, _, _, _, _, _),
+       [18] = PINGROUP(18, _, phase_flag2, _, _, _, _, _, _, _),
+       [19] = PINGROUP(19, qup12, qup12, ddr_bist, _, _, _, _, _, _),
+       [20] = PINGROUP(20, qup12, qup12, ddr_bist, _, _, _, _, _, _),
+       [21] = PINGROUP(21, gcc_gp2, ddr_bist, _, _, _, _, _, _, _),
+       [22] = PINGROUP(22, gcc_gp3, ddr_bist, _, _, _, _, _, _, _),
+       [23] = PINGROUP(23, mdp_vsync, edp_lcd, _, _, _, _, _, _, _),
+       [24] = PINGROUP(24, mdp_vsync, _, _, _, _, _, _, _, _),
+       [25] = PINGROUP(25, qup13_f1, qup13_f2, _, _, _, _, _, _, _),
+       [26] = PINGROUP(26, qup13_f1, qup13_f2, _, _, _, _, _, _, _),
+       [27] = PINGROUP(27, qup11_f1, qup11_f2, mdp_vsync, pll_bist, _, qdss_gpio14, _, _, _),
+       [28] = PINGROUP(28, qup11_f1, qup11_f2, mdp_vsync, _, qdss_gpio15, _, _, _, _),
+       [29] = PINGROUP(29, cam_mclk, _, _, _, _, _, _, _, _),
+       [30] = PINGROUP(30, cam_mclk, _, _, _, _, _, _, _, _),
+       [31] = PINGROUP(31, cam_mclk, _, _, _, _, _, _, _, _),
+       [32] = PINGROUP(32, cam_mclk, _, _, _, _, _, _, _, _),
+       [33] = PINGROUP(33, cam_mclk, _, _, _, _, _, _, _, _),
+       [34] = PINGROUP(34, cci_timer0, _, phase_flag3, qdss_gpio12, _, _, _, _, _),
+       [35] = PINGROUP(35, cci_timer1, cci_async, _, phase_flag4, qdss_gpio13, _, _, _, _),
+       [36] = PINGROUP(36, cci_timer2, cci_async, _, phase_flag5, qdss_gpio14, _, _, _, _),
+       [37] = PINGROUP(37, cci_timer3, gp_pdm0, _, phase_flag6, qdss_gpio15, _, _, _, _),
+       [38] = PINGROUP(38, cci_timer4, _, phase_flag7, qdss_gpio2, _, _, _, _, _),
+       [39] = PINGROUP(39, cci_i2c, _, phase_flag8, qdss_gpio0, _, _, _, _, _),
+       [40] = PINGROUP(40, cci_i2c, _, phase_flag9, qdss_gpio1, _, _, _, _, _),
+       [41] = PINGROUP(41, cci_i2c, _, phase_flag10, qdss_gpio2, _, _, _, _, _),
+       [42] = PINGROUP(42, cci_i2c, _, phase_flag11, qdss_gpio3, _, _, _, _, _),
+       [43] = PINGROUP(43, cci_i2c, _, phase_flag12, qdss_gpio4, _, _, _, _, _),
+       [44] = PINGROUP(44, cci_i2c, _, phase_flag13, qdss_gpio5, _, _, _, _, _),
+       [45] = PINGROUP(45, qup02, _, phase_flag14, qdss_gpio6, _, _, _, _, _),
+       [46] = PINGROUP(46, qup02, _, phase_flag15, qdss_gpio7, _, _, _, _, _),
+       [47] = PINGROUP(47, mdp_vsync0, _, phase_flag16, qdss_gpio3, _, _, usb2phy_ac, _, _),
+       [48] = PINGROUP(48, cci_async, mdp_vsync1, gcc_gp1, _, phase_flag17, qdss_gpio8, qup02,
+                       _, _),
+       [49] = PINGROUP(49, vfr_1, _, phase_flag18, qdss_gpio9, _, _, _, _, _),
+       [50] = PINGROUP(50, _, phase_flag19, qdss_gpio10, _, _, _, _, _, _),
+       [51] = PINGROUP(51, _, phase_flag20, qdss_gpio11, _, _, _, _, _, _),
+       [52] = PINGROUP(52, cci_async, gp_pdm1, _, phase_flag21, qdss_gpio12, _, _, _, _),
+       [53] = PINGROUP(53, cci_async, _, phase_flag22, qdss_gpio13, _, _, _, _, _),
+       [54] = PINGROUP(54, _, _, _, _, _, _, _, _, _),
+       [55] = PINGROUP(55, _, _, _, _, _, _, _, _, _),
+       [56] = PINGROUP(56, qup02, mdp_vsync2, _, phase_flag23, qdss_gpio10, _, _, _, _),
+       [57] = PINGROUP(57, qup02, mdp_vsync3, gp_pdm2, _, phase_flag24, qdss_gpio11, _, _, _),
+       [58] = PINGROUP(58, gcc_gp1, _, _, _, _, _, _, _, _),
+       [59] = PINGROUP(59, _, _, _, _, _, _, _, _, _),
+       [60] = PINGROUP(60, audio_ref, lpass_ext, mi2s_2, _, phase_flag25, _, _, _, _),
+       [61] = PINGROUP(61, qup01, tgu_ch0, _, phase_flag26, qdss_cti, _, _, _, _),
+       [62] = PINGROUP(62, qup01, tgu_ch1, _, phase_flag27, qdss_cti, _, _, _, _),
+       [63] = PINGROUP(63, qup01, tgu_ch2, _, phase_flag28, qdss_gpio, _, _, _, _),
+       [64] = PINGROUP(64, qup01, tgu_ch3, _, phase_flag29, qdss_gpio, _, _, _, _),
+       [65] = PINGROUP(65, mss_lte, _, qdss_gpio0, _, _, _, _, _, _),
+       [66] = PINGROUP(66, mss_lte, _, qdss_gpio1, _, _, _, _, _, _),
+       [67] = PINGROUP(67, btfm_slimbus, mi2s_1, _, phase_flag30, _, _, _, _, _),
+       [68] = PINGROUP(68, btfm_slimbus, mi2s_1, gp_pdm0, _, phase_flag31, _, _, _, _),
+       [69] = PINGROUP(69, _, _, _, _, _, _, _, _, _),
+       [70] = PINGROUP(70, _, _, _, _, _, _, _, _, _),
+       [71] = PINGROUP(71, _, _, _, _, _, _, _, _, _),
+       [72] = PINGROUP(72, _, _, _, _, _, _, _, _, _),
+       [73] = PINGROUP(73, _, _, _, _, _, _, _, _, _),
+       [74] = PINGROUP(74, _, _, _, _, _, _, _, _, _),
+       [75] = PINGROUP(75, uim2_data, _, _, _, _, _, _, _, _),
+       [76] = PINGROUP(76, uim2_clk, _, _, _, _, _, _, _, _),
+       [77] = PINGROUP(77, uim2_reset, _, _, _, _, _, _, _, _),
+       [78] = PINGROUP(78, uim2_present, _, _, _, _, _, _, _, _),
+       [79] = PINGROUP(79, uim1_data, _, _, _, _, _, _, _, _),
+       [80] = PINGROUP(80, uim1_clk, _, _, _, _, _, _, _, _),
+       [81] = PINGROUP(81, uim1_reset, _, _, _, _, _, _, _, _),
+       [82] = PINGROUP(82, uim1_present, _, _, _, _, _, _, _, _),
+       [83] = PINGROUP(83, atest_usb1, _, _, _, _, _, _, _, _),
+       [84] = PINGROUP(84, _, atest_usb10, _, _, _, _, _, _, _),
+       [85] = PINGROUP(85, sd_write, _, atest_usb11, _, _, _, _, _, _),
+       [86] = PINGROUP(86, btfm_slimbus, mi2s_1, _, qdss_cti, atest_usb12, ddr_pxi0, _, _, _),
+       [87] = PINGROUP(87, btfm_slimbus, mi2s_1, adsp_ext, _, qdss_cti, atest_usb13, ddr_pxi1, _,
+                       _),
+       [88] = PINGROUP(88, mi2s_0, _, qdss_gpio4, _, atest_usb2, ddr_pxi2, tsense_pwm1,
+                       tsense_pwm2, _),
+       [89] = PINGROUP(89, mi2s_0, agera_pll, _, qdss_gpio5, _, vsense_trigger, atest_usb20,
+                       ddr_pxi3, _),
+       [90] = PINGROUP(90, mi2s_0, jitter_bist, _, qdss_gpio6, _, wlan1_adc0, atest_usb21,
+                       ddr_pxi0, _),
+       [91] = PINGROUP(91, mi2s_0, _, qdss_gpio7, _, wlan2_adc0, atest_usb22, ddr_pxi1, _, _),
+       [92] = PINGROUP(92, _, qdss_gpio8, atest_tsens, wlan1_adc1, atest_usb23, ddr_pxi2, _, _,
+                       _),
+       [93] = PINGROUP(93, mclk, lpass_ext, _, qdss_gpio9, atest_tsens2, wlan2_adc1, ddr_pxi3,
+                       _, _),
+       [94] = PINGROUP(94, _, _, _, _, _, _, _, _, _),
+       [95] = PINGROUP(95, ldo_en, _, atest_char, _, _, _, _, _, _),
+       [96] = PINGROUP(96, ldo_update, _, atest_char0, _, _, _, _, _, _),
+       [97] = PINGROUP(97, prng_rosc0, _, atest_char1, _, _, _, _, _, _),
+       [98] = PINGROUP(98, _, atest_char2, _, _, prng_rosc1, pll_clk, _, _, _),
+       [99] = PINGROUP(99, _, atest_char3, _, _, prng_rosc2, _, _, _, _),
+       [100] = PINGROUP(100, _, _, prng_rosc3, _, _, _, _, _, _),
+       [101] = PINGROUP(101, nav_gpio, nav_pps, nav_pps, gps_tx, _, _, _, _, _),
+       [102] = PINGROUP(102, nav_gpio, nav_pps, nav_pps, gps_tx, _, _, _, _, _),
+       [103] = PINGROUP(103, qlink0_wmss, _, _, _, _, _, _, _, _),
+       [104] = PINGROUP(104, qlink0_request, _, _, _, _, _, _, _, _),
+       [105] = PINGROUP(105, qlink0_enable, _, _, _, _, _, _, _, _),
+       [106] = PINGROUP(106, qlink1_wmss, _, _, _, _, _, _, _, _),
+       [107] = PINGROUP(107, qlink1_request, gps_tx, _, _, _, _, _, _, _),
+       [108] = PINGROUP(108, qlink1_enable, gps_tx, _, _, _, _, _, _, _),
+       [109] = PINGROUP(109, _, _, _, _, _, _, _, _, _),
+       [110] = PINGROUP(110, _, _, _, _, _, _, _, _, _),
+       [111] = PINGROUP(111, _, _, _, _, _, _, _, _, _),
+       [112] = PINGROUP(112, _, _, _, _, _, _, _, _, _),
+       [113] = PINGROUP(113, _, _, _, _, _, _, _, _, _),
+       [114] = PINGROUP(114, _, _, _, _, _, _, _, _, _),
+       [115] = PINGROUP(115, _, _, _, _, _, _, _, _, _),
+       [116] = PINGROUP(116, _, _, _, _, _, _, _, _, _),
+       [117] = PINGROUP(117, _, _, _, _, _, _, _, _, _),
+       [118] = PINGROUP(118, _, _, pa_indicator, dp_hot, _, _, _, _, _),
+       [119] = PINGROUP(119, _, _, _, _, _, _, _, _, _),
+       [120] = PINGROUP(120, _, _, _, _, _, _, _, _, _),
+       [121] = PINGROUP(121, _, _, _, _, _, _, _, _, _),
+       [122] = PINGROUP(122, _, _, _, _, _, _, _, _, _),
+       [123] = PINGROUP(123, _, _, _, _, _, _, _, _, _),
+       [124] = PINGROUP(124, usb_phy, _, _, _, _, _, _, _, _),
+       [125] = PINGROUP(125, _, _, _, _, _, _, _, _, _),
+       [126] = PINGROUP(126, _, _, _, _, _, _, _, _, _),
+       [127] = PINGROUP(127, _, _, _, _, _, _, _, _, _),
+       [128] = PINGROUP(128, _, _, _, _, _, _, _, _, _),
+       [129] = PINGROUP(129, _, _, _, _, _, _, _, _, _),
+       [130] = PINGROUP(130, _, _, _, _, _, _, _, _, _),
+       [131] = PINGROUP(131, _, _, _, _, _, _, _, _, _),
+       [132] = PINGROUP(132, _, _, _, _, _, _, _, _, _),
+       [133] = PINGROUP(133, _, _, _, _, _, _, _, _, _),
+       [134] = PINGROUP(134, _, _, _, _, _, _, _, _, _),
+       [135] = PINGROUP(135, _, _, _, _, _, _, _, _, _),
+       [136] = PINGROUP(136, _, _, _, _, _, _, _, _, _),
+       [137] = PINGROUP(137, _, _, _, _, _, _, _, _, _),
+       [138] = PINGROUP(138, _, _, _, _, _, _, _, _, _),
+       [139] = PINGROUP(139, _, _, _, _, _, _, _, _, _),
+       [140] = PINGROUP(140, _, _, _, _, _, _, _, _, _),
+       [141] = PINGROUP(141, _, _, _, _, _, _, _, _, _),
+       [142] = PINGROUP(142, _, _, _, _, _, _, _, _, _),
+       [143] = PINGROUP(143, _, _, _, _, _, _, _, _, _),
+       [144] = PINGROUP(144, _, _, _, _, _, _, _, _, _),
+       [145] = PINGROUP(145, _, _, _, _, _, _, _, _, _),
+       [146] = PINGROUP(146, _, _, _, _, _, _, _, _, _),
+       [147] = PINGROUP(147, _, _, _, _, _, _, _, _, _),
+       [148] = PINGROUP(148, _, _, _, _, _, _, _, _, _),
+       [149] = PINGROUP(149, _, _, _, _, _, _, _, _, _),
+       [150] = PINGROUP(150, _, _, _, _, _, _, _, _, _),
+       [151] = PINGROUP(151, _, _, _, _, _, _, _, _, _),
+       [152] = PINGROUP(152, _, _, _, _, _, _, _, _, _),
+       [153] = PINGROUP(153, _, _, _, _, _, _, _, _, _),
+       [154] = PINGROUP(154, _, _, _, _, _, _, _, _, _),
+       [155] = PINGROUP(155, _, _, _, _, _, _, _, _, _),
+       [156] = UFS_RESET(ufs_reset, 0x1ae000),
+       [157] = SDC_PINGROUP(sdc1_rclk, 0x1a1000, 0, 0),
+       [158] = SDC_PINGROUP(sdc1_clk, 0x1a0000, 13, 6),
+       [159] = SDC_PINGROUP(sdc1_cmd, 0x1a0000, 11, 3),
+       [160] = SDC_PINGROUP(sdc1_data, 0x1a0000, 9, 0),
+       [161] = SDC_PINGROUP(sdc2_clk, 0x1a2000, 14, 6),
+       [162] = SDC_PINGROUP(sdc2_cmd, 0x1a2000, 11, 3),
+       [163] = SDC_PINGROUP(sdc2_data, 0x1a2000, 9, 0),
+};
+
+static const struct msm_gpio_wakeirq_map sm6375_mpm_map[] = {
+       { 0, 84 }, { 3, 6 }, { 4, 7 }, { 7, 8 }, { 8, 9 }, { 9, 10 }, { 11, 11 }, { 12, 13 },
+       { 13, 14 }, { 16, 16 }, { 17, 17 }, { 18, 18 }, { 19, 19 }, { 21, 20 }, { 22, 21 },
+       { 23, 23 }, { 24, 24 }, { 25, 25 }, { 27, 26 }, { 28, 27 }, { 37, 28 }, { 38, 29 },
+       { 48, 30 }, { 50, 31 }, { 51, 32 }, { 52, 33 }, { 57, 34 }, { 59, 35 }, { 60, 37 },
+       { 61, 38 }, { 62, 39 }, { 64, 40 }, { 66, 41 }, { 67, 42 }, { 68, 43 }, { 69, 44 },
+       { 78, 45 }, { 82, 36 }, { 83, 47 }, { 84, 48 }, { 85, 49 }, { 87, 50 }, { 88, 51 },
+       { 91, 52 }, { 94, 53 }, { 95, 54 }, { 96, 55 }, { 97, 56 }, { 98, 57 }, { 99, 58 },
+       { 100, 59 }, { 104, 60 }, { 107, 61 }, { 118, 62 }, { 124, 63 }, { 125, 64 }, { 126, 65 },
+       { 128, 66 }, { 129, 67 }, { 131, 69 }, { 133, 70 }, { 134, 71 }, { 136, 73 }, { 142, 74 },
+       { 150, 75 }, { 153, 76 }, { 155, 77 },
+};
+
+static const struct msm_pinctrl_soc_data sm6375_tlmm = {
+       .pins = sm6375_pins,
+       .npins = ARRAY_SIZE(sm6375_pins),
+       .functions = sm6375_functions,
+       .nfunctions = ARRAY_SIZE(sm6375_functions),
+       .groups = sm6375_groups,
+       .ngroups = ARRAY_SIZE(sm6375_groups),
+       .ngpios = 157,
+       .wakeirq_map = sm6375_mpm_map,
+       .nwakeirq_map = ARRAY_SIZE(sm6375_mpm_map),
+};
+
+static int sm6375_tlmm_probe(struct platform_device *pdev)
+{
+       return msm_pinctrl_probe(pdev, &sm6375_tlmm);
+}
+
+static const struct of_device_id sm6375_tlmm_of_match[] = {
+       { .compatible = "qcom,sm6375-tlmm", },
+       { },
+};
+
+static struct platform_driver sm6375_tlmm_driver = {
+       .driver = {
+               .name = "sm6375-tlmm",
+               .of_match_table = sm6375_tlmm_of_match,
+       },
+       .probe = sm6375_tlmm_probe,
+       .remove = msm_pinctrl_remove,
+};
+
+static int __init sm6375_tlmm_init(void)
+{
+       return platform_driver_register(&sm6375_tlmm_driver);
+}
+arch_initcall(sm6375_tlmm_init);
+
+static void __exit sm6375_tlmm_exit(void)
+{
+       platform_driver_unregister(&sm6375_tlmm_driver);
+}
+module_exit(sm6375_tlmm_exit);
+
+MODULE_DESCRIPTION("QTI SM6375 TLMM driver");
+MODULE_LICENSE("GPL");
+MODULE_DEVICE_TABLE(of, sm6375_tlmm_of_match);
index af144e724bd9c61e2ce9045b1e04e4b3d55935ed..3bd7f9fedcc340e4ea41dfc5e6755800d8c0366d 100644 (file)
@@ -1316,7 +1316,7 @@ static const struct msm_pingroup sm8250_groups[] = {
 static const struct msm_gpio_wakeirq_map sm8250_pdc_map[] = {
        { 0, 79 }, { 1, 84 }, { 2, 80 }, { 3, 82 }, { 4, 107 }, { 7, 43 },
        { 11, 42 }, { 14, 44 }, { 15, 52 }, { 19, 67 }, { 23, 68 }, { 24, 105 },
-       { 27, 92 }, { 28, 106 }, { 31, 69 }, { 35, 70 }, { 39, 37 },
+       { 27, 92 }, { 28, 106 }, { 31, 69 }, { 35, 70 }, { 39, 73 },
        { 40, 108 }, { 43, 71 }, { 45, 72 }, { 47, 83 }, { 51, 74 }, { 55, 77 },
        { 59, 78 }, { 63, 75 }, { 64, 81 }, { 65, 87 }, { 66, 88 }, { 67, 89 },
        { 68, 54 }, { 70, 85 }, { 77, 46 }, { 80, 90 }, { 81, 91 }, { 83, 97 },
index 3be2a08ae3a6aab5d4c798b9ef4f8e842793f724..ccaf40a9c0e6bf237a5e473d343f5b0b780da4f7 100644 (file)
@@ -1159,6 +1159,7 @@ static const struct of_device_id pmic_gpio_of_match[] = {
        /* pm8150l has 12 GPIOs with holes on 7 */
        { .compatible = "qcom,pm8150l-gpio", .data = (void *) 12 },
        { .compatible = "qcom,pmc8180c-gpio", .data = (void *) 12 },
+       { .compatible = "qcom,pm8226-gpio", .data = (void *) 8 },
        { .compatible = "qcom,pm8350-gpio", .data = (void *) 10 },
        { .compatible = "qcom,pm8350b-gpio", .data = (void *) 8 },
        { .compatible = "qcom,pm8350c-gpio", .data = (void *) 9 },
@@ -1175,6 +1176,8 @@ static const struct of_device_id pmic_gpio_of_match[] = {
        { .compatible = "qcom,pmi8998-gpio", .data = (void *) 14 },
        { .compatible = "qcom,pmk8350-gpio", .data = (void *) 4 },
        { .compatible = "qcom,pmm8155au-gpio", .data = (void *) 10 },
+       /* pmp8074 has 12 GPIOs with holes on 1 and 12 */
+       { .compatible = "qcom,pmp8074-gpio", .data = (void *) 12 },
        { .compatible = "qcom,pmr735a-gpio", .data = (void *) 4 },
        { .compatible = "qcom,pmr735b-gpio", .data = (void *) 4 },
        /* pms405 has 12 GPIOs with holes on 1, 9, and 10 */
index 961007ce7b3aa2af1812f2074cad2d52ac0126bd..0903a0a4183198d21f829542c97edab74ecbad29 100644 (file)
@@ -38,7 +38,9 @@ config PINCTRL_RENESAS
        select PINCTRL_PFC_R8A77995 if ARCH_R8A77995
        select PINCTRL_PFC_R8A779A0 if ARCH_R8A779A0
        select PINCTRL_PFC_R8A779F0 if ARCH_R8A779F0
+       select PINCTRL_PFC_R8A779G0 if ARCH_R8A779G0
        select PINCTRL_RZG2L if ARCH_RZG2L
+       select PINCTRL_RZV2M if ARCH_R9A09G011
        select PINCTRL_PFC_SH7203 if CPU_SUBTYPE_SH7203
        select PINCTRL_PFC_SH7264 if CPU_SUBTYPE_SH7264
        select PINCTRL_PFC_SH7269 if CPU_SUBTYPE_SH7269
@@ -153,6 +155,10 @@ config PINCTRL_PFC_R8A779A0
        bool "pin control support for R-Car V3U" if COMPILE_TEST
        select PINCTRL_SH_PFC
 
+config PINCTRL_PFC_R8A779G0
+       bool "pin control support for R-Car V4H" if COMPILE_TEST
+       select PINCTRL_SH_PFC
+
 config PINCTRL_PFC_R8A7740
        bool "pin control support for R-Mobile A1" if COMPILE_TEST
        select PINCTRL_SH_PFC_GPIO
@@ -237,6 +243,18 @@ config PINCTRL_RZN1
        help
          This selects pinctrl driver for Renesas RZ/N1 devices.
 
+config PINCTRL_RZV2M
+       bool "pin control support for RZ/V2M"
+       depends on OF
+       depends on ARCH_R9A09G011 || COMPILE_TEST
+       select GPIOLIB
+       select GENERIC_PINCTRL_GROUPS
+       select GENERIC_PINMUX_FUNCTIONS
+       select GENERIC_PINCONF
+       help
+         This selects GPIO and pinctrl driver for Renesas RZ/V2M
+         platforms.
+
 config PINCTRL_PFC_SH7203
        bool "pin control support for SH7203" if COMPILE_TEST
        select PINCTRL_SH_FUNC_GPIO
index 5d936c154a6f443846a264b40393dd29f8264282..558b30ce0dec98dad0fc011c021aefeafd8cc992 100644 (file)
@@ -31,6 +31,7 @@ obj-$(CONFIG_PINCTRL_PFC_R8A77990)    += pfc-r8a77990.o
 obj-$(CONFIG_PINCTRL_PFC_R8A77995)     += pfc-r8a77995.o
 obj-$(CONFIG_PINCTRL_PFC_R8A779A0)     += pfc-r8a779a0.o
 obj-$(CONFIG_PINCTRL_PFC_R8A779F0)     += pfc-r8a779f0.o
+obj-$(CONFIG_PINCTRL_PFC_R8A779G0)     += pfc-r8a779g0.o
 obj-$(CONFIG_PINCTRL_PFC_SH7203)       += pfc-sh7203.o
 obj-$(CONFIG_PINCTRL_PFC_SH7264)       += pfc-sh7264.o
 obj-$(CONFIG_PINCTRL_PFC_SH7269)       += pfc-sh7269.o
@@ -49,6 +50,7 @@ obj-$(CONFIG_PINCTRL_RZA1)    += pinctrl-rza1.o
 obj-$(CONFIG_PINCTRL_RZA2)     += pinctrl-rza2.o
 obj-$(CONFIG_PINCTRL_RZG2L)    += pinctrl-rzg2l.o
 obj-$(CONFIG_PINCTRL_RZN1)     += pinctrl-rzn1.o
+obj-$(CONFIG_PINCTRL_RZV2M)    += pinctrl-rzv2m.o
 
 ifeq ($(CONFIG_COMPILE_TEST),y)
 CFLAGS_pfc-sh7203.o    += -I$(srctree)/arch/sh/include/cpu-sh2a
index 8c14b2021bf0cd2dbdb6dead137d369a13deb330..c91102d3f1d1559020a0a31ba4c192b610f8f6eb 100644 (file)
@@ -644,6 +644,12 @@ static const struct of_device_id sh_pfc_of_table[] = {
                .data = &r8a779f0_pinmux_info,
        },
 #endif
+#ifdef CONFIG_PINCTRL_PFC_R8A779G0
+       {
+               .compatible = "renesas,pfc-r8a779g0",
+               .data = &r8a779g0_pinmux_info,
+       },
+#endif
 #ifdef CONFIG_PINCTRL_PFC_SH73A0
        {
                .compatible = "renesas,pfc-sh73a0",
index aaca4ee2af5554c790748fc3a07649f49c1b82f7..417c357f16b194d581afb87016ac7e531f4c7fb3 100644 (file)
@@ -1902,7 +1902,6 @@ static const struct pinmux_drive_reg pinmux_drive_regs[] = {
 enum ioctrl_regs {
        POC0,
        POC1,
-       POC2,
        POC3,
        TD0SEL1,
 };
@@ -1910,7 +1909,6 @@ enum ioctrl_regs {
 static const struct pinmux_ioctrl_reg pinmux_ioctrl_regs[] = {
        [POC0] = { 0xe60500a0, },
        [POC1] = { 0xe60508a0, },
-       [POC2] = { 0xe60510a0, },
        [POC3] = { 0xe60518a0, },
        [TD0SEL1] = { 0xe6050920, },
        { /* sentinel */ },
diff --git a/drivers/pinctrl/renesas/pfc-r8a779g0.c b/drivers/pinctrl/renesas/pfc-r8a779g0.c
new file mode 100644 (file)
index 0000000..5dd1c2c
--- /dev/null
@@ -0,0 +1,4262 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * R8A779A0 processor support - PFC hardware block.
+ *
+ * Copyright (C) 2021 Renesas Electronics Corp.
+ *
+ * This file is based on the drivers/pinctrl/renesas/pfc-r8a779a0.c
+ */
+
+#include <linux/errno.h>
+#include <linux/io.h>
+#include <linux/kernel.h>
+
+#include "sh_pfc.h"
+
+#define CFG_FLAGS (SH_PFC_PIN_CFG_DRIVE_STRENGTH | SH_PFC_PIN_CFG_PULL_UP_DOWN)
+
+#define CPU_ALL_GP(fn, sfx)                                                            \
+       PORT_GP_CFG_19(0,       fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE_18_33),  \
+       PORT_GP_CFG_23(1,       fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE_18_33),  \
+       PORT_GP_CFG_1(1, 23,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(1, 24,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(1, 25,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(1, 26,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(1, 27,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(1, 28,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_20(2,       fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_13(3,       fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE_18_33),  \
+       PORT_GP_CFG_1(3, 13,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 14,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 15,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 16,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 17,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 18,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 19,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 20,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 21,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 22,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 23,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 24,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 25,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 26,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 27,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 28,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_1(3, 29,    fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_25(4,       fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_21(5,       fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_21(6,       fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_21(7,       fn, sfx, CFG_FLAGS),                                    \
+       PORT_GP_CFG_14(8,       fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE_18_33)
+
+/* GPSR0 */
+#define GPSR0_18       F_(MSIOF2_RXD,          IP2SR0_11_8)
+#define GPSR0_17       F_(MSIOF2_SCK,          IP2SR0_7_4)
+#define GPSR0_16       F_(MSIOF2_TXD,          IP2SR0_3_0)
+#define GPSR0_15       F_(MSIOF2_SYNC,         IP1SR0_31_28)
+#define GPSR0_14       F_(MSIOF2_SS1,          IP1SR0_27_24)
+#define GPSR0_13       F_(MSIOF2_SS2,          IP1SR0_23_20)
+#define GPSR0_12       F_(MSIOF5_RXD,          IP1SR0_19_16)
+#define GPSR0_11       F_(MSIOF5_SCK,          IP1SR0_15_12)
+#define GPSR0_10       F_(MSIOF5_TXD,          IP1SR0_11_8)
+#define GPSR0_9                F_(MSIOF5_SYNC,         IP1SR0_7_4)
+#define GPSR0_8                F_(MSIOF5_SS1,          IP1SR0_3_0)
+#define GPSR0_7                F_(MSIOF5_SS2,          IP0SR0_31_28)
+#define GPSR0_6                F_(IRQ0,                IP0SR0_27_24)
+#define GPSR0_5                F_(IRQ1,                IP0SR0_23_20)
+#define GPSR0_4                F_(IRQ2,                IP0SR0_19_16)
+#define GPSR0_3                F_(IRQ3,                IP0SR0_15_12)
+#define GPSR0_2                F_(GP0_02,              IP0SR0_11_8)
+#define GPSR0_1                F_(GP0_01,              IP0SR0_7_4)
+#define GPSR0_0                F_(GP0_00,              IP0SR0_3_0)
+
+/* GPSR1 */
+#define GPSR1_28       F_(HTX3,                IP3SR1_19_16)
+#define GPSR1_27       F_(HCTS3_N,             IP3SR1_15_12)
+#define GPSR1_26       F_(HRTS3_N,             IP3SR1_11_8)
+#define GPSR1_25       F_(HSCK3,               IP3SR1_7_4)
+#define GPSR1_24       F_(HRX3,                IP3SR1_3_0)
+#define GPSR1_23       F_(GP1_23,              IP2SR1_31_28)
+#define GPSR1_22       F_(AUDIO_CLKIN,         IP2SR1_27_24)
+#define GPSR1_21       F_(AUDIO_CLKOUT,        IP2SR1_23_20)
+#define GPSR1_20       F_(SSI_SD,              IP2SR1_19_16)
+#define GPSR1_19       F_(SSI_WS,              IP2SR1_15_12)
+#define GPSR1_18       F_(SSI_SCK,             IP2SR1_11_8)
+#define GPSR1_17       F_(SCIF_CLK,            IP2SR1_7_4)
+#define GPSR1_16       F_(HRX0,                IP2SR1_3_0)
+#define GPSR1_15       F_(HSCK0,               IP1SR1_31_28)
+#define GPSR1_14       F_(HRTS0_N,             IP1SR1_27_24)
+#define GPSR1_13       F_(HCTS0_N,             IP1SR1_23_20)
+#define GPSR1_12       F_(HTX0,                IP1SR1_19_16)
+#define GPSR1_11       F_(MSIOF0_RXD,          IP1SR1_15_12)
+#define GPSR1_10       F_(MSIOF0_SCK,          IP1SR1_11_8)
+#define GPSR1_9                F_(MSIOF0_TXD,          IP1SR1_7_4)
+#define GPSR1_8                F_(MSIOF0_SYNC,         IP1SR1_3_0)
+#define GPSR1_7                F_(MSIOF0_SS1,          IP0SR1_31_28)
+#define GPSR1_6                F_(MSIOF0_SS2,          IP0SR1_27_24)
+#define GPSR1_5                F_(MSIOF1_RXD,          IP0SR1_23_20)
+#define GPSR1_4                F_(MSIOF1_TXD,          IP0SR1_19_16)
+#define GPSR1_3                F_(MSIOF1_SCK,          IP0SR1_15_12)
+#define GPSR1_2                F_(MSIOF1_SYNC,         IP0SR1_11_8)
+#define GPSR1_1                F_(MSIOF1_SS1,          IP0SR1_7_4)
+#define GPSR1_0                F_(MSIOF1_SS2,          IP0SR1_3_0)
+
+/* GPSR2 */
+#define GPSR2_19       F_(CANFD7_RX,           IP2SR2_15_12)
+#define GPSR2_18       F_(CANFD7_TX,           IP2SR2_11_8)
+#define GPSR2_17       F_(CANFD4_RX,           IP2SR2_7_4)
+#define GPSR2_16       F_(CANFD4_TX,           IP2SR2_3_0)
+#define GPSR2_15       F_(CANFD3_RX,           IP1SR2_31_28)
+#define GPSR2_14       F_(CANFD3_TX,           IP1SR2_27_24)
+#define GPSR2_13       F_(CANFD2_RX,           IP1SR2_23_20)
+#define GPSR2_12       F_(CANFD2_TX,           IP1SR2_19_16)
+#define GPSR2_11       F_(CANFD0_RX,           IP1SR2_15_12)
+#define GPSR2_10       F_(CANFD0_TX,           IP1SR2_11_8)
+#define GPSR2_9                F_(CAN_CLK,             IP1SR2_7_4)
+#define GPSR2_8                F_(TPU0TO0,             IP1SR2_3_0)
+#define GPSR2_7                F_(TPU0TO1,             IP0SR2_31_28)
+#define GPSR2_6                F_(FXR_TXDB,            IP0SR2_27_24)
+#define GPSR2_5                F_(FXR_TXENB_N,         IP0SR2_23_20)
+#define GPSR2_4                F_(RXDB_EXTFXR,         IP0SR2_19_16)
+#define GPSR2_3                F_(CLK_EXTFXR,          IP0SR2_15_12)
+#define GPSR2_2                F_(RXDA_EXTFXR,         IP0SR2_11_8)
+#define GPSR2_1                F_(FXR_TXENA_N,         IP0SR2_7_4)
+#define GPSR2_0                F_(FXR_TXDA,            IP0SR2_3_0)
+
+/* GPSR3 */
+#define GPSR3_29       F_(RPC_INT_N,           IP3SR3_23_20)
+#define GPSR3_28       F_(RPC_WP_N,            IP3SR3_19_16)
+#define GPSR3_27       F_(RPC_RESET_N,         IP3SR3_15_12)
+#define GPSR3_26       F_(QSPI1_IO3,           IP3SR3_11_8)
+#define GPSR3_25       F_(QSPI1_SSL,           IP3SR3_7_4)
+#define GPSR3_24       F_(QSPI1_IO2,           IP3SR3_3_0)
+#define GPSR3_23       F_(QSPI1_MISO_IO1,      IP2SR3_31_28)
+#define GPSR3_22       F_(QSPI1_SPCLK,         IP2SR3_27_24)
+#define GPSR3_21       F_(QSPI1_MOSI_IO0,      IP2SR3_23_20)
+#define GPSR3_20       F_(QSPI0_SPCLK,         IP2SR3_19_16)
+#define GPSR3_19       F_(QSPI0_MOSI_IO0,      IP2SR3_15_12)
+#define GPSR3_18       F_(QSPI0_MISO_IO1,      IP2SR3_11_8)
+#define GPSR3_17       F_(QSPI0_IO2,           IP2SR3_7_4)
+#define GPSR3_16       F_(QSPI0_IO3,           IP2SR3_3_0)
+#define GPSR3_15       F_(QSPI0_SSL,           IP1SR3_31_28)
+#define GPSR3_14       F_(IPC_CLKOUT,          IP1SR3_27_24)
+#define GPSR3_13       F_(IPC_CLKIN,           IP1SR3_23_20)
+#define GPSR3_12       F_(SD_WP,               IP1SR3_19_16)
+#define GPSR3_11       F_(SD_CD,               IP1SR3_15_12)
+#define GPSR3_10       F_(MMC_SD_CMD,          IP1SR3_11_8)
+#define GPSR3_9                F_(MMC_D6,              IP1SR3_7_4)
+#define GPSR3_8                F_(MMC_D7,              IP1SR3_3_0)
+#define GPSR3_7                F_(MMC_D4,              IP0SR3_31_28)
+#define GPSR3_6                F_(MMC_D5,              IP0SR3_27_24)
+#define GPSR3_5                F_(MMC_SD_D3,           IP0SR3_23_20)
+#define GPSR3_4                F_(MMC_DS,              IP0SR3_19_16)
+#define GPSR3_3                F_(MMC_SD_CLK,          IP0SR3_15_12)
+#define GPSR3_2                F_(MMC_SD_D2,           IP0SR3_11_8)
+#define GPSR3_1                F_(MMC_SD_D0,           IP0SR3_7_4)
+#define GPSR3_0                F_(MMC_SD_D1,           IP0SR3_3_0)
+
+/* GPSR4 */
+#define GPSR4_24       FM(AVS1)
+#define GPSR4_23       FM(AVS0)
+#define GPSR4_22       FM(PCIE1_CLKREQ_N)
+#define GPSR4_21       FM(PCIE0_CLKREQ_N)
+#define GPSR4_20       FM(TSN0_TXCREFCLK)
+#define GPSR4_19       FM(TSN0_TD2)
+#define GPSR4_18       FM(TSN0_TD3)
+#define GPSR4_17       FM(TSN0_RD2)
+#define GPSR4_16       FM(TSN0_RD3)
+#define GPSR4_15       FM(TSN0_TD0)
+#define GPSR4_14       FM(TSN0_TD1)
+#define GPSR4_13       FM(TSN0_RD1)
+#define GPSR4_12       FM(TSN0_TXC)
+#define GPSR4_11       FM(TSN0_RXC)
+#define GPSR4_10       FM(TSN0_RD0)
+#define GPSR4_9                FM(TSN0_TX_CTL)
+#define GPSR4_8                FM(TSN0_AVTP_PPS0)
+#define GPSR4_7                FM(TSN0_RX_CTL)
+#define GPSR4_6                FM(TSN0_AVTP_CAPTURE)
+#define GPSR4_5                FM(TSN0_AVTP_MATCH)
+#define GPSR4_4                FM(TSN0_LINK)
+#define GPSR4_3                FM(TSN0_PHY_INT)
+#define GPSR4_2                FM(TSN0_AVTP_PPS1)
+#define GPSR4_1                FM(TSN0_MDC)
+#define GPSR4_0                FM(TSN0_MDIO)
+
+/* GPSR 5 */
+#define GPSR5_20       FM(AVB2_RX_CTL)
+#define GPSR5_19       FM(AVB2_TX_CTL)
+#define GPSR5_18       FM(AVB2_RXC)
+#define GPSR5_17       FM(AVB2_RD0)
+#define GPSR5_16       FM(AVB2_TXC)
+#define GPSR5_15       FM(AVB2_TD0)
+#define GPSR5_14       FM(AVB2_RD1)
+#define GPSR5_13       FM(AVB2_RD2)
+#define GPSR5_12       FM(AVB2_TD1)
+#define GPSR5_11       FM(AVB2_TD2)
+#define GPSR5_10       FM(AVB2_MDIO)
+#define GPSR5_9                FM(AVB2_RD3)
+#define GPSR5_8                FM(AVB2_TD3)
+#define GPSR5_7                FM(AVB2_TXCREFCLK)
+#define GPSR5_6                FM(AVB2_MDC)
+#define GPSR5_5                FM(AVB2_MAGIC)
+#define GPSR5_4                FM(AVB2_PHY_INT)
+#define GPSR5_3                FM(AVB2_LINK)
+#define GPSR5_2                FM(AVB2_AVTP_MATCH)
+#define GPSR5_1                FM(AVB2_AVTP_CAPTURE)
+#define GPSR5_0                FM(AVB2_AVTP_PPS)
+
+/* GPSR 6 */
+#define GPSR6_20       F_(AVB1_TXCREFCLK,              IP2SR6_19_16)
+#define GPSR6_19       F_(AVB1_RD3,                    IP2SR6_15_12)
+#define GPSR6_18       F_(AVB1_TD3,                    IP2SR6_11_8)
+#define GPSR6_17       F_(AVB1_RD2,                    IP2SR6_7_4)
+#define GPSR6_16       F_(AVB1_TD2,                    IP2SR6_3_0)
+#define GPSR6_15       F_(AVB1_RD0,                    IP1SR6_31_28)
+#define GPSR6_14       F_(AVB1_RD1,                    IP1SR6_27_24)
+#define GPSR6_13       F_(AVB1_TD0,                    IP1SR6_23_20)
+#define GPSR6_12       F_(AVB1_TD1,                    IP1SR6_19_16)
+#define GPSR6_11       F_(AVB1_AVTP_CAPTURE,           IP1SR6_15_12)
+#define GPSR6_10       F_(AVB1_AVTP_PPS,               IP1SR6_11_8)
+#define GPSR6_9                F_(AVB1_RX_CTL,                 IP1SR6_7_4)
+#define GPSR6_8                F_(AVB1_RXC,                    IP1SR6_3_0)
+#define GPSR6_7                F_(AVB1_TX_CTL,                 IP0SR6_31_28)
+#define GPSR6_6                F_(AVB1_TXC,                    IP0SR6_27_24)
+#define GPSR6_5                F_(AVB1_AVTP_MATCH,             IP0SR6_23_20)
+#define GPSR6_4                F_(AVB1_LINK,                   IP0SR6_19_16)
+#define GPSR6_3                F_(AVB1_PHY_INT,                IP0SR6_15_12)
+#define GPSR6_2                F_(AVB1_MDC,                    IP0SR6_11_8)
+#define GPSR6_1                F_(AVB1_MAGIC,                  IP0SR6_7_4)
+#define GPSR6_0                F_(AVB1_MDIO,                   IP0SR6_3_0)
+
+/* GPSR7 */
+#define GPSR7_20       F_(AVB0_RX_CTL,                 IP2SR7_19_16)
+#define GPSR7_19       F_(AVB0_RXC,                    IP2SR7_15_12)
+#define GPSR7_18       F_(AVB0_RD0,                    IP2SR7_11_8)
+#define GPSR7_17       F_(AVB0_RD1,                    IP2SR7_7_4)
+#define GPSR7_16       F_(AVB0_TX_CTL,                 IP2SR7_3_0)
+#define GPSR7_15       F_(AVB0_TXC,                    IP1SR7_31_28)
+#define GPSR7_14       F_(AVB0_MDIO,                   IP1SR7_27_24)
+#define GPSR7_13       F_(AVB0_MDC,                    IP1SR7_23_20)
+#define GPSR7_12       F_(AVB0_RD2,                    IP1SR7_19_16)
+#define GPSR7_11       F_(AVB0_TD0,                    IP1SR7_15_12)
+#define GPSR7_10       F_(AVB0_MAGIC,                  IP1SR7_11_8)
+#define GPSR7_9                F_(AVB0_TXCREFCLK,              IP1SR7_7_4)
+#define GPSR7_8                F_(AVB0_RD3,                    IP1SR7_3_0)
+#define GPSR7_7                F_(AVB0_TD1,                    IP0SR7_31_28)
+#define GPSR7_6                F_(AVB0_TD2,                    IP0SR7_27_24)
+#define GPSR7_5                F_(AVB0_PHY_INT,                IP0SR7_23_20)
+#define GPSR7_4                F_(AVB0_LINK,                   IP0SR7_19_16)
+#define GPSR7_3                F_(AVB0_TD3,                    IP0SR7_15_12)
+#define GPSR7_2                F_(AVB0_AVTP_MATCH,             IP0SR7_11_8)
+#define GPSR7_1                F_(AVB0_AVTP_CAPTURE,           IP0SR7_7_4)
+#define GPSR7_0                F_(AVB0_AVTP_PPS,               IP0SR7_3_0)
+
+/* GPSR8 */
+#define GPSR8_13       F_(GP8_13,                      IP1SR8_23_20)
+#define GPSR8_12       F_(GP8_12,                      IP1SR8_19_16)
+#define GPSR8_11       F_(SDA5,                        IP1SR8_15_12)
+#define GPSR8_10       F_(SCL5,                        IP1SR8_11_8)
+#define GPSR8_9                F_(SDA4,                        IP1SR8_7_4)
+#define GPSR8_8                F_(SCL4,                        IP1SR8_3_0)
+#define GPSR8_7                F_(SDA3,                        IP0SR8_31_28)
+#define GPSR8_6                F_(SCL3,                        IP0SR8_27_24)
+#define GPSR8_5                F_(SDA2,                        IP0SR8_23_20)
+#define GPSR8_4                F_(SCL2,                        IP0SR8_19_16)
+#define GPSR8_3                F_(SDA1,                        IP0SR8_15_12)
+#define GPSR8_2                F_(SCL1,                        IP0SR8_11_8)
+#define GPSR8_1                F_(SDA0,                        IP0SR8_7_4)
+#define GPSR8_0                F_(SCL0,                        IP0SR8_3_0)
+
+/* SR0 */
+/* IP0SR0 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP0SR0_3_0     F_(0, 0)                FM(ERROROUTC_B)         FM(TCLK2_A)     F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR0_7_4     F_(0, 0)                FM(MSIOF3_SS1)          F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR0_11_8    F_(0, 0)                FM(MSIOF3_SS2)          F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR0_15_12   FM(IRQ3)                FM(MSIOF3_SCK)          F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR0_19_16   FM(IRQ2)                FM(MSIOF3_TXD)          F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR0_23_20   FM(IRQ1)                FM(MSIOF3_RXD)          F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR0_27_24   FM(IRQ0)                FM(MSIOF3_SYNC)         F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR0_31_28   FM(MSIOF5_SS2)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP1SR0 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP1SR0_3_0     FM(MSIOF5_SS1)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR0_7_4     FM(MSIOF5_SYNC)         F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR0_11_8    FM(MSIOF5_TXD)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR0_15_12   FM(MSIOF5_SCK)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR0_19_16   FM(MSIOF5_RXD)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR0_23_20   FM(MSIOF2_SS2)          FM(TCLK1)               FM(IRQ2_A)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR0_27_24   FM(MSIOF2_SS1)          FM(HTX1)                FM(TX1)         F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR0_31_28   FM(MSIOF2_SYNC)         FM(HRX1)                FM(RX1)         F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP2SR0 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP2SR0_3_0     FM(MSIOF2_TXD)          FM(HCTS1_N)             FM(CTS1_N)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR0_7_4     FM(MSIOF2_SCK)          FM(HRTS1_N)             FM(RTS1_N)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR0_11_8    FM(MSIOF2_RXD)          FM(HSCK1)               FM(SCK1)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* SR1 */
+/* IP0SR1 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP0SR1_3_0     FM(MSIOF1_SS2)          FM(HTX3_A)              FM(TX3)         F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR1_7_4     FM(MSIOF1_SS1)          FM(HCTS3_N_A)           FM(RX3)         F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR1_11_8    FM(MSIOF1_SYNC)         FM(HRTS3_N_A)           FM(RTS3_N)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR1_15_12   FM(MSIOF1_SCK)          FM(HSCK3_A)             FM(CTS3_N)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR1_19_16   FM(MSIOF1_TXD)          FM(HRX3_A)              FM(SCK3)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR1_23_20   FM(MSIOF1_RXD)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR1_27_24   FM(MSIOF0_SS2)          FM(HTX1_X)              FM(TX1_X)       F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR1_31_28   FM(MSIOF0_SS1)          FM(HRX1_X)              FM(RX1_X)       F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP1SR1 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP1SR1_3_0     FM(MSIOF0_SYNC)         FM(HCTS1_N_X)           FM(CTS1_N_X)    FM(CANFD5_TX_B) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR1_7_4     FM(MSIOF0_TXD)          FM(HRTS1_N_X)           FM(RTS1_N_X)    FM(CANFD5_RX_B) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR1_11_8    FM(MSIOF0_SCK)          FM(HSCK1_X)             FM(SCK1_X)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR1_15_12   FM(MSIOF0_RXD)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR1_19_16   FM(HTX0)                FM(TX0)                 F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR1_23_20   FM(HCTS0_N)             FM(CTS0_N)              FM(PWM8_A)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR1_27_24   FM(HRTS0_N)             FM(RTS0_N)              FM(PWM9_A)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR1_31_28   FM(HSCK0)               FM(SCK0)                FM(PWM0_A)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP2SR1 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP2SR1_3_0     FM(HRX0)                FM(RX0)                 F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR1_7_4     FM(SCIF_CLK)            FM(IRQ4_A)              F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR1_11_8    FM(SSI_SCK)             FM(TCLK3)               F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR1_15_12   FM(SSI_WS)              FM(TCLK4)               F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR1_19_16   FM(SSI_SD)              FM(IRQ0_A)              F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR1_23_20   FM(AUDIO_CLKOUT)        FM(IRQ1_A)              F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR1_27_24   FM(AUDIO_CLKIN)         FM(PWM3_A)              F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR1_31_28   F_(0, 0)                FM(TCLK2)               FM(MSIOF4_SS1)  FM(IRQ3_B)      F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP3SR1 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP3SR1_3_0     FM(HRX3)                FM(SCK3_A)              FM(MSIOF4_SS2)  F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP3SR1_7_4     FM(HSCK3)               FM(CTS3_N_A)            FM(MSIOF4_SCK)  FM(TPU0TO0_A)   F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP3SR1_11_8    FM(HRTS3_N)             FM(RTS3_N_A)            FM(MSIOF4_TXD)  FM(TPU0TO1_A)   F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP3SR1_15_12   FM(HCTS3_N)             FM(RX3_A)               FM(MSIOF4_RXD)  F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP3SR1_19_16   FM(HTX3)                FM(TX3_A)               FM(MSIOF4_SYNC) F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* SR2 */
+/* IP0SR2 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP0SR2_3_0     FM(FXR_TXDA)            FM(CANFD1_TX)           FM(TPU0TO2_A)   F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR2_7_4     FM(FXR_TXENA_N)         FM(CANFD1_RX)           FM(TPU0TO3_A)   F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR2_11_8    FM(RXDA_EXTFXR)         FM(CANFD5_TX)           FM(IRQ5)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR2_15_12   FM(CLK_EXTFXR)          FM(CANFD5_RX)           FM(IRQ4_B)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR2_19_16   FM(RXDB_EXTFXR)         F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR2_23_20   FM(FXR_TXENB_N)         F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR2_27_24   FM(FXR_TXDB)            F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR2_31_28   FM(TPU0TO1)             FM(CANFD6_TX)           F_(0, 0)        FM(TCLK2_B)     F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP1SR2 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP1SR2_3_0     FM(TPU0TO0)             FM(CANFD6_RX)           F_(0, 0)        FM(TCLK1_A)     F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR2_7_4     FM(CAN_CLK)             FM(FXR_TXENA_N_X)       F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR2_11_8    FM(CANFD0_TX)           FM(FXR_TXENB_N_X)       F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR2_15_12   FM(CANFD0_RX)           FM(STPWT_EXTFXR)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR2_19_16   FM(CANFD2_TX)           FM(TPU0TO2)             F_(0, 0)        FM(TCLK3_A)     F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR2_23_20   FM(CANFD2_RX)           FM(TPU0TO3)             FM(PWM1_B)      FM(TCLK4_A)     F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR2_27_24   FM(CANFD3_TX)           F_(0, 0)                FM(PWM2_B)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR2_31_28   FM(CANFD3_RX)           F_(0, 0)                FM(PWM3_B)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP2SR2 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP2SR2_3_0     FM(CANFD4_TX)           F_(0, 0)                FM(PWM4)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR2_7_4     FM(CANFD4_RX)           F_(0, 0)                FM(PWM5)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR2_11_8    FM(CANFD7_TX)           F_(0, 0)                FM(PWM6)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR2_15_12   FM(CANFD7_RX)           F_(0, 0)                FM(PWM7)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* SR3 */
+/* IP0SR3 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP0SR3_3_0     FM(MMC_SD_D1)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR3_7_4     FM(MMC_SD_D0)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR3_11_8    FM(MMC_SD_D2)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR3_15_12   FM(MMC_SD_CLK)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR3_19_16   FM(MMC_DS)              F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR3_23_20   FM(MMC_SD_D3)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR3_27_24   FM(MMC_D5)              F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR3_31_28   FM(MMC_D4)              F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP1SR3 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP1SR3_3_0     FM(MMC_D7)              F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR3_7_4     FM(MMC_D6)              F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR3_11_8    FM(MMC_SD_CMD)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR3_15_12   FM(SD_CD)               F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR3_19_16   FM(SD_WP)               F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR3_23_20   FM(IPC_CLKIN)           FM(IPC_CLKEN_IN)        FM(PWM1_A)      FM(TCLK3_X)     F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR3_27_24   FM(IPC_CLKOUT)          FM(IPC_CLKEN_OUT)       FM(ERROROUTC_A) FM(TCLK4_X)     F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR3_31_28   FM(QSPI0_SSL)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP2SR3 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP2SR3_3_0     FM(QSPI0_IO3)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR3_7_4     FM(QSPI0_IO2)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR3_11_8    FM(QSPI0_MISO_IO1)      F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR3_15_12   FM(QSPI0_MOSI_IO0)      F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR3_19_16   FM(QSPI0_SPCLK)         F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR3_23_20   FM(QSPI1_MOSI_IO0)      F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR3_27_24   FM(QSPI1_SPCLK)         F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR3_31_28   FM(QSPI1_MISO_IO1)      F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP3SR3 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP3SR3_3_0     FM(QSPI1_IO2)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP3SR3_7_4     FM(QSPI1_SSL)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP3SR3_11_8    FM(QSPI1_IO3)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP3SR3_15_12   FM(RPC_RESET_N)         F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP3SR3_19_16   FM(RPC_WP_N)            F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP3SR3_23_20   FM(RPC_INT_N)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* SR6 */
+/* IP0SR6 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP0SR6_3_0     FM(AVB1_MDIO)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR6_7_4     FM(AVB1_MAGIC)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR6_11_8    FM(AVB1_MDC)            F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR6_15_12   FM(AVB1_PHY_INT)        F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR6_19_16   FM(AVB1_LINK)           FM(AVB1_MII_TX_ER)      F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR6_23_20   FM(AVB1_AVTP_MATCH)     FM(AVB1_MII_RX_ER)      F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR6_27_24   FM(AVB1_TXC)            FM(AVB1_MII_TXC)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR6_31_28   FM(AVB1_TX_CTL)         FM(AVB1_MII_TX_EN)      F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP1SR6 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP1SR6_3_0     FM(AVB1_RXC)            FM(AVB1_MII_RXC)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR6_7_4     FM(AVB1_RX_CTL)         FM(AVB1_MII_RX_DV)      F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR6_11_8    FM(AVB1_AVTP_PPS)       FM(AVB1_MII_COL)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR6_15_12   FM(AVB1_AVTP_CAPTURE)   FM(AVB1_MII_CRS)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR6_19_16   FM(AVB1_TD1)            FM(AVB1_MII_TD1)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR6_23_20   FM(AVB1_TD0)            FM(AVB1_MII_TD0)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR6_27_24   FM(AVB1_RD1)            FM(AVB1_MII_RD1)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR6_31_28   FM(AVB1_RD0)            FM(AVB1_MII_RD0)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP2SR6 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP2SR6_3_0     FM(AVB1_TD2)            FM(AVB1_MII_TD2)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR6_7_4     FM(AVB1_RD2)            FM(AVB1_MII_RD2)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR6_11_8    FM(AVB1_TD3)            FM(AVB1_MII_TD3)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR6_15_12   FM(AVB1_RD3)            FM(AVB1_MII_RD3)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR6_19_16   FM(AVB1_TXCREFCLK)      F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* SR7 */
+/* IP0SR7 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP0SR7_3_0     FM(AVB0_AVTP_PPS)       FM(AVB0_MII_COL)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR7_7_4     FM(AVB0_AVTP_CAPTURE)   FM(AVB0_MII_CRS)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR7_11_8    FM(AVB0_AVTP_MATCH)     FM(AVB0_MII_RX_ER)      FM(CC5_OSCOUT)  F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR7_15_12   FM(AVB0_TD3)            FM(AVB0_MII_TD3)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR7_19_16   FM(AVB0_LINK)           FM(AVB0_MII_TX_ER)      F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR7_23_20   FM(AVB0_PHY_INT)        F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR7_27_24   FM(AVB0_TD2)            FM(AVB0_MII_TD2)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR7_31_28   FM(AVB0_TD1)            FM(AVB0_MII_TD1)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP1SR7 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP1SR7_3_0     FM(AVB0_RD3)            FM(AVB0_MII_RD3)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR7_7_4     FM(AVB0_TXCREFCLK)      F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR7_11_8    FM(AVB0_MAGIC)          F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR7_15_12   FM(AVB0_TD0)            FM(AVB0_MII_TD0)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR7_19_16   FM(AVB0_RD2)            FM(AVB0_MII_RD2)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR7_23_20   FM(AVB0_MDC)            F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR7_27_24   FM(AVB0_MDIO)           F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR7_31_28   FM(AVB0_TXC)            FM(AVB0_MII_TXC)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP2SR7 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP2SR7_3_0     FM(AVB0_TX_CTL)         FM(AVB0_MII_TX_EN)      F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR7_7_4     FM(AVB0_RD1)            FM(AVB0_MII_RD1)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR7_11_8    FM(AVB0_RD0)            FM(AVB0_MII_RD0)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR7_15_12   FM(AVB0_RXC)            FM(AVB0_MII_RXC)        F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP2SR7_19_16   FM(AVB0_RX_CTL)         FM(AVB0_MII_RX_DV)      F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* SR8 */
+/* IP0SR8 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP0SR8_3_0     FM(SCL0)                F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR8_7_4     FM(SDA0)                F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR8_11_8    FM(SCL1)                F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR8_15_12   FM(SDA1)                F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR8_19_16   FM(SCL2)                F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR8_23_20   FM(SDA2)                F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR8_27_24   FM(SCL3)                F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP0SR8_31_28   FM(SDA3)                F_(0, 0)                F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+/* IP1SR8 */           /* 0 */                 /* 1 */                 /* 2 */         /* 3            4        5        6        7        8        9        A        B        C        D        E        F */
+#define IP1SR8_3_0     FM(SCL4)                FM(HRX2)                FM(SCK4)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR8_7_4     FM(SDA4)                FM(HTX2)                FM(CTS4_N)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR8_11_8    FM(SCL5)                FM(HRTS2_N)             FM(RTS4_N)      F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR8_15_12   FM(SDA5)                FM(SCIF_CLK2)           F_(0, 0)        F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR8_19_16   F_(0, 0)                FM(HCTS2_N)             FM(TX4)         F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+#define IP1SR8_23_20   F_(0, 0)                FM(HSCK2)               FM(RX4)         F_(0, 0)        F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0) F_(0, 0)
+
+#define PINMUX_GPSR    \
+                                               GPSR3_29                                                                                        \
+               GPSR1_28                        GPSR3_28                                                                                        \
+               GPSR1_27                        GPSR3_27                                                                                        \
+               GPSR1_26                        GPSR3_26                                                                                        \
+               GPSR1_25                        GPSR3_25                                                                                        \
+               GPSR1_24                        GPSR3_24        GPSR4_24                                                                        \
+               GPSR1_23                        GPSR3_23        GPSR4_23                                                                        \
+               GPSR1_22                        GPSR3_22        GPSR4_22                                                                        \
+               GPSR1_21                        GPSR3_21        GPSR4_21                                                                        \
+               GPSR1_20                        GPSR3_20        GPSR4_20        GPSR5_20        GPSR6_20        GPSR7_20                        \
+               GPSR1_19        GPSR2_19        GPSR3_19        GPSR4_19        GPSR5_19        GPSR6_19        GPSR7_19                        \
+GPSR0_18       GPSR1_18        GPSR2_18        GPSR3_18        GPSR4_18        GPSR5_18        GPSR6_18        GPSR7_18                        \
+GPSR0_17       GPSR1_17        GPSR2_17        GPSR3_17        GPSR4_17        GPSR5_17        GPSR6_17        GPSR7_17                        \
+GPSR0_16       GPSR1_16        GPSR2_16        GPSR3_16        GPSR4_16        GPSR5_16        GPSR6_16        GPSR7_16                        \
+GPSR0_15       GPSR1_15        GPSR2_15        GPSR3_15        GPSR4_15        GPSR5_15        GPSR6_15        GPSR7_15                        \
+GPSR0_14       GPSR1_14        GPSR2_14        GPSR3_14        GPSR4_14        GPSR5_14        GPSR6_14        GPSR7_14                        \
+GPSR0_13       GPSR1_13        GPSR2_13        GPSR3_13        GPSR4_13        GPSR5_13        GPSR6_13        GPSR7_13        GPSR8_13        \
+GPSR0_12       GPSR1_12        GPSR2_12        GPSR3_12        GPSR4_12        GPSR5_12        GPSR6_12        GPSR7_12        GPSR8_12        \
+GPSR0_11       GPSR1_11        GPSR2_11        GPSR3_11        GPSR4_11        GPSR5_11        GPSR6_11        GPSR7_11        GPSR8_11        \
+GPSR0_10       GPSR1_10        GPSR2_10        GPSR3_10        GPSR4_10        GPSR5_10        GPSR6_10        GPSR7_10        GPSR8_10        \
+GPSR0_9                GPSR1_9         GPSR2_9         GPSR3_9         GPSR4_9         GPSR5_9         GPSR6_9         GPSR7_9         GPSR8_9         \
+GPSR0_8                GPSR1_8         GPSR2_8         GPSR3_8         GPSR4_8         GPSR5_8         GPSR6_8         GPSR7_8         GPSR8_8         \
+GPSR0_7                GPSR1_7         GPSR2_7         GPSR3_7         GPSR4_7         GPSR5_7         GPSR6_7         GPSR7_7         GPSR8_7         \
+GPSR0_6                GPSR1_6         GPSR2_6         GPSR3_6         GPSR4_6         GPSR5_6         GPSR6_6         GPSR7_6         GPSR8_6         \
+GPSR0_5                GPSR1_5         GPSR2_5         GPSR3_5         GPSR4_5         GPSR5_5         GPSR6_5         GPSR7_5         GPSR8_5         \
+GPSR0_4                GPSR1_4         GPSR2_4         GPSR3_4         GPSR4_4         GPSR5_4         GPSR6_4         GPSR7_4         GPSR8_4         \
+GPSR0_3                GPSR1_3         GPSR2_3         GPSR3_3         GPSR4_3         GPSR5_3         GPSR6_3         GPSR7_3         GPSR8_3         \
+GPSR0_2                GPSR1_2         GPSR2_2         GPSR3_2         GPSR4_2         GPSR5_2         GPSR6_2         GPSR7_2         GPSR8_2         \
+GPSR0_1                GPSR1_1         GPSR2_1         GPSR3_1         GPSR4_1         GPSR5_1         GPSR6_1         GPSR7_1         GPSR8_1         \
+GPSR0_0                GPSR1_0         GPSR2_0         GPSR3_0         GPSR4_0         GPSR5_0         GPSR6_0         GPSR7_0         GPSR8_0
+
+#define PINMUX_IPSR    \
+\
+FM(IP0SR0_3_0)         IP0SR0_3_0      FM(IP1SR0_3_0)          IP1SR0_3_0      FM(IP2SR0_3_0)          IP2SR0_3_0      \
+FM(IP0SR0_7_4)         IP0SR0_7_4      FM(IP1SR0_7_4)          IP1SR0_7_4      FM(IP2SR0_7_4)          IP2SR0_7_4      \
+FM(IP0SR0_11_8)                IP0SR0_11_8     FM(IP1SR0_11_8)         IP1SR0_11_8     FM(IP2SR0_11_8)         IP2SR0_11_8     \
+FM(IP0SR0_15_12)       IP0SR0_15_12    FM(IP1SR0_15_12)        IP1SR0_15_12    \
+FM(IP0SR0_19_16)       IP0SR0_19_16    FM(IP1SR0_19_16)        IP1SR0_19_16    \
+FM(IP0SR0_23_20)       IP0SR0_23_20    FM(IP1SR0_23_20)        IP1SR0_23_20    \
+FM(IP0SR0_27_24)       IP0SR0_27_24    FM(IP1SR0_27_24)        IP1SR0_27_24    \
+FM(IP0SR0_31_28)       IP0SR0_31_28    FM(IP1SR0_31_28)        IP1SR0_31_28    \
+\
+FM(IP0SR1_3_0)         IP0SR1_3_0      FM(IP1SR1_3_0)          IP1SR1_3_0      FM(IP2SR1_3_0)          IP2SR1_3_0      FM(IP3SR1_3_0)          IP3SR1_3_0      \
+FM(IP0SR1_7_4)         IP0SR1_7_4      FM(IP1SR1_7_4)          IP1SR1_7_4      FM(IP2SR1_7_4)          IP2SR1_7_4      FM(IP3SR1_7_4)          IP3SR1_7_4      \
+FM(IP0SR1_11_8)                IP0SR1_11_8     FM(IP1SR1_11_8)         IP1SR1_11_8     FM(IP2SR1_11_8)         IP2SR1_11_8     FM(IP3SR1_11_8)         IP3SR1_11_8     \
+FM(IP0SR1_15_12)       IP0SR1_15_12    FM(IP1SR1_15_12)        IP1SR1_15_12    FM(IP2SR1_15_12)        IP2SR1_15_12    FM(IP3SR1_15_12)        IP3SR1_15_12    \
+FM(IP0SR1_19_16)       IP0SR1_19_16    FM(IP1SR1_19_16)        IP1SR1_19_16    FM(IP2SR1_19_16)        IP2SR1_19_16    FM(IP3SR1_19_16)        IP3SR1_19_16    \
+FM(IP0SR1_23_20)       IP0SR1_23_20    FM(IP1SR1_23_20)        IP1SR1_23_20    FM(IP2SR1_23_20)        IP2SR1_23_20    \
+FM(IP0SR1_27_24)       IP0SR1_27_24    FM(IP1SR1_27_24)        IP1SR1_27_24    FM(IP2SR1_27_24)        IP2SR1_27_24    \
+FM(IP0SR1_31_28)       IP0SR1_31_28    FM(IP1SR1_31_28)        IP1SR1_31_28    FM(IP2SR1_31_28)        IP2SR1_31_28    \
+\
+FM(IP0SR2_3_0)         IP0SR2_3_0      FM(IP1SR2_3_0)          IP1SR2_3_0      FM(IP2SR2_3_0)          IP2SR2_3_0      \
+FM(IP0SR2_7_4)         IP0SR2_7_4      FM(IP1SR2_7_4)          IP1SR2_7_4      FM(IP2SR2_7_4)          IP2SR2_7_4      \
+FM(IP0SR2_11_8)                IP0SR2_11_8     FM(IP1SR2_11_8)         IP1SR2_11_8     FM(IP2SR2_11_8)         IP2SR2_11_8     \
+FM(IP0SR2_15_12)       IP0SR2_15_12    FM(IP1SR2_15_12)        IP1SR2_15_12    FM(IP2SR2_15_12)        IP2SR2_15_12    \
+FM(IP0SR2_19_16)       IP0SR2_19_16    FM(IP1SR2_19_16)        IP1SR2_19_16    \
+FM(IP0SR2_23_20)       IP0SR2_23_20    FM(IP1SR2_23_20)        IP1SR2_23_20    \
+FM(IP0SR2_27_24)       IP0SR2_27_24    FM(IP1SR2_27_24)        IP1SR2_27_24    \
+FM(IP0SR2_31_28)       IP0SR2_31_28    FM(IP1SR2_31_28)        IP1SR2_31_28    \
+\
+FM(IP0SR3_3_0)         IP0SR3_3_0      FM(IP1SR3_3_0)          IP1SR3_3_0      FM(IP2SR3_3_0)          IP2SR3_3_0      FM(IP3SR3_3_0)          IP3SR3_3_0      \
+FM(IP0SR3_7_4)         IP0SR3_7_4      FM(IP1SR3_7_4)          IP1SR3_7_4      FM(IP2SR3_7_4)          IP2SR3_7_4      FM(IP3SR3_7_4)          IP3SR3_7_4      \
+FM(IP0SR3_11_8)                IP0SR3_11_8     FM(IP1SR3_11_8)         IP1SR3_11_8     FM(IP2SR3_11_8)         IP2SR3_11_8     FM(IP3SR3_11_8)         IP3SR3_11_8     \
+FM(IP0SR3_15_12)       IP0SR3_15_12    FM(IP1SR3_15_12)        IP1SR3_15_12    FM(IP2SR3_15_12)        IP2SR3_15_12    FM(IP3SR3_15_12)        IP3SR3_15_12    \
+FM(IP0SR3_19_16)       IP0SR3_19_16    FM(IP1SR3_19_16)        IP1SR3_19_16    FM(IP2SR3_19_16)        IP2SR3_19_16    FM(IP3SR3_19_16)        IP3SR3_19_16    \
+FM(IP0SR3_23_20)       IP0SR3_23_20    FM(IP1SR3_23_20)        IP1SR3_23_20    FM(IP2SR3_23_20)        IP2SR3_23_20    FM(IP3SR3_23_20)        IP3SR3_23_20    \
+FM(IP0SR3_27_24)       IP0SR3_27_24    FM(IP1SR3_27_24)        IP1SR3_27_24    FM(IP2SR3_27_24)        IP2SR3_27_24                                            \
+FM(IP0SR3_31_28)       IP0SR3_31_28    FM(IP1SR3_31_28)        IP1SR3_31_28    FM(IP2SR3_31_28)        IP2SR3_31_28                                            \
+\
+FM(IP0SR6_3_0)         IP0SR6_3_0      FM(IP1SR6_3_0)          IP1SR6_3_0      FM(IP2SR6_3_0)          IP2SR6_3_0      \
+FM(IP0SR6_7_4)         IP0SR6_7_4      FM(IP1SR6_7_4)          IP1SR6_7_4      FM(IP2SR6_7_4)          IP2SR6_7_4      \
+FM(IP0SR6_11_8)                IP0SR6_11_8     FM(IP1SR6_11_8)         IP1SR6_11_8     FM(IP2SR6_11_8)         IP2SR6_11_8     \
+FM(IP0SR6_15_12)       IP0SR6_15_12    FM(IP1SR6_15_12)        IP1SR6_15_12    FM(IP2SR6_15_12)        IP2SR6_15_12    \
+FM(IP0SR6_19_16)       IP0SR6_19_16    FM(IP1SR6_19_16)        IP1SR6_19_16    FM(IP2SR6_19_16)        IP2SR6_19_16    \
+FM(IP0SR6_23_20)       IP0SR6_23_20    FM(IP1SR6_23_20)        IP1SR6_23_20    \
+FM(IP0SR6_27_24)       IP0SR6_27_24    FM(IP1SR6_27_24)        IP1SR6_27_24    \
+FM(IP0SR6_31_28)       IP0SR6_31_28    FM(IP1SR6_31_28)        IP1SR6_31_28    \
+\
+FM(IP0SR7_3_0)         IP0SR7_3_0      FM(IP1SR7_3_0)          IP1SR7_3_0      FM(IP2SR7_3_0)          IP2SR7_3_0      \
+FM(IP0SR7_7_4)         IP0SR7_7_4      FM(IP1SR7_7_4)          IP1SR7_7_4      FM(IP2SR7_7_4)          IP2SR7_7_4      \
+FM(IP0SR7_11_8)                IP0SR7_11_8     FM(IP1SR7_11_8)         IP1SR7_11_8     FM(IP2SR7_11_8)         IP2SR7_11_8     \
+FM(IP0SR7_15_12)       IP0SR7_15_12    FM(IP1SR7_15_12)        IP1SR7_15_12    FM(IP2SR7_15_12)        IP2SR7_15_12    \
+FM(IP0SR7_19_16)       IP0SR7_19_16    FM(IP1SR7_19_16)        IP1SR7_19_16    FM(IP2SR7_19_16)        IP2SR7_19_16    \
+FM(IP0SR7_23_20)       IP0SR7_23_20    FM(IP1SR7_23_20)        IP1SR7_23_20    \
+FM(IP0SR7_27_24)       IP0SR7_27_24    FM(IP1SR7_27_24)        IP1SR7_27_24    \
+FM(IP0SR7_31_28)       IP0SR7_31_28    FM(IP1SR7_31_28)        IP1SR7_31_28    \
+\
+FM(IP0SR8_3_0)         IP0SR8_3_0      FM(IP1SR8_3_0)          IP1SR8_3_0      \
+FM(IP0SR8_7_4)         IP0SR8_7_4      FM(IP1SR8_7_4)          IP1SR8_7_4      \
+FM(IP0SR8_11_8)                IP0SR8_11_8     FM(IP1SR8_11_8)         IP1SR8_11_8     \
+FM(IP0SR8_15_12)       IP0SR8_15_12    FM(IP1SR8_15_12)        IP1SR8_15_12    \
+FM(IP0SR8_19_16)       IP0SR8_19_16    FM(IP1SR8_19_16)        IP1SR8_19_16    \
+FM(IP0SR8_23_20)       IP0SR8_23_20    FM(IP1SR8_23_20)        IP1SR8_23_20    \
+FM(IP0SR8_27_24)       IP0SR8_27_24    \
+FM(IP0SR8_31_28)       IP0SR8_31_28
+
+/* MOD_SEL4 */                 /* 0 */                         /* 1 */
+#define MOD_SEL4_19            FM(SEL_TSN0_TD2_0)              FM(SEL_TSN0_TD2_1)
+#define MOD_SEL4_18            FM(SEL_TSN0_TD3_0)              FM(SEL_TSN0_TD3_1)
+#define MOD_SEL4_15            FM(SEL_TSN0_TD0_0)              FM(SEL_TSN0_TD0_1)
+#define MOD_SEL4_14            FM(SEL_TSN0_TD1_0)              FM(SEL_TSN0_TD1_1)
+#define MOD_SEL4_12            FM(SEL_TSN0_TXC_0)              FM(SEL_TSN0_TXC_1)
+#define MOD_SEL4_9             FM(SEL_TSN0_TX_CTL_0)           FM(SEL_TSN0_TX_CTL_1)
+#define MOD_SEL4_8             FM(SEL_TSN0_AVTP_PPS0_0)        FM(SEL_TSN0_AVTP_PPS0_1)
+#define MOD_SEL4_5             FM(SEL_TSN0_AVTP_MATCH_0)       FM(SEL_TSN0_AVTP_MATCH_1)
+#define MOD_SEL4_2             FM(SEL_TSN0_AVTP_PPS1_0)        FM(SEL_TSN0_AVTP_PPS1_1)
+#define MOD_SEL4_1             FM(SEL_TSN0_MDC_0)              FM(SEL_TSN0_MDC_1)
+
+/* MOD_SEL5 */                 /* 0 */                         /* 1 */
+#define MOD_SEL5_19            FM(SEL_AVB2_TX_CTL_0)           FM(SEL_AVB2_TX_CTL_1)
+#define MOD_SEL5_16            FM(SEL_AVB2_TXC_0)              FM(SEL_AVB2_TXC_1)
+#define MOD_SEL5_15            FM(SEL_AVB2_TD0_0)              FM(SEL_AVB2_TD0_1)
+#define MOD_SEL5_12            FM(SEL_AVB2_TD1_0)              FM(SEL_AVB2_TD1_1)
+#define MOD_SEL5_11            FM(SEL_AVB2_TD2_0)              FM(SEL_AVB2_TD2_1)
+#define MOD_SEL5_8             FM(SEL_AVB2_TD3_0)              FM(SEL_AVB2_TD3_1)
+#define MOD_SEL5_6             FM(SEL_AVB2_MDC_0)              FM(SEL_AVB2_MDC_1)
+#define MOD_SEL5_5             FM(SEL_AVB2_MAGIC_0)            FM(SEL_AVB2_MAGIC_1)
+#define MOD_SEL5_2             FM(SEL_AVB2_AVTP_MATCH_0)       FM(SEL_AVB2_AVTP_MATCH_1)
+#define MOD_SEL5_0             FM(SEL_AVB2_AVTP_PPS_0)         FM(SEL_AVB2_AVTP_PPS_1)
+
+/* MOD_SEL6 */                 /* 0 */                         /* 1 */
+#define MOD_SEL6_18            FM(SEL_AVB1_TD3_0)              FM(SEL_AVB1_TD3_1)
+#define MOD_SEL6_16            FM(SEL_AVB1_TD2_0)              FM(SEL_AVB1_TD2_1)
+#define MOD_SEL6_13            FM(SEL_AVB1_TD0_0)              FM(SEL_AVB1_TD0_1)
+#define MOD_SEL6_12            FM(SEL_AVB1_TD1_0)              FM(SEL_AVB1_TD1_1)
+#define MOD_SEL6_10            FM(SEL_AVB1_AVTP_PPS_0)         FM(SEL_AVB1_AVTP_PPS_1)
+#define MOD_SEL6_7             FM(SEL_AVB1_TX_CTL_0)           FM(SEL_AVB1_TX_CTL_1)
+#define MOD_SEL6_6             FM(SEL_AVB1_TXC_0)              FM(SEL_AVB1_TXC_1)
+#define MOD_SEL6_5             FM(SEL_AVB1_AVTP_MATCH_0)       FM(SEL_AVB1_AVTP_MATCH_1)
+#define MOD_SEL6_2             FM(SEL_AVB1_MDC_0)              FM(SEL_AVB1_MDC_1)
+#define MOD_SEL6_1             FM(SEL_AVB1_MAGIC_0)            FM(SEL_AVB1_MAGIC_1)
+
+/* MOD_SEL7 */                 /* 0 */                         /* 1 */
+#define MOD_SEL7_16            FM(SEL_AVB0_TX_CTL_0)           FM(SEL_AVB0_TX_CTL_1)
+#define MOD_SEL7_15            FM(SEL_AVB0_TXC_0)              FM(SEL_AVB0_TXC_1)
+#define MOD_SEL7_13            FM(SEL_AVB0_MDC_0)              FM(SEL_AVB0_MDC_1)
+#define MOD_SEL7_11            FM(SEL_AVB0_TD0_0)              FM(SEL_AVB0_TD0_1)
+#define MOD_SEL7_10            FM(SEL_AVB0_MAGIC_0)            FM(SEL_AVB0_MAGIC_1)
+#define MOD_SEL7_7             FM(SEL_AVB0_TD1_0)              FM(SEL_AVB0_TD1_1)
+#define MOD_SEL7_6             FM(SEL_AVB0_TD2_0)              FM(SEL_AVB0_TD2_1)
+#define MOD_SEL7_3             FM(SEL_AVB0_TD3_0)              FM(SEL_AVB0_TD3_1)
+#define MOD_SEL7_2             FM(SEL_AVB0_AVTP_MATCH_0)       FM(SEL_AVB0_AVTP_MATCH_1)
+#define MOD_SEL7_0             FM(SEL_AVB0_AVTP_PPS_0)         FM(SEL_AVB0_AVTP_PPS_1)
+
+/* MOD_SEL8 */                 /* 0 */                         /* 1 */
+#define MOD_SEL8_11            FM(SEL_SDA5_0)                  FM(SEL_SDA5_1)
+#define MOD_SEL8_10            FM(SEL_SCL5_0)                  FM(SEL_SCL5_1)
+#define MOD_SEL8_9             FM(SEL_SDA4_0)                  FM(SEL_SDA4_1)
+#define MOD_SEL8_8             FM(SEL_SCL4_0)                  FM(SEL_SCL4_1)
+#define MOD_SEL8_7             FM(SEL_SDA3_0)                  FM(SEL_SDA3_1)
+#define MOD_SEL8_6             FM(SEL_SCL3_0)                  FM(SEL_SCL3_1)
+#define MOD_SEL8_5             FM(SEL_SDA2_0)                  FM(SEL_SDA2_1)
+#define MOD_SEL8_4             FM(SEL_SCL2_0)                  FM(SEL_SCL2_1)
+#define MOD_SEL8_3             FM(SEL_SDA1_0)                  FM(SEL_SDA1_1)
+#define MOD_SEL8_2             FM(SEL_SCL1_0)                  FM(SEL_SCL1_1)
+#define MOD_SEL8_1             FM(SEL_SDA0_0)                  FM(SEL_SDA0_1)
+#define MOD_SEL8_0             FM(SEL_SCL0_0)                  FM(SEL_SCL0_1)
+
+#define PINMUX_MOD_SELS \
+\
+MOD_SEL4_19            MOD_SEL5_19                                                                             \
+MOD_SEL4_18                                    MOD_SEL6_18                                                     \
+                                                                                                               \
+                       MOD_SEL5_16             MOD_SEL6_16             MOD_SEL7_16                             \
+MOD_SEL4_15            MOD_SEL5_15                                     MOD_SEL7_15                             \
+MOD_SEL4_14                                                                                                    \
+                                               MOD_SEL6_13             MOD_SEL7_13                             \
+MOD_SEL4_12            MOD_SEL5_12             MOD_SEL6_12                                                     \
+                       MOD_SEL5_11                                     MOD_SEL7_11             MOD_SEL8_11     \
+                                               MOD_SEL6_10             MOD_SEL7_10             MOD_SEL8_10     \
+MOD_SEL4_9                                                                                     MOD_SEL8_9      \
+MOD_SEL4_8             MOD_SEL5_8                                                              MOD_SEL8_8      \
+                                               MOD_SEL6_7              MOD_SEL7_7              MOD_SEL8_7      \
+                       MOD_SEL5_6              MOD_SEL6_6              MOD_SEL7_6              MOD_SEL8_6      \
+MOD_SEL4_5             MOD_SEL5_5              MOD_SEL6_5                                      MOD_SEL8_5      \
+                                                                                               MOD_SEL8_4      \
+                                                                       MOD_SEL7_3              MOD_SEL8_3      \
+MOD_SEL4_2             MOD_SEL5_2              MOD_SEL6_2              MOD_SEL7_2              MOD_SEL8_2      \
+MOD_SEL4_1                                     MOD_SEL6_1                                      MOD_SEL8_1      \
+                       MOD_SEL5_0                                      MOD_SEL7_0              MOD_SEL8_0
+
+enum {
+       PINMUX_RESERVED = 0,
+
+       PINMUX_DATA_BEGIN,
+       GP_ALL(DATA),
+       PINMUX_DATA_END,
+
+#define F_(x, y)
+#define FM(x)   FN_##x,
+       PINMUX_FUNCTION_BEGIN,
+       GP_ALL(FN),
+       PINMUX_GPSR
+       PINMUX_IPSR
+       PINMUX_MOD_SELS
+       PINMUX_FUNCTION_END,
+#undef F_
+#undef FM
+
+#define F_(x, y)
+#define FM(x)  x##_MARK,
+       PINMUX_MARK_BEGIN,
+       PINMUX_GPSR
+       PINMUX_IPSR
+       PINMUX_MOD_SELS
+       PINMUX_MARK_END,
+#undef F_
+#undef FM
+};
+
+static const u16 pinmux_data[] = {
+       PINMUX_DATA_GP_ALL(),
+
+       PINMUX_SINGLE(AVS1),
+       PINMUX_SINGLE(AVS0),
+       PINMUX_SINGLE(PCIE1_CLKREQ_N),
+       PINMUX_SINGLE(PCIE0_CLKREQ_N),
+
+       /* TSN0 without MODSEL4 */
+       PINMUX_SINGLE(TSN0_TXCREFCLK),
+       PINMUX_SINGLE(TSN0_RD2),
+       PINMUX_SINGLE(TSN0_RD3),
+       PINMUX_SINGLE(TSN0_RD1),
+       PINMUX_SINGLE(TSN0_RXC),
+       PINMUX_SINGLE(TSN0_RD0),
+       PINMUX_SINGLE(TSN0_RX_CTL),
+       PINMUX_SINGLE(TSN0_AVTP_CAPTURE),
+       PINMUX_SINGLE(TSN0_LINK),
+       PINMUX_SINGLE(TSN0_PHY_INT),
+       PINMUX_SINGLE(TSN0_MDIO),
+       /* TSN0 with MODSEL4 */
+       PINMUX_IPSR_NOGM(0, TSN0_TD2,           SEL_TSN0_TD2_1),
+       PINMUX_IPSR_NOGM(0, TSN0_TD3,           SEL_TSN0_TD3_1),
+       PINMUX_IPSR_NOGM(0, TSN0_TD0,           SEL_TSN0_TD0_1),
+       PINMUX_IPSR_NOGM(0, TSN0_TD1,           SEL_TSN0_TD1_1),
+       PINMUX_IPSR_NOGM(0, TSN0_TXC,           SEL_TSN0_TXC_1),
+       PINMUX_IPSR_NOGM(0, TSN0_TX_CTL,        SEL_TSN0_TX_CTL_1),
+       PINMUX_IPSR_NOGM(0, TSN0_AVTP_PPS0,     SEL_TSN0_AVTP_PPS0_1),
+       PINMUX_IPSR_NOGM(0, TSN0_AVTP_MATCH,    SEL_TSN0_AVTP_MATCH_1),
+       PINMUX_IPSR_NOGM(0, TSN0_AVTP_PPS1,     SEL_TSN0_AVTP_PPS1_1),
+       PINMUX_IPSR_NOGM(0, TSN0_MDC,           SEL_TSN0_MDC_1),
+
+       /* TSN0 without MODSEL5 */
+       PINMUX_SINGLE(AVB2_RX_CTL),
+       PINMUX_SINGLE(AVB2_RXC),
+       PINMUX_SINGLE(AVB2_RD0),
+       PINMUX_SINGLE(AVB2_RD1),
+       PINMUX_SINGLE(AVB2_RD2),
+       PINMUX_SINGLE(AVB2_MDIO),
+       PINMUX_SINGLE(AVB2_RD3),
+       PINMUX_SINGLE(AVB2_TXCREFCLK),
+       PINMUX_SINGLE(AVB2_PHY_INT),
+       PINMUX_SINGLE(AVB2_LINK),
+       PINMUX_SINGLE(AVB2_AVTP_CAPTURE),
+       /* TSN0 with MODSEL5 */
+       PINMUX_IPSR_NOGM(0, AVB2_TX_CTL,        SEL_AVB2_TX_CTL_1),
+       PINMUX_IPSR_NOGM(0, AVB2_TXC,           SEL_AVB2_TXC_1),
+       PINMUX_IPSR_NOGM(0, AVB2_TD0,           SEL_AVB2_TD0_1),
+       PINMUX_IPSR_NOGM(0, AVB2_TD1,           SEL_AVB2_TD1_1),
+       PINMUX_IPSR_NOGM(0, AVB2_TD2,           SEL_AVB2_TD2_1),
+       PINMUX_IPSR_NOGM(0, AVB2_TD3,           SEL_AVB2_TD3_1),
+       PINMUX_IPSR_NOGM(0, AVB2_MDC,           SEL_AVB2_MDC_1),
+       PINMUX_IPSR_NOGM(0, AVB2_MAGIC,         SEL_AVB2_MAGIC_1),
+       PINMUX_IPSR_NOGM(0, AVB2_AVTP_MATCH,    SEL_AVB2_AVTP_MATCH_1),
+       PINMUX_IPSR_NOGM(0, AVB2_AVTP_PPS,      SEL_AVB2_AVTP_PPS_1),
+
+       /* IP0SR0 */
+       PINMUX_IPSR_GPSR(IP0SR0_3_0,    ERROROUTC_B),
+       PINMUX_IPSR_GPSR(IP0SR0_3_0,    TCLK2_A),
+
+       PINMUX_IPSR_GPSR(IP0SR0_7_4,    MSIOF3_SS1),
+
+       PINMUX_IPSR_GPSR(IP0SR0_11_8,   MSIOF3_SS2),
+
+       PINMUX_IPSR_GPSR(IP0SR0_15_12,  IRQ3),
+       PINMUX_IPSR_GPSR(IP0SR0_15_12,  MSIOF3_SCK),
+
+       PINMUX_IPSR_GPSR(IP0SR0_19_16,  IRQ2),
+       PINMUX_IPSR_GPSR(IP0SR0_19_16,  MSIOF3_TXD),
+
+       PINMUX_IPSR_GPSR(IP0SR0_23_20,  IRQ1),
+       PINMUX_IPSR_GPSR(IP0SR0_23_20,  MSIOF3_RXD),
+
+       PINMUX_IPSR_GPSR(IP0SR0_27_24,  IRQ0),
+       PINMUX_IPSR_GPSR(IP0SR0_27_24,  MSIOF3_SYNC),
+
+       PINMUX_IPSR_GPSR(IP0SR0_31_28,  MSIOF5_SS2),
+
+       /* IP1SR0 */
+       PINMUX_IPSR_GPSR(IP1SR0_3_0,    MSIOF5_SS1),
+
+       PINMUX_IPSR_GPSR(IP1SR0_7_4,    MSIOF5_SYNC),
+
+       PINMUX_IPSR_GPSR(IP1SR0_11_8,   MSIOF5_TXD),
+
+       PINMUX_IPSR_GPSR(IP1SR0_15_12,  MSIOF5_SCK),
+
+       PINMUX_IPSR_GPSR(IP1SR0_19_16,  MSIOF5_RXD),
+
+       PINMUX_IPSR_GPSR(IP1SR0_23_20,  MSIOF2_SS2),
+       PINMUX_IPSR_GPSR(IP1SR0_23_20,  TCLK1),
+       PINMUX_IPSR_GPSR(IP1SR0_23_20,  IRQ2_A),
+
+       PINMUX_IPSR_GPSR(IP1SR0_27_24,  MSIOF2_SS1),
+       PINMUX_IPSR_GPSR(IP1SR0_27_24,  HTX1),
+       PINMUX_IPSR_GPSR(IP1SR0_27_24,  TX1),
+
+       PINMUX_IPSR_GPSR(IP1SR0_31_28,  MSIOF2_SYNC),
+       PINMUX_IPSR_GPSR(IP1SR0_31_28,  HRX1),
+       PINMUX_IPSR_GPSR(IP1SR0_31_28,  RX1),
+
+       /* IP2SR0 */
+       PINMUX_IPSR_GPSR(IP2SR0_3_0,    MSIOF2_TXD),
+       PINMUX_IPSR_GPSR(IP2SR0_3_0,    HCTS1_N),
+       PINMUX_IPSR_GPSR(IP2SR0_3_0,    CTS1_N),
+
+       PINMUX_IPSR_GPSR(IP2SR0_7_4,    MSIOF2_SCK),
+       PINMUX_IPSR_GPSR(IP2SR0_7_4,    HRTS1_N),
+       PINMUX_IPSR_GPSR(IP2SR0_7_4,    RTS1_N),
+
+       PINMUX_IPSR_GPSR(IP2SR0_11_8,   MSIOF2_RXD),
+       PINMUX_IPSR_GPSR(IP2SR0_11_8,   HSCK1),
+       PINMUX_IPSR_GPSR(IP2SR0_11_8,   SCK1),
+
+       /* IP0SR1 */
+       PINMUX_IPSR_GPSR(IP0SR1_3_0,    MSIOF1_SS2),
+       PINMUX_IPSR_GPSR(IP0SR1_3_0,    HTX3_A),
+       PINMUX_IPSR_GPSR(IP0SR1_3_0,    TX3),
+
+       PINMUX_IPSR_GPSR(IP0SR1_7_4,    MSIOF1_SS1),
+       PINMUX_IPSR_GPSR(IP0SR1_7_4,    HCTS3_N_A),
+       PINMUX_IPSR_GPSR(IP0SR1_7_4,    RX3),
+
+       PINMUX_IPSR_GPSR(IP0SR1_11_8,   MSIOF1_SYNC),
+       PINMUX_IPSR_GPSR(IP0SR1_11_8,   HRTS3_N_A),
+       PINMUX_IPSR_GPSR(IP0SR1_11_8,   RTS3_N),
+
+       PINMUX_IPSR_GPSR(IP0SR1_15_12,  MSIOF1_SCK),
+       PINMUX_IPSR_GPSR(IP0SR1_15_12,  HSCK3_A),
+       PINMUX_IPSR_GPSR(IP0SR1_15_12,  CTS3_N),
+
+       PINMUX_IPSR_GPSR(IP0SR1_19_16,  MSIOF1_TXD),
+       PINMUX_IPSR_GPSR(IP0SR1_19_16,  HRX3_A),
+       PINMUX_IPSR_GPSR(IP0SR1_19_16,  SCK3),
+
+       PINMUX_IPSR_GPSR(IP0SR1_23_20,  MSIOF1_RXD),
+
+       PINMUX_IPSR_GPSR(IP0SR1_27_24,  MSIOF0_SS2),
+       PINMUX_IPSR_GPSR(IP0SR1_27_24,  HTX1_X),
+       PINMUX_IPSR_GPSR(IP0SR1_27_24,  TX1_X),
+
+       PINMUX_IPSR_GPSR(IP0SR1_31_28,  MSIOF0_SS1),
+       PINMUX_IPSR_GPSR(IP0SR1_31_28,  HRX1_X),
+       PINMUX_IPSR_GPSR(IP0SR1_31_28,  RX1_X),
+
+       /* IP1SR1 */
+       PINMUX_IPSR_GPSR(IP1SR1_3_0,    MSIOF0_SYNC),
+       PINMUX_IPSR_GPSR(IP1SR1_3_0,    HCTS1_N_X),
+       PINMUX_IPSR_GPSR(IP1SR1_3_0,    CTS1_N_X),
+       PINMUX_IPSR_GPSR(IP1SR1_3_0,    CANFD5_TX_B),
+
+       PINMUX_IPSR_GPSR(IP1SR1_7_4,    MSIOF0_TXD),
+       PINMUX_IPSR_GPSR(IP1SR1_7_4,    HRTS1_N_X),
+       PINMUX_IPSR_GPSR(IP1SR1_7_4,    RTS1_N_X),
+       PINMUX_IPSR_GPSR(IP1SR1_7_4,    CANFD5_RX_B),
+
+       PINMUX_IPSR_GPSR(IP1SR1_11_8,   MSIOF0_SCK),
+       PINMUX_IPSR_GPSR(IP1SR1_11_8,   HSCK1_X),
+       PINMUX_IPSR_GPSR(IP1SR1_11_8,   SCK1_X),
+
+       PINMUX_IPSR_GPSR(IP1SR1_15_12,  MSIOF0_RXD),
+
+       PINMUX_IPSR_GPSR(IP1SR1_19_16,  HTX0),
+       PINMUX_IPSR_GPSR(IP1SR1_19_16,  TX0),
+
+       PINMUX_IPSR_GPSR(IP1SR1_23_20,  HCTS0_N),
+       PINMUX_IPSR_GPSR(IP1SR1_23_20,  CTS0_N),
+       PINMUX_IPSR_GPSR(IP1SR1_23_20,  PWM8_A),
+
+       PINMUX_IPSR_GPSR(IP1SR1_27_24,  HRTS0_N),
+       PINMUX_IPSR_GPSR(IP1SR1_27_24,  RTS0_N),
+       PINMUX_IPSR_GPSR(IP1SR1_27_24,  PWM9_A),
+
+       PINMUX_IPSR_GPSR(IP1SR1_31_28,  HSCK0),
+       PINMUX_IPSR_GPSR(IP1SR1_31_28,  SCK0),
+       PINMUX_IPSR_GPSR(IP1SR1_31_28,  PWM0_A),
+
+       /* IP2SR1 */
+       PINMUX_IPSR_GPSR(IP2SR1_3_0,    HRX0),
+       PINMUX_IPSR_GPSR(IP2SR1_3_0,    RX0),
+
+       PINMUX_IPSR_GPSR(IP2SR1_7_4,    SCIF_CLK),
+       PINMUX_IPSR_GPSR(IP2SR1_7_4,    IRQ4_A),
+
+       PINMUX_IPSR_GPSR(IP2SR1_11_8,   SSI_SCK),
+       PINMUX_IPSR_GPSR(IP2SR1_11_8,   TCLK3),
+
+       PINMUX_IPSR_GPSR(IP2SR1_15_12,  SSI_WS),
+       PINMUX_IPSR_GPSR(IP2SR1_15_12,  TCLK4),
+
+       PINMUX_IPSR_GPSR(IP2SR1_19_16,  SSI_SD),
+       PINMUX_IPSR_GPSR(IP2SR1_19_16,  IRQ0_A),
+
+       PINMUX_IPSR_GPSR(IP2SR1_23_20,  AUDIO_CLKOUT),
+       PINMUX_IPSR_GPSR(IP2SR1_23_20,  IRQ1_A),
+
+       PINMUX_IPSR_GPSR(IP2SR1_27_24,  AUDIO_CLKIN),
+       PINMUX_IPSR_GPSR(IP2SR1_27_24,  PWM3_A),
+
+       PINMUX_IPSR_GPSR(IP2SR1_31_28,  TCLK2),
+       PINMUX_IPSR_GPSR(IP2SR1_31_28,  MSIOF4_SS1),
+       PINMUX_IPSR_GPSR(IP2SR1_31_28,  IRQ3_B),
+
+       /* IP3SR1 */
+       PINMUX_IPSR_GPSR(IP3SR1_3_0,    HRX3),
+       PINMUX_IPSR_GPSR(IP3SR1_3_0,    SCK3_A),
+       PINMUX_IPSR_GPSR(IP3SR1_3_0,    MSIOF4_SS2),
+
+       PINMUX_IPSR_GPSR(IP3SR1_7_4,    HSCK3),
+       PINMUX_IPSR_GPSR(IP3SR1_7_4,    CTS3_N_A),
+       PINMUX_IPSR_GPSR(IP3SR1_7_4,    MSIOF4_SCK),
+       PINMUX_IPSR_GPSR(IP3SR1_7_4,    TPU0TO0_A),
+
+       PINMUX_IPSR_GPSR(IP3SR1_11_8,   HRTS3_N),
+       PINMUX_IPSR_GPSR(IP3SR1_11_8,   RTS3_N_A),
+       PINMUX_IPSR_GPSR(IP3SR1_11_8,   MSIOF4_TXD),
+       PINMUX_IPSR_GPSR(IP3SR1_11_8,   TPU0TO1_A),
+
+       PINMUX_IPSR_GPSR(IP3SR1_15_12,  HCTS3_N),
+       PINMUX_IPSR_GPSR(IP3SR1_15_12,  RX3_A),
+       PINMUX_IPSR_GPSR(IP3SR1_15_12,  MSIOF4_RXD),
+
+       PINMUX_IPSR_GPSR(IP3SR1_19_16,  HTX3),
+       PINMUX_IPSR_GPSR(IP3SR1_19_16,  TX3_A),
+       PINMUX_IPSR_GPSR(IP3SR1_19_16,  MSIOF4_SYNC),
+
+       /* IP0SR2 */
+       PINMUX_IPSR_GPSR(IP0SR2_3_0,    FXR_TXDA),
+       PINMUX_IPSR_GPSR(IP0SR2_3_0,    CANFD1_TX),
+       PINMUX_IPSR_GPSR(IP0SR2_3_0,    TPU0TO2_A),
+
+       PINMUX_IPSR_GPSR(IP0SR2_7_4,    FXR_TXENA_N),
+       PINMUX_IPSR_GPSR(IP0SR2_7_4,    CANFD1_RX),
+       PINMUX_IPSR_GPSR(IP0SR2_7_4,    TPU0TO3_A),
+
+       PINMUX_IPSR_GPSR(IP0SR2_11_8,   RXDA_EXTFXR),
+       PINMUX_IPSR_GPSR(IP0SR2_11_8,   CANFD5_TX),
+       PINMUX_IPSR_GPSR(IP0SR2_11_8,   IRQ5),
+
+       PINMUX_IPSR_GPSR(IP0SR2_15_12,  CLK_EXTFXR),
+       PINMUX_IPSR_GPSR(IP0SR2_15_12,  CANFD5_RX),
+       PINMUX_IPSR_GPSR(IP0SR2_15_12,  IRQ4_B),
+
+       PINMUX_IPSR_GPSR(IP0SR2_19_16,  RXDB_EXTFXR),
+
+       PINMUX_IPSR_GPSR(IP0SR2_23_20,  FXR_TXENB_N),
+
+       PINMUX_IPSR_GPSR(IP0SR2_27_24,  FXR_TXDB),
+
+       PINMUX_IPSR_GPSR(IP0SR2_31_28,  TPU0TO1),
+       PINMUX_IPSR_GPSR(IP0SR2_31_28,  CANFD6_TX),
+       PINMUX_IPSR_GPSR(IP0SR2_31_28,  TCLK2_B),
+
+       /* IP1SR2 */
+       PINMUX_IPSR_GPSR(IP1SR2_3_0,    TPU0TO0),
+       PINMUX_IPSR_GPSR(IP1SR2_3_0,    CANFD6_RX),
+       PINMUX_IPSR_GPSR(IP1SR2_3_0,    TCLK1_A),
+
+       PINMUX_IPSR_GPSR(IP1SR2_7_4,    CAN_CLK),
+       PINMUX_IPSR_GPSR(IP1SR2_7_4,    FXR_TXENA_N_X),
+
+       PINMUX_IPSR_GPSR(IP1SR2_11_8,   CANFD0_TX),
+       PINMUX_IPSR_GPSR(IP1SR2_11_8,   FXR_TXENB_N_X),
+
+       PINMUX_IPSR_GPSR(IP1SR2_15_12,  CANFD0_RX),
+       PINMUX_IPSR_GPSR(IP1SR2_15_12,  STPWT_EXTFXR),
+
+       PINMUX_IPSR_GPSR(IP1SR2_19_16,  CANFD2_TX),
+       PINMUX_IPSR_GPSR(IP1SR2_19_16,  TPU0TO2),
+       PINMUX_IPSR_GPSR(IP1SR2_19_16,  TCLK3_A),
+
+       PINMUX_IPSR_GPSR(IP1SR2_23_20,  CANFD2_RX),
+       PINMUX_IPSR_GPSR(IP1SR2_23_20,  TPU0TO3),
+       PINMUX_IPSR_GPSR(IP1SR2_23_20,  PWM1_B),
+       PINMUX_IPSR_GPSR(IP1SR2_23_20,  TCLK4_A),
+
+       PINMUX_IPSR_GPSR(IP1SR2_27_24,  CANFD3_TX),
+       PINMUX_IPSR_GPSR(IP1SR2_27_24,  PWM2_B),
+
+       PINMUX_IPSR_GPSR(IP1SR2_31_28,  CANFD3_RX),
+       PINMUX_IPSR_GPSR(IP1SR2_31_28,  PWM3_B),
+
+       /* IP2SR2 */
+       PINMUX_IPSR_GPSR(IP2SR2_3_0,    CANFD4_TX),
+       PINMUX_IPSR_GPSR(IP2SR2_3_0,    PWM4),
+
+       PINMUX_IPSR_GPSR(IP2SR2_7_4,    CANFD4_RX),
+       PINMUX_IPSR_GPSR(IP2SR2_7_4,    PWM5),
+
+       PINMUX_IPSR_GPSR(IP2SR2_11_8,   CANFD7_TX),
+       PINMUX_IPSR_GPSR(IP2SR2_11_8,   PWM6),
+
+       PINMUX_IPSR_GPSR(IP2SR2_15_12,  CANFD7_RX),
+       PINMUX_IPSR_GPSR(IP2SR2_15_12,  PWM7),
+
+       /* IP0SR3 */
+       PINMUX_IPSR_GPSR(IP0SR3_3_0,    MMC_SD_D1),
+       PINMUX_IPSR_GPSR(IP0SR3_7_4,    MMC_SD_D0),
+       PINMUX_IPSR_GPSR(IP0SR3_11_8,   MMC_SD_D2),
+       PINMUX_IPSR_GPSR(IP0SR3_15_12,  MMC_SD_CLK),
+       PINMUX_IPSR_GPSR(IP0SR3_19_16,  MMC_DS),
+       PINMUX_IPSR_GPSR(IP0SR3_23_20,  MMC_SD_D3),
+       PINMUX_IPSR_GPSR(IP0SR3_27_24,  MMC_D5),
+       PINMUX_IPSR_GPSR(IP0SR3_31_28,  MMC_D4),
+
+       /* IP1SR3 */
+       PINMUX_IPSR_GPSR(IP1SR3_3_0,    MMC_D7),
+
+       PINMUX_IPSR_GPSR(IP1SR3_7_4,    MMC_D6),
+
+       PINMUX_IPSR_GPSR(IP1SR3_11_8,   MMC_SD_CMD),
+
+       PINMUX_IPSR_GPSR(IP1SR3_15_12,  SD_CD),
+
+       PINMUX_IPSR_GPSR(IP1SR3_19_16,  SD_WP),
+
+       PINMUX_IPSR_GPSR(IP1SR3_23_20,  IPC_CLKIN),
+       PINMUX_IPSR_GPSR(IP1SR3_23_20,  IPC_CLKEN_IN),
+       PINMUX_IPSR_GPSR(IP1SR3_23_20,  PWM1_A),
+       PINMUX_IPSR_GPSR(IP1SR3_23_20,  TCLK3_X),
+
+       PINMUX_IPSR_GPSR(IP1SR3_27_24,  IPC_CLKOUT),
+       PINMUX_IPSR_GPSR(IP1SR3_27_24,  IPC_CLKEN_OUT),
+       PINMUX_IPSR_GPSR(IP1SR3_27_24,  ERROROUTC_A),
+       PINMUX_IPSR_GPSR(IP1SR3_27_24,  TCLK4_X),
+
+       PINMUX_IPSR_GPSR(IP1SR3_31_28,  QSPI0_SSL),
+
+       /* IP2SR3 */
+       PINMUX_IPSR_GPSR(IP2SR3_3_0,    QSPI0_IO3),
+       PINMUX_IPSR_GPSR(IP2SR3_7_4,    QSPI0_IO2),
+       PINMUX_IPSR_GPSR(IP2SR3_11_8,   QSPI0_MISO_IO1),
+       PINMUX_IPSR_GPSR(IP2SR3_15_12,  QSPI0_MOSI_IO0),
+       PINMUX_IPSR_GPSR(IP2SR3_19_16,  QSPI0_SPCLK),
+       PINMUX_IPSR_GPSR(IP2SR3_23_20,  QSPI1_MOSI_IO0),
+       PINMUX_IPSR_GPSR(IP2SR3_27_24,  QSPI1_SPCLK),
+       PINMUX_IPSR_GPSR(IP2SR3_31_28,  QSPI1_MISO_IO1),
+
+       /* IP3SR3 */
+       PINMUX_IPSR_GPSR(IP3SR3_3_0,    QSPI1_IO2),
+       PINMUX_IPSR_GPSR(IP3SR3_7_4,    QSPI1_SSL),
+       PINMUX_IPSR_GPSR(IP3SR3_11_8,   QSPI1_IO3),
+       PINMUX_IPSR_GPSR(IP3SR3_15_12,  RPC_RESET_N),
+       PINMUX_IPSR_GPSR(IP3SR3_19_16,  RPC_WP_N),
+       PINMUX_IPSR_GPSR(IP3SR3_23_20,  RPC_INT_N),
+
+       /* IP0SR6 */
+       PINMUX_IPSR_GPSR(IP0SR6_3_0,    AVB1_MDIO),
+
+       PINMUX_IPSR_MSEL(IP0SR6_7_4,    AVB1_MAGIC,             SEL_AVB1_MAGIC_1),
+
+       PINMUX_IPSR_MSEL(IP0SR6_11_8,   AVB1_MDC,               SEL_AVB1_MDC_1),
+
+       PINMUX_IPSR_GPSR(IP0SR6_15_12,  AVB1_PHY_INT),
+
+       PINMUX_IPSR_GPSR(IP0SR6_19_16,  AVB1_LINK),
+       PINMUX_IPSR_GPSR(IP0SR6_19_16,  AVB1_MII_TX_ER),
+
+       PINMUX_IPSR_MSEL(IP0SR6_23_20,  AVB1_AVTP_MATCH,        SEL_AVB1_AVTP_MATCH_1),
+       PINMUX_IPSR_MSEL(IP0SR6_23_20,  AVB1_MII_RX_ER,         SEL_AVB1_AVTP_MATCH_0),
+
+       PINMUX_IPSR_MSEL(IP0SR6_27_24,  AVB1_TXC,               SEL_AVB1_TXC_1),
+       PINMUX_IPSR_MSEL(IP0SR6_27_24,  AVB1_MII_TXC,           SEL_AVB1_TXC_0),
+
+       PINMUX_IPSR_MSEL(IP0SR6_31_28,  AVB1_TX_CTL,            SEL_AVB1_TX_CTL_1),
+       PINMUX_IPSR_MSEL(IP0SR6_31_28,  AVB1_MII_TX_EN,         SEL_AVB1_TX_CTL_0),
+
+       /* IP1SR6 */
+       PINMUX_IPSR_GPSR(IP1SR6_3_0,    AVB1_RXC),
+       PINMUX_IPSR_GPSR(IP1SR6_3_0,    AVB1_MII_RXC),
+
+       PINMUX_IPSR_GPSR(IP1SR6_7_4,    AVB1_RX_CTL),
+       PINMUX_IPSR_GPSR(IP1SR6_7_4,    AVB1_MII_RX_DV),
+
+       PINMUX_IPSR_MSEL(IP1SR6_11_8,   AVB1_AVTP_PPS,          SEL_AVB1_AVTP_PPS_1),
+       PINMUX_IPSR_MSEL(IP1SR6_11_8,   AVB1_MII_COL,           SEL_AVB1_AVTP_PPS_0),
+
+       PINMUX_IPSR_GPSR(IP1SR6_15_12,  AVB1_AVTP_CAPTURE),
+       PINMUX_IPSR_GPSR(IP1SR6_15_12,  AVB1_MII_CRS),
+
+       PINMUX_IPSR_MSEL(IP1SR6_19_16,  AVB1_TD1,               SEL_AVB1_TD1_1),
+       PINMUX_IPSR_MSEL(IP1SR6_19_16,  AVB1_MII_TD1,           SEL_AVB1_TD1_0),
+
+       PINMUX_IPSR_MSEL(IP1SR6_23_20,  AVB1_TD0,               SEL_AVB1_TD0_1),
+       PINMUX_IPSR_MSEL(IP1SR6_23_20,  AVB1_MII_TD0,           SEL_AVB1_TD0_0),
+
+       PINMUX_IPSR_GPSR(IP1SR6_27_24,  AVB1_RD1),
+       PINMUX_IPSR_GPSR(IP1SR6_27_24,  AVB1_MII_RD1),
+
+       PINMUX_IPSR_GPSR(IP1SR6_31_28,  AVB1_RD0),
+       PINMUX_IPSR_GPSR(IP1SR6_31_28,  AVB1_MII_RD0),
+
+       /* IP2SR6 */
+       PINMUX_IPSR_MSEL(IP2SR6_3_0,    AVB1_TD2,               SEL_AVB1_TD2_1),
+       PINMUX_IPSR_MSEL(IP2SR6_3_0,    AVB1_MII_TD2,           SEL_AVB1_TD2_0),
+
+       PINMUX_IPSR_GPSR(IP2SR6_7_4,    AVB1_RD2),
+       PINMUX_IPSR_GPSR(IP2SR6_7_4,    AVB1_MII_RD2),
+
+       PINMUX_IPSR_MSEL(IP2SR6_11_8,   AVB1_TD3,               SEL_AVB1_TD3_1),
+       PINMUX_IPSR_MSEL(IP2SR6_11_8,   AVB1_MII_TD3,           SEL_AVB1_TD3_0),
+
+       PINMUX_IPSR_GPSR(IP2SR6_15_12,  AVB1_RD3),
+       PINMUX_IPSR_GPSR(IP2SR6_15_12,  AVB1_MII_RD3),
+
+       PINMUX_IPSR_GPSR(IP2SR6_19_16,  AVB1_TXCREFCLK),
+
+       /* IP0SR7 */
+       PINMUX_IPSR_MSEL(IP0SR7_3_0,    AVB0_AVTP_PPS,          SEL_AVB0_AVTP_PPS_1),
+       PINMUX_IPSR_MSEL(IP0SR7_3_0,    AVB0_MII_COL,           SEL_AVB0_AVTP_PPS_0),
+
+       PINMUX_IPSR_GPSR(IP0SR7_7_4,    AVB0_AVTP_CAPTURE),
+       PINMUX_IPSR_GPSR(IP0SR7_7_4,    AVB0_MII_CRS),
+
+       PINMUX_IPSR_MSEL(IP0SR7_11_8,   AVB0_AVTP_MATCH,        SEL_AVB0_AVTP_MATCH_1),
+       PINMUX_IPSR_MSEL(IP0SR7_11_8,   AVB0_MII_RX_ER,         SEL_AVB0_AVTP_MATCH_0),
+       PINMUX_IPSR_MSEL(IP0SR7_11_8,   CC5_OSCOUT,             SEL_AVB0_AVTP_MATCH_0),
+
+       PINMUX_IPSR_MSEL(IP0SR7_15_12,  AVB0_TD3,               SEL_AVB0_TD3_1),
+       PINMUX_IPSR_MSEL(IP0SR7_15_12,  AVB0_MII_TD3,           SEL_AVB0_TD3_0),
+
+       PINMUX_IPSR_GPSR(IP0SR7_19_16,  AVB0_LINK),
+       PINMUX_IPSR_GPSR(IP0SR7_19_16,  AVB0_MII_TX_ER),
+
+       PINMUX_IPSR_GPSR(IP0SR7_23_20,  AVB0_PHY_INT),
+
+       PINMUX_IPSR_MSEL(IP0SR7_27_24,  AVB0_TD2,               SEL_AVB0_TD2_1),
+       PINMUX_IPSR_MSEL(IP0SR7_27_24,  AVB0_MII_TD2,           SEL_AVB0_TD2_0),
+
+       PINMUX_IPSR_MSEL(IP0SR7_31_28,  AVB0_TD1,               SEL_AVB0_TD1_1),
+       PINMUX_IPSR_MSEL(IP0SR7_31_28,  AVB0_MII_TD1,           SEL_AVB0_TD1_0),
+
+       /* IP1SR7 */
+       PINMUX_IPSR_GPSR(IP1SR7_3_0,    AVB0_RD3),
+       PINMUX_IPSR_GPSR(IP1SR7_3_0,    AVB0_MII_RD3),
+
+       PINMUX_IPSR_GPSR(IP1SR7_7_4,    AVB0_TXCREFCLK),
+
+       PINMUX_IPSR_MSEL(IP1SR7_11_8,   AVB0_MAGIC,             SEL_AVB0_MAGIC_1),
+
+       PINMUX_IPSR_MSEL(IP1SR7_15_12,  AVB0_TD0,               SEL_AVB0_TD0_1),
+       PINMUX_IPSR_MSEL(IP1SR7_15_12,  AVB0_MII_TD0,           SEL_AVB0_TD0_0),
+
+       PINMUX_IPSR_GPSR(IP1SR7_19_16,  AVB0_RD2),
+       PINMUX_IPSR_GPSR(IP1SR7_19_16,  AVB0_MII_RD2),
+
+       PINMUX_IPSR_MSEL(IP1SR7_23_20,  AVB0_MDC,               SEL_AVB0_MDC_1),
+
+       PINMUX_IPSR_GPSR(IP1SR7_27_24,  AVB0_MDIO),
+
+       PINMUX_IPSR_MSEL(IP1SR7_31_28,  AVB0_TXC,               SEL_AVB0_TXC_1),
+       PINMUX_IPSR_MSEL(IP1SR7_31_28,  AVB0_MII_TXC,           SEL_AVB0_TXC_0),
+
+       /* IP2SR7 */
+       PINMUX_IPSR_MSEL(IP2SR7_3_0,    AVB0_TX_CTL,            SEL_AVB0_TX_CTL_1),
+       PINMUX_IPSR_MSEL(IP2SR7_3_0,    AVB0_MII_TX_EN,         SEL_AVB0_TX_CTL_0),
+
+       PINMUX_IPSR_GPSR(IP2SR7_7_4,    AVB0_RD1),
+       PINMUX_IPSR_GPSR(IP2SR7_7_4,    AVB0_MII_RD1),
+
+       PINMUX_IPSR_GPSR(IP2SR7_11_8,   AVB0_RD0),
+       PINMUX_IPSR_GPSR(IP2SR7_11_8,   AVB0_MII_RD0),
+
+       PINMUX_IPSR_GPSR(IP2SR7_15_12,  AVB0_RXC),
+       PINMUX_IPSR_GPSR(IP2SR7_15_12,  AVB0_MII_RXC),
+
+       PINMUX_IPSR_GPSR(IP2SR7_19_16,  AVB0_RX_CTL),
+       PINMUX_IPSR_GPSR(IP2SR7_19_16,  AVB0_MII_RX_DV),
+
+       /* IP0SR8 */
+       PINMUX_IPSR_MSEL(IP0SR8_3_0,    SCL0,                   SEL_SCL0_0),
+       PINMUX_IPSR_MSEL(IP0SR8_7_4,    SDA0,                   SEL_SDA0_0),
+       PINMUX_IPSR_MSEL(IP0SR8_11_8,   SCL1,                   SEL_SCL1_0),
+       PINMUX_IPSR_MSEL(IP0SR8_15_12,  SDA1,                   SEL_SDA1_0),
+       PINMUX_IPSR_MSEL(IP0SR8_19_16,  SCL2,                   SEL_SCL2_0),
+       PINMUX_IPSR_MSEL(IP0SR8_23_20,  SDA2,                   SEL_SDA2_0),
+       PINMUX_IPSR_MSEL(IP0SR8_27_24,  SCL3,                   SEL_SCL3_0),
+       PINMUX_IPSR_MSEL(IP0SR8_31_28,  SDA3,                   SEL_SDA3_0),
+
+       /* IP1SR8 */
+       PINMUX_IPSR_MSEL(IP1SR8_3_0,    SCL4,                   SEL_SCL4_0),
+       PINMUX_IPSR_MSEL(IP1SR8_3_0,    HRX2,                   SEL_SCL4_0),
+       PINMUX_IPSR_MSEL(IP1SR8_3_0,    SCK4,                   SEL_SCL4_0),
+
+       PINMUX_IPSR_MSEL(IP1SR8_7_4,    SDA4,                   SEL_SDA4_0),
+       PINMUX_IPSR_MSEL(IP1SR8_7_4,    HTX2,                   SEL_SDA4_0),
+       PINMUX_IPSR_MSEL(IP1SR8_7_4,    CTS4_N,                 SEL_SDA4_0),
+
+       PINMUX_IPSR_MSEL(IP1SR8_11_8,   SCL5,                   SEL_SCL5_0),
+       PINMUX_IPSR_MSEL(IP1SR8_11_8,   HRTS2_N,                SEL_SCL5_0),
+       PINMUX_IPSR_MSEL(IP1SR8_11_8,   RTS4_N,                 SEL_SCL5_0),
+
+       PINMUX_IPSR_MSEL(IP1SR8_15_12,  SDA5,                   SEL_SDA5_0),
+       PINMUX_IPSR_MSEL(IP1SR8_15_12,  SCIF_CLK2,              SEL_SDA5_0),
+
+       PINMUX_IPSR_GPSR(IP1SR8_19_16,  HCTS2_N),
+       PINMUX_IPSR_GPSR(IP1SR8_19_16,  TX4),
+
+       PINMUX_IPSR_GPSR(IP1SR8_23_20,  HSCK2),
+       PINMUX_IPSR_GPSR(IP1SR8_23_20,  RX4),
+};
+
+/*
+ * Pins not associated with a GPIO port.
+ */
+enum {
+       GP_ASSIGN_LAST(),
+};
+
+static const struct sh_pfc_pin pinmux_pins[] = {
+       PINMUX_GPIO_GP_ALL(),
+};
+
+/* - AVB0 ------------------------------------------------ */
+static const unsigned int avb0_link_pins[] = {
+       /* AVB0_LINK */
+       RCAR_GP_PIN(7, 4),
+};
+static const unsigned int avb0_link_mux[] = {
+       AVB0_LINK_MARK,
+};
+static const unsigned int avb0_magic_pins[] = {
+       /* AVB0_MAGIC */
+       RCAR_GP_PIN(7, 10),
+};
+static const unsigned int avb0_magic_mux[] = {
+       AVB0_MAGIC_MARK,
+};
+static const unsigned int avb0_phy_int_pins[] = {
+       /* AVB0_PHY_INT */
+       RCAR_GP_PIN(7, 5),
+};
+static const unsigned int avb0_phy_int_mux[] = {
+       AVB0_PHY_INT_MARK,
+};
+static const unsigned int avb0_mdio_pins[] = {
+       /* AVB0_MDC, AVB0_MDIO */
+       RCAR_GP_PIN(7, 13), RCAR_GP_PIN(7, 14),
+};
+static const unsigned int avb0_mdio_mux[] = {
+       AVB0_MDC_MARK, AVB0_MDIO_MARK,
+};
+static const unsigned int avb0_rgmii_pins[] = {
+       /*
+        * AVB0_TX_CTL, AVB0_TXC, AVB0_TD0, AVB0_TD1, AVB0_TD2, AVB0_TD3,
+        * AVB0_RX_CTL, AVB0_RXC, AVB0_RD0, AVB0_RD1, AVB0_RD2, AVB0_RD3,
+        */
+       RCAR_GP_PIN(7, 16), RCAR_GP_PIN(7, 15),
+       RCAR_GP_PIN(7, 11), RCAR_GP_PIN(7,  7),
+       RCAR_GP_PIN(7,  6), RCAR_GP_PIN(7,  3),
+       RCAR_GP_PIN(7, 20), RCAR_GP_PIN(7, 19),
+       RCAR_GP_PIN(7, 18), RCAR_GP_PIN(7, 17),
+       RCAR_GP_PIN(7, 12), RCAR_GP_PIN(7,  8),
+};
+static const unsigned int avb0_rgmii_mux[] = {
+       AVB0_TX_CTL_MARK,       AVB0_TXC_MARK,
+       AVB0_TD0_MARK,          AVB0_TD1_MARK,
+       AVB0_TD2_MARK,          AVB0_TD3_MARK,
+       AVB0_RX_CTL_MARK,       AVB0_RXC_MARK,
+       AVB0_RD0_MARK,          AVB0_RD1_MARK,
+       AVB0_RD2_MARK,          AVB0_RD3_MARK,
+};
+static const unsigned int avb0_txcrefclk_pins[] = {
+       /* AVB0_TXCREFCLK */
+       RCAR_GP_PIN(7, 9),
+};
+static const unsigned int avb0_txcrefclk_mux[] = {
+       AVB0_TXCREFCLK_MARK,
+};
+static const unsigned int avb0_avtp_pps_pins[] = {
+       /* AVB0_AVTP_PPS */
+       RCAR_GP_PIN(7, 0),
+};
+static const unsigned int avb0_avtp_pps_mux[] = {
+       AVB0_AVTP_PPS_MARK,
+};
+static const unsigned int avb0_avtp_capture_pins[] = {
+       /* AVB0_AVTP_CAPTURE */
+       RCAR_GP_PIN(7, 1),
+};
+static const unsigned int avb0_avtp_capture_mux[] = {
+       AVB0_AVTP_CAPTURE_MARK,
+};
+static const unsigned int avb0_avtp_match_pins[] = {
+       /* AVB0_AVTP_MATCH */
+       RCAR_GP_PIN(7, 2),
+};
+static const unsigned int avb0_avtp_match_mux[] = {
+       AVB0_AVTP_MATCH_MARK,
+};
+
+/* - AVB1 ------------------------------------------------ */
+static const unsigned int avb1_link_pins[] = {
+       /* AVB1_LINK */
+       RCAR_GP_PIN(6, 4),
+};
+static const unsigned int avb1_link_mux[] = {
+       AVB1_LINK_MARK,
+};
+static const unsigned int avb1_magic_pins[] = {
+       /* AVB1_MAGIC */
+       RCAR_GP_PIN(6, 1),
+};
+static const unsigned int avb1_magic_mux[] = {
+       AVB1_MAGIC_MARK,
+};
+static const unsigned int avb1_phy_int_pins[] = {
+       /* AVB1_PHY_INT */
+       RCAR_GP_PIN(6, 3),
+};
+static const unsigned int avb1_phy_int_mux[] = {
+       AVB1_PHY_INT_MARK,
+};
+static const unsigned int avb1_mdio_pins[] = {
+       /* AVB1_MDC, AVB1_MDIO */
+       RCAR_GP_PIN(6, 2), RCAR_GP_PIN(6, 0),
+};
+static const unsigned int avb1_mdio_mux[] = {
+       AVB1_MDC_MARK, AVB1_MDIO_MARK,
+};
+static const unsigned int avb1_rgmii_pins[] = {
+       /*
+        * AVB1_TX_CTL, AVB1_TXC, AVB1_TD0, AVB1_TD1, AVB1_TD2, AVB1_TD3,
+        * AVB1_RX_CTL, AVB1_RXC, AVB1_RD0, AVB1_RD1, AVB1_RD2, AVB1_RD3,
+        */
+       RCAR_GP_PIN(6,  7), RCAR_GP_PIN(6,  6),
+       RCAR_GP_PIN(6, 13), RCAR_GP_PIN(6, 12),
+       RCAR_GP_PIN(6, 16), RCAR_GP_PIN(6, 18),
+       RCAR_GP_PIN(6,  9), RCAR_GP_PIN(6,  8),
+       RCAR_GP_PIN(6, 15), RCAR_GP_PIN(6, 14),
+       RCAR_GP_PIN(6, 17), RCAR_GP_PIN(6, 19),
+};
+static const unsigned int avb1_rgmii_mux[] = {
+       AVB1_TX_CTL_MARK,       AVB1_TXC_MARK,
+       AVB1_TD0_MARK,          AVB1_TD1_MARK,
+       AVB1_TD2_MARK,          AVB1_TD3_MARK,
+       AVB1_RX_CTL_MARK,       AVB1_RXC_MARK,
+       AVB1_RD0_MARK,          AVB1_RD1_MARK,
+       AVB1_RD2_MARK,          AVB1_RD3_MARK,
+};
+static const unsigned int avb1_txcrefclk_pins[] = {
+       /* AVB1_TXCREFCLK */
+       RCAR_GP_PIN(6, 20),
+};
+static const unsigned int avb1_txcrefclk_mux[] = {
+       AVB1_TXCREFCLK_MARK,
+};
+static const unsigned int avb1_avtp_pps_pins[] = {
+       /* AVB1_AVTP_PPS */
+       RCAR_GP_PIN(6, 10),
+};
+static const unsigned int avb1_avtp_pps_mux[] = {
+       AVB1_AVTP_PPS_MARK,
+};
+static const unsigned int avb1_avtp_capture_pins[] = {
+       /* AVB1_AVTP_CAPTURE */
+       RCAR_GP_PIN(6, 11),
+};
+static const unsigned int avb1_avtp_capture_mux[] = {
+       AVB1_AVTP_CAPTURE_MARK,
+};
+static const unsigned int avb1_avtp_match_pins[] = {
+       /* AVB1_AVTP_MATCH */
+       RCAR_GP_PIN(6, 5),
+};
+static const unsigned int avb1_avtp_match_mux[] = {
+       AVB1_AVTP_MATCH_MARK,
+};
+
+/* - AVB2 ------------------------------------------------ */
+static const unsigned int avb2_link_pins[] = {
+       /* AVB2_LINK */
+       RCAR_GP_PIN(5, 3),
+};
+static const unsigned int avb2_link_mux[] = {
+       AVB2_LINK_MARK,
+};
+static const unsigned int avb2_magic_pins[] = {
+       /* AVB2_MAGIC */
+       RCAR_GP_PIN(5, 5),
+};
+static const unsigned int avb2_magic_mux[] = {
+       AVB2_MAGIC_MARK,
+};
+static const unsigned int avb2_phy_int_pins[] = {
+       /* AVB2_PHY_INT */
+       RCAR_GP_PIN(5, 4),
+};
+static const unsigned int avb2_phy_int_mux[] = {
+       AVB2_PHY_INT_MARK,
+};
+static const unsigned int avb2_mdio_pins[] = {
+       /* AVB2_MDC, AVB2_MDIO */
+       RCAR_GP_PIN(5, 6), RCAR_GP_PIN(5, 10),
+};
+static const unsigned int avb2_mdio_mux[] = {
+       AVB2_MDC_MARK, AVB2_MDIO_MARK,
+};
+static const unsigned int avb2_rgmii_pins[] = {
+       /*
+        * AVB2_TX_CTL, AVB2_TXC, AVB2_TD0, AVB2_TD1, AVB2_TD2, AVB2_TD3,
+        * AVB2_RX_CTL, AVB2_RXC, AVB2_RD0, AVB2_RD1, AVB2_RD2, AVB2_RD3,
+        */
+       RCAR_GP_PIN(5, 19), RCAR_GP_PIN(5, 16),
+       RCAR_GP_PIN(5, 15), RCAR_GP_PIN(5, 12),
+       RCAR_GP_PIN(5, 11), RCAR_GP_PIN(5,  8),
+       RCAR_GP_PIN(5, 20), RCAR_GP_PIN(5, 18),
+       RCAR_GP_PIN(5, 17), RCAR_GP_PIN(5, 14),
+       RCAR_GP_PIN(5, 13), RCAR_GP_PIN(5,  9),
+};
+static const unsigned int avb2_rgmii_mux[] = {
+       AVB2_TX_CTL_MARK,       AVB2_TXC_MARK,
+       AVB2_TD0_MARK,          AVB2_TD1_MARK,
+       AVB2_TD2_MARK,          AVB2_TD3_MARK,
+       AVB2_RX_CTL_MARK,       AVB2_RXC_MARK,
+       AVB2_RD0_MARK,          AVB2_RD1_MARK,
+       AVB2_RD2_MARK,          AVB2_RD3_MARK,
+};
+static const unsigned int avb2_txcrefclk_pins[] = {
+       /* AVB2_TXCREFCLK */
+       RCAR_GP_PIN(5, 7),
+};
+static const unsigned int avb2_txcrefclk_mux[] = {
+       AVB2_TXCREFCLK_MARK,
+};
+static const unsigned int avb2_avtp_pps_pins[] = {
+       /* AVB2_AVTP_PPS */
+       RCAR_GP_PIN(5, 0),
+};
+static const unsigned int avb2_avtp_pps_mux[] = {
+       AVB2_AVTP_PPS_MARK,
+};
+static const unsigned int avb2_avtp_capture_pins[] = {
+       /* AVB2_AVTP_CAPTURE */
+       RCAR_GP_PIN(5, 1),
+};
+static const unsigned int avb2_avtp_capture_mux[] = {
+       AVB2_AVTP_CAPTURE_MARK,
+};
+static const unsigned int avb2_avtp_match_pins[] = {
+       /* AVB2_AVTP_MATCH */
+       RCAR_GP_PIN(5, 2),
+};
+static const unsigned int avb2_avtp_match_mux[] = {
+       AVB2_AVTP_MATCH_MARK,
+};
+
+/* - CANFD0 ----------------------------------------------------------------- */
+static const unsigned int canfd0_data_pins[] = {
+       /* CANFD0_TX, CANFD0_RX */
+       RCAR_GP_PIN(2, 10), RCAR_GP_PIN(2, 11),
+};
+static const unsigned int canfd0_data_mux[] = {
+       CANFD0_TX_MARK, CANFD0_RX_MARK,
+};
+
+/* - CANFD1 ----------------------------------------------------------------- */
+static const unsigned int canfd1_data_pins[] = {
+       /* CANFD1_TX, CANFD1_RX */
+       RCAR_GP_PIN(2, 0), RCAR_GP_PIN(2, 1),
+};
+static const unsigned int canfd1_data_mux[] = {
+       CANFD1_TX_MARK, CANFD1_RX_MARK,
+};
+
+/* - CANFD2 ----------------------------------------------------------------- */
+static const unsigned int canfd2_data_pins[] = {
+       /* CANFD2_TX, CANFD2_RX */
+       RCAR_GP_PIN(2, 12), RCAR_GP_PIN(2, 13),
+};
+static const unsigned int canfd2_data_mux[] = {
+       CANFD2_TX_MARK, CANFD2_RX_MARK,
+};
+
+/* - CANFD3 ----------------------------------------------------------------- */
+static const unsigned int canfd3_data_pins[] = {
+       /* CANFD3_TX, CANFD3_RX */
+       RCAR_GP_PIN(2, 14), RCAR_GP_PIN(2, 15),
+};
+static const unsigned int canfd3_data_mux[] = {
+       CANFD3_TX_MARK, CANFD3_RX_MARK,
+};
+
+/* - CANFD4 ----------------------------------------------------------------- */
+static const unsigned int canfd4_data_pins[] = {
+       /* CANFD4_TX, CANFD4_RX */
+       RCAR_GP_PIN(2, 16), RCAR_GP_PIN(2, 17),
+};
+static const unsigned int canfd4_data_mux[] = {
+       CANFD4_TX_MARK, CANFD4_RX_MARK,
+};
+
+/* - CANFD5 ----------------------------------------------------------------- */
+static const unsigned int canfd5_data_pins[] = {
+       /* CANFD5_TX, CANFD5_RX */
+       RCAR_GP_PIN(2, 2), RCAR_GP_PIN(2, 3),
+};
+static const unsigned int canfd5_data_mux[] = {
+       CANFD5_TX_MARK, CANFD5_RX_MARK,
+};
+
+/* - CANFD5_B ----------------------------------------------------------------- */
+static const unsigned int canfd5_data_b_pins[] = {
+       /* CANFD5_TX_B, CANFD5_RX_B */
+       RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 9),
+};
+static const unsigned int canfd5_data_b_mux[] = {
+       CANFD5_TX_B_MARK, CANFD5_RX_B_MARK,
+};
+
+/* - CANFD6 ----------------------------------------------------------------- */
+static const unsigned int canfd6_data_pins[] = {
+       /* CANFD6_TX, CANFD6_RX */
+       RCAR_GP_PIN(2, 7), RCAR_GP_PIN(2, 8),
+};
+static const unsigned int canfd6_data_mux[] = {
+       CANFD6_TX_MARK, CANFD6_RX_MARK,
+};
+
+/* - CANFD7 ----------------------------------------------------------------- */
+static const unsigned int canfd7_data_pins[] = {
+       /* CANFD7_TX, CANFD7_RX */
+       RCAR_GP_PIN(2, 18), RCAR_GP_PIN(2, 19),
+};
+static const unsigned int canfd7_data_mux[] = {
+       CANFD7_TX_MARK, CANFD7_RX_MARK,
+};
+
+/* - CANFD Clock ------------------------------------------------------------ */
+static const unsigned int can_clk_pins[] = {
+       /* CAN_CLK */
+       RCAR_GP_PIN(2, 9),
+};
+static const unsigned int can_clk_mux[] = {
+       CAN_CLK_MARK,
+};
+
+/* - HSCIF0 ----------------------------------------------------------------- */
+static const unsigned int hscif0_data_pins[] = {
+       /* HRX0, HTX0 */
+       RCAR_GP_PIN(1, 16), RCAR_GP_PIN(1, 12),
+};
+static const unsigned int hscif0_data_mux[] = {
+       HRX0_MARK, HTX0_MARK,
+};
+static const unsigned int hscif0_clk_pins[] = {
+       /* HSCK0 */
+       RCAR_GP_PIN(1, 15),
+};
+static const unsigned int hscif0_clk_mux[] = {
+       HSCK0_MARK,
+};
+static const unsigned int hscif0_ctrl_pins[] = {
+       /* HRTS0_N, HCTS0_N */
+       RCAR_GP_PIN(1, 14), RCAR_GP_PIN(1, 13),
+};
+static const unsigned int hscif0_ctrl_mux[] = {
+       HRTS0_N_MARK, HCTS0_N_MARK,
+};
+
+/* - HSCIF1 ----------------------------------------------------------------- */
+static const unsigned int hscif1_data_pins[] = {
+       /* HRX1, HTX1 */
+       RCAR_GP_PIN(0, 15), RCAR_GP_PIN(0, 14),
+};
+static const unsigned int hscif1_data_mux[] = {
+       HRX1_MARK, HTX1_MARK,
+};
+static const unsigned int hscif1_clk_pins[] = {
+       /* HSCK1 */
+       RCAR_GP_PIN(0, 18),
+};
+static const unsigned int hscif1_clk_mux[] = {
+       HSCK1_MARK,
+};
+static const unsigned int hscif1_ctrl_pins[] = {
+       /* HRTS1_N, HCTS1_N */
+       RCAR_GP_PIN(0, 17), RCAR_GP_PIN(0, 16),
+};
+static const unsigned int hscif1_ctrl_mux[] = {
+       HRTS1_N_MARK, HCTS1_N_MARK,
+};
+
+/* - HSCIF1_X---------------------------------------------------------------- */
+static const unsigned int hscif1_data_x_pins[] = {
+       /* HRX1_X, HTX1_X */
+       RCAR_GP_PIN(1, 7), RCAR_GP_PIN(1, 6),
+};
+static const unsigned int hscif1_data_x_mux[] = {
+       HRX1_X_MARK, HTX1_X_MARK,
+};
+static const unsigned int hscif1_clk_x_pins[] = {
+       /* HSCK1_X */
+       RCAR_GP_PIN(1, 10),
+};
+static const unsigned int hscif1_clk_x_mux[] = {
+       HSCK1_X_MARK,
+};
+static const unsigned int hscif1_ctrl_x_pins[] = {
+       /* HRTS1_N_X, HCTS1_N_X */
+       RCAR_GP_PIN(1, 9), RCAR_GP_PIN(1, 8),
+};
+static const unsigned int hscif1_ctrl_x_mux[] = {
+       HRTS1_N_X_MARK, HCTS1_N_X_MARK,
+};
+
+/* - HSCIF2 ----------------------------------------------------------------- */
+static const unsigned int hscif2_data_pins[] = {
+       /* HRX2, HTX2 */
+       RCAR_GP_PIN(8, 8), RCAR_GP_PIN(8, 9),
+};
+static const unsigned int hscif2_data_mux[] = {
+       HRX2_MARK, HTX2_MARK,
+};
+static const unsigned int hscif2_clk_pins[] = {
+       /* HSCK2 */
+       RCAR_GP_PIN(8, 13),
+};
+static const unsigned int hscif2_clk_mux[] = {
+       HSCK2_MARK,
+};
+static const unsigned int hscif2_ctrl_pins[] = {
+       /* HRTS2_N, HCTS2_N */
+       RCAR_GP_PIN(8, 10), RCAR_GP_PIN(8, 12),
+};
+static const unsigned int hscif2_ctrl_mux[] = {
+       HRTS2_N_MARK, HCTS2_N_MARK,
+};
+
+/* - HSCIF3 ----------------------------------------------------------------- */
+static const unsigned int hscif3_data_pins[] = {
+       /* HRX3, HTX3 */
+       RCAR_GP_PIN(1, 24), RCAR_GP_PIN(1, 28),
+};
+static const unsigned int hscif3_data_mux[] = {
+       HRX3_MARK, HTX3_MARK,
+};
+static const unsigned int hscif3_clk_pins[] = {
+       /* HSCK3 */
+       RCAR_GP_PIN(1, 25),
+};
+static const unsigned int hscif3_clk_mux[] = {
+       HSCK3_MARK,
+};
+static const unsigned int hscif3_ctrl_pins[] = {
+       /* HRTS3_N, HCTS3_N */
+       RCAR_GP_PIN(1, 26), RCAR_GP_PIN(1, 27),
+};
+static const unsigned int hscif3_ctrl_mux[] = {
+       HRTS3_N_MARK, HCTS3_N_MARK,
+};
+
+/* - HSCIF3_A ----------------------------------------------------------------- */
+static const unsigned int hscif3_data_a_pins[] = {
+       /* HRX3_A, HTX3_A */
+       RCAR_GP_PIN(1, 4), RCAR_GP_PIN(1, 0),
+};
+static const unsigned int hscif3_data_a_mux[] = {
+       HRX3_A_MARK, HTX3_A_MARK,
+};
+static const unsigned int hscif3_clk_a_pins[] = {
+       /* HSCK3_A */
+       RCAR_GP_PIN(1, 3),
+};
+static const unsigned int hscif3_clk_a_mux[] = {
+       HSCK3_A_MARK,
+};
+static const unsigned int hscif3_ctrl_a_pins[] = {
+       /* HRTS3_N_A, HCTS3_N_A */
+       RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 1),
+};
+static const unsigned int hscif3_ctrl_a_mux[] = {
+       HRTS3_N_A_MARK, HCTS3_N_A_MARK,
+};
+
+/* - I2C0 ------------------------------------------------------------------- */
+static const unsigned int i2c0_pins[] = {
+       /* SDA0, SCL0 */
+       RCAR_GP_PIN(8, 1), RCAR_GP_PIN(8, 0),
+};
+static const unsigned int i2c0_mux[] = {
+       SDA0_MARK, SCL0_MARK,
+};
+
+/* - I2C1 ------------------------------------------------------------------- */
+static const unsigned int i2c1_pins[] = {
+       /* SDA1, SCL1 */
+       RCAR_GP_PIN(8, 3), RCAR_GP_PIN(8, 2),
+};
+static const unsigned int i2c1_mux[] = {
+       SDA1_MARK, SCL1_MARK,
+};
+
+/* - I2C2 ------------------------------------------------------------------- */
+static const unsigned int i2c2_pins[] = {
+       /* SDA2, SCL2 */
+       RCAR_GP_PIN(8, 5), RCAR_GP_PIN(8, 4),
+};
+static const unsigned int i2c2_mux[] = {
+       SDA2_MARK, SCL2_MARK,
+};
+
+/* - I2C3 ------------------------------------------------------------------- */
+static const unsigned int i2c3_pins[] = {
+       /* SDA3, SCL3 */
+       RCAR_GP_PIN(8, 7), RCAR_GP_PIN(8, 6),
+};
+static const unsigned int i2c3_mux[] = {
+       SDA3_MARK, SCL3_MARK,
+};
+
+/* - I2C4 ------------------------------------------------------------------- */
+static const unsigned int i2c4_pins[] = {
+       /* SDA4, SCL4 */
+       RCAR_GP_PIN(8, 9), RCAR_GP_PIN(8, 8),
+};
+static const unsigned int i2c4_mux[] = {
+       SDA4_MARK, SCL4_MARK,
+};
+
+/* - I2C5 ------------------------------------------------------------------- */
+static const unsigned int i2c5_pins[] = {
+       /* SDA5, SCL5 */
+       RCAR_GP_PIN(8, 11), RCAR_GP_PIN(8, 10),
+};
+static const unsigned int i2c5_mux[] = {
+       SDA5_MARK, SCL5_MARK,
+};
+
+/* - MMC -------------------------------------------------------------------- */
+static const unsigned int mmc_data_pins[] = {
+       /* MMC_SD_D[0:3], MMC_D[4:7] */
+       RCAR_GP_PIN(3, 1), RCAR_GP_PIN(3, 0),
+       RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 5),
+       RCAR_GP_PIN(3, 7), RCAR_GP_PIN(3, 6),
+       RCAR_GP_PIN(3, 9), RCAR_GP_PIN(3, 8),
+};
+static const unsigned int mmc_data_mux[] = {
+       MMC_SD_D0_MARK, MMC_SD_D1_MARK,
+       MMC_SD_D2_MARK, MMC_SD_D3_MARK,
+       MMC_D4_MARK, MMC_D5_MARK,
+       MMC_D6_MARK, MMC_D7_MARK,
+};
+static const unsigned int mmc_ctrl_pins[] = {
+       /* MMC_SD_CLK, MMC_SD_CMD */
+       RCAR_GP_PIN(3, 3), RCAR_GP_PIN(3, 10),
+};
+static const unsigned int mmc_ctrl_mux[] = {
+       MMC_SD_CLK_MARK, MMC_SD_CMD_MARK,
+};
+static const unsigned int mmc_cd_pins[] = {
+       /* SD_CD */
+       RCAR_GP_PIN(3, 11),
+};
+static const unsigned int mmc_cd_mux[] = {
+       SD_CD_MARK,
+};
+static const unsigned int mmc_wp_pins[] = {
+       /* SD_WP */
+       RCAR_GP_PIN(3, 12),
+};
+static const unsigned int mmc_wp_mux[] = {
+       SD_WP_MARK,
+};
+static const unsigned int mmc_ds_pins[] = {
+       /* MMC_DS */
+       RCAR_GP_PIN(3, 4),
+};
+static const unsigned int mmc_ds_mux[] = {
+       MMC_DS_MARK,
+};
+
+/* - MSIOF0 ----------------------------------------------------------------- */
+static const unsigned int msiof0_clk_pins[] = {
+       /* MSIOF0_SCK */
+       RCAR_GP_PIN(1, 10),
+};
+static const unsigned int msiof0_clk_mux[] = {
+       MSIOF0_SCK_MARK,
+};
+static const unsigned int msiof0_sync_pins[] = {
+       /* MSIOF0_SYNC */
+       RCAR_GP_PIN(1, 8),
+};
+static const unsigned int msiof0_sync_mux[] = {
+       MSIOF0_SYNC_MARK,
+};
+static const unsigned int msiof0_ss1_pins[] = {
+       /* MSIOF0_SS1 */
+       RCAR_GP_PIN(1, 7),
+};
+static const unsigned int msiof0_ss1_mux[] = {
+       MSIOF0_SS1_MARK,
+};
+static const unsigned int msiof0_ss2_pins[] = {
+       /* MSIOF0_SS2 */
+       RCAR_GP_PIN(1, 6),
+};
+static const unsigned int msiof0_ss2_mux[] = {
+       MSIOF0_SS2_MARK,
+};
+static const unsigned int msiof0_txd_pins[] = {
+       /* MSIOF0_TXD */
+       RCAR_GP_PIN(1, 9),
+};
+static const unsigned int msiof0_txd_mux[] = {
+       MSIOF0_TXD_MARK,
+};
+static const unsigned int msiof0_rxd_pins[] = {
+       /* MSIOF0_RXD */
+       RCAR_GP_PIN(1, 11),
+};
+static const unsigned int msiof0_rxd_mux[] = {
+       MSIOF0_RXD_MARK,
+};
+
+/* - MSIOF1 ----------------------------------------------------------------- */
+static const unsigned int msiof1_clk_pins[] = {
+       /* MSIOF1_SCK */
+       RCAR_GP_PIN(1, 3),
+};
+static const unsigned int msiof1_clk_mux[] = {
+       MSIOF1_SCK_MARK,
+};
+static const unsigned int msiof1_sync_pins[] = {
+       /* MSIOF1_SYNC */
+       RCAR_GP_PIN(1, 2),
+};
+static const unsigned int msiof1_sync_mux[] = {
+       MSIOF1_SYNC_MARK,
+};
+static const unsigned int msiof1_ss1_pins[] = {
+       /* MSIOF1_SS1 */
+       RCAR_GP_PIN(1, 1),
+};
+static const unsigned int msiof1_ss1_mux[] = {
+       MSIOF1_SS1_MARK,
+};
+static const unsigned int msiof1_ss2_pins[] = {
+       /* MSIOF1_SS2 */
+       RCAR_GP_PIN(1, 0),
+};
+static const unsigned int msiof1_ss2_mux[] = {
+       MSIOF1_SS2_MARK,
+};
+static const unsigned int msiof1_txd_pins[] = {
+       /* MSIOF1_TXD */
+       RCAR_GP_PIN(1, 4),
+};
+static const unsigned int msiof1_txd_mux[] = {
+       MSIOF1_TXD_MARK,
+};
+static const unsigned int msiof1_rxd_pins[] = {
+       /* MSIOF1_RXD */
+       RCAR_GP_PIN(1, 5),
+};
+static const unsigned int msiof1_rxd_mux[] = {
+       MSIOF1_RXD_MARK,
+};
+
+/* - MSIOF2 ----------------------------------------------------------------- */
+static const unsigned int msiof2_clk_pins[] = {
+       /* MSIOF2_SCK */
+       RCAR_GP_PIN(0, 17),
+};
+static const unsigned int msiof2_clk_mux[] = {
+       MSIOF2_SCK_MARK,
+};
+static const unsigned int msiof2_sync_pins[] = {
+       /* MSIOF2_SYNC */
+       RCAR_GP_PIN(0, 15),
+};
+static const unsigned int msiof2_sync_mux[] = {
+       MSIOF2_SYNC_MARK,
+};
+static const unsigned int msiof2_ss1_pins[] = {
+       /* MSIOF2_SS1 */
+       RCAR_GP_PIN(0, 14),
+};
+static const unsigned int msiof2_ss1_mux[] = {
+       MSIOF2_SS1_MARK,
+};
+static const unsigned int msiof2_ss2_pins[] = {
+       /* MSIOF2_SS2 */
+       RCAR_GP_PIN(0, 13),
+};
+static const unsigned int msiof2_ss2_mux[] = {
+       MSIOF2_SS2_MARK,
+};
+static const unsigned int msiof2_txd_pins[] = {
+       /* MSIOF2_TXD */
+       RCAR_GP_PIN(0, 16),
+};
+static const unsigned int msiof2_txd_mux[] = {
+       MSIOF2_TXD_MARK,
+};
+static const unsigned int msiof2_rxd_pins[] = {
+       /* MSIOF2_RXD */
+       RCAR_GP_PIN(0, 18),
+};
+static const unsigned int msiof2_rxd_mux[] = {
+       MSIOF2_RXD_MARK,
+};
+
+/* - MSIOF3 ----------------------------------------------------------------- */
+static const unsigned int msiof3_clk_pins[] = {
+       /* MSIOF3_SCK */
+       RCAR_GP_PIN(0, 3),
+};
+static const unsigned int msiof3_clk_mux[] = {
+       MSIOF3_SCK_MARK,
+};
+static const unsigned int msiof3_sync_pins[] = {
+       /* MSIOF3_SYNC */
+       RCAR_GP_PIN(0, 6),
+};
+static const unsigned int msiof3_sync_mux[] = {
+       MSIOF3_SYNC_MARK,
+};
+static const unsigned int msiof3_ss1_pins[] = {
+       /* MSIOF3_SS1 */
+       RCAR_GP_PIN(0, 1),
+};
+static const unsigned int msiof3_ss1_mux[] = {
+       MSIOF3_SS1_MARK,
+};
+static const unsigned int msiof3_ss2_pins[] = {
+       /* MSIOF3_SS2 */
+       RCAR_GP_PIN(0, 2),
+};
+static const unsigned int msiof3_ss2_mux[] = {
+       MSIOF3_SS2_MARK,
+};
+static const unsigned int msiof3_txd_pins[] = {
+       /* MSIOF3_TXD */
+       RCAR_GP_PIN(0, 4),
+};
+static const unsigned int msiof3_txd_mux[] = {
+       MSIOF3_TXD_MARK,
+};
+static const unsigned int msiof3_rxd_pins[] = {
+       /* MSIOF3_RXD */
+       RCAR_GP_PIN(0, 5),
+};
+static const unsigned int msiof3_rxd_mux[] = {
+       MSIOF3_RXD_MARK,
+};
+
+/* - MSIOF4 ----------------------------------------------------------------- */
+static const unsigned int msiof4_clk_pins[] = {
+       /* MSIOF4_SCK */
+       RCAR_GP_PIN(1, 25),
+};
+static const unsigned int msiof4_clk_mux[] = {
+       MSIOF4_SCK_MARK,
+};
+static const unsigned int msiof4_sync_pins[] = {
+       /* MSIOF4_SYNC */
+       RCAR_GP_PIN(1, 28),
+};
+static const unsigned int msiof4_sync_mux[] = {
+       MSIOF4_SYNC_MARK,
+};
+static const unsigned int msiof4_ss1_pins[] = {
+       /* MSIOF4_SS1 */
+       RCAR_GP_PIN(1, 23),
+};
+static const unsigned int msiof4_ss1_mux[] = {
+       MSIOF4_SS1_MARK,
+};
+static const unsigned int msiof4_ss2_pins[] = {
+       /* MSIOF4_SS2 */
+       RCAR_GP_PIN(1, 24),
+};
+static const unsigned int msiof4_ss2_mux[] = {
+       MSIOF4_SS2_MARK,
+};
+static const unsigned int msiof4_txd_pins[] = {
+       /* MSIOF4_TXD */
+       RCAR_GP_PIN(1, 26),
+};
+static const unsigned int msiof4_txd_mux[] = {
+       MSIOF4_TXD_MARK,
+};
+static const unsigned int msiof4_rxd_pins[] = {
+       /* MSIOF4_RXD */
+       RCAR_GP_PIN(1, 27),
+};
+static const unsigned int msiof4_rxd_mux[] = {
+       MSIOF4_RXD_MARK,
+};
+
+/* - MSIOF5 ----------------------------------------------------------------- */
+static const unsigned int msiof5_clk_pins[] = {
+       /* MSIOF5_SCK */
+       RCAR_GP_PIN(0, 11),
+};
+static const unsigned int msiof5_clk_mux[] = {
+       MSIOF5_SCK_MARK,
+};
+static const unsigned int msiof5_sync_pins[] = {
+       /* MSIOF5_SYNC */
+       RCAR_GP_PIN(0, 9),
+};
+static const unsigned int msiof5_sync_mux[] = {
+       MSIOF5_SYNC_MARK,
+};
+static const unsigned int msiof5_ss1_pins[] = {
+       /* MSIOF5_SS1 */
+       RCAR_GP_PIN(0, 8),
+};
+static const unsigned int msiof5_ss1_mux[] = {
+       MSIOF5_SS1_MARK,
+};
+static const unsigned int msiof5_ss2_pins[] = {
+       /* MSIOF5_SS2 */
+       RCAR_GP_PIN(0, 7),
+};
+static const unsigned int msiof5_ss2_mux[] = {
+       MSIOF5_SS2_MARK,
+};
+static const unsigned int msiof5_txd_pins[] = {
+       /* MSIOF5_TXD */
+       RCAR_GP_PIN(0, 10),
+};
+static const unsigned int msiof5_txd_mux[] = {
+       MSIOF5_TXD_MARK,
+};
+static const unsigned int msiof5_rxd_pins[] = {
+       /* MSIOF5_RXD */
+       RCAR_GP_PIN(0, 12),
+};
+static const unsigned int msiof5_rxd_mux[] = {
+       MSIOF5_RXD_MARK,
+};
+
+/* - PCIE ------------------------------------------------------------------- */
+static const unsigned int pcie0_clkreq_n_pins[] = {
+       /* PCIE0_CLKREQ_N */
+       RCAR_GP_PIN(4, 21),
+};
+
+static const unsigned int pcie0_clkreq_n_mux[] = {
+       PCIE0_CLKREQ_N_MARK,
+};
+
+static const unsigned int pcie1_clkreq_n_pins[] = {
+       /* PCIE1_CLKREQ_N */
+       RCAR_GP_PIN(4, 22),
+};
+
+static const unsigned int pcie1_clkreq_n_mux[] = {
+       PCIE1_CLKREQ_N_MARK,
+};
+
+/* - PWM0_A ------------------------------------------------------------------- */
+static const unsigned int pwm0_a_pins[] = {
+       /* PWM0_A */
+       RCAR_GP_PIN(1, 15),
+};
+static const unsigned int pwm0_a_mux[] = {
+       PWM0_A_MARK,
+};
+
+/* - PWM1_A ------------------------------------------------------------------- */
+static const unsigned int pwm1_a_pins[] = {
+       /* PWM1_A */
+       RCAR_GP_PIN(3, 13),
+};
+static const unsigned int pwm1_a_mux[] = {
+       PWM1_A_MARK,
+};
+
+/* - PWM1_B ------------------------------------------------------------------- */
+static const unsigned int pwm1_b_pins[] = {
+       /* PWM1_B */
+       RCAR_GP_PIN(2, 13),
+};
+static const unsigned int pwm1_b_mux[] = {
+       PWM1_B_MARK,
+};
+
+/* - PWM2_B ------------------------------------------------------------------- */
+static const unsigned int pwm2_b_pins[] = {
+       /* PWM2_B */
+       RCAR_GP_PIN(2, 14),
+};
+static const unsigned int pwm2_b_mux[] = {
+       PWM2_B_MARK,
+};
+
+/* - PWM3_A ------------------------------------------------------------------- */
+static const unsigned int pwm3_a_pins[] = {
+       /* PWM3_A */
+       RCAR_GP_PIN(1, 22),
+};
+static const unsigned int pwm3_a_mux[] = {
+       PWM3_A_MARK,
+};
+
+/* - PWM3_B ------------------------------------------------------------------- */
+static const unsigned int pwm3_b_pins[] = {
+       /* PWM3_B */
+       RCAR_GP_PIN(2, 15),
+};
+static const unsigned int pwm3_b_mux[] = {
+       PWM3_B_MARK,
+};
+
+/* - PWM4 ------------------------------------------------------------------- */
+static const unsigned int pwm4_pins[] = {
+       /* PWM4 */
+       RCAR_GP_PIN(2, 16),
+};
+static const unsigned int pwm4_mux[] = {
+       PWM4_MARK,
+};
+
+/* - PWM5 ------------------------------------------------------------------- */
+static const unsigned int pwm5_pins[] = {
+       /* PWM5 */
+       RCAR_GP_PIN(2, 17),
+};
+static const unsigned int pwm5_mux[] = {
+       PWM5_MARK,
+};
+
+/* - PWM6 ------------------------------------------------------------------- */
+static const unsigned int pwm6_pins[] = {
+       /* PWM6 */
+       RCAR_GP_PIN(2, 18),
+};
+static const unsigned int pwm6_mux[] = {
+       PWM6_MARK,
+};
+
+/* - PWM7 ------------------------------------------------------------------- */
+static const unsigned int pwm7_pins[] = {
+       /* PWM7 */
+       RCAR_GP_PIN(2, 19),
+};
+static const unsigned int pwm7_mux[] = {
+       PWM7_MARK,
+};
+
+/* - PWM8_A ------------------------------------------------------------------- */
+static const unsigned int pwm8_a_pins[] = {
+       /* PWM8_A */
+       RCAR_GP_PIN(1, 13),
+};
+static const unsigned int pwm8_a_mux[] = {
+       PWM8_A_MARK,
+};
+
+/* - PWM9_A ------------------------------------------------------------------- */
+static const unsigned int pwm9_a_pins[] = {
+       /* PWM9_A */
+       RCAR_GP_PIN(1, 14),
+};
+static const unsigned int pwm9_a_mux[] = {
+       PWM9_A_MARK,
+};
+
+/* - QSPI0 ------------------------------------------------------------------ */
+static const unsigned int qspi0_ctrl_pins[] = {
+       /* SPCLK, SSL */
+       RCAR_GP_PIN(3, 20), RCAR_GP_PIN(3, 15),
+};
+static const unsigned int qspi0_ctrl_mux[] = {
+       QSPI0_SPCLK_MARK, QSPI0_SSL_MARK,
+};
+static const unsigned int qspi0_data_pins[] = {
+       /* MOSI_IO0, MISO_IO1, IO2, IO3 */
+       RCAR_GP_PIN(3, 19), RCAR_GP_PIN(3, 18),
+       RCAR_GP_PIN(3, 17), RCAR_GP_PIN(3, 16),
+};
+static const unsigned int qspi0_data_mux[] = {
+       QSPI0_MOSI_IO0_MARK, QSPI0_MISO_IO1_MARK,
+       QSPI0_IO2_MARK, QSPI0_IO3_MARK
+};
+
+/* - QSPI1 ------------------------------------------------------------------ */
+static const unsigned int qspi1_ctrl_pins[] = {
+       /* SPCLK, SSL */
+       RCAR_GP_PIN(3, 22), RCAR_GP_PIN(3, 25),
+};
+static const unsigned int qspi1_ctrl_mux[] = {
+       QSPI1_SPCLK_MARK, QSPI1_SSL_MARK,
+};
+static const unsigned int qspi1_data_pins[] = {
+       /* MOSI_IO0, MISO_IO1, IO2, IO3 */
+       RCAR_GP_PIN(3, 21), RCAR_GP_PIN(3, 23),
+       RCAR_GP_PIN(3, 24), RCAR_GP_PIN(3, 26),
+};
+static const unsigned int qspi1_data_mux[] = {
+       QSPI1_MOSI_IO0_MARK, QSPI1_MISO_IO1_MARK,
+       QSPI1_IO2_MARK, QSPI1_IO3_MARK
+};
+
+/* - SCIF0 ------------------------------------------------------------------ */
+static const unsigned int scif0_data_pins[] = {
+       /* RX0, TX0 */
+       RCAR_GP_PIN(1, 16), RCAR_GP_PIN(1, 12),
+};
+static const unsigned int scif0_data_mux[] = {
+       RX0_MARK, TX0_MARK,
+};
+static const unsigned int scif0_clk_pins[] = {
+       /* SCK0 */
+       RCAR_GP_PIN(1, 15),
+};
+static const unsigned int scif0_clk_mux[] = {
+       SCK0_MARK,
+};
+static const unsigned int scif0_ctrl_pins[] = {
+       /* RTS0_N, CTS0_N */
+       RCAR_GP_PIN(1, 14), RCAR_GP_PIN(1, 13),
+};
+static const unsigned int scif0_ctrl_mux[] = {
+       RTS0_N_MARK, CTS0_N_MARK,
+};
+
+/* - SCIF1 ------------------------------------------------------------------ */
+static const unsigned int scif1_data_pins[] = {
+       /* RX1, TX1 */
+       RCAR_GP_PIN(0, 15), RCAR_GP_PIN(0, 14),
+};
+static const unsigned int scif1_data_mux[] = {
+       RX1_MARK, TX1_MARK,
+};
+static const unsigned int scif1_clk_pins[] = {
+       /* SCK1 */
+       RCAR_GP_PIN(0, 18),
+};
+static const unsigned int scif1_clk_mux[] = {
+       SCK1_MARK,
+};
+static const unsigned int scif1_ctrl_pins[] = {
+       /* RTS1_N, CTS1_N */
+       RCAR_GP_PIN(0, 17), RCAR_GP_PIN(0, 16),
+};
+static const unsigned int scif1_ctrl_mux[] = {
+       RTS1_N_MARK, CTS1_N_MARK,
+};
+
+/* - SCIF1_X ------------------------------------------------------------------ */
+static const unsigned int scif1_data_x_pins[] = {
+       /* RX1_X, TX1_X */
+       RCAR_GP_PIN(1, 7), RCAR_GP_PIN(1, 6),
+};
+static const unsigned int scif1_data_x_mux[] = {
+       RX1_X_MARK, TX1_X_MARK,
+};
+static const unsigned int scif1_clk_x_pins[] = {
+       /* SCK1_X */
+       RCAR_GP_PIN(1, 10),
+};
+static const unsigned int scif1_clk_x_mux[] = {
+       SCK1_X_MARK,
+};
+static const unsigned int scif1_ctrl_x_pins[] = {
+       /* RTS1_N_X, CTS1_N_X */
+       RCAR_GP_PIN(1, 9), RCAR_GP_PIN(1, 8),
+};
+static const unsigned int scif1_ctrl_x_mux[] = {
+       RTS1_N_X_MARK, CTS1_N_X_MARK,
+};
+
+/* - SCIF3 ------------------------------------------------------------------ */
+static const unsigned int scif3_data_pins[] = {
+       /* RX3, TX3 */
+       RCAR_GP_PIN(1, 1), RCAR_GP_PIN(1, 0),
+};
+static const unsigned int scif3_data_mux[] = {
+       RX3_MARK, TX3_MARK,
+};
+static const unsigned int scif3_clk_pins[] = {
+       /* SCK3 */
+       RCAR_GP_PIN(1, 4),
+};
+static const unsigned int scif3_clk_mux[] = {
+       SCK3_MARK,
+};
+static const unsigned int scif3_ctrl_pins[] = {
+       /* RTS3_N, CTS3_N */
+       RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 3),
+};
+static const unsigned int scif3_ctrl_mux[] = {
+       RTS3_N_MARK, CTS3_N_MARK,
+};
+
+/* - SCIF3_A ------------------------------------------------------------------ */
+static const unsigned int scif3_data_a_pins[] = {
+       /* RX3_A, TX3_A */
+       RCAR_GP_PIN(1, 27), RCAR_GP_PIN(1, 28),
+};
+static const unsigned int scif3_data_a_mux[] = {
+       RX3_A_MARK, TX3_A_MARK,
+};
+static const unsigned int scif3_clk_a_pins[] = {
+       /* SCK3_A */
+       RCAR_GP_PIN(1, 24),
+};
+static const unsigned int scif3_clk_a_mux[] = {
+       SCK3_A_MARK,
+};
+static const unsigned int scif3_ctrl_a_pins[] = {
+       /* RTS3_N_A, CTS3_N_A */
+       RCAR_GP_PIN(1, 26), RCAR_GP_PIN(1, 25),
+};
+static const unsigned int scif3_ctrl_a_mux[] = {
+       RTS3_N_A_MARK, CTS3_N_A_MARK,
+};
+
+/* - SCIF4 ------------------------------------------------------------------ */
+static const unsigned int scif4_data_pins[] = {
+       /* RX4, TX4 */
+       RCAR_GP_PIN(8, 13), RCAR_GP_PIN(8, 12),
+};
+static const unsigned int scif4_data_mux[] = {
+       RX4_MARK, TX4_MARK,
+};
+static const unsigned int scif4_clk_pins[] = {
+       /* SCK4 */
+       RCAR_GP_PIN(8, 8),
+};
+static const unsigned int scif4_clk_mux[] = {
+       SCK4_MARK,
+};
+static const unsigned int scif4_ctrl_pins[] = {
+       /* RTS4_N, CTS4_N */
+       RCAR_GP_PIN(8, 10), RCAR_GP_PIN(8, 9),
+};
+static const unsigned int scif4_ctrl_mux[] = {
+       RTS4_N_MARK, CTS4_N_MARK,
+};
+
+/* - SCIF Clock ------------------------------------------------------------- */
+static const unsigned int scif_clk_pins[] = {
+       /* SCIF_CLK */
+       RCAR_GP_PIN(1, 17),
+};
+static const unsigned int scif_clk_mux[] = {
+       SCIF_CLK_MARK,
+};
+
+/* - TPU ------------------------------------------------------------------- */
+static const unsigned int tpu_to0_pins[] = {
+       /* TPU0TO0 */
+       RCAR_GP_PIN(2, 8),
+};
+static const unsigned int tpu_to0_mux[] = {
+       TPU0TO0_MARK,
+};
+static const unsigned int tpu_to1_pins[] = {
+       /* TPU0TO1 */
+       RCAR_GP_PIN(2, 7),
+};
+static const unsigned int tpu_to1_mux[] = {
+       TPU0TO1_MARK,
+};
+static const unsigned int tpu_to2_pins[] = {
+       /* TPU0TO2 */
+       RCAR_GP_PIN(2, 12),
+};
+static const unsigned int tpu_to2_mux[] = {
+       TPU0TO2_MARK,
+};
+static const unsigned int tpu_to3_pins[] = {
+       /* TPU0TO3 */
+       RCAR_GP_PIN(2, 13),
+};
+static const unsigned int tpu_to3_mux[] = {
+       TPU0TO3_MARK,
+};
+
+/* - TPU_A ------------------------------------------------------------------- */
+static const unsigned int tpu_to0_a_pins[] = {
+       /* TPU0TO0_A */
+       RCAR_GP_PIN(1, 25),
+};
+static const unsigned int tpu_to0_a_mux[] = {
+       TPU0TO0_A_MARK,
+};
+static const unsigned int tpu_to1_a_pins[] = {
+       /* TPU0TO1_A */
+       RCAR_GP_PIN(1, 26),
+};
+static const unsigned int tpu_to1_a_mux[] = {
+       TPU0TO1_A_MARK,
+};
+static const unsigned int tpu_to2_a_pins[] = {
+       /* TPU0TO2_A */
+       RCAR_GP_PIN(2, 0),
+};
+static const unsigned int tpu_to2_a_mux[] = {
+       TPU0TO2_A_MARK,
+};
+static const unsigned int tpu_to3_a_pins[] = {
+       /* TPU0TO3_A */
+       RCAR_GP_PIN(2, 1),
+};
+static const unsigned int tpu_to3_a_mux[] = {
+       TPU0TO3_A_MARK,
+};
+
+/* - TSN0 ------------------------------------------------ */
+static const unsigned int tsn0_link_pins[] = {
+       /* TSN0_LINK */
+       RCAR_GP_PIN(4, 4),
+};
+static const unsigned int tsn0_link_mux[] = {
+       TSN0_LINK_MARK,
+};
+static const unsigned int tsn0_phy_int_pins[] = {
+       /* TSN0_PHY_INT */
+       RCAR_GP_PIN(4, 3),
+};
+static const unsigned int tsn0_phy_int_mux[] = {
+       TSN0_PHY_INT_MARK,
+};
+static const unsigned int tsn0_mdio_pins[] = {
+       /* TSN0_MDC, TSN0_MDIO */
+       RCAR_GP_PIN(4, 1), RCAR_GP_PIN(4, 0),
+};
+static const unsigned int tsn0_mdio_mux[] = {
+       TSN0_MDC_MARK, TSN0_MDIO_MARK,
+};
+static const unsigned int tsn0_rgmii_pins[] = {
+       /*
+        * TSN0_TX_CTL, TSN0_TXC, TSN0_TD0, TSN0_TD1, TSN0_TD2, TSN0_TD3,
+        * TSN0_RX_CTL, TSN0_RXC, TSN0_RD0, TSN0_RD1, TSN0_RD2, TSN0_RD3,
+        */
+       RCAR_GP_PIN(4,  9), RCAR_GP_PIN(4, 12),
+       RCAR_GP_PIN(4, 15), RCAR_GP_PIN(4, 14),
+       RCAR_GP_PIN(4, 19), RCAR_GP_PIN(4, 18),
+       RCAR_GP_PIN(4,  7), RCAR_GP_PIN(4, 11),
+       RCAR_GP_PIN(4, 10), RCAR_GP_PIN(4, 13),
+       RCAR_GP_PIN(4, 17), RCAR_GP_PIN(4, 16),
+};
+static const unsigned int tsn0_rgmii_mux[] = {
+       TSN0_TX_CTL_MARK,       TSN0_TXC_MARK,
+       TSN0_TD0_MARK,          TSN0_TD1_MARK,
+       TSN0_TD2_MARK,          TSN0_TD3_MARK,
+       TSN0_RX_CTL_MARK,       TSN0_RXC_MARK,
+       TSN0_RD0_MARK,          TSN0_RD1_MARK,
+       TSN0_RD2_MARK,          TSN0_RD3_MARK,
+};
+static const unsigned int tsn0_txcrefclk_pins[] = {
+       /* TSN0_TXCREFCLK */
+       RCAR_GP_PIN(4, 20),
+};
+static const unsigned int tsn0_txcrefclk_mux[] = {
+       TSN0_TXCREFCLK_MARK,
+};
+static const unsigned int tsn0_avtp_pps_pins[] = {
+       /* TSN0_AVTP_PPS0, TSN0_AVTP_PPS1 */
+       RCAR_GP_PIN(4, 8), RCAR_GP_PIN(4, 2),
+};
+static const unsigned int tsn0_avtp_pps_mux[] = {
+       TSN0_AVTP_PPS0_MARK, TSN0_AVTP_PPS1_MARK,
+};
+static const unsigned int tsn0_avtp_capture_pins[] = {
+       /* TSN0_AVTP_CAPTURE */
+       RCAR_GP_PIN(4, 6),
+};
+static const unsigned int tsn0_avtp_capture_mux[] = {
+       TSN0_AVTP_CAPTURE_MARK,
+};
+static const unsigned int tsn0_avtp_match_pins[] = {
+       /* TSN0_AVTP_MATCH */
+       RCAR_GP_PIN(4, 5),
+};
+static const unsigned int tsn0_avtp_match_mux[] = {
+       TSN0_AVTP_MATCH_MARK,
+};
+
+static const struct sh_pfc_pin_group pinmux_groups[] = {
+       SH_PFC_PIN_GROUP(avb0_link),
+       SH_PFC_PIN_GROUP(avb0_magic),
+       SH_PFC_PIN_GROUP(avb0_phy_int),
+       SH_PFC_PIN_GROUP(avb0_mdio),
+       SH_PFC_PIN_GROUP(avb0_rgmii),
+       SH_PFC_PIN_GROUP(avb0_txcrefclk),
+       SH_PFC_PIN_GROUP(avb0_avtp_pps),
+       SH_PFC_PIN_GROUP(avb0_avtp_capture),
+       SH_PFC_PIN_GROUP(avb0_avtp_match),
+
+       SH_PFC_PIN_GROUP(avb1_link),
+       SH_PFC_PIN_GROUP(avb1_magic),
+       SH_PFC_PIN_GROUP(avb1_phy_int),
+       SH_PFC_PIN_GROUP(avb1_mdio),
+       SH_PFC_PIN_GROUP(avb1_rgmii),
+       SH_PFC_PIN_GROUP(avb1_txcrefclk),
+       SH_PFC_PIN_GROUP(avb1_avtp_pps),
+       SH_PFC_PIN_GROUP(avb1_avtp_capture),
+       SH_PFC_PIN_GROUP(avb1_avtp_match),
+
+       SH_PFC_PIN_GROUP(avb2_link),
+       SH_PFC_PIN_GROUP(avb2_magic),
+       SH_PFC_PIN_GROUP(avb2_phy_int),
+       SH_PFC_PIN_GROUP(avb2_mdio),
+       SH_PFC_PIN_GROUP(avb2_rgmii),
+       SH_PFC_PIN_GROUP(avb2_txcrefclk),
+       SH_PFC_PIN_GROUP(avb2_avtp_pps),
+       SH_PFC_PIN_GROUP(avb2_avtp_capture),
+       SH_PFC_PIN_GROUP(avb2_avtp_match),
+
+       SH_PFC_PIN_GROUP(canfd0_data),
+       SH_PFC_PIN_GROUP(canfd1_data),
+       SH_PFC_PIN_GROUP(canfd2_data),
+       SH_PFC_PIN_GROUP(canfd3_data),
+       SH_PFC_PIN_GROUP(canfd4_data),
+       SH_PFC_PIN_GROUP(canfd5_data),          /* suffix might be updated */
+       SH_PFC_PIN_GROUP(canfd5_data_b),        /* suffix might be updated */
+       SH_PFC_PIN_GROUP(canfd6_data),
+       SH_PFC_PIN_GROUP(canfd7_data),
+       SH_PFC_PIN_GROUP(can_clk),
+
+       SH_PFC_PIN_GROUP(hscif0_data),
+       SH_PFC_PIN_GROUP(hscif0_clk),
+       SH_PFC_PIN_GROUP(hscif0_ctrl),
+       SH_PFC_PIN_GROUP(hscif1_data),          /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif1_clk),           /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif1_ctrl),          /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif1_data_x),        /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif1_clk_x),         /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif1_ctrl_x),        /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif2_data),
+       SH_PFC_PIN_GROUP(hscif2_clk),
+       SH_PFC_PIN_GROUP(hscif2_ctrl),
+       SH_PFC_PIN_GROUP(hscif3_data),          /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif3_clk),           /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif3_ctrl),          /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif3_data_a),        /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif3_clk_a),         /* suffix might be updated */
+       SH_PFC_PIN_GROUP(hscif3_ctrl_a),        /* suffix might be updated */
+
+       SH_PFC_PIN_GROUP(i2c0),
+       SH_PFC_PIN_GROUP(i2c1),
+       SH_PFC_PIN_GROUP(i2c2),
+       SH_PFC_PIN_GROUP(i2c3),
+       SH_PFC_PIN_GROUP(i2c4),
+       SH_PFC_PIN_GROUP(i2c5),
+
+       BUS_DATA_PIN_GROUP(mmc_data, 1),
+       BUS_DATA_PIN_GROUP(mmc_data, 4),
+       BUS_DATA_PIN_GROUP(mmc_data, 8),
+       SH_PFC_PIN_GROUP(mmc_ctrl),
+       SH_PFC_PIN_GROUP(mmc_cd),
+       SH_PFC_PIN_GROUP(mmc_wp),
+       SH_PFC_PIN_GROUP(mmc_ds),
+
+       SH_PFC_PIN_GROUP(msiof0_clk),
+       SH_PFC_PIN_GROUP(msiof0_sync),
+       SH_PFC_PIN_GROUP(msiof0_ss1),
+       SH_PFC_PIN_GROUP(msiof0_ss2),
+       SH_PFC_PIN_GROUP(msiof0_txd),
+       SH_PFC_PIN_GROUP(msiof0_rxd),
+
+       SH_PFC_PIN_GROUP(msiof1_clk),
+       SH_PFC_PIN_GROUP(msiof1_sync),
+       SH_PFC_PIN_GROUP(msiof1_ss1),
+       SH_PFC_PIN_GROUP(msiof1_ss2),
+       SH_PFC_PIN_GROUP(msiof1_txd),
+       SH_PFC_PIN_GROUP(msiof1_rxd),
+
+       SH_PFC_PIN_GROUP(msiof2_clk),
+       SH_PFC_PIN_GROUP(msiof2_sync),
+       SH_PFC_PIN_GROUP(msiof2_ss1),
+       SH_PFC_PIN_GROUP(msiof2_ss2),
+       SH_PFC_PIN_GROUP(msiof2_txd),
+       SH_PFC_PIN_GROUP(msiof2_rxd),
+
+       SH_PFC_PIN_GROUP(msiof3_clk),
+       SH_PFC_PIN_GROUP(msiof3_sync),
+       SH_PFC_PIN_GROUP(msiof3_ss1),
+       SH_PFC_PIN_GROUP(msiof3_ss2),
+       SH_PFC_PIN_GROUP(msiof3_txd),
+       SH_PFC_PIN_GROUP(msiof3_rxd),
+
+       SH_PFC_PIN_GROUP(msiof4_clk),
+       SH_PFC_PIN_GROUP(msiof4_sync),
+       SH_PFC_PIN_GROUP(msiof4_ss1),
+       SH_PFC_PIN_GROUP(msiof4_ss2),
+       SH_PFC_PIN_GROUP(msiof4_txd),
+       SH_PFC_PIN_GROUP(msiof4_rxd),
+
+       SH_PFC_PIN_GROUP(msiof5_clk),
+       SH_PFC_PIN_GROUP(msiof5_sync),
+       SH_PFC_PIN_GROUP(msiof5_ss1),
+       SH_PFC_PIN_GROUP(msiof5_ss2),
+       SH_PFC_PIN_GROUP(msiof5_txd),
+       SH_PFC_PIN_GROUP(msiof5_rxd),
+
+       SH_PFC_PIN_GROUP(pcie0_clkreq_n),
+       SH_PFC_PIN_GROUP(pcie1_clkreq_n),
+
+       SH_PFC_PIN_GROUP(pwm0_a),               /* suffix might be updated */
+       SH_PFC_PIN_GROUP(pwm1_a),
+       SH_PFC_PIN_GROUP(pwm1_b),
+       SH_PFC_PIN_GROUP(pwm2_b),               /* suffix might be updated */
+       SH_PFC_PIN_GROUP(pwm3_a),
+       SH_PFC_PIN_GROUP(pwm3_b),
+       SH_PFC_PIN_GROUP(pwm4),
+       SH_PFC_PIN_GROUP(pwm5),
+       SH_PFC_PIN_GROUP(pwm6),
+       SH_PFC_PIN_GROUP(pwm7),
+       SH_PFC_PIN_GROUP(pwm8_a),               /* suffix might be updated */
+       SH_PFC_PIN_GROUP(pwm9_a),               /* suffix might be updated */
+
+       SH_PFC_PIN_GROUP(qspi0_ctrl),
+       BUS_DATA_PIN_GROUP(qspi0_data, 2),
+       BUS_DATA_PIN_GROUP(qspi0_data, 4),
+       SH_PFC_PIN_GROUP(qspi1_ctrl),
+       BUS_DATA_PIN_GROUP(qspi1_data, 2),
+       BUS_DATA_PIN_GROUP(qspi1_data, 4),
+
+       SH_PFC_PIN_GROUP(scif0_data),
+       SH_PFC_PIN_GROUP(scif0_clk),
+       SH_PFC_PIN_GROUP(scif0_ctrl),
+       SH_PFC_PIN_GROUP(scif1_data),           /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif1_clk),            /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif1_ctrl),           /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif1_data_x),         /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif1_clk_x),          /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif1_ctrl_x),         /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif3_data),           /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif3_clk),            /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif3_ctrl),           /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif3_data_a),         /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif3_clk_a),          /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif3_ctrl_a),         /* suffix might be updated */
+       SH_PFC_PIN_GROUP(scif4_data),
+       SH_PFC_PIN_GROUP(scif4_clk),
+       SH_PFC_PIN_GROUP(scif4_ctrl),
+       SH_PFC_PIN_GROUP(scif_clk),
+
+       SH_PFC_PIN_GROUP(tpu_to0),              /* suffix might be updated */
+       SH_PFC_PIN_GROUP(tpu_to0_a),            /* suffix might be updated */
+       SH_PFC_PIN_GROUP(tpu_to1),              /* suffix might be updated */
+       SH_PFC_PIN_GROUP(tpu_to1_a),            /* suffix might be updated */
+       SH_PFC_PIN_GROUP(tpu_to2),              /* suffix might be updated */
+       SH_PFC_PIN_GROUP(tpu_to2_a),            /* suffix might be updated */
+       SH_PFC_PIN_GROUP(tpu_to3),              /* suffix might be updated */
+       SH_PFC_PIN_GROUP(tpu_to3_a),            /* suffix might be updated */
+
+       SH_PFC_PIN_GROUP(tsn0_link),
+       SH_PFC_PIN_GROUP(tsn0_phy_int),
+       SH_PFC_PIN_GROUP(tsn0_mdio),
+       SH_PFC_PIN_GROUP(tsn0_rgmii),
+       SH_PFC_PIN_GROUP(tsn0_txcrefclk),
+       SH_PFC_PIN_GROUP(tsn0_avtp_pps),
+       SH_PFC_PIN_GROUP(tsn0_avtp_capture),
+       SH_PFC_PIN_GROUP(tsn0_avtp_match),
+};
+
+static const char * const avb0_groups[] = {
+       "avb0_link",
+       "avb0_magic",
+       "avb0_phy_int",
+       "avb0_mdio",
+       "avb0_rgmii",
+       "avb0_txcrefclk",
+       "avb0_avtp_pps",
+       "avb0_avtp_capture",
+       "avb0_avtp_match",
+};
+
+static const char * const avb1_groups[] = {
+       "avb1_link",
+       "avb1_magic",
+       "avb1_phy_int",
+       "avb1_mdio",
+       "avb1_rgmii",
+       "avb1_txcrefclk",
+       "avb1_avtp_pps",
+       "avb1_avtp_capture",
+       "avb1_avtp_match",
+};
+
+static const char * const avb2_groups[] = {
+       "avb2_link",
+       "avb2_magic",
+       "avb2_phy_int",
+       "avb2_mdio",
+       "avb2_rgmii",
+       "avb2_txcrefclk",
+       "avb2_avtp_pps",
+       "avb2_avtp_capture",
+       "avb2_avtp_match",
+};
+
+static const char * const canfd0_groups[] = {
+       "canfd0_data",
+};
+
+static const char * const canfd1_groups[] = {
+       "canfd1_data",
+};
+
+static const char * const canfd2_groups[] = {
+       "canfd2_data",
+};
+
+static const char * const canfd3_groups[] = {
+       "canfd3_data",
+};
+
+static const char * const canfd4_groups[] = {
+       "canfd4_data",
+};
+
+static const char * const canfd5_groups[] = {
+       /* suffix might be updated */
+       "canfd5_data",
+       "canfd5_data_b",
+};
+
+static const char * const canfd6_groups[] = {
+       "canfd6_data",
+};
+
+static const char * const canfd7_groups[] = {
+       "canfd7_data",
+};
+
+static const char * const can_clk_groups[] = {
+       "can_clk",
+};
+
+static const char * const hscif0_groups[] = {
+       "hscif0_data",
+       "hscif0_clk",
+       "hscif0_ctrl",
+};
+
+static const char * const hscif1_groups[] = {
+       /* suffix might be updated */
+       "hscif1_data",
+       "hscif1_clk",
+       "hscif1_ctrl",
+       "hscif1_data_x",
+       "hscif1_clk_x",
+       "hscif1_ctrl_x",
+};
+
+static const char * const hscif2_groups[] = {
+       "hscif2_data",
+       "hscif2_clk",
+       "hscif2_ctrl",
+};
+
+static const char * const hscif3_groups[] = {
+       /* suffix might be updated */
+       "hscif3_data",
+       "hscif3_clk",
+       "hscif3_ctrl",
+       "hscif3_data_a",
+       "hscif3_clk_a",
+       "hscif3_ctrl_a",
+};
+
+static const char * const i2c0_groups[] = {
+       "i2c0",
+};
+
+static const char * const i2c1_groups[] = {
+       "i2c1",
+};
+
+static const char * const i2c2_groups[] = {
+       "i2c2",
+};
+
+static const char * const i2c3_groups[] = {
+       "i2c3",
+};
+
+static const char * const i2c4_groups[] = {
+       "i2c4",
+};
+
+static const char * const i2c5_groups[] = {
+       "i2c5",
+};
+
+static const char * const mmc_groups[] = {
+       "mmc_data1",
+       "mmc_data4",
+       "mmc_data8",
+       "mmc_ctrl",
+       "mmc_cd",
+       "mmc_wp",
+       "mmc_ds",
+};
+
+static const char * const msiof0_groups[] = {
+       "msiof0_clk",
+       "msiof0_sync",
+       "msiof0_ss1",
+       "msiof0_ss2",
+       "msiof0_txd",
+       "msiof0_rxd",
+};
+
+static const char * const msiof1_groups[] = {
+       "msiof1_clk",
+       "msiof1_sync",
+       "msiof1_ss1",
+       "msiof1_ss2",
+       "msiof1_txd",
+       "msiof1_rxd",
+};
+
+static const char * const msiof2_groups[] = {
+       "msiof2_clk",
+       "msiof2_sync",
+       "msiof2_ss1",
+       "msiof2_ss2",
+       "msiof2_txd",
+       "msiof2_rxd",
+};
+
+static const char * const msiof3_groups[] = {
+       "msiof3_clk",
+       "msiof3_sync",
+       "msiof3_ss1",
+       "msiof3_ss2",
+       "msiof3_txd",
+       "msiof3_rxd",
+};
+
+static const char * const msiof4_groups[] = {
+       "msiof4_clk",
+       "msiof4_sync",
+       "msiof4_ss1",
+       "msiof4_ss2",
+       "msiof4_txd",
+       "msiof4_rxd",
+};
+
+static const char * const msiof5_groups[] = {
+       "msiof5_clk",
+       "msiof5_sync",
+       "msiof5_ss1",
+       "msiof5_ss2",
+       "msiof5_txd",
+       "msiof5_rxd",
+};
+
+static const char * const pcie_groups[] = {
+       "pcie0_clkreq_n",
+       "pcie1_clkreq_n",
+};
+
+static const char * const pwm0_groups[] = {
+       /* suffix might be updated */
+       "pwm0_a",
+};
+
+static const char * const pwm1_groups[] = {
+       "pwm1_a",
+       "pwm1_b",
+};
+
+static const char * const pwm2_groups[] = {
+       /* suffix might be updated */
+       "pwm2_b",
+};
+
+static const char * const pwm3_groups[] = {
+       "pwm3_a",
+       "pwm3_b",
+};
+
+static const char * const pwm4_groups[] = {
+       "pwm4",
+};
+
+static const char * const pwm5_groups[] = {
+       "pwm5",
+};
+
+static const char * const pwm6_groups[] = {
+       "pwm6",
+};
+
+static const char * const pwm7_groups[] = {
+       "pwm7",
+};
+
+static const char * const pwm8_groups[] = {
+       /* suffix might be updated */
+       "pwm8_a",
+};
+
+static const char * const pwm9_groups[] = {
+       /* suffix might be updated */
+       "pwm9_a",
+};
+
+static const char * const qspi0_groups[] = {
+       "qspi0_ctrl",
+       "qspi0_data2",
+       "qspi0_data4",
+};
+
+static const char * const qspi1_groups[] = {
+       "qspi1_ctrl",
+       "qspi1_data2",
+       "qspi1_data4",
+};
+
+static const char * const scif0_groups[] = {
+       "scif0_data",
+       "scif0_clk",
+       "scif0_ctrl",
+};
+
+static const char * const scif1_groups[] = {
+       /* suffix might be updated */
+       "scif1_data",
+       "scif1_clk",
+       "scif1_ctrl",
+       "scif1_data_x",
+       "scif1_clk_x",
+       "scif1_ctrl_x",
+};
+
+static const char * const scif3_groups[] = {
+       /* suffix might be updated */
+       "scif3_data",
+       "scif3_clk",
+       "scif3_ctrl",
+       "scif3_data_a",
+       "scif3_clk_a",
+       "scif3_ctrl_a",
+};
+
+static const char * const scif4_groups[] = {
+       "scif4_data",
+       "scif4_clk",
+       "scif4_ctrl",
+};
+
+static const char * const scif_clk_groups[] = {
+       "scif_clk",
+};
+
+static const char * const tpu_groups[] = {
+       /* suffix might be updated */
+       "tpu_to0",
+       "tpu_to0_a",
+       "tpu_to1",
+       "tpu_to1_a",
+       "tpu_to2",
+       "tpu_to2_a",
+       "tpu_to3",
+       "tpu_to3_a",
+};
+
+static const char * const tsn0_groups[] = {
+       "tsn0_link",
+       "tsn0_phy_int",
+       "tsn0_mdio",
+       "tsn0_rgmii",
+       "tsn0_txcrefclk",
+       "tsn0_avtp_pps",
+       "tsn0_avtp_capture",
+       "tsn0_avtp_match",
+};
+
+static const struct sh_pfc_function pinmux_functions[] = {
+       SH_PFC_FUNCTION(avb0),
+       SH_PFC_FUNCTION(avb1),
+       SH_PFC_FUNCTION(avb2),
+
+       SH_PFC_FUNCTION(canfd0),
+       SH_PFC_FUNCTION(canfd1),
+       SH_PFC_FUNCTION(canfd2),
+       SH_PFC_FUNCTION(canfd3),
+       SH_PFC_FUNCTION(canfd4),
+       SH_PFC_FUNCTION(canfd5),
+       SH_PFC_FUNCTION(canfd6),
+       SH_PFC_FUNCTION(canfd7),
+       SH_PFC_FUNCTION(can_clk),
+
+       SH_PFC_FUNCTION(hscif0),
+       SH_PFC_FUNCTION(hscif1),
+       SH_PFC_FUNCTION(hscif2),
+       SH_PFC_FUNCTION(hscif3),
+
+       SH_PFC_FUNCTION(i2c0),
+       SH_PFC_FUNCTION(i2c1),
+       SH_PFC_FUNCTION(i2c2),
+       SH_PFC_FUNCTION(i2c3),
+       SH_PFC_FUNCTION(i2c4),
+       SH_PFC_FUNCTION(i2c5),
+
+       SH_PFC_FUNCTION(mmc),
+
+       SH_PFC_FUNCTION(msiof0),
+       SH_PFC_FUNCTION(msiof1),
+       SH_PFC_FUNCTION(msiof2),
+       SH_PFC_FUNCTION(msiof3),
+       SH_PFC_FUNCTION(msiof4),
+       SH_PFC_FUNCTION(msiof5),
+
+       SH_PFC_FUNCTION(pcie),
+
+       SH_PFC_FUNCTION(pwm0),
+       SH_PFC_FUNCTION(pwm1),
+       SH_PFC_FUNCTION(pwm2),
+       SH_PFC_FUNCTION(pwm3),
+       SH_PFC_FUNCTION(pwm4),
+       SH_PFC_FUNCTION(pwm5),
+       SH_PFC_FUNCTION(pwm6),
+       SH_PFC_FUNCTION(pwm7),
+       SH_PFC_FUNCTION(pwm8),
+       SH_PFC_FUNCTION(pwm9),
+
+       SH_PFC_FUNCTION(qspi0),
+       SH_PFC_FUNCTION(qspi1),
+
+       SH_PFC_FUNCTION(scif0),
+       SH_PFC_FUNCTION(scif1),
+       SH_PFC_FUNCTION(scif3),
+       SH_PFC_FUNCTION(scif4),
+       SH_PFC_FUNCTION(scif_clk),
+
+       SH_PFC_FUNCTION(tpu),
+
+       SH_PFC_FUNCTION(tsn0),
+};
+
+static const struct pinmux_cfg_reg pinmux_config_regs[] = {
+#define F_(x, y)       FN_##y
+#define FM(x)          FN_##x
+       { PINMUX_CFG_REG_VAR("GPSR0", 0xE6050040, 32,
+                            GROUP(-13, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+                            GROUP(
+               /* GP0_31_19 RESERVED */
+               GP_0_18_FN,     GPSR0_18,
+               GP_0_17_FN,     GPSR0_17,
+               GP_0_16_FN,     GPSR0_16,
+               GP_0_15_FN,     GPSR0_15,
+               GP_0_14_FN,     GPSR0_14,
+               GP_0_13_FN,     GPSR0_13,
+               GP_0_12_FN,     GPSR0_12,
+               GP_0_11_FN,     GPSR0_11,
+               GP_0_10_FN,     GPSR0_10,
+               GP_0_9_FN,      GPSR0_9,
+               GP_0_8_FN,      GPSR0_8,
+               GP_0_7_FN,      GPSR0_7,
+               GP_0_6_FN,      GPSR0_6,
+               GP_0_5_FN,      GPSR0_5,
+               GP_0_4_FN,      GPSR0_4,
+               GP_0_3_FN,      GPSR0_3,
+               GP_0_2_FN,      GPSR0_2,
+               GP_0_1_FN,      GPSR0_1,
+               GP_0_0_FN,      GPSR0_0, ))
+       },
+       { PINMUX_CFG_REG("GPSR1", 0xE6050840, 32, 1, GROUP(
+               0, 0,
+               0, 0,
+               0, 0,
+               GP_1_28_FN,     GPSR1_28,
+               GP_1_27_FN,     GPSR1_27,
+               GP_1_26_FN,     GPSR1_26,
+               GP_1_25_FN,     GPSR1_25,
+               GP_1_24_FN,     GPSR1_24,
+               GP_1_23_FN,     GPSR1_23,
+               GP_1_22_FN,     GPSR1_22,
+               GP_1_21_FN,     GPSR1_21,
+               GP_1_20_FN,     GPSR1_20,
+               GP_1_19_FN,     GPSR1_19,
+               GP_1_18_FN,     GPSR1_18,
+               GP_1_17_FN,     GPSR1_17,
+               GP_1_16_FN,     GPSR1_16,
+               GP_1_15_FN,     GPSR1_15,
+               GP_1_14_FN,     GPSR1_14,
+               GP_1_13_FN,     GPSR1_13,
+               GP_1_12_FN,     GPSR1_12,
+               GP_1_11_FN,     GPSR1_11,
+               GP_1_10_FN,     GPSR1_10,
+               GP_1_9_FN,      GPSR1_9,
+               GP_1_8_FN,      GPSR1_8,
+               GP_1_7_FN,      GPSR1_7,
+               GP_1_6_FN,      GPSR1_6,
+               GP_1_5_FN,      GPSR1_5,
+               GP_1_4_FN,      GPSR1_4,
+               GP_1_3_FN,      GPSR1_3,
+               GP_1_2_FN,      GPSR1_2,
+               GP_1_1_FN,      GPSR1_1,
+               GP_1_0_FN,      GPSR1_0, ))
+       },
+       { PINMUX_CFG_REG_VAR("GPSR2", 0xE6058040, 32,
+                            GROUP(-12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+                            GROUP(
+               /* GP2_31_20 RESERVED */
+               GP_2_19_FN,     GPSR2_19,
+               GP_2_18_FN,     GPSR2_18,
+               GP_2_17_FN,     GPSR2_17,
+               GP_2_16_FN,     GPSR2_16,
+               GP_2_15_FN,     GPSR2_15,
+               GP_2_14_FN,     GPSR2_14,
+               GP_2_13_FN,     GPSR2_13,
+               GP_2_12_FN,     GPSR2_12,
+               GP_2_11_FN,     GPSR2_11,
+               GP_2_10_FN,     GPSR2_10,
+               GP_2_9_FN,      GPSR2_9,
+               GP_2_8_FN,      GPSR2_8,
+               GP_2_7_FN,      GPSR2_7,
+               GP_2_6_FN,      GPSR2_6,
+               GP_2_5_FN,      GPSR2_5,
+               GP_2_4_FN,      GPSR2_4,
+               GP_2_3_FN,      GPSR2_3,
+               GP_2_2_FN,      GPSR2_2,
+               GP_2_1_FN,      GPSR2_1,
+               GP_2_0_FN,      GPSR2_0, ))
+       },
+       { PINMUX_CFG_REG("GPSR3", 0xE6058840, 32, 1, GROUP(
+               0, 0,
+               0, 0,
+               GP_3_29_FN,     GPSR3_29,
+               GP_3_28_FN,     GPSR3_28,
+               GP_3_27_FN,     GPSR3_27,
+               GP_3_26_FN,     GPSR3_26,
+               GP_3_25_FN,     GPSR3_25,
+               GP_3_24_FN,     GPSR3_24,
+               GP_3_23_FN,     GPSR3_23,
+               GP_3_22_FN,     GPSR3_22,
+               GP_3_21_FN,     GPSR3_21,
+               GP_3_20_FN,     GPSR3_20,
+               GP_3_19_FN,     GPSR3_19,
+               GP_3_18_FN,     GPSR3_18,
+               GP_3_17_FN,     GPSR3_17,
+               GP_3_16_FN,     GPSR3_16,
+               GP_3_15_FN,     GPSR3_15,
+               GP_3_14_FN,     GPSR3_14,
+               GP_3_13_FN,     GPSR3_13,
+               GP_3_12_FN,     GPSR3_12,
+               GP_3_11_FN,     GPSR3_11,
+               GP_3_10_FN,     GPSR3_10,
+               GP_3_9_FN,      GPSR3_9,
+               GP_3_8_FN,      GPSR3_8,
+               GP_3_7_FN,      GPSR3_7,
+               GP_3_6_FN,      GPSR3_6,
+               GP_3_5_FN,      GPSR3_5,
+               GP_3_4_FN,      GPSR3_4,
+               GP_3_3_FN,      GPSR3_3,
+               GP_3_2_FN,      GPSR3_2,
+               GP_3_1_FN,      GPSR3_1,
+               GP_3_0_FN,      GPSR3_0, ))
+       },
+       { PINMUX_CFG_REG("GPSR4", 0xE6060040, 32, 1, GROUP(
+               0, 0,
+               0, 0,
+               0, 0,
+               0, 0,
+               0, 0,
+               0, 0,
+               0, 0,
+               GP_4_24_FN,     GPSR4_24,
+               GP_4_23_FN,     GPSR4_23,
+               GP_4_22_FN,     GPSR4_22,
+               GP_4_21_FN,     GPSR4_21,
+               GP_4_20_FN,     GPSR4_20,
+               GP_4_19_FN,     GPSR4_19,
+               GP_4_18_FN,     GPSR4_18,
+               GP_4_17_FN,     GPSR4_17,
+               GP_4_16_FN,     GPSR4_16,
+               GP_4_15_FN,     GPSR4_15,
+               GP_4_14_FN,     GPSR4_14,
+               GP_4_13_FN,     GPSR4_13,
+               GP_4_12_FN,     GPSR4_12,
+               GP_4_11_FN,     GPSR4_11,
+               GP_4_10_FN,     GPSR4_10,
+               GP_4_9_FN,      GPSR4_9,
+               GP_4_8_FN,      GPSR4_8,
+               GP_4_7_FN,      GPSR4_7,
+               GP_4_6_FN,      GPSR4_6,
+               GP_4_5_FN,      GPSR4_5,
+               GP_4_4_FN,      GPSR4_4,
+               GP_4_3_FN,      GPSR4_3,
+               GP_4_2_FN,      GPSR4_2,
+               GP_4_1_FN,      GPSR4_1,
+               GP_4_0_FN,      GPSR4_0, ))
+       },
+       { PINMUX_CFG_REG_VAR("GPSR5", 0xE6060840, 32,
+                            GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+                            GROUP(
+               /* GP5_31_21 RESERVED */
+               GP_5_20_FN,     GPSR5_20,
+               GP_5_19_FN,     GPSR5_19,
+               GP_5_18_FN,     GPSR5_18,
+               GP_5_17_FN,     GPSR5_17,
+               GP_5_16_FN,     GPSR5_16,
+               GP_5_15_FN,     GPSR5_15,
+               GP_5_14_FN,     GPSR5_14,
+               GP_5_13_FN,     GPSR5_13,
+               GP_5_12_FN,     GPSR5_12,
+               GP_5_11_FN,     GPSR5_11,
+               GP_5_10_FN,     GPSR5_10,
+               GP_5_9_FN,      GPSR5_9,
+               GP_5_8_FN,      GPSR5_8,
+               GP_5_7_FN,      GPSR5_7,
+               GP_5_6_FN,      GPSR5_6,
+               GP_5_5_FN,      GPSR5_5,
+               GP_5_4_FN,      GPSR5_4,
+               GP_5_3_FN,      GPSR5_3,
+               GP_5_2_FN,      GPSR5_2,
+               GP_5_1_FN,      GPSR5_1,
+               GP_5_0_FN,      GPSR5_0, ))
+       },
+       { PINMUX_CFG_REG_VAR("GPSR6", 0xE6061040, 32,
+                            GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+                            GROUP(
+               /* GP6_31_21 RESERVED */
+               GP_6_20_FN,     GPSR6_20,
+               GP_6_19_FN,     GPSR6_19,
+               GP_6_18_FN,     GPSR6_18,
+               GP_6_17_FN,     GPSR6_17,
+               GP_6_16_FN,     GPSR6_16,
+               GP_6_15_FN,     GPSR6_15,
+               GP_6_14_FN,     GPSR6_14,
+               GP_6_13_FN,     GPSR6_13,
+               GP_6_12_FN,     GPSR6_12,
+               GP_6_11_FN,     GPSR6_11,
+               GP_6_10_FN,     GPSR6_10,
+               GP_6_9_FN,      GPSR6_9,
+               GP_6_8_FN,      GPSR6_8,
+               GP_6_7_FN,      GPSR6_7,
+               GP_6_6_FN,      GPSR6_6,
+               GP_6_5_FN,      GPSR6_5,
+               GP_6_4_FN,      GPSR6_4,
+               GP_6_3_FN,      GPSR6_3,
+               GP_6_2_FN,      GPSR6_2,
+               GP_6_1_FN,      GPSR6_1,
+               GP_6_0_FN,      GPSR6_0, ))
+       },
+       { PINMUX_CFG_REG_VAR("GPSR7", 0xE6061840, 32,
+                            GROUP(-11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+                            GROUP(
+               /* GP7_31_21 RESERVED */
+               GP_7_20_FN,     GPSR7_20,
+               GP_7_19_FN,     GPSR7_19,
+               GP_7_18_FN,     GPSR7_18,
+               GP_7_17_FN,     GPSR7_17,
+               GP_7_16_FN,     GPSR7_16,
+               GP_7_15_FN,     GPSR7_15,
+               GP_7_14_FN,     GPSR7_14,
+               GP_7_13_FN,     GPSR7_13,
+               GP_7_12_FN,     GPSR7_12,
+               GP_7_11_FN,     GPSR7_11,
+               GP_7_10_FN,     GPSR7_10,
+               GP_7_9_FN,      GPSR7_9,
+               GP_7_8_FN,      GPSR7_8,
+               GP_7_7_FN,      GPSR7_7,
+               GP_7_6_FN,      GPSR7_6,
+               GP_7_5_FN,      GPSR7_5,
+               GP_7_4_FN,      GPSR7_4,
+               GP_7_3_FN,      GPSR7_3,
+               GP_7_2_FN,      GPSR7_2,
+               GP_7_1_FN,      GPSR7_1,
+               GP_7_0_FN,      GPSR7_0, ))
+       },
+       { PINMUX_CFG_REG_VAR("GPSR8", 0xE6068040, 32,
+                            GROUP(-18, 1, 1, 1, 1,
+                                  1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+                            GROUP(
+               /* GP8_31_14 RESERVED */
+               GP_8_13_FN,     GPSR8_13,
+               GP_8_12_FN,     GPSR8_12,
+               GP_8_11_FN,     GPSR8_11,
+               GP_8_10_FN,     GPSR8_10,
+               GP_8_9_FN,      GPSR8_9,
+               GP_8_8_FN,      GPSR8_8,
+               GP_8_7_FN,      GPSR8_7,
+               GP_8_6_FN,      GPSR8_6,
+               GP_8_5_FN,      GPSR8_5,
+               GP_8_4_FN,      GPSR8_4,
+               GP_8_3_FN,      GPSR8_3,
+               GP_8_2_FN,      GPSR8_2,
+               GP_8_1_FN,      GPSR8_1,
+               GP_8_0_FN,      GPSR8_0, ))
+       },
+#undef F_
+#undef FM
+
+#define F_(x, y)       x,
+#define FM(x)          FN_##x,
+       { PINMUX_CFG_REG("IP0SR0", 0xE6050060, 32, 4, GROUP(
+               IP0SR0_31_28
+               IP0SR0_27_24
+               IP0SR0_23_20
+               IP0SR0_19_16
+               IP0SR0_15_12
+               IP0SR0_11_8
+               IP0SR0_7_4
+               IP0SR0_3_0))
+       },
+       { PINMUX_CFG_REG("IP1SR0", 0xE6050064, 32, 4, GROUP(
+               IP1SR0_31_28
+               IP1SR0_27_24
+               IP1SR0_23_20
+               IP1SR0_19_16
+               IP1SR0_15_12
+               IP1SR0_11_8
+               IP1SR0_7_4
+               IP1SR0_3_0))
+       },
+       { PINMUX_CFG_REG_VAR("IP2SR0", 0xE6050068, 32,
+                            GROUP(-20, 4, 4, 4),
+                            GROUP(
+               /* IP2SR0_31_12 RESERVED */
+               IP2SR0_11_8
+               IP2SR0_7_4
+               IP2SR0_3_0))
+       },
+       { PINMUX_CFG_REG("IP0SR1", 0xE6050860, 32, 4, GROUP(
+               IP0SR1_31_28
+               IP0SR1_27_24
+               IP0SR1_23_20
+               IP0SR1_19_16
+               IP0SR1_15_12
+               IP0SR1_11_8
+               IP0SR1_7_4
+               IP0SR1_3_0))
+       },
+       { PINMUX_CFG_REG("IP1SR1", 0xE6050864, 32, 4, GROUP(
+               IP1SR1_31_28
+               IP1SR1_27_24
+               IP1SR1_23_20
+               IP1SR1_19_16
+               IP1SR1_15_12
+               IP1SR1_11_8
+               IP1SR1_7_4
+               IP1SR1_3_0))
+       },
+       { PINMUX_CFG_REG("IP2SR1", 0xE6050868, 32, 4, GROUP(
+               IP2SR1_31_28
+               IP2SR1_27_24
+               IP2SR1_23_20
+               IP2SR1_19_16
+               IP2SR1_15_12
+               IP2SR1_11_8
+               IP2SR1_7_4
+               IP2SR1_3_0))
+       },
+       { PINMUX_CFG_REG_VAR("IP3SR1", 0xE605086C, 32,
+                            GROUP(-12, 4, 4, 4, 4, 4),
+                            GROUP(
+               /* IP3SR1_31_20 RESERVED */
+               IP3SR1_19_16
+               IP3SR1_15_12
+               IP3SR1_11_8
+               IP3SR1_7_4
+               IP3SR1_3_0))
+       },
+       { PINMUX_CFG_REG("IP0SR2", 0xE6058060, 32, 4, GROUP(
+               IP0SR2_31_28
+               IP0SR2_27_24
+               IP0SR2_23_20
+               IP0SR2_19_16
+               IP0SR2_15_12
+               IP0SR2_11_8
+               IP0SR2_7_4
+               IP0SR2_3_0))
+       },
+       { PINMUX_CFG_REG("IP1SR2", 0xE6058064, 32, 4, GROUP(
+               IP1SR2_31_28
+               IP1SR2_27_24
+               IP1SR2_23_20
+               IP1SR2_19_16
+               IP1SR2_15_12
+               IP1SR2_11_8
+               IP1SR2_7_4
+               IP1SR2_3_0))
+       },
+       { PINMUX_CFG_REG_VAR("IP2SR2", 0xE6058068, 32,
+                            GROUP(-16, 4, 4, 4, 4),
+                            GROUP(
+               /* IP2SR2_31_16 RESERVED */
+               IP2SR2_15_12
+               IP2SR2_11_8
+               IP2SR2_7_4
+               IP2SR2_3_0))
+       },
+       { PINMUX_CFG_REG("IP0SR3", 0xE6058860, 32, 4, GROUP(
+               IP0SR3_31_28
+               IP0SR3_27_24
+               IP0SR3_23_20
+               IP0SR3_19_16
+               IP0SR3_15_12
+               IP0SR3_11_8
+               IP0SR3_7_4
+               IP0SR3_3_0))
+       },
+       { PINMUX_CFG_REG("IP1SR3", 0xE6058864, 32, 4, GROUP(
+               IP1SR3_31_28
+               IP1SR3_27_24
+               IP1SR3_23_20
+               IP1SR3_19_16
+               IP1SR3_15_12
+               IP1SR3_11_8
+               IP1SR3_7_4
+               IP1SR3_3_0))
+       },
+       { PINMUX_CFG_REG("IP2SR3", 0xE6058868, 32, 4, GROUP(
+               IP2SR3_31_28
+               IP2SR3_27_24
+               IP2SR3_23_20
+               IP2SR3_19_16
+               IP2SR3_15_12
+               IP2SR3_11_8
+               IP2SR3_7_4
+               IP2SR3_3_0))
+       },
+       { PINMUX_CFG_REG_VAR("IP3SR3", 0xE605886C, 32,
+                            GROUP(-8, 4, 4, 4, 4, 4, 4),
+                            GROUP(
+               /* IP3SR3_31_24 RESERVED */
+               IP3SR3_23_20
+               IP3SR3_19_16
+               IP3SR3_15_12
+               IP3SR3_11_8
+               IP3SR3_7_4
+               IP3SR3_3_0))
+       },
+       { PINMUX_CFG_REG("IP0SR6", 0xE6061060, 32, 4, GROUP(
+               IP0SR6_31_28
+               IP0SR6_27_24
+               IP0SR6_23_20
+               IP0SR6_19_16
+               IP0SR6_15_12
+               IP0SR6_11_8
+               IP0SR6_7_4
+               IP0SR6_3_0))
+       },
+       { PINMUX_CFG_REG("IP1SR6", 0xE6061064, 32, 4, GROUP(
+               IP1SR6_31_28
+               IP1SR6_27_24
+               IP1SR6_23_20
+               IP1SR6_19_16
+               IP1SR6_15_12
+               IP1SR6_11_8
+               IP1SR6_7_4
+               IP1SR6_3_0))
+       },
+       { PINMUX_CFG_REG_VAR("IP2SR6", 0xE6061068, 32,
+                            GROUP(-12, 4, 4, 4, 4, 4),
+                            GROUP(
+               /* IP2SR6_31_20 RESERVED */
+               IP2SR6_19_16
+               IP2SR6_15_12
+               IP2SR6_11_8
+               IP2SR6_7_4
+               IP2SR6_3_0))
+       },
+       { PINMUX_CFG_REG("IP0SR7", 0xE6061860, 32, 4, GROUP(
+               IP0SR7_31_28
+               IP0SR7_27_24
+               IP0SR7_23_20
+               IP0SR7_19_16
+               IP0SR7_15_12
+               IP0SR7_11_8
+               IP0SR7_7_4
+               IP0SR7_3_0))
+       },
+       { PINMUX_CFG_REG("IP1SR7", 0xE6061864, 32, 4, GROUP(
+               IP1SR7_31_28
+               IP1SR7_27_24
+               IP1SR7_23_20
+               IP1SR7_19_16
+               IP1SR7_15_12
+               IP1SR7_11_8
+               IP1SR7_7_4
+               IP1SR7_3_0))
+       },
+       { PINMUX_CFG_REG_VAR("IP2SR7", 0xE6061868, 32,
+                            GROUP(-12, 4, 4, 4, 4, 4),
+                            GROUP(
+               /* IP2SR7_31_20 RESERVED */
+               IP2SR7_19_16
+               IP2SR7_15_12
+               IP2SR7_11_8
+               IP2SR7_7_4
+               IP2SR7_3_0))
+       },
+       { PINMUX_CFG_REG("IP0SR8", 0xE6068060, 32, 4, GROUP(
+               IP0SR8_31_28
+               IP0SR8_27_24
+               IP0SR8_23_20
+               IP0SR8_19_16
+               IP0SR8_15_12
+               IP0SR8_11_8
+               IP0SR8_7_4
+               IP0SR8_3_0))
+       },
+       { PINMUX_CFG_REG_VAR("IP1SR8", 0xE6068064, 32,
+                            GROUP(-8, 4, 4, 4, 4, 4, 4),
+                            GROUP(
+               /* IP1SR8_31_24 RESERVED */
+               IP1SR8_23_20
+               IP1SR8_19_16
+               IP1SR8_15_12
+               IP1SR8_11_8
+               IP1SR8_7_4
+               IP1SR8_3_0))
+       },
+#undef F_
+#undef FM
+
+#define F_(x, y)       x,
+#define FM(x)          FN_##x,
+       { PINMUX_CFG_REG_VAR("MOD_SEL4", 0xE6060100, 32,
+                            GROUP(-12, 1, 1, -2, 1, 1, -1, 1, -2, 1, 1, -2, 1,
+                                  -2, 1, 1, -1),
+                            GROUP(
+               /* RESERVED 31-20 */
+               MOD_SEL4_19
+               MOD_SEL4_18
+               /* RESERVED 17-16 */
+               MOD_SEL4_15
+               MOD_SEL4_14
+               /* RESERVED 13 */
+               MOD_SEL4_12
+               /* RESERVED 11-10 */
+               MOD_SEL4_9
+               MOD_SEL4_8
+               /* RESERVED 7-6 */
+               MOD_SEL4_5
+               /* RESERVED 4-3 */
+               MOD_SEL4_2
+               MOD_SEL4_1
+               /* RESERVED 0 */
+               ))
+       },
+       { PINMUX_CFG_REG_VAR("MOD_SEL5", 0xE6060900, 32,
+                            GROUP(-12, 1, -2, 1, 1, -2, 1, 1, -2, 1, -1,
+                                  1, 1, -2, 1, -1, 1),
+                            GROUP(
+               /* RESERVED 31-20 */
+               MOD_SEL5_19
+               /* RESERVED 18-17 */
+               MOD_SEL5_16
+               MOD_SEL5_15
+               /* RESERVED 14-13 */
+               MOD_SEL5_12
+               MOD_SEL5_11
+               /* RESERVED 10-9 */
+               MOD_SEL5_8
+               /* RESERVED 7 */
+               MOD_SEL5_6
+               MOD_SEL5_5
+               /* RESERVED 4-3 */
+               MOD_SEL5_2
+               /* RESERVED 1 */
+               MOD_SEL5_0))
+       },
+       { PINMUX_CFG_REG_VAR("MOD_SEL6", 0xE6061100, 32,
+                            GROUP(-13, 1, -1, 1, -2, 1, 1,
+                                  -1, 1, -2, 1, 1, 1, -2, 1, 1, -1),
+                            GROUP(
+               /* RESERVED 31-19 */
+               MOD_SEL6_18
+               /* RESERVED 17 */
+               MOD_SEL6_16
+               /* RESERVED 15-14 */
+               MOD_SEL6_13
+               MOD_SEL6_12
+               /* RESERVED 11 */
+               MOD_SEL6_10
+               /* RESERVED 9-8 */
+               MOD_SEL6_7
+               MOD_SEL6_6
+               MOD_SEL6_5
+               /* RESERVED 4-3 */
+               MOD_SEL6_2
+               MOD_SEL6_1
+               /* RESERVED 0 */
+               ))
+       },
+       { PINMUX_CFG_REG_VAR("MOD_SEL7", 0xE6061900, 32,
+                            GROUP(-15, 1, 1, -1, 1, -1, 1, 1, -2, 1, 1,
+                                  -2, 1, 1, -1, 1),
+                            GROUP(
+               /* RESERVED 31-17 */
+               MOD_SEL7_16
+               MOD_SEL7_15
+               /* RESERVED 14 */
+               MOD_SEL7_13
+               /* RESERVED 12 */
+               MOD_SEL7_11
+               MOD_SEL7_10
+               /* RESERVED 9-8 */
+               MOD_SEL7_7
+               MOD_SEL7_6
+               /* RESERVED 5-4 */
+               MOD_SEL7_3
+               MOD_SEL7_2
+               /* RESERVED 1 */
+               MOD_SEL7_0))
+       },
+       { PINMUX_CFG_REG_VAR("MOD_SEL8", 0xE6068100, 32,
+                            GROUP(-20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
+                            GROUP(
+               /* RESERVED 31-12 */
+               MOD_SEL8_11
+               MOD_SEL8_10
+               MOD_SEL8_9
+               MOD_SEL8_8
+               MOD_SEL8_7
+               MOD_SEL8_6
+               MOD_SEL8_5
+               MOD_SEL8_4
+               MOD_SEL8_3
+               MOD_SEL8_2
+               MOD_SEL8_1
+               MOD_SEL8_0))
+       },
+       { },
+};
+
+static const struct pinmux_drive_reg pinmux_drive_regs[] = {
+       { PINMUX_DRIVE_REG("DRV0CTRL0", 0xE6050080) {
+               { RCAR_GP_PIN(0,  7), 28, 3 },  /* MSIOF5_SS2 */
+               { RCAR_GP_PIN(0,  6), 24, 3 },  /* IRQ0 */
+               { RCAR_GP_PIN(0,  5), 20, 3 },  /* IRQ1 */
+               { RCAR_GP_PIN(0,  4), 16, 3 },  /* IRQ2 */
+               { RCAR_GP_PIN(0,  3), 12, 3 },  /* IRQ3 */
+               { RCAR_GP_PIN(0,  2),  8, 3 },  /* GP0_02 */
+               { RCAR_GP_PIN(0,  1),  4, 3 },  /* GP0_01 */
+               { RCAR_GP_PIN(0,  0),  0, 3 },  /* GP0_00 */
+       } },
+       { PINMUX_DRIVE_REG("DRV1CTRL0", 0xE6050084) {
+               { RCAR_GP_PIN(0, 15), 28, 3 },  /* MSIOF2_SYNC */
+               { RCAR_GP_PIN(0, 14), 24, 3 },  /* MSIOF2_SS1 */
+               { RCAR_GP_PIN(0, 13), 20, 3 },  /* MSIOF2_SS2 */
+               { RCAR_GP_PIN(0, 12), 16, 3 },  /* MSIOF5_RXD */
+               { RCAR_GP_PIN(0, 11), 12, 3 },  /* MSIOF5_SCK */
+               { RCAR_GP_PIN(0, 10),  8, 3 },  /* MSIOF5_TXD */
+               { RCAR_GP_PIN(0,  9),  4, 3 },  /* MSIOF5_SYNC */
+               { RCAR_GP_PIN(0,  8),  0, 3 },  /* MSIOF5_SS1 */
+       } },
+       { PINMUX_DRIVE_REG("DRV2CTRL0", 0xE6050088) {
+               { RCAR_GP_PIN(0, 18),  8, 3 },  /* MSIOF2_RXD */
+               { RCAR_GP_PIN(0, 17),  4, 3 },  /* MSIOF2_SCK */
+               { RCAR_GP_PIN(0, 16),  0, 3 },  /* MSIOF2_TXD */
+       } },
+       { PINMUX_DRIVE_REG("DRV0CTRL1", 0xE6050880) {
+               { RCAR_GP_PIN(1,  7), 28, 3 },  /* MSIOF0_SS1 */
+               { RCAR_GP_PIN(1,  6), 24, 3 },  /* MSIOF0_SS2 */
+               { RCAR_GP_PIN(1,  5), 20, 3 },  /* MSIOF1_RXD */
+               { RCAR_GP_PIN(1,  4), 16, 3 },  /* MSIOF1_TXD */
+               { RCAR_GP_PIN(1,  3), 12, 3 },  /* MSIOF1_SCK */
+               { RCAR_GP_PIN(1,  2),  8, 3 },  /* MSIOF1_SYNC */
+               { RCAR_GP_PIN(1,  1),  4, 3 },  /* MSIOF1_SS1 */
+               { RCAR_GP_PIN(1,  0),  0, 3 },  /* MSIOF1_SS2 */
+       } },
+       { PINMUX_DRIVE_REG("DRV1CTRL1", 0xE6050884) {
+               { RCAR_GP_PIN(1, 15), 28, 3 },  /* HSCK0 */
+               { RCAR_GP_PIN(1, 14), 24, 3 },  /* HRTS0_N */
+               { RCAR_GP_PIN(1, 13), 20, 3 },  /* HCTS0_N */
+               { RCAR_GP_PIN(1, 12), 16, 3 },  /* HTX0 */
+               { RCAR_GP_PIN(1, 11), 12, 3 },  /* MSIOF0_RXD */
+               { RCAR_GP_PIN(1, 10),  8, 3 },  /* MSIOF0_SCK */
+               { RCAR_GP_PIN(1,  9),  4, 3 },  /* MSIOF0_TXD */
+               { RCAR_GP_PIN(1,  8),  0, 3 },  /* MSIOF0_SYNC */
+       } },
+       { PINMUX_DRIVE_REG("DRV2CTRL1", 0xE6050888) {
+               { RCAR_GP_PIN(1, 23), 28, 3 },  /* GP1_23 */
+               { RCAR_GP_PIN(1, 22), 24, 3 },  /* AUDIO_CLKIN */
+               { RCAR_GP_PIN(1, 21), 20, 3 },  /* AUDIO_CLKOUT */
+               { RCAR_GP_PIN(1, 20), 16, 3 },  /* SSI_SD */
+               { RCAR_GP_PIN(1, 19), 12, 3 },  /* SSI_WS */
+               { RCAR_GP_PIN(1, 18),  8, 3 },  /* SSI_SCK */
+               { RCAR_GP_PIN(1, 17),  4, 3 },  /* SCIF_CLK */
+               { RCAR_GP_PIN(1, 16),  0, 3 },  /* HRX0 */
+       } },
+       { PINMUX_DRIVE_REG("DRV3CTRL1", 0xE605088C) {
+               { RCAR_GP_PIN(1, 28), 16, 3 },  /* HTX3 */
+               { RCAR_GP_PIN(1, 27), 12, 3 },  /* HCTS3_N */
+               { RCAR_GP_PIN(1, 26),  8, 3 },  /* HRTS3_N */
+               { RCAR_GP_PIN(1, 25),  4, 3 },  /* HSCK3 */
+               { RCAR_GP_PIN(1, 24),  0, 3 },  /* HRX3 */
+       } },
+       { PINMUX_DRIVE_REG("DRV0CTRL2", 0xE6058080) {
+               { RCAR_GP_PIN(2,  7), 28, 3 },  /* TPU0TO1 */
+               { RCAR_GP_PIN(2,  6), 24, 3 },  /* FXR_TXDB */
+               { RCAR_GP_PIN(2,  5), 20, 3 },  /* FXR_TXENB_N */
+               { RCAR_GP_PIN(2,  4), 16, 3 },  /* RXDB_EXTFXR */
+               { RCAR_GP_PIN(2,  3), 12, 3 },  /* CLK_EXTFXR */
+               { RCAR_GP_PIN(2,  2),  8, 3 },  /* RXDA_EXTFXR */
+               { RCAR_GP_PIN(2,  1),  4, 3 },  /* FXR_TXENA_N */
+               { RCAR_GP_PIN(2,  0),  0, 3 },  /* FXR_TXDA */
+       } },
+       { PINMUX_DRIVE_REG("DRV1CTRL2", 0xE6058084) {
+               { RCAR_GP_PIN(2, 15), 28, 3 },  /* CANFD3_RX */
+               { RCAR_GP_PIN(2, 14), 24, 3 },  /* CANFD3_TX */
+               { RCAR_GP_PIN(2, 13), 20, 3 },  /* CANFD2_RX */
+               { RCAR_GP_PIN(2, 12), 16, 3 },  /* CANFD2_TX */
+               { RCAR_GP_PIN(2, 11), 12, 3 },  /* CANFD0_RX */
+               { RCAR_GP_PIN(2, 10),  8, 3 },  /* CANFD0_TX */
+               { RCAR_GP_PIN(2,  9),  4, 3 },  /* CAN_CLK */
+               { RCAR_GP_PIN(2,  8),  0, 3 },  /* TPU0TO0 */
+       } },
+       { PINMUX_DRIVE_REG("DRV2CTRL2", 0xE6058088) {
+               { RCAR_GP_PIN(2, 19), 12, 3 },  /* CANFD7_RX */
+               { RCAR_GP_PIN(2, 18),  8, 3 },  /* CANFD7_TX */
+               { RCAR_GP_PIN(2, 17),  4, 3 },  /* CANFD4_RX */
+               { RCAR_GP_PIN(2, 16),  0, 3 },  /* CANFD4_TX */
+       } },
+       { PINMUX_DRIVE_REG("DRV0CTRL3", 0xE6058880) {
+               { RCAR_GP_PIN(3,  7), 28, 3 },  /* MMC_D4 */
+               { RCAR_GP_PIN(3,  6), 24, 3 },  /* MMC_D5 */
+               { RCAR_GP_PIN(3,  5), 20, 3 },  /* MMC_SD_D3 */
+               { RCAR_GP_PIN(3,  4), 16, 3 },  /* MMC_DS */
+               { RCAR_GP_PIN(3,  3), 12, 3 },  /* MMC_SD_CLK */
+               { RCAR_GP_PIN(3,  2),  8, 3 },  /* MMC_SD_D2 */
+               { RCAR_GP_PIN(3,  1),  4, 3 },  /* MMC_SD_D0 */
+               { RCAR_GP_PIN(3,  0),  0, 3 },  /* MMC_SD_D1 */
+       } },
+       { PINMUX_DRIVE_REG("DRV1CTRL3", 0xE6058884) {
+               { RCAR_GP_PIN(3, 15), 28, 2 },  /* QSPI0_SSL */
+               { RCAR_GP_PIN(3, 14), 24, 2 },  /* IPC_CLKOUT */
+               { RCAR_GP_PIN(3, 13), 20, 2 },  /* IPC_CLKIN */
+               { RCAR_GP_PIN(3, 12), 16, 3 },  /* SD_WP */
+               { RCAR_GP_PIN(3, 11), 12, 3 },  /* SD_CD */
+               { RCAR_GP_PIN(3, 10),  8, 3 },  /* MMC_SD_CMD */
+               { RCAR_GP_PIN(3,  9),  4, 3 },  /* MMC_D6*/
+               { RCAR_GP_PIN(3,  8),  0, 3 },  /* MMC_D7 */
+       } },
+       { PINMUX_DRIVE_REG("DRV2CTRL3", 0xE6058888) {
+               { RCAR_GP_PIN(3, 23), 28, 2 },  /* QSPI1_MISO_IO1 */
+               { RCAR_GP_PIN(3, 22), 24, 2 },  /* QSPI1_SPCLK */
+               { RCAR_GP_PIN(3, 21), 20, 2 },  /* QSPI1_MOSI_IO0 */
+               { RCAR_GP_PIN(3, 20), 16, 2 },  /* QSPI0_SPCLK */
+               { RCAR_GP_PIN(3, 19), 12, 2 },  /* QSPI0_MOSI_IO0 */
+               { RCAR_GP_PIN(3, 18),  8, 2 },  /* QSPI0_MISO_IO1 */
+               { RCAR_GP_PIN(3, 17),  4, 2 },  /* QSPI0_IO2 */
+               { RCAR_GP_PIN(3, 16),  0, 2 },  /* QSPI0_IO3 */
+       } },
+       { PINMUX_DRIVE_REG("DRV3CTRL3", 0xE605888C) {
+               { RCAR_GP_PIN(3, 29), 20, 2 },  /* RPC_INT_N */
+               { RCAR_GP_PIN(3, 28), 16, 2 },  /* RPC_WP_N */
+               { RCAR_GP_PIN(3, 27), 12, 2 },  /* RPC_RESET_N */
+               { RCAR_GP_PIN(3, 26),  8, 2 },  /* QSPI1_IO3 */
+               { RCAR_GP_PIN(3, 25),  4, 2 },  /* QSPI1_SSL */
+               { RCAR_GP_PIN(3, 24),  0, 2 },  /* QSPI1_IO2 */
+       } },
+       { PINMUX_DRIVE_REG("DRV0CTRL4", 0xE6060080) {
+               { RCAR_GP_PIN(4,  7), 28, 3 },  /* TSN0_RX_CTL */
+               { RCAR_GP_PIN(4,  6), 24, 3 },  /* TSN0_AVTP_CAPTURE */
+               { RCAR_GP_PIN(4,  5), 20, 3 },  /* TSN0_AVTP_MATCH */
+               { RCAR_GP_PIN(4,  4), 16, 3 },  /* TSN0_LINK */
+               { RCAR_GP_PIN(4,  3), 12, 3 },  /* TSN0_PHY_INT */
+               { RCAR_GP_PIN(4,  2),  8, 3 },  /* TSN0_AVTP_PPS1 */
+               { RCAR_GP_PIN(4,  1),  4, 3 },  /* TSN0_MDC */
+               { RCAR_GP_PIN(4,  0),  0, 3 },  /* TSN0_MDIO */
+       } },
+       { PINMUX_DRIVE_REG("DRV1CTRL4", 0xE6060084) {
+               { RCAR_GP_PIN(4, 15), 28, 3 },  /* TSN0_TD0 */
+               { RCAR_GP_PIN(4, 14), 24, 3 },  /* TSN0_TD1 */
+               { RCAR_GP_PIN(4, 13), 20, 3 },  /* TSN0_RD1 */
+               { RCAR_GP_PIN(4, 12), 16, 3 },  /* TSN0_TXC */
+               { RCAR_GP_PIN(4, 11), 12, 3 },  /* TSN0_RXC */
+               { RCAR_GP_PIN(4, 10),  8, 3 },  /* TSN0_RD0 */
+               { RCAR_GP_PIN(4,  9),  4, 3 },  /* TSN0_TX_CTL */
+               { RCAR_GP_PIN(4,  8),  0, 3 },  /* TSN0_AVTP_PPS0 */
+       } },
+       { PINMUX_DRIVE_REG("DRV2CTRL4", 0xE6060088) {
+               { RCAR_GP_PIN(4, 23), 28, 3 },  /* AVS0 */
+               { RCAR_GP_PIN(4, 22), 24, 3 },  /* PCIE1_CLKREQ_N */
+               { RCAR_GP_PIN(4, 21), 20, 3 },  /* PCIE0_CLKREQ_N */
+               { RCAR_GP_PIN(4, 20), 16, 3 },  /* TSN0_TXCREFCLK */
+               { RCAR_GP_PIN(4, 19), 12, 3 },  /* TSN0_TD2 */
+               { RCAR_GP_PIN(4, 18),  8, 3 },  /* TSN0_TD3 */
+               { RCAR_GP_PIN(4, 17),  4, 3 },  /* TSN0_RD2 */
+               { RCAR_GP_PIN(4, 16),  0, 3 },  /* TSN0_RD3 */
+       } },
+       { PINMUX_DRIVE_REG("DRV3CTRL4", 0xE606008C) {
+               { RCAR_GP_PIN(4, 24),  0, 3 },  /* AVS1 */
+       } },
+       { PINMUX_DRIVE_REG("DRV0CTRL5", 0xE6060880) {
+               { RCAR_GP_PIN(5,  7), 28, 3 },  /* AVB2_TXCREFCLK */
+               { RCAR_GP_PIN(5,  6), 24, 3 },  /* AVB2_MDC */
+               { RCAR_GP_PIN(5,  5), 20, 3 },  /* AVB2_MAGIC */
+               { RCAR_GP_PIN(5,  4), 16, 3 },  /* AVB2_PHY_INT */
+               { RCAR_GP_PIN(5,  3), 12, 3 },  /* AVB2_LINK */
+               { RCAR_GP_PIN(5,  2),  8, 3 },  /* AVB2_AVTP_MATCH */
+               { RCAR_GP_PIN(5,  1),  4, 3 },  /* AVB2_AVTP_CAPTURE */
+               { RCAR_GP_PIN(5,  0),  0, 3 },  /* AVB2_AVTP_PPS */
+       } },
+       { PINMUX_DRIVE_REG("DRV1CTRL5", 0xE6060884) {
+               { RCAR_GP_PIN(5, 15), 28, 3 },  /* AVB2_TD0 */
+               { RCAR_GP_PIN(5, 14), 24, 3 },  /* AVB2_RD1 */
+               { RCAR_GP_PIN(5, 13), 20, 3 },  /* AVB2_RD2 */
+               { RCAR_GP_PIN(5, 12), 16, 3 },  /* AVB2_TD1 */
+               { RCAR_GP_PIN(5, 11), 12, 3 },  /* AVB2_TD2 */
+               { RCAR_GP_PIN(5, 10),  8, 3 },  /* AVB2_MDIO */
+               { RCAR_GP_PIN(5,  9),  4, 3 },  /* AVB2_RD3 */
+               { RCAR_GP_PIN(5,  8),  0, 3 },  /* AVB2_TD3 */
+       } },
+       { PINMUX_DRIVE_REG("DRV2CTRL5", 0xE6060888) {
+               { RCAR_GP_PIN(5, 20), 16, 3 },  /* AVB2_RX_CTL */
+               { RCAR_GP_PIN(5, 19), 12, 3 },  /* AVB2_TX_CTL */
+               { RCAR_GP_PIN(5, 18),  8, 3 },  /* AVB2_RXC */
+               { RCAR_GP_PIN(5, 17),  4, 3 },  /* AVB2_RD0 */
+               { RCAR_GP_PIN(5, 16),  0, 3 },  /* AVB2_TXC */
+       } },
+       { PINMUX_DRIVE_REG("DRV0CTRL6", 0xE6061080) {
+               { RCAR_GP_PIN(6,  7), 28, 3 },  /* AVB1_TX_CTL */
+               { RCAR_GP_PIN(6,  6), 24, 3 },  /* AVB1_TXC */
+               { RCAR_GP_PIN(6,  5), 20, 3 },  /* AVB1_AVTP_MATCH */
+               { RCAR_GP_PIN(6,  4), 16, 3 },  /* AVB1_LINK */
+               { RCAR_GP_PIN(6,  3), 12, 3 },  /* AVB1_PHY_INT */
+               { RCAR_GP_PIN(6,  2),  8, 3 },  /* AVB1_MDC */
+               { RCAR_GP_PIN(6,  1),  4, 3 },  /* AVB1_MAGIC */
+               { RCAR_GP_PIN(6,  0),  0, 3 },  /* AVB1_MDIO */
+       } },
+       { PINMUX_DRIVE_REG("DRV1CTRL6", 0xE6061084) {
+               { RCAR_GP_PIN(6, 15), 28, 3 },  /* AVB1_RD0 */
+               { RCAR_GP_PIN(6, 14), 24, 3 },  /* AVB1_RD1 */
+               { RCAR_GP_PIN(6, 13), 20, 3 },  /* AVB1_TD0 */
+               { RCAR_GP_PIN(6, 12), 16, 3 },  /* AVB1_TD1 */
+               { RCAR_GP_PIN(6, 11), 12, 3 },  /* AVB1_AVTP_CAPTURE */
+               { RCAR_GP_PIN(6, 10),  8, 3 },  /* AVB1_AVTP_PPS */
+               { RCAR_GP_PIN(6,  9),  4, 3 },  /* AVB1_RX_CTL */
+               { RCAR_GP_PIN(6,  8),  0, 3 },  /* AVB1_RXC */
+       } },
+       { PINMUX_DRIVE_REG("DRV2CTRL6", 0xE6061088) {
+               { RCAR_GP_PIN(6, 20), 16, 3 },  /* AVB1_TXCREFCLK */
+               { RCAR_GP_PIN(6, 19), 12, 3 },  /* AVB1_RD3 */
+               { RCAR_GP_PIN(6, 18),  8, 3 },  /* AVB1_TD3 */
+               { RCAR_GP_PIN(6, 17),  4, 3 },  /* AVB1_RD2 */
+               { RCAR_GP_PIN(6, 16),  0, 3 },  /* AVB1_TD2 */
+       } },
+       { PINMUX_DRIVE_REG("DRV0CTRL7", 0xE6061880) {
+               { RCAR_GP_PIN(7,  7), 28, 3 },  /* AVB0_TD1 */
+               { RCAR_GP_PIN(7,  6), 24, 3 },  /* AVB0_TD2 */
+               { RCAR_GP_PIN(7,  5), 20, 3 },  /* AVB0_PHY_INT */
+               { RCAR_GP_PIN(7,  4), 16, 3 },  /* AVB0_LINK */
+               { RCAR_GP_PIN(7,  3), 12, 3 },  /* AVB0_TD3 */
+               { RCAR_GP_PIN(7,  2),  8, 3 },  /* AVB0_AVTP_MATCH */
+               { RCAR_GP_PIN(7,  1),  4, 3 },  /* AVB0_AVTP_CAPTURE */
+               { RCAR_GP_PIN(7,  0),  0, 3 },  /* AVB0_AVTP_PPS */
+       } },
+       { PINMUX_DRIVE_REG("DRV1CTRL7", 0xE6061884) {
+               { RCAR_GP_PIN(7, 15), 28, 3 },  /* AVB0_TXC */
+               { RCAR_GP_PIN(7, 14), 24, 3 },  /* AVB0_MDIO */
+               { RCAR_GP_PIN(7, 13), 20, 3 },  /* AVB0_MDC */
+               { RCAR_GP_PIN(7, 12), 16, 3 },  /* AVB0_RD2 */
+               { RCAR_GP_PIN(7, 11), 12, 3 },  /* AVB0_TD0 */
+               { RCAR_GP_PIN(7, 10),  8, 3 },  /* AVB0_MAGIC */
+               { RCAR_GP_PIN(7,  9),  4, 3 },  /* AVB0_TXCREFCLK */
+               { RCAR_GP_PIN(7,  8),  0, 3 },  /* AVB0_RD3 */
+       } },
+       { PINMUX_DRIVE_REG("DRV2CTRL7", 0xE6061888) {
+               { RCAR_GP_PIN(7, 20), 16, 3 },  /* AVB0_RX_CTL */
+               { RCAR_GP_PIN(7, 19), 12, 3 },  /* AVB0_RXC */
+               { RCAR_GP_PIN(7, 18),  8, 3 },  /* AVB0_RD0 */
+               { RCAR_GP_PIN(7, 17),  4, 3 },  /* AVB0_RD1 */
+               { RCAR_GP_PIN(7, 16),  0, 3 },  /* AVB0_TX_CTL */
+       } },
+       { PINMUX_DRIVE_REG("DRV0CTRL8", 0xE6068080) {
+               { RCAR_GP_PIN(8,  7), 28, 3 },  /* SDA3 */
+               { RCAR_GP_PIN(8,  6), 24, 3 },  /* SCL3 */
+               { RCAR_GP_PIN(8,  5), 20, 3 },  /* SDA2 */
+               { RCAR_GP_PIN(8,  4), 16, 3 },  /* SCL2 */
+               { RCAR_GP_PIN(8,  3), 12, 3 },  /* SDA1 */
+               { RCAR_GP_PIN(8,  2),  8, 3 },  /* SCL1 */
+               { RCAR_GP_PIN(8,  1),  4, 3 },  /* SDA0 */
+               { RCAR_GP_PIN(8,  0),  0, 3 },  /* SCL0 */
+       } },
+       { PINMUX_DRIVE_REG("DRV1CTRL8", 0xE6068084) {
+               { RCAR_GP_PIN(8, 13), 20, 3 },  /* GP8_13 */
+               { RCAR_GP_PIN(8, 12), 16, 3 },  /* GP8_12 */
+               { RCAR_GP_PIN(8, 11), 12, 3 },  /* SDA5 */
+               { RCAR_GP_PIN(8, 10),  8, 3 },  /* SCL5 */
+               { RCAR_GP_PIN(8,  9),  4, 3 },  /* SDA4 */
+               { RCAR_GP_PIN(8,  8),  0, 3 },  /* SCL4 */
+       } },
+       { },
+};
+
+enum ioctrl_regs {
+       POC0,
+       POC1,
+       POC3,
+       POC4,
+       POC5,
+       POC6,
+       POC7,
+       POC8,
+};
+
+static const struct pinmux_ioctrl_reg pinmux_ioctrl_regs[] = {
+       [POC0]          = { 0xE60500A0, },
+       [POC1]          = { 0xE60508A0, },
+       [POC3]          = { 0xE60588A0, },
+       [POC4]          = { 0xE60600A0, },
+       [POC5]          = { 0xE60608A0, },
+       [POC6]          = { 0xE60610A0, },
+       [POC7]          = { 0xE60618A0, },
+       [POC8]          = { 0xE60680A0, },
+       { /* sentinel */ },
+};
+
+static int r8a779g0_pin_to_pocctrl(unsigned int pin, u32 *pocctrl)
+{
+       int bit = pin & 0x1f;
+
+       *pocctrl = pinmux_ioctrl_regs[POC0].reg;
+       if (pin >= RCAR_GP_PIN(0, 0) && pin <= RCAR_GP_PIN(0, 18))
+               return bit;
+
+       *pocctrl = pinmux_ioctrl_regs[POC1].reg;
+       if (pin >= RCAR_GP_PIN(1, 0) && pin <= RCAR_GP_PIN(1, 22))
+               return bit;
+
+       *pocctrl = pinmux_ioctrl_regs[POC3].reg;
+       if (pin >= RCAR_GP_PIN(3, 0) && pin <= RCAR_GP_PIN(3, 12))
+               return bit;
+
+       *pocctrl = pinmux_ioctrl_regs[POC8].reg;
+       if (pin >= RCAR_GP_PIN(8, 0) && pin <= RCAR_GP_PIN(8, 13))
+               return bit;
+
+       return -EINVAL;
+}
+
+static const struct pinmux_bias_reg pinmux_bias_regs[] = {
+       { PINMUX_BIAS_REG("PUEN0", 0xE60500C0, "PUD0", 0xE60500E0) {
+               [ 0] = RCAR_GP_PIN(0,  0),      /* GP0_00 */
+               [ 1] = RCAR_GP_PIN(0,  1),      /* GP0_01 */
+               [ 2] = RCAR_GP_PIN(0,  2),      /* GP0_02 */
+               [ 3] = RCAR_GP_PIN(0,  3),      /* IRQ3 */
+               [ 4] = RCAR_GP_PIN(0,  4),      /* IRQ2 */
+               [ 5] = RCAR_GP_PIN(0,  5),      /* IRQ1 */
+               [ 6] = RCAR_GP_PIN(0,  6),      /* IRQ0 */
+               [ 7] = RCAR_GP_PIN(0,  7),      /* MSIOF5_SS2 */
+               [ 8] = RCAR_GP_PIN(0,  8),      /* MSIOF5_SS1 */
+               [ 9] = RCAR_GP_PIN(0,  9),      /* MSIOF5_SYNC */
+               [10] = RCAR_GP_PIN(0, 10),      /* MSIOF5_TXD */
+               [11] = RCAR_GP_PIN(0, 11),      /* MSIOF5_SCK */
+               [12] = RCAR_GP_PIN(0, 12),      /* MSIOF5_RXD */
+               [13] = RCAR_GP_PIN(0, 13),      /* MSIOF2_SS2 */
+               [14] = RCAR_GP_PIN(0, 14),      /* MSIOF2_SS1 */
+               [15] = RCAR_GP_PIN(0, 15),      /* MSIOF2_SYNC */
+               [16] = RCAR_GP_PIN(0, 16),      /* MSIOF2_TXD */
+               [17] = RCAR_GP_PIN(0, 17),      /* MSIOF2_SCK */
+               [18] = RCAR_GP_PIN(0, 18),      /* MSIOF2_RXD */
+               [19] = SH_PFC_PIN_NONE,
+               [20] = SH_PFC_PIN_NONE,
+               [21] = SH_PFC_PIN_NONE,
+               [22] = SH_PFC_PIN_NONE,
+               [23] = SH_PFC_PIN_NONE,
+               [24] = SH_PFC_PIN_NONE,
+               [25] = SH_PFC_PIN_NONE,
+               [26] = SH_PFC_PIN_NONE,
+               [27] = SH_PFC_PIN_NONE,
+               [28] = SH_PFC_PIN_NONE,
+               [29] = SH_PFC_PIN_NONE,
+               [30] = SH_PFC_PIN_NONE,
+               [31] = SH_PFC_PIN_NONE,
+       } },
+       { PINMUX_BIAS_REG("PUEN1", 0xE60508C0, "PUD1", 0xE60508E0) {
+               [ 0] = RCAR_GP_PIN(1,  0),      /* MSIOF1_SS2 */
+               [ 1] = RCAR_GP_PIN(1,  1),      /* MSIOF1_SS1 */
+               [ 2] = RCAR_GP_PIN(1,  2),      /* MSIOF1_SYNC */
+               [ 3] = RCAR_GP_PIN(1,  3),      /* MSIOF1_SCK */
+               [ 4] = RCAR_GP_PIN(1,  4),      /* MSIOF1_TXD */
+               [ 5] = RCAR_GP_PIN(1,  5),      /* MSIOF1_RXD */
+               [ 6] = RCAR_GP_PIN(1,  6),      /* MSIOF0_SS2 */
+               [ 7] = RCAR_GP_PIN(1,  7),      /* MSIOF0_SS1 */
+               [ 8] = RCAR_GP_PIN(1,  8),      /* MSIOF0_SYNC */
+               [ 9] = RCAR_GP_PIN(1,  9),      /* MSIOF0_TXD */
+               [10] = RCAR_GP_PIN(1, 10),      /* MSIOF0_SCK */
+               [11] = RCAR_GP_PIN(1, 11),      /* MSIOF0_RXD */
+               [12] = RCAR_GP_PIN(1, 12),      /* HTX0 */
+               [13] = RCAR_GP_PIN(1, 13),      /* HCTS0_N */
+               [14] = RCAR_GP_PIN(1, 14),      /* HRTS0_N */
+               [15] = RCAR_GP_PIN(1, 15),      /* HSCK0 */
+               [16] = RCAR_GP_PIN(1, 16),      /* HRX0 */
+               [17] = RCAR_GP_PIN(1, 17),      /* SCIF_CLK */
+               [18] = RCAR_GP_PIN(1, 18),      /* SSI_SCK */
+               [19] = RCAR_GP_PIN(1, 19),      /* SSI_WS */
+               [20] = RCAR_GP_PIN(1, 20),      /* SSI_SD */
+               [21] = RCAR_GP_PIN(1, 21),      /* AUDIO_CLKOUT */
+               [22] = RCAR_GP_PIN(1, 22),      /* AUDIO_CLKIN */
+               [23] = RCAR_GP_PIN(1, 23),      /* GP1_23 */
+               [24] = RCAR_GP_PIN(1, 24),      /* HRX3 */
+               [25] = RCAR_GP_PIN(1, 25),      /* HSCK3 */
+               [26] = RCAR_GP_PIN(1, 26),      /* HRTS3_N */
+               [27] = RCAR_GP_PIN(1, 27),      /* HCTS3_N */
+               [28] = RCAR_GP_PIN(1, 28),      /* HTX3 */
+               [29] = SH_PFC_PIN_NONE,
+               [30] = SH_PFC_PIN_NONE,
+               [31] = SH_PFC_PIN_NONE,
+       } },
+       { PINMUX_BIAS_REG("PUEN2", 0xE60580C0, "PUD2", 0xE60580E0) {
+               [ 0] = RCAR_GP_PIN(2,  0),      /* FXR_TXDA */
+               [ 1] = RCAR_GP_PIN(2,  1),      /* FXR_TXENA_N */
+               [ 2] = RCAR_GP_PIN(2,  2),      /* RXDA_EXTFXR */
+               [ 3] = RCAR_GP_PIN(2,  3),      /* CLK_EXTFXR */
+               [ 4] = RCAR_GP_PIN(2,  4),      /* RXDB_EXTFXR */
+               [ 5] = RCAR_GP_PIN(2,  5),      /* FXR_TXENB_N */
+               [ 6] = RCAR_GP_PIN(2,  6),      /* FXR_TXDB */
+               [ 7] = RCAR_GP_PIN(2,  7),      /* TPU0TO1 */
+               [ 8] = RCAR_GP_PIN(2,  8),      /* TPU0TO0 */
+               [ 9] = RCAR_GP_PIN(2,  9),      /* CAN_CLK */
+               [10] = RCAR_GP_PIN(2, 10),      /* CANFD0_TX */
+               [11] = RCAR_GP_PIN(2, 11),      /* CANFD0_RX */
+               [12] = RCAR_GP_PIN(2, 12),      /* CANFD2_TX */
+               [13] = RCAR_GP_PIN(2, 13),      /* CANFD2_RX */
+               [14] = RCAR_GP_PIN(2, 14),      /* CANFD3_TX */
+               [15] = RCAR_GP_PIN(2, 15),      /* CANFD3_RX */
+               [16] = RCAR_GP_PIN(2, 16),      /* CANFD4_TX */
+               [17] = RCAR_GP_PIN(2, 17),      /* CANFD4_RX */
+               [18] = RCAR_GP_PIN(2, 18),      /* CANFD7_TX */
+               [19] = RCAR_GP_PIN(2, 19),      /* CANFD7_RX */
+               [20] = SH_PFC_PIN_NONE,
+               [21] = SH_PFC_PIN_NONE,
+               [22] = SH_PFC_PIN_NONE,
+               [23] = SH_PFC_PIN_NONE,
+               [24] = SH_PFC_PIN_NONE,
+               [25] = SH_PFC_PIN_NONE,
+               [26] = SH_PFC_PIN_NONE,
+               [27] = SH_PFC_PIN_NONE,
+               [28] = SH_PFC_PIN_NONE,
+               [29] = SH_PFC_PIN_NONE,
+               [30] = SH_PFC_PIN_NONE,
+               [31] = SH_PFC_PIN_NONE,
+       } },
+       { PINMUX_BIAS_REG("PUEN3", 0xE60588C0, "PUD3", 0xE60588E0) {
+               [ 0] = RCAR_GP_PIN(3,  0),      /* MMC_SD_D1 */
+               [ 1] = RCAR_GP_PIN(3,  1),      /* MMC_SD_D0 */
+               [ 2] = RCAR_GP_PIN(3,  2),      /* MMC_SD_D2 */
+               [ 3] = RCAR_GP_PIN(3,  3),      /* MMC_SD_CLK */
+               [ 4] = RCAR_GP_PIN(3,  4),      /* MMC_DS */
+               [ 5] = RCAR_GP_PIN(3,  5),      /* MMC_SD_D3 */
+               [ 6] = RCAR_GP_PIN(3,  6),      /* MMC_D5 */
+               [ 7] = RCAR_GP_PIN(3,  7),      /* MMC_D4 */
+               [ 8] = RCAR_GP_PIN(3,  8),      /* MMC_D7 */
+               [ 9] = RCAR_GP_PIN(3,  9),      /* MMC_D6 */
+               [10] = RCAR_GP_PIN(3, 10),      /* MMC_SD_CMD */
+               [11] = RCAR_GP_PIN(3, 11),      /* SD_CD */
+               [12] = RCAR_GP_PIN(3, 12),      /* SD_WP */
+               [13] = RCAR_GP_PIN(3, 13),      /* IPC_CLKIN */
+               [14] = RCAR_GP_PIN(3, 14),      /* IPC_CLKOUT */
+               [15] = RCAR_GP_PIN(3, 15),      /* QSPI0_SSL */
+               [16] = RCAR_GP_PIN(3, 16),      /* QSPI0_IO3 */
+               [17] = RCAR_GP_PIN(3, 17),      /* QSPI0_IO2 */
+               [18] = RCAR_GP_PIN(3, 18),      /* QSPI0_MISO_IO1 */
+               [19] = RCAR_GP_PIN(3, 19),      /* QSPI0_MOSI_IO0 */
+               [20] = RCAR_GP_PIN(3, 20),      /* QSPI0_SPCLK */
+               [21] = RCAR_GP_PIN(3, 21),      /* QSPI1_MOSI_IO0 */
+               [22] = RCAR_GP_PIN(3, 22),      /* QSPI1_SPCLK */
+               [23] = RCAR_GP_PIN(3, 23),      /* QSPI1_MISO_IO1 */
+               [24] = RCAR_GP_PIN(3, 24),      /* QSPI1_IO2 */
+               [25] = RCAR_GP_PIN(3, 25),      /* QSPI1_SSL */
+               [26] = RCAR_GP_PIN(3, 26),      /* QSPI1_IO3 */
+               [27] = RCAR_GP_PIN(3, 27),      /* RPC_RESET_N */
+               [28] = RCAR_GP_PIN(3, 28),      /* RPC_WP_N */
+               [29] = RCAR_GP_PIN(3, 29),      /* RPC_INT_N */
+               [30] = SH_PFC_PIN_NONE,
+               [31] = SH_PFC_PIN_NONE,
+       } },
+       { PINMUX_BIAS_REG("PUEN4", 0xE60600C0, "PUD4", 0xE60600E0) {
+               [ 0] = RCAR_GP_PIN(4,  0),      /* TSN0_MDIO */
+               [ 1] = RCAR_GP_PIN(4,  1),      /* TSN0_MDC */
+               [ 2] = RCAR_GP_PIN(4,  2),      /* TSN0_AVTP_PPS1 */
+               [ 3] = RCAR_GP_PIN(4,  3),      /* TSN0_PHY_INT */
+               [ 4] = RCAR_GP_PIN(4,  4),      /* TSN0_LINK */
+               [ 5] = RCAR_GP_PIN(4,  5),      /* TSN0_AVTP_MATCH */
+               [ 6] = RCAR_GP_PIN(4,  6),      /* TSN0_AVTP_CAPTURE */
+               [ 7] = RCAR_GP_PIN(4,  7),      /* TSN0_RX_CTL */
+               [ 8] = RCAR_GP_PIN(4,  8),      /* TSN0_AVTP_PPS0 */
+               [ 9] = RCAR_GP_PIN(4,  9),      /* TSN0_TX_CTL */
+               [10] = RCAR_GP_PIN(4, 10),      /* TSN0_RD0 */
+               [11] = RCAR_GP_PIN(4, 11),      /* TSN0_RXC */
+               [12] = RCAR_GP_PIN(4, 12),      /* TSN0_TXC */
+               [13] = RCAR_GP_PIN(4, 13),      /* TSN0_RD1 */
+               [14] = RCAR_GP_PIN(4, 14),      /* TSN0_TD1 */
+               [15] = RCAR_GP_PIN(4, 15),      /* TSN0_TD0 */
+               [16] = RCAR_GP_PIN(4, 16),      /* TSN0_RD3 */
+               [17] = RCAR_GP_PIN(4, 17),      /* TSN0_RD2 */
+               [18] = RCAR_GP_PIN(4, 18),      /* TSN0_TD3 */
+               [19] = RCAR_GP_PIN(4, 19),      /* TSN0_TD2 */
+               [20] = RCAR_GP_PIN(4, 20),      /* TSN0_TXCREFCLK */
+               [21] = RCAR_GP_PIN(4, 21),      /* PCIE0_CLKREQ_N */
+               [22] = RCAR_GP_PIN(4, 22),      /* PCIE1_CLKREQ_N */
+               [23] = RCAR_GP_PIN(4, 23),      /* AVS0 */
+               [24] = RCAR_GP_PIN(4, 24),      /* AVS1 */
+               [25] = SH_PFC_PIN_NONE,
+               [26] = SH_PFC_PIN_NONE,
+               [27] = SH_PFC_PIN_NONE,
+               [28] = SH_PFC_PIN_NONE,
+               [29] = SH_PFC_PIN_NONE,
+               [30] = SH_PFC_PIN_NONE,
+               [31] = SH_PFC_PIN_NONE,
+       } },
+       { PINMUX_BIAS_REG("PUEN5", 0xE60608C0, "PUD5", 0xE60608E0) {
+               [ 0] = RCAR_GP_PIN(5,  0),      /* AVB2_AVTP_PPS */
+               [ 1] = RCAR_GP_PIN(5,  1),      /* AVB0_AVTP_CAPTURE */
+               [ 2] = RCAR_GP_PIN(5,  2),      /* AVB2_AVTP_MATCH */
+               [ 3] = RCAR_GP_PIN(5,  3),      /* AVB2_LINK */
+               [ 4] = RCAR_GP_PIN(5,  4),      /* AVB2_PHY_INT */
+               [ 5] = RCAR_GP_PIN(5,  5),      /* AVB2_MAGIC */
+               [ 6] = RCAR_GP_PIN(5,  6),      /* AVB2_MDC */
+               [ 7] = RCAR_GP_PIN(5,  7),      /* AVB2_TXCREFCLK */
+               [ 8] = RCAR_GP_PIN(5,  8),      /* AVB2_TD3 */
+               [ 9] = RCAR_GP_PIN(5,  9),      /* AVB2_RD3 */
+               [10] = RCAR_GP_PIN(5, 10),      /* AVB2_MDIO */
+               [11] = RCAR_GP_PIN(5, 11),      /* AVB2_TD2 */
+               [12] = RCAR_GP_PIN(5, 12),      /* AVB2_TD1 */
+               [13] = RCAR_GP_PIN(5, 13),      /* AVB2_RD2 */
+               [14] = RCAR_GP_PIN(5, 14),      /* AVB2_RD1 */
+               [15] = RCAR_GP_PIN(5, 15),      /* AVB2_TD0 */
+               [16] = RCAR_GP_PIN(5, 16),      /* AVB2_TXC */
+               [17] = RCAR_GP_PIN(5, 17),      /* AVB2_RD0 */
+               [18] = RCAR_GP_PIN(5, 18),      /* AVB2_RXC */
+               [19] = RCAR_GP_PIN(5, 19),      /* AVB2_TX_CTL */
+               [20] = RCAR_GP_PIN(5, 20),      /* AVB2_RX_CTL */
+               [21] = SH_PFC_PIN_NONE,
+               [22] = SH_PFC_PIN_NONE,
+               [23] = SH_PFC_PIN_NONE,
+               [24] = SH_PFC_PIN_NONE,
+               [25] = SH_PFC_PIN_NONE,
+               [26] = SH_PFC_PIN_NONE,
+               [27] = SH_PFC_PIN_NONE,
+               [28] = SH_PFC_PIN_NONE,
+               [29] = SH_PFC_PIN_NONE,
+               [30] = SH_PFC_PIN_NONE,
+               [31] = SH_PFC_PIN_NONE,
+       } },
+       { PINMUX_BIAS_REG("PUEN6", 0xE60610C0, "PUD6", 0xE60610E0) {
+               [ 0] = RCAR_GP_PIN(6,  0),      /* AVB1_MDIO */
+               [ 1] = RCAR_GP_PIN(6,  1),      /* AVB1_MAGIC */
+               [ 2] = RCAR_GP_PIN(6,  2),      /* AVB1_MDC */
+               [ 3] = RCAR_GP_PIN(6,  3),      /* AVB1_PHY_INT */
+               [ 4] = RCAR_GP_PIN(6,  4),      /* AVB1_LINK */
+               [ 5] = RCAR_GP_PIN(6,  5),      /* AVB1_AVTP_MATCH */
+               [ 6] = RCAR_GP_PIN(6,  6),      /* AVB1_TXC */
+               [ 7] = RCAR_GP_PIN(6,  7),      /* AVB1_TX_CTL */
+               [ 8] = RCAR_GP_PIN(6,  8),      /* AVB1_RXC */
+               [ 9] = RCAR_GP_PIN(6,  9),      /* AVB1_RX_CTL */
+               [10] = RCAR_GP_PIN(6, 10),      /* AVB1_AVTP_PPS */
+               [11] = RCAR_GP_PIN(6, 11),      /* AVB1_AVTP_CAPTURE */
+               [12] = RCAR_GP_PIN(6, 12),      /* AVB1_TD1 */
+               [13] = RCAR_GP_PIN(6, 13),      /* AVB1_TD0 */
+               [14] = RCAR_GP_PIN(6, 14),      /* AVB1_RD1*/
+               [15] = RCAR_GP_PIN(6, 15),      /* AVB1_RD0 */
+               [16] = RCAR_GP_PIN(6, 16),      /* AVB1_TD2 */
+               [17] = RCAR_GP_PIN(6, 17),      /* AVB1_RD2 */
+               [18] = RCAR_GP_PIN(6, 18),      /* AVB1_TD3 */
+               [19] = RCAR_GP_PIN(6, 19),      /* AVB1_RD3 */
+               [20] = RCAR_GP_PIN(6, 20),      /* AVB1_TXCREFCLK */
+               [21] = SH_PFC_PIN_NONE,
+               [22] = SH_PFC_PIN_NONE,
+               [23] = SH_PFC_PIN_NONE,
+               [24] = SH_PFC_PIN_NONE,
+               [25] = SH_PFC_PIN_NONE,
+               [26] = SH_PFC_PIN_NONE,
+               [27] = SH_PFC_PIN_NONE,
+               [28] = SH_PFC_PIN_NONE,
+               [29] = SH_PFC_PIN_NONE,
+               [30] = SH_PFC_PIN_NONE,
+               [31] = SH_PFC_PIN_NONE,
+       } },
+       { PINMUX_BIAS_REG("PUEN7", 0xE60618C0, "PUD7", 0xE60618E0) {
+               [ 0] = RCAR_GP_PIN(7,  0),      /* AVB0_AVTP_PPS */
+               [ 1] = RCAR_GP_PIN(7,  1),      /* AVB0_AVTP_CAPTURE */
+               [ 2] = RCAR_GP_PIN(7,  2),      /* AVB0_AVTP_MATCH */
+               [ 3] = RCAR_GP_PIN(7,  3),      /* AVB0_TD3 */
+               [ 4] = RCAR_GP_PIN(7,  4),      /* AVB0_LINK */
+               [ 5] = RCAR_GP_PIN(7,  5),      /* AVB0_PHY_INT */
+               [ 6] = RCAR_GP_PIN(7,  6),      /* AVB0_TD2 */
+               [ 7] = RCAR_GP_PIN(7,  7),      /* AVB0_TD1 */
+               [ 8] = RCAR_GP_PIN(7,  8),      /* AVB0_RD3 */
+               [ 9] = RCAR_GP_PIN(7,  9),      /* AVB0_TXCREFCLK */
+               [10] = RCAR_GP_PIN(7, 10),      /* AVB0_MAGIC */
+               [11] = RCAR_GP_PIN(7, 11),      /* AVB0_TD0 */
+               [12] = RCAR_GP_PIN(7, 12),      /* AVB0_RD2 */
+               [13] = RCAR_GP_PIN(7, 13),      /* AVB0_MDC */
+               [14] = RCAR_GP_PIN(7, 14),      /* AVB0_MDIO */
+               [15] = RCAR_GP_PIN(7, 15),      /* AVB0_TXC */
+               [16] = RCAR_GP_PIN(7, 16),      /* AVB0_TX_CTL */
+               [17] = RCAR_GP_PIN(7, 17),      /* AVB0_RD1 */
+               [18] = RCAR_GP_PIN(7, 18),      /* AVB0_RD0 */
+               [19] = RCAR_GP_PIN(7, 19),      /* AVB0_RXC */
+               [20] = RCAR_GP_PIN(7, 20),      /* AVB0_RX_CTL */
+               [21] = SH_PFC_PIN_NONE,
+               [22] = SH_PFC_PIN_NONE,
+               [23] = SH_PFC_PIN_NONE,
+               [24] = SH_PFC_PIN_NONE,
+               [25] = SH_PFC_PIN_NONE,
+               [26] = SH_PFC_PIN_NONE,
+               [27] = SH_PFC_PIN_NONE,
+               [28] = SH_PFC_PIN_NONE,
+               [29] = SH_PFC_PIN_NONE,
+               [30] = SH_PFC_PIN_NONE,
+               [31] = SH_PFC_PIN_NONE,
+       } },
+       { PINMUX_BIAS_REG("PUEN8", 0xE60680C0, "PUD8", 0xE60680E0) {
+               [ 0] = RCAR_GP_PIN(8,  0),      /* SCL0 */
+               [ 1] = RCAR_GP_PIN(8,  1),      /* SDA0 */
+               [ 2] = RCAR_GP_PIN(8,  2),      /* SCL1 */
+               [ 3] = RCAR_GP_PIN(8,  3),      /* SDA1 */
+               [ 4] = RCAR_GP_PIN(8,  4),      /* SCL2 */
+               [ 5] = RCAR_GP_PIN(8,  5),      /* SDA2 */
+               [ 6] = RCAR_GP_PIN(8,  6),      /* SCL3 */
+               [ 7] = RCAR_GP_PIN(8,  7),      /* SDA3 */
+               [ 8] = RCAR_GP_PIN(8,  8),      /* SCL4 */
+               [ 9] = RCAR_GP_PIN(8,  9),      /* SDA4 */
+               [10] = RCAR_GP_PIN(8, 10),      /* SCL5 */
+               [11] = RCAR_GP_PIN(8, 11),      /* SDA5 */
+               [12] = RCAR_GP_PIN(8, 12),      /* GP8_12 */
+               [13] = RCAR_GP_PIN(8, 13),      /* GP8_13 */
+               [14] = SH_PFC_PIN_NONE,
+               [15] = SH_PFC_PIN_NONE,
+               [16] = SH_PFC_PIN_NONE,
+               [17] = SH_PFC_PIN_NONE,
+               [18] = SH_PFC_PIN_NONE,
+               [19] = SH_PFC_PIN_NONE,
+               [20] = SH_PFC_PIN_NONE,
+               [21] = SH_PFC_PIN_NONE,
+               [22] = SH_PFC_PIN_NONE,
+               [23] = SH_PFC_PIN_NONE,
+               [24] = SH_PFC_PIN_NONE,
+               [25] = SH_PFC_PIN_NONE,
+               [26] = SH_PFC_PIN_NONE,
+               [27] = SH_PFC_PIN_NONE,
+               [28] = SH_PFC_PIN_NONE,
+               [29] = SH_PFC_PIN_NONE,
+               [30] = SH_PFC_PIN_NONE,
+               [31] = SH_PFC_PIN_NONE,
+       } },
+       { /* sentinel */ },
+};
+
+static const struct sh_pfc_soc_operations r8a779g0_pin_ops = {
+       .pin_to_pocctrl = r8a779g0_pin_to_pocctrl,
+       .get_bias = rcar_pinmux_get_bias,
+       .set_bias = rcar_pinmux_set_bias,
+};
+
+const struct sh_pfc_soc_info r8a779g0_pinmux_info = {
+       .name = "r8a779g0_pfc",
+       .ops = &r8a779g0_pin_ops,
+       .unlock_reg = 0x1ff,    /* PMMRn mask */
+
+       .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
+
+       .pins = pinmux_pins,
+       .nr_pins = ARRAY_SIZE(pinmux_pins),
+       .groups = pinmux_groups,
+       .nr_groups = ARRAY_SIZE(pinmux_groups),
+       .functions = pinmux_functions,
+       .nr_functions = ARRAY_SIZE(pinmux_functions),
+
+       .cfg_regs = pinmux_config_regs,
+       .drive_regs = pinmux_drive_regs,
+       .bias_regs = pinmux_bias_regs,
+       .ioctrl_regs = pinmux_ioctrl_regs,
+
+       .pinmux_data = pinmux_data,
+       .pinmux_data_size = ARRAY_SIZE(pinmux_data),
+};
index c47eed9d948fd0e68910d5691a451f042f974b9b..a43824fd9505f4f817333494124a5db59535fbe4 100644 (file)
@@ -527,6 +527,8 @@ static int rzg2l_pinctrl_pinconf_get(struct pinctrl_dev *pctldev,
                if (!(cfg & PIN_CFG_IEN))
                        return -EINVAL;
                arg = rzg2l_read_pin_config(pctrl, IEN(port_offset), bit, IEN_MASK);
+               if (!arg)
+                       return -EINVAL;
                break;
 
        case PIN_CONFIG_POWER_SOURCE: {
diff --git a/drivers/pinctrl/renesas/pinctrl-rzv2m.c b/drivers/pinctrl/renesas/pinctrl-rzv2m.c
new file mode 100644 (file)
index 0000000..e8c1819
--- /dev/null
@@ -0,0 +1,1119 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Renesas RZ/V2M Pin Control and GPIO driver core
+ *
+ * Based on:
+ *   Renesas RZ/G2L Pin Control and GPIO driver core
+ *
+ * Copyright (C) 2022 Renesas Electronics Corporation.
+ */
+
+#include <linux/bitfield.h>
+#include <linux/bitops.h>
+#include <linux/clk.h>
+#include <linux/gpio/driver.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/pinconf-generic.h>
+#include <linux/pinctrl/pinconf.h>
+#include <linux/pinctrl/pinctrl.h>
+#include <linux/pinctrl/pinmux.h>
+#include <linux/spinlock.h>
+
+#include <dt-bindings/pinctrl/rzv2m-pinctrl.h>
+
+#include "../core.h"
+#include "../pinconf.h"
+#include "../pinmux.h"
+
+#define DRV_NAME       "pinctrl-rzv2m"
+
+/*
+ * Use 16 lower bits [15:0] for pin identifier
+ * Use 16 higher bits [31:16] for pin mux function
+ */
+#define MUX_PIN_ID_MASK                GENMASK(15, 0)
+#define MUX_FUNC_MASK          GENMASK(31, 16)
+#define MUX_FUNC(pinconf)      FIELD_GET(MUX_FUNC_MASK, (pinconf))
+
+/* PIN capabilities */
+#define PIN_CFG_GRP_1_8V_2             1
+#define PIN_CFG_GRP_1_8V_3             2
+#define PIN_CFG_GRP_SWIO_1             3
+#define PIN_CFG_GRP_SWIO_2             4
+#define PIN_CFG_GRP_3_3V               5
+#define PIN_CFG_GRP_MASK               GENMASK(2, 0)
+#define PIN_CFG_BIAS                   BIT(3)
+#define PIN_CFG_DRV                    BIT(4)
+#define PIN_CFG_SLEW                   BIT(5)
+
+#define RZV2M_MPXED_PIN_FUNCS          (PIN_CFG_BIAS | \
+                                        PIN_CFG_DRV | \
+                                        PIN_CFG_SLEW)
+
+/*
+ * n indicates number of pins in the port, a is the register index
+ * and f is pin configuration capabilities supported.
+ */
+#define RZV2M_GPIO_PORT_PACK(n, a, f)  (((n) << 24) | ((a) << 16) | (f))
+#define RZV2M_GPIO_PORT_GET_PINCNT(x)  FIELD_GET(GENMASK(31, 24), (x))
+#define RZV2M_GPIO_PORT_GET_INDEX(x)   FIELD_GET(GENMASK(23, 16), (x))
+#define RZV2M_GPIO_PORT_GET_CFGS(x)    FIELD_GET(GENMASK(15, 0), (x))
+
+#define RZV2M_DEDICATED_PORT_IDX       22
+
+/*
+ * BIT(31) indicates dedicated pin, b is the register bits (b * 16)
+ * and f is the pin configuration capabilities supported.
+ */
+#define RZV2M_SINGLE_PIN               BIT(31)
+#define RZV2M_SINGLE_PIN_PACK(b, f)    (RZV2M_SINGLE_PIN | \
+                                        ((RZV2M_DEDICATED_PORT_IDX) << 24) | \
+                                        ((b) << 16) | (f))
+#define RZV2M_SINGLE_PIN_GET_PORT(x)   FIELD_GET(GENMASK(30, 24), (x))
+#define RZV2M_SINGLE_PIN_GET_BIT(x)    FIELD_GET(GENMASK(23, 16), (x))
+#define RZV2M_SINGLE_PIN_GET_CFGS(x)   FIELD_GET(GENMASK(15, 0), (x))
+
+#define RZV2M_PIN_ID_TO_PORT(id)       ((id) / RZV2M_PINS_PER_PORT)
+#define RZV2M_PIN_ID_TO_PIN(id)                ((id) % RZV2M_PINS_PER_PORT)
+
+#define DO(n)          (0x00 + (n) * 0x40)
+#define OE(n)          (0x04 + (n) * 0x40)
+#define IE(n)          (0x08 + (n) * 0x40)
+#define PFSEL(n)       (0x10 + (n) * 0x40)
+#define DI(n)          (0x20 + (n) * 0x40)
+#define PUPD(n)                (0x24 + (n) * 0x40)
+#define DRV(n)         ((n) < RZV2M_DEDICATED_PORT_IDX ? (0x28 + (n) * 0x40) \
+                                                       : 0x590)
+#define SR(n)          ((n) < RZV2M_DEDICATED_PORT_IDX ? (0x2c + (n) * 0x40) \
+                                                       : 0x594)
+#define DI_MSK(n)      (0x30 + (n) * 0x40)
+#define EN_MSK(n)      (0x34 + (n) * 0x40)
+
+#define PFC_MASK       0x07
+#define PUPD_MASK      0x03
+#define DRV_MASK       0x03
+
+struct rzv2m_dedicated_configs {
+       const char *name;
+       u32 config;
+};
+
+struct rzv2m_pinctrl_data {
+       const char * const *port_pins;
+       const u32 *port_pin_configs;
+       const struct rzv2m_dedicated_configs *dedicated_pins;
+       unsigned int n_port_pins;
+       unsigned int n_dedicated_pins;
+};
+
+struct rzv2m_pinctrl {
+       struct pinctrl_dev              *pctl;
+       struct pinctrl_desc             desc;
+       struct pinctrl_pin_desc         *pins;
+
+       const struct rzv2m_pinctrl_data *data;
+       void __iomem                    *base;
+       struct device                   *dev;
+       struct clk                      *clk;
+
+       struct gpio_chip                gpio_chip;
+       struct pinctrl_gpio_range       gpio_range;
+
+       spinlock_t                      lock;
+};
+
+static const unsigned int drv_1_8V_group2_uA[] = { 1800, 3800, 7800, 11000 };
+static const unsigned int drv_1_8V_group3_uA[] = { 1600, 3200, 6400, 9600 };
+static const unsigned int drv_SWIO_group2_3_3V_uA[] = { 9000, 11000, 13000, 18000 };
+static const unsigned int drv_3_3V_group_uA[] = { 2000, 4000, 8000, 12000 };
+
+/* Helper for registers that have a write enable bit in the upper word */
+static void rzv2m_writel_we(void __iomem *addr, u8 shift, u8 value)
+{
+       writel((BIT(16) | value) << shift, addr);
+}
+
+static void rzv2m_pinctrl_set_pfc_mode(struct rzv2m_pinctrl *pctrl,
+                                      u8 port, u8 pin, u8 func)
+{
+       void __iomem *addr;
+
+       /* Mask input/output */
+       rzv2m_writel_we(pctrl->base + DI_MSK(port), pin, 1);
+       rzv2m_writel_we(pctrl->base + EN_MSK(port), pin, 1);
+
+       /* Select the function and set the write enable bits */
+       addr = pctrl->base + PFSEL(port) + (pin / 4) * 4;
+       writel(((PFC_MASK << 16) | func) << ((pin % 4) * 4), addr);
+
+       /* Unmask input/output */
+       rzv2m_writel_we(pctrl->base + EN_MSK(port), pin, 0);
+       rzv2m_writel_we(pctrl->base + DI_MSK(port), pin, 0);
+};
+
+static int rzv2m_pinctrl_set_mux(struct pinctrl_dev *pctldev,
+                                unsigned int func_selector,
+                                unsigned int group_selector)
+{
+       struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
+       struct function_desc *func;
+       unsigned int i, *psel_val;
+       struct group_desc *group;
+       int *pins;
+
+       func = pinmux_generic_get_function(pctldev, func_selector);
+       if (!func)
+               return -EINVAL;
+       group = pinctrl_generic_get_group(pctldev, group_selector);
+       if (!group)
+               return -EINVAL;
+
+       psel_val = func->data;
+       pins = group->pins;
+
+       for (i = 0; i < group->num_pins; i++) {
+               dev_dbg(pctrl->dev, "port:%u pin: %u PSEL:%u\n",
+                       RZV2M_PIN_ID_TO_PORT(pins[i]), RZV2M_PIN_ID_TO_PIN(pins[i]),
+                       psel_val[i]);
+               rzv2m_pinctrl_set_pfc_mode(pctrl, RZV2M_PIN_ID_TO_PORT(pins[i]),
+                                          RZV2M_PIN_ID_TO_PIN(pins[i]), psel_val[i]);
+       }
+
+       return 0;
+};
+
+static int rzv2m_map_add_config(struct pinctrl_map *map,
+                               const char *group_or_pin,
+                               enum pinctrl_map_type type,
+                               unsigned long *configs,
+                               unsigned int num_configs)
+{
+       unsigned long *cfgs;
+
+       cfgs = kmemdup(configs, num_configs * sizeof(*cfgs),
+                      GFP_KERNEL);
+       if (!cfgs)
+               return -ENOMEM;
+
+       map->type = type;
+       map->data.configs.group_or_pin = group_or_pin;
+       map->data.configs.configs = cfgs;
+       map->data.configs.num_configs = num_configs;
+
+       return 0;
+}
+
+static int rzv2m_dt_subnode_to_map(struct pinctrl_dev *pctldev,
+                                  struct device_node *np,
+                                  struct pinctrl_map **map,
+                                  unsigned int *num_maps,
+                                  unsigned int *index)
+{
+       struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
+       struct pinctrl_map *maps = *map;
+       unsigned int nmaps = *num_maps;
+       unsigned long *configs = NULL;
+       unsigned int *pins, *psel_val;
+       unsigned int num_pinmux = 0;
+       unsigned int idx = *index;
+       unsigned int num_pins, i;
+       unsigned int num_configs;
+       struct property *pinmux;
+       struct property *prop;
+       int ret, gsel, fsel;
+       const char **pin_fn;
+       const char *pin;
+
+       pinmux = of_find_property(np, "pinmux", NULL);
+       if (pinmux)
+               num_pinmux = pinmux->length / sizeof(u32);
+
+       ret = of_property_count_strings(np, "pins");
+       if (ret == -EINVAL) {
+               num_pins = 0;
+       } else if (ret < 0) {
+               dev_err(pctrl->dev, "Invalid pins list in DT\n");
+               return ret;
+       } else {
+               num_pins = ret;
+       }
+
+       if (!num_pinmux && !num_pins)
+               return 0;
+
+       if (num_pinmux && num_pins) {
+               dev_err(pctrl->dev,
+                       "DT node must contain either a pinmux or pins and not both\n");
+               return -EINVAL;
+       }
+
+       ret = pinconf_generic_parse_dt_config(np, NULL, &configs, &num_configs);
+       if (ret < 0)
+               return ret;
+
+       if (num_pins && !num_configs) {
+               dev_err(pctrl->dev, "DT node must contain a config\n");
+               ret = -ENODEV;
+               goto done;
+       }
+
+       if (num_pinmux)
+               nmaps += 1;
+
+       if (num_pins)
+               nmaps += num_pins;
+
+       maps = krealloc_array(maps, nmaps, sizeof(*maps), GFP_KERNEL);
+       if (!maps) {
+               ret = -ENOMEM;
+               goto done;
+       }
+
+       *map = maps;
+       *num_maps = nmaps;
+       if (num_pins) {
+               of_property_for_each_string(np, "pins", prop, pin) {
+                       ret = rzv2m_map_add_config(&maps[idx], pin,
+                                                  PIN_MAP_TYPE_CONFIGS_PIN,
+                                                  configs, num_configs);
+                       if (ret < 0)
+                               goto done;
+
+                       idx++;
+               }
+               ret = 0;
+               goto done;
+       }
+
+       pins = devm_kcalloc(pctrl->dev, num_pinmux, sizeof(*pins), GFP_KERNEL);
+       psel_val = devm_kcalloc(pctrl->dev, num_pinmux, sizeof(*psel_val),
+                               GFP_KERNEL);
+       pin_fn = devm_kzalloc(pctrl->dev, sizeof(*pin_fn), GFP_KERNEL);
+       if (!pins || !psel_val || !pin_fn) {
+               ret = -ENOMEM;
+               goto done;
+       }
+
+       /* Collect pin locations and mux settings from DT properties */
+       for (i = 0; i < num_pinmux; ++i) {
+               u32 value;
+
+               ret = of_property_read_u32_index(np, "pinmux", i, &value);
+               if (ret)
+                       goto done;
+               pins[i] = value & MUX_PIN_ID_MASK;
+               psel_val[i] = MUX_FUNC(value);
+       }
+
+       /* Register a single pin group listing all the pins we read from DT */
+       gsel = pinctrl_generic_add_group(pctldev, np->name, pins, num_pinmux, NULL);
+       if (gsel < 0) {
+               ret = gsel;
+               goto done;
+       }
+
+       /*
+        * Register a single group function where the 'data' is an array PSEL
+        * register values read from DT.
+        */
+       pin_fn[0] = np->name;
+       fsel = pinmux_generic_add_function(pctldev, np->name, pin_fn, 1,
+                                          psel_val);
+       if (fsel < 0) {
+               ret = fsel;
+               goto remove_group;
+       }
+
+       maps[idx].type = PIN_MAP_TYPE_MUX_GROUP;
+       maps[idx].data.mux.group = np->name;
+       maps[idx].data.mux.function = np->name;
+       idx++;
+
+       dev_dbg(pctrl->dev, "Parsed %pOF with %d pins\n", np, num_pinmux);
+       ret = 0;
+       goto done;
+
+remove_group:
+       pinctrl_generic_remove_group(pctldev, gsel);
+done:
+       *index = idx;
+       kfree(configs);
+       return ret;
+}
+
+static void rzv2m_dt_free_map(struct pinctrl_dev *pctldev,
+                             struct pinctrl_map *map,
+                             unsigned int num_maps)
+{
+       unsigned int i;
+
+       if (!map)
+               return;
+
+       for (i = 0; i < num_maps; ++i) {
+               if (map[i].type == PIN_MAP_TYPE_CONFIGS_GROUP ||
+                   map[i].type == PIN_MAP_TYPE_CONFIGS_PIN)
+                       kfree(map[i].data.configs.configs);
+       }
+       kfree(map);
+}
+
+static int rzv2m_dt_node_to_map(struct pinctrl_dev *pctldev,
+                               struct device_node *np,
+                               struct pinctrl_map **map,
+                               unsigned int *num_maps)
+{
+       struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
+       struct device_node *child;
+       unsigned int index;
+       int ret;
+
+       *map = NULL;
+       *num_maps = 0;
+       index = 0;
+
+       for_each_child_of_node(np, child) {
+               ret = rzv2m_dt_subnode_to_map(pctldev, child, map,
+                                             num_maps, &index);
+               if (ret < 0) {
+                       of_node_put(child);
+                       goto done;
+               }
+       }
+
+       if (*num_maps == 0) {
+               ret = rzv2m_dt_subnode_to_map(pctldev, np, map,
+                                             num_maps, &index);
+               if (ret < 0)
+                       goto done;
+       }
+
+       if (*num_maps)
+               return 0;
+
+       dev_err(pctrl->dev, "no mapping found in node %pOF\n", np);
+       ret = -EINVAL;
+
+done:
+       if (ret < 0)
+               rzv2m_dt_free_map(pctldev, *map, *num_maps);
+
+       return ret;
+}
+
+static int rzv2m_validate_gpio_pin(struct rzv2m_pinctrl *pctrl,
+                                  u32 cfg, u32 port, u8 bit)
+{
+       u8 pincount = RZV2M_GPIO_PORT_GET_PINCNT(cfg);
+       u32 port_index = RZV2M_GPIO_PORT_GET_INDEX(cfg);
+       u32 data;
+
+       if (bit >= pincount || port >= pctrl->data->n_port_pins)
+               return -EINVAL;
+
+       data = pctrl->data->port_pin_configs[port];
+       if (port_index != RZV2M_GPIO_PORT_GET_INDEX(data))
+               return -EINVAL;
+
+       return 0;
+}
+
+static void rzv2m_rmw_pin_config(struct rzv2m_pinctrl *pctrl, u32 offset,
+                                u8 shift, u32 mask, u32 val)
+{
+       void __iomem *addr = pctrl->base + offset;
+       unsigned long flags;
+       u32 reg;
+
+       spin_lock_irqsave(&pctrl->lock, flags);
+       reg = readl(addr) & ~(mask << shift);
+       writel(reg | (val << shift), addr);
+       spin_unlock_irqrestore(&pctrl->lock, flags);
+}
+
+static int rzv2m_pinctrl_pinconf_get(struct pinctrl_dev *pctldev,
+                                    unsigned int _pin,
+                                    unsigned long *config)
+{
+       struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
+       enum pin_config_param param = pinconf_to_config_param(*config);
+       const struct pinctrl_pin_desc *pin = &pctrl->desc.pins[_pin];
+       unsigned int *pin_data = pin->drv_data;
+       unsigned int arg = 0;
+       u32 port;
+       u32 cfg;
+       u8 bit;
+       u32 val;
+
+       if (!pin_data)
+               return -EINVAL;
+
+       if (*pin_data & RZV2M_SINGLE_PIN) {
+               port = RZV2M_SINGLE_PIN_GET_PORT(*pin_data);
+               cfg = RZV2M_SINGLE_PIN_GET_CFGS(*pin_data);
+               bit = RZV2M_SINGLE_PIN_GET_BIT(*pin_data);
+       } else {
+               cfg = RZV2M_GPIO_PORT_GET_CFGS(*pin_data);
+               port = RZV2M_PIN_ID_TO_PORT(_pin);
+               bit = RZV2M_PIN_ID_TO_PIN(_pin);
+
+               if (rzv2m_validate_gpio_pin(pctrl, *pin_data, RZV2M_PIN_ID_TO_PORT(_pin), bit))
+                       return -EINVAL;
+       }
+
+       switch (param) {
+       case PIN_CONFIG_BIAS_DISABLE:
+       case PIN_CONFIG_BIAS_PULL_UP:
+       case PIN_CONFIG_BIAS_PULL_DOWN: {
+               enum pin_config_param bias;
+
+               if (!(cfg & PIN_CFG_BIAS))
+                       return -EINVAL;
+
+               /* PUPD uses 2-bits per pin */
+               bit *= 2;
+
+               switch ((readl(pctrl->base + PUPD(port)) >> bit) & PUPD_MASK) {
+               case 0:
+                       bias = PIN_CONFIG_BIAS_PULL_DOWN;
+                       break;
+               case 2:
+                       bias = PIN_CONFIG_BIAS_PULL_UP;
+                       break;
+               default:
+                       bias = PIN_CONFIG_BIAS_DISABLE;
+               }
+
+               if (bias != param)
+                       return -EINVAL;
+               break;
+       }
+
+       case PIN_CONFIG_DRIVE_STRENGTH_UA:
+               if (!(cfg & PIN_CFG_DRV))
+                       return -EINVAL;
+
+               /* DRV uses 2-bits per pin */
+               bit *= 2;
+
+               val = (readl(pctrl->base + DRV(port)) >> bit) & DRV_MASK;
+
+               switch (cfg & PIN_CFG_GRP_MASK) {
+               case PIN_CFG_GRP_1_8V_2:
+                       arg = drv_1_8V_group2_uA[val];
+                       break;
+               case PIN_CFG_GRP_1_8V_3:
+                       arg = drv_1_8V_group3_uA[val];
+                       break;
+               case PIN_CFG_GRP_SWIO_2:
+                       arg = drv_SWIO_group2_3_3V_uA[val];
+                       break;
+               case PIN_CFG_GRP_SWIO_1:
+               case PIN_CFG_GRP_3_3V:
+                       arg = drv_3_3V_group_uA[val];
+                       break;
+               default:
+                       return -EINVAL;
+               }
+
+               break;
+
+       case PIN_CONFIG_SLEW_RATE:
+               if (!(cfg & PIN_CFG_SLEW))
+                       return -EINVAL;
+
+               arg = readl(pctrl->base + SR(port)) & BIT(bit);
+               break;
+
+       default:
+               return -ENOTSUPP;
+       }
+
+       *config = pinconf_to_config_packed(param, arg);
+
+       return 0;
+};
+
+static int rzv2m_pinctrl_pinconf_set(struct pinctrl_dev *pctldev,
+                                    unsigned int _pin,
+                                    unsigned long *_configs,
+                                    unsigned int num_configs)
+{
+       struct rzv2m_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
+       const struct pinctrl_pin_desc *pin = &pctrl->desc.pins[_pin];
+       unsigned int *pin_data = pin->drv_data;
+       enum pin_config_param param;
+       u32 port;
+       unsigned int i;
+       u32 cfg;
+       u8 bit;
+       u32 val;
+
+       if (!pin_data)
+               return -EINVAL;
+
+       if (*pin_data & RZV2M_SINGLE_PIN) {
+               port = RZV2M_SINGLE_PIN_GET_PORT(*pin_data);
+               cfg = RZV2M_SINGLE_PIN_GET_CFGS(*pin_data);
+               bit = RZV2M_SINGLE_PIN_GET_BIT(*pin_data);
+       } else {
+               cfg = RZV2M_GPIO_PORT_GET_CFGS(*pin_data);
+               port = RZV2M_PIN_ID_TO_PORT(_pin);
+               bit = RZV2M_PIN_ID_TO_PIN(_pin);
+
+               if (rzv2m_validate_gpio_pin(pctrl, *pin_data, RZV2M_PIN_ID_TO_PORT(_pin), bit))
+                       return -EINVAL;
+       }
+
+       for (i = 0; i < num_configs; i++) {
+               param = pinconf_to_config_param(_configs[i]);
+               switch (param) {
+               case PIN_CONFIG_BIAS_DISABLE:
+               case PIN_CONFIG_BIAS_PULL_UP:
+               case PIN_CONFIG_BIAS_PULL_DOWN:
+                       if (!(cfg & PIN_CFG_BIAS))
+                               return -EINVAL;
+
+                       /* PUPD uses 2-bits per pin */
+                       bit *= 2;
+
+                       switch (param) {
+                       case PIN_CONFIG_BIAS_PULL_DOWN:
+                               val = 0;
+                               break;
+                       case PIN_CONFIG_BIAS_PULL_UP:
+                               val = 2;
+                               break;
+                       default:
+                               val = 1;
+                       }
+
+                       rzv2m_rmw_pin_config(pctrl, PUPD(port), bit, PUPD_MASK, val);
+                       break;
+
+               case PIN_CONFIG_DRIVE_STRENGTH_UA: {
+                       unsigned int arg = pinconf_to_config_argument(_configs[i]);
+                       const unsigned int *drv_strengths;
+                       unsigned int index;
+
+                       if (!(cfg & PIN_CFG_DRV))
+                               return -EINVAL;
+
+                       switch (cfg & PIN_CFG_GRP_MASK) {
+                       case PIN_CFG_GRP_1_8V_2:
+                               drv_strengths = drv_1_8V_group2_uA;
+                               break;
+                       case PIN_CFG_GRP_1_8V_3:
+                               drv_strengths = drv_1_8V_group3_uA;
+                               break;
+                       case PIN_CFG_GRP_SWIO_2:
+                               drv_strengths = drv_SWIO_group2_3_3V_uA;
+                               break;
+                       case PIN_CFG_GRP_SWIO_1:
+                       case PIN_CFG_GRP_3_3V:
+                               drv_strengths = drv_3_3V_group_uA;
+                               break;
+                       default:
+                               return -EINVAL;
+                       }
+
+                       for (index = 0; index < 4; index++) {
+                               if (arg == drv_strengths[index])
+                                       break;
+                       }
+                       if (index >= 4)
+                               return -EINVAL;
+
+                       /* DRV uses 2-bits per pin */
+                       bit *= 2;
+
+                       rzv2m_rmw_pin_config(pctrl, DRV(port), bit, DRV_MASK, index);
+                       break;
+               }
+
+               case PIN_CONFIG_SLEW_RATE: {
+                       unsigned int arg = pinconf_to_config_argument(_configs[i]);
+
+                       if (!(cfg & PIN_CFG_SLEW))
+                               return -EINVAL;
+
+                       rzv2m_writel_we(pctrl->base + SR(port), bit, !arg);
+                       break;
+               }
+
+               default:
+                       return -EOPNOTSUPP;
+               }
+       }
+
+       return 0;
+}
+
+static int rzv2m_pinctrl_pinconf_group_set(struct pinctrl_dev *pctldev,
+                                          unsigned int group,
+                                          unsigned long *configs,
+                                          unsigned int num_configs)
+{
+       const unsigned int *pins;
+       unsigned int i, npins;
+       int ret;
+
+       ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
+       if (ret)
+               return ret;
+
+       for (i = 0; i < npins; i++) {
+               ret = rzv2m_pinctrl_pinconf_set(pctldev, pins[i], configs,
+                                               num_configs);
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+};
+
+static int rzv2m_pinctrl_pinconf_group_get(struct pinctrl_dev *pctldev,
+                                          unsigned int group,
+                                          unsigned long *config)
+{
+       const unsigned int *pins;
+       unsigned int i, npins, prev_config = 0;
+       int ret;
+
+       ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
+       if (ret)
+               return ret;
+
+       for (i = 0; i < npins; i++) {
+               ret = rzv2m_pinctrl_pinconf_get(pctldev, pins[i], config);
+               if (ret)
+                       return ret;
+
+               /* Check config matches previous pins */
+               if (i && prev_config != *config)
+                       return -EOPNOTSUPP;
+
+               prev_config = *config;
+       }
+
+       return 0;
+};
+
+static const struct pinctrl_ops rzv2m_pinctrl_pctlops = {
+       .get_groups_count = pinctrl_generic_get_group_count,
+       .get_group_name = pinctrl_generic_get_group_name,
+       .get_group_pins = pinctrl_generic_get_group_pins,
+       .dt_node_to_map = rzv2m_dt_node_to_map,
+       .dt_free_map = rzv2m_dt_free_map,
+};
+
+static const struct pinmux_ops rzv2m_pinctrl_pmxops = {
+       .get_functions_count = pinmux_generic_get_function_count,
+       .get_function_name = pinmux_generic_get_function_name,
+       .get_function_groups = pinmux_generic_get_function_groups,
+       .set_mux = rzv2m_pinctrl_set_mux,
+       .strict = true,
+};
+
+static const struct pinconf_ops rzv2m_pinctrl_confops = {
+       .is_generic = true,
+       .pin_config_get = rzv2m_pinctrl_pinconf_get,
+       .pin_config_set = rzv2m_pinctrl_pinconf_set,
+       .pin_config_group_set = rzv2m_pinctrl_pinconf_group_set,
+       .pin_config_group_get = rzv2m_pinctrl_pinconf_group_get,
+       .pin_config_config_dbg_show = pinconf_generic_dump_config,
+};
+
+static int rzv2m_gpio_request(struct gpio_chip *chip, unsigned int offset)
+{
+       struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
+       u32 port = RZV2M_PIN_ID_TO_PORT(offset);
+       u8 bit = RZV2M_PIN_ID_TO_PIN(offset);
+       int ret;
+
+       ret = pinctrl_gpio_request(chip->base + offset);
+       if (ret)
+               return ret;
+
+       rzv2m_pinctrl_set_pfc_mode(pctrl, port, bit, 0);
+
+       return 0;
+}
+
+static void rzv2m_gpio_set_direction(struct rzv2m_pinctrl *pctrl, u32 port,
+                                    u8 bit, bool output)
+{
+       rzv2m_writel_we(pctrl->base + OE(port), bit, output);
+       rzv2m_writel_we(pctrl->base + IE(port), bit, !output);
+}
+
+static int rzv2m_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
+{
+       struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
+       u32 port = RZV2M_PIN_ID_TO_PORT(offset);
+       u8 bit = RZV2M_PIN_ID_TO_PIN(offset);
+
+       if (!(readl(pctrl->base + IE(port)) & BIT(bit)))
+               return GPIO_LINE_DIRECTION_OUT;
+
+       return GPIO_LINE_DIRECTION_IN;
+}
+
+static int rzv2m_gpio_direction_input(struct gpio_chip *chip,
+                                     unsigned int offset)
+{
+       struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
+       u32 port = RZV2M_PIN_ID_TO_PORT(offset);
+       u8 bit = RZV2M_PIN_ID_TO_PIN(offset);
+
+       rzv2m_gpio_set_direction(pctrl, port, bit, false);
+
+       return 0;
+}
+
+static void rzv2m_gpio_set(struct gpio_chip *chip, unsigned int offset,
+                          int value)
+{
+       struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
+       u32 port = RZV2M_PIN_ID_TO_PORT(offset);
+       u8 bit = RZV2M_PIN_ID_TO_PIN(offset);
+
+       rzv2m_writel_we(pctrl->base + DO(port), bit, !!value);
+}
+
+static int rzv2m_gpio_direction_output(struct gpio_chip *chip,
+                                      unsigned int offset, int value)
+{
+       struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
+       u32 port = RZV2M_PIN_ID_TO_PORT(offset);
+       u8 bit = RZV2M_PIN_ID_TO_PIN(offset);
+
+       rzv2m_gpio_set(chip, offset, value);
+       rzv2m_gpio_set_direction(pctrl, port, bit, true);
+
+       return 0;
+}
+
+static int rzv2m_gpio_get(struct gpio_chip *chip, unsigned int offset)
+{
+       struct rzv2m_pinctrl *pctrl = gpiochip_get_data(chip);
+       u32 port = RZV2M_PIN_ID_TO_PORT(offset);
+       u8 bit = RZV2M_PIN_ID_TO_PIN(offset);
+       int direction = rzv2m_gpio_get_direction(chip, offset);
+
+       if (direction == GPIO_LINE_DIRECTION_IN)
+               return !!(readl(pctrl->base + DI(port)) & BIT(bit));
+       else
+               return !!(readl(pctrl->base + DO(port)) & BIT(bit));
+}
+
+static void rzv2m_gpio_free(struct gpio_chip *chip, unsigned int offset)
+{
+       pinctrl_gpio_free(chip->base + offset);
+
+       /*
+        * Set the GPIO as an input to ensure that the next GPIO request won't
+        * drive the GPIO pin as an output.
+        */
+       rzv2m_gpio_direction_input(chip, offset);
+}
+
+static const char * const rzv2m_gpio_names[] = {
+       "P0_0", "P0_1", "P0_2", "P0_3", "P0_4", "P0_5", "P0_6", "P0_7",
+       "P0_8", "P0_9", "P0_10", "P0_11", "P0_12", "P0_13", "P0_14", "P0_15",
+       "P1_0", "P1_1", "P1_2", "P1_3", "P1_4", "P1_5", "P1_6", "P1_7",
+       "P1_8", "P1_9", "P1_10", "P1_11", "P1_12", "P1_13", "P1_14", "P1_15",
+       "P2_0", "P2_1", "P2_2", "P2_3", "P2_4", "P2_5", "P2_6", "P2_7",
+       "P2_8", "P2_9", "P2_10", "P2_11", "P2_12", "P2_13", "P2_14", "P2_15",
+       "P3_0", "P3_1", "P3_2", "P3_3", "P3_4", "P3_5", "P3_6", "P3_7",
+       "P3_8", "P3_9", "P3_10", "P3_11", "P3_12", "P3_13", "P3_14", "P3_15",
+       "P4_0", "P4_1", "P4_2", "P4_3", "P4_4", "P4_5", "P4_6", "P4_7",
+       "P4_8", "P4_9", "P4_10", "P4_11", "P4_12", "P4_13", "P4_14", "P4_15",
+       "P5_0", "P5_1", "P5_2", "P5_3", "P5_4", "P5_5", "P5_6", "P5_7",
+       "P5_8", "P5_9", "P5_10", "P5_11", "P5_12", "P5_13", "P5_14", "P5_15",
+       "P6_0", "P6_1", "P6_2", "P6_3", "P6_4", "P6_5", "P6_6", "P6_7",
+       "P6_8", "P6_9", "P6_10", "P6_11", "P6_12", "P6_13", "P6_14", "P6_15",
+       "P7_0", "P7_1", "P7_2", "P7_3", "P7_4", "P7_5", "P7_6", "P7_7",
+       "P7_8", "P7_9", "P7_10", "P7_11", "P7_12", "P7_13", "P7_14", "P7_15",
+       "P8_0", "P8_1", "P8_2", "P8_3", "P8_4", "P8_5", "P8_6", "P8_7",
+       "P8_8", "P8_9", "P8_10", "P8_11", "P8_12", "P8_13", "P8_14", "P8_15",
+       "P9_0", "P9_1", "P9_2", "P9_3", "P9_4", "P9_5", "P9_6", "P9_7",
+       "P9_8", "P9_9", "P9_10", "P9_11", "P9_12", "P9_13", "P9_14", "P9_15",
+       "P10_0", "P10_1", "P10_2", "P10_3", "P10_4", "P10_5", "P10_6", "P10_7",
+       "P10_8", "P10_9", "P10_10", "P10_11", "P10_12", "P10_13", "P10_14", "P10_15",
+       "P11_0", "P11_1", "P11_2", "P11_3", "P11_4", "P11_5", "P11_6", "P11_7",
+       "P11_8", "P11_9", "P11_10", "P11_11", "P11_12", "P11_13", "P11_14", "P11_15",
+       "P12_0", "P12_1", "P12_2", "P12_3", "P12_4", "P12_5", "P12_6", "P12_7",
+       "P12_8", "P12_9", "P12_10", "P12_11", "P12_12", "P12_13", "P12_14", "P12_15",
+       "P13_0", "P13_1", "P13_2", "P13_3", "P13_4", "P13_5", "P13_6", "P13_7",
+       "P13_8", "P13_9", "P13_10", "P13_11", "P13_12", "P13_13", "P13_14", "P13_15",
+       "P14_0", "P14_1", "P14_2", "P14_3", "P14_4", "P14_5", "P14_6", "P14_7",
+       "P14_8", "P14_9", "P14_10", "P14_11", "P14_12", "P14_13", "P14_14", "P14_15",
+       "P15_0", "P15_1", "P15_2", "P15_3", "P15_4", "P15_5", "P15_6", "P15_7",
+       "P15_8", "P15_9", "P15_10", "P15_11", "P15_12", "P15_13", "P15_14", "P15_15",
+       "P16_0", "P16_1", "P16_2", "P16_3", "P16_4", "P16_5", "P16_6", "P16_7",
+       "P16_8", "P16_9", "P16_10", "P16_11", "P16_12", "P16_13", "P16_14", "P16_15",
+       "P17_0", "P17_1", "P17_2", "P17_3", "P17_4", "P17_5", "P17_6", "P17_7",
+       "P17_8", "P17_9", "P17_10", "P17_11", "P17_12", "P17_13", "P17_14", "P17_15",
+       "P18_0", "P18_1", "P18_2", "P18_3", "P18_4", "P18_5", "P18_6", "P18_7",
+       "P18_8", "P18_9", "P18_10", "P18_11", "P18_12", "P18_13", "P18_14", "P18_15",
+       "P19_0", "P19_1", "P19_2", "P19_3", "P19_4", "P19_5", "P19_6", "P19_7",
+       "P19_8", "P19_9", "P19_10", "P19_11", "P19_12", "P19_13", "P19_14", "P19_15",
+       "P20_0", "P20_1", "P20_2", "P20_3", "P20_4", "P20_5", "P20_6", "P20_7",
+       "P20_8", "P20_9", "P20_10", "P20_11", "P20_12", "P20_13", "P20_14", "P20_15",
+       "P21_0", "P21_1", "P21_2", "P21_3", "P21_4", "P21_5", "P21_6", "P21_7",
+       "P21_8", "P21_9", "P21_10", "P21_11", "P21_12", "P21_13", "P21_14", "P21_15",
+};
+
+static const u32 rzv2m_gpio_configs[] = {
+       RZV2M_GPIO_PORT_PACK(14, 0, PIN_CFG_GRP_SWIO_2 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(16, 1, PIN_CFG_GRP_SWIO_1 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(8,  2, PIN_CFG_GRP_1_8V_3 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(16, 3, PIN_CFG_GRP_SWIO_1 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(8,  4, PIN_CFG_GRP_SWIO_1 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(4,  5, PIN_CFG_GRP_1_8V_3 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(12, 6, PIN_CFG_GRP_SWIO_1 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(6,  7, PIN_CFG_GRP_SWIO_1 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(8,  8, PIN_CFG_GRP_SWIO_2 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(8,  9, PIN_CFG_GRP_SWIO_2 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(9,  10, PIN_CFG_GRP_SWIO_1 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(9,  11, PIN_CFG_GRP_SWIO_1 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(4,  12, PIN_CFG_GRP_3_3V | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(12, 13, PIN_CFG_GRP_3_3V | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(8,  14, PIN_CFG_GRP_3_3V | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(16, 15, PIN_CFG_GRP_SWIO_2 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(14, 16, PIN_CFG_GRP_SWIO_2 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(1,  17, PIN_CFG_GRP_SWIO_2 | RZV2M_MPXED_PIN_FUNCS),
+       RZV2M_GPIO_PORT_PACK(0,  18, 0),
+       RZV2M_GPIO_PORT_PACK(0,  19, 0),
+       RZV2M_GPIO_PORT_PACK(3,  20, PIN_CFG_GRP_1_8V_2 | PIN_CFG_DRV),
+       RZV2M_GPIO_PORT_PACK(1,  21, PIN_CFG_GRP_SWIO_1 | PIN_CFG_DRV | PIN_CFG_SLEW),
+};
+
+static const struct rzv2m_dedicated_configs rzv2m_dedicated_pins[] = {
+       { "NAWPN", RZV2M_SINGLE_PIN_PACK(0,
+               (PIN_CFG_GRP_SWIO_2 | PIN_CFG_DRV | PIN_CFG_SLEW)) },
+       { "IM0CLK", RZV2M_SINGLE_PIN_PACK(1,
+               (PIN_CFG_GRP_SWIO_1 | PIN_CFG_DRV | PIN_CFG_SLEW)) },
+       { "IM1CLK", RZV2M_SINGLE_PIN_PACK(2,
+               (PIN_CFG_GRP_SWIO_1 | PIN_CFG_DRV | PIN_CFG_SLEW)) },
+       { "DETDO", RZV2M_SINGLE_PIN_PACK(5,
+               (PIN_CFG_GRP_1_8V_3 | PIN_CFG_DRV | PIN_CFG_SLEW)) },
+       { "DETMS", RZV2M_SINGLE_PIN_PACK(6,
+               (PIN_CFG_GRP_1_8V_3 | PIN_CFG_DRV | PIN_CFG_SLEW)) },
+       { "PCRSTOUTB", RZV2M_SINGLE_PIN_PACK(12,
+               (PIN_CFG_GRP_3_3V | PIN_CFG_DRV | PIN_CFG_SLEW)) },
+       { "USPWEN", RZV2M_SINGLE_PIN_PACK(14,
+               (PIN_CFG_GRP_3_3V | PIN_CFG_DRV | PIN_CFG_SLEW)) },
+};
+
+static int rzv2m_gpio_register(struct rzv2m_pinctrl *pctrl)
+{
+       struct device_node *np = pctrl->dev->of_node;
+       struct gpio_chip *chip = &pctrl->gpio_chip;
+       const char *name = dev_name(pctrl->dev);
+       struct of_phandle_args of_args;
+       int ret;
+
+       ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, 0, &of_args);
+       if (ret) {
+               dev_err(pctrl->dev, "Unable to parse gpio-ranges\n");
+               return ret;
+       }
+
+       if (of_args.args[0] != 0 || of_args.args[1] != 0 ||
+           of_args.args[2] != pctrl->data->n_port_pins) {
+               dev_err(pctrl->dev, "gpio-ranges does not match selected SOC\n");
+               return -EINVAL;
+       }
+
+       chip->names = pctrl->data->port_pins;
+       chip->request = rzv2m_gpio_request;
+       chip->free = rzv2m_gpio_free;
+       chip->get_direction = rzv2m_gpio_get_direction;
+       chip->direction_input = rzv2m_gpio_direction_input;
+       chip->direction_output = rzv2m_gpio_direction_output;
+       chip->get = rzv2m_gpio_get;
+       chip->set = rzv2m_gpio_set;
+       chip->label = name;
+       chip->parent = pctrl->dev;
+       chip->owner = THIS_MODULE;
+       chip->base = -1;
+       chip->ngpio = of_args.args[2];
+
+       pctrl->gpio_range.id = 0;
+       pctrl->gpio_range.pin_base = 0;
+       pctrl->gpio_range.base = 0;
+       pctrl->gpio_range.npins = chip->ngpio;
+       pctrl->gpio_range.name = chip->label;
+       pctrl->gpio_range.gc = chip;
+       ret = devm_gpiochip_add_data(pctrl->dev, chip, pctrl);
+       if (ret) {
+               dev_err(pctrl->dev, "failed to add GPIO controller\n");
+               return ret;
+       }
+
+       dev_dbg(pctrl->dev, "Registered gpio controller\n");
+
+       return 0;
+}
+
+static int rzv2m_pinctrl_register(struct rzv2m_pinctrl *pctrl)
+{
+       struct pinctrl_pin_desc *pins;
+       unsigned int i, j;
+       u32 *pin_data;
+       int ret;
+
+       pctrl->desc.name = DRV_NAME;
+       pctrl->desc.npins = pctrl->data->n_port_pins + pctrl->data->n_dedicated_pins;
+       pctrl->desc.pctlops = &rzv2m_pinctrl_pctlops;
+       pctrl->desc.pmxops = &rzv2m_pinctrl_pmxops;
+       pctrl->desc.confops = &rzv2m_pinctrl_confops;
+       pctrl->desc.owner = THIS_MODULE;
+
+       pins = devm_kcalloc(pctrl->dev, pctrl->desc.npins, sizeof(*pins), GFP_KERNEL);
+       if (!pins)
+               return -ENOMEM;
+
+       pin_data = devm_kcalloc(pctrl->dev, pctrl->desc.npins,
+                               sizeof(*pin_data), GFP_KERNEL);
+       if (!pin_data)
+               return -ENOMEM;
+
+       pctrl->pins = pins;
+       pctrl->desc.pins = pins;
+
+       for (i = 0, j = 0; i < pctrl->data->n_port_pins; i++) {
+               pins[i].number = i;
+               pins[i].name = pctrl->data->port_pins[i];
+               if (i && !(i % RZV2M_PINS_PER_PORT))
+                       j++;
+               pin_data[i] = pctrl->data->port_pin_configs[j];
+               pins[i].drv_data = &pin_data[i];
+       }
+
+       for (i = 0; i < pctrl->data->n_dedicated_pins; i++) {
+               unsigned int index = pctrl->data->n_port_pins + i;
+
+               pins[index].number = index;
+               pins[index].name = pctrl->data->dedicated_pins[i].name;
+               pin_data[index] = pctrl->data->dedicated_pins[i].config;
+               pins[index].drv_data = &pin_data[index];
+       }
+
+       ret = devm_pinctrl_register_and_init(pctrl->dev, &pctrl->desc, pctrl,
+                                            &pctrl->pctl);
+       if (ret) {
+               dev_err(pctrl->dev, "pinctrl registration failed\n");
+               return ret;
+       }
+
+       ret = pinctrl_enable(pctrl->pctl);
+       if (ret) {
+               dev_err(pctrl->dev, "pinctrl enable failed\n");
+               return ret;
+       }
+
+       ret = rzv2m_gpio_register(pctrl);
+       if (ret) {
+               dev_err(pctrl->dev, "failed to add GPIO chip: %i\n", ret);
+               return ret;
+       }
+
+       return 0;
+}
+
+static void rzv2m_pinctrl_clk_disable(void *data)
+{
+       clk_disable_unprepare(data);
+}
+
+static int rzv2m_pinctrl_probe(struct platform_device *pdev)
+{
+       struct rzv2m_pinctrl *pctrl;
+       int ret;
+
+       pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL);
+       if (!pctrl)
+               return -ENOMEM;
+
+       pctrl->dev = &pdev->dev;
+
+       pctrl->data = of_device_get_match_data(&pdev->dev);
+       if (!pctrl->data)
+               return -EINVAL;
+
+       pctrl->base = devm_platform_ioremap_resource(pdev, 0);
+       if (IS_ERR(pctrl->base))
+               return PTR_ERR(pctrl->base);
+
+       pctrl->clk = devm_clk_get(pctrl->dev, NULL);
+       if (IS_ERR(pctrl->clk)) {
+               ret = PTR_ERR(pctrl->clk);
+               dev_err(pctrl->dev, "failed to get GPIO clk : %i\n", ret);
+               return ret;
+       }
+
+       spin_lock_init(&pctrl->lock);
+
+       platform_set_drvdata(pdev, pctrl);
+
+       ret = clk_prepare_enable(pctrl->clk);
+       if (ret) {
+               dev_err(pctrl->dev, "failed to enable GPIO clk: %i\n", ret);
+               return ret;
+       }
+
+       ret = devm_add_action_or_reset(&pdev->dev, rzv2m_pinctrl_clk_disable,
+                                      pctrl->clk);
+       if (ret) {
+               dev_err(pctrl->dev,
+                       "failed to register GPIO clk disable action, %i\n",
+                       ret);
+               return ret;
+       }
+
+       ret = rzv2m_pinctrl_register(pctrl);
+       if (ret)
+               return ret;
+
+       dev_info(pctrl->dev, "%s support registered\n", DRV_NAME);
+       return 0;
+}
+
+static struct rzv2m_pinctrl_data r9a09g011_data = {
+       .port_pins = rzv2m_gpio_names,
+       .port_pin_configs = rzv2m_gpio_configs,
+       .dedicated_pins = rzv2m_dedicated_pins,
+       .n_port_pins = ARRAY_SIZE(rzv2m_gpio_configs) * RZV2M_PINS_PER_PORT,
+       .n_dedicated_pins = ARRAY_SIZE(rzv2m_dedicated_pins),
+};
+
+static const struct of_device_id rzv2m_pinctrl_of_table[] = {
+       {
+               .compatible = "renesas,r9a09g011-pinctrl",
+               .data = &r9a09g011_data,
+       },
+       { /* sentinel */ }
+};
+
+static struct platform_driver rzv2m_pinctrl_driver = {
+       .driver = {
+               .name = DRV_NAME,
+               .of_match_table = of_match_ptr(rzv2m_pinctrl_of_table),
+       },
+       .probe = rzv2m_pinctrl_probe,
+};
+
+static int __init rzv2m_pinctrl_init(void)
+{
+       return platform_driver_register(&rzv2m_pinctrl_driver);
+}
+core_initcall(rzv2m_pinctrl_init);
+
+MODULE_AUTHOR("Phil Edworthy <phil.edworthy@renesas.com>");
+MODULE_DESCRIPTION("Pin and gpio controller driver for RZ/V2M");
+MODULE_LICENSE("GPL");
index 12bc279f573311d558ce639e8887acc99206d2a1..0fcb29ab0c845812c9de53eb3b2645203aa2f3db 100644 (file)
@@ -325,6 +325,7 @@ extern const struct sh_pfc_soc_info r8a77990_pinmux_info;
 extern const struct sh_pfc_soc_info r8a77995_pinmux_info;
 extern const struct sh_pfc_soc_info r8a779a0_pinmux_info;
 extern const struct sh_pfc_soc_info r8a779f0_pinmux_info;
+extern const struct sh_pfc_soc_info r8a779g0_pinmux_info;
 extern const struct sh_pfc_soc_info sh7203_pinmux_info;
 extern const struct sh_pfc_soc_info sh7264_pinmux_info;
 extern const struct sh_pfc_soc_info sh7269_pinmux_info;
@@ -492,9 +493,13 @@ extern const struct sh_pfc_soc_info shx3_pinmux_info;
        PORT_GP_CFG_1(bank, 11, fn, sfx, cfg)
 #define PORT_GP_12(bank, fn, sfx)      PORT_GP_CFG_12(bank, fn, sfx, 0)
 
-#define PORT_GP_CFG_14(bank, fn, sfx, cfg)                             \
+#define PORT_GP_CFG_13(bank, fn, sfx, cfg)                             \
        PORT_GP_CFG_12(bank, fn, sfx, cfg),                             \
-       PORT_GP_CFG_1(bank, 12, fn, sfx, cfg),                          \
+       PORT_GP_CFG_1(bank, 12, fn, sfx, cfg)
+#define PORT_GP_13(bank, fn, sfx)      PORT_GP_CFG_13(bank, fn, sfx, 0)
+
+#define PORT_GP_CFG_14(bank, fn, sfx, cfg)                             \
+       PORT_GP_CFG_13(bank, fn, sfx, cfg),                             \
        PORT_GP_CFG_1(bank, 13, fn, sfx, cfg)
 #define PORT_GP_14(bank, fn, sfx)      PORT_GP_CFG_14(bank, fn, sfx, 0)
 
index 6d7ca1758292ba2211b05cfca5d0414cc35d2477..a8212fc126bf28613c7a6d665c3e5080c70e259e 100644 (file)
@@ -27,8 +27,6 @@
 #include <linux/soc/samsung/exynos-pmu.h>
 #include <linux/soc/samsung/exynos-regs-pmu.h>
 
-#include <dt-bindings/pinctrl/samsung.h>
-
 #include "pinctrl-samsung.h"
 #include "pinctrl-exynos.h"
 
@@ -173,7 +171,7 @@ static int exynos_irq_request_resources(struct irq_data *irqd)
 
        con = readl(bank->pctl_base + reg_con);
        con &= ~(mask << shift);
-       con |= EXYNOS_PIN_FUNC_EINT << shift;
+       con |= EXYNOS_PIN_CON_FUNC_EINT << shift;
        writel(con, bank->pctl_base + reg_con);
 
        raw_spin_unlock_irqrestore(&bank->slock, flags);
@@ -196,7 +194,7 @@ static void exynos_irq_release_resources(struct irq_data *irqd)
 
        con = readl(bank->pctl_base + reg_con);
        con &= ~(mask << shift);
-       con |= EXYNOS_PIN_FUNC_INPUT << shift;
+       con |= PIN_CON_FUNC_INPUT << shift;
        writel(con, bank->pctl_base + reg_con);
 
        raw_spin_unlock_irqrestore(&bank->slock, flags);
index bfad1ced80176f1d5b04e99a6364da614d1e75ee..7bd6d82c9f369a4e596717f780bef0a279d3f360 100644 (file)
@@ -16,6 +16,9 @@
 #ifndef __PINCTRL_SAMSUNG_EXYNOS_H
 #define __PINCTRL_SAMSUNG_EXYNOS_H
 
+/* Values for the pin CON register */
+#define EXYNOS_PIN_CON_FUNC_EINT       0xf
+
 /* External GPIO and wakeup interrupt related definitions */
 #define EXYNOS_GPIO_ECON_OFFSET                0x700
 #define EXYNOS_GPIO_EFLTCON_OFFSET     0x800
index 26d309d2516d1335eaa4c5e21e33b7519389b4be..4837bceb767b458edf3db99d5066afee22b8134f 100644 (file)
@@ -26,8 +26,6 @@
 #include <linux/of_device.h>
 #include <linux/spinlock.h>
 
-#include <dt-bindings/pinctrl/samsung.h>
-
 #include "../core.h"
 #include "pinctrl-samsung.h"
 
@@ -614,7 +612,7 @@ static int samsung_gpio_set_direction(struct gpio_chip *gc,
        data = readl(reg);
        data &= ~(mask << shift);
        if (!input)
-               data |= EXYNOS_PIN_FUNC_OUTPUT << shift;
+               data |= PIN_CON_FUNC_OUTPUT << shift;
        writel(data, reg);
 
        return 0;
index fc6f5199c548c31d188b331b935689592d8240cf..9af93e3d8d9ff32246af084e494dd5d8f3384e02 100644 (file)
@@ -53,6 +53,14 @@ enum pincfg_type {
 #define PINCFG_UNPACK_TYPE(cfg)                ((cfg) & PINCFG_TYPE_MASK)
 #define PINCFG_UNPACK_VALUE(cfg)       (((cfg) & PINCFG_VALUE_MASK) >> \
                                                PINCFG_VALUE_SHIFT)
+/*
+ * Values for the pin CON register, choosing pin function.
+ * The basic set (input and output) are same between: S3C24xx, S3C64xx, S5PV210,
+ * Exynos ARMv7, Exynos ARMv8, Tesla FSD.
+ */
+#define PIN_CON_FUNC_INPUT             0x0
+#define PIN_CON_FUNC_OUTPUT            0x1
+
 /**
  * enum eint_type - possible external interrupt types.
  * @EINT_TYPE_NONE: bank does not support external interrupts
index 33751a6a075728f24c4c618008fa49bbfae62965..a78fdbbdfc0c7f794de38f3a317b8396b1e87ee2 100644 (file)
@@ -29,7 +29,6 @@ config PINCTRL_SUN6I_A31
 config PINCTRL_SUN6I_A31_R
        bool "Support for the Allwinner A31 R-PIO"
        default MACH_SUN6I
-       depends on RESET_CONTROLLER
        select PINCTRL_SUNXI
 
 config PINCTRL_SUN8I_A23
@@ -55,7 +54,6 @@ config PINCTRL_SUN8I_A83T_R
 config PINCTRL_SUN8I_A23_R
        bool "Support for the Allwinner A23 and A33 R-PIO"
        default MACH_SUN8I
-       depends on RESET_CONTROLLER
        select PINCTRL_SUNXI
 
 config PINCTRL_SUN8I_H3
@@ -81,7 +79,11 @@ config PINCTRL_SUN9I_A80
 config PINCTRL_SUN9I_A80_R
        bool "Support for the Allwinner A80 R-PIO"
        default MACH_SUN9I
-       depends on RESET_CONTROLLER
+       select PINCTRL_SUNXI
+
+config PINCTRL_SUN20I_D1
+       bool "Support for the Allwinner D1 PIO"
+       default MACH_SUN8I || (RISCV && ARCH_SUNXI)
        select PINCTRL_SUNXI
 
 config PINCTRL_SUN50I_A64
index d3440c42b9d62643a523d6cdfea2c4f7a6eebdec..2ff5a55927ad6274cb971726aef0764f27b0e3f4 100644 (file)
@@ -20,6 +20,7 @@ obj-$(CONFIG_PINCTRL_SUN8I_A83T_R)    += pinctrl-sun8i-a83t-r.o
 obj-$(CONFIG_PINCTRL_SUN8I_H3)         += pinctrl-sun8i-h3.o
 obj-$(CONFIG_PINCTRL_SUN8I_H3_R)       += pinctrl-sun8i-h3-r.o
 obj-$(CONFIG_PINCTRL_SUN8I_V3S)                += pinctrl-sun8i-v3s.o
+obj-$(CONFIG_PINCTRL_SUN20I_D1)                += pinctrl-sun20i-d1.o
 obj-$(CONFIG_PINCTRL_SUN50I_H5)                += pinctrl-sun50i-h5.o
 obj-$(CONFIG_PINCTRL_SUN50I_H6)                += pinctrl-sun50i-h6.o
 obj-$(CONFIG_PINCTRL_SUN50I_H6_R)      += pinctrl-sun50i-h6-r.o
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun20i-d1.c b/drivers/pinctrl/sunxi/pinctrl-sun20i-d1.c
new file mode 100644 (file)
index 0000000..40858b8
--- /dev/null
@@ -0,0 +1,840 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Allwinner D1 SoC pinctrl driver.
+ *
+ * Copyright (c) 2020 wuyan@allwinnertech.com
+ * Copyright (c) 2021-2022 Samuel Holland <samuel@sholland.org>
+ */
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/pinctrl.h>
+
+#include "pinctrl-sunxi.h"
+
+static const struct sunxi_desc_pin d1_pins[] = {
+       /* PB */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "pwm3"),
+               SUNXI_FUNCTION(0x3, "ir"),              /* TX */
+               SUNXI_FUNCTION(0x4, "i2c2"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "spi1"),            /* WP */
+               SUNXI_FUNCTION(0x6, "uart0"),           /* TX */
+               SUNXI_FUNCTION(0x7, "uart2"),           /* TX */
+               SUNXI_FUNCTION(0x8, "spdif"),           /* OUT */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 0)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "pwm4"),
+               SUNXI_FUNCTION(0x3, "i2s2_dout"),       /* DOUT3 */
+               SUNXI_FUNCTION(0x4, "i2c2"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "i2s2_din"),        /* DIN3 */
+               SUNXI_FUNCTION(0x6, "uart0"),           /* RX */
+               SUNXI_FUNCTION(0x7, "uart2"),           /* RX */
+               SUNXI_FUNCTION(0x8, "ir"),              /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 1)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D0 */
+               SUNXI_FUNCTION(0x3, "i2s2_dout"),       /* DOUT2 */
+               SUNXI_FUNCTION(0x4, "i2c0"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "i2s2_din"),        /* DIN2 */
+               SUNXI_FUNCTION(0x6, "lcd0"),            /* D18 */
+               SUNXI_FUNCTION(0x7, "uart4"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 2)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D1 */
+               SUNXI_FUNCTION(0x3, "i2s2_dout"),       /* DOUT1 */
+               SUNXI_FUNCTION(0x4, "i2c0"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "i2s2_din"),        /* DIN0 */
+               SUNXI_FUNCTION(0x6, "lcd0"),            /* D19 */
+               SUNXI_FUNCTION(0x7, "uart4"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 3)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D8 */
+               SUNXI_FUNCTION(0x3, "i2s2_dout"),       /* DOUT0 */
+               SUNXI_FUNCTION(0x4, "i2c1"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "i2s2_din"),        /* DIN1 */
+               SUNXI_FUNCTION(0x6, "lcd0"),            /* D20 */
+               SUNXI_FUNCTION(0x7, "uart5"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 4)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D9 */
+               SUNXI_FUNCTION(0x3, "i2s2"),            /* BCLK */
+               SUNXI_FUNCTION(0x4, "i2c1"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "pwm0"),
+               SUNXI_FUNCTION(0x6, "lcd0"),            /* D21 */
+               SUNXI_FUNCTION(0x7, "uart5"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 5)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D16 */
+               SUNXI_FUNCTION(0x3, "i2s2"),            /* LRCK */
+               SUNXI_FUNCTION(0x4, "i2c3"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "pwm1"),
+               SUNXI_FUNCTION(0x6, "lcd0"),            /* D22 */
+               SUNXI_FUNCTION(0x7, "uart3"),           /* TX */
+               SUNXI_FUNCTION(0x8, "bist0"),           /* BIST_RESULT0 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 6)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D17 */
+               SUNXI_FUNCTION(0x3, "i2s2"),            /* MCLK */
+               SUNXI_FUNCTION(0x4, "i2c3"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "ir"),              /* RX */
+               SUNXI_FUNCTION(0x6, "lcd0"),            /* D23 */
+               SUNXI_FUNCTION(0x7, "uart3"),           /* RX */
+               SUNXI_FUNCTION(0x8, "bist1"),           /* BIST_RESULT1 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 7)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "dmic"),            /* DATA3 */
+               SUNXI_FUNCTION(0x3, "pwm5"),
+               SUNXI_FUNCTION(0x4, "i2c2"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "spi1"),            /* HOLD */
+               SUNXI_FUNCTION(0x6, "uart0"),           /* TX */
+               SUNXI_FUNCTION(0x7, "uart1"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 8)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "dmic"),            /* DATA2 */
+               SUNXI_FUNCTION(0x3, "pwm6"),
+               SUNXI_FUNCTION(0x4, "i2c2"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "spi1"),            /* MISO */
+               SUNXI_FUNCTION(0x6, "uart0"),           /* RX */
+               SUNXI_FUNCTION(0x7, "uart1"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 9)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 10),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "dmic"),            /* DATA1 */
+               SUNXI_FUNCTION(0x3, "pwm7"),
+               SUNXI_FUNCTION(0x4, "i2c0"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "spi1"),            /* MOSI */
+               SUNXI_FUNCTION(0x6, "clk"),             /* FANOUT0 */
+               SUNXI_FUNCTION(0x7, "uart1"),           /* RTS */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 10)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 11),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "dmic"),            /* DATA0 */
+               SUNXI_FUNCTION(0x3, "pwm2"),
+               SUNXI_FUNCTION(0x4, "i2c0"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "spi1"),            /* CLK */
+               SUNXI_FUNCTION(0x6, "clk"),             /* FANOUT1 */
+               SUNXI_FUNCTION(0x7, "uart1"),           /* CTS */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 11)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 12),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "dmic"),            /* CLK */
+               SUNXI_FUNCTION(0x3, "pwm0"),
+               SUNXI_FUNCTION(0x4, "spdif"),           /* IN */
+               SUNXI_FUNCTION(0x5, "spi1"),            /* CS0 */
+               SUNXI_FUNCTION(0x6, "clk"),             /* FANOUT2 */
+               SUNXI_FUNCTION(0x7, "ir"),              /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 0, 12)),
+       /* PC */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "uart2"),           /* TX */
+               SUNXI_FUNCTION(0x3, "i2c2"),            /* SCK */
+               SUNXI_FUNCTION(0x4, "ledc"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 0)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "uart2"),           /* RX */
+               SUNXI_FUNCTION(0x3, "i2c2"),            /* SDA */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 1)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "spi0"),            /* CLK */
+               SUNXI_FUNCTION(0x3, "mmc2"),            /* CLK */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 2)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "spi0"),            /* CS0 */
+               SUNXI_FUNCTION(0x3, "mmc2"),            /* CMD */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 3)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "spi0"),            /* MOSI */
+               SUNXI_FUNCTION(0x3, "mmc2"),            /* D2 */
+               SUNXI_FUNCTION(0x4, "boot"),            /* SEL0 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 4)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "spi0"),            /* MISO */
+               SUNXI_FUNCTION(0x3, "mmc2"),            /* D1 */
+               SUNXI_FUNCTION(0x4, "boot"),            /* SEL1 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 5)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "spi0"),            /* WP */
+               SUNXI_FUNCTION(0x3, "mmc2"),            /* D0 */
+               SUNXI_FUNCTION(0x4, "uart3"),           /* TX */
+               SUNXI_FUNCTION(0x5, "i2c3"),            /* SCK */
+               SUNXI_FUNCTION(0x6, "pll"),             /* DBG-CLK */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 6)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "spi0"),            /* HOLD */
+               SUNXI_FUNCTION(0x3, "mmc2"),            /* D3 */
+               SUNXI_FUNCTION(0x4, "uart3"),           /* RX */
+               SUNXI_FUNCTION(0x5, "i2c3"),            /* SDA */
+               SUNXI_FUNCTION(0x6, "tcon"),            /* TRIG0 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 1, 7)),
+       /* PD */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D2 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* V0P */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* D0P */
+               SUNXI_FUNCTION(0x5, "i2c0"),            /* SCK */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 0)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D3 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* V0N */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* D0N */
+               SUNXI_FUNCTION(0x5, "uart2"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 1)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D4 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* V1P */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* D1P */
+               SUNXI_FUNCTION(0x5, "uart2"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 2)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D5 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* V1N */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* D1N */
+               SUNXI_FUNCTION(0x5, "uart2"),           /* RTS */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 3)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D6 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* V2P */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* CKP */
+               SUNXI_FUNCTION(0x5, "uart2"),           /* CTS */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 4)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D7 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* V2N */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* CKN */
+               SUNXI_FUNCTION(0x5, "uart5"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 5)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D10 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* CKP */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* D2P */
+               SUNXI_FUNCTION(0x5, "uart5"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 6)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D11 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* CKN */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* D2N */
+               SUNXI_FUNCTION(0x5, "uart4"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 7)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D12 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* V3P */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* D3P */
+               SUNXI_FUNCTION(0x5, "uart4"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 8)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D13 */
+               SUNXI_FUNCTION(0x3, "lvds0"),           /* V3N */
+               SUNXI_FUNCTION(0x4, "dsi"),             /* D3N */
+               SUNXI_FUNCTION(0x5, "pwm6"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 9)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D14 */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* V0P */
+               SUNXI_FUNCTION(0x4, "spi1"),            /* CS0 */
+               SUNXI_FUNCTION(0x5, "uart3"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 10)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D15 */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* V0N */
+               SUNXI_FUNCTION(0x4, "spi1"),            /* CLK */
+               SUNXI_FUNCTION(0x5, "uart3"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 11)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D18 */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* V1P */
+               SUNXI_FUNCTION(0x4, "spi1"),            /* MOSI */
+               SUNXI_FUNCTION(0x5, "i2c0"),            /* SDA */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 12)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D19 */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* V1N */
+               SUNXI_FUNCTION(0x4, "spi1"),            /* MISO */
+               SUNXI_FUNCTION(0x5, "uart3"),           /* RTS */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 13)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D20 */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* V2P */
+               SUNXI_FUNCTION(0x4, "spi1"),            /* HOLD */
+               SUNXI_FUNCTION(0x5, "uart3"),           /* CTS */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 14)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D21 */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* V2N */
+               SUNXI_FUNCTION(0x4, "spi1"),            /* WP */
+               SUNXI_FUNCTION(0x5, "ir"),              /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 15)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D22 */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* CKP */
+               SUNXI_FUNCTION(0x4, "dmic"),            /* DATA3 */
+               SUNXI_FUNCTION(0x5, "pwm0"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 16)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* D23 */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* CKN */
+               SUNXI_FUNCTION(0x4, "dmic"),            /* DATA2 */
+               SUNXI_FUNCTION(0x5, "pwm1"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 17)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* CLK */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* V3P */
+               SUNXI_FUNCTION(0x4, "dmic"),            /* DATA1 */
+               SUNXI_FUNCTION(0x5, "pwm2"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 18)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* DE */
+               SUNXI_FUNCTION(0x3, "lvds1"),           /* V3N */
+               SUNXI_FUNCTION(0x4, "dmic"),            /* DATA0 */
+               SUNXI_FUNCTION(0x5, "pwm3"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 19)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* HSYNC */
+               SUNXI_FUNCTION(0x3, "i2c2"),            /* SCK */
+               SUNXI_FUNCTION(0x4, "dmic"),            /* CLK */
+               SUNXI_FUNCTION(0x5, "pwm4"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 20)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "lcd0"),            /* VSYNC */
+               SUNXI_FUNCTION(0x3, "i2c2"),            /* SDA */
+               SUNXI_FUNCTION(0x4, "uart1"),           /* TX */
+               SUNXI_FUNCTION(0x5, "pwm5"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 21)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "spdif"),           /* OUT */
+               SUNXI_FUNCTION(0x3, "ir"),              /* RX */
+               SUNXI_FUNCTION(0x4, "uart1"),           /* RX */
+               SUNXI_FUNCTION(0x5, "pwm7"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 2, 22)),
+       /* PE */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* HSYNC */
+               SUNXI_FUNCTION(0x3, "uart2"),           /* RTS */
+               SUNXI_FUNCTION(0x4, "i2c1"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "lcd0"),            /* HSYNC */
+               SUNXI_FUNCTION(0x8, "emac"),            /* RXCTL/CRS_DV */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 0)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* VSYNC */
+               SUNXI_FUNCTION(0x3, "uart2"),           /* CTS */
+               SUNXI_FUNCTION(0x4, "i2c1"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "lcd0"),            /* VSYNC */
+               SUNXI_FUNCTION(0x8, "emac"),            /* RXD0 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 1)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* PCLK */
+               SUNXI_FUNCTION(0x3, "uart2"),           /* TX */
+               SUNXI_FUNCTION(0x4, "i2c0"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "clk"),             /* FANOUT0 */
+               SUNXI_FUNCTION(0x6, "uart0"),           /* TX */
+               SUNXI_FUNCTION(0x8, "emac"),            /* RXD1 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 2)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* MCLK */
+               SUNXI_FUNCTION(0x3, "uart2"),           /* RX */
+               SUNXI_FUNCTION(0x4, "i2c0"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "clk"),             /* FANOUT1 */
+               SUNXI_FUNCTION(0x6, "uart0"),           /* RX */
+               SUNXI_FUNCTION(0x8, "emac"),            /* TXCK */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 3)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* D0 */
+               SUNXI_FUNCTION(0x3, "uart4"),           /* TX */
+               SUNXI_FUNCTION(0x4, "i2c2"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "clk"),             /* FANOUT2 */
+               SUNXI_FUNCTION(0x6, "d_jtag"),          /* MS */
+               SUNXI_FUNCTION(0x7, "r_jtag"),          /* MS */
+               SUNXI_FUNCTION(0x8, "emac"),            /* TXD0 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 4)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* D1 */
+               SUNXI_FUNCTION(0x3, "uart4"),           /* RX */
+               SUNXI_FUNCTION(0x4, "i2c2"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "ledc"),
+               SUNXI_FUNCTION(0x6, "d_jtag"),          /* DI */
+               SUNXI_FUNCTION(0x7, "r_jtag"),          /* DI */
+               SUNXI_FUNCTION(0x8, "emac"),            /* TXD1 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 5)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* D2 */
+               SUNXI_FUNCTION(0x3, "uart5"),           /* TX */
+               SUNXI_FUNCTION(0x4, "i2c3"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "spdif"),           /* IN */
+               SUNXI_FUNCTION(0x6, "d_jtag"),          /* DO */
+               SUNXI_FUNCTION(0x7, "r_jtag"),          /* DO */
+               SUNXI_FUNCTION(0x8, "emac"),            /* TXCTL/TXEN */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 6)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* D3 */
+               SUNXI_FUNCTION(0x3, "uart5"),           /* RX */
+               SUNXI_FUNCTION(0x4, "i2c3"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "spdif"),           /* OUT */
+               SUNXI_FUNCTION(0x6, "d_jtag"),          /* CK */
+               SUNXI_FUNCTION(0x7, "r_jtag"),          /* CK */
+               SUNXI_FUNCTION(0x8, "emac"),            /* CK */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 7)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* D4 */
+               SUNXI_FUNCTION(0x3, "uart1"),           /* RTS */
+               SUNXI_FUNCTION(0x4, "pwm2"),
+               SUNXI_FUNCTION(0x5, "uart3"),           /* TX */
+               SUNXI_FUNCTION(0x6, "jtag"),            /* MS */
+               SUNXI_FUNCTION(0x8, "emac"),            /* MDC */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 8)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* D5 */
+               SUNXI_FUNCTION(0x3, "uart1"),           /* CTS */
+               SUNXI_FUNCTION(0x4, "pwm3"),
+               SUNXI_FUNCTION(0x5, "uart3"),           /* RX */
+               SUNXI_FUNCTION(0x6, "jtag"),            /* DI */
+               SUNXI_FUNCTION(0x8, "emac"),            /* MDIO */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 9)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* D6 */
+               SUNXI_FUNCTION(0x3, "uart1"),           /* TX */
+               SUNXI_FUNCTION(0x4, "pwm4"),
+               SUNXI_FUNCTION(0x5, "ir"),              /* RX */
+               SUNXI_FUNCTION(0x6, "jtag"),            /* DO */
+               SUNXI_FUNCTION(0x8, "emac"),            /* EPHY-25M */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 10)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ncsi0"),           /* D7 */
+               SUNXI_FUNCTION(0x3, "uart1"),           /* RX */
+               SUNXI_FUNCTION(0x4, "i2s0_dout"),       /* DOUT3 */
+               SUNXI_FUNCTION(0x5, "i2s0_din"),        /* DIN3 */
+               SUNXI_FUNCTION(0x6, "jtag"),            /* CK */
+               SUNXI_FUNCTION(0x8, "emac"),            /* TXD2 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 11)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2c2"),            /* SCK */
+               SUNXI_FUNCTION(0x3, "ncsi0"),           /* FIELD */
+               SUNXI_FUNCTION(0x4, "i2s0_dout"),       /* DOUT2 */
+               SUNXI_FUNCTION(0x5, "i2s0_din"),        /* DIN2 */
+               SUNXI_FUNCTION(0x8, "emac"),            /* TXD3 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 12)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2c2"),            /* SDA */
+               SUNXI_FUNCTION(0x3, "pwm5"),
+               SUNXI_FUNCTION(0x4, "i2s0_dout"),       /* DOUT0 */
+               SUNXI_FUNCTION(0x5, "i2s0_din"),        /* DIN1 */
+               SUNXI_FUNCTION(0x6, "dmic"),            /* DATA3 */
+               SUNXI_FUNCTION(0x8, "emac"),            /* RXD2 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 13)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2c1"),            /* SCK */
+               SUNXI_FUNCTION(0x3, "d_jtag"),          /* MS */
+               SUNXI_FUNCTION(0x4, "i2s0_dout"),       /* DOUT1 */
+               SUNXI_FUNCTION(0x5, "i2s0_din"),        /* DIN0 */
+               SUNXI_FUNCTION(0x6, "dmic"),            /* DATA2 */
+               SUNXI_FUNCTION(0x8, "emac"),            /* RXD3 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 14)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 15),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2c1"),            /* SDA */
+               SUNXI_FUNCTION(0x3, "d_jtag"),          /* DI */
+               SUNXI_FUNCTION(0x4, "pwm6"),
+               SUNXI_FUNCTION(0x5, "i2s0"),            /* LRCK */
+               SUNXI_FUNCTION(0x6, "dmic"),            /* DATA1 */
+               SUNXI_FUNCTION(0x8, "emac"),            /* RXCK */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 15)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 16),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2c3"),            /* SCK */
+               SUNXI_FUNCTION(0x3, "d_jtag"),          /* DO */
+               SUNXI_FUNCTION(0x4, "pwm7"),
+               SUNXI_FUNCTION(0x5, "i2s0"),            /* BCLK */
+               SUNXI_FUNCTION(0x6, "dmic"),            /* DATA0 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 16)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 17),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2c3"),            /* SDA */
+               SUNXI_FUNCTION(0x3, "d_jtag"),          /* CK */
+               SUNXI_FUNCTION(0x4, "ir"),              /* TX */
+               SUNXI_FUNCTION(0x5, "i2s0"),            /* MCLK */
+               SUNXI_FUNCTION(0x6, "dmic"),            /* CLK */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 3, 17)),
+       /* PF */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc0"),            /* D1 */
+               SUNXI_FUNCTION(0x3, "jtag"),            /* MS */
+               SUNXI_FUNCTION(0x4, "r_jtag"),          /* MS */
+               SUNXI_FUNCTION(0x5, "i2s2_dout"),       /* DOUT1 */
+               SUNXI_FUNCTION(0x6, "i2s2_din"),        /* DIN0 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 0)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc0"),            /* D0 */
+               SUNXI_FUNCTION(0x3, "jtag"),            /* DI */
+               SUNXI_FUNCTION(0x4, "r_jtag"),          /* DI */
+               SUNXI_FUNCTION(0x5, "i2s2_dout"),       /* DOUT0 */
+               SUNXI_FUNCTION(0x6, "i2s2_din"),        /* DIN1 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 1)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc0"),            /* CLK */
+               SUNXI_FUNCTION(0x3, "uart0"),           /* TX */
+               SUNXI_FUNCTION(0x4, "i2c0"),            /* SCK */
+               SUNXI_FUNCTION(0x5, "ledc"),
+               SUNXI_FUNCTION(0x6, "spdif"),           /* IN */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 2)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc0"),            /* CMD */
+               SUNXI_FUNCTION(0x3, "jtag"),            /* DO */
+               SUNXI_FUNCTION(0x4, "r_jtag"),          /* DO */
+               SUNXI_FUNCTION(0x5, "i2s2"),            /* BCLK */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 3)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc0"),            /* D3 */
+               SUNXI_FUNCTION(0x3, "uart0"),           /* RX */
+               SUNXI_FUNCTION(0x4, "i2c0"),            /* SDA */
+               SUNXI_FUNCTION(0x5, "pwm6"),
+               SUNXI_FUNCTION(0x6, "ir"),              /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 4)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc0"),            /* D2 */
+               SUNXI_FUNCTION(0x3, "jtag"),            /* CK */
+               SUNXI_FUNCTION(0x4, "r_jtag"),          /* CK */
+               SUNXI_FUNCTION(0x5, "i2s2"),            /* LRCK */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 5)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x3, "spdif"),           /* OUT */
+               SUNXI_FUNCTION(0x4, "ir"),              /* RX */
+               SUNXI_FUNCTION(0x5, "i2s2"),            /* MCLK */
+               SUNXI_FUNCTION(0x6, "pwm5"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 4, 6)),
+       /* PG */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc1"),            /* CLK */
+               SUNXI_FUNCTION(0x3, "uart3"),           /* TX */
+               SUNXI_FUNCTION(0x4, "emac"),            /* RXCTRL/CRS_DV */
+               SUNXI_FUNCTION(0x5, "pwm7"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 0)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc1"),            /* CMD */
+               SUNXI_FUNCTION(0x3, "uart3"),           /* RX */
+               SUNXI_FUNCTION(0x4, "emac"),            /* RXD0 */
+               SUNXI_FUNCTION(0x5, "pwm6"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 1)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc1"),            /* D0 */
+               SUNXI_FUNCTION(0x3, "uart3"),           /* RTS */
+               SUNXI_FUNCTION(0x4, "emac"),            /* RXD1 */
+               SUNXI_FUNCTION(0x5, "uart4"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 2)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc1"),            /* D1 */
+               SUNXI_FUNCTION(0x3, "uart3"),           /* CTS */
+               SUNXI_FUNCTION(0x4, "emac"),            /* TXCK */
+               SUNXI_FUNCTION(0x5, "uart4"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 3)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc1"),            /* D2 */
+               SUNXI_FUNCTION(0x3, "uart5"),           /* TX */
+               SUNXI_FUNCTION(0x4, "emac"),            /* TXD0 */
+               SUNXI_FUNCTION(0x5, "pwm5"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 4)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "mmc1"),            /* D3 */
+               SUNXI_FUNCTION(0x3, "uart5"),           /* RX */
+               SUNXI_FUNCTION(0x4, "emac"),            /* TXD1 */
+               SUNXI_FUNCTION(0x5, "pwm4"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 5)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "uart1"),           /* TX */
+               SUNXI_FUNCTION(0x3, "i2c2"),            /* SCK */
+               SUNXI_FUNCTION(0x4, "emac"),            /* TXD2 */
+               SUNXI_FUNCTION(0x5, "pwm1"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 6)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "uart1"),           /* RX */
+               SUNXI_FUNCTION(0x3, "i2c2"),            /* SDA */
+               SUNXI_FUNCTION(0x4, "emac"),            /* TXD3 */
+               SUNXI_FUNCTION(0x5, "spdif"),           /* IN */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 7)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "uart1"),           /* RTS */
+               SUNXI_FUNCTION(0x3, "i2c1"),            /* SCK */
+               SUNXI_FUNCTION(0x4, "emac"),            /* RXD2 */
+               SUNXI_FUNCTION(0x5, "uart3"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 8)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "uart1"),           /* CTS */
+               SUNXI_FUNCTION(0x3, "i2c1"),            /* SDA */
+               SUNXI_FUNCTION(0x4, "emac"),            /* RXD3 */
+               SUNXI_FUNCTION(0x5, "uart3"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 9)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "pwm3"),
+               SUNXI_FUNCTION(0x3, "i2c3"),            /* SCK */
+               SUNXI_FUNCTION(0x4, "emac"),            /* RXCK */
+               SUNXI_FUNCTION(0x5, "clk"),             /* FANOUT0 */
+               SUNXI_FUNCTION(0x6, "ir"),              /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 10)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2s1"),            /* MCLK */
+               SUNXI_FUNCTION(0x3, "i2c3"),            /* SDA */
+               SUNXI_FUNCTION(0x4, "emac"),            /* EPHY-25M */
+               SUNXI_FUNCTION(0x5, "clk"),             /* FANOUT1 */
+               SUNXI_FUNCTION(0x6, "tcon"),            /* TRIG0 */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 11)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2s1"),            /* LRCK */
+               SUNXI_FUNCTION(0x3, "i2c0"),            /* SCK */
+               SUNXI_FUNCTION(0x4, "emac"),            /* TXCTL/TXEN */
+               SUNXI_FUNCTION(0x5, "clk"),             /* FANOUT2 */
+               SUNXI_FUNCTION(0x6, "pwm0"),
+               SUNXI_FUNCTION(0x7, "uart1"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 12)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2s1"),            /* BCLK */
+               SUNXI_FUNCTION(0x3, "i2c0"),            /* SDA */
+               SUNXI_FUNCTION(0x4, "emac"),            /* CLKIN/RXER */
+               SUNXI_FUNCTION(0x5, "pwm2"),
+               SUNXI_FUNCTION(0x6, "ledc"),
+               SUNXI_FUNCTION(0x7, "uart1"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 13)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 14),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2s1_din"),        /* DIN0 */
+               SUNXI_FUNCTION(0x3, "i2c2"),            /* SCK */
+               SUNXI_FUNCTION(0x4, "emac"),            /* MDC */
+               SUNXI_FUNCTION(0x5, "i2s1_dout"),       /* DOUT1 */
+               SUNXI_FUNCTION(0x6, "spi0"),            /* WP */
+               SUNXI_FUNCTION(0x7, "uart1"),           /* RTS */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 14)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 15),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "i2s1_dout"),       /* DOUT0 */
+               SUNXI_FUNCTION(0x3, "i2c2"),            /* SDA */
+               SUNXI_FUNCTION(0x4, "emac"),            /* MDIO */
+               SUNXI_FUNCTION(0x5, "i2s1_din"),        /* DIN1 */
+               SUNXI_FUNCTION(0x6, "spi0"),            /* HOLD */
+               SUNXI_FUNCTION(0x7, "uart1"),           /* CTS */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 15)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 16),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "ir"),              /* RX */
+               SUNXI_FUNCTION(0x3, "tcon"),            /* TRIG0 */
+               SUNXI_FUNCTION(0x4, "pwm5"),
+               SUNXI_FUNCTION(0x5, "clk"),             /* FANOUT2 */
+               SUNXI_FUNCTION(0x6, "spdif"),           /* IN */
+               SUNXI_FUNCTION(0x7, "ledc"),
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 16)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 17),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "uart2"),           /* TX */
+               SUNXI_FUNCTION(0x3, "i2c3"),            /* SCK */
+               SUNXI_FUNCTION(0x4, "pwm7"),
+               SUNXI_FUNCTION(0x5, "clk"),             /* FANOUT0 */
+               SUNXI_FUNCTION(0x6, "ir"),              /* TX */
+               SUNXI_FUNCTION(0x7, "uart0"),           /* TX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 17)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 18),
+               SUNXI_FUNCTION(0x0, "gpio_in"),
+               SUNXI_FUNCTION(0x1, "gpio_out"),
+               SUNXI_FUNCTION(0x2, "uart2"),           /* RX */
+               SUNXI_FUNCTION(0x3, "i2c3"),            /* SDA */
+               SUNXI_FUNCTION(0x4, "pwm6"),
+               SUNXI_FUNCTION(0x5, "clk"),             /* FANOUT1 */
+               SUNXI_FUNCTION(0x6, "spdif"),           /* OUT */
+               SUNXI_FUNCTION(0x7, "uart0"),           /* RX */
+               SUNXI_FUNCTION_IRQ_BANK(0xe, 5, 18)),
+};
+
+static const unsigned int d1_irq_bank_map[] = { 1, 2, 3, 4, 5, 6 };
+
+static const struct sunxi_pinctrl_desc d1_pinctrl_data = {
+       .pins                   = d1_pins,
+       .npins                  = ARRAY_SIZE(d1_pins),
+       .irq_banks              = ARRAY_SIZE(d1_irq_bank_map),
+       .irq_bank_map           = d1_irq_bank_map,
+       .io_bias_cfg_variant    = BIAS_VOLTAGE_PIO_POW_MODE_CTL,
+};
+
+static int d1_pinctrl_probe(struct platform_device *pdev)
+{
+       unsigned long variant = (unsigned long)of_device_get_match_data(&pdev->dev);
+
+       return sunxi_pinctrl_init_with_variant(pdev, &d1_pinctrl_data, variant);
+}
+
+static const struct of_device_id d1_pinctrl_match[] = {
+       {
+               .compatible = "allwinner,sun20i-d1-pinctrl",
+               .data = (void *)PINCTRL_SUN20I_D1
+       },
+       {}
+};
+
+static struct platform_driver d1_pinctrl_driver = {
+       .probe  = d1_pinctrl_probe,
+       .driver = {
+               .name           = "sun20i-d1-pinctrl",
+               .of_match_table = d1_pinctrl_match,
+       },
+};
+builtin_platform_driver(d1_pinctrl_driver);
index 21054fcacd345fe6fcc7a5c71f462247216f2f21..afc1f5df75450bb5810f482966932bb4b0702aa1 100644 (file)
@@ -82,6 +82,7 @@ static const struct sunxi_pinctrl_desc a100_r_pinctrl_data = {
        .npins = ARRAY_SIZE(a100_r_pins),
        .pin_base = PL_BASE,
        .irq_banks = 1,
+       .io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_CTL,
 };
 
 static int a100_r_pinctrl_probe(struct platform_device *pdev)
index e69f6da40dc0a24ab099e999c66c237bf372a48f..f682e0e4244d219de16b0246677e2210d34b7902 100644 (file)
@@ -684,7 +684,7 @@ static const struct sunxi_pinctrl_desc a100_pinctrl_data = {
        .npins = ARRAY_SIZE(a100_pins),
        .irq_banks = 7,
        .irq_bank_map = a100_irq_bank_map,
-       .io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL,
+       .io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_CTL,
 };
 
 static int a100_pinctrl_probe(struct platform_device *pdev)
index e69c8dae121adee35b7ff721abab3d9d4141ff28..ef261eccda561af2aa5dd3f352abc0c9ac302caf 100644 (file)
@@ -24,7 +24,6 @@
 #include <linux/of_device.h>
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/platform_device.h>
-#include <linux/reset.h>
 
 #include "pinctrl-sunxi.h"
 
index c7d90c44e87aa77ab2c035a6e0cdadc5d4ca3d96..3aba0aec3d7823ac2bc6f9655b709163fc848eee 100644 (file)
@@ -16,7 +16,6 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/pinctrl/pinctrl.h>
-#include <linux/reset.h>
 
 #include "pinctrl-sunxi.h"
 
@@ -107,6 +106,7 @@ static const struct sunxi_pinctrl_desc sun50i_h6_r_pinctrl_data = {
        .npins = ARRAY_SIZE(sun50i_h6_r_pins),
        .pin_base = PL_BASE,
        .irq_banks = 2,
+       .io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL,
 };
 
 static int sun50i_h6_r_pinctrl_probe(struct platform_device *pdev)
index 8e4f10ab96ced6873c04a1eb42002242476133b3..c39ea46046c2aa8ea4f7b38b2969972a51601a8c 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/pinctrl/pinctrl.h>
-#include <linux/reset.h>
 
 #include "pinctrl-sunxi.h"
 
index 152b71226a807f8c559e5a36e619de9aa75f17c2..d6ca720ee8d847ee1f8d161971ca647d796931d4 100644 (file)
@@ -525,7 +525,7 @@ static const struct sunxi_pinctrl_desc h616_pinctrl_data = {
        .irq_banks = ARRAY_SIZE(h616_irq_bank_map),
        .irq_bank_map = h616_irq_bank_map,
        .irq_read_needs_mux = true,
-       .io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL,
+       .io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_CTL,
 };
 
 static int h616_pinctrl_probe(struct platform_device *pdev)
index a00246d3dd49700de4eb81ef14843f10629a5604..2486cdf345e15d77ffbf057fa065d091b0b01d6d 100644 (file)
@@ -17,7 +17,6 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/pinctrl/pinctrl.h>
-#include <linux/reset.h>
 
 #include "pinctrl-sunxi.h"
 
@@ -111,26 +110,7 @@ static const struct sunxi_pinctrl_desc sun6i_a31_r_pinctrl_data = {
 
 static int sun6i_a31_r_pinctrl_probe(struct platform_device *pdev)
 {
-       struct reset_control *rstc;
-       int ret;
-
-       rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
-       if (IS_ERR(rstc)) {
-               dev_err(&pdev->dev, "Reset controller missing\n");
-               return PTR_ERR(rstc);
-       }
-
-       ret = reset_control_deassert(rstc);
-       if (ret)
-               return ret;
-
-       ret = sunxi_pinctrl_init(pdev,
-                                &sun6i_a31_r_pinctrl_data);
-
-       if (ret)
-               reset_control_assert(rstc);
-
-       return ret;
+       return sunxi_pinctrl_init(pdev, &sun6i_a31_r_pinctrl_data);
 }
 
 static const struct of_device_id sun6i_a31_r_pinctrl_match[] = {
index 9e5b61449999adbd2a895b8e3d85cc90093950bd..4fae12c905b784720dfc79d524bece3b7685dd39 100644 (file)
@@ -20,7 +20,6 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/pinctrl/pinctrl.h>
-#include <linux/reset.h>
 
 #include "pinctrl-sunxi.h"
 
@@ -98,29 +97,7 @@ static const struct sunxi_pinctrl_desc sun8i_a23_r_pinctrl_data = {
 
 static int sun8i_a23_r_pinctrl_probe(struct platform_device *pdev)
 {
-       struct reset_control *rstc;
-       int ret;
-
-       rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
-       if (IS_ERR(rstc)) {
-               ret = PTR_ERR(rstc);
-               if (ret == -EPROBE_DEFER)
-                       return ret;
-               dev_err(&pdev->dev, "Reset controller missing err=%d\n", ret);
-               return ret;
-       }
-
-       ret = reset_control_deassert(rstc);
-       if (ret)
-               return ret;
-
-       ret = sunxi_pinctrl_init(pdev,
-                                &sun8i_a23_r_pinctrl_data);
-
-       if (ret)
-               reset_control_assert(rstc);
-
-       return ret;
+       return sunxi_pinctrl_init(pdev, &sun8i_a23_r_pinctrl_data);
 }
 
 static const struct of_device_id sun8i_a23_r_pinctrl_match[] = {
index 6531cf67958ed07ddaf457558efe48c3793d15aa..0cb6c1a970c95f06e892df51dc2fbd688a72b22a 100644 (file)
@@ -27,7 +27,6 @@
 #include <linux/of_device.h>
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/platform_device.h>
-#include <linux/reset.h>
 
 #include "pinctrl-sunxi.h"
 
index a191a65217ac2e9dc344286d752ebe13c4d947a1..f11cb5bba0f74428bfe19f2f1ca025b69279d057 100644 (file)
@@ -14,7 +14,6 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/pinctrl/pinctrl.h>
-#include <linux/reset.h>
 
 #include "pinctrl-sunxi.h"
 
index dd928402af9978deb7159d6204dde1f605058c04..6c04027d0dd9775310a5c7c352d1d287c9b1e2d6 100644 (file)
@@ -46,6 +46,67 @@ static struct lock_class_key sunxi_pinctrl_irq_request_class;
 static struct irq_chip sunxi_pinctrl_edge_irq_chip;
 static struct irq_chip sunxi_pinctrl_level_irq_chip;
 
+/*
+ * The sunXi PIO registers are organized as a series of banks, with registers
+ * for each bank in the following order:
+ *  - Mux config
+ *  - Data value
+ *  - Drive level
+ *  - Pull direction
+ *
+ * Multiple consecutive registers are used for fields wider than one bit.
+ *
+ * The following functions calculate the register and the bit offset to access.
+ * They take a pin number which is relative to the start of the current device.
+ */
+static void sunxi_mux_reg(const struct sunxi_pinctrl *pctl,
+                         u32 pin, u32 *reg, u32 *shift, u32 *mask)
+{
+       u32 bank   = pin / PINS_PER_BANK;
+       u32 offset = pin % PINS_PER_BANK * MUX_FIELD_WIDTH;
+
+       *reg   = bank * pctl->bank_mem_size + MUX_REGS_OFFSET +
+                offset / BITS_PER_TYPE(u32) * sizeof(u32);
+       *shift = offset % BITS_PER_TYPE(u32);
+       *mask  = (BIT(MUX_FIELD_WIDTH) - 1) << *shift;
+}
+
+static void sunxi_data_reg(const struct sunxi_pinctrl *pctl,
+                          u32 pin, u32 *reg, u32 *shift, u32 *mask)
+{
+       u32 bank   = pin / PINS_PER_BANK;
+       u32 offset = pin % PINS_PER_BANK * DATA_FIELD_WIDTH;
+
+       *reg   = bank * pctl->bank_mem_size + DATA_REGS_OFFSET +
+                offset / BITS_PER_TYPE(u32) * sizeof(u32);
+       *shift = offset % BITS_PER_TYPE(u32);
+       *mask  = (BIT(DATA_FIELD_WIDTH) - 1) << *shift;
+}
+
+static void sunxi_dlevel_reg(const struct sunxi_pinctrl *pctl,
+                            u32 pin, u32 *reg, u32 *shift, u32 *mask)
+{
+       u32 bank   = pin / PINS_PER_BANK;
+       u32 offset = pin % PINS_PER_BANK * pctl->dlevel_field_width;
+
+       *reg   = bank * pctl->bank_mem_size + DLEVEL_REGS_OFFSET +
+                offset / BITS_PER_TYPE(u32) * sizeof(u32);
+       *shift = offset % BITS_PER_TYPE(u32);
+       *mask  = (BIT(pctl->dlevel_field_width) - 1) << *shift;
+}
+
+static void sunxi_pull_reg(const struct sunxi_pinctrl *pctl,
+                          u32 pin, u32 *reg, u32 *shift, u32 *mask)
+{
+       u32 bank   = pin / PINS_PER_BANK;
+       u32 offset = pin % PINS_PER_BANK * PULL_FIELD_WIDTH;
+
+       *reg   = bank * pctl->bank_mem_size + pctl->pull_regs_offset +
+                offset / BITS_PER_TYPE(u32) * sizeof(u32);
+       *shift = offset % BITS_PER_TYPE(u32);
+       *mask  = (BIT(PULL_FIELD_WIDTH) - 1) << *shift;
+}
+
 static struct sunxi_pinctrl_group *
 sunxi_pinctrl_find_group_by_name(struct sunxi_pinctrl *pctl, const char *group)
 {
@@ -451,22 +512,19 @@ static const struct pinctrl_ops sunxi_pctrl_ops = {
        .get_group_pins         = sunxi_pctrl_get_group_pins,
 };
 
-static int sunxi_pconf_reg(unsigned pin, enum pin_config_param param,
-                          u32 *offset, u32 *shift, u32 *mask)
+static int sunxi_pconf_reg(const struct sunxi_pinctrl *pctl,
+                          u32 pin, enum pin_config_param param,
+                          u32 *reg, u32 *shift, u32 *mask)
 {
        switch (param) {
        case PIN_CONFIG_DRIVE_STRENGTH:
-               *offset = sunxi_dlevel_reg(pin);
-               *shift = sunxi_dlevel_offset(pin);
-               *mask = DLEVEL_PINS_MASK;
+               sunxi_dlevel_reg(pctl, pin, reg, shift, mask);
                break;
 
        case PIN_CONFIG_BIAS_PULL_UP:
        case PIN_CONFIG_BIAS_PULL_DOWN:
        case PIN_CONFIG_BIAS_DISABLE:
-               *offset = sunxi_pull_reg(pin);
-               *shift = sunxi_pull_offset(pin);
-               *mask = PULL_PINS_MASK;
+               sunxi_pull_reg(pctl, pin, reg, shift, mask);
                break;
 
        default:
@@ -481,17 +539,17 @@ static int sunxi_pconf_get(struct pinctrl_dev *pctldev, unsigned pin,
 {
        struct sunxi_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
        enum pin_config_param param = pinconf_to_config_param(*config);
-       u32 offset, shift, mask, val;
+       u32 reg, shift, mask, val;
        u16 arg;
        int ret;
 
        pin -= pctl->desc->pin_base;
 
-       ret = sunxi_pconf_reg(pin, param, &offset, &shift, &mask);
+       ret = sunxi_pconf_reg(pctl, pin, param, &reg, &shift, &mask);
        if (ret < 0)
                return ret;
 
-       val = (readl(pctl->membase + offset) >> shift) & mask;
+       val = (readl(pctl->membase + reg) & mask) >> shift;
 
        switch (pinconf_to_config_param(*config)) {
        case PIN_CONFIG_DRIVE_STRENGTH:
@@ -547,16 +605,15 @@ static int sunxi_pconf_set(struct pinctrl_dev *pctldev, unsigned pin,
        pin -= pctl->desc->pin_base;
 
        for (i = 0; i < num_configs; i++) {
+               u32 arg, reg, shift, mask, val;
                enum pin_config_param param;
                unsigned long flags;
-               u32 offset, shift, mask, reg;
-               u32 arg, val;
                int ret;
 
                param = pinconf_to_config_param(configs[i]);
                arg = pinconf_to_config_argument(configs[i]);
 
-               ret = sunxi_pconf_reg(pin, param, &offset, &shift, &mask);
+               ret = sunxi_pconf_reg(pctl, pin, param, &reg, &shift, &mask);
                if (ret < 0)
                        return ret;
 
@@ -593,9 +650,8 @@ static int sunxi_pconf_set(struct pinctrl_dev *pctldev, unsigned pin,
                }
 
                raw_spin_lock_irqsave(&pctl->lock, flags);
-               reg = readl(pctl->membase + offset);
-               reg &= ~(mask << shift);
-               writel(reg | val << shift, pctl->membase + offset);
+               writel((readl(pctl->membase + reg) & ~mask) | val << shift,
+                      pctl->membase + reg);
                raw_spin_unlock_irqrestore(&pctl->lock, flags);
        } /* for each config */
 
@@ -624,7 +680,7 @@ static int sunxi_pinctrl_set_io_bias_cfg(struct sunxi_pinctrl *pctl,
                                         unsigned pin,
                                         struct regulator *supply)
 {
-       unsigned short bank = pin / PINS_PER_BANK;
+       unsigned short bank;
        unsigned long flags;
        u32 val, reg;
        int uV;
@@ -640,6 +696,9 @@ static int sunxi_pinctrl_set_io_bias_cfg(struct sunxi_pinctrl *pctl,
        if (uV == 0)
                return 0;
 
+       pin -= pctl->desc->pin_base;
+       bank = pin / PINS_PER_BANK;
+
        switch (pctl->desc->io_bias_cfg_variant) {
        case BIAS_VOLTAGE_GRP_CONFIG:
                /*
@@ -657,12 +716,20 @@ static int sunxi_pinctrl_set_io_bias_cfg(struct sunxi_pinctrl *pctl,
                else
                        val = 0xD; /* 3.3V */
 
-               pin -= pctl->desc->pin_base;
-
                reg = readl(pctl->membase + sunxi_grp_config_reg(pin));
                reg &= ~IO_BIAS_MASK;
                writel(reg | val, pctl->membase + sunxi_grp_config_reg(pin));
                return 0;
+       case BIAS_VOLTAGE_PIO_POW_MODE_CTL:
+               val = uV > 1800000 && uV <= 2500000 ? BIT(bank) : 0;
+
+               raw_spin_lock_irqsave(&pctl->lock, flags);
+               reg = readl(pctl->membase + PIO_POW_MOD_CTL_REG);
+               reg &= ~BIT(bank);
+               writel(reg | val, pctl->membase + PIO_POW_MOD_CTL_REG);
+               raw_spin_unlock_irqrestore(&pctl->lock, flags);
+
+               fallthrough;
        case BIAS_VOLTAGE_PIO_POW_MODE_SEL:
                val = uV <= 1800000 ? 1 : 0;
 
@@ -710,16 +777,16 @@ static void sunxi_pmx_set(struct pinctrl_dev *pctldev,
                                 u8 config)
 {
        struct sunxi_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
+       u32 reg, shift, mask;
        unsigned long flags;
-       u32 val, mask;
+
+       pin -= pctl->desc->pin_base;
+       sunxi_mux_reg(pctl, pin, &reg, &shift, &mask);
 
        raw_spin_lock_irqsave(&pctl->lock, flags);
 
-       pin -= pctl->desc->pin_base;
-       val = readl(pctl->membase + sunxi_mux_reg(pin));
-       mask = MUX_PINS_MASK << sunxi_mux_offset(pin);
-       writel((val & ~mask) | config << sunxi_mux_offset(pin),
-               pctl->membase + sunxi_mux_reg(pin));
+       writel((readl(pctl->membase + reg) & ~mask) | config << shift,
+              pctl->membase + reg);
 
        raw_spin_unlock_irqrestore(&pctl->lock, flags);
 }
@@ -852,43 +919,43 @@ static int sunxi_pinctrl_gpio_direction_input(struct gpio_chip *chip,
 static int sunxi_pinctrl_gpio_get(struct gpio_chip *chip, unsigned offset)
 {
        struct sunxi_pinctrl *pctl = gpiochip_get_data(chip);
-       u32 reg = sunxi_data_reg(offset);
-       u8 index = sunxi_data_offset(offset);
        bool set_mux = pctl->desc->irq_read_needs_mux &&
                gpiochip_line_is_irq(chip, offset);
        u32 pin = offset + chip->base;
-       u32 val;
+       u32 reg, shift, mask, val;
+
+       sunxi_data_reg(pctl, offset, &reg, &shift, &mask);
 
        if (set_mux)
                sunxi_pmx_set(pctl->pctl_dev, pin, SUN4I_FUNC_INPUT);
 
-       val = (readl(pctl->membase + reg) >> index) & DATA_PINS_MASK;
+       val = (readl(pctl->membase + reg) & mask) >> shift;
 
        if (set_mux)
                sunxi_pmx_set(pctl->pctl_dev, pin, SUN4I_FUNC_IRQ);
 
-       return !!val;
+       return val;
 }
 
 static void sunxi_pinctrl_gpio_set(struct gpio_chip *chip,
                                unsigned offset, int value)
 {
        struct sunxi_pinctrl *pctl = gpiochip_get_data(chip);
-       u32 reg = sunxi_data_reg(offset);
-       u8 index = sunxi_data_offset(offset);
+       u32 reg, shift, mask, val;
        unsigned long flags;
-       u32 regval;
+
+       sunxi_data_reg(pctl, offset, &reg, &shift, &mask);
 
        raw_spin_lock_irqsave(&pctl->lock, flags);
 
-       regval = readl(pctl->membase + reg);
+       val = readl(pctl->membase + reg);
 
        if (value)
-               regval |= BIT(index);
+               val |= mask;
        else
-               regval &= ~(BIT(index));
+               val &= ~mask;
 
-       writel(regval, pctl->membase + reg);
+       writel(val, pctl->membase + reg);
 
        raw_spin_unlock_irqrestore(&pctl->lock, flags);
 }
@@ -1232,11 +1299,11 @@ static int sunxi_pinctrl_build_state(struct platform_device *pdev)
 
        /*
         * Find an upper bound for the maximum number of functions: in
-        * the worst case we have gpio_in, gpio_out, irq and up to four
+        * the worst case we have gpio_in, gpio_out, irq and up to seven
         * special functions per pin, plus one entry for the sentinel.
         * We'll reallocate that later anyway.
         */
-       pctl->functions = kcalloc(4 * pctl->ngroups + 4,
+       pctl->functions = kcalloc(7 * pctl->ngroups + 4,
                                  sizeof(*pctl->functions),
                                  GFP_KERNEL);
        if (!pctl->functions)
@@ -1429,6 +1496,15 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
        pctl->dev = &pdev->dev;
        pctl->desc = desc;
        pctl->variant = variant;
+       if (pctl->variant >= PINCTRL_SUN20I_D1) {
+               pctl->bank_mem_size = D1_BANK_MEM_SIZE;
+               pctl->pull_regs_offset = D1_PULL_REGS_OFFSET;
+               pctl->dlevel_field_width = D1_DLEVEL_FIELD_WIDTH;
+       } else {
+               pctl->bank_mem_size = BANK_MEM_SIZE;
+               pctl->pull_regs_offset = PULL_REGS_OFFSET;
+               pctl->dlevel_field_width = DLEVEL_FIELD_WIDTH;
+       }
 
        pctl->irq_array = devm_kcalloc(&pdev->dev,
                                       IRQ_PER_BANK * pctl->desc->irq_banks,
index a32bb5bcb754762400a48caefc8eda090435c0eb..a87a2f944d609f42a491101fe1b84cdae8828639 100644 (file)
 
 #define BANK_MEM_SIZE          0x24
 #define MUX_REGS_OFFSET                0x0
+#define MUX_FIELD_WIDTH                4
 #define DATA_REGS_OFFSET       0x10
+#define DATA_FIELD_WIDTH       1
 #define DLEVEL_REGS_OFFSET     0x14
+#define DLEVEL_FIELD_WIDTH     2
 #define PULL_REGS_OFFSET       0x1c
+#define PULL_FIELD_WIDTH       2
+
+#define D1_BANK_MEM_SIZE       0x30
+#define D1_DLEVEL_FIELD_WIDTH  4
+#define D1_PULL_REGS_OFFSET    0x24
 
 #define PINS_PER_BANK          32
-#define MUX_PINS_PER_REG       8
-#define MUX_PINS_BITS          4
-#define MUX_PINS_MASK          0x0f
-#define DATA_PINS_PER_REG      32
-#define DATA_PINS_BITS         1
-#define DATA_PINS_MASK         0x01
-#define DLEVEL_PINS_PER_REG    16
-#define DLEVEL_PINS_BITS       2
-#define DLEVEL_PINS_MASK       0x03
-#define PULL_PINS_PER_REG      16
-#define PULL_PINS_BITS         2
-#define PULL_PINS_MASK         0x03
 
 #define IRQ_PER_BANK           32
 
 #define PINCTRL_SUN8I_R40      BIT(8)
 #define PINCTRL_SUN8I_V3       BIT(9)
 #define PINCTRL_SUN8I_V3S      BIT(10)
+/* Variants below here have an updated register layout. */
+#define PINCTRL_SUN20I_D1      BIT(11)
 
 #define PIO_POW_MOD_SEL_REG    0x340
+#define PIO_POW_MOD_CTL_REG    0x344
 
 enum sunxi_desc_bias_voltage {
        BIAS_VOLTAGE_NONE,
@@ -111,6 +110,12 @@ enum sunxi_desc_bias_voltage {
         * register, as seen on H6 SoC, for example.
         */
        BIAS_VOLTAGE_PIO_POW_MODE_SEL,
+       /*
+        * Bias voltage is set through PIO_POW_MOD_SEL_REG
+        * and PIO_POW_MOD_CTL_REG register, as seen on
+        * A100 and D1 SoC, for example.
+        */
+       BIAS_VOLTAGE_PIO_POW_MODE_CTL,
 };
 
 struct sunxi_desc_function {
@@ -170,6 +175,9 @@ struct sunxi_pinctrl {
        raw_spinlock_t                  lock;
        struct pinctrl_dev              *pctl_dev;
        unsigned long                   variant;
+       u32                             bank_mem_size;
+       u32                             pull_regs_offset;
+       u32                             dlevel_field_width;
 };
 
 #define SUNXI_PIN(_pin, ...)                                   \
@@ -215,83 +223,6 @@ struct sunxi_pinctrl {
                .irqnum = _irq,                                 \
        }
 
-/*
- * The sunXi PIO registers are organized as is:
- * 0x00 - 0x0c Muxing values.
- *             8 pins per register, each pin having a 4bits value
- * 0x10                Pin values
- *             32 bits per register, each pin corresponding to one bit
- * 0x14 - 0x18 Drive level
- *             16 pins per register, each pin having a 2bits value
- * 0x1c - 0x20 Pull-Up values
- *             16 pins per register, each pin having a 2bits value
- *
- * This is for the first bank. Each bank will have the same layout,
- * with an offset being a multiple of 0x24.
- *
- * The following functions calculate from the pin number the register
- * and the bit offset that we should access.
- */
-static inline u32 sunxi_mux_reg(u16 pin)
-{
-       u8 bank = pin / PINS_PER_BANK;
-       u32 offset = bank * BANK_MEM_SIZE;
-       offset += MUX_REGS_OFFSET;
-       offset += pin % PINS_PER_BANK / MUX_PINS_PER_REG * 0x04;
-       return round_down(offset, 4);
-}
-
-static inline u32 sunxi_mux_offset(u16 pin)
-{
-       u32 pin_num = pin % MUX_PINS_PER_REG;
-       return pin_num * MUX_PINS_BITS;
-}
-
-static inline u32 sunxi_data_reg(u16 pin)
-{
-       u8 bank = pin / PINS_PER_BANK;
-       u32 offset = bank * BANK_MEM_SIZE;
-       offset += DATA_REGS_OFFSET;
-       offset += pin % PINS_PER_BANK / DATA_PINS_PER_REG * 0x04;
-       return round_down(offset, 4);
-}
-
-static inline u32 sunxi_data_offset(u16 pin)
-{
-       u32 pin_num = pin % DATA_PINS_PER_REG;
-       return pin_num * DATA_PINS_BITS;
-}
-
-static inline u32 sunxi_dlevel_reg(u16 pin)
-{
-       u8 bank = pin / PINS_PER_BANK;
-       u32 offset = bank * BANK_MEM_SIZE;
-       offset += DLEVEL_REGS_OFFSET;
-       offset += pin % PINS_PER_BANK / DLEVEL_PINS_PER_REG * 0x04;
-       return round_down(offset, 4);
-}
-
-static inline u32 sunxi_dlevel_offset(u16 pin)
-{
-       u32 pin_num = pin % DLEVEL_PINS_PER_REG;
-       return pin_num * DLEVEL_PINS_BITS;
-}
-
-static inline u32 sunxi_pull_reg(u16 pin)
-{
-       u8 bank = pin / PINS_PER_BANK;
-       u32 offset = bank * BANK_MEM_SIZE;
-       offset += PULL_REGS_OFFSET;
-       offset += pin % PINS_PER_BANK / PULL_PINS_PER_REG * 0x04;
-       return round_down(offset, 4);
-}
-
-static inline u32 sunxi_pull_offset(u16 pin)
-{
-       u32 pin_num = pin % PULL_PINS_PER_REG;
-       return pin_num * PULL_PINS_BITS;
-}
-
 static inline u32 sunxi_irq_hw_bank_num(const struct sunxi_pinctrl_desc *desc, u8 bank)
 {
        if (!desc->irq_bank_map)
index 2d0c23e5d3a7f1490744e2ce9171e9e858ec99ce..8736ce038ecab772a48ae673338582c8224b135c 100644 (file)
@@ -42,6 +42,6 @@
 /*
  * Convert a port and pin label to its global pin index
  */
- #define RZA2_PIN(port, pin)   ((port) * RZA2_PINS_PER_PORT + (pin))
+#define RZA2_PIN(port, pin)    ((port) * RZA2_PINS_PER_PORT + (pin))
 
 #endif /* __DT_BINDINGS_PINCTRL_RENESAS_RZA2_H */
index b48f8c7a55566ff4142c83bb918596ef70a4e3e7..c78ed5e5efb78a5c4e7d0f7403d0d231c5fb78dc 100644 (file)
@@ -18,6 +18,6 @@
 #define RZG2L_PORT_PINMUX(b, p, f)     ((b) * RZG2L_PINS_PER_PORT + (p) | ((f) << 16))
 
 /* Convert a port and pin label to its global pin index */
- #define RZG2L_GPIO(port, pin) ((port) * RZG2L_PINS_PER_PORT + (pin))
+#define RZG2L_GPIO(port, pin)  ((port) * RZG2L_PINS_PER_PORT + (pin))
 
 #endif /* __DT_BINDINGS_RZG2L_PINCTRL_H */
diff --git a/include/dt-bindings/pinctrl/rzv2m-pinctrl.h b/include/dt-bindings/pinctrl/rzv2m-pinctrl.h
new file mode 100644 (file)
index 0000000..525532c
--- /dev/null
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
+/*
+ * This header provides constants for Renesas RZ/V2M pinctrl bindings.
+ *
+ * Copyright (C) 2022 Renesas Electronics Corp.
+ *
+ */
+
+#ifndef __DT_BINDINGS_RZV2M_PINCTRL_H
+#define __DT_BINDINGS_RZV2M_PINCTRL_H
+
+#define RZV2M_PINS_PER_PORT    16
+
+/*
+ * Create the pin index from its bank and position numbers and store in
+ * the upper 16 bits the alternate function identifier
+ */
+#define RZV2M_PORT_PINMUX(b, p, f)     ((b) * RZV2M_PINS_PER_PORT + (p) | ((f) << 16))
+
+/* Convert a port and pin label to its global pin index */
+#define RZV2M_GPIO(port, pin)  ((port) * RZV2M_PINS_PER_PORT + (pin))
+
+#endif /* __DT_BINDINGS_RZV2M_PINCTRL_H */
index cbde3b1fa414bad81359711409f2606b4b4d5629..9f50dacbf7d637a373eb5b425101b5a447eb55b9 100644 (file)
@@ -369,6 +369,11 @@ enum pm_pinctrl_drive_strength {
        PM_PINCTRL_DRIVE_STRENGTH_12MA = 3,
 };
 
+enum pm_pinctrl_tri_state {
+       PM_PINCTRL_TRI_STATE_DISABLE = 0,
+       PM_PINCTRL_TRI_STATE_ENABLE = 1,
+};
+
 enum zynqmp_pm_shutdown_type {
        ZYNQMP_PM_SHUTDOWN_TYPE_SHUTDOWN = 0,
        ZYNQMP_PM_SHUTDOWN_TYPE_RESET = 1,
index 70b45d28e7a9293bc733d13f6241f770f359e3f9..487117ccb1bc26713a11147bf6d623df6145825a 100644 (file)
@@ -26,6 +26,26 @@ struct pin_config_item;
 struct gpio_chip;
 struct device_node;
 
+/**
+ * struct pingroup - provides information on pingroup
+ * @name: a name for pingroup
+ * @pins: an array of pins in the pingroup
+ * @npins: number of pins in the pingroup
+ */
+struct pingroup {
+       const char *name;
+       const unsigned int *pins;
+       size_t npins;
+};
+
+/* Convenience macro to define a single named or anonymous pingroup */
+#define PINCTRL_PINGROUP(_name, _pins, _npins) \
+(struct pingroup){                             \
+       .name = _name,                          \
+       .pins = _pins,                          \
+       .npins = _npins,                        \
+}
+
 /**
  * struct pinctrl_pin_desc - boards/machines provide information on their
  * pins, pads or other muxable units in this struct