]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
Merge tag 'pinctrl-v4.21-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 1 Jan 2019 21:19:16 +0000 (13:19 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 1 Jan 2019 21:19:16 +0000 (13:19 -0800)
Pull pin control updates from Linus Walleij:
 "We have no core changes but lots of incremental development in drivers
  all over the place: Renesas, NXP, Mediatek and Actions Semiconductor
  keep churning out new SoCs.

  I have some subtree maintainers for Renesas and Intel helping out to
  keep down the load, it's been working smoothly (Samsung also have a
  subtree but it was not used this cycle.)

  New drivers:

   - NXP (ex Freescale) i.MX 8 QXP SoC driver.

   - Mediatek MT6797 SoC driver.

   - Mediatek MT7629 SoC driver.

   - Actions Semiconductor S700 SoC driver.

   - Renesas RZ/A2 SoC driver.

   - Allwinner sunxi suniv F1C100 SoC driver.

   - Qualcomm PMS405 PMIC driver.

   - Microsemi Ocelot Jaguar2 SoC driver.

  Improvements:

   - Some RT improvements (using raw spinlocks where appropriate).

   - A lot of new pin sets on the Renesas PFC pin controllers.

   - GPIO hogs now work on the Qualcomm SPMI/SSBI pin controller GPIO
     chips, and Xway.

   - Major modernization of the Intel pin control drivers.

   - STM32 pin control driver will now synchronize usage of pins with
     another CPU using a hardware spinlock"

* tag 'pinctrl-v4.21-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (145 commits)
  dt-bindings: arm: fsl-scu: add imx8qm pinctrl support
  pinctrl: freescale: Break dependency on SOC_IMX8MQ for i.MX8MQ
  pinctrl: imx-scu: Depend on IMX_SCU
  pinctrl: ocelot: Add dependency on HAS_IOMEM
  pinctrl: ocelot: add MSCC Jaguar2 support
  pinctrl: bcm: ns: support updated DT binding as syscon subnode
  dt-bindings: pinctrl: bcm4708-pinmux: rework binding to use syscon
  MAINTAINERS: merge at91 pinctrl entries
  pinctrl: imx8qxp: break the dependency on SOC_IMX8QXP
  pinctrl: uniphier: constify uniphier_pinctrl_socdata
  pinctrl: mediatek: improve Kconfig dependencies
  pinctrl: msm: mark PM functions as __maybe_unused
  dt-bindings: pinctrl: sunxi: Add supply properties
  pinctrl: meson: meson8b: add the missing GPIO_GROUPs for BOOT and CARD
  pinctrl: meson: meson8: add the missing GPIO_GROUPs for BOOT and CARD
  pinctrl: meson: meson8: rename the "gpio" function to "gpio_periphs"
  pinctrl: meson: meson8: rename the "gpio" function to "gpio_periphs"
  pinctrl: meson: meson8b: fix the GPIO function for the GPIOAO pins
  pinctrl: meson: meson8: fix the GPIO function for the GPIOAO pins
  pinctrl: sh-pfc: Make pinmux_cfg_reg.var_field_width[] variable-length
  ...

117 files changed:
Documentation/devicetree/bindings/arm/freescale/fsl,scu.txt
Documentation/devicetree/bindings/pinctrl/actions,s700-pinctrl.txt [new file with mode: 0644]
Documentation/devicetree/bindings/pinctrl/allwinner,sunxi-pinctrl.txt
Documentation/devicetree/bindings/pinctrl/brcm,bcm4708-pinmux.txt
Documentation/devicetree/bindings/pinctrl/fsl,imx7ulp-pinctrl.txt
Documentation/devicetree/bindings/pinctrl/mscc,ocelot-pinctrl.txt
Documentation/devicetree/bindings/pinctrl/pinctrl-mt6797.txt [new file with mode: 0644]
Documentation/devicetree/bindings/pinctrl/pinctrl-mt7622.txt
Documentation/devicetree/bindings/pinctrl/qcom,pmic-gpio.txt
Documentation/devicetree/bindings/pinctrl/renesas,rza2-pinctrl.txt [new file with mode: 0644]
Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.txt
MAINTAINERS
drivers/pinctrl/Kconfig
drivers/pinctrl/Makefile
drivers/pinctrl/actions/Kconfig
drivers/pinctrl/actions/Makefile
drivers/pinctrl/actions/pinctrl-owl.c
drivers/pinctrl/actions/pinctrl-owl.h
drivers/pinctrl/actions/pinctrl-s700.c [new file with mode: 0644]
drivers/pinctrl/actions/pinctrl-s900.c
drivers/pinctrl/aspeed/Makefile
drivers/pinctrl/bcm/pinctrl-bcm2835.c
drivers/pinctrl/bcm/pinctrl-ns.c
drivers/pinctrl/freescale/Kconfig
drivers/pinctrl/freescale/Makefile
drivers/pinctrl/freescale/pinctrl-imx.c
drivers/pinctrl/freescale/pinctrl-imx.h
drivers/pinctrl/freescale/pinctrl-imx7ulp.c
drivers/pinctrl/freescale/pinctrl-imx8qxp.c [new file with mode: 0644]
drivers/pinctrl/freescale/pinctrl-scu.c [new file with mode: 0644]
drivers/pinctrl/intel/pinctrl-baytrail.c
drivers/pinctrl/intel/pinctrl-broxton.c
drivers/pinctrl/intel/pinctrl-cannonlake.c
drivers/pinctrl/intel/pinctrl-cedarfork.c
drivers/pinctrl/intel/pinctrl-cherryview.c
drivers/pinctrl/intel/pinctrl-denverton.c
drivers/pinctrl/intel/pinctrl-geminilake.c
drivers/pinctrl/intel/pinctrl-icelake.c
drivers/pinctrl/intel/pinctrl-intel.c
drivers/pinctrl/intel/pinctrl-intel.h
drivers/pinctrl/intel/pinctrl-lewisburg.c
drivers/pinctrl/intel/pinctrl-merrifield.c
drivers/pinctrl/intel/pinctrl-sunrisepoint.c
drivers/pinctrl/mediatek/Kconfig
drivers/pinctrl/mediatek/Makefile
drivers/pinctrl/mediatek/pinctrl-moore.c
drivers/pinctrl/mediatek/pinctrl-mt6797.c [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-mt7629.c [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-mtk-mt6797.h [new file with mode: 0644]
drivers/pinctrl/mediatek/pinctrl-paris.c
drivers/pinctrl/meson/pinctrl-meson-gxl.c
drivers/pinctrl/meson/pinctrl-meson8.c
drivers/pinctrl/meson/pinctrl-meson8b.c
drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
drivers/pinctrl/pinconf.c
drivers/pinctrl/pinctrl-amd.c
drivers/pinctrl/pinctrl-at91-pio4.c
drivers/pinctrl/pinctrl-lpc18xx.c
drivers/pinctrl/pinctrl-max77620.c
drivers/pinctrl/pinctrl-ocelot.c
drivers/pinctrl/pinctrl-rockchip.c
drivers/pinctrl/pinctrl-rza1.c
drivers/pinctrl/pinctrl-rza2.c [new file with mode: 0644]
drivers/pinctrl/pinctrl-rzn1.c
drivers/pinctrl/pinctrl-sx150x.c
drivers/pinctrl/pinctrl-xway.c
drivers/pinctrl/pinctrl-zynq.c
drivers/pinctrl/pinmux.c
drivers/pinctrl/qcom/pinctrl-msm.c
drivers/pinctrl/qcom/pinctrl-msm.h
drivers/pinctrl/qcom/pinctrl-sdm845.c
drivers/pinctrl/qcom/pinctrl-spmi-gpio.c
drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c
drivers/pinctrl/samsung/pinctrl-samsung.c
drivers/pinctrl/sh-pfc/core.c
drivers/pinctrl/sh-pfc/pfc-r8a7740.c
drivers/pinctrl/sh-pfc/pfc-r8a77470.c
drivers/pinctrl/sh-pfc/pfc-r8a7791.c
drivers/pinctrl/sh-pfc/pfc-r8a7792.c
drivers/pinctrl/sh-pfc/pfc-r8a7794.c
drivers/pinctrl/sh-pfc/pfc-r8a7795-es1.c
drivers/pinctrl/sh-pfc/pfc-r8a7795.c
drivers/pinctrl/sh-pfc/pfc-r8a7796.c
drivers/pinctrl/sh-pfc/pfc-r8a77965.c
drivers/pinctrl/sh-pfc/pfc-r8a77970.c
drivers/pinctrl/sh-pfc/pfc-r8a77980.c
drivers/pinctrl/sh-pfc/pfc-r8a77990.c
drivers/pinctrl/sh-pfc/pfc-r8a77995.c
drivers/pinctrl/sh-pfc/pfc-sh7264.c
drivers/pinctrl/sh-pfc/pfc-sh7269.c
drivers/pinctrl/sh-pfc/pfc-sh73a0.c
drivers/pinctrl/sh-pfc/pfc-sh7734.c
drivers/pinctrl/sh-pfc/sh_pfc.h
drivers/pinctrl/sprd/pinctrl-sprd.c
drivers/pinctrl/stm32/pinctrl-stm32.c
drivers/pinctrl/sunxi/Kconfig
drivers/pinctrl/sunxi/Makefile
drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c
drivers/pinctrl/sunxi/pinctrl-suniv-f1c100s.c [new file with mode: 0644]
drivers/pinctrl/sunxi/pinctrl-sunxi.c
drivers/pinctrl/sunxi/pinctrl-sunxi.h
drivers/pinctrl/uniphier/pinctrl-uniphier-core.c
drivers/pinctrl/uniphier/pinctrl-uniphier-ld11.c
drivers/pinctrl/uniphier/pinctrl-uniphier-ld20.c
drivers/pinctrl/uniphier/pinctrl-uniphier-ld4.c
drivers/pinctrl/uniphier/pinctrl-uniphier-ld6b.c
drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c
drivers/pinctrl/uniphier/pinctrl-uniphier-pro5.c
drivers/pinctrl/uniphier/pinctrl-uniphier-pxs2.c
drivers/pinctrl/uniphier/pinctrl-uniphier-pxs3.c
drivers/pinctrl/uniphier/pinctrl-uniphier-sld8.c
drivers/pinctrl/uniphier/pinctrl-uniphier.h
include/dt-bindings/pinctrl/bcm2835.h
include/dt-bindings/pinctrl/mt6797-pinfunc.h [new file with mode: 0644]
include/dt-bindings/pinctrl/pads-imx8qm.h [new file with mode: 0644]
include/dt-bindings/pinctrl/pads-imx8qxp.h [new file with mode: 0644]
include/dt-bindings/pinctrl/r7s9210-pinctrl.h [new file with mode: 0644]

index c20f38e56544f3d2af1b394cfa92fb9826a93d97..0af618b6a44806adf103094cb771c7b0824644f9 100644 (file)
@@ -88,13 +88,16 @@ Pinctrl bindings based on SCU Message Protocol
 This binding uses the i.MX common pinctrl binding[3].
 
 Required properties:
-- compatible:          Should be "fsl,imx8qxp-iomuxc".
+- compatible:          Should be one of:
+                       "fsl,imx8qm-iomuxc",
+                       "fsl,imx8qxp-iomuxc".
 
 Required properties for Pinctrl sub nodes:
 - fsl,pins:            Each entry consists of 3 integers which represents
                        the mux and config setting for one pin. The first 2
                        integers <pin_id mux_mode> are specified using a
                        PIN_FUNC_ID macro, which can be found in
+                       <dt-bindings/pinctrl/pads-imx8qm.h>,
                        <dt-bindings/pinctrl/pads-imx8qxp.h>.
                        The last integer CONFIG is the pad setting value like
                        pull-up on this pin.
diff --git a/Documentation/devicetree/bindings/pinctrl/actions,s700-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/actions,s700-pinctrl.txt
new file mode 100644 (file)
index 0000000..d13ff82
--- /dev/null
@@ -0,0 +1,170 @@
+Actions Semi S700 Pin Controller
+
+This binding describes the pin controller found in the S700 SoC.
+
+Required Properties:
+
+- compatible:   Should be "actions,s700-pinctrl"
+- reg:          Should contain the register base address and size of
+               the pin controller.
+- clocks:       phandle of the clock feeding the pin controller
+- gpio-controller: Marks the device node as a GPIO controller.
+- gpio-ranges: Specifies the mapping between gpio controller and
+               pin-controller pins.
+- #gpio-cells: Should be two. The first cell is the gpio pin number
+               and the second cell is used for optional parameters.
+- interrupt-controller: Marks the device node as an interrupt controller.
+- #interrupt-cells: Specifies the number of cells needed to encode an
+               interrupt.  Shall be set to 2.  The first cell
+               defines the interrupt number, the second encodes
+               the trigger flags described in
+               bindings/interrupt-controller/interrupts.txt
+- interrupts: The interrupt outputs from the controller. There is one GPIO
+              interrupt per GPIO bank. The number of interrupts listed depends
+              on the number of GPIO banks on the SoC. The interrupts must be
+              ordered by bank, starting with bank 0.
+
+Please refer to pinctrl-bindings.txt in this directory for details of the
+common pinctrl bindings used by client devices, including the meaning of the
+phrase "pin configuration node".
+
+The pin configuration nodes act as a container for an arbitrary number of
+subnodes. Each of these subnodes represents some desired configuration for a
+pin, a group, or a list of pins or groups. This configuration can include the
+mux function to select on those group(s), and various pin configuration
+parameters, such as pull-up, drive strength, etc.
+
+PIN CONFIGURATION NODES:
+
+The name of each subnode is not important; all subnodes should be enumerated
+and processed purely based on their content.
+
+Each subnode only affects those parameters that are explicitly listed. In
+other words, a subnode that lists a mux function but no pin configuration
+parameters implies no information about any pin configuration parameters.
+Similarly, a pin subnode that describes a pullup parameter implies no
+information about e.g. the mux function.
+
+Pinmux functions are available only for the pin groups while pinconf
+parameters are available for both pin groups and individual pins.
+
+The following generic properties as defined in pinctrl-bindings.txt are valid
+to specify in a pin configuration subnode:
+
+Required Properties:
+
+- pins:                An array of strings, each string containing the name of a pin.
+               These pins are used for selecting the pull control and schmitt
+               trigger parameters. The following are the list of pins
+               available:
+
+               eth_txd0, eth_txd1, eth_txd2, eth_txd3, eth_txen, eth_rxer,
+               eth_crs_dv, eth_rxd1, eth_rxd0, eth_rxd2, eth_rxd3, eth_ref_clk,
+               eth_mdc, eth_mdio, sirq0, sirq1, sirq2, i2s_d0, i2s_bclk0,
+               i2s_lrclk0, i2s_mclk0, i2s_d1, i2s_bclk1, i2s_lrclk1, i2s_mclk1,
+               pcm1_in, pcm1_clk, pcm1_sync, pcm1_out, ks_in0, ks_in1, ks_in2,
+               ks_in3, ks_out0, ks_out1, ks_out2, lvds_oep, lvds_oen, lvds_odp,
+               lvds_odn, lvds_ocp, lvds_ocn, lvds_obp, lvds_obn, lvds_oap,
+               lvds_oan, lvds_eep, lvds_een, lvds_edp, lvds_edn, lvds_ecp,
+               lvds_ecn, lvds_ebp, lvds_ebn, lvds_eap, lvds_ean, lcd0_d18,
+               lcd0_d2, dsi_dp3, dsi_dn3, dsi_dp1, dsi_dn1, dsi_cp, dsi_cn,
+               dsi_dp0, dsi_dn0, dsi_dp2, dsi_dn2, sd0_d0, sd0_d1, sd0_d2,
+               sd0_d3, sd1_d0, sd1_d1, sd1_d2, sd1_d3, sd0_cmd, sd0_clk,
+               sd1_cmd, sd1_clk, spi0_ss, spi0_miso, uart0_rx, uart0_tx,
+               uart2_rx, uart2_tx, uart2_rtsb, uart2_ctsb, uart3_rx, uart3_tx,
+               uart3_rtsb, uart3_ctsb, i2c0_sclk, i2c0_sdata, i2c1_sclk,
+               i2c1_sdata, i2c2_sdata, csi_dn0, csi_dp0, csi_dn1, csi_dp1,
+               csi_cn, csi_cp, csi_dn2, csi_dp2, csi_dn3, csi_dp3,
+               sensor0_pclk, sensor0_ckout, dnand_d0, dnand_d1, dnand_d2,
+               dnand_d3, dnand_d4, dnand_d5, dnand_d6, dnand_d7, dnand_wrb,
+               dnand_rdb, dnand_rdbn, dnand_dqs, dnand_dqsn, dnand_rb0,
+               dnand_ale, dnand_cle, dnand_ceb0, dnand_ceb1, dnand_ceb2,
+               dnand_ceb3, porb, clko_25m, bsel, pkg0, pkg1, pkg2, pkg3
+
+- groups:       An array of strings, each string containing the name of a pin
+                group. These pin groups are used for selecting the pinmux
+                functions.
+               rgmii_txd23_mfp, rgmii_rxd2_mfp, rgmii_rxd3_mfp, lcd0_d18_mfp,
+               rgmii_txd01_mfp, rgmii_txd0_mfp, rgmii_txd1_mfp, rgmii_txen_mfp,
+               rgmii_rxen_mfp, rgmii_rxd1_mfp, rgmii_rxd0_mfp, rgmii_ref_clk_mfp,
+               i2s_d0_mfp, i2s_pcm1_mfp, i2s0_pcm0_mfp, i2s1_pcm0_mfp,
+               i2s_d1_mfp, ks_in2_mfp, ks_in1_mfp, ks_in0_mfp, ks_in3_mfp,
+               ks_out0_mfp, ks_out1_mfp, ks_out2_mfp, lvds_o_pn_mfp, dsi_dn0_mfp,
+               dsi_dp2_mfp, lcd0_d2_mfp, dsi_dp3_mfp, dsi_dn3_mfp, dsi_dp0_mfp,
+               lvds_ee_pn_mfp, uart2_rx_tx_mfp, spi0_i2c_pcm_mfp, dsi_dnp1_cp_d2_mfp,
+               dsi_dnp1_cp_d17_mfp, lvds_e_pn_mfp, dsi_dn2_mfp, uart2_rtsb_mfp,
+               uart2_ctsb_mfp, uart3_rtsb_mfp, uart3_ctsb_mfp, sd0_d0_mfp, sd0_d1_mfp,
+               sd0_d2_d3_mfp, sd1_d0_d3_mfp, sd0_cmd_mfp, sd0_clk_mfp, sd1_cmd_mfp,
+               uart0_rx_mfp, clko_25m_mfp, csi_cn_cp_mfp, sens0_ckout_mfp, uart0_tx_mfp,
+               i2c0_mfp, csi_dn_dp_mfp, sen0_pclk_mfp, pcm1_in_mfp, pcm1_clk_mfp,
+               pcm1_sync_mfp, pcm1_out_mfp, dnand_data_wr_mfp, dnand_acle_ce0_mfp,
+               nand_ceb2_mfp, nand_ceb3_mfp
+
+               These pin groups are used for selecting the drive strength
+               parameters.
+
+               sirq_drv, rgmii_txd23_drv, rgmii_rxd23_drv, rgmii_txd01_txen_drv,
+               rgmii_rxer_drv, rgmii_crs_drv, rgmii_rxd10_drv, rgmii_ref_clk_drv,
+               smi_mdc_mdio_drv, i2s_d0_drv, i2s_bclk0_drv, i2s3_drv, i2s13_drv,
+               pcm1_drv, ks_in_drv, ks_out_drv, lvds_all_drv, lcd_d18_d2_drv,
+               dsi_all_drv, sd0_d0_d3_drv, sd0_cmd_drv, sd0_clk_drv, spi0_all_drv,
+               uart0_rx_drv, uart0_tx_drv, uart2_all_drv, i2c0_all_drv, i2c12_all_drv,
+               sens0_pclk_drv, sens0_ckout_drv, uart3_all_drv
+
+- function:    An array of strings, each string containing the name of the
+               pinmux functions. These functions can only be selected by
+               the corresponding pin groups. The following are the list of
+               pinmux functions available:
+
+               nor, eth_rgmii, eth_sgmii, spi0, spi1, spi2, spi3, seNs0, sens1,
+               uart0, uart1, uart2, uart3, uart4, uart5, uart6, i2s0, i2s1,
+               pcm1, pcm0, ks, jtag, pwm0, pwm1, pwm2, pwm3, pwm4, pwm5, p0,
+               sd0, sd1, sd2, i2c0, i2c1, i2c2, i2c3, dsi, lvds, usb30,
+               clko_25m, mipi_csi, nand, spdif, sirq0, sirq1, sirq2, bt, lcd0
+
+Optional Properties:
+
+- bias-pull-down: No arguments. The specified pins should be configured as
+               pull down.
+- bias-pull-up:   No arguments. The specified pins should be configured as
+               pull up.
+- input-schmitt-enable: No arguments: Enable schmitt trigger for the specified
+               pins
+- input-schmitt-disable: No arguments: Disable schmitt trigger for the specified
+               pins
+- drive-strength: Integer. Selects the drive strength for the specified
+               pins in mA.
+               Valid values are:
+               <2>
+               <4>
+               <8>
+               <12>
+
+Example:
+
+       pinctrl: pinctrl@e01b0000 {
+               compatible = "actions,s700-pinctrl";
+               reg = <0x0 0xe01b0000 0x0 0x1000>;
+               clocks = <&cmu CLK_GPIO>;
+               gpio-controller;
+               gpio-ranges = <&pinctrl 0 0 136>;
+               #gpio-cells = <2>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+                interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
+                             <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
+                             <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
+                             <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
+                             <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
+
+               uart3-default: uart3-default {
+                       pinmux {
+                               groups = "uart3_rtsb_mfp", "uart3_ctsb_mfp";
+                               function = "uart3";
+                       };
+                       pinconf {
+                               groups = "uart3_all_drv";
+                               drive-strength = <2>;
+                       };
+               };
+       };
index 258a4648ab813304b9008daf7572c32ee7b973ca..cf96b7c20e4dbba2b083fd0af7a23ed91d32943e 100644 (file)
@@ -29,6 +29,7 @@ Required properties:
   "allwinner,sun50i-h5-pinctrl"
   "allwinner,sun50i-h6-pinctrl"
   "allwinner,sun50i-h6-r-pinctrl"
+  "allwinner,suniv-f1c100s-pinctrl"
   "nextthing,gr8-pinctrl"
 
 - reg: Should contain the register physical address and length for the
@@ -43,6 +44,19 @@ Note: For backward compatibility reasons, the hosc and losc clocks are only
 required if you need to use the optional input-debounce property. Any new
 device tree should set them.
 
+Each pin bank, depending on the SoC, can have an associated regulator:
+
+- vcc-pa-supply: for the A10, A20, A31, A31s, A80 and R40 SoCs
+- vcc-pb-supply: for the A31, A31s, A80 and V3s SoCs
+- vcc-pc-supply: for the A10, A20, A31, A31s, A64, A80, H5, R40 and V3s SoCs
+- vcc-pd-supply: for the A23, A31, A31s, A64, A80, A83t, H3, H5 and R40 SoCs
+- vcc-pe-supply: for the A10, A20, A31, A31s, A64, A80, R40 and V3s SoCs
+- vcc-pf-supply: for the A10, A20, A31, A31s, A80, R40 and V3s SoCs
+- vcc-pg-supply: for the A10, A20, A31, A31s, A64, A80, H3, H5, R40 and V3s SoCs
+- vcc-ph-supply: for the A31, A31s and A80 SoCs
+- vcc-pl-supply: for the r-pinctrl of the A64, A80 and A83t SoCs
+- vcc-pm-supply: for the r-pinctrl of the A31, A31s and A80 SoCs
+
 Optional properties:
   - input-debounce: Array of debouncing periods in microseconds. One period per
     irq bank found in the controller. 0 if no setup required.
index 4fa9539070cb0df9e0beb76252c7a557c5e72353..8ab2d468dbdb8869e3f7ae98344aaf1111ad7792 100644 (file)
@@ -7,13 +7,15 @@ configure controller correctly.
 
 A list of pins varies across chipsets so few bindings are available.
 
+Node of the pinmux must be nested in the CRU (Central Resource Unit) "syscon"
+noce.
+
 Required properties:
 - compatible: must be one of:
        "brcm,bcm4708-pinmux"
        "brcm,bcm4709-pinmux"
        "brcm,bcm53012-pinmux"
-- reg: iomem address range of CRU (Central Resource Unit) pin registers
-- reg-names: "cru_gpio_control" - the only needed & supported reg right now
+- offset: offset of pin registers in the CRU block
 
 Functions and their groups available for all chipsets:
 - "spi": "spi_grp"
@@ -37,16 +39,12 @@ Example:
                #size-cells = <1>;
 
                cru@100 {
-                       compatible = "simple-bus";
+                       compatible = "syscon", "simple-mfd";
                        reg = <0x100 0x1a4>;
-                       ranges;
-                       #address-cells = <1>;
-                       #size-cells = <1>;
 
-                       pin-controller@1c0 {
+                       pinctrl {
                                compatible = "brcm,bcm4708-pinmux";
-                               reg = <0x1c0 0x24>;
-                               reg-names = "cru_gpio_control";
+                               offset = <0xc0>;
 
                                spi-pins {
                                        function = "spi";
index 44ad670ae11e14eec28685bddc1506789e4f5e61..bfa3703a744627db1d71a1a519abd04ad2d59b66 100644 (file)
@@ -7,55 +7,47 @@ Note:
 This binding doc is only for the IOMUXC1 support in A7 Domain and it only
 supports generic pin config.
 
-Please also refer pinctrl-bindings.txt in this directory for generic pinctrl
-binding.
-
-=== Pin Controller Node ===
+Please refer to fsl,imx-pinctrl.txt in this directory for common binding
+part and usage.
 
 Required properties:
-- compatible:  "fsl,imx7ulp-iomuxc1"
-- reg:         Should contain the base physical address and size of the iomuxc
-               registers.
-
-=== Pin Configuration Node ===
-- pinmux: One integers array, represents a group of pins mux setting.
-       The format is pinmux = <PIN_FUNC_ID>, PIN_FUNC_ID is a pin working on
-       a specific function.
-
-       NOTE: i.MX7ULP PIN_FUNC_ID consists of 4 integers as it shares one mux
-       and config register as follows:
-       <mux_conf_reg input_reg mux_mode input_val>
-
-       Refer to imx7ulp-pinfunc.h in in device tree source folder for all
-       available imx7ulp PIN_FUNC_ID.
-
-Optional Properties:
-- drive-strength               Integer. Controls Drive Strength
-                                       0: Standard
-                                       1: Hi Driver
-- drive-push-pull              Bool. Enable Pin Push-pull
-- drive-open-drain             Bool. Enable Pin Open-drian
-- slew-rate:                   Integer. Controls Slew Rate
-                                       0: Standard
-                                       1: Slow
-- bias-disable:                        Bool. Pull disabled
-- bias-pull-down:              Bool. Pull down on pin
-- bias-pull-up:                        Bool. Pull up on pin
+- compatible:  "fsl,imx7ulp-iomuxc1".
+- fsl,pins:    Each entry consists of 5 integers which represents the mux
+               and config setting for one pin. The first 4 integers
+               <mux_conf_reg input_reg mux_mode input_val> are specified
+               using a PIN_FUNC_ID macro, which can be found in
+               imx7ulp-pinfunc.h in the device tree source folder.
+               The last integer CONFIG is the pad setting value like
+               pull-up on this pin.
+
+               Please refer to i.MX7ULP Reference Manual for detailed
+               CONFIG settings.
+
+CONFIG bits definition:
+PAD_CTL_OBE            (1 << 17)
+PAD_CTL_IBE            (1 << 16)
+PAD_CTL_LK             (1 << 16)
+PAD_CTL_DSE_HI         (1 << 6)
+PAD_CTL_DSE_STD                (0 << 6)
+PAD_CTL_ODE            (1 << 5)
+PAD_CTL_PUSH_PULL      (0 << 5)
+PAD_CTL_SRE_SLOW       (1 << 2)
+PAD_CTL_SRE_STD                (0 << 2)
+PAD_CTL_PE             (1 << 0)
 
 Examples:
 #include "imx7ulp-pinfunc.h"
 
 /* Pin Controller Node */
-iomuxc1: iomuxc@40ac0000 {
+iomuxc1: pinctrl@40ac0000 {
        compatible = "fsl,imx7ulp-iomuxc1";
        reg = <0x40ac0000 0x1000>;
 
        /* Pin Configuration Node */
        pinctrl_lpuart4: lpuart4grp {
-               pinmux = <
-                       IMX7ULP_PAD_PTC3__LPUART4_RX
-                       IMX7ULP_PAD_PTC2__LPUART4_TX
+               fsl,pins = <
+                       IMX7ULP_PAD_PTC3__LPUART4_RX    0x1
+                       IMX7ULP_PAD_PTC2__LPUART4_TX    0x1
                >;
-               bias-pull-up;
        };
 };
index 24a210e0c59add5676516d62c72d13769eafc032..32a8a8fa7805dbc06e26684864493e75502dec9b 100644 (file)
@@ -2,7 +2,8 @@ Microsemi Ocelot pin controller Device Tree Bindings
 ----------------------------------------------------
 
 Required properties:
- - compatible          : Should be "mscc,ocelot-pinctrl"
+ - compatible          : Should be "mscc,ocelot-pinctrl" or
+                               "mscc,jaguar2-pinctrl"
  - reg                 : Address and length of the register set for the device
  - gpio-controller     : Indicates this device is a GPIO controller
  - #gpio-cells         : Must be 2.
diff --git a/Documentation/devicetree/bindings/pinctrl/pinctrl-mt6797.txt b/Documentation/devicetree/bindings/pinctrl/pinctrl-mt6797.txt
new file mode 100644 (file)
index 0000000..bd83401
--- /dev/null
@@ -0,0 +1,83 @@
+* MediaTek MT6797 Pin Controller
+
+The MediaTek's MT6797 Pin controller is used to control SoC pins.
+
+Required properties:
+- compatible: Value should be one of the following.
+              "mediatek,mt6797-pinctrl", compatible with mt6797 pinctrl.
+- reg:        Should contain address and size for gpio, iocfgl, iocfgb,
+              iocfgr and iocfgt register bases.
+- reg-names:  An array of strings describing the "reg" entries. Must
+              contain "gpio", "iocfgl", "iocfgb", "iocfgr", "iocfgt".
+- gpio-controller: Marks the device node as a gpio controller.
+- #gpio-cells: Should be two. The first cell is the gpio pin number
+               and the second cell is used for optional parameters.
+
+Optional properties:
+- interrupt-controller: Marks the device node as an interrupt controller.
+- #interrupt-cells: Should be two.
+- interrupts : The interrupt outputs from the controller.
+
+Please refer to pinctrl-bindings.txt in this directory for details of the
+common pinctrl bindings used by client devices.
+
+Subnode format
+A pinctrl node should contain at least one subnodes representing the
+pinctrl groups available on the machine. Each subnode will list the
+pins it needs, and how they should be configured, with regard to muxer
+configuration, pullups, drive strength, input enable/disable and input schmitt.
+
+    node {
+        pinmux = <PIN_NUMBER_PINMUX>;
+        GENERIC_PINCONFIG;
+    };
+
+Required properties:
+- pinmux: Integer array, represents gpio pin number and mux setting.
+    Supported pin number and mux varies for different SoCs, and are defined
+    as macros in dt-bindings/pinctrl/<soc>-pinfunc.h directly.
+
+Optional properties:
+- GENERIC_PINCONFIG: is the generic pinconfig options to use, bias-disable,
+    bias-pull, bias-pull-down, input-enable, input-schmitt-enable,
+    input-schmitt-disable, output-enable output-low, output-high,
+    drive-strength, and slew-rate are valid.
+
+    Valid arguments for 'slew-rate' are '0' for no slew rate controlled and
+    '1' for slower slew rate respectively. Valid arguments for 'drive-strength'
+    is limited, such as 2, 4, 8, 12, or 16 in mA.
+
+    Some optional vendor properties as defined are valid to specify in a
+    pinconf subnode:
+    - mediatek,tdsel: An integer describing the steps for output level shifter
+      duty cycle when asserted (high pulse width adjustment). Valid arguments
+      are from 0 to 15.
+    - mediatek,rdsel: An integer describing the steps for input level shifter
+      duty cycle when asserted (high pulse width adjustment). Valid arguments
+      are from 0 to 63.
+    - mediatek,pull-up-adv: An integer describing the code R1R0 as 0, 1, 2
+      or 3 for the advanced pull-up resistors.
+    - mediatek,pull-down-adv: An integer describing the code R1R0 as 0, 1, 2,
+      or 3 for the advanced pull-down resistors.
+
+Examples:
+
+        pio: pinctrl@10005000 {
+                compatible = "mediatek,mt6797-pinctrl";
+                reg = <0 0x10005000 0 0x1000>,
+                      <0 0x10002000 0 0x400>,
+                      <0 0x10002400 0 0x400>,
+                      <0 0x10002800 0 0x400>,
+                      <0 0x10002C00 0 0x400>;
+                reg-names = "gpio", "iocfgl", "iocfgb",
+                            "iocfgr", "iocfgt";
+                gpio-controller;
+                #gpio-cells = <2>;
+
+                uart1_pins_a: uart1 {
+                        pins1 {
+                                pinmux = <MT6797_GPIO232__FUNC_URXD1>,
+                                         <MT6797_GPIO233__FUNC_UTXD1>;
+                        };
+                };
+        };
index 3b695131c51bdee18a8f706f845ba5a64868d79d..7a7aca1ed705b9845976dfe787111126e7a08d7a 100644 (file)
@@ -3,6 +3,7 @@
 Required properties for the root node:
  - compatible: Should be one of the following
               "mediatek,mt7622-pinctrl" for MT7622 SoC
+              "mediatek,mt7629-pinctrl" for MT7629 SoC
  - reg: offset and length of the pinctrl space
 
  - gpio-controller: Marks the device node as a GPIO controller.
@@ -324,6 +325,136 @@ group.
        "uart4_2_rts_cts"               "uart"          95, 96
        "watchdog"                      "watchdog"      78
 
+
+== Valid values for pins, function and groups on MT7629 ==
+
+       Pin #:  Valid values for pins
+       -----------------------------
+       PIN 0: "TOP_5G_CLK"
+       PIN 1: "TOP_5G_DATA"
+       PIN 2: "WF0_5G_HB0"
+       PIN 3: "WF0_5G_HB1"
+       PIN 4: "WF0_5G_HB2"
+       PIN 5: "WF0_5G_HB3"
+       PIN 6: "WF0_5G_HB4"
+       PIN 7: "WF0_5G_HB5"
+       PIN 8: "WF0_5G_HB6"
+       PIN 9: "XO_REQ"
+       PIN 10: "TOP_RST_N"
+       PIN 11: "SYS_WATCHDOG"
+       PIN 12: "EPHY_LED0_N_JTDO"
+       PIN 13: "EPHY_LED1_N_JTDI"
+       PIN 14: "EPHY_LED2_N_JTMS"
+       PIN 15: "EPHY_LED3_N_JTCLK"
+       PIN 16: "EPHY_LED4_N_JTRST_N"
+       PIN 17: "WF2G_LED_N"
+       PIN 18: "WF5G_LED_N"
+       PIN 19: "I2C_SDA"
+       PIN 20: "I2C_SCL"
+       PIN 21: "GPIO_9"
+       PIN 22: "GPIO_10"
+       PIN 23: "GPIO_11"
+       PIN 24: "GPIO_12"
+       PIN 25: "UART1_TXD"
+       PIN 26: "UART1_RXD"
+       PIN 27: "UART1_CTS"
+       PIN 28: "UART1_RTS"
+       PIN 29: "UART2_TXD"
+       PIN 30: "UART2_RXD"
+       PIN 31: "UART2_CTS"
+       PIN 32: "UART2_RTS"
+       PIN 33: "MDI_TP_P1"
+       PIN 34: "MDI_TN_P1"
+       PIN 35: "MDI_RP_P1"
+       PIN 36: "MDI_RN_P1"
+       PIN 37: "MDI_RP_P2"
+       PIN 38: "MDI_RN_P2"
+       PIN 39: "MDI_TP_P2"
+       PIN 40: "MDI_TN_P2"
+       PIN 41: "MDI_TP_P3"
+       PIN 42: "MDI_TN_P3"
+       PIN 43: "MDI_RP_P3"
+       PIN 44: "MDI_RN_P3"
+       PIN 45: "MDI_RP_P4"
+       PIN 46: "MDI_RN_P4"
+       PIN 47: "MDI_TP_P4"
+       PIN 48: "MDI_TN_P4"
+       PIN 49: "SMI_MDC"
+       PIN 50: "SMI_MDIO"
+       PIN 51: "PCIE_PERESET_N"
+       PIN 52: "PWM_0"
+       PIN 53: "GPIO_0"
+       PIN 54: "GPIO_1"
+       PIN 55: "GPIO_2"
+       PIN 56: "GPIO_3"
+       PIN 57: "GPIO_4"
+       PIN 58: "GPIO_5"
+       PIN 59: "GPIO_6"
+       PIN 60: "GPIO_7"
+       PIN 61: "GPIO_8"
+       PIN 62: "SPI_CLK"
+       PIN 63: "SPI_CS"
+       PIN 64: "SPI_MOSI"
+       PIN 65: "SPI_MISO"
+       PIN 66: "SPI_WP"
+       PIN 67: "SPI_HOLD"
+       PIN 68: "UART0_TXD"
+       PIN 69: "UART0_RXD"
+       PIN 70: "TOP_2G_CLK"
+       PIN 71: "TOP_2G_DATA"
+       PIN 72: "WF0_2G_HB0"
+       PIN 73: "WF0_2G_HB1"
+       PIN 74: "WF0_2G_HB2"
+       PIN 75: "WF0_2G_HB3"
+       PIN 76: "WF0_2G_HB4"
+       PIN 77: "WF0_2G_HB5"
+       PIN 78: "WF0_2G_HB6"
+
+Valid values for function are:
+       "eth", "i2c", "led", "flash", "pcie", "pwm", "spi", "uart",
+       "watchdog", "wifi"
+
+Valid values for groups are:
+       Valid value                     function        pins (in pin#)
+       ----------------------------------------------------------------
+       "mdc_mdio"                      "eth"           23, 24
+       "i2c_0"                         "i2c"           19, 20
+       "i2c_1"                         "i2c"           53, 54
+       "ephy_leds"                     "led"           12, 13, 14, 15, 16,
+                                                       17, 18
+       "ephy0_led"                     "led"           12
+       "ephy1_led"                     "led"           13
+       "ephy2_led"                     "led"           14
+       "ephy3_led"                     "led"           15
+       "ephy4_led"                     "led"           16
+       "wf2g_led"                      "led"           17
+       "wf5g_led"                      "led"           18
+       "snfi"                          "flash"         62, 63, 64, 65, 66, 67
+       "spi_nor"                       "flash"         62, 63, 64, 65, 66, 67
+       "pcie_pereset"                  "pcie"          51
+       "pcie_wake"                     "pcie"          55
+       "pcie_clkreq"                   "pcie"          56
+       "pwm_0"                         "pwm"           52
+       "pwm_1"                         "pwm"           61
+       "spi_0"                         "spi"           21, 22, 23, 24
+       "spi_1"                         "spi"           62, 63, 64, 65
+       "spi_wp"                        "spi"           66
+       "spi_hold"                      "spi"           67
+       "uart0_txd_rxd"                 "uart"          68, 69
+       "uart1_0_txd_rxd"               "uart"          25, 26
+       "uart1_0_cts_rts"               "uart"          27, 28
+       "uart1_1_txd_rxd"               "uart"          53, 54
+       "uart1_1_cts_rts"               "uart"          55, 56
+       "uart2_0_txd_rxd"               "uart"          29, 30
+       "uart2_0_cts_rts"               "uart"          31, 32
+       "uart2_1_txd_rxd"               "uart"          57, 58
+       "uart2_1_cts_rts"               "uart"          59, 60
+       "watchdog"                      "watchdog"      11
+       "wf0_2g"                        "wifi"          70, 71, 72, 73, 74,
+                                                       75, 76, 77, 78
+       "wf0_5g"                        "wifi"          0, 1, 2, 3, 4, 5, 6,
+                                                       7, 8, 9, 10
+
 Example:
 
        pio: pinctrl@10211000 {
index ab4000eab07dfdbbeb76614a33d007c0a074a7d5..759aa1732e480c8b3428cf5c2c13738cf8d9db26 100644 (file)
@@ -92,7 +92,7 @@ to specify in a pin configuration subnode:
                    gpio1-gpio26 for pm8998
                    gpio1-gpio22 for pma8084
                    gpio1-gpio10 for pmi8994
-                   gpio1-gpio11 for pms405
+                   gpio1-gpio12 for pms405 (holes on gpio1, gpio9 and gpio10)
 
 - function:
        Usage: required
diff --git a/Documentation/devicetree/bindings/pinctrl/renesas,rza2-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/renesas,rza2-pinctrl.txt
new file mode 100644 (file)
index 0000000..a63ccd4
--- /dev/null
@@ -0,0 +1,87 @@
+Renesas RZ/A2 combined Pin and GPIO controller
+
+The Renesas SoCs of the RZ/A2 series feature a combined Pin and GPIO controller.
+Pin multiplexing and GPIO configuration is performed on a per-pin basis.
+Each port features up to 8 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.
+
+Pin controller node
+-------------------
+
+Required properties:
+  - compatible: shall be:
+    - "renesas,r7s9210-pinctrl": for RZ/A2M
+  - reg
+    Address base and length of the memory area where the pin controller
+    hardware is mapped to.
+  - gpio-controller
+    This pin controller also controls pins as GPIO
+  - #gpio-cells
+    Must be 2
+  - gpio-ranges
+    Expresses the total number of GPIO ports/pins in this SoC
+
+Example: Pin controller node for RZ/A2M SoC (r7s9210)
+
+       pinctrl: pin-controller@fcffe000 {
+               compatible = "renesas,r7s9210-pinctrl";
+               reg = <0xfcffe000 0x1000>;
+
+               gpio-controller;
+               #gpio-cells = <2>;
+               gpio-ranges = <&pinctrl 0 0 176>;
+       };
+
+Sub-nodes
+---------
+
+The child nodes of the pin controller designate pins to be used for
+specific peripheral functions or as GPIO.
+
+- Pin multiplexing sub-nodes:
+  A pin multiplexing sub-node describes how to configure a set of
+  (or a single) pin in some desired alternate function mode.
+  The values for the pinmux properties are a combination of port name, pin
+  number and the desired function index. Use the RZA2_PINMUX macro located
+  in include/dt-bindings/pinctrl/r7s9210-pinctrl.h to easily define these.
+  For assigning GPIO pins, use the macro RZA2_PIN also in r7s9210-pinctrl.h
+  to express the desired port pin.
+
+  Required properties:
+    - pinmux:
+      integer array representing pin number and pin multiplexing configuration.
+      When a pin has to be configured in alternate function mode, use this
+      property to identify the pin by its global index, and provide its
+      alternate function configuration number along with it.
+      When multiple pins are required to be configured as part of the same
+      alternate function they shall be specified as members of the same
+      argument list of a single "pinmux" property.
+      Helper macros to ease assembling the pin index from its position
+      (port where it sits on and pin number) and alternate function identifier
+      are provided by the pin controller header file at:
+      <dt-bindings/pinctrl/r7s9210-pinctrl.h>
+      Integers values in "pinmux" argument list are assembled as:
+      ((PORT * 8 + PIN) | MUX_FUNC << 16)
+
+  Example: Board specific pins configuration
+
+       &pinctrl {
+               /* Serial Console */
+               scif4_pins: serial4 {
+                       pinmux = <RZA2_PINMUX(PORT9, 0, 4)>,    /* TxD4 */
+                                <RZA2_PINMUX(PORT9, 1, 4)>;    /* RxD4 */
+               };
+       };
+
+  Example: Assigning a GPIO:
+
+       leds {
+               status = "okay";
+               compatible = "gpio-leds";
+
+               led0 {
+                       /* P6_0 */
+                       gpios = <&pinctrl RZA2_PIN(PORT6, 0) GPIO_ACTIVE_HIGH>;
+               };
+       };
index ef4f2ff4a1aae3390cde17fd7d0a48063330a03a..48df30a36b01423fb59e6081dae3afee53fb6f7f 100644 (file)
@@ -56,6 +56,7 @@ Optional properties:
    More details in Documentation/devicetree/bindings/gpio/gpio.txt.
  - st,bank-ioport: should correspond to the EXTI IOport selection (EXTI line
    used to select GPIOs as interrupts).
+ - hwlocks: reference to a phandle of a hardware spinlock provider node.
 
 Example 1:
 #include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
index 4825cd8f23be79595dd6bbc160629c85af4d23d4..9acc41305a49a47ce1813985b296b31ca995cad3 100644 (file)
@@ -11919,18 +11919,12 @@ F:    Documentation/driver-api/pinctl.rst
 F:     drivers/pinctrl/
 F:     include/linux/pinctrl/
 
-PIN CONTROLLER - ATMEL AT91
-M:     Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
-L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
-S:     Maintained
-F:     drivers/pinctrl/pinctrl-at91.*
-
-PIN CONTROLLER - ATMEL AT91 PIO4
+PIN CONTROLLER - MICROCHIP AT91
 M:     Ludovic Desroches <ludovic.desroches@microchip.com>
 L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 L:     linux-gpio@vger.kernel.org
 S:     Supported
-F:     drivers/pinctrl/pinctrl-at91-pio4.*
+F:     drivers/pinctrl/pinctrl-at91*
 
 PIN CONTROLLER - FREESCALE
 M:     Dong Aisheng <aisheng.dong@nxp.com>
@@ -11966,11 +11960,11 @@ F:    Documentation/devicetree/bindings/pinctrl/qcom,*.txt
 F:     drivers/pinctrl/qcom/
 
 PIN CONTROLLER - RENESAS
-M:     Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 M:     Geert Uytterhoeven <geert+renesas@glider.be>
 L:     linux-renesas-soc@vger.kernel.org
 T:     git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git sh-pfc
 S:     Maintained
+F:     drivers/pinctrl/pinctrl-rz*
 F:     drivers/pinctrl/sh-pfc/
 
 PIN CONTROLLER - SAMSUNG
index 4d8c00eac7420a8abfb5ceb4fd4769120f11dbe6..2764d713fea8b37928d44110d3894e12f3e3eff3 100644 (file)
@@ -195,6 +195,17 @@ config PINCTRL_RZA1
        help
          This selects pinctrl driver for Renesas RZ/A1 platforms.
 
+config PINCTRL_RZA2
+       bool "Renesas RZ/A2 gpio and pinctrl driver"
+       depends on OF
+       depends on ARCH_R7S9210 || 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/A2 platforms.
+
 config PINCTRL_RZN1
        bool "Renesas RZ/N1 pinctrl driver"
        depends on OF
@@ -339,15 +350,15 @@ config PINCTRL_RK805
          This selects the pinctrl driver for RK805.
 
 config PINCTRL_OCELOT
-       bool "Pinctrl driver for the Microsemi Ocelot SoCs"
-       default y
+       bool "Pinctrl driver for the Microsemi Ocelot and Jaguar2 SoCs"
        depends on OF
-       depends on MSCC_OCELOT || COMPILE_TEST
+       depends on HAS_IOMEM
        select GPIOLIB
        select GPIOLIB_IRQCHIP
        select GENERIC_PINCONF
        select GENERIC_PINCTRL_GROUPS
        select GENERIC_PINMUX_FUNCTIONS
+       select OF_GPIO
        select REGMAP_MMIO
 
 source "drivers/pinctrl/actions/Kconfig"
index 18a13c1e2c21f365988967b1edad7f816b7780a6..712184b74a5c7d547f0500ad1635917e0dceec41 100644 (file)
@@ -27,6 +27,7 @@ obj-$(CONFIG_PINCTRL_PIC32)   += pinctrl-pic32.o
 obj-$(CONFIG_PINCTRL_PISTACHIO)        += pinctrl-pistachio.o
 obj-$(CONFIG_PINCTRL_ROCKCHIP) += pinctrl-rockchip.o
 obj-$(CONFIG_PINCTRL_RZA1)     += pinctrl-rza1.o
+obj-$(CONFIG_PINCTRL_RZA2)     += pinctrl-rza2.o
 obj-$(CONFIG_PINCTRL_RZN1)     += pinctrl-rzn1.o
 obj-$(CONFIG_PINCTRL_SINGLE)   += pinctrl-single.o
 obj-$(CONFIG_PINCTRL_SIRF)     += sirf/
index 2397cb0f6011f9aeec13e0d824b24aced6da2814..c7ed1d48180229564cc3679a62a4701df2094223 100644 (file)
@@ -9,6 +9,12 @@ config PINCTRL_OWL
        help
          Say Y here to enable Actions Semi OWL pinctrl driver
 
+config PINCTRL_S700
+       bool "Actions Semi S700 pinctrl driver"
+       depends on PINCTRL_OWL
+       help
+         Say Y here to enable Actions Semi S700 pinctrl driver
+
 config PINCTRL_S900
        bool "Actions Semi S900 pinctrl driver"
        depends on PINCTRL_OWL
index bd232d28400fc2074a22396b531cc8ef3d930da8..86521ed837ddb77ee0407dd7da7397e70415222c 100644 (file)
@@ -1,2 +1,3 @@
 obj-$(CONFIG_PINCTRL_OWL)      += pinctrl-owl.o
+obj-$(CONFIG_PINCTRL_S700)     += pinctrl-s700.o
 obj-$(CONFIG_PINCTRL_S900)     += pinctrl-s900.o
index 9d18c02f192b3ef8cc5e5ea4b109458ce28744de..5dfe7188a5f84914a589eb384ff0234dacc134aa 100644 (file)
@@ -246,60 +246,6 @@ static int owl_pad_pinconf_reg(const struct owl_padinfo *info,
        return 0;
 }
 
-static int owl_pad_pinconf_arg2val(const struct owl_padinfo *info,
-                               unsigned int param,
-                               u32 *arg)
-{
-       switch (param) {
-       case PIN_CONFIG_BIAS_BUS_HOLD:
-               *arg = OWL_PINCONF_PULL_HOLD;
-               break;
-       case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
-               *arg = OWL_PINCONF_PULL_HIZ;
-               break;
-       case PIN_CONFIG_BIAS_PULL_DOWN:
-               *arg = OWL_PINCONF_PULL_DOWN;
-               break;
-       case PIN_CONFIG_BIAS_PULL_UP:
-               *arg = OWL_PINCONF_PULL_UP;
-               break;
-       case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
-               *arg = (*arg >= 1 ? 1 : 0);
-               break;
-       default:
-               return -ENOTSUPP;
-       }
-
-       return 0;
-}
-
-static int owl_pad_pinconf_val2arg(const struct owl_padinfo *padinfo,
-                               unsigned int param,
-                               u32 *arg)
-{
-       switch (param) {
-       case PIN_CONFIG_BIAS_BUS_HOLD:
-               *arg = *arg == OWL_PINCONF_PULL_HOLD;
-               break;
-       case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
-               *arg = *arg == OWL_PINCONF_PULL_HIZ;
-               break;
-       case PIN_CONFIG_BIAS_PULL_DOWN:
-               *arg = *arg == OWL_PINCONF_PULL_DOWN;
-               break;
-       case PIN_CONFIG_BIAS_PULL_UP:
-               *arg = *arg == OWL_PINCONF_PULL_UP;
-               break;
-       case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
-               *arg = *arg == 1;
-               break;
-       default:
-               return -ENOTSUPP;
-       }
-
-       return 0;
-}
-
 static int owl_pin_config_get(struct pinctrl_dev *pctrldev,
                                unsigned int pin,
                                unsigned long *config)
@@ -318,7 +264,10 @@ static int owl_pin_config_get(struct pinctrl_dev *pctrldev,
 
        arg = owl_read_field(pctrl, reg, bit, width);
 
-       ret = owl_pad_pinconf_val2arg(info, param, &arg);
+       if (!pctrl->soc->padctl_val2arg)
+               return -ENOTSUPP;
+
+       ret = pctrl->soc->padctl_val2arg(info, param, &arg);
        if (ret)
                return ret;
 
@@ -349,7 +298,10 @@ static int owl_pin_config_set(struct pinctrl_dev *pctrldev,
                if (ret)
                        return ret;
 
-               ret = owl_pad_pinconf_arg2val(info, param, &arg);
+               if (!pctrl->soc->padctl_arg2val)
+                       return -ENOTSUPP;
+
+               ret = pctrl->soc->padctl_arg2val(info, param, &arg);
                if (ret)
                        return ret;
 
@@ -787,7 +739,7 @@ static void owl_gpio_irq_mask(struct irq_data *data)
        val = readl_relaxed(gpio_base + port->intc_msk);
        if (val == 0)
                owl_gpio_update_reg(gpio_base + port->intc_ctl,
-                                       OWL_GPIO_CTLR_ENABLE, false);
+                                       OWL_GPIO_CTLR_ENABLE + port->shared_ctl_offset * 5, false);
 
        raw_spin_unlock_irqrestore(&pctrl->lock, flags);
 }
@@ -811,7 +763,8 @@ static void owl_gpio_irq_unmask(struct irq_data *data)
 
        /* enable port interrupt */
        value = readl_relaxed(gpio_base + port->intc_ctl);
-       value |= BIT(OWL_GPIO_CTLR_ENABLE) | BIT(OWL_GPIO_CTLR_SAMPLE_CLK_24M);
+       value |= ((BIT(OWL_GPIO_CTLR_ENABLE) | BIT(OWL_GPIO_CTLR_SAMPLE_CLK_24M))
+                       << port->shared_ctl_offset * 5);
        writel_relaxed(value, gpio_base + port->intc_ctl);
 
        /* enable GPIO interrupt */
@@ -849,7 +802,7 @@ static void owl_gpio_irq_ack(struct irq_data *data)
        raw_spin_lock_irqsave(&pctrl->lock, flags);
 
        owl_gpio_update_reg(gpio_base + port->intc_ctl,
-                               OWL_GPIO_CTLR_PENDING, true);
+                               OWL_GPIO_CTLR_PENDING + port->shared_ctl_offset * 5, true);
 
        raw_spin_unlock_irqrestore(&pctrl->lock, flags);
 }
index a724d1d406d47351050bdb2bd293f237b78d35e9..dae2e8363fd5d7e63f6a22ee7c61c6e9ac047579 100644 (file)
 #define OWL_PINCONF_SLEW_SLOW 0
 #define OWL_PINCONF_SLEW_FAST 1
 
-enum owl_pinconf_pull {
-       OWL_PINCONF_PULL_HIZ,
-       OWL_PINCONF_PULL_DOWN,
-       OWL_PINCONF_PULL_UP,
-       OWL_PINCONF_PULL_HOLD,
-};
+#define MUX_PG(group_name, reg, shift, width)                          \
+       {                                                               \
+               .name = #group_name,                                    \
+               .pads = group_name##_pads,                              \
+               .npads = ARRAY_SIZE(group_name##_pads),                 \
+               .funcs = group_name##_funcs,                            \
+               .nfuncs = ARRAY_SIZE(group_name##_funcs),               \
+               .mfpctl_reg  = MFCTL##reg,                              \
+               .mfpctl_shift = shift,                                  \
+               .mfpctl_width = width,                                  \
+               .drv_reg = -1,                                          \
+               .drv_shift = -1,                                        \
+               .drv_width = -1,                                        \
+               .sr_reg = -1,                                           \
+               .sr_shift = -1,                                         \
+               .sr_width = -1,                                         \
+       }
+
+#define DRV_PG(group_name, reg, shift, width)                          \
+       {                                                               \
+               .name = #group_name,                                    \
+               .pads = group_name##_pads,                              \
+               .npads = ARRAY_SIZE(group_name##_pads),                 \
+               .mfpctl_reg  = -1,                                      \
+               .mfpctl_shift = -1,                                     \
+               .mfpctl_width = -1,                                     \
+               .drv_reg = PAD_DRV##reg,                                \
+               .drv_shift = shift,                                     \
+               .drv_width = width,                                     \
+               .sr_reg = -1,                                           \
+               .sr_shift = -1,                                         \
+               .sr_width = -1,                                         \
+       }
+
+#define SR_PG(group_name, reg, shift, width)                           \
+       {                                                               \
+               .name = #group_name,                                    \
+               .pads = group_name##_pads,                              \
+               .npads = ARRAY_SIZE(group_name##_pads),                 \
+               .mfpctl_reg  = -1,                                      \
+               .mfpctl_shift = -1,                                     \
+               .mfpctl_width = -1,                                     \
+               .drv_reg = -1,                                          \
+               .drv_shift = -1,                                        \
+               .drv_width = -1,                                        \
+               .sr_reg = PAD_SR##reg,                                  \
+               .sr_shift = shift,                                      \
+               .sr_width = width,                                      \
+       }
+
+#define FUNCTION(fname)                                        \
+       {                                               \
+               .name = #fname,                         \
+               .groups = fname##_groups,               \
+               .ngroups = ARRAY_SIZE(fname##_groups),  \
+       }
+
+/* PAD PULL UP/DOWN CONFIGURES */
+#define PULLCTL_CONF(pull_reg, pull_sft, pull_wdt)     \
+       {                                               \
+               .reg = PAD_PULLCTL##pull_reg,           \
+               .shift = pull_sft,                      \
+               .width = pull_wdt,                      \
+       }
+
+#define PAD_PULLCTL_CONF(pad_name, pull_reg, pull_sft, pull_wdt)       \
+       struct owl_pullctl pad_name##_pullctl_conf                      \
+               = PULLCTL_CONF(pull_reg, pull_sft, pull_wdt)
+
+#define ST_CONF(st_reg, st_sft, st_wdt)                        \
+       {                                               \
+               .reg = PAD_ST##st_reg,                  \
+               .shift = st_sft,                        \
+               .width = st_wdt,                        \
+       }
+
+#define PAD_ST_CONF(pad_name, st_reg, st_sft, st_wdt)  \
+       struct owl_st pad_name##_st_conf                \
+               = ST_CONF(st_reg, st_sft, st_wdt)
+
+#define PAD_INFO(name)                                 \
+       {                                               \
+               .pad = name,                            \
+               .pullctl = NULL,                        \
+               .st = NULL,                             \
+       }
+
+#define PAD_INFO_ST(name)                              \
+       {                                               \
+               .pad = name,                            \
+               .pullctl = NULL,                        \
+               .st = &name##_st_conf,                  \
+       }
+
+#define PAD_INFO_PULLCTL(name)                         \
+       {                                               \
+               .pad = name,                            \
+               .pullctl = &name##_pullctl_conf,        \
+               .st = NULL,                             \
+       }
+
+#define PAD_INFO_PULLCTL_ST(name)                      \
+       {                                               \
+               .pad = name,                            \
+               .pullctl = &name##_pullctl_conf,        \
+               .st = &name##_st_conf,                  \
+       }
+
+#define OWL_GPIO_PORT_A                0
+#define OWL_GPIO_PORT_B                1
+#define OWL_GPIO_PORT_C                2
+#define OWL_GPIO_PORT_D                3
+#define OWL_GPIO_PORT_E                4
+#define OWL_GPIO_PORT_F                5
+
+#define OWL_GPIO_PORT(port, base, count, _outen, _inen, _dat, _intc_ctl,\
+                       _intc_pd, _intc_msk, _intc_type, _share)        \
+       [OWL_GPIO_PORT_##port] = {                              \
+               .offset = base,                                 \
+               .pins = count,                                  \
+               .outen = _outen,                                \
+               .inen = _inen,                                  \
+               .dat = _dat,                                    \
+               .intc_ctl = _intc_ctl,                          \
+               .intc_pd = _intc_pd,                            \
+               .intc_msk = _intc_msk,                          \
+               .intc_type = _intc_type,                        \
+               .shared_ctl_offset = _share,                    \
+       }
 
 enum owl_pinconf_drv {
        OWL_PINCONF_DRV_2MA,
@@ -148,6 +271,7 @@ struct owl_gpio_port {
        unsigned int intc_pd;
        unsigned int intc_msk;
        unsigned int intc_type;
+       u8 shared_ctl_offset;
 };
 
 /**
@@ -174,6 +298,12 @@ struct owl_pinctrl_soc_data {
        unsigned int ngpios;
        const struct owl_gpio_port *ports;
        unsigned int nports;
+       int (*padctl_val2arg)(const struct owl_padinfo *padinfo,
+                               unsigned int param,
+                               u32 *arg);
+       int (*padctl_arg2val)(const struct owl_padinfo *info,
+                               unsigned int param,
+                               u32 *arg);
 };
 
 int owl_pinctrl_probe(struct platform_device *pdev,
diff --git a/drivers/pinctrl/actions/pinctrl-s700.c b/drivers/pinctrl/actions/pinctrl-s700.c
new file mode 100644 (file)
index 0000000..8b8121e
--- /dev/null
@@ -0,0 +1,1912 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Actions Semi Owl S700 Pinctrl driver
+ *
+ * Copyright (c) 2014 Actions Semi Inc.
+ * Author: David Liu <liuwei@actions-semi.com>
+ *
+ * Author: Pathiban Nallathambi <pn@denx.de>
+ * Author: Saravanan Sekar <sravanhome@gmail.com>
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/pinctrl/pinconf-generic.h>
+#include <linux/pinctrl/pinctrl.h>
+#include "pinctrl-owl.h"
+
+/* Pinctrl registers offset */
+#define MFCTL0                 (0x0040)
+#define MFCTL1                 (0x0044)
+#define MFCTL2                 (0x0048)
+#define MFCTL3                 (0x004C)
+#define PAD_PULLCTL0           (0x0060)
+#define PAD_PULLCTL1           (0x0064)
+#define PAD_PULLCTL2           (0x0068)
+#define PAD_ST0                        (0x006C)
+#define PAD_ST1                        (0x0070)
+#define PAD_CTL                        (0x0074)
+#define PAD_DRV0               (0x0080)
+#define PAD_DRV1               (0x0084)
+#define PAD_DRV2               (0x0088)
+
+/*
+ * Most pins affected by the pinmux can also be GPIOs. Define these first.
+ * These must match how the GPIO driver names/numbers its pins.
+ */
+#define _GPIOA(offset)         (offset)
+#define _GPIOB(offset)         (32 + (offset))
+#define _GPIOC(offset)         (64 + (offset))
+#define _GPIOD(offset)         (96 + (offset))
+#define _GPIOE(offset)         (128 + (offset))
+
+/* All non-GPIO pins follow */
+#define NUM_GPIOS              (_GPIOE(7) + 1)
+#define _PIN(offset)           (NUM_GPIOS + (offset))
+
+/* Ethernet MAC */
+#define ETH_TXD0               _GPIOA(14)
+#define ETH_TXD1               _GPIOA(15)
+#define ETH_TXD2               _GPIOE(4)
+#define ETH_TXD3               _GPIOE(5)
+#define ETH_TXEN               _GPIOA(16)
+#define ETH_RXER               _GPIOA(17)
+#define ETH_CRS_DV             _GPIOA(18)
+#define ETH_RXD1               _GPIOA(19)
+#define ETH_RXD0               _GPIOA(20)
+#define ETH_RXD2               _GPIOE(6)
+#define ETH_RXD3               _GPIOE(7)
+#define ETH_REF_CLK            _GPIOA(21)
+#define ETH_MDC                        _GPIOA(22)
+#define ETH_MDIO               _GPIOA(23)
+
+/* SIRQ */
+#define SIRQ0                  _GPIOA(24)
+#define SIRQ1                  _GPIOA(25)
+#define SIRQ2                  _GPIOA(26)
+
+/* I2S */
+#define I2S_D0                 _GPIOA(27)
+#define I2S_BCLK0              _GPIOA(28)
+#define I2S_LRCLK0             _GPIOA(29)
+#define I2S_MCLK0              _GPIOA(30)
+#define I2S_D1                 _GPIOA(31)
+#define I2S_BCLK1              _GPIOB(0)
+#define I2S_LRCLK1             _GPIOB(1)
+#define I2S_MCLK1              _GPIOB(2)
+
+/* PCM1 */
+#define PCM1_IN                        _GPIOD(28)
+#define PCM1_CLK               _GPIOD(29)
+#define PCM1_SYNC              _GPIOD(30)
+#define PCM1_OUT               _GPIOD(31)
+
+/* KEY */
+#define KS_IN0                 _GPIOB(3)
+#define KS_IN1                 _GPIOB(4)
+#define KS_IN2                 _GPIOB(5)
+#define KS_IN3                 _GPIOB(6)
+#define KS_OUT0                        _GPIOB(7)
+#define KS_OUT1                        _GPIOB(8)
+#define KS_OUT2                        _GPIOB(9)
+
+/* LVDS */
+#define LVDS_OEP               _GPIOB(10)
+#define LVDS_OEN               _GPIOB(11)
+#define LVDS_ODP               _GPIOB(12)
+#define LVDS_ODN               _GPIOB(13)
+#define LVDS_OCP               _GPIOB(14)
+#define LVDS_OCN               _GPIOB(15)
+#define LVDS_OBP               _GPIOB(16)
+#define LVDS_OBN               _GPIOB(17)
+#define LVDS_OAP               _GPIOB(18)
+#define LVDS_OAN               _GPIOB(19)
+#define LVDS_EEP               _GPIOB(20)
+#define LVDS_EEN               _GPIOB(21)
+#define LVDS_EDP               _GPIOB(22)
+#define LVDS_EDN               _GPIOB(23)
+#define LVDS_ECP               _GPIOB(24)
+#define LVDS_ECN               _GPIOB(25)
+#define LVDS_EBP               _GPIOB(26)
+#define LVDS_EBN               _GPIOB(27)
+#define LVDS_EAP               _GPIOB(28)
+#define LVDS_EAN               _GPIOB(29)
+#define LCD0_D18               _GPIOB(30)
+#define LCD0_D2                        _GPIOB(31)
+
+/* DSI */
+#define DSI_DP3                        _GPIOC(0)
+#define DSI_DN3                        _GPIOC(1)
+#define DSI_DP1                        _GPIOC(2)
+#define DSI_DN1                        _GPIOC(3)
+#define DSI_CP                 _GPIOC(4)
+#define DSI_CN                 _GPIOC(5)
+#define DSI_DP0                        _GPIOC(6)
+#define DSI_DN0                        _GPIOC(7)
+#define DSI_DP2                        _GPIOC(8)
+#define DSI_DN2                        _GPIOC(9)
+
+/* SD */
+#define SD0_D0                 _GPIOC(10)
+#define SD0_D1                 _GPIOC(11)
+#define SD0_D2                 _GPIOC(12)
+#define SD0_D3                 _GPIOC(13)
+#define SD0_D4                 _GPIOC(14)
+#define SD0_D5                 _GPIOC(15)
+#define SD0_D6                 _GPIOC(16)
+#define SD0_D7                 _GPIOC(17)
+#define SD0_CMD                        _GPIOC(18)
+#define SD0_CLK                        _GPIOC(19)
+#define SD1_CMD                        _GPIOC(20)
+#define SD1_CLK                        _GPIOC(21)
+#define SD1_D0                 SD0_D4
+#define SD1_D1                 SD0_D5
+#define SD1_D2                 SD0_D6
+#define SD1_D3                 SD0_D7
+
+/* SPI */
+#define SPI0_SS                        _GPIOC(23)
+#define SPI0_MISO              _GPIOC(24)
+
+/* UART for console */
+#define UART0_RX               _GPIOC(26)
+#define UART0_TX               _GPIOC(27)
+
+/* UART for Bluetooth */
+#define UART2_RX               _GPIOD(18)
+#define UART2_TX               _GPIOD(19)
+#define UART2_RTSB             _GPIOD(20)
+#define UART2_CTSB             _GPIOD(21)
+
+/* UART for 3G */
+#define UART3_RX               _GPIOD(22)
+#define UART3_TX               _GPIOD(23)
+#define UART3_RTSB             _GPIOD(24)
+#define UART3_CTSB             _GPIOD(25)
+
+/* I2C */
+#define I2C0_SCLK              _GPIOC(28)
+#define I2C0_SDATA             _GPIOC(29)
+#define I2C1_SCLK              _GPIOE(0)
+#define I2C1_SDATA             _GPIOE(1)
+#define I2C2_SCLK              _GPIOE(2)
+#define I2C2_SDATA             _GPIOE(3)
+
+/* CSI*/
+#define CSI_DN0                        _PIN(0)
+#define CSI_DP0                        _PIN(1)
+#define CSI_DN1                        _PIN(2)
+#define CSI_DP1                        _PIN(3)
+#define CSI_CN                 _PIN(4)
+#define CSI_CP                 _PIN(5)
+#define CSI_DN2                        _PIN(6)
+#define CSI_DP2                        _PIN(7)
+#define CSI_DN3                        _PIN(8)
+#define CSI_DP3                        _PIN(9)
+
+/* Sensor */
+#define SENSOR0_PCLK           _GPIOC(31)
+#define SENSOR0_CKOUT          _GPIOD(10)
+
+/* NAND (1.8v / 3.3v) */
+#define DNAND_D0               _PIN(10)
+#define DNAND_D1               _PIN(11)
+#define DNAND_D2               _PIN(12)
+#define DNAND_D3               _PIN(13)
+#define DNAND_D4               _PIN(14)
+#define DNAND_D5               _PIN(15)
+#define DNAND_D6               _PIN(16)
+#define DNAND_D7               _PIN(17)
+#define DNAND_WRB              _PIN(18)
+#define DNAND_RDB              _PIN(19)
+#define DNAND_RDBN             _PIN(20)
+#define DNAND_DQS              _GPIOA(12)
+#define DNAND_DQSN             _GPIOA(13)
+#define DNAND_RB0              _PIN(21)
+#define DNAND_ALE              _GPIOD(12)
+#define DNAND_CLE              _GPIOD(13)
+#define DNAND_CEB0             _GPIOD(14)
+#define DNAND_CEB1             _GPIOD(15)
+#define DNAND_CEB2             _GPIOD(16)
+#define DNAND_CEB3             _GPIOD(17)
+
+/* System */
+#define PORB                   _PIN(22)
+#define CLKO_25M               _PIN(23)
+#define BSEL                   _PIN(24)
+#define PKG0                   _PIN(25)
+#define PKG1                   _PIN(26)
+#define PKG2                   _PIN(27)
+#define PKG3                   _PIN(28)
+
+#define _FIRSTPAD              _GPIOA(0)
+#define _LASTPAD               PKG3
+#define NUM_PADS               (_PIN(28) + 1)
+
+/* Pad names for the pinmux subsystem */
+static const struct pinctrl_pin_desc s700_pads[] = {
+       PINCTRL_PIN(ETH_TXD0, "eth_txd0"),
+       PINCTRL_PIN(ETH_TXD1, "eth_txd1"),
+       PINCTRL_PIN(ETH_TXD2, "eth_txd2"),
+       PINCTRL_PIN(ETH_TXD3, "eth_txd3"),
+       PINCTRL_PIN(ETH_TXEN, "eth_txen"),
+       PINCTRL_PIN(ETH_RXER, "eth_rxer"),
+       PINCTRL_PIN(ETH_CRS_DV, "eth_crs_dv"),
+       PINCTRL_PIN(ETH_RXD1, "eth_rxd1"),
+       PINCTRL_PIN(ETH_RXD0, "eth_rxd0"),
+       PINCTRL_PIN(ETH_RXD2, "eth_rxd2"),
+       PINCTRL_PIN(ETH_RXD3, "eth_rxd3"),
+       PINCTRL_PIN(ETH_REF_CLK, "eth_ref_clk"),
+       PINCTRL_PIN(ETH_MDC, "eth_mdc"),
+       PINCTRL_PIN(ETH_MDIO, "eth_mdio"),
+       PINCTRL_PIN(SIRQ0, "sirq0"),
+       PINCTRL_PIN(SIRQ1, "sirq1"),
+       PINCTRL_PIN(SIRQ2, "sirq2"),
+       PINCTRL_PIN(I2S_D0, "i2s_d0"),
+       PINCTRL_PIN(I2S_BCLK0, "i2s_bclk0"),
+       PINCTRL_PIN(I2S_LRCLK0, "i2s_lrclk0"),
+       PINCTRL_PIN(I2S_MCLK0, "i2s_mclk0"),
+       PINCTRL_PIN(I2S_D1, "i2s_d1"),
+       PINCTRL_PIN(I2S_BCLK1, "i2s_bclk1"),
+       PINCTRL_PIN(I2S_LRCLK1, "i2s_lrclk1"),
+       PINCTRL_PIN(I2S_MCLK1, "i2s_mclk1"),
+       PINCTRL_PIN(PCM1_IN, "pcm1_in"),
+       PINCTRL_PIN(PCM1_CLK, "pcm1_clk"),
+       PINCTRL_PIN(PCM1_SYNC, "pcm1_sync"),
+       PINCTRL_PIN(PCM1_OUT, "pcm1_out"),
+       PINCTRL_PIN(KS_IN0, "ks_in0"),
+       PINCTRL_PIN(KS_IN1, "ks_in1"),
+       PINCTRL_PIN(KS_IN2, "ks_in2"),
+       PINCTRL_PIN(KS_IN3, "ks_in3"),
+       PINCTRL_PIN(KS_OUT0, "ks_out0"),
+       PINCTRL_PIN(KS_OUT1, "ks_out1"),
+       PINCTRL_PIN(KS_OUT2, "ks_out2"),
+       PINCTRL_PIN(LVDS_OEP, "lvds_oep"),
+       PINCTRL_PIN(LVDS_OEN, "lvds_oen"),
+       PINCTRL_PIN(LVDS_ODP, "lvds_odp"),
+       PINCTRL_PIN(LVDS_ODN, "lvds_odn"),
+       PINCTRL_PIN(LVDS_OCP, "lvds_ocp"),
+       PINCTRL_PIN(LVDS_OCN, "lvds_ocn"),
+       PINCTRL_PIN(LVDS_OBP, "lvds_obp"),
+       PINCTRL_PIN(LVDS_OBN, "lvds_obn"),
+       PINCTRL_PIN(LVDS_OAP, "lvds_oap"),
+       PINCTRL_PIN(LVDS_OAN, "lvds_oan"),
+       PINCTRL_PIN(LVDS_EEP, "lvds_eep"),
+       PINCTRL_PIN(LVDS_EEN, "lvds_een"),
+       PINCTRL_PIN(LVDS_EDP, "lvds_edp"),
+       PINCTRL_PIN(LVDS_EDN, "lvds_edn"),
+       PINCTRL_PIN(LVDS_ECP, "lvds_ecp"),
+       PINCTRL_PIN(LVDS_ECN, "lvds_ecn"),
+       PINCTRL_PIN(LVDS_EBP, "lvds_ebp"),
+       PINCTRL_PIN(LVDS_EBN, "lvds_ebn"),
+       PINCTRL_PIN(LVDS_EAP, "lvds_eap"),
+       PINCTRL_PIN(LVDS_EAN, "lvds_ean"),
+       PINCTRL_PIN(LCD0_D18, "lcd0_d18"),
+       PINCTRL_PIN(LCD0_D2, "lcd0_d2"),
+       PINCTRL_PIN(DSI_DP3, "dsi_dp3"),
+       PINCTRL_PIN(DSI_DN3, "dsi_dn3"),
+       PINCTRL_PIN(DSI_DP1, "dsi_dp1"),
+       PINCTRL_PIN(DSI_DN1, "dsi_dn1"),
+       PINCTRL_PIN(DSI_CP, "dsi_cp"),
+       PINCTRL_PIN(DSI_CN, "dsi_cn"),
+       PINCTRL_PIN(DSI_DP0, "dsi_dp0"),
+       PINCTRL_PIN(DSI_DN0, "dsi_dn0"),
+       PINCTRL_PIN(DSI_DP2, "dsi_dp2"),
+       PINCTRL_PIN(DSI_DN2, "dsi_dn2"),
+       PINCTRL_PIN(SD0_D0, "sd0_d0"),
+       PINCTRL_PIN(SD0_D1, "sd0_d1"),
+       PINCTRL_PIN(SD0_D2, "sd0_d2"),
+       PINCTRL_PIN(SD0_D3, "sd0_d3"),
+       PINCTRL_PIN(SD1_D0, "sd1_d0"),
+       PINCTRL_PIN(SD1_D1, "sd1_d1"),
+       PINCTRL_PIN(SD1_D2, "sd1_d2"),
+       PINCTRL_PIN(SD1_D3, "sd1_d3"),
+       PINCTRL_PIN(SD0_CMD, "sd0_cmd"),
+       PINCTRL_PIN(SD0_CLK, "sd0_clk"),
+       PINCTRL_PIN(SD1_CMD, "sd1_cmd"),
+       PINCTRL_PIN(SD1_CLK, "sd1_clk"),
+       PINCTRL_PIN(SPI0_SS, "spi0_ss"),
+       PINCTRL_PIN(SPI0_MISO, "spi0_miso"),
+       PINCTRL_PIN(UART0_RX, "uart0_rx"),
+       PINCTRL_PIN(UART0_TX, "uart0_tx"),
+       PINCTRL_PIN(UART2_RX, "uart2_rx"),
+       PINCTRL_PIN(UART2_TX, "uart2_tx"),
+       PINCTRL_PIN(UART2_RTSB, "uart2_rtsb"),
+       PINCTRL_PIN(UART2_CTSB, "uart2_ctsb"),
+       PINCTRL_PIN(UART3_RX, "uart3_rx"),
+       PINCTRL_PIN(UART3_TX, "uart3_tx"),
+       PINCTRL_PIN(UART3_RTSB, "uart3_rtsb"),
+       PINCTRL_PIN(UART3_CTSB, "uart3_ctsb"),
+       PINCTRL_PIN(I2C0_SCLK, "i2c0_sclk"),
+       PINCTRL_PIN(I2C0_SDATA, "i2c0_sdata"),
+       PINCTRL_PIN(I2C1_SCLK, "i2c1_sclk"),
+       PINCTRL_PIN(I2C1_SDATA, "i2c1_sdata"),
+       PINCTRL_PIN(I2C2_SCLK, "i2c2_sclk"),
+       PINCTRL_PIN(I2C2_SDATA, "i2c2_sdata"),
+       PINCTRL_PIN(CSI_DN0, "csi_dn0"),
+       PINCTRL_PIN(CSI_DP0, "csi_dp0"),
+       PINCTRL_PIN(CSI_DN1, "csi_dn1"),
+       PINCTRL_PIN(CSI_DP1, "csi_dp1"),
+       PINCTRL_PIN(CSI_CN, "csi_cn"),
+       PINCTRL_PIN(CSI_CP, "csi_cp"),
+       PINCTRL_PIN(CSI_DN2, "csi_dn2"),
+       PINCTRL_PIN(CSI_DP2, "csi_dp2"),
+       PINCTRL_PIN(CSI_DN3, "csi_dn3"),
+       PINCTRL_PIN(CSI_DP3, "csi_dp3"),
+       PINCTRL_PIN(SENSOR0_PCLK, "sensor0_pclk"),
+       PINCTRL_PIN(SENSOR0_CKOUT, "sensor0_ckout"),
+       PINCTRL_PIN(DNAND_D0, "dnand_d0"),
+       PINCTRL_PIN(DNAND_D1, "dnand_d1"),
+       PINCTRL_PIN(DNAND_D2, "dnand_d2"),
+       PINCTRL_PIN(DNAND_D3, "dnand_d3"),
+       PINCTRL_PIN(DNAND_D4, "dnand_d4"),
+       PINCTRL_PIN(DNAND_D5, "dnand_d5"),
+       PINCTRL_PIN(DNAND_D6, "dnand_d6"),
+       PINCTRL_PIN(DNAND_D7, "dnand_d7"),
+       PINCTRL_PIN(DNAND_WRB, "dnand_wrb"),
+       PINCTRL_PIN(DNAND_RDB, "dnand_rdb"),
+       PINCTRL_PIN(DNAND_RDBN, "dnand_rdbn"),
+       PINCTRL_PIN(DNAND_DQS, "dnand_dqs"),
+       PINCTRL_PIN(DNAND_DQSN, "dnand_dqsn"),
+       PINCTRL_PIN(DNAND_RB0, "dnand_rb0"),
+       PINCTRL_PIN(DNAND_ALE, "dnand_ale"),
+       PINCTRL_PIN(DNAND_CLE, "dnand_cle"),
+       PINCTRL_PIN(DNAND_CEB0, "dnand_ceb0"),
+       PINCTRL_PIN(DNAND_CEB1, "dnand_ceb1"),
+       PINCTRL_PIN(DNAND_CEB2, "dnand_ceb2"),
+       PINCTRL_PIN(DNAND_CEB3, "dnand_ceb3"),
+       PINCTRL_PIN(PORB, "porb"),
+       PINCTRL_PIN(CLKO_25M, "clko_25m"),
+       PINCTRL_PIN(BSEL, "bsel"),
+       PINCTRL_PIN(PKG0, "pkg0"),
+       PINCTRL_PIN(PKG1, "pkg1"),
+       PINCTRL_PIN(PKG2, "pkg2"),
+       PINCTRL_PIN(PKG3, "pkg3"),
+};
+
+enum s700_pinmux_functions {
+       S700_MUX_NOR,
+       S700_MUX_ETH_RGMII,
+       S700_MUX_ETH_SGMII,
+       S700_MUX_SPI0,
+       S700_MUX_SPI1,
+       S700_MUX_SPI2,
+       S700_MUX_SPI3,
+       S700_MUX_SENS0,
+       S700_MUX_SENS1,
+       S700_MUX_UART0,
+       S700_MUX_UART1,
+       S700_MUX_UART2,
+       S700_MUX_UART3,
+       S700_MUX_UART4,
+       S700_MUX_UART5,
+       S700_MUX_UART6,
+       S700_MUX_I2S0,
+       S700_MUX_I2S1,
+       S700_MUX_PCM1,
+       S700_MUX_PCM0,
+       S700_MUX_KS,
+       S700_MUX_JTAG,
+       S700_MUX_PWM0,
+       S700_MUX_PWM1,
+       S700_MUX_PWM2,
+       S700_MUX_PWM3,
+       S700_MUX_PWM4,
+       S700_MUX_PWM5,
+       S700_MUX_P0,
+       S700_MUX_SD0,
+       S700_MUX_SD1,
+       S700_MUX_SD2,
+       S700_MUX_I2C0,
+       S700_MUX_I2C1,
+       S700_MUX_I2C2,
+       S700_MUX_I2C3,
+       S700_MUX_DSI,
+       S700_MUX_LVDS,
+       S700_MUX_USB30,
+       S700_MUX_CLKO_25M,
+       S700_MUX_MIPI_CSI,
+       S700_MUX_NAND,
+       S700_MUX_SPDIF,
+       S700_MUX_SIRQ0,
+       S700_MUX_SIRQ1,
+       S700_MUX_SIRQ2,
+       S700_MUX_BT,
+       S700_MUX_LCD0,
+       S700_MUX_RESERVED,
+};
+
+/* mfp0_31_30 reserved */
+
+/* rgmii_txd23 */
+static unsigned int  rgmii_txd23_mfp_pads[]            = { ETH_TXD2, ETH_TXD3};
+static unsigned int  rgmii_txd23_mfp_funcs[]           = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_I2C1,
+                                                           S700_MUX_UART3 };
+/* rgmii_rxd2 */
+static unsigned int  rgmii_rxd2_mfp_pads[]             = { ETH_RXD2 };
+static unsigned int  rgmii_rxd2_mfp_funcs[]            = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_PWM0,
+                                                           S700_MUX_UART3 };
+/* rgmii_rxd3 */
+static unsigned int  rgmii_rxd3_mfp_pads[]             = { ETH_RXD3};
+static unsigned int  rgmii_rxd3_mfp_funcs[]            = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_PWM2,
+                                                           S700_MUX_UART3 };
+/* lcd0_d18 */
+static unsigned int  lcd0_d18_mfp_pads[]               = { LCD0_D18 };
+static unsigned int  lcd0_d18_mfp_funcs[]              = { S700_MUX_NOR,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_PWM2,
+                                                           S700_MUX_PWM4,
+                                                           S700_MUX_LCD0 };
+/* rgmii_txd01 */
+static unsigned int  rgmii_txd01_mfp_pads[]            = { ETH_CRS_DV };
+static unsigned int  rgmii_txd01_mfp_funcs[]           = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_SPI2,
+                                                           S700_MUX_UART4,
+                                                           S700_MUX_PWM4 };
+/* rgmii_txd0 */
+static unsigned int  rgmii_txd0_mfp_pads[]             = { ETH_TXD0 };
+static unsigned int  rgmii_txd0_mfp_funcs[]            = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_ETH_SGMII,
+                                                           S700_MUX_SPI2,
+                                                           S700_MUX_UART6,
+                                                           S700_MUX_PWM4 };
+/* rgmii_txd1 */
+static unsigned int  rgmii_txd1_mfp_pads[]             = { ETH_TXD1 };
+static unsigned int  rgmii_txd1_mfp_funcs[]            = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_ETH_SGMII,
+                                                           S700_MUX_SPI2,
+                                                           S700_MUX_UART6,
+                                                           S700_MUX_PWM5 };
+/* rgmii_txen */
+static unsigned int  rgmii_txen_mfp_pads[]             = { ETH_TXEN };
+static unsigned int  rgmii_txen_mfp_funcs[]            = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI3,
+                                                           S700_MUX_PWM0 };
+/* rgmii_rxen */
+static unsigned int  rgmii_rxen_mfp_pads[]             = { ETH_RXER };
+static unsigned int  rgmii_rxen_mfp_funcs[]            = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI3,
+                                                           S700_MUX_PWM1 };
+/* mfp0_12_11 reserved */
+/* rgmii_rxd1*/
+static unsigned int  rgmii_rxd1_mfp_pads[]             = { ETH_RXD1 };
+static unsigned int  rgmii_rxd1_mfp_funcs[]            = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI3,
+                                                           S700_MUX_PWM2,
+                                                           S700_MUX_UART5,
+                                                           S700_MUX_ETH_SGMII };
+/* rgmii_rxd0 */
+static unsigned int  rgmii_rxd0_mfp_pads[]             = { ETH_RXD0 };
+static unsigned int  rgmii_rxd0_mfp_funcs[]            = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI3,
+                                                           S700_MUX_PWM3,
+                                                           S700_MUX_UART5,
+                                                           S700_MUX_ETH_SGMII };
+/* rgmii_ref_clk */
+static unsigned int  rgmii_ref_clk_mfp_pads[]          = { ETH_REF_CLK };
+static unsigned int  rgmii_ref_clk_mfp_funcs[]         = { S700_MUX_ETH_RGMII,
+                                                           S700_MUX_UART4,
+                                                           S700_MUX_SPI2,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_ETH_SGMII };
+/* i2s_d0 */
+static unsigned int  i2s_d0_mfp_pads[]                 = { I2S_D0 };
+static unsigned int  i2s_d0_mfp_funcs[]                        = { S700_MUX_I2S0,
+                                                           S700_MUX_NOR };
+/* i2s_pcm1 */
+static unsigned int  i2s_pcm1_mfp_pads[]               = { I2S_LRCLK0,
+                                                           I2S_MCLK0 };
+static unsigned int  i2s_pcm1_mfp_funcs[]              = { S700_MUX_I2S0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_PCM1,
+                                                           S700_MUX_BT };
+/* i2s0_pcm0 */
+static unsigned int  i2s0_pcm0_mfp_pads[]              = { I2S_BCLK0 };
+static unsigned int  i2s0_pcm0_mfp_funcs[]             = { S700_MUX_I2S0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_PCM0,
+                                                           S700_MUX_BT };
+/* i2s1_pcm0 */
+static unsigned int  i2s1_pcm0_mfp_pads[]              = { I2S_BCLK1,
+                                                           I2S_LRCLK1,
+                                                           I2S_MCLK1 };
+
+static unsigned int  i2s1_pcm0_mfp_funcs[]             = { S700_MUX_I2S1,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_PCM0,
+                                                           S700_MUX_BT };
+/* i2s_d1 */
+static unsigned int  i2s_d1_mfp_pads[]                 = { I2S_D1 };
+static unsigned int  i2s_d1_mfp_funcs[]                        = { S700_MUX_I2S1,
+                                                           S700_MUX_NOR };
+/* ks_in2 */
+static unsigned int  ks_in2_mfp_pads[]                 = { KS_IN2 };
+static unsigned int  ks_in2_mfp_funcs[]                        = { S700_MUX_KS,
+                                                           S700_MUX_JTAG,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_PWM0,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_PWM0,
+                                                           S700_MUX_P0 };
+/* ks_in1 */
+static unsigned int  ks_in1_mfp_pads[]                 = { KS_IN1 };
+static unsigned int  ks_in1_mfp_funcs[]                        = { S700_MUX_KS,
+                                                           S700_MUX_JTAG,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_PWM5,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_PWM1,
+                                                           S700_MUX_USB30 };
+/* ks_in0 */
+static unsigned int  ks_in0_mfp_pads[]                 = { KS_IN0 };
+static unsigned int  ks_in0_mfp_funcs[]                        = { S700_MUX_KS,
+                                                           S700_MUX_JTAG,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_PWM4,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_PWM4,
+                                                           S700_MUX_P0 };
+/* ks_in3 */
+static unsigned int  ks_in3_mfp_pads[]                 = { KS_IN3 };
+static unsigned int  ks_in3_mfp_funcs[]                        = { S700_MUX_KS,
+                                                           S700_MUX_JTAG,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_PWM1,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_SENS1 };
+/* ks_out0 */
+static unsigned int  ks_out0_mfp_pads[]                        = { KS_OUT0 };
+static unsigned int  ks_out0_mfp_funcs[]               = { S700_MUX_KS,
+                                                           S700_MUX_UART5,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_PWM2,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_SD0,
+                                                           S700_MUX_UART4 };
+
+/* ks_out1 */
+static unsigned int  ks_out1_mfp_pads[]                        = { KS_OUT1 };
+static unsigned int  ks_out1_mfp_funcs[]               = { S700_MUX_KS,
+                                                           S700_MUX_JTAG,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_PWM3,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_SD0,
+                                                           S700_MUX_UART4 };
+/* ks_out2 */
+static unsigned int  ks_out2_mfp_pads[]                        = { KS_OUT2 };
+static unsigned int  ks_out2_mfp_funcs[]               = { S700_MUX_SD0,
+                                                           S700_MUX_KS,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_PWM2,
+                                                           S700_MUX_UART5,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_BT };
+/* lvds_o_pn */
+static unsigned int  lvds_o_pn_mfp_pads[]              = { LVDS_OEP,
+                                                           LVDS_OEN,
+                                                           LVDS_ODP,
+                                                           LVDS_ODN,
+                                                           LVDS_OCP,
+                                                           LVDS_OCN,
+                                                           LVDS_OBP,
+                                                           LVDS_OBN,
+                                                           LVDS_OAP,
+                                                           LVDS_OAN };
+
+static unsigned int  lvds_o_pn_mfp_funcs[]             = { S700_MUX_LVDS,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_LCD0 };
+
+/* dsi_dn0 */
+static unsigned int  dsi_dn0_mfp_pads[]                        = { DSI_DN0 };
+static unsigned int  dsi_dn0_mfp_funcs[]               = { S700_MUX_DSI,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI0 };
+/* dsi_dp2 */
+static unsigned int  dsi_dp2_mfp_pads[]                        = { DSI_DP2 };
+static unsigned int  dsi_dp2_mfp_funcs[]               = { S700_MUX_DSI,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI0,
+                                                           S700_MUX_SD1 };
+/* lcd0_d2 */
+static unsigned int  lcd0_d2_mfp_pads[]                        = { LCD0_D2 };
+static unsigned int  lcd0_d2_mfp_funcs[]               = { S700_MUX_NOR,
+                                                           S700_MUX_SD0,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_PWM3,
+                                                           S700_MUX_LCD0 };
+/* dsi_dp3 */
+static unsigned int  dsi_dp3_mfp_pads[]                        = { DSI_DP3 };
+static unsigned int  dsi_dp3_mfp_funcs[]               = { S700_MUX_DSI,
+                                                           S700_MUX_SD0,
+                                                           S700_MUX_SD1,
+                                                           S700_MUX_LCD0 };
+/* dsi_dn3 */
+static unsigned int  dsi_dn3_mfp_pads[]                        = { DSI_DN3 };
+static unsigned int  dsi_dn3_mfp_funcs[]               = { S700_MUX_DSI,
+                                                           S700_MUX_SD0,
+                                                           S700_MUX_SD1,
+                                                           S700_MUX_LCD0 };
+/* dsi_dp0 */
+static unsigned int  dsi_dp0_mfp_pads[]                        = { DSI_DP0 };
+static unsigned int  dsi_dp0_mfp_funcs[]               = { S700_MUX_DSI,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_SD0,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI0 };
+/* lvds_ee_pn */
+static unsigned int  lvds_ee_pn_mfp_pads[]             = { LVDS_EEP,
+                                                           LVDS_EEN };
+static unsigned int  lvds_ee_pn_mfp_funcs[]            = { S700_MUX_LVDS,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_LCD0 };
+/* uart2_rx_tx */
+static unsigned int  uart2_rx_tx_mfp_pads[]            = { UART2_RX,
+                                                           UART2_TX };
+static unsigned int  uart2_rx_tx_mfp_funcs[]           = { S700_MUX_UART2,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_SPI0,
+                                                           S700_MUX_PCM0 };
+/* spi0_i2c_pcm */
+static unsigned int  spi0_i2c_pcm_mfp_pads[]           = { SPI0_SS,
+                                                           SPI0_MISO };
+static unsigned int  spi0_i2c_pcm_mfp_funcs[]          = { S700_MUX_SPI0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_I2S1,
+                                                           S700_MUX_PCM1,
+                                                           S700_MUX_PCM0,
+                                                           S700_MUX_I2C2 };
+/* mfp2_31 reserved */
+
+/* dsi_dnp1_cp_d2 */
+static unsigned int  dsi_dnp1_cp_d2_mfp_pads[]         = { DSI_DP1,
+                                                           DSI_CP,
+                                                           DSI_CN };
+static unsigned int  dsi_dnp1_cp_d2_mfp_funcs[]                = { S700_MUX_DSI,
+                                                           S700_MUX_LCD0,
+                                                           S700_MUX_RESERVED };
+/* dsi_dnp1_cp_d17 */
+static unsigned int  dsi_dnp1_cp_d17_mfp_pads[]                = { DSI_DP1,
+                                                           DSI_CP,
+                                                           DSI_CN };
+
+static unsigned int  dsi_dnp1_cp_d17_mfp_funcs[]       = { S700_MUX_DSI,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_LCD0 };
+/* lvds_e_pn */
+static unsigned int  lvds_e_pn_mfp_pads[]              = { LVDS_EDP,
+                                                           LVDS_EDN,
+                                                           LVDS_ECP,
+                                                           LVDS_ECN,
+                                                           LVDS_EBP,
+                                                           LVDS_EBN,
+                                                           LVDS_EAP,
+                                                           LVDS_EAN };
+
+static unsigned int  lvds_e_pn_mfp_funcs[]             = { S700_MUX_LVDS,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_LCD0 };
+/* dsi_dn2 */
+static unsigned int  dsi_dn2_mfp_pads[]                        = { DSI_DN2 };
+static unsigned int  dsi_dn2_mfp_funcs[]               = { S700_MUX_DSI,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_SD1,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI0 };
+/* uart2_rtsb */
+static unsigned int  uart2_rtsb_mfp_pads[]             = { UART2_RTSB };
+static unsigned int  uart2_rtsb_mfp_funcs[]            = { S700_MUX_UART2,
+                                                           S700_MUX_UART0 };
+
+/* uart2_ctsb */
+static unsigned int  uart2_ctsb_mfp_pads[]             = { UART2_CTSB };
+static unsigned int  uart2_ctsb_mfp_funcs[]            = { S700_MUX_UART2,
+                                                           S700_MUX_UART0 };
+/* uart3_rtsb */
+static unsigned int  uart3_rtsb_mfp_pads[]             = { UART3_RTSB };
+static unsigned int  uart3_rtsb_mfp_funcs[]            = { S700_MUX_UART3,
+                                                           S700_MUX_UART5 };
+
+/* uart3_ctsb */
+static unsigned int  uart3_ctsb_mfp_pads[]             = { UART3_CTSB };
+static unsigned int  uart3_ctsb_mfp_funcs[]            = { S700_MUX_UART3,
+                                                           S700_MUX_UART5 };
+/* sd0_d0 */
+static unsigned int  sd0_d0_mfp_pads[]                 = { SD0_D0 };
+static unsigned int  sd0_d0_mfp_funcs[]                        = { S700_MUX_SD0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_JTAG,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_UART5 };
+/* sd0_d1 */
+static unsigned int  sd0_d1_mfp_pads[]                 = { SD0_D1 };
+static unsigned int  sd0_d1_mfp_funcs[]                        = { S700_MUX_SD0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_UART5 };
+/* sd0_d2_d3 */
+static unsigned int  sd0_d2_d3_mfp_pads[]              = { SD0_D2,
+                                                           SD0_D3 };
+static unsigned int  sd0_d2_d3_mfp_funcs[]             = { S700_MUX_SD0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_JTAG,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_UART1 };
+
+/* sd1_d0_d3 */
+static unsigned int  sd1_d0_d3_mfp_pads[]              = { SD1_D0,
+                                                           SD1_D1,
+                                                           SD1_D2,
+                                                           SD1_D3 };
+static unsigned int  sd1_d0_d3_mfp_funcs[]             = { S700_MUX_SD0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_SD1 };
+
+/* sd0_cmd */
+static unsigned int  sd0_cmd_mfp_pads[]                        = { SD0_CMD };
+static unsigned int  sd0_cmd_mfp_funcs[]               = { S700_MUX_SD0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_JTAG };
+/* sd0_clk */
+static unsigned int  sd0_clk_mfp_pads[]                        = { SD0_CLK };
+static unsigned int  sd0_clk_mfp_funcs[]               = { S700_MUX_SD0,
+                                                           S700_MUX_RESERVED,
+                                                           S700_MUX_JTAG };
+/* sd1_cmd */
+static unsigned int  sd1_cmd_mfp_pads[]                        = { SD1_CMD };
+static unsigned int  sd1_cmd_mfp_funcs[]               = { S700_MUX_SD1,
+                                                           S700_MUX_NOR };
+/* uart0_rx */
+static unsigned int  uart0_rx_mfp_pads[]               = { UART0_RX };
+static unsigned int  uart0_rx_mfp_funcs[]              = { S700_MUX_UART0,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI1,
+                                                           S700_MUX_I2C0,
+                                                           S700_MUX_PCM1,
+                                                           S700_MUX_I2S1 };
+/* dnand_data_wr1 reserved */
+
+/* clko_25m */
+static unsigned int  clko_25m_mfp_pads[]               = { CLKO_25M };
+static unsigned int  clko_25m_mfp_funcs[]              = { S700_MUX_RESERVED,
+                                                           S700_MUX_CLKO_25M };
+/* csi_cn_cp */
+static unsigned int  csi_cn_cp_mfp_pads[]              = { CSI_CN,
+                                                           CSI_CP };
+static unsigned int  csi_cn_cp_mfp_funcs[]             = { S700_MUX_MIPI_CSI,
+                                                           S700_MUX_SENS0 };
+/* dnand_acle_ce07_24 reserved */
+
+/* sens0_ckout */
+static unsigned int  sens0_ckout_mfp_pads[]            = { SENSOR0_CKOUT };
+static unsigned int  sens0_ckout_mfp_funcs[]           = { S700_MUX_SENS0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_PWM1 };
+/* uart0_tx */
+static unsigned int  uart0_tx_mfp_pads[]               = { UART0_TX };
+static unsigned int  uart0_tx_mfp_funcs[]              = { S700_MUX_UART0,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_SPI1,
+                                                           S700_MUX_I2C0,
+                                                           S700_MUX_SPDIF,
+                                                           S700_MUX_PCM1,
+                                                           S700_MUX_I2S1 };
+/* i2c0_mfp */
+static unsigned int  i2c0_mfp_pads[]           = { I2C0_SCLK,
+                                                           I2C0_SDATA };
+static unsigned int  i2c0_mfp_funcs[]          = { S700_MUX_I2C0,
+                                                           S700_MUX_UART2,
+                                                           S700_MUX_I2C1,
+                                                           S700_MUX_UART1,
+                                                           S700_MUX_SPI1 };
+/* csi_dn_dp */
+static unsigned int  csi_dn_dp_mfp_pads[]              = { CSI_DN0,
+                                                           CSI_DN1,
+                                                           CSI_DN2,
+                                                           CSI_DN3,
+                                                           CSI_DP0,
+                                                           CSI_DP1,
+                                                           CSI_DP2,
+                                                           CSI_DP3 };
+static unsigned int  csi_dn_dp_mfp_funcs[]             = { S700_MUX_MIPI_CSI,
+                                                           S700_MUX_SENS0 };
+/* sen0_pclk */
+static unsigned int  sen0_pclk_mfp_pads[]              = { SENSOR0_PCLK };
+static unsigned int  sen0_pclk_mfp_funcs[]             = { S700_MUX_SENS0,
+                                                           S700_MUX_NOR,
+                                                           S700_MUX_PWM0 };
+/* pcm1_in */
+static unsigned int  pcm1_in_mfp_pads[]                        = { PCM1_IN };
+static unsigned int  pcm1_in_mfp_funcs[]               = { S700_MUX_PCM1,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_PWM4 };
+/* pcm1_clk */
+static unsigned int  pcm1_clk_mfp_pads[]               = { PCM1_CLK };
+static unsigned int  pcm1_clk_mfp_funcs[]              = { S700_MUX_PCM1,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_PWM5 };
+/* pcm1_sync */
+static unsigned int  pcm1_sync_mfp_pads[]              = { PCM1_SYNC };
+static unsigned int  pcm1_sync_mfp_funcs[]             = { S700_MUX_PCM1,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_I2C3 };
+/* pcm1_out */
+static unsigned int  pcm1_out_mfp_pads[]               = { PCM1_OUT };
+static unsigned int  pcm1_out_mfp_funcs[]              = { S700_MUX_PCM1,
+                                                           S700_MUX_SENS1,
+                                                           S700_MUX_BT,
+                                                           S700_MUX_I2C3 };
+/* dnand_data_wr */
+static unsigned int  dnand_data_wr_mfp_pads[]          = { DNAND_D0,
+                                                           DNAND_D1,
+                                                           DNAND_D2,
+                                                           DNAND_D3,
+                                                           DNAND_D4,
+                                                           DNAND_D5,
+                                                           DNAND_D6,
+                                                           DNAND_D7,
+                                                           DNAND_RDB,
+                                                           DNAND_RDBN };
+static unsigned int  dnand_data_wr_mfp_funcs[]         = { S700_MUX_NAND,
+                                                           S700_MUX_SD2 };
+/* dnand_acle_ce0 */
+static unsigned int  dnand_acle_ce0_mfp_pads[]         = { DNAND_ALE,
+                                                           DNAND_CLE,
+                                                           DNAND_CEB0,
+                                                           DNAND_CEB1 };
+static unsigned int  dnand_acle_ce0_mfp_funcs[]                = { S700_MUX_NAND,
+                                                           S700_MUX_SPI2 };
+
+/* nand_ceb2 */
+static unsigned int  nand_ceb2_mfp_pads[]              = { DNAND_CEB2 };
+static unsigned int  nand_ceb2_mfp_funcs[]             = { S700_MUX_NAND,
+                                                           S700_MUX_PWM5 };
+/* nand_ceb3 */
+static unsigned int  nand_ceb3_mfp_pads[]              = { DNAND_CEB3 };
+static unsigned int  nand_ceb3_mfp_funcs[]             = { S700_MUX_NAND,
+                                                           S700_MUX_PWM4 };
+/*****End MFP group data****************************/
+
+/*****PADDRV group data****************************/
+
+/*PAD_DRV0*/
+static unsigned int  sirq_drv_pads[]                   = { SIRQ0,
+                                                           SIRQ1,
+                                                           SIRQ2 };
+
+static unsigned int  rgmii_txd23_drv_pads[]            = { ETH_TXD2,
+                                                           ETH_TXD3 };
+
+static unsigned int  rgmii_rxd23_drv_pads[]            = { ETH_RXD2,
+                                                           ETH_RXD3 };
+
+static unsigned int  rgmii_txd01_txen_drv_pads[]       = { ETH_TXD0,
+                                                           ETH_TXD1,
+                                                           ETH_TXEN };
+
+static unsigned int  rgmii_rxer_drv_pads[]             = { ETH_RXER };
+
+static unsigned int  rgmii_crs_drv_pads[]              = { ETH_CRS_DV };
+
+static unsigned int  rgmii_rxd10_drv_pads[]            = { ETH_RXD0,
+                                                           ETH_RXD1 };
+
+static unsigned int  rgmii_ref_clk_drv_pads[]          = { ETH_REF_CLK };
+
+static unsigned int  smi_mdc_mdio_drv_pads[]           = { ETH_MDC,
+                                                           ETH_MDIO };
+
+static unsigned int  i2s_d0_drv_pads[]                 = { I2S_D0 };
+
+static unsigned int  i2s_bclk0_drv_pads[]              = { I2S_BCLK0 };
+
+static unsigned int  i2s3_drv_pads[]                   = { I2S_LRCLK0,
+                                                           I2S_MCLK0,
+                                                           I2S_D1 };
+
+static unsigned int  i2s13_drv_pads[]                  = { I2S_BCLK1,
+                                                           I2S_LRCLK1,
+                                                           I2S_MCLK1 };
+
+static unsigned int  pcm1_drv_pads[]                   = { PCM1_IN,
+                                                           PCM1_CLK,
+                                                           PCM1_SYNC,
+                                                           PCM1_OUT };
+
+static unsigned int  ks_in_drv_pads[]                  = { KS_IN0,
+                                                           KS_IN1,
+                                                           KS_IN2,
+                                                           KS_IN3 };
+
+/*PAD_DRV1*/
+static unsigned int  ks_out_drv_pads[]                 = { KS_OUT0,
+                                                           KS_OUT1,
+                                                           KS_OUT2 };
+
+static unsigned int  lvds_all_drv_pads[]               = { LVDS_OEP,
+                                                           LVDS_OEN,
+                                                           LVDS_ODP,
+                                                           LVDS_ODN,
+                                                           LVDS_OCP,
+                                                           LVDS_OCN,
+                                                           LVDS_OBP,
+                                                           LVDS_OBN,
+                                                           LVDS_OAP,
+                                                           LVDS_OAN,
+                                                           LVDS_EEP,
+                                                           LVDS_EEN,
+                                                           LVDS_EDP,
+                                                           LVDS_EDN,
+                                                           LVDS_ECP,
+                                                           LVDS_ECN,
+                                                           LVDS_EBP,
+                                                           LVDS_EBN,
+                                                           LVDS_EAP,
+                                                           LVDS_EAN };
+
+static unsigned int  lcd_d18_d2_drv_pads[]             = { LCD0_D18,
+                                                           LCD0_D2 };
+
+static unsigned int  dsi_all_drv_pads[]                        = { DSI_DP0,
+                                                           DSI_DN0,
+                                                           DSI_DP2,
+                                                           DSI_DN2,
+                                                           DSI_DP3,
+                                                           DSI_DN3,
+                                                           DSI_DP1,
+                                                           DSI_DN1,
+                                                           DSI_CP,
+                                                           DSI_CN };
+
+static unsigned int  sd0_d0_d3_drv_pads[]              = { SD0_D0,
+                                                           SD0_D1,
+                                                           SD0_D2,
+                                                           SD0_D3 };
+
+static unsigned int  sd0_cmd_drv_pads[]                        = { SD0_CMD };
+
+static unsigned int  sd0_clk_drv_pads[]                        = { SD0_CLK };
+
+static unsigned int  spi0_all_drv_pads[]               = { SPI0_SS,
+                                                           SPI0_MISO };
+
+/*PAD_DRV2*/
+static unsigned int  uart0_rx_drv_pads[]               = { UART0_RX };
+
+static unsigned int  uart0_tx_drv_pads[]               = { UART0_TX };
+
+static unsigned int  uart2_all_drv_pads[]              = { UART2_RX,
+                                                           UART2_TX,
+                                                           UART2_RTSB,
+                                                           UART2_CTSB };
+
+static unsigned int  i2c0_all_drv_pads[]               = { I2C0_SCLK,
+                                                           I2C0_SDATA };
+
+static unsigned int  i2c12_all_drv_pads[]              = { I2C1_SCLK,
+                                                           I2C1_SDATA,
+                                                           I2C2_SCLK,
+                                                           I2C2_SDATA };
+
+static unsigned int  sens0_pclk_drv_pads[]             = { SENSOR0_PCLK };
+
+static unsigned int  sens0_ckout_drv_pads[]            = { SENSOR0_CKOUT };
+
+static unsigned int  uart3_all_drv_pads[]              = { UART3_RX,
+                                                           UART3_TX,
+                                                           UART3_RTSB,
+                                                           UART3_CTSB };
+
+/* all pinctrl groups of S700 board */
+static const struct owl_pingroup s700_groups[] = {
+       MUX_PG(rgmii_txd23_mfp, 0, 28, 2),
+       MUX_PG(rgmii_rxd2_mfp, 0, 26, 2),
+       MUX_PG(rgmii_rxd3_mfp, 0, 26, 2),
+       MUX_PG(lcd0_d18_mfp, 0, 23, 3),
+       MUX_PG(rgmii_txd01_mfp, 0, 20, 3),
+       MUX_PG(rgmii_txd0_mfp, 0, 16, 3),
+       MUX_PG(rgmii_txd1_mfp, 0, 16, 3),
+       MUX_PG(rgmii_txen_mfp, 0, 13, 3),
+       MUX_PG(rgmii_rxen_mfp, 0, 13, 3),
+       MUX_PG(rgmii_rxd1_mfp, 0, 8, 3),
+       MUX_PG(rgmii_rxd0_mfp, 0, 8, 3),
+       MUX_PG(rgmii_ref_clk_mfp, 0, 6, 2),
+       MUX_PG(i2s_d0_mfp, 0, 5, 1),
+       MUX_PG(i2s_pcm1_mfp, 0, 3, 2),
+       MUX_PG(i2s0_pcm0_mfp, 0, 1, 2),
+       MUX_PG(i2s1_pcm0_mfp, 0, 1, 2),
+       MUX_PG(i2s_d1_mfp, 0, 0, 1),
+       MUX_PG(ks_in2_mfp, 1, 29, 3),
+       MUX_PG(ks_in1_mfp, 1, 29, 3),
+       MUX_PG(ks_in0_mfp, 1, 29, 3),
+       MUX_PG(ks_in3_mfp, 1, 26, 3),
+       MUX_PG(ks_out0_mfp, 1, 26, 3),
+       MUX_PG(ks_out1_mfp, 1, 26, 3),
+       MUX_PG(ks_out2_mfp, 1, 23, 3),
+       MUX_PG(lvds_o_pn_mfp, 1, 21, 2),
+       MUX_PG(dsi_dn0_mfp, 1, 19, 2),
+       MUX_PG(dsi_dp2_mfp, 1, 17, 2),
+       MUX_PG(lcd0_d2_mfp, 1, 14, 3),
+       MUX_PG(dsi_dp3_mfp, 1, 12, 2),
+       MUX_PG(dsi_dn3_mfp, 1, 10, 2),
+       MUX_PG(dsi_dp0_mfp, 1, 7, 3),
+       MUX_PG(lvds_ee_pn_mfp, 1, 5, 2),
+       MUX_PG(uart2_rx_tx_mfp, 1, 3, 2),
+       MUX_PG(spi0_i2c_pcm_mfp, 1, 0, 3),
+       MUX_PG(dsi_dnp1_cp_d2_mfp, 2, 29, 2),
+       MUX_PG(dsi_dnp1_cp_d17_mfp, 2, 29, 2),
+       MUX_PG(lvds_e_pn_mfp, 2, 27, 2),
+       MUX_PG(dsi_dn2_mfp, 2, 24, 3),
+       MUX_PG(uart2_rtsb_mfp, 2, 23, 1),
+       MUX_PG(uart2_ctsb_mfp, 2, 22, 1),
+       MUX_PG(uart3_rtsb_mfp, 2, 21, 1),
+       MUX_PG(uart3_ctsb_mfp, 2, 20, 1),
+       MUX_PG(sd0_d0_mfp, 2, 17, 3),
+       MUX_PG(sd0_d1_mfp, 2, 14, 3),
+       MUX_PG(sd0_d2_d3_mfp, 2, 11, 3),
+       MUX_PG(sd1_d0_d3_mfp, 2, 9, 2),
+       MUX_PG(sd0_cmd_mfp, 2, 7, 2),
+       MUX_PG(sd0_clk_mfp, 2, 5, 2),
+       MUX_PG(sd1_cmd_mfp, 2, 3, 2),
+       MUX_PG(uart0_rx_mfp, 2, 0, 3),
+       MUX_PG(clko_25m_mfp, 3, 30, 1),
+       MUX_PG(csi_cn_cp_mfp, 3, 28, 2),
+       MUX_PG(sens0_ckout_mfp, 3, 22, 2),
+       MUX_PG(uart0_tx_mfp, 3, 19, 3),
+       MUX_PG(i2c0_mfp, 3, 16, 3),
+       MUX_PG(csi_dn_dp_mfp, 3, 14, 2),
+       MUX_PG(sen0_pclk_mfp, 3, 12, 2),
+       MUX_PG(pcm1_in_mfp, 3, 10, 2),
+       MUX_PG(pcm1_clk_mfp, 3, 8, 2),
+       MUX_PG(pcm1_sync_mfp, 3, 6, 2),
+       MUX_PG(pcm1_out_mfp, 3, 4, 2),
+       MUX_PG(dnand_data_wr_mfp, 3, 3, 1),
+       MUX_PG(dnand_acle_ce0_mfp, 3, 2, 1),
+       MUX_PG(nand_ceb2_mfp, 3, 0, 2),
+       MUX_PG(nand_ceb3_mfp, 3, 0, 2),
+
+       DRV_PG(sirq_drv, 0, 28, 2),
+       DRV_PG(rgmii_txd23_drv, 0, 26, 2),
+       DRV_PG(rgmii_rxd23_drv, 0, 24, 2),
+       DRV_PG(rgmii_txd01_txen_drv, 0, 22, 2),
+       DRV_PG(rgmii_rxer_drv, 0, 20, 2),
+       DRV_PG(rgmii_crs_drv, 0, 18, 2),
+       DRV_PG(rgmii_rxd10_drv, 0, 16, 2),
+       DRV_PG(rgmii_ref_clk_drv, 0, 14, 2),
+       DRV_PG(smi_mdc_mdio_drv, 0, 12, 2),
+       DRV_PG(i2s_d0_drv, 0, 10, 2),
+       DRV_PG(i2s_bclk0_drv, 0, 8, 2),
+       DRV_PG(i2s3_drv, 0, 6, 2),
+       DRV_PG(i2s13_drv, 0, 4, 2),
+       DRV_PG(pcm1_drv, 0, 2, 2),
+       DRV_PG(ks_in_drv, 0, 0, 2),
+       DRV_PG(ks_out_drv, 1, 30, 2),
+       DRV_PG(lvds_all_drv, 1, 28, 2),
+       DRV_PG(lcd_d18_d2_drv, 1, 26, 2),
+       DRV_PG(dsi_all_drv, 1, 24, 2),
+       DRV_PG(sd0_d0_d3_drv, 1, 22, 2),
+       DRV_PG(sd0_cmd_drv, 1, 18, 2),
+       DRV_PG(sd0_clk_drv, 1, 16, 2),
+       DRV_PG(spi0_all_drv, 1, 10, 2),
+       DRV_PG(uart0_rx_drv, 2, 30, 2),
+       DRV_PG(uart0_tx_drv, 2, 28, 2),
+       DRV_PG(uart2_all_drv, 2, 26, 2),
+       DRV_PG(i2c0_all_drv, 2, 23, 2),
+       DRV_PG(i2c12_all_drv, 2, 21, 2),
+       DRV_PG(sens0_pclk_drv, 2, 18, 2),
+       DRV_PG(sens0_ckout_drv, 2, 12, 2),
+       DRV_PG(uart3_all_drv, 2, 2, 2),
+};
+
+static const char * const nor_groups[] = {
+       "lcd0_d18",
+       "i2s_d0",
+       "i2s0_pcm0",
+       "i2s1_pcm0",
+       "i2s_d1",
+       "ks_in2",
+       "ks_in1",
+       "ks_in0",
+       "ks_in3",
+       "ks_out0",
+       "ks_out1",
+       "ks_out2",
+       "lcd0_d2",
+       "lvds_ee_pn",
+       "uart2_rx_tx",
+       "spi0_i2c_pcm",
+       "lvds_e_pn",
+       "sd0_d0",
+       "sd0_d1",
+       "sd0_d2_d3",
+       "sd1_d0_d3",
+       "sd0_cmd",
+       "sd1_cmd",
+       "sens0_ckout",
+       "sen0_pclk",
+};
+
+static const char * const eth_rmii_groups[] = {
+       "rgmii_txd23",
+       "rgmii_rxd2",
+       "rgmii_rxd3",
+       "rgmii_txd01",
+       "rgmii_txd0",
+       "rgmii_txd1",
+       "rgmii_txen",
+       "rgmii_rxen",
+       "rgmii_rxd1",
+       "rgmii_rxd0",
+       "rgmii_ref_clk",
+       "eth_smi_dummy",
+};
+
+static const char * const eth_smii_groups[] = {
+       "rgmii_txd0",
+       "rgmii_txd1",
+       "rgmii_rxd0",
+       "rgmii_rxd1",
+       "rgmii_ref_clk",
+       "eth_smi_dummy",
+};
+
+static const char * const spi0_groups[] = {
+       "dsi_dn0",
+       "dsi_dp2",
+       "dsi_dp0",
+       "uart2_rx_tx",
+       "spi0_i2c_pcm",
+       "dsi_dn2",
+};
+
+static const char * const spi1_groups[] = {
+       "uart0_rx",
+       "uart0_tx",
+       "i2c0_mfp",
+};
+
+static const char * const spi2_groups[] = {
+       "rgmii_txd01",
+       "rgmii_txd0",
+       "rgmii_txd1",
+       "rgmii_ref_clk",
+       "dnand_acle_ce0",
+};
+
+static const char * const spi3_groups[] = {
+       "rgmii_txen",
+       "rgmii_rxen",
+       "rgmii_rxd1",
+       "rgmii_rxd0",
+};
+
+static const char * const sens0_groups[] = {
+       "csi_cn_cp",
+       "sens0_ckout",
+       "csi_dn_dp",
+       "sen0_pclk",
+};
+
+static const char * const sens1_groups[] = {
+       "lcd0_d18",
+       "ks_in2",
+       "ks_in1",
+       "ks_in0",
+       "ks_in3",
+       "ks_out0",
+       "ks_out1",
+       "ks_out2",
+       "sens0_ckout",
+       "pcm1_in",
+       "pcm1_clk",
+       "pcm1_sync",
+       "pcm1_out",
+};
+
+static const char * const uart0_groups[] = {
+       "uart2_rtsb",
+       "uart2_ctsb",
+       "uart0_rx",
+       "uart0_tx",
+};
+
+static const char * const uart1_groups[] = {
+       "sd0_d2_d3",
+       "i2c0_mfp",
+};
+
+static const char * const uart2_groups[] = {
+       "rgmii_txen",
+       "rgmii_rxen",
+       "rgmii_rxd1",
+       "rgmii_rxd0",
+       "dsi_dn0",
+       "dsi_dp2",
+       "dsi_dp0",
+       "uart2_rx_tx",
+       "dsi_dn2",
+       "uart2_rtsb",
+       "uart2_ctsb",
+       "sd0_d0",
+       "sd0_d1",
+       "sd0_d2_d3",
+       "uart0_rx",
+       "uart0_tx",
+       "i2c0_mfp",
+       "uart2_dummy"
+};
+
+static const char * const uart3_groups[] = {
+       "rgmii_txd23",
+       "rgmii_rxd2",
+       "rgmii_rxd3",
+       "uart3_rtsb",
+       "uart3_ctsb",
+       "uart3_dummy"
+};
+
+static const char * const uart4_groups[] = {
+       "rgmii_txd01",
+       "rgmii_ref_clk",
+       "ks_out0",
+       "ks_out1",
+};
+
+static const char * const uart5_groups[] = {
+       "rgmii_rxd1",
+       "rgmii_rxd0",
+       "ks_out0",
+       "ks_out2",
+       "uart3_rtsb",
+       "uart3_ctsb",
+       "sd0_d0",
+       "sd0_d1",
+};
+
+static const char * const uart6_groups[] = {
+       "rgmii_txd0",
+       "rgmii_txd1",
+};
+
+static const char * const i2s0_groups[] = {
+       "i2s_d0",
+       "i2s_pcm1",
+       "i2s0_pcm0",
+};
+
+static const char * const i2s1_groups[] = {
+       "i2s1_pcm0",
+       "i2s_d1",
+       "i2s1_dummy",
+       "spi0_i2c_pcm",
+       "uart0_rx",
+       "uart0_tx",
+};
+
+static const char * const pcm1_groups[] = {
+       "i2s_pcm1",
+       "spi0_i2c_pcm",
+       "uart0_rx",
+       "uart0_tx",
+       "pcm1_in",
+       "pcm1_clk",
+       "pcm1_sync",
+       "pcm1_out",
+};
+
+static const char * const pcm0_groups[] = {
+       "i2s0_pcm0",
+       "i2s1_pcm0",
+       "uart2_rx_tx",
+       "spi0_i2c_pcm",
+};
+
+static const char * const ks_groups[] = {
+       "ks_in2",
+       "ks_in1",
+       "ks_in0",
+       "ks_in3",
+       "ks_out0",
+       "ks_out1",
+       "ks_out2",
+};
+
+static const char * const jtag_groups[] = {
+       "ks_in2",
+       "ks_in1",
+       "ks_in0",
+       "ks_in3",
+       "ks_out1",
+       "sd0_d0",
+       "sd0_d2_d3",
+       "sd0_cmd",
+       "sd0_clk",
+};
+
+static const char * const pwm0_groups[] = {
+       "rgmii_rxd2",
+       "rgmii_txen",
+       "ks_in2",
+       "sen0_pclk",
+};
+
+static const char * const pwm1_groups[] = {
+       "rgmii_rxen",
+       "ks_in1",
+       "ks_in3",
+       "sens0_ckout",
+};
+
+static const char * const pwm2_groups[] = {
+       "lcd0_d18",
+       "rgmii_rxd3",
+       "rgmii_rxd1",
+       "ks_out0",
+       "ks_out2",
+};
+
+static const char * const pwm3_groups[] = {
+       "rgmii_rxd0",
+       "ks_out1",
+       "lcd0_d2",
+};
+
+static const char * const pwm4_groups[] = {
+       "lcd0_d18",
+       "rgmii_txd01",
+       "rgmii_txd0",
+       "ks_in0",
+       "pcm1_in",
+       "nand_ceb3",
+};
+
+static const char * const pwm5_groups[] = {
+       "rgmii_txd1",
+       "ks_in1",
+       "pcm1_clk",
+       "nand_ceb2",
+};
+
+static const char * const p0_groups[] = {
+       "ks_in2",
+       "ks_in0",
+};
+
+static const char * const sd0_groups[] = {
+       "ks_out0",
+       "ks_out1",
+       "ks_out2",
+       "lcd0_d2",
+       "dsi_dp3",
+       "dsi_dp0",
+       "sd0_d0",
+       "sd0_d1",
+       "sd0_d2_d3",
+       "sd1_d0_d3",
+       "sd0_cmd",
+       "sd0_clk",
+};
+
+static const char * const sd1_groups[] = {
+       "dsi_dp2",
+       "mfp1_16_14",
+       "lcd0_d2",
+       "mfp1_16_14_d17",
+       "dsi_dp3",
+       "dsi_dn3",
+       "dsi_dnp1_cp_d2",
+       "dsi_dnp1_cp_d17",
+       "dsi_dn2",
+       "sd1_d0_d3",
+       "sd1_cmd",
+       "sd1_dummy",
+};
+
+static const char * const sd2_groups[] = {
+       "dnand_data_wr",
+};
+
+static const char * const i2c0_groups[] = {
+       "uart0_rx",
+       "uart0_tx",
+       "i2c0_mfp",
+};
+
+static const char * const i2c1_groups[] = {
+       "i2c0_mfp",
+       "i2c1_dummy"
+};
+
+static const char * const i2c2_groups[] = {
+       "i2c2_dummy"
+};
+
+static const char * const i2c3_groups[] = {
+       "uart2_rx_tx",
+       "pcm1_sync",
+       "pcm1_out",
+};
+
+static const char * const lvds_groups[] = {
+       "lvds_o_pn",
+       "lvds_ee_pn",
+       "lvds_e_pn",
+};
+
+static const char * const bt_groups[] = {
+       "i2s_pcm1",
+       "i2s0_pcm0",
+       "i2s1_pcm0",
+       "ks_in2",
+       "ks_in1",
+       "ks_in0",
+       "ks_in3",
+       "ks_out0",
+       "ks_out1",
+       "ks_out2",
+       "lvds_o_pn",
+       "lvds_ee_pn",
+       "pcm1_in",
+       "pcm1_clk",
+       "pcm1_sync",
+       "pcm1_out",
+};
+
+static const char * const lcd0_groups[] = {
+       "lcd0_d18",
+       "lcd0_d2",
+       "mfp1_16_14_d17",
+       "lvds_o_pn",
+       "dsi_dp3",
+       "dsi_dn3",
+       "lvds_ee_pn",
+       "dsi_dnp1_cp_d2",
+       "dsi_dnp1_cp_d17",
+       "lvds_e_pn",
+};
+
+
+static const char * const usb30_groups[] = {
+       "ks_in1",
+};
+
+static const char * const clko_25m_groups[] = {
+       "clko_25m",
+};
+
+static const char * const mipi_csi_groups[] = {
+       "csi_cn_cp",
+       "csi_dn_dp",
+};
+
+static const char * const dsi_groups[] = {
+       "dsi_dn0",
+       "dsi_dp2",
+       "dsi_dp3",
+       "dsi_dn3",
+       "dsi_dp0",
+       "dsi_dnp1_cp_d2",
+       "dsi_dnp1_cp_d17",
+       "dsi_dn2",
+       "dsi_dummy",
+};
+
+static const char * const nand_groups[] = {
+       "dnand_data_wr",
+       "dnand_acle_ce0",
+       "nand_ceb2",
+       "nand_ceb3",
+       "nand_dummy",
+};
+
+static const char * const spdif_groups[] = {
+       "uart0_tx",
+};
+
+static const char * const sirq0_groups[] = {
+       "sirq0_dummy",
+};
+
+static const char * const sirq1_groups[] = {
+       "sirq1_dummy",
+};
+
+static const char * const sirq2_groups[] = {
+       "sirq2_dummy",
+};
+
+static const struct owl_pinmux_func s700_functions[] = {
+       [S700_MUX_NOR] = FUNCTION(nor),
+       [S700_MUX_ETH_RGMII] = FUNCTION(eth_rmii),
+       [S700_MUX_ETH_SGMII] = FUNCTION(eth_smii),
+       [S700_MUX_SPI0] = FUNCTION(spi0),
+       [S700_MUX_SPI1] = FUNCTION(spi1),
+       [S700_MUX_SPI2] = FUNCTION(spi2),
+       [S700_MUX_SPI3] = FUNCTION(spi3),
+       [S700_MUX_SENS0] = FUNCTION(sens0),
+       [S700_MUX_SENS1] = FUNCTION(sens1),
+       [S700_MUX_UART0] = FUNCTION(uart0),
+       [S700_MUX_UART1] = FUNCTION(uart1),
+       [S700_MUX_UART2] = FUNCTION(uart2),
+       [S700_MUX_UART3] = FUNCTION(uart3),
+       [S700_MUX_UART4] = FUNCTION(uart4),
+       [S700_MUX_UART5] = FUNCTION(uart5),
+       [S700_MUX_UART6] = FUNCTION(uart6),
+       [S700_MUX_I2S0] = FUNCTION(i2s0),
+       [S700_MUX_I2S1] = FUNCTION(i2s1),
+       [S700_MUX_PCM1] = FUNCTION(pcm1),
+       [S700_MUX_PCM0] = FUNCTION(pcm0),
+       [S700_MUX_KS] = FUNCTION(ks),
+       [S700_MUX_JTAG] = FUNCTION(jtag),
+       [S700_MUX_PWM0] = FUNCTION(pwm0),
+       [S700_MUX_PWM1] = FUNCTION(pwm1),
+       [S700_MUX_PWM2] = FUNCTION(pwm2),
+       [S700_MUX_PWM3] = FUNCTION(pwm3),
+       [S700_MUX_PWM4] = FUNCTION(pwm4),
+       [S700_MUX_PWM5] = FUNCTION(pwm5),
+       [S700_MUX_P0] = FUNCTION(p0),
+       [S700_MUX_SD0] = FUNCTION(sd0),
+       [S700_MUX_SD1] = FUNCTION(sd1),
+       [S700_MUX_SD2] = FUNCTION(sd2),
+       [S700_MUX_I2C0] = FUNCTION(i2c0),
+       [S700_MUX_I2C1] = FUNCTION(i2c1),
+       [S700_MUX_I2C2] = FUNCTION(i2c2),
+       [S700_MUX_I2C3] = FUNCTION(i2c3),
+       [S700_MUX_DSI] = FUNCTION(dsi),
+       [S700_MUX_LVDS] = FUNCTION(lvds),
+       [S700_MUX_USB30] = FUNCTION(usb30),
+       [S700_MUX_CLKO_25M] = FUNCTION(clko_25m),
+       [S700_MUX_MIPI_CSI] = FUNCTION(mipi_csi),
+       [S700_MUX_DSI] = FUNCTION(dsi),
+       [S700_MUX_NAND] = FUNCTION(nand),
+       [S700_MUX_SPDIF] = FUNCTION(spdif),
+       [S700_MUX_SIRQ0] = FUNCTION(sirq0),
+       [S700_MUX_SIRQ1] = FUNCTION(sirq1),
+       [S700_MUX_SIRQ2] = FUNCTION(sirq2),
+       [S700_MUX_BT] = FUNCTION(bt),
+       [S700_MUX_LCD0] = FUNCTION(lcd0),
+};
+
+/* PAD_ST0 */
+static PAD_ST_CONF(UART2_TX, 0, 31, 1);
+static PAD_ST_CONF(I2C0_SDATA, 0, 30, 1);
+static PAD_ST_CONF(UART0_RX, 0, 29, 1);
+static PAD_ST_CONF(I2S_MCLK1, 0, 23, 1);
+static PAD_ST_CONF(ETH_REF_CLK, 0, 22, 1);
+static PAD_ST_CONF(ETH_TXEN, 0, 21, 1);
+static PAD_ST_CONF(ETH_TXD0, 0, 20, 1);
+static PAD_ST_CONF(I2S_LRCLK1, 0, 19, 1);
+static PAD_ST_CONF(DSI_DP0, 0, 16, 1);
+static PAD_ST_CONF(DSI_DN0, 0, 15, 1);
+static PAD_ST_CONF(UART0_TX, 0, 14, 1);
+static PAD_ST_CONF(SD0_CLK, 0, 12, 1);
+static PAD_ST_CONF(KS_IN0, 0, 11, 1);
+static PAD_ST_CONF(SENSOR0_PCLK, 0, 9, 1);
+static PAD_ST_CONF(I2C0_SCLK, 0, 7, 1);
+static PAD_ST_CONF(KS_OUT0, 0, 6, 1);
+static PAD_ST_CONF(KS_OUT1, 0, 5, 1);
+static PAD_ST_CONF(KS_OUT2, 0, 4, 1);
+static PAD_ST_CONF(ETH_TXD3, 0, 3, 1);
+static PAD_ST_CONF(ETH_TXD2, 0, 2, 1);
+
+/* PAD_ST1 */
+static PAD_ST_CONF(DSI_DP2, 1, 31, 1);
+static PAD_ST_CONF(DSI_DN2, 1, 30, 1);
+static PAD_ST_CONF(I2S_LRCLK0, 1, 29, 1);
+static PAD_ST_CONF(UART3_CTSB, 1, 27, 1);
+static PAD_ST_CONF(UART3_RTSB, 1, 26, 1);
+static PAD_ST_CONF(UART3_RX, 1, 25, 1);
+static PAD_ST_CONF(UART2_RTSB, 1, 24, 1);
+static PAD_ST_CONF(UART2_CTSB, 1, 23, 1);
+static PAD_ST_CONF(UART2_RX, 1, 22, 1);
+static PAD_ST_CONF(ETH_RXD0, 1, 21, 1);
+static PAD_ST_CONF(ETH_RXD1, 1, 20, 1);
+static PAD_ST_CONF(ETH_CRS_DV, 1, 19, 1);
+static PAD_ST_CONF(ETH_RXER, 1, 18, 1);
+static PAD_ST_CONF(ETH_TXD1, 1, 17, 1);
+static PAD_ST_CONF(LVDS_OAP, 1, 12, 1);
+static PAD_ST_CONF(PCM1_CLK, 1, 11, 1);
+static PAD_ST_CONF(PCM1_IN, 1, 10, 1);
+static PAD_ST_CONF(PCM1_SYNC, 1, 9, 1);
+static PAD_ST_CONF(I2C1_SCLK, 1, 8, 1);
+static PAD_ST_CONF(I2C1_SDATA, 1, 7, 1);
+static PAD_ST_CONF(I2C2_SCLK, 1, 6, 1);
+static PAD_ST_CONF(I2C2_SDATA, 1, 5, 1);
+
+static PAD_ST_CONF(SPI0_MISO, 1, 3, 1);
+static PAD_ST_CONF(SPI0_SS, 1, 2, 1);
+static PAD_ST_CONF(I2S_BCLK0, 1, 1, 1);
+static PAD_ST_CONF(I2S_MCLK0, 1, 0, 1);
+
+/* PAD_PULLCTL0 */
+static PAD_PULLCTL_CONF(PCM1_SYNC, 0, 30, 1);
+static PAD_PULLCTL_CONF(PCM1_OUT, 0, 29, 1);
+static PAD_PULLCTL_CONF(KS_OUT2, 0, 28, 1);
+static PAD_PULLCTL_CONF(LCD0_D2, 0, 27, 1);
+static PAD_PULLCTL_CONF(DSI_DN3, 0, 26, 1);
+static PAD_PULLCTL_CONF(ETH_RXER, 0, 16, 1);
+static PAD_PULLCTL_CONF(SIRQ0, 0, 14, 2);
+static PAD_PULLCTL_CONF(SIRQ1, 0, 12, 2);
+static PAD_PULLCTL_CONF(SIRQ2, 0, 10, 2);
+static PAD_PULLCTL_CONF(I2C0_SDATA, 0, 9, 1);
+static PAD_PULLCTL_CONF(I2C0_SCLK, 0, 8, 1);
+static PAD_PULLCTL_CONF(KS_IN0, 0, 7, 1);
+static PAD_PULLCTL_CONF(KS_IN1, 0, 6, 1);
+static PAD_PULLCTL_CONF(KS_IN2, 0, 5, 1);
+static PAD_PULLCTL_CONF(KS_IN3, 0, 4, 1);
+static PAD_PULLCTL_CONF(KS_OUT0, 0, 2, 1);
+static PAD_PULLCTL_CONF(KS_OUT1, 0, 1, 1);
+static PAD_PULLCTL_CONF(DSI_DP1, 0, 0, 1);
+
+/* PAD_PULLCTL1 */
+static PAD_PULLCTL_CONF(SD0_D0, 1, 17, 1);
+static PAD_PULLCTL_CONF(SD0_D1, 1, 16, 1);
+static PAD_PULLCTL_CONF(SD0_D2, 1, 15, 1);
+static PAD_PULLCTL_CONF(SD0_D3, 1, 14, 1);
+static PAD_PULLCTL_CONF(SD0_CMD, 1, 13, 1);
+static PAD_PULLCTL_CONF(SD0_CLK, 1, 12, 1);
+static PAD_PULLCTL_CONF(UART0_RX, 1, 2, 1);
+static PAD_PULLCTL_CONF(UART0_TX, 1, 1, 1);
+static PAD_PULLCTL_CONF(CLKO_25M, 1, 0, 1);
+
+/* PAD_PULLCTL2 */
+static PAD_PULLCTL_CONF(ETH_TXD2, 2, 18, 1);
+static PAD_PULLCTL_CONF(ETH_TXD3, 2, 17, 1);
+static PAD_PULLCTL_CONF(SPI0_SS, 2, 16, 1);
+static PAD_PULLCTL_CONF(SPI0_MISO, 2, 15, 1);
+static PAD_PULLCTL_CONF(I2C1_SDATA, 2, 10, 1);
+static PAD_PULLCTL_CONF(I2C1_SCLK, 2, 9, 1);
+static PAD_PULLCTL_CONF(I2C2_SDATA, 2, 8, 1);
+static PAD_PULLCTL_CONF(I2C2_SCLK, 2, 7, 1);
+
+/* Pad info table for the pinmux subsystem */
+static struct owl_padinfo s700_padinfo[NUM_PADS] = {
+       [ETH_TXD0] = PAD_INFO_ST(ETH_TXD0),
+       [ETH_TXD1] = PAD_INFO_ST(ETH_TXD1),
+       [ETH_TXEN] = PAD_INFO_ST(ETH_TXEN),
+       [ETH_RXER] = PAD_INFO_PULLCTL_ST(ETH_RXER),
+       [ETH_CRS_DV] = PAD_INFO_ST(ETH_CRS_DV),
+       [ETH_RXD1] = PAD_INFO_ST(ETH_RXD1),
+       [ETH_RXD0] = PAD_INFO_ST(ETH_RXD0),
+       [ETH_REF_CLK] = PAD_INFO_ST(ETH_REF_CLK),
+       [ETH_MDC] = PAD_INFO(ETH_MDC),
+       [ETH_MDIO] = PAD_INFO(ETH_MDIO),
+       [SIRQ0] = PAD_INFO_PULLCTL(SIRQ0),
+       [SIRQ1] = PAD_INFO_PULLCTL(SIRQ1),
+       [SIRQ2] = PAD_INFO_PULLCTL(SIRQ2),
+       [I2S_D0] = PAD_INFO(I2S_D0),
+       [I2S_BCLK0] = PAD_INFO_ST(I2S_BCLK0),
+       [I2S_LRCLK0] = PAD_INFO_ST(I2S_LRCLK0),
+       [I2S_MCLK0] = PAD_INFO_ST(I2S_MCLK0),
+       [I2S_D1] = PAD_INFO(I2S_D1),
+       [I2S_BCLK1] = PAD_INFO(I2S_BCLK1),
+       [I2S_LRCLK1] = PAD_INFO_ST(I2S_LRCLK1),
+       [I2S_MCLK1] = PAD_INFO_ST(I2S_MCLK1),
+       [KS_IN0] = PAD_INFO_PULLCTL_ST(KS_IN0),
+       [KS_IN1] = PAD_INFO_PULLCTL(KS_IN1),
+       [KS_IN2] = PAD_INFO_PULLCTL(KS_IN2),
+       [KS_IN3] = PAD_INFO_PULLCTL(KS_IN3),
+       [KS_OUT0] = PAD_INFO_PULLCTL_ST(KS_OUT0),
+       [KS_OUT1] = PAD_INFO_PULLCTL_ST(KS_OUT1),
+       [KS_OUT2] = PAD_INFO_PULLCTL_ST(KS_OUT2),
+       [LVDS_OEP] = PAD_INFO(LVDS_OEP),
+       [LVDS_OEN] = PAD_INFO(LVDS_OEN),
+       [LVDS_ODP] = PAD_INFO(LVDS_ODP),
+       [LVDS_ODN] = PAD_INFO(LVDS_ODN),
+       [LVDS_OCP] = PAD_INFO(LVDS_OCP),
+       [LVDS_OCN] = PAD_INFO(LVDS_OCN),
+       [LVDS_OBP] = PAD_INFO(LVDS_OBP),
+       [LVDS_OBN] = PAD_INFO(LVDS_OBN),
+       [LVDS_OAP] = PAD_INFO_ST(LVDS_OAP),
+       [LVDS_OAN] = PAD_INFO(LVDS_OAN),
+       [LVDS_EEP] = PAD_INFO(LVDS_EEP),
+       [LVDS_EEN] = PAD_INFO(LVDS_EEN),
+       [LVDS_EDP] = PAD_INFO(LVDS_EDP),
+       [LVDS_EDN] = PAD_INFO(LVDS_EDN),
+       [LVDS_ECP] = PAD_INFO(LVDS_ECP),
+       [LVDS_ECN] = PAD_INFO(LVDS_ECN),
+       [LVDS_EBP] = PAD_INFO(LVDS_EBP),
+       [LVDS_EBN] = PAD_INFO(LVDS_EBN),
+       [LVDS_EAP] = PAD_INFO(LVDS_EAP),
+       [LVDS_EAN] = PAD_INFO(LVDS_EAN),
+       [LCD0_D18] = PAD_INFO(LCD0_D18),
+       [LCD0_D2] = PAD_INFO_PULLCTL(LCD0_D2),
+       [DSI_DP3] = PAD_INFO(DSI_DP3),
+       [DSI_DN3] = PAD_INFO_PULLCTL(DSI_DN3),
+       [DSI_DP1] = PAD_INFO_PULLCTL(DSI_DP1),
+       [DSI_DN1] = PAD_INFO(DSI_DN1),
+       [DSI_DP0] = PAD_INFO_ST(DSI_DP0),
+       [DSI_DN0] = PAD_INFO_ST(DSI_DN0),
+       [DSI_DP2] = PAD_INFO_ST(DSI_DP2),
+       [DSI_DN2] = PAD_INFO_ST(DSI_DN2),
+       [SD0_D0] = PAD_INFO_PULLCTL(SD0_D0),
+       [SD0_D1] = PAD_INFO_PULLCTL(SD0_D1),
+       [SD0_D2] = PAD_INFO_PULLCTL(SD0_D2),
+       [SD0_D3] = PAD_INFO_PULLCTL(SD0_D3),
+       [SD0_CMD] = PAD_INFO_PULLCTL(SD0_CMD),
+       [SD0_CLK] = PAD_INFO_PULLCTL_ST(SD0_CLK),
+       [SD1_CLK] = PAD_INFO(SD1_CLK),
+       [SPI0_SS] = PAD_INFO_PULLCTL_ST(SPI0_SS),
+       [SPI0_MISO] = PAD_INFO_PULLCTL_ST(SPI0_MISO),
+       [UART0_RX] = PAD_INFO_PULLCTL_ST(UART0_RX),
+       [UART0_TX] = PAD_INFO_PULLCTL_ST(UART0_TX),
+       [I2C0_SCLK] = PAD_INFO_PULLCTL_ST(I2C0_SCLK),
+       [I2C0_SDATA] = PAD_INFO_PULLCTL_ST(I2C0_SDATA),
+       [SENSOR0_PCLK] = PAD_INFO_ST(SENSOR0_PCLK),
+       [SENSOR0_CKOUT] = PAD_INFO(SENSOR0_CKOUT),
+       [DNAND_ALE] = PAD_INFO(DNAND_ALE),
+       [DNAND_CLE] = PAD_INFO(DNAND_CLE),
+       [DNAND_CEB0] = PAD_INFO(DNAND_CEB0),
+       [DNAND_CEB1] = PAD_INFO(DNAND_CEB1),
+       [DNAND_CEB2] = PAD_INFO(DNAND_CEB2),
+       [DNAND_CEB3] = PAD_INFO(DNAND_CEB3),
+       [UART2_RX] = PAD_INFO_ST(UART2_RX),
+       [UART2_TX] = PAD_INFO_ST(UART2_TX),
+       [UART2_RTSB] = PAD_INFO_ST(UART2_RTSB),
+       [UART2_CTSB] = PAD_INFO_ST(UART2_CTSB),
+       [UART3_RX] = PAD_INFO_ST(UART3_RX),
+       [UART3_TX] = PAD_INFO(UART3_TX),
+       [UART3_RTSB] = PAD_INFO_ST(UART3_RTSB),
+       [UART3_CTSB] = PAD_INFO_ST(UART3_CTSB),
+       [PCM1_IN] = PAD_INFO_ST(PCM1_IN),
+       [PCM1_CLK] = PAD_INFO_ST(PCM1_CLK),
+       [PCM1_SYNC] = PAD_INFO_PULLCTL_ST(PCM1_SYNC),
+       [PCM1_OUT] = PAD_INFO_PULLCTL(PCM1_OUT),
+       [I2C1_SCLK] = PAD_INFO_PULLCTL_ST(I2C1_SCLK),
+       [I2C1_SDATA] = PAD_INFO_PULLCTL_ST(I2C1_SDATA),
+       [I2C2_SCLK] = PAD_INFO_PULLCTL_ST(I2C2_SCLK),
+       [I2C2_SDATA] = PAD_INFO_PULLCTL_ST(I2C2_SDATA),
+       [CSI_DN0] = PAD_INFO(CSI_DN0),
+       [CSI_DP0] = PAD_INFO(CSI_DP0),
+       [CSI_DN1] = PAD_INFO(CSI_DN1),
+       [CSI_DP1] = PAD_INFO(CSI_DP1),
+       [CSI_CN] = PAD_INFO(CSI_CN),
+       [CSI_CP] = PAD_INFO(CSI_CP),
+       [CSI_DN2] = PAD_INFO(CSI_DN2),
+       [CSI_DP2] = PAD_INFO(CSI_DP2),
+       [CSI_DN3] = PAD_INFO(CSI_DN3),
+       [CSI_DP3] = PAD_INFO(CSI_DP3),
+       [DNAND_WRB] = PAD_INFO(DNAND_WRB),
+       [DNAND_RDB] = PAD_INFO(DNAND_RDB),
+       [DNAND_RB0] = PAD_INFO(DNAND_RB0),
+       [PORB] = PAD_INFO(PORB),
+       [CLKO_25M] = PAD_INFO_PULLCTL(CLKO_25M),
+       [BSEL] = PAD_INFO(BSEL),
+       [PKG0] = PAD_INFO(PKG0),
+       [PKG1] = PAD_INFO(PKG1),
+       [PKG2] = PAD_INFO(PKG2),
+       [PKG3] = PAD_INFO(PKG3),
+       [ETH_TXD2] = PAD_INFO_PULLCTL_ST(ETH_TXD2),
+       [ETH_TXD3] = PAD_INFO_PULLCTL_ST(ETH_TXD3),
+};
+
+static const struct owl_gpio_port s700_gpio_ports[] = {
+       OWL_GPIO_PORT(A, 0x0000, 32, 0x0, 0x4, 0x8, 0x204, 0x208, 0x20C, 0x230, 0),
+       OWL_GPIO_PORT(B, 0x000C, 32, 0x0, 0x4, 0x8, 0x204, 0x210, 0x214, 0x238, 1),
+       OWL_GPIO_PORT(C, 0x0018, 32, 0x0, 0x4, 0x8, 0x204, 0x218, 0x21C, 0x240, 2),
+       OWL_GPIO_PORT(D, 0x0024, 32, 0x0, 0x4, 0x8, 0x204, 0x220, 0x224, 0x248, 3),
+       /* 0x24C (INTC_GPIOD_TYPE1) used to tweak the driver to handle generic */
+       OWL_GPIO_PORT(E, 0x0030, 8, 0x0, 0x4, 0x8, 0x204, 0x228, 0x22C, 0x24C, 4),
+};
+
+enum s700_pinconf_pull {
+       OWL_PINCONF_PULL_DOWN,
+       OWL_PINCONF_PULL_UP,
+};
+
+static int s700_pad_pinconf_arg2val(const struct owl_padinfo *info,
+                               unsigned int param,
+                               u32 *arg)
+{
+       switch (param) {
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+               *arg = OWL_PINCONF_PULL_DOWN;
+               break;
+       case PIN_CONFIG_BIAS_PULL_UP:
+               *arg = OWL_PINCONF_PULL_UP;
+               break;
+       case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
+               *arg = (*arg >= 1 ? 1 : 0);
+               break;
+       default:
+               return -ENOTSUPP;
+       }
+
+       return 0;
+}
+
+static int s700_pad_pinconf_val2arg(const struct owl_padinfo *padinfo,
+                               unsigned int param,
+                               u32 *arg)
+{
+       switch (param) {
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+               *arg = *arg == OWL_PINCONF_PULL_DOWN;
+               break;
+       case PIN_CONFIG_BIAS_PULL_UP:
+               *arg = *arg == OWL_PINCONF_PULL_UP;
+               break;
+       case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
+               *arg = *arg == 1;
+               break;
+       default:
+               return -ENOTSUPP;
+       }
+
+       return 0;
+}
+
+static struct owl_pinctrl_soc_data s700_pinctrl_data = {
+       .padinfo = s700_padinfo,
+       .pins = (const struct pinctrl_pin_desc *)s700_pads,
+       .npins = ARRAY_SIZE(s700_pads),
+       .functions = s700_functions,
+       .nfunctions = ARRAY_SIZE(s700_functions),
+       .groups = s700_groups,
+       .ngroups = ARRAY_SIZE(s700_groups),
+       .ngpios = NUM_GPIOS,
+       .ports = s700_gpio_ports,
+       .nports = ARRAY_SIZE(s700_gpio_ports),
+       .padctl_arg2val = s700_pad_pinconf_arg2val,
+       .padctl_val2arg = s700_pad_pinconf_val2arg,
+};
+
+static int s700_pinctrl_probe(struct platform_device *pdev)
+{
+       return owl_pinctrl_probe(pdev, &s700_pinctrl_data);
+}
+
+static const struct of_device_id s700_pinctrl_of_match[] = {
+       { .compatible = "actions,s700-pinctrl", },
+       {}
+};
+
+static struct platform_driver s700_pinctrl_driver = {
+       .probe = s700_pinctrl_probe,
+       .driver = {
+               .name = "pinctrl-s700",
+               .of_match_table = of_match_ptr(s700_pinctrl_of_match),
+       },
+};
+
+static int __init s700_pinctrl_init(void)
+{
+       return platform_driver_register(&s700_pinctrl_driver);
+}
+arch_initcall(s700_pinctrl_init);
+
+static void __exit s700_pinctrl_exit(void)
+{
+       platform_driver_unregister(&s700_pinctrl_driver);
+}
+module_exit(s700_pinctrl_exit);
+
+MODULE_AUTHOR("Actions Semi Inc.");
+MODULE_DESCRIPTION("Actions Semi S700 Soc Pinctrl Driver");
+MODULE_LICENSE("GPL");
index ea67b14ef93bd6e4231b1cafc8cafd1dc7216f91..9492b86852e7a9e15cb9783acecd34cca00188fe 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/pinctrl/pinctrl.h>
+#include <linux/pinctrl/pinconf-generic.h>
 #include "pinctrl-owl.h"
 
 /* Pinctrl registers offset */
 #define PAD_SR1                        (0x0274)
 #define PAD_SR2                        (0x0278)
 
-#define OWL_GPIO_PORT_A                0
-#define OWL_GPIO_PORT_B                1
-#define OWL_GPIO_PORT_C                2
-#define OWL_GPIO_PORT_D                3
-#define OWL_GPIO_PORT_E                4
-#define OWL_GPIO_PORT_F                5
-
 #define _GPIOA(offset)         (offset)
 #define _GPIOB(offset)         (32 + (offset))
 #define _GPIOC(offset)         (64 + (offset))
@@ -892,55 +886,6 @@ static unsigned int i2c2_sr_pads[]         = { I2C2_SCLK, I2C2_SDATA };
 static unsigned int sensor0_sr_pads[]          = { SENSOR0_PCLK,
                                                    SENSOR0_CKOUT };
 
-#define MUX_PG(group_name, reg, shift, width)                          \
-       {                                                               \
-               .name = #group_name,                                    \
-               .pads = group_name##_pads,                              \
-               .npads = ARRAY_SIZE(group_name##_pads),                 \
-               .funcs = group_name##_funcs,                            \
-               .nfuncs = ARRAY_SIZE(group_name##_funcs),               \
-               .mfpctl_reg  = MFCTL##reg,                              \
-               .mfpctl_shift = shift,                                  \
-               .mfpctl_width = width,                                  \
-               .drv_reg = -1,                                          \
-               .drv_shift = -1,                                        \
-               .drv_width = -1,                                        \
-               .sr_reg = -1,                                           \
-               .sr_shift = -1,                                         \
-               .sr_width = -1,                                         \
-       }
-
-#define DRV_PG(group_name, reg, shift, width)                          \
-       {                                                               \
-               .name = #group_name,                                    \
-               .pads = group_name##_pads,                              \
-               .npads = ARRAY_SIZE(group_name##_pads),                 \
-               .mfpctl_reg  = -1,                                      \
-               .mfpctl_shift = -1,                                     \
-               .mfpctl_width = -1,                                     \
-               .drv_reg = PAD_DRV##reg,                                \
-               .drv_shift = shift,                                     \
-               .drv_width = width,                                     \
-               .sr_reg = -1,                                           \
-               .sr_shift = -1,                                         \
-               .sr_width = -1,                                         \
-       }
-
-#define SR_PG(group_name, reg, shift, width)                           \
-       {                                                               \
-               .name = #group_name,                                    \
-               .pads = group_name##_pads,                              \
-               .npads = ARRAY_SIZE(group_name##_pads),                 \
-               .mfpctl_reg  = -1,                                      \
-               .mfpctl_shift = -1,                                     \
-               .mfpctl_width = -1,                                     \
-               .drv_reg = -1,                                          \
-               .drv_shift = -1,                                        \
-               .drv_width = -1,                                        \
-               .sr_reg = PAD_SR##reg,                                  \
-               .sr_shift = shift,                                      \
-               .sr_width = width,                                      \
-       }
 
 /* Pinctrl groups */
 static const struct owl_pingroup s900_groups[] = {
@@ -1442,13 +1387,6 @@ static const char * const sirq2_groups[] = {
        "sirq2_dummy",
 };
 
-#define FUNCTION(fname)                                        \
-       {                                               \
-               .name = #fname,                         \
-               .groups = fname##_groups,               \
-               .ngroups = ARRAY_SIZE(fname##_groups),  \
-       }
-
 static const struct owl_pinmux_func s900_functions[] = {
        [S900_MUX_ERAM] = FUNCTION(eram),
        [S900_MUX_ETH_RMII] = FUNCTION(eth_rmii),
@@ -1500,28 +1438,6 @@ static const struct owl_pinmux_func s900_functions[] = {
        [S900_MUX_SIRQ1] = FUNCTION(sirq1),
        [S900_MUX_SIRQ2] = FUNCTION(sirq2)
 };
-/* PAD PULL UP/DOWN CONFIGURES */
-#define PULLCTL_CONF(pull_reg, pull_sft, pull_wdt)                     \
-       {                                                               \
-               .reg = PAD_PULLCTL##pull_reg,                           \
-               .shift = pull_sft,                                      \
-               .width = pull_wdt,                                      \
-       }
-
-#define PAD_PULLCTL_CONF(pad_name, pull_reg, pull_sft, pull_wdt)       \
-       struct owl_pullctl pad_name##_pullctl_conf                      \
-               = PULLCTL_CONF(pull_reg, pull_sft, pull_wdt)
-
-#define ST_CONF(st_reg, st_sft, st_wdt)                                        \
-       {                                                               \
-               .reg = PAD_ST##st_reg,                                  \
-               .shift = st_sft,                                        \
-               .width = st_wdt,                                        \
-       }
-
-#define PAD_ST_CONF(pad_name, st_reg, st_sft, st_wdt)                  \
-       struct owl_st pad_name##_st_conf                                \
-               = ST_CONF(st_reg, st_sft, st_wdt)
 
 /* PAD_PULLCTL0 */
 static PAD_PULLCTL_CONF(ETH_RXER, 0, 18, 2);
@@ -1639,34 +1555,6 @@ static PAD_ST_CONF(SPI0_SS, 1, 2, 1);
 static PAD_ST_CONF(I2S_BCLK0, 1, 1, 1);
 static PAD_ST_CONF(I2S_MCLK0, 1, 0, 1);
 
-#define PAD_INFO(name)                                                 \
-       {                                                               \
-               .pad = name,                                            \
-               .pullctl = NULL,                                        \
-               .st = NULL,                                             \
-       }
-
-#define PAD_INFO_ST(name)                                              \
-       {                                                               \
-               .pad = name,                                            \
-               .pullctl = NULL,                                        \
-               .st = &name##_st_conf,                                  \
-       }
-
-#define PAD_INFO_PULLCTL(name)                                         \
-       {                                                               \
-               .pad = name,                                            \
-               .pullctl = &name##_pullctl_conf,                        \
-               .st = NULL,                                             \
-       }
-
-#define PAD_INFO_PULLCTL_ST(name)                                      \
-       {                                                               \
-               .pad = name,                                            \
-               .pullctl = &name##_pullctl_conf,                        \
-               .st = &name##_st_conf,                                  \
-       }
-
 /* Pad info table */
 static struct owl_padinfo s900_padinfo[NUM_PADS] = {
        [ETH_TXD0] = PAD_INFO_ST(ETH_TXD0),
@@ -1821,29 +1709,76 @@ static struct owl_padinfo s900_padinfo[NUM_PADS] = {
        [SGPIO3] = PAD_INFO_PULLCTL_ST(SGPIO3)
 };
 
-#define OWL_GPIO_PORT(port, base, count, _outen, _inen, _dat,          \
-                       _intc_ctl, _intc_pd, _intc_msk, _intc_type)     \
-       [OWL_GPIO_PORT_##port] = {                                      \
-               .offset = base,                                         \
-               .pins = count,                                          \
-               .outen = _outen,                                        \
-               .inen = _inen,                                          \
-               .dat = _dat,                                            \
-               .intc_ctl = _intc_ctl,                                  \
-               .intc_pd = _intc_pd,                                    \
-               .intc_msk = _intc_msk,                                  \
-               .intc_type = _intc_type,                                \
-       }
-
 static const struct owl_gpio_port s900_gpio_ports[] = {
-       OWL_GPIO_PORT(A, 0x0000, 32, 0x0, 0x4, 0x8, 0x204, 0x208, 0x20C, 0x240),
-       OWL_GPIO_PORT(B, 0x000C, 32, 0x0, 0x4, 0x8, 0x534, 0x204, 0x208, 0x23C),
-       OWL_GPIO_PORT(C, 0x0018, 12, 0x0, 0x4, 0x8, 0x52C, 0x200, 0x204, 0x238),
-       OWL_GPIO_PORT(D, 0x0024, 30, 0x0, 0x4, 0x8, 0x524, 0x1FC, 0x200, 0x234),
-       OWL_GPIO_PORT(E, 0x0030, 32, 0x0, 0x4, 0x8, 0x51C, 0x1F8, 0x1FC, 0x230),
-       OWL_GPIO_PORT(F, 0x00F0, 8, 0x0, 0x4, 0x8, 0x460, 0x140, 0x144, 0x178)
+       OWL_GPIO_PORT(A, 0x0000, 32, 0x0, 0x4, 0x8, 0x204, 0x208, 0x20C, 0x240, 0),
+       OWL_GPIO_PORT(B, 0x000C, 32, 0x0, 0x4, 0x8, 0x534, 0x204, 0x208, 0x23C, 0),
+       OWL_GPIO_PORT(C, 0x0018, 12, 0x0, 0x4, 0x8, 0x52C, 0x200, 0x204, 0x238, 0),
+       OWL_GPIO_PORT(D, 0x0024, 30, 0x0, 0x4, 0x8, 0x524, 0x1FC, 0x200, 0x234, 0),
+       OWL_GPIO_PORT(E, 0x0030, 32, 0x0, 0x4, 0x8, 0x51C, 0x1F8, 0x1FC, 0x230, 0),
+       OWL_GPIO_PORT(F, 0x00F0, 8, 0x0, 0x4, 0x8, 0x460, 0x140, 0x144, 0x178, 0)
 };
 
+enum s900_pinconf_pull {
+       OWL_PINCONF_PULL_HIZ,
+       OWL_PINCONF_PULL_DOWN,
+       OWL_PINCONF_PULL_UP,
+       OWL_PINCONF_PULL_HOLD,
+};
+
+static int s900_pad_pinconf_arg2val(const struct owl_padinfo *info,
+                               unsigned int param,
+                               u32 *arg)
+{
+       switch (param) {
+       case PIN_CONFIG_BIAS_BUS_HOLD:
+               *arg = OWL_PINCONF_PULL_HOLD;
+               break;
+       case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
+               *arg = OWL_PINCONF_PULL_HIZ;
+               break;
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+               *arg = OWL_PINCONF_PULL_DOWN;
+               break;
+       case PIN_CONFIG_BIAS_PULL_UP:
+               *arg = OWL_PINCONF_PULL_UP;
+               break;
+       case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
+               *arg = (*arg >= 1 ? 1 : 0);
+               break;
+       default:
+               return -ENOTSUPP;
+       }
+
+       return 0;
+}
+
+static int s900_pad_pinconf_val2arg(const struct owl_padinfo *padinfo,
+                               unsigned int param,
+                               u32 *arg)
+{
+       switch (param) {
+       case PIN_CONFIG_BIAS_BUS_HOLD:
+               *arg = *arg == OWL_PINCONF_PULL_HOLD;
+               break;
+       case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
+               *arg = *arg == OWL_PINCONF_PULL_HIZ;
+               break;
+       case PIN_CONFIG_BIAS_PULL_DOWN:
+               *arg = *arg == OWL_PINCONF_PULL_DOWN;
+               break;
+       case PIN_CONFIG_BIAS_PULL_UP:
+               *arg = *arg == OWL_PINCONF_PULL_UP;
+               break;
+       case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
+               *arg = *arg == 1;
+               break;
+       default:
+               return -ENOTSUPP;
+       }
+
+       return 0;
+}
+
 static struct owl_pinctrl_soc_data s900_pinctrl_data = {
        .padinfo = s900_padinfo,
        .pins = (const struct pinctrl_pin_desc *)s900_pads,
@@ -1854,7 +1789,9 @@ static struct owl_pinctrl_soc_data s900_pinctrl_data = {
        .ngroups = ARRAY_SIZE(s900_groups),
        .ngpios = NUM_GPIOS,
        .ports = s900_gpio_ports,
-       .nports = ARRAY_SIZE(s900_gpio_ports)
+       .nports = ARRAY_SIZE(s900_gpio_ports),
+       .padctl_arg2val = s900_pad_pinconf_arg2val,
+       .padctl_val2arg = s900_pad_pinconf_val2arg,
 };
 
 static int s900_pinctrl_probe(struct platform_device *pdev)
index 191ed0fc180461624338461e77233aaf1d63eac6..790b406aae196b242bee93dc9a87dbcee86cba3f 100644 (file)
@@ -1,6 +1,6 @@
 # Aspeed pinctrl support
 
-ccflags-y += -Woverride-init
+ccflags-y += $(call cc-option,-Woverride-init)
 obj-$(CONFIG_PINCTRL_ASPEED)   += pinctrl-aspeed.o
 obj-$(CONFIG_PINCTRL_ASPEED_G4)        += pinctrl-aspeed-g4.o
 obj-$(CONFIG_PINCTRL_ASPEED_G5)        += pinctrl-aspeed-g5.o
index fa530913a2c8fc73c37a9b668447f1058d99815a..f180aa44a422ffb8207a1de7f5ddd9c8bc708e66 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Driver for Broadcom BCM2835 GPIO unit (pinctrl + GPIO)
  *
@@ -6,16 +7,6 @@
  * This driver is inspired by:
  * pinctrl-nomadik.c, please see original file for copyright information
  * pinctrl-tegra.c, please see original file for copyright information
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
  */
 
 #include <linux/bitmap.h>
 #define GPIO_REG_OFFSET(p)     ((p) / 32)
 #define GPIO_REG_SHIFT(p)      ((p) % 32)
 
-enum bcm2835_pinconf_param {
-       /* argument: bcm2835_pinconf_pull */
-       BCM2835_PINCONF_PARAM_PULL = (PIN_CONFIG_END + 1),
-};
+/* argument: bcm2835_pinconf_pull */
+#define BCM2835_PINCONF_PARAM_PULL     (PIN_CONFIG_END + 1)
 
 struct bcm2835_pinctrl {
        struct device *dev;
@@ -90,7 +79,7 @@ struct bcm2835_pinctrl {
        struct gpio_chip gpio_chip;
        struct pinctrl_gpio_range gpio_range;
 
-       spinlock_t irq_lock[BCM2835_NUM_BANKS];
+       raw_spinlock_t irq_lock[BCM2835_NUM_BANKS];
 };
 
 /* pins are just named GPIO0..GPIO53 */
@@ -461,10 +450,10 @@ static void bcm2835_gpio_irq_enable(struct irq_data *data)
        unsigned bank = GPIO_REG_OFFSET(gpio);
        unsigned long flags;
 
-       spin_lock_irqsave(&pc->irq_lock[bank], flags);
+       raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
        set_bit(offset, &pc->enabled_irq_map[bank]);
        bcm2835_gpio_irq_config(pc, gpio, true);
-       spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
+       raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
 }
 
 static void bcm2835_gpio_irq_disable(struct irq_data *data)
@@ -476,12 +465,12 @@ static void bcm2835_gpio_irq_disable(struct irq_data *data)
        unsigned bank = GPIO_REG_OFFSET(gpio);
        unsigned long flags;
 
-       spin_lock_irqsave(&pc->irq_lock[bank], flags);
+       raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
        bcm2835_gpio_irq_config(pc, gpio, false);
        /* Clear events that were latched prior to clearing event sources */
        bcm2835_gpio_set_bit(pc, GPEDS0, gpio);
        clear_bit(offset, &pc->enabled_irq_map[bank]);
-       spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
+       raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
 }
 
 static int __bcm2835_gpio_irq_set_type_disabled(struct bcm2835_pinctrl *pc,
@@ -584,7 +573,7 @@ static int bcm2835_gpio_irq_set_type(struct irq_data *data, unsigned int type)
        unsigned long flags;
        int ret;
 
-       spin_lock_irqsave(&pc->irq_lock[bank], flags);
+       raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
 
        if (test_bit(offset, &pc->enabled_irq_map[bank]))
                ret = __bcm2835_gpio_irq_set_type_enabled(pc, gpio, type);
@@ -596,7 +585,7 @@ static int bcm2835_gpio_irq_set_type(struct irq_data *data, unsigned int type)
        else
                irq_set_handler_locked(data, handle_level_irq);
 
-       spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
+       raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
 
        return ret;
 }
@@ -1047,7 +1036,7 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev)
                for_each_set_bit(offset, &events, 32)
                        bcm2835_gpio_wr(pc, GPEDS0 + i * 4, BIT(offset));
 
-               spin_lock_init(&pc->irq_lock[i]);
+               raw_spin_lock_init(&pc->irq_lock[i]);
        }
 
        err = gpiochip_add_data(&pc->gpio_chip, pc);
index d7f8175d2c1c86b2d4799b3faafd0a27da402ca4..e79690bd8b85f25a9e8a9665dd4a1cc08bbb8ca8 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <linux/err.h>
 #include <linux/io.h>
+#include <linux/mfd/syscon.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
@@ -12,6 +13,7 @@
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/pinctrl/pinmux.h>
 #include <linux/platform_device.h>
+#include <linux/regmap.h>
 #include <linux/slab.h>
 
 #define FLAG_BCM4708           BIT(1)
@@ -22,7 +24,8 @@ struct ns_pinctrl {
        struct device *dev;
        unsigned int chipset_flag;
        struct pinctrl_dev *pctldev;
-       void __iomem *base;
+       struct regmap *regmap;
+       u32 offset;
 
        struct pinctrl_desc pctldesc;
        struct ns_pinctrl_group *groups;
@@ -229,9 +232,9 @@ static int ns_pinctrl_set_mux(struct pinctrl_dev *pctrl_dev,
                unset |= BIT(pin_number);
        }
 
-       tmp = readl(ns_pinctrl->base);
+       regmap_read(ns_pinctrl->regmap, ns_pinctrl->offset, &tmp);
        tmp &= ~unset;
-       writel(tmp, ns_pinctrl->base);
+       regmap_write(ns_pinctrl->regmap, ns_pinctrl->offset, tmp);
 
        return 0;
 }
@@ -263,13 +266,13 @@ static const struct of_device_id ns_pinctrl_of_match_table[] = {
 static int ns_pinctrl_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
+       struct device_node *np = dev->of_node;
        const struct of_device_id *of_id;
        struct ns_pinctrl *ns_pinctrl;
        struct pinctrl_desc *pctldesc;
        struct pinctrl_pin_desc *pin;
        struct ns_pinctrl_group *group;
        struct ns_pinctrl_function *function;
-       struct resource *res;
        int i;
 
        ns_pinctrl = devm_kzalloc(dev, sizeof(*ns_pinctrl), GFP_KERNEL);
@@ -287,12 +290,18 @@ static int ns_pinctrl_probe(struct platform_device *pdev)
                return -EINVAL;
        ns_pinctrl->chipset_flag = (uintptr_t)of_id->data;
 
-       res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-                                          "cru_gpio_control");
-       ns_pinctrl->base = devm_ioremap_resource(dev, res);
-       if (IS_ERR(ns_pinctrl->base)) {
-               dev_err(dev, "Failed to map pinctrl regs\n");
-               return PTR_ERR(ns_pinctrl->base);
+       ns_pinctrl->regmap = syscon_node_to_regmap(of_get_parent(np));
+       if (IS_ERR(ns_pinctrl->regmap)) {
+               int err = PTR_ERR(ns_pinctrl->regmap);
+
+               dev_err(dev, "Failed to map pinctrl regs: %d\n", err);
+
+               return err;
+       }
+
+       if (of_property_read_u32(np, "offset", &ns_pinctrl->offset)) {
+               dev_err(dev, "Failed to get register offset\n");
+               return -ENOENT;
        }
 
        memcpy(pctldesc, &ns_pinctrl_desc, sizeof(*pctldesc));
index dccf64c554985684e03e4428b9977afc2b56526b..72b869d888e2d7ca804aaa9eb3be367085c5d307 100644 (file)
@@ -5,6 +5,11 @@ config PINCTRL_IMX
        select GENERIC_PINCONF
        select REGMAP
 
+config PINCTRL_IMX_SCU
+       bool
+       depends on IMX_SCU
+       select PINCTRL_IMX
+
 config PINCTRL_IMX1_CORE
        bool
        select PINMUX
@@ -119,11 +124,18 @@ config PINCTRL_IMX7ULP
 
 config PINCTRL_IMX8MQ
        bool "IMX8MQ pinctrl driver"
-       depends on SOC_IMX8MQ
+       depends on ARCH_MXC && ARM64
        select PINCTRL_IMX
        help
          Say Y here to enable the imx8mq pinctrl driver
 
+config PINCTRL_IMX8QXP
+       bool "IMX8QXP pinctrl driver"
+       depends on ARCH_MXC && ARM64
+       select PINCTRL_IMX_SCU
+       help
+         Say Y here to enable the imx8qxp pinctrl driver
+
 config PINCTRL_VF610
        bool "Freescale Vybrid VF610 pinctrl driver"
        depends on SOC_VF610
index 73175b3e7c9c1deb2ee74cd3bb57b95676cfed7d..6ee398a3e4065ff79641918a590dbc2a965c41c7 100644 (file)
@@ -1,6 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 # Freescale pin control drivers
 obj-$(CONFIG_PINCTRL_IMX)      += pinctrl-imx.o
+obj-$(CONFIG_PINCTRL_IMX_SCU)  += pinctrl-scu.o
 obj-$(CONFIG_PINCTRL_IMX1_CORE)        += pinctrl-imx1-core.o
 obj-$(CONFIG_PINCTRL_IMX1)     += pinctrl-imx1.o
 obj-$(CONFIG_PINCTRL_IMX21)    += pinctrl-imx21.o
@@ -18,6 +19,7 @@ obj-$(CONFIG_PINCTRL_IMX6UL)  += pinctrl-imx6ul.o
 obj-$(CONFIG_PINCTRL_IMX7D)    += pinctrl-imx7d.o
 obj-$(CONFIG_PINCTRL_IMX7ULP)  += pinctrl-imx7ulp.o
 obj-$(CONFIG_PINCTRL_IMX8MQ)   += pinctrl-imx8mq.o
+obj-$(CONFIG_PINCTRL_IMX8QXP)  += pinctrl-imx8qxp.o
 obj-$(CONFIG_PINCTRL_VF610)    += pinctrl-vf610.o
 obj-$(CONFIG_PINCTRL_MXS)      += pinctrl-mxs.o
 obj-$(CONFIG_PINCTRL_IMX23)    += pinctrl-imx23.o
index 4e8cf0e357c6eb638c958e9a20fbe610b49c299a..188001beb298f1f8e0cb193aea789276e57b518d 100644 (file)
@@ -57,9 +57,11 @@ static int imx_dt_node_to_map(struct pinctrl_dev *pctldev,
                        struct pinctrl_map **map, unsigned *num_maps)
 {
        struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
+       const struct imx_pinctrl_soc_info *info = ipctl->info;
        const struct group_desc *grp;
        struct pinctrl_map *new_map;
        struct device_node *parent;
+       struct imx_pin *pin;
        int map_num = 1;
        int i, j;
 
@@ -73,11 +75,14 @@ static int imx_dt_node_to_map(struct pinctrl_dev *pctldev,
                return -EINVAL;
        }
 
-       for (i = 0; i < grp->num_pins; i++) {
-               struct imx_pin *pin = &((struct imx_pin *)(grp->data))[i];
-
-               if (!(pin->config & IMX_NO_PAD_CTL))
-                       map_num++;
+       if (info->flags & IMX_USE_SCU) {
+               map_num += grp->num_pins;
+       } else {
+               for (i = 0; i < grp->num_pins; i++) {
+                       pin = &((struct imx_pin *)(grp->data))[i];
+                       if (!(pin->conf.mmio.config & IMX_NO_PAD_CTL))
+                               map_num++;
+               }
        }
 
        new_map = kmalloc_array(map_num, sizeof(struct pinctrl_map),
@@ -102,16 +107,35 @@ static int imx_dt_node_to_map(struct pinctrl_dev *pctldev,
        /* create config map */
        new_map++;
        for (i = j = 0; i < grp->num_pins; i++) {
-               struct imx_pin *pin = &((struct imx_pin *)(grp->data))[i];
+               pin = &((struct imx_pin *)(grp->data))[i];
 
-               if (!(pin->config & IMX_NO_PAD_CTL)) {
-                       new_map[j].type = PIN_MAP_TYPE_CONFIGS_PIN;
-                       new_map[j].data.configs.group_or_pin =
+               /*
+                * We only create config maps for SCU pads or MMIO pads that
+                * are not using the default config(a.k.a IMX_NO_PAD_CTL)
+                */
+               if (!(info->flags & IMX_USE_SCU) &&
+                   (pin->conf.mmio.config & IMX_NO_PAD_CTL))
+                       continue;
+
+               new_map[j].type = PIN_MAP_TYPE_CONFIGS_PIN;
+               new_map[j].data.configs.group_or_pin =
                                        pin_get_name(pctldev, pin->pin);
-                       new_map[j].data.configs.configs = &pin->config;
+
+               if (info->flags & IMX_USE_SCU) {
+                       /*
+                        * For SCU case, we set mux and conf together
+                        * in one IPC call
+                        */
+                       new_map[j].data.configs.configs =
+                                       (unsigned long *)&pin->conf.scu;
+                       new_map[j].data.configs.num_configs = 2;
+               } else {
+                       new_map[j].data.configs.configs =
+                                       &pin->conf.mmio.config;
                        new_map[j].data.configs.num_configs = 1;
-                       j++;
                }
+
+               j++;
        }
 
        dev_dbg(pctldev->dev, "maps: function %s group %s num %d\n",
@@ -133,19 +157,96 @@ static const struct pinctrl_ops imx_pctrl_ops = {
        .pin_dbg_show = imx_pin_dbg_show,
        .dt_node_to_map = imx_dt_node_to_map,
        .dt_free_map = imx_dt_free_map,
-
 };
 
+static int imx_pmx_set_one_pin_mmio(struct imx_pinctrl *ipctl,
+                                   struct imx_pin *pin)
+{
+       const struct imx_pinctrl_soc_info *info = ipctl->info;
+       struct imx_pin_mmio *pin_mmio = &pin->conf.mmio;
+       const struct imx_pin_reg *pin_reg;
+       unsigned int pin_id;
+
+       pin_id = pin->pin;
+       pin_reg = &ipctl->pin_regs[pin_id];
+
+       if (pin_reg->mux_reg == -1) {
+               dev_dbg(ipctl->dev, "Pin(%s) does not support mux function\n",
+                       info->pins[pin_id].name);
+               return 0;
+       }
+
+       if (info->flags & SHARE_MUX_CONF_REG) {
+               u32 reg;
+
+               reg = readl(ipctl->base + pin_reg->mux_reg);
+               reg &= ~info->mux_mask;
+               reg |= (pin_mmio->mux_mode << info->mux_shift);
+               writel(reg, ipctl->base + pin_reg->mux_reg);
+               dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n",
+                       pin_reg->mux_reg, reg);
+       } else {
+               writel(pin_mmio->mux_mode, ipctl->base + pin_reg->mux_reg);
+               dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n",
+                       pin_reg->mux_reg, pin_mmio->mux_mode);
+       }
+
+       /*
+        * If the select input value begins with 0xff, it's a quirky
+        * select input and the value should be interpreted as below.
+        *     31     23      15      7        0
+        *     | 0xff | shift | width | select |
+        * It's used to work around the problem that the select
+        * input for some pin is not implemented in the select
+        * input register but in some general purpose register.
+        * We encode the select input value, width and shift of
+        * the bit field into input_val cell of pin function ID
+        * in device tree, and then decode them here for setting
+        * up the select input bits in general purpose register.
+        */
+       if (pin_mmio->input_val >> 24 == 0xff) {
+               u32 val = pin_mmio->input_val;
+               u8 select = val & 0xff;
+               u8 width = (val >> 8) & 0xff;
+               u8 shift = (val >> 16) & 0xff;
+               u32 mask = ((1 << width) - 1) << shift;
+               /*
+                * The input_reg[i] here is actually some IOMUXC general
+                * purpose register, not regular select input register.
+                */
+               val = readl(ipctl->base + pin_mmio->input_reg);
+               val &= ~mask;
+               val |= select << shift;
+               writel(val, ipctl->base + pin_mmio->input_reg);
+       } else if (pin_mmio->input_reg) {
+               /*
+                * Regular select input register can never be at offset
+                * 0, and we only print register value for regular case.
+                */
+               if (ipctl->input_sel_base)
+                       writel(pin_mmio->input_val, ipctl->input_sel_base +
+                                       pin_mmio->input_reg);
+               else
+                       writel(pin_mmio->input_val, ipctl->base +
+                                       pin_mmio->input_reg);
+               dev_dbg(ipctl->dev,
+                       "==>select_input: offset 0x%x val 0x%x\n",
+                       pin_mmio->input_reg, pin_mmio->input_val);
+       }
+
+       return 0;
+}
+
 static int imx_pmx_set(struct pinctrl_dev *pctldev, unsigned selector,
                       unsigned group)
 {
        struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
        const struct imx_pinctrl_soc_info *info = ipctl->info;
-       const struct imx_pin_reg *pin_reg;
-       unsigned int npins, pin_id;
-       int i;
-       struct group_desc *grp = NULL;
-       struct function_desc *func = NULL;
+       struct function_desc *func;
+       struct group_desc *grp;
+       struct imx_pin *pin;
+       unsigned int npins;
+       int i, err;
 
        /*
         * Configure the mux mode for each pin in the group for a specific
@@ -165,72 +266,16 @@ static int imx_pmx_set(struct pinctrl_dev *pctldev, unsigned selector,
                func->name, grp->name);
 
        for (i = 0; i < npins; i++) {
-               struct imx_pin *pin = &((struct imx_pin *)(grp->data))[i];
-
-               pin_id = pin->pin;
-               pin_reg = &ipctl->pin_regs[pin_id];
-
-               if (pin_reg->mux_reg == -1) {
-                       dev_dbg(ipctl->dev, "Pin(%s) does not support mux function\n",
-                               info->pins[pin_id].name);
-                       continue;
-               }
-
-               if (info->flags & SHARE_MUX_CONF_REG) {
-                       u32 reg;
-                       reg = readl(ipctl->base + pin_reg->mux_reg);
-                       reg &= ~info->mux_mask;
-                       reg |= (pin->mux_mode << info->mux_shift);
-                       writel(reg, ipctl->base + pin_reg->mux_reg);
-                       dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n",
-                               pin_reg->mux_reg, reg);
-               } else {
-                       writel(pin->mux_mode, ipctl->base + pin_reg->mux_reg);
-                       dev_dbg(ipctl->dev, "write: offset 0x%x val 0x%x\n",
-                               pin_reg->mux_reg, pin->mux_mode);
-               }
-
                /*
-                * If the select input value begins with 0xff, it's a quirky
-                * select input and the value should be interpreted as below.
-                *     31     23      15      7        0
-                *     | 0xff | shift | width | select |
-                * It's used to work around the problem that the select
-                * input for some pin is not implemented in the select
-                * input register but in some general purpose register.
-                * We encode the select input value, width and shift of
-                * the bit field into input_val cell of pin function ID
-                * in device tree, and then decode them here for setting
-                * up the select input bits in general purpose register.
+                * For IMX_USE_SCU case, we postpone the mux setting
+                * until config is set as we can set them together
+                * in one IPC call
                 */
-               if (pin->input_val >> 24 == 0xff) {
-                       u32 val = pin->input_val;
-                       u8 select = val & 0xff;
-                       u8 width = (val >> 8) & 0xff;
-                       u8 shift = (val >> 16) & 0xff;
-                       u32 mask = ((1 << width) - 1) << shift;
-                       /*
-                        * The input_reg[i] here is actually some IOMUXC general
-                        * purpose register, not regular select input register.
-                        */
-                       val = readl(ipctl->base + pin->input_reg);
-                       val &= ~mask;
-                       val |= select << shift;
-                       writel(val, ipctl->base + pin->input_reg);
-               } else if (pin->input_reg) {
-                       /*
-                        * Regular select input register can never be at offset
-                        * 0, and we only print register value for regular case.
-                        */
-                       if (ipctl->input_sel_base)
-                               writel(pin->input_val, ipctl->input_sel_base +
-                                               pin->input_reg);
-                       else
-                               writel(pin->input_val, ipctl->base +
-                                               pin->input_reg);
-                       dev_dbg(ipctl->dev,
-                               "==>select_input: offset 0x%x val 0x%x\n",
-                               pin->input_reg, pin->input_val);
+               pin = &((struct imx_pin *)(grp->data))[i];
+               if (!(info->flags & IMX_USE_SCU)) {
+                       err = imx_pmx_set_one_pin_mmio(ipctl, pin);
+                       if (err)
+                               return err;
                }
        }
 
@@ -300,8 +345,8 @@ static u32 imx_pinconf_parse_generic_config(struct device_node *np,
        return imx_pinconf_decode_generic_config(ipctl, configs, num_configs);
 }
 
-static int imx_pinconf_get(struct pinctrl_dev *pctldev,
-                            unsigned pin_id, unsigned long *config)
+static int imx_pinconf_get_mmio(struct pinctrl_dev *pctldev, unsigned pin_id,
+                               unsigned long *config)
 {
        struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
        const struct imx_pinctrl_soc_info *info = ipctl->info;
@@ -321,9 +366,21 @@ static int imx_pinconf_get(struct pinctrl_dev *pctldev,
        return 0;
 }
 
-static int imx_pinconf_set(struct pinctrl_dev *pctldev,
-                            unsigned pin_id, unsigned long *configs,
-                            unsigned num_configs)
+static int imx_pinconf_get(struct pinctrl_dev *pctldev,
+                          unsigned pin_id, unsigned long *config)
+{
+       struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
+       const struct imx_pinctrl_soc_info *info = ipctl->info;
+
+       if (info->flags & IMX_USE_SCU)
+               return imx_pinconf_get_scu(pctldev, pin_id, config);
+       else
+               return imx_pinconf_get_mmio(pctldev, pin_id, config);
+}
+
+static int imx_pinconf_set_mmio(struct pinctrl_dev *pctldev,
+                               unsigned pin_id, unsigned long *configs,
+                               unsigned num_configs)
 {
        struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
        const struct imx_pinctrl_soc_info *info = ipctl->info;
@@ -358,19 +415,48 @@ static int imx_pinconf_set(struct pinctrl_dev *pctldev,
        return 0;
 }
 
+static int imx_pinconf_set(struct pinctrl_dev *pctldev,
+                          unsigned pin_id, unsigned long *configs,
+                          unsigned num_configs)
+{
+       struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
+       const struct imx_pinctrl_soc_info *info = ipctl->info;
+
+       if (info->flags & IMX_USE_SCU)
+               return imx_pinconf_set_scu(pctldev, pin_id,
+                                          configs, num_configs);
+       else
+               return imx_pinconf_set_mmio(pctldev, pin_id,
+                                           configs, num_configs);
+}
+
 static void imx_pinconf_dbg_show(struct pinctrl_dev *pctldev,
                                   struct seq_file *s, unsigned pin_id)
 {
        struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
-       const struct imx_pin_reg *pin_reg = &ipctl->pin_regs[pin_id];
+       const struct imx_pinctrl_soc_info *info = ipctl->info;
+       const struct imx_pin_reg *pin_reg;
        unsigned long config;
+       int ret;
 
-       if (!pin_reg || pin_reg->conf_reg == -1) {
-               seq_puts(s, "N/A");
-               return;
+       if (info->flags & IMX_USE_SCU) {
+               ret = imx_pinconf_get_scu(pctldev, pin_id, &config);
+               if (ret) {
+                       dev_err(ipctl->dev, "failed to get %s pinconf\n",
+                               pin_get_name(pctldev, pin_id));
+                       seq_puts(s, "N/A");
+                       return;
+               }
+       } else {
+               pin_reg = &ipctl->pin_regs[pin_id];
+               if (!pin_reg || pin_reg->conf_reg == -1) {
+                       seq_puts(s, "N/A");
+                       return;
+               }
+
+               config = readl(ipctl->base + pin_reg->conf_reg);
        }
 
-       config = readl(ipctl->base + pin_reg->conf_reg);
        seq_printf(s, "0x%lx", config);
 }
 
@@ -418,9 +504,65 @@ static const struct pinconf_ops imx_pinconf_ops = {
  *     <mux_reg conf_reg input_reg mux_mode input_val>
  * SHARE_MUX_CONF_REG:
  *     <mux_conf_reg input_reg mux_mode input_val>
+ * IMX_USE_SCU:
+ *     <pin_id mux_mode>
  */
 #define FSL_PIN_SIZE 24
 #define FSL_PIN_SHARE_SIZE 20
+#define FSL_SCU_PIN_SIZE 12
+
+static void imx_pinctrl_parse_pin_mmio(struct imx_pinctrl *ipctl,
+                                      unsigned int *pin_id, struct imx_pin *pin,
+                                      const __be32 **list_p,
+                                      struct device_node *np)
+{
+       const struct imx_pinctrl_soc_info *info = ipctl->info;
+       struct imx_pin_mmio *pin_mmio = &pin->conf.mmio;
+       struct imx_pin_reg *pin_reg;
+       const __be32 *list = *list_p;
+       u32 mux_reg, conf_reg;
+       u32 config;
+
+       mux_reg = be32_to_cpu(*list++);
+
+       if (!(info->flags & ZERO_OFFSET_VALID) && !mux_reg)
+               mux_reg = -1;
+
+       if (info->flags & SHARE_MUX_CONF_REG) {
+               conf_reg = mux_reg;
+       } else {
+               conf_reg = be32_to_cpu(*list++);
+               if (!conf_reg)
+                       conf_reg = -1;
+       }
+
+       *pin_id = (mux_reg != -1) ? mux_reg / 4 : conf_reg / 4;
+       pin_reg = &ipctl->pin_regs[*pin_id];
+       pin->pin = *pin_id;
+       pin_reg->mux_reg = mux_reg;
+       pin_reg->conf_reg = conf_reg;
+       pin_mmio->input_reg = be32_to_cpu(*list++);
+       pin_mmio->mux_mode = be32_to_cpu(*list++);
+       pin_mmio->input_val = be32_to_cpu(*list++);
+
+       if (info->generic_pinconf) {
+               /* generic pin config decoded */
+               pin_mmio->config = imx_pinconf_parse_generic_config(np, ipctl);
+       } else {
+               /* legacy pin config read from devicetree */
+               config = be32_to_cpu(*list++);
+
+               /* SION bit is in mux register */
+               if (config & IMX_PAD_SION)
+                       pin_mmio->mux_mode |= IOMUXC_CONFIG_SION;
+               pin_mmio->config = config & ~IMX_PAD_SION;
+       }
+
+       *list_p = list;
+
+       dev_dbg(ipctl->dev, "%s: 0x%x 0x%08lx", info->pins[*pin_id].name,
+                            pin_mmio->mux_mode, pin_mmio->config);
+}
 
 static int imx_pinctrl_parse_groups(struct device_node *np,
                                    struct group_desc *grp,
@@ -428,14 +570,16 @@ static int imx_pinctrl_parse_groups(struct device_node *np,
                                    u32 index)
 {
        const struct imx_pinctrl_soc_info *info = ipctl->info;
+       struct imx_pin *pin;
        int size, pin_size;
        const __be32 *list;
        int i;
-       u32 config;
 
        dev_dbg(ipctl->dev, "group(%d): %pOFn\n", index, np);
 
-       if (info->flags & SHARE_MUX_CONF_REG)
+       if (info->flags & IMX_USE_SCU)
+               pin_size = FSL_SCU_PIN_SIZE;
+       else if (info->flags & SHARE_MUX_CONF_REG)
                pin_size = FSL_PIN_SHARE_SIZE;
        else
                pin_size = FSL_PIN_SIZE;
@@ -472,9 +616,6 @@ static int imx_pinctrl_parse_groups(struct device_node *np,
                return -EINVAL;
        }
 
-       /* first try to parse the generic pin config */
-       config = imx_pinconf_parse_generic_config(np, ipctl);
-
        grp->num_pins = size / pin_size;
        grp->data = devm_kcalloc(ipctl->dev,
                                 grp->num_pins, sizeof(struct imx_pin),
@@ -486,48 +627,13 @@ static int imx_pinctrl_parse_groups(struct device_node *np,
                return -ENOMEM;
 
        for (i = 0; i < grp->num_pins; i++) {
-               u32 mux_reg = be32_to_cpu(*list++);
-               u32 conf_reg;
-               unsigned int pin_id;
-               struct imx_pin_reg *pin_reg;
-               struct imx_pin *pin = &((struct imx_pin *)(grp->data))[i];
-
-               if (!(info->flags & ZERO_OFFSET_VALID) && !mux_reg)
-                       mux_reg = -1;
-
-               if (info->flags & SHARE_MUX_CONF_REG) {
-                       conf_reg = mux_reg;
-               } else {
-                       conf_reg = be32_to_cpu(*list++);
-                       if (!conf_reg)
-                               conf_reg = -1;
-               }
-
-               pin_id = (mux_reg != -1) ? mux_reg / 4 : conf_reg / 4;
-               pin_reg = &ipctl->pin_regs[pin_id];
-               pin->pin = pin_id;
-               grp->pins[i] = pin_id;
-               pin_reg->mux_reg = mux_reg;
-               pin_reg->conf_reg = conf_reg;
-               pin->input_reg = be32_to_cpu(*list++);
-               pin->mux_mode = be32_to_cpu(*list++);
-               pin->input_val = be32_to_cpu(*list++);
-
-               if (info->generic_pinconf) {
-                       /* generic pin config decoded */
-                       pin->config = config;
-               } else {
-                       /* legacy pin config read from devicetree */
-                       config = be32_to_cpu(*list++);
-
-                       /* SION bit is in mux register */
-                       if (config & IMX_PAD_SION)
-                               pin->mux_mode |= IOMUXC_CONFIG_SION;
-                       pin->config = config & ~IMX_PAD_SION;
-               }
-
-               dev_dbg(ipctl->dev, "%s: 0x%x 0x%08lx", info->pins[pin_id].name,
-                               pin->mux_mode, pin->config);
+               pin = &((struct imx_pin *)(grp->data))[i];
+               if (info->flags & IMX_USE_SCU)
+                       imx_pinctrl_parse_pin_scu(ipctl, &grp->pins[i],
+                                                 pin, &list);
+               else
+                       imx_pinctrl_parse_pin_mmio(ipctl, &grp->pins[i],
+                                                  pin, &list, np);
        }
 
        return 0;
@@ -699,35 +805,37 @@ int imx_pinctrl_probe(struct platform_device *pdev,
        if (!ipctl)
                return -ENOMEM;
 
-       ipctl->pin_regs = devm_kmalloc_array(&pdev->dev,
-                                      info->npins, sizeof(*ipctl->pin_regs),
-                                      GFP_KERNEL);
-       if (!ipctl->pin_regs)
-               return -ENOMEM;
+       if (!(info->flags & IMX_USE_SCU)) {
+               ipctl->pin_regs = devm_kmalloc_array(&pdev->dev, info->npins,
+                                                    sizeof(*ipctl->pin_regs),
+                                                    GFP_KERNEL);
+               if (!ipctl->pin_regs)
+                       return -ENOMEM;
 
-       for (i = 0; i < info->npins; i++) {
-               ipctl->pin_regs[i].mux_reg = -1;
-               ipctl->pin_regs[i].conf_reg = -1;
-       }
+               for (i = 0; i < info->npins; i++) {
+                       ipctl->pin_regs[i].mux_reg = -1;
+                       ipctl->pin_regs[i].conf_reg = -1;
+               }
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       ipctl->base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(ipctl->base))
-               return PTR_ERR(ipctl->base);
+               res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+               ipctl->base = devm_ioremap_resource(&pdev->dev, res);
+               if (IS_ERR(ipctl->base))
+                       return PTR_ERR(ipctl->base);
 
-       if (of_property_read_bool(dev_np, "fsl,input-sel")) {
-               np = of_parse_phandle(dev_np, "fsl,input-sel", 0);
-               if (!np) {
-                       dev_err(&pdev->dev, "iomuxc fsl,input-sel property not found\n");
-                       return -EINVAL;
-               }
+               if (of_property_read_bool(dev_np, "fsl,input-sel")) {
+                       np = of_parse_phandle(dev_np, "fsl,input-sel", 0);
+                       if (!np) {
+                               dev_err(&pdev->dev, "iomuxc fsl,input-sel property not found\n");
+                               return -EINVAL;
+                       }
 
-               ipctl->input_sel_base = of_iomap(np, 0);
-               of_node_put(np);
-               if (!ipctl->input_sel_base) {
-                       dev_err(&pdev->dev,
-                               "iomuxc input select base address not found\n");
-                       return -ENOMEM;
+                       ipctl->input_sel_base = of_iomap(np, 0);
+                       of_node_put(np);
+                       if (!ipctl->input_sel_base) {
+                               dev_err(&pdev->dev,
+                                       "iomuxc input select base address not found\n");
+                               return -ENOMEM;
+                       }
                }
        }
 
index 4b8225ccb03a4b6ceccbfc687349fbf11beb50ae..98a4889af4ef18408064d789376fba05dd7c5665 100644 (file)
@@ -19,22 +19,43 @@ struct platform_device;
 extern struct pinmux_ops imx_pmx_ops;
 
 /**
- * struct imx_pin - describes a single i.MX pin
- * @pin: the pin_id of this pin
+ * struct imx_pin_mmio - MMIO pin configurations
  * @mux_mode: the mux mode for this pin.
  * @input_reg: the select input register offset for this pin if any
  *     0 if no select input setting needed.
  * @input_val: the select input value for this pin.
  * @configs: the config for this pin.
  */
-struct imx_pin {
-       unsigned int pin;
+struct imx_pin_mmio {
        unsigned int mux_mode;
        u16 input_reg;
        unsigned int input_val;
        unsigned long config;
 };
 
+/**
+ * struct imx_pin_scu - SCU pin configurations
+ * @mux: the mux mode for this pin.
+ * @configs: the config for this pin.
+ */
+struct imx_pin_scu {
+       unsigned int mux_mode;
+       unsigned long config;
+};
+
+/**
+ * struct imx_pin - describes a single i.MX pin
+ * @pin: the pin_id of this pin
+ * @conf: config type of this pin, either mmio or scu
+ */
+struct imx_pin {
+       unsigned int pin;
+       union {
+               struct imx_pin_mmio mmio;
+               struct imx_pin_scu scu;
+       } conf;
+};
+
 /**
  * struct imx_pin_reg - describe a pin reg map
  * @mux_reg: mux register offset
@@ -99,8 +120,9 @@ struct imx_pinctrl {
 #define IMX_CFG_PARAMS_DECODE_INVERT(p, m, o) \
        { .param = p, .mask = m, .shift = o, .invert = true, }
 
-#define SHARE_MUX_CONF_REG     0x1
-#define ZERO_OFFSET_VALID      0x2
+#define SHARE_MUX_CONF_REG     BIT(0)
+#define ZERO_OFFSET_VALID      BIT(1)
+#define IMX_USE_SCU            BIT(2)
 
 #define NO_MUX         0x0
 #define NO_PAD         0x0
@@ -113,4 +135,37 @@ struct imx_pinctrl {
 
 int imx_pinctrl_probe(struct platform_device *pdev,
                        const struct imx_pinctrl_soc_info *info);
+
+#ifdef CONFIG_PINCTRL_IMX_SCU
+#define BM_PAD_CTL_GP_ENABLE           BIT(30)
+#define BM_PAD_CTL_IFMUX_ENABLE                BIT(31)
+#define BP_PAD_CTL_IFMUX               27
+
+int imx_pinctrl_sc_ipc_init(struct platform_device *pdev);
+int imx_pinconf_get_scu(struct pinctrl_dev *pctldev, unsigned pin_id,
+                       unsigned long *config);
+int imx_pinconf_set_scu(struct pinctrl_dev *pctldev, unsigned pin_id,
+                       unsigned long *configs, unsigned num_configs);
+void imx_pinctrl_parse_pin_scu(struct imx_pinctrl *ipctl,
+                              unsigned int *pin_id, struct imx_pin *pin,
+                              const __be32 **list_p);
+#else
+static inline int imx_pinconf_get_scu(struct pinctrl_dev *pctldev,
+                                     unsigned pin_id, unsigned long *config)
+{
+       return -EINVAL;
+}
+static inline int imx_pinconf_set_scu(struct pinctrl_dev *pctldev,
+                                     unsigned pin_id, unsigned long *configs,
+                                     unsigned num_configs)
+{
+       return -EINVAL;
+}
+static inline void imx_pinctrl_parse_pin_scu(struct imx_pinctrl *ipctl,
+                                           unsigned int *pin_id,
+                                           struct imx_pin *pin,
+                                           const __be32 **list_p)
+{
+}
+#endif
 #endif /* __DRIVERS_PINCTRL_IMX_H */
index f521bdb53f62d6a658cc90cdee169d52aa21d51d..922ff73c7087813255a9129e1eb2b5339f871af3 100644 (file)
@@ -256,46 +256,8 @@ static const struct pinctrl_pin_desc imx7ulp_pinctrl_pads[] = {
 
 #define BM_OBE_ENABLED         BIT(17)
 #define BM_IBE_ENABLED         BIT(16)
-#define BM_LK_ENABLED          BIT(15)
 #define BM_MUX_MODE            0xf00
 #define BP_MUX_MODE            8
-#define BM_PULL_ENABLED                BIT(1)
-
-static const struct imx_cfg_params_decode imx7ulp_cfg_decodes[] = {
-       IMX_CFG_PARAMS_DECODE(PIN_CONFIG_DRIVE_STRENGTH,                BIT(6), 6),
-       IMX_CFG_PARAMS_DECODE(PIN_CONFIG_DRIVE_PUSH_PULL,               BIT(5), 5),
-       IMX_CFG_PARAMS_DECODE(PIN_CONFIG_SLEW_RATE,                     BIT(2), 2),
-       IMX_CFG_PARAMS_DECODE(PIN_CONFIG_BIAS_DISABLE,                  BIT(1), 1),
-       IMX_CFG_PARAMS_DECODE(PIN_CONFIG_BIAS_PULL_UP,                  BIT(0), 0),
-
-       IMX_CFG_PARAMS_DECODE_INVERT(PIN_CONFIG_DRIVE_OPEN_DRAIN,       BIT(5), 5),
-       IMX_CFG_PARAMS_DECODE_INVERT(PIN_CONFIG_BIAS_PULL_DOWN,         BIT(0), 0),
-};
-
-static void imx7ulp_cfg_params_fixup(unsigned long *configs,
-                                   unsigned int num_configs,
-                                   u32 *raw_config)
-{
-       enum pin_config_param param;
-       u32 param_val;
-       int i;
-
-       /* lock field disabled */
-       *raw_config &= ~BM_LK_ENABLED;
-
-       for (i = 0; i < num_configs; i++) {
-               param = pinconf_to_config_param(configs[i]);
-               param_val = pinconf_to_config_argument(configs[i]);
-
-               if ((param == PIN_CONFIG_BIAS_PULL_UP) ||
-                   (param == PIN_CONFIG_BIAS_PULL_DOWN)) {
-                       /* pull enabled */
-                       *raw_config |= BM_PULL_ENABLED;
-
-                       return;
-               }
-       }
-}
 
 static int imx7ulp_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
                                          struct pinctrl_gpio_range *range,
@@ -326,10 +288,6 @@ static const struct imx_pinctrl_soc_info imx7ulp_pinctrl_info = {
        .gpio_set_direction = imx7ulp_pmx_gpio_set_direction,
        .mux_mask = BM_MUX_MODE,
        .mux_shift = BP_MUX_MODE,
-       .generic_pinconf = true,
-       .decodes = imx7ulp_cfg_decodes,
-       .num_decodes = ARRAY_SIZE(imx7ulp_cfg_decodes),
-       .fixup = imx7ulp_cfg_params_fixup,
 };
 
 static const struct of_device_id imx7ulp_pinctrl_of_match[] = {
diff --git a/drivers/pinctrl/freescale/pinctrl-imx8qxp.c b/drivers/pinctrl/freescale/pinctrl-imx8qxp.c
new file mode 100644 (file)
index 0000000..1131dc3
--- /dev/null
@@ -0,0 +1,232 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017-2018 NXP
+ *     Dong Aisheng <aisheng.dong@nxp.com>
+ */
+
+#include <dt-bindings/pinctrl/pads-imx8qxp.h>
+#include <linux/err.h>
+#include <linux/firmware/imx/sci.h>
+#include <linux/init.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/pinctrl.h>
+
+#include "pinctrl-imx.h"
+
+static const struct pinctrl_pin_desc imx8qxp_pinctrl_pads[] = {
+       IMX_PINCTRL_PIN(IMX8QXP_PCIE_CTRL0_PERST_B),
+       IMX_PINCTRL_PIN(IMX8QXP_PCIE_CTRL0_CLKREQ_B),
+       IMX_PINCTRL_PIN(IMX8QXP_PCIE_CTRL0_WAKE_B),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_PCIESEP),
+       IMX_PINCTRL_PIN(IMX8QXP_USB_SS3_TC0),
+       IMX_PINCTRL_PIN(IMX8QXP_USB_SS3_TC1),
+       IMX_PINCTRL_PIN(IMX8QXP_USB_SS3_TC2),
+       IMX_PINCTRL_PIN(IMX8QXP_USB_SS3_TC3),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_3V3_USB3IO),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_CLK),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_CMD),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_DATA0),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_DATA1),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_DATA2),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_DATA3),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_SD1FIX0),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_DATA4),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_DATA5),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_DATA6),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_DATA7),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_STROBE),
+       IMX_PINCTRL_PIN(IMX8QXP_EMMC0_RESET_B),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_SD1FIX1),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_RESET_B),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_VSELECT),
+       IMX_PINCTRL_PIN(IMX8QXP_CTL_NAND_RE_P_N),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_WP),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_CD_B),
+       IMX_PINCTRL_PIN(IMX8QXP_CTL_NAND_DQS_P_N),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_VSELSEP),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_CLK),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_CMD),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_DATA0),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_DATA1),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_DATA2),
+       IMX_PINCTRL_PIN(IMX8QXP_USDHC1_DATA3),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_VSEL3),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_TXC),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_TX_CTL),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_TXD0),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_TXD1),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_TXD2),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_TXD3),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB0),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_RXC),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_RX_CTL),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_RXD0),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_RXD1),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_RXD2),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_RGMII_RXD3),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB1),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_REFCLK_125M_25M),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_MDIO),
+       IMX_PINCTRL_PIN(IMX8QXP_ENET0_MDC),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIOCT),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_FSR),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_FST),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_SCKR),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_SCKT),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_TX0),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_TX1),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_TX2_RX3),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_TX3_RX2),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_TX4_RX1),
+       IMX_PINCTRL_PIN(IMX8QXP_ESAI0_TX5_RX0),
+       IMX_PINCTRL_PIN(IMX8QXP_SPDIF0_RX),
+       IMX_PINCTRL_PIN(IMX8QXP_SPDIF0_TX),
+       IMX_PINCTRL_PIN(IMX8QXP_SPDIF0_EXT_CLK),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIORHB),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI3_SCK),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI3_SDO),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI3_SDI),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI3_CS0),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI3_CS1),
+       IMX_PINCTRL_PIN(IMX8QXP_MCLK_IN1),
+       IMX_PINCTRL_PIN(IMX8QXP_MCLK_IN0),
+       IMX_PINCTRL_PIN(IMX8QXP_MCLK_OUT0),
+       IMX_PINCTRL_PIN(IMX8QXP_UART1_TX),
+       IMX_PINCTRL_PIN(IMX8QXP_UART1_RX),
+       IMX_PINCTRL_PIN(IMX8QXP_UART1_RTS_B),
+       IMX_PINCTRL_PIN(IMX8QXP_UART1_CTS_B),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIORHK),
+       IMX_PINCTRL_PIN(IMX8QXP_SAI0_TXD),
+       IMX_PINCTRL_PIN(IMX8QXP_SAI0_TXC),
+       IMX_PINCTRL_PIN(IMX8QXP_SAI0_RXD),
+       IMX_PINCTRL_PIN(IMX8QXP_SAI0_TXFS),
+       IMX_PINCTRL_PIN(IMX8QXP_SAI1_RXD),
+       IMX_PINCTRL_PIN(IMX8QXP_SAI1_RXC),
+       IMX_PINCTRL_PIN(IMX8QXP_SAI1_RXFS),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI2_CS0),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI2_SDO),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI2_SDI),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI2_SCK),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI0_SCK),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI0_SDI),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI0_SDO),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI0_CS1),
+       IMX_PINCTRL_PIN(IMX8QXP_SPI0_CS0),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIORHT),
+       IMX_PINCTRL_PIN(IMX8QXP_ADC_IN1),
+       IMX_PINCTRL_PIN(IMX8QXP_ADC_IN0),
+       IMX_PINCTRL_PIN(IMX8QXP_ADC_IN3),
+       IMX_PINCTRL_PIN(IMX8QXP_ADC_IN2),
+       IMX_PINCTRL_PIN(IMX8QXP_ADC_IN5),
+       IMX_PINCTRL_PIN(IMX8QXP_ADC_IN4),
+       IMX_PINCTRL_PIN(IMX8QXP_FLEXCAN0_RX),
+       IMX_PINCTRL_PIN(IMX8QXP_FLEXCAN0_TX),
+       IMX_PINCTRL_PIN(IMX8QXP_FLEXCAN1_RX),
+       IMX_PINCTRL_PIN(IMX8QXP_FLEXCAN1_TX),
+       IMX_PINCTRL_PIN(IMX8QXP_FLEXCAN2_RX),
+       IMX_PINCTRL_PIN(IMX8QXP_FLEXCAN2_TX),
+       IMX_PINCTRL_PIN(IMX8QXP_UART0_RX),
+       IMX_PINCTRL_PIN(IMX8QXP_UART0_TX),
+       IMX_PINCTRL_PIN(IMX8QXP_UART2_TX),
+       IMX_PINCTRL_PIN(IMX8QXP_UART2_RX),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIOLH),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_DSI0_I2C0_SCL),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_DSI0_I2C0_SDA),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_DSI0_GPIO0_00),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_DSI0_GPIO0_01),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_DSI1_I2C0_SCL),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_DSI1_I2C0_SDA),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_DSI1_GPIO0_00),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_DSI1_GPIO0_01),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO),
+       IMX_PINCTRL_PIN(IMX8QXP_JTAG_TRST_B),
+       IMX_PINCTRL_PIN(IMX8QXP_PMIC_I2C_SCL),
+       IMX_PINCTRL_PIN(IMX8QXP_PMIC_I2C_SDA),
+       IMX_PINCTRL_PIN(IMX8QXP_PMIC_INT_B),
+       IMX_PINCTRL_PIN(IMX8QXP_SCU_GPIO0_00),
+       IMX_PINCTRL_PIN(IMX8QXP_SCU_GPIO0_01),
+       IMX_PINCTRL_PIN(IMX8QXP_SCU_PMIC_STANDBY),
+       IMX_PINCTRL_PIN(IMX8QXP_SCU_BOOT_MODE0),
+       IMX_PINCTRL_PIN(IMX8QXP_SCU_BOOT_MODE1),
+       IMX_PINCTRL_PIN(IMX8QXP_SCU_BOOT_MODE2),
+       IMX_PINCTRL_PIN(IMX8QXP_SCU_BOOT_MODE3),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_D00),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_D01),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_D02),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_D03),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_D04),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_D05),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_D06),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_D07),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_HSYNC),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_VSYNC),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_PCLK),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_MCLK),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_EN),
+       IMX_PINCTRL_PIN(IMX8QXP_CSI_RESET),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIORHD),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_CSI0_MCLK_OUT),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_CSI0_I2C0_SCL),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_CSI0_I2C0_SDA),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_CSI0_GPIO0_01),
+       IMX_PINCTRL_PIN(IMX8QXP_MIPI_CSI0_GPIO0_00),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0A_DATA0),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0A_DATA1),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0A_DATA2),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0A_DATA3),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0A_DQS),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0A_SS0_B),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0A_SS1_B),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0A_SCLK),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_QSPI0A),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0B_SCLK),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0B_DATA0),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0B_DATA1),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0B_DATA2),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0B_DATA3),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0B_DQS),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0B_SS0_B),
+       IMX_PINCTRL_PIN(IMX8QXP_QSPI0B_SS1_B),
+       IMX_PINCTRL_PIN(IMX8QXP_COMP_CTL_GPIO_1V8_3V3_QSPI0B),
+};
+
+static struct imx_pinctrl_soc_info imx8qxp_pinctrl_info = {
+       .pins = imx8qxp_pinctrl_pads,
+       .npins = ARRAY_SIZE(imx8qxp_pinctrl_pads),
+       .flags = IMX_USE_SCU,
+};
+
+static const struct of_device_id imx8qxp_pinctrl_of_match[] = {
+       { .compatible = "fsl,imx8qxp-iomuxc", },
+       { /* sentinel */ }
+};
+
+static int imx8qxp_pinctrl_probe(struct platform_device *pdev)
+{
+       int ret;
+
+       ret = imx_pinctrl_sc_ipc_init(pdev);
+       if (ret)
+               return ret;
+
+       return imx_pinctrl_probe(pdev, &imx8qxp_pinctrl_info);
+}
+
+static struct platform_driver imx8qxp_pinctrl_driver = {
+       .driver = {
+               .name = "imx8qxp-pinctrl",
+               .of_match_table = of_match_ptr(imx8qxp_pinctrl_of_match),
+               .suppress_bind_attrs = true,
+       },
+       .probe = imx8qxp_pinctrl_probe,
+};
+
+static int __init imx8qxp_pinctrl_init(void)
+{
+       return platform_driver_register(&imx8qxp_pinctrl_driver);
+}
+arch_initcall(imx8qxp_pinctrl_init);
diff --git a/drivers/pinctrl/freescale/pinctrl-scu.c b/drivers/pinctrl/freescale/pinctrl-scu.c
new file mode 100644 (file)
index 0000000..83e69c0
--- /dev/null
@@ -0,0 +1,121 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017-2018 NXP
+ *     Dong Aisheng <aisheng.dong@nxp.com>
+ */
+
+#include <linux/err.h>
+#include <linux/firmware/imx/sci.h>
+#include <linux/of_address.h>
+#include <linux/pinctrl/pinctrl.h>
+#include <linux/platform_device.h>
+
+#include "../core.h"
+#include "pinctrl-imx.h"
+
+enum pad_func_e {
+       IMX_SC_PAD_FUNC_SET = 15,
+       IMX_SC_PAD_FUNC_GET = 16,
+};
+
+struct imx_sc_msg_req_pad_set {
+       struct imx_sc_rpc_msg hdr;
+       u32 val;
+       u16 pad;
+} __packed;
+
+struct imx_sc_msg_req_pad_get {
+       struct imx_sc_rpc_msg hdr;
+       u16 pad;
+} __packed;
+
+struct imx_sc_msg_resp_pad_get {
+       struct imx_sc_rpc_msg hdr;
+       u32 val;
+} __packed;
+
+struct imx_sc_ipc *pinctrl_ipc_handle;
+
+int imx_pinctrl_sc_ipc_init(struct platform_device *pdev)
+{
+       return imx_scu_get_handle(&pinctrl_ipc_handle);
+}
+
+int imx_pinconf_get_scu(struct pinctrl_dev *pctldev, unsigned pin_id,
+                       unsigned long *config)
+{
+       struct imx_sc_msg_req_pad_get msg;
+       struct imx_sc_msg_resp_pad_get *resp;
+       struct imx_sc_rpc_msg *hdr = &msg.hdr;
+       int ret;
+
+       hdr->ver = IMX_SC_RPC_VERSION;
+       hdr->svc = IMX_SC_RPC_SVC_PAD;
+       hdr->func = IMX_SC_PAD_FUNC_GET;
+       hdr->size = 2;
+
+       msg.pad = pin_id;
+
+       ret = imx_scu_call_rpc(pinctrl_ipc_handle, &msg, true);
+       if (ret)
+               return ret;
+
+       resp = (struct imx_sc_msg_resp_pad_get *)&msg;
+       *config = resp->val;
+
+       return 0;
+}
+
+int imx_pinconf_set_scu(struct pinctrl_dev *pctldev, unsigned pin_id,
+                       unsigned long *configs, unsigned num_configs)
+{
+       struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
+       struct imx_sc_msg_req_pad_set msg;
+       struct imx_sc_rpc_msg *hdr = &msg.hdr;
+       unsigned int mux = configs[0];
+       unsigned int conf = configs[1];
+       unsigned int val;
+       int ret;
+
+       /*
+        * Set mux and conf together in one IPC call
+        */
+       WARN_ON(num_configs != 2);
+
+       val = conf | BM_PAD_CTL_IFMUX_ENABLE | BM_PAD_CTL_GP_ENABLE;
+       val |= mux << BP_PAD_CTL_IFMUX;
+
+       hdr->ver = IMX_SC_RPC_VERSION;
+       hdr->svc = IMX_SC_RPC_SVC_PAD;
+       hdr->func = IMX_SC_PAD_FUNC_SET;
+       hdr->size = 3;
+
+       msg.pad = pin_id;
+       msg.val = val;
+
+       ret = imx_scu_call_rpc(pinctrl_ipc_handle, &msg, true);
+
+       dev_dbg(ipctl->dev, "write: pin_id %u config 0x%x val 0x%x\n",
+               pin_id, conf, val);
+
+       return ret;
+}
+
+void imx_pinctrl_parse_pin_scu(struct imx_pinctrl *ipctl,
+                              unsigned int *pin_id, struct imx_pin *pin,
+                              const __be32 **list_p)
+{
+       const struct imx_pinctrl_soc_info *info = ipctl->info;
+       struct imx_pin_scu *pin_scu = &pin->conf.scu;
+       const __be32 *list = *list_p;
+
+       pin->pin = be32_to_cpu(*list++);
+       *pin_id = pin->pin;
+       pin_scu->mux_mode = be32_to_cpu(*list++);
+       pin_scu->config = be32_to_cpu(*list++);
+       *list_p = list;
+
+       dev_dbg(ipctl->dev, "%s: 0x%x 0x%08lx", info->pins[pin->pin].name,
+               pin_scu->mux_mode, pin_scu->config);
+}
index 6d1a43c0c251b63c18fc1bb9e0957bbaea023d28..241384ead4ed04d738b46819d256407c9dbf03ba 100644 (file)
@@ -705,7 +705,7 @@ static const struct byt_pinctrl_soc_data *byt_soc_data[] = {
        &byt_score_soc_data,
        &byt_sus_soc_data,
        &byt_ncore_soc_data,
-       NULL,
+       NULL
 };
 
 static struct byt_community *byt_get_community(struct byt_gpio *vg,
@@ -1838,8 +1838,7 @@ static int byt_pinctrl_probe(struct platform_device *pdev)
 #ifdef CONFIG_PM_SLEEP
 static int byt_gpio_suspend(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct byt_gpio *vg = platform_get_drvdata(pdev);
+       struct byt_gpio *vg = dev_get_drvdata(dev);
        int i;
 
        for (i = 0; i < vg->soc_data->npins; i++) {
@@ -1867,8 +1866,7 @@ static int byt_gpio_suspend(struct device *dev)
 
 static int byt_gpio_resume(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct byt_gpio *vg = platform_get_drvdata(pdev);
+       struct byt_gpio *vg = dev_get_drvdata(dev);
        int i;
 
        for (i = 0; i < vg->soc_data->npins; i++) {
index 68fefd4618bdf605b880451cab43d1e845a6e69c..e2d4505d6747e74aa0a3e5d0828e2bce20ac563f 100644 (file)
@@ -526,7 +526,7 @@ static const struct intel_pinctrl_soc_data *bxt_pinctrl_soc_data[] = {
        &bxt_west_soc_data,
        &bxt_southwest_soc_data,
        &bxt_south_soc_data,
-       NULL,
+       NULL
 };
 
 /* APL */
@@ -990,7 +990,7 @@ static const struct intel_pinctrl_soc_data *apl_pinctrl_soc_data[] = {
        &apl_northwest_soc_data,
        &apl_west_soc_data,
        &apl_southwest_soc_data,
-       NULL,
+       NULL
 };
 
 static const struct acpi_device_id bxt_pinctrl_acpi_match[] = {
@@ -1003,18 +1003,13 @@ MODULE_DEVICE_TABLE(acpi, bxt_pinctrl_acpi_match);
 static const struct platform_device_id bxt_pinctrl_platform_ids[] = {
        { "apollolake-pinctrl", (kernel_ulong_t)apl_pinctrl_soc_data },
        { "broxton-pinctrl", (kernel_ulong_t)bxt_pinctrl_soc_data },
-       { },
+       { }
 };
 
-static int bxt_pinctrl_probe(struct platform_device *pdev)
-{
-       return intel_pinctrl_probe_by_uid(pdev);
-}
-
 static INTEL_PINCTRL_PM_OPS(bxt_pinctrl_pm_ops);
 
 static struct platform_driver bxt_pinctrl_driver = {
-       .probe = bxt_pinctrl_probe,
+       .probe = intel_pinctrl_probe_by_uid,
        .driver = {
                .name = "broxton-pinctrl",
                .acpi_match_table = bxt_pinctrl_acpi_match,
index fb121b3ed2f25bf0db144c722368add331536572..08024b065033f2773b233abe5f98f52a009b915c 100644 (file)
@@ -829,19 +829,14 @@ static const struct intel_pinctrl_soc_data cnllp_soc_data = {
 static const struct acpi_device_id cnl_pinctrl_acpi_match[] = {
        { "INT3450", (kernel_ulong_t)&cnlh_soc_data },
        { "INT34BB", (kernel_ulong_t)&cnllp_soc_data },
-       { },
+       { }
 };
 MODULE_DEVICE_TABLE(acpi, cnl_pinctrl_acpi_match);
 
-static int cnl_pinctrl_probe(struct platform_device *pdev)
-{
-       return intel_pinctrl_probe_by_hid(pdev);
-}
-
 static INTEL_PINCTRL_PM_OPS(cnl_pinctrl_pm_ops);
 
 static struct platform_driver cnl_pinctrl_driver = {
-       .probe = cnl_pinctrl_probe,
+       .probe = intel_pinctrl_probe_by_hid,
        .driver = {
                .name = "cannonlake-pinctrl",
                .acpi_match_table = cnl_pinctrl_acpi_match,
index 7e068fc61ce108aefede7b01d49006377d471f79..b7d632f1dbf6bea33e802a632cf60e78999955d8 100644 (file)
@@ -6,7 +6,7 @@
  * Author: Mika Westerberg <mika.westerberg@linux.intel.com>
  */
 
-#include <linux/acpi.h>
+#include <linux/mod_devicetable.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
 
@@ -330,21 +330,16 @@ static const struct intel_pinctrl_soc_data cdf_soc_data = {
        .ncommunities = ARRAY_SIZE(cdf_communities),
 };
 
-static int cdf_pinctrl_probe(struct platform_device *pdev)
-{
-       return intel_pinctrl_probe(pdev, &cdf_soc_data);
-}
-
 static INTEL_PINCTRL_PM_OPS(cdf_pinctrl_pm_ops);
 
 static const struct acpi_device_id cdf_pinctrl_acpi_match[] = {
-       { "INTC3001" },
+       { "INTC3001", (kernel_ulong_t)&cdf_soc_data },
        { }
 };
 MODULE_DEVICE_TABLE(acpi, cdf_pinctrl_acpi_match);
 
 static struct platform_driver cdf_pinctrl_driver = {
-       .probe = cdf_pinctrl_probe,
+       .probe = intel_pinctrl_probe_by_hid,
        .driver = {
                .name = "cedarfork-pinctrl",
                .acpi_match_table = cdf_pinctrl_acpi_match,
index 9b0f4b9ef482924aadcc126b788fc1494c7f6f7d..05044e323ea5529d15d001337fcad75f089abe23 100644 (file)
@@ -846,6 +846,19 @@ static int chv_pinmux_set_mux(struct pinctrl_dev *pctldev,
        return 0;
 }
 
+static void chv_gpio_clear_triggering(struct chv_pinctrl *pctrl,
+                                     unsigned int offset)
+{
+       void __iomem *reg;
+       u32 value;
+
+       reg = chv_padreg(pctrl, offset, CHV_PADCTRL1);
+       value = readl(reg);
+       value &= ~CHV_PADCTRL1_INTWAKECFG_MASK;
+       value &= ~CHV_PADCTRL1_INVRXTX_MASK;
+       chv_writel(value, reg);
+}
+
 static int chv_gpio_request_enable(struct pinctrl_dev *pctldev,
                                   struct pinctrl_gpio_range *range,
                                   unsigned int offset)
@@ -876,11 +889,7 @@ static int chv_gpio_request_enable(struct pinctrl_dev *pctldev,
                }
 
                /* Disable interrupt generation */
-               reg = chv_padreg(pctrl, offset, CHV_PADCTRL1);
-               value = readl(reg);
-               value &= ~CHV_PADCTRL1_INTWAKECFG_MASK;
-               value &= ~CHV_PADCTRL1_INVRXTX_MASK;
-               chv_writel(value, reg);
+               chv_gpio_clear_triggering(pctrl, offset);
 
                reg = chv_padreg(pctrl, offset, CHV_PADCTRL0);
                value = readl(reg);
@@ -912,14 +921,11 @@ static void chv_gpio_disable_free(struct pinctrl_dev *pctldev,
 {
        struct chv_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
        unsigned long flags;
-       void __iomem *reg;
-       u32 value;
 
        raw_spin_lock_irqsave(&chv_lock, flags);
 
-       reg = chv_padreg(pctrl, offset, CHV_PADCTRL0);
-       value = readl(reg) & ~CHV_PADCTRL0_GPIOEN;
-       chv_writel(value, reg);
+       if (!chv_pad_locked(pctrl, offset))
+               chv_gpio_clear_triggering(pctrl, offset);
 
        raw_spin_unlock_irqrestore(&chv_lock, flags);
 }
@@ -1744,8 +1750,7 @@ static int chv_pinctrl_remove(struct platform_device *pdev)
 #ifdef CONFIG_PM_SLEEP
 static int chv_pinctrl_suspend_noirq(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct chv_pinctrl *pctrl = platform_get_drvdata(pdev);
+       struct chv_pinctrl *pctrl = dev_get_drvdata(dev);
        unsigned long flags;
        int i;
 
@@ -1778,8 +1783,7 @@ static int chv_pinctrl_suspend_noirq(struct device *dev)
 
 static int chv_pinctrl_resume_noirq(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct chv_pinctrl *pctrl = platform_get_drvdata(pdev);
+       struct chv_pinctrl *pctrl = dev_get_drvdata(dev);
        unsigned long flags;
        int i;
 
index 88bc55281b8380da379b8e80fbbae881d4e2ed59..3a4932b557b4e1df4127bc183dfca4b7a7d82003 100644 (file)
@@ -6,7 +6,7 @@
  * Author: Mika Westerberg <mika.westerberg@linux.intel.com>
  */
 
-#include <linux/acpi.h>
+#include <linux/mod_devicetable.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
 
@@ -257,21 +257,16 @@ static const struct intel_pinctrl_soc_data dnv_soc_data = {
        .ncommunities = ARRAY_SIZE(dnv_communities),
 };
 
-static int dnv_pinctrl_probe(struct platform_device *pdev)
-{
-       return intel_pinctrl_probe(pdev, &dnv_soc_data);
-}
-
 static INTEL_PINCTRL_PM_OPS(dnv_pinctrl_pm_ops);
 
 static const struct acpi_device_id dnv_pinctrl_acpi_match[] = {
-       { "INTC3000" },
+       { "INTC3000", (kernel_ulong_t)&dnv_soc_data },
        { }
 };
 MODULE_DEVICE_TABLE(acpi, dnv_pinctrl_acpi_match);
 
 static struct platform_driver dnv_pinctrl_driver = {
-       .probe = dnv_pinctrl_probe,
+       .probe = intel_pinctrl_probe_by_hid,
        .driver = {
                .name = "denverton-pinctrl",
                .acpi_match_table = dnv_pinctrl_acpi_match,
index 67600314454cea43f971455f461b9f7f98349bfa..331b8fd54d886ad0f3063e8281084da152c5a777 100644 (file)
@@ -445,7 +445,7 @@ static const struct intel_pinctrl_soc_data *glk_pinctrl_soc_data[] = {
        &glk_north_soc_data,
        &glk_audio_soc_data,
        &glk_scc_soc_data,
-       NULL,
+       NULL
 };
 
 static const struct acpi_device_id glk_pinctrl_acpi_match[] = {
index f33a5deafb97f68b5d6beeab04c9c45288d90e39..5f2f5c61ad414c7a0213413f85d0224127fcfc20 100644 (file)
@@ -403,21 +403,16 @@ static const struct intel_pinctrl_soc_data icllp_soc_data = {
        .ncommunities = ARRAY_SIZE(icllp_communities),
 };
 
-static int icl_pinctrl_probe(struct platform_device *pdev)
-{
-       return intel_pinctrl_probe(pdev, &icllp_soc_data);
-}
-
 static INTEL_PINCTRL_PM_OPS(icl_pinctrl_pm_ops);
 
 static const struct acpi_device_id icl_pinctrl_acpi_match[] = {
-       { "INT3455" },
-       { },
+       { "INT3455", (kernel_ulong_t)&icllp_soc_data },
+       { }
 };
 MODULE_DEVICE_TABLE(acpi, icl_pinctrl_acpi_match);
 
 static struct platform_driver icl_pinctrl_driver = {
-       .probe = icl_pinctrl_probe,
+       .probe = intel_pinctrl_probe_by_hid,
        .driver = {
                .name = "icelake-pinctrl",
                .acpi_match_table = icl_pinctrl_acpi_match,
index 8cda7b535b025ddde70b7d628cf8f2e07761306c..3b18181842078291f09c2643342cc9e7d794a877 100644 (file)
@@ -1301,8 +1301,8 @@ static int intel_pinctrl_pm_init(struct intel_pinctrl *pctrl)
        return 0;
 }
 
-int intel_pinctrl_probe(struct platform_device *pdev,
-                       const struct intel_pinctrl_soc_data *soc_data)
+static int intel_pinctrl_probe(struct platform_device *pdev,
+                              const struct intel_pinctrl_soc_data *soc_data)
 {
        struct intel_pinctrl *pctrl;
        int i, ret, irq;
@@ -1400,7 +1400,6 @@ int intel_pinctrl_probe(struct platform_device *pdev,
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(intel_pinctrl_probe);
 
 int intel_pinctrl_probe_by_hid(struct platform_device *pdev)
 {
@@ -1469,8 +1468,7 @@ static bool intel_pinctrl_should_save(struct intel_pinctrl *pctrl, unsigned int
 
 int intel_pinctrl_suspend(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct intel_pinctrl *pctrl = platform_get_drvdata(pdev);
+       struct intel_pinctrl *pctrl = dev_get_drvdata(dev);
        struct intel_community_context *communities;
        struct intel_pad_context *pads;
        int i;
@@ -1531,8 +1529,7 @@ static void intel_gpio_irq_init(struct intel_pinctrl *pctrl)
 
 int intel_pinctrl_resume(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct intel_pinctrl *pctrl = platform_get_drvdata(pdev);
+       struct intel_pinctrl *pctrl = dev_get_drvdata(dev);
        const struct intel_community_context *communities;
        const struct intel_pad_context *pads;
        int i;
index 9fb4645f3c55821c09d3b33ed3df7e8a98abae86..b8a07d37d18fbc4e2ba0d5a7b7b175bc4b7edbe5 100644 (file)
@@ -173,8 +173,6 @@ struct intel_pinctrl_soc_data {
        size_t ncommunities;
 };
 
-int intel_pinctrl_probe(struct platform_device *pdev,
-                       const struct intel_pinctrl_soc_data *soc_data);
 int intel_pinctrl_probe_by_hid(struct platform_device *pdev);
 int intel_pinctrl_probe_by_uid(struct platform_device *pdev);
 
index 70ea9c51846079c998ff8244ec1e25ccab6d8eed..03b04c7ae9e8011952336d6a0a2426c2ab88d122 100644 (file)
@@ -6,7 +6,7 @@
  * Author: Mika Westerberg <mika.westerberg@linux.intel.com>
  */
 
-#include <linux/acpi.h>
+#include <linux/mod_devicetable.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
 
@@ -308,21 +308,16 @@ static const struct intel_pinctrl_soc_data lbg_soc_data = {
        .ncommunities = ARRAY_SIZE(lbg_communities),
 };
 
-static int lbg_pinctrl_probe(struct platform_device *pdev)
-{
-       return intel_pinctrl_probe(pdev, &lbg_soc_data);
-}
-
 static INTEL_PINCTRL_PM_OPS(lbg_pinctrl_pm_ops);
 
 static const struct acpi_device_id lbg_pinctrl_acpi_match[] = {
-       { "INT3536" },
+       { "INT3536", (kernel_ulong_t)&lbg_soc_data },
        { }
 };
 MODULE_DEVICE_TABLE(acpi, lbg_pinctrl_acpi_match);
 
 static struct platform_driver lbg_pinctrl_driver = {
-       .probe = lbg_pinctrl_probe,
+       .probe = intel_pinctrl_probe_by_hid,
        .driver = {
                .name = "lewisburg-pinctrl",
                .acpi_match_table = lbg_pinctrl_acpi_match,
index 2e9988dac55f1d7980c5af2b9e7ede16857fec05..4b65e1296b8af7542437ec5d9b48bb840a2528b2 100644 (file)
@@ -6,7 +6,7 @@
  * Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  */
 
-#include <linux/bitops.h>
+#include <linux/bits.h>
 #include <linux/err.h>
 #include <linux/io.h>
 #include <linux/module.h>
index 38a7c811ff582c195909f417526d7610ca11c341..ccafeea4939cf00e49496c3b88fc51951af30623 100644 (file)
@@ -591,15 +591,10 @@ static const struct acpi_device_id spt_pinctrl_acpi_match[] = {
 };
 MODULE_DEVICE_TABLE(acpi, spt_pinctrl_acpi_match);
 
-static int spt_pinctrl_probe(struct platform_device *pdev)
-{
-       return intel_pinctrl_probe_by_hid(pdev);
-}
-
 static INTEL_PINCTRL_PM_OPS(spt_pinctrl_pm_ops);
 
 static struct platform_driver spt_pinctrl_driver = {
-       .probe = spt_pinctrl_probe,
+       .probe = intel_pinctrl_probe_by_hid,
        .driver = {
                .name = "sunrisepoint-pinctrl",
                .acpi_match_table = spt_pinctrl_acpi_match,
index 9d142e1da56721933ea143549514b64fa2c36837..1817786ab6aa164384c90c96ade5bc2fc1830102 100644 (file)
@@ -3,7 +3,7 @@ menu "MediaTek pinctrl drivers"
 
 config EINT_MTK
        bool "MediaTek External Interrupt Support"
-       depends on PINCTRL_MTK || PINCTRL_MTK_MOORE || COMPILE_TEST
+       depends on PINCTRL_MTK || PINCTRL_MTK_MOORE || PINCTRL_MTK_PARIS || COMPILE_TEST
        select GPIOLIB
        select IRQ_DOMAIN
 
@@ -17,7 +17,7 @@ config PINCTRL_MTK
        select OF_GPIO
 
 config PINCTRL_MTK_MOORE
-       bool "MediaTek Moore Core that implements generic binding"
+       bool
        depends on OF
        select GENERIC_PINCONF
        select GENERIC_PINCTRL_GROUPS
@@ -26,7 +26,7 @@ config PINCTRL_MTK_MOORE
        select OF_GPIO
 
 config PINCTRL_MTK_PARIS
-       bool "MediaTek Paris Core that implements vendor binding"
+       bool
        depends on OF
        select PINMUX
        select GENERIC_PINCONF
@@ -45,8 +45,14 @@ config PINCTRL_MT2701
 config PINCTRL_MT7623
        bool "Mediatek MT7623 pin control with generic binding"
        depends on MACH_MT7623 || COMPILE_TEST
-       depends on PINCTRL_MTK_MOORE
-       default y
+       default MACH_MT7623
+       select PINCTRL_MTK_MOORE
+
+config PINCTRL_MT7629
+       bool "Mediatek MT7629 pin control"
+       depends on MACH_MT7629 || COMPILE_TEST
+       default MACH_MT7629
+       select PINCTRL_MTK_MOORE
 
 config PINCTRL_MT8135
        bool "Mediatek MT8135 pin control"
@@ -77,11 +83,18 @@ config PINCTRL_MT6765
        default ARM64 && ARCH_MEDIATEK
        select PINCTRL_MTK_PARIS
 
+config PINCTRL_MT6797
+       bool "Mediatek MT6797 pin control"
+       depends on OF
+       depends on ARM64 || COMPILE_TEST
+       default ARM64 && ARCH_MEDIATEK
+       select PINCTRL_MTK_PARIS
+
 config PINCTRL_MT7622
        bool "MediaTek MT7622 pin control"
        depends on ARM64 || COMPILE_TEST
-       depends on PINCTRL_MTK_MOORE
-       default y
+       default ARM64 && ARCH_MEDIATEK
+       select PINCTRL_MTK_MOORE
 
 config PINCTRL_MT8173
        bool "Mediatek MT8173 pin control"
index 70d800054f69426833bbb2e4ff71544b7c6ff3ed..4b4e2eaf6f2ddf1b89b3bb7ec93b8949cf227b64 100644 (file)
@@ -11,8 +11,10 @@ obj-$(CONFIG_PINCTRL_MT2712) += pinctrl-mt2712.o
 obj-$(CONFIG_PINCTRL_MT8135)   += pinctrl-mt8135.o
 obj-$(CONFIG_PINCTRL_MT8127)   += pinctrl-mt8127.o
 obj-$(CONFIG_PINCTRL_MT6765)   += pinctrl-mt6765.o
+obj-$(CONFIG_PINCTRL_MT6797)   += pinctrl-mt6797.o
 obj-$(CONFIG_PINCTRL_MT7622)   += pinctrl-mt7622.o
 obj-$(CONFIG_PINCTRL_MT7623)   += pinctrl-mt7623.o
+obj-$(CONFIG_PINCTRL_MT7629)   += pinctrl-mt7629.o
 obj-$(CONFIG_PINCTRL_MT8173)   += pinctrl-mt8173.o
 obj-$(CONFIG_PINCTRL_MT8183)   += pinctrl-mt8183.o
 obj-$(CONFIG_PINCTRL_MT6397)   += pinctrl-mt6397.o
index 3133ec0f2e67ecb2e653f059158544c41f00ee33..aa1068d2867f7a7352d3490eb4a883f4fbab7de4 100644 (file)
@@ -310,8 +310,8 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
                case PIN_CONFIG_DRIVE_STRENGTH:
                        if (hw->soc->drive_set) {
                                err = hw->soc->drive_set(hw, desc, arg);
-                       if (err)
-                               return err;
+                               if (err)
+                                       return err;
                        } else {
                                err = -ENOTSUPP;
                        }
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt6797.c b/drivers/pinctrl/mediatek/pinctrl-mt6797.c
new file mode 100644 (file)
index 0000000..adebe43
--- /dev/null
@@ -0,0 +1,82 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Based on pinctrl-mt6765.c
+ *
+ * Copyright (C) 2018 MediaTek Inc.
+ *
+ * Author: ZH Chen <zh.chen@mediatek.com>
+ *
+ * Copyright (C) Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+ *
+ */
+
+#include "pinctrl-mtk-mt6797.h"
+#include "pinctrl-paris.h"
+
+/*
+ * MT6797 have multiple bases to program pin configuration listed as the below:
+ * gpio:0x10005000, iocfg[l]:0x10002000, iocfg[b]:0x10002400,
+ * iocfg[r]:0x10002800, iocfg[t]:0x10002C00.
+ * _i_base could be used to indicate what base the pin should be mapped into.
+ */
+
+static const struct mtk_pin_field_calc mt6797_pin_mode_range[] = {
+       PIN_FIELD(0, 261, 0x300, 0x10, 0, 4),
+};
+
+static const struct mtk_pin_field_calc mt6797_pin_dir_range[] = {
+       PIN_FIELD(0, 261, 0x0, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt6797_pin_di_range[] = {
+       PIN_FIELD(0, 261, 0x200, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt6797_pin_do_range[] = {
+       PIN_FIELD(0, 261, 0x100, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_reg_calc mt6797_reg_cals[PINCTRL_PIN_REG_MAX] = {
+       [PINCTRL_PIN_REG_MODE] = MTK_RANGE(mt6797_pin_mode_range),
+       [PINCTRL_PIN_REG_DIR] = MTK_RANGE(mt6797_pin_dir_range),
+       [PINCTRL_PIN_REG_DI] = MTK_RANGE(mt6797_pin_di_range),
+       [PINCTRL_PIN_REG_DO] = MTK_RANGE(mt6797_pin_do_range),
+};
+
+static const char * const mt6797_pinctrl_register_base_names[] = {
+       "gpio", "iocfgl", "iocfgb", "iocfgr", "iocfgt",
+};
+
+static const struct mtk_pin_soc mt6797_data = {
+       .reg_cal = mt6797_reg_cals,
+       .pins = mtk_pins_mt6797,
+       .npins = ARRAY_SIZE(mtk_pins_mt6797),
+       .ngrps = ARRAY_SIZE(mtk_pins_mt6797),
+       .gpio_m = 0,
+       .base_names = mt6797_pinctrl_register_base_names,
+       .nbase_names = ARRAY_SIZE(mt6797_pinctrl_register_base_names),
+};
+
+static const struct of_device_id mt6797_pinctrl_of_match[] = {
+       { .compatible = "mediatek,mt6797-pinctrl", },
+       { }
+};
+
+static int mt6797_pinctrl_probe(struct platform_device *pdev)
+{
+       return mtk_paris_pinctrl_probe(pdev, &mt6797_data);
+}
+
+static struct platform_driver mt6797_pinctrl_driver = {
+       .driver = {
+               .name = "mt6797-pinctrl",
+               .of_match_table = mt6797_pinctrl_of_match,
+       },
+       .probe = mt6797_pinctrl_probe,
+};
+
+static int __init mt6797_pinctrl_init(void)
+{
+       return platform_driver_register(&mt6797_pinctrl_driver);
+}
+arch_initcall(mt6797_pinctrl_init);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7629.c b/drivers/pinctrl/mediatek/pinctrl-mt7629.c
new file mode 100644 (file)
index 0000000..b5f0fa4
--- /dev/null
@@ -0,0 +1,450 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * The MT7629 driver based on Linux generic pinctrl binding.
+ *
+ * Copyright (C) 2018 MediaTek Inc.
+ * Author: Ryder Lee <ryder.lee@mediatek.com>
+ */
+
+#include "pinctrl-moore.h"
+
+#define MT7629_PIN(_number, _name, _eint_n)                            \
+       MTK_PIN(_number, _name, 0, _eint_n, DRV_GRP1)
+
+static const struct mtk_pin_field_calc mt7629_pin_mode_range[] = {
+       PIN_FIELD(0, 78, 0x300, 0x10, 0, 4),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_dir_range[] = {
+       PIN_FIELD(0, 78, 0x0, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_di_range[] = {
+       PIN_FIELD(0, 78, 0x200, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_do_range[] = {
+       PIN_FIELD(0, 78, 0x100, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_ies_range[] = {
+       PIN_FIELD(0, 10, 0x1000, 0x10, 0, 1),
+       PIN_FIELD(11, 18, 0x2000, 0x10, 0, 1),
+       PIN_FIELD(19, 32, 0x3000, 0x10, 0, 1),
+       PIN_FIELD(33, 48, 0x4000, 0x10, 0, 1),
+       PIN_FIELD(49, 50, 0x5000, 0x10, 0, 1),
+       PIN_FIELD(51, 69, 0x6000, 0x10, 0, 1),
+       PIN_FIELD(70, 78, 0x7000, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_smt_range[] = {
+       PIN_FIELD(0, 10, 0x1100, 0x10, 0, 1),
+       PIN_FIELD(11, 18, 0x2100, 0x10, 0, 1),
+       PIN_FIELD(19, 32, 0x3100, 0x10, 0, 1),
+       PIN_FIELD(33, 48, 0x4100, 0x10, 0, 1),
+       PIN_FIELD(49, 50, 0x5100, 0x10, 0, 1),
+       PIN_FIELD(51, 69, 0x6100, 0x10, 0, 1),
+       PIN_FIELD(70, 78, 0x7100, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_pullen_range[] = {
+       PIN_FIELD(0, 10, 0x1400, 0x10, 0, 1),
+       PIN_FIELD(11, 18, 0x2400, 0x10, 0, 1),
+       PIN_FIELD(19, 32, 0x3400, 0x10, 0, 1),
+       PIN_FIELD(33, 48, 0x4400, 0x10, 0, 1),
+       PIN_FIELD(49, 50, 0x5400, 0x10, 0, 1),
+       PIN_FIELD(51, 69, 0x6400, 0x10, 0, 1),
+       PIN_FIELD(70, 78, 0x7400, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_pullsel_range[] = {
+       PIN_FIELD(0, 10, 0x1500, 0x10, 0, 1),
+       PIN_FIELD(11, 18, 0x2500, 0x10, 0, 1),
+       PIN_FIELD(19, 32, 0x3500, 0x10, 0, 1),
+       PIN_FIELD(33, 48, 0x4500, 0x10, 0, 1),
+       PIN_FIELD(49, 50, 0x5500, 0x10, 0, 1),
+       PIN_FIELD(51, 69, 0x6500, 0x10, 0, 1),
+       PIN_FIELD(70, 78, 0x7500, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_drv_range[] = {
+       PIN_FIELD(0, 10, 0x1600, 0x10, 0, 4),
+       PIN_FIELD(11, 18, 0x2600, 0x10, 0, 4),
+       PIN_FIELD(19, 32, 0x3600, 0x10, 0, 4),
+       PIN_FIELD(33, 48, 0x4600, 0x10, 0, 4),
+       PIN_FIELD(49, 50, 0x5600, 0x10, 0, 4),
+       PIN_FIELD(51, 69, 0x6600, 0x10, 0, 4),
+       PIN_FIELD(70, 78, 0x7600, 0x10, 0, 4),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_tdsel_range[] = {
+       PIN_FIELD(0, 10, 0x1200, 0x10, 0, 4),
+       PIN_FIELD(11, 18, 0x2200, 0x10, 0, 4),
+       PIN_FIELD(19, 32, 0x3200, 0x10, 0, 4),
+       PIN_FIELD(33, 48, 0x4200, 0x10, 0, 4),
+       PIN_FIELD(49, 50, 0x5200, 0x10, 0, 4),
+       PIN_FIELD(51, 69, 0x6200, 0x10, 0, 4),
+       PIN_FIELD(70, 78, 0x7200, 0x10, 0, 4),
+};
+
+static const struct mtk_pin_field_calc mt7629_pin_rdsel_range[] = {
+       PIN_FIELD(0, 10, 0x1300, 0x10, 0, 4),
+       PIN_FIELD(11, 18, 0x2300, 0x10, 0, 4),
+       PIN_FIELD(19, 32, 0x3300, 0x10, 0, 4),
+       PIN_FIELD(33, 48, 0x4300, 0x10, 0, 4),
+       PIN_FIELD(49, 50, 0x5300, 0x10, 0, 4),
+       PIN_FIELD(51, 69, 0x6300, 0x10, 0, 4),
+       PIN_FIELD(70, 78, 0x7300, 0x10, 0, 4),
+};
+
+static const struct mtk_pin_reg_calc mt7629_reg_cals[] = {
+       [PINCTRL_PIN_REG_MODE] = MTK_RANGE(mt7629_pin_mode_range),
+       [PINCTRL_PIN_REG_DIR] = MTK_RANGE(mt7629_pin_dir_range),
+       [PINCTRL_PIN_REG_DI] = MTK_RANGE(mt7629_pin_di_range),
+       [PINCTRL_PIN_REG_DO] = MTK_RANGE(mt7629_pin_do_range),
+       [PINCTRL_PIN_REG_IES] = MTK_RANGE(mt7629_pin_ies_range),
+       [PINCTRL_PIN_REG_SMT] = MTK_RANGE(mt7629_pin_smt_range),
+       [PINCTRL_PIN_REG_PULLSEL] = MTK_RANGE(mt7629_pin_pullsel_range),
+       [PINCTRL_PIN_REG_PULLEN] = MTK_RANGE(mt7629_pin_pullen_range),
+       [PINCTRL_PIN_REG_DRV] = MTK_RANGE(mt7629_pin_drv_range),
+       [PINCTRL_PIN_REG_TDSEL] = MTK_RANGE(mt7629_pin_tdsel_range),
+       [PINCTRL_PIN_REG_RDSEL] = MTK_RANGE(mt7629_pin_rdsel_range),
+};
+
+static const struct mtk_pin_desc mt7629_pins[] = {
+       MT7629_PIN(0, "TOP_5G_CLK", 53),
+       MT7629_PIN(1, "TOP_5G_DATA", 54),
+       MT7629_PIN(2, "WF0_5G_HB0", 55),
+       MT7629_PIN(3, "WF0_5G_HB1", 56),
+       MT7629_PIN(4, "WF0_5G_HB2", 57),
+       MT7629_PIN(5, "WF0_5G_HB3", 58),
+       MT7629_PIN(6, "WF0_5G_HB4", 59),
+       MT7629_PIN(7, "WF0_5G_HB5", 60),
+       MT7629_PIN(8, "WF0_5G_HB6", 61),
+       MT7629_PIN(9, "XO_REQ", 9),
+       MT7629_PIN(10, "TOP_RST_N", 10),
+       MT7629_PIN(11, "SYS_WATCHDOG", 11),
+       MT7629_PIN(12, "EPHY_LED0_N_JTDO", 12),
+       MT7629_PIN(13, "EPHY_LED1_N_JTDI", 13),
+       MT7629_PIN(14, "EPHY_LED2_N_JTMS", 14),
+       MT7629_PIN(15, "EPHY_LED3_N_JTCLK", 15),
+       MT7629_PIN(16, "EPHY_LED4_N_JTRST_N", 16),
+       MT7629_PIN(17, "WF2G_LED_N", 17),
+       MT7629_PIN(18, "WF5G_LED_N", 18),
+       MT7629_PIN(19, "I2C_SDA", 19),
+       MT7629_PIN(20, "I2C_SCL", 20),
+       MT7629_PIN(21, "GPIO_9", 21),
+       MT7629_PIN(22, "GPIO_10", 22),
+       MT7629_PIN(23, "GPIO_11", 23),
+       MT7629_PIN(24, "GPIO_12", 24),
+       MT7629_PIN(25, "UART1_TXD", 25),
+       MT7629_PIN(26, "UART1_RXD", 26),
+       MT7629_PIN(27, "UART1_CTS", 27),
+       MT7629_PIN(28, "UART1_RTS", 28),
+       MT7629_PIN(29, "UART2_TXD", 29),
+       MT7629_PIN(30, "UART2_RXD", 30),
+       MT7629_PIN(31, "UART2_CTS", 31),
+       MT7629_PIN(32, "UART2_RTS", 32),
+       MT7629_PIN(33, "MDI_TP_P1", 33),
+       MT7629_PIN(34, "MDI_TN_P1", 34),
+       MT7629_PIN(35, "MDI_RP_P1", 35),
+       MT7629_PIN(36, "MDI_RN_P1", 36),
+       MT7629_PIN(37, "MDI_RP_P2", 37),
+       MT7629_PIN(38, "MDI_RN_P2", 38),
+       MT7629_PIN(39, "MDI_TP_P2", 39),
+       MT7629_PIN(40, "MDI_TN_P2", 40),
+       MT7629_PIN(41, "MDI_TP_P3", 41),
+       MT7629_PIN(42, "MDI_TN_P3", 42),
+       MT7629_PIN(43, "MDI_RP_P3", 43),
+       MT7629_PIN(44, "MDI_RN_P3", 44),
+       MT7629_PIN(45, "MDI_RP_P4", 45),
+       MT7629_PIN(46, "MDI_RN_P4", 46),
+       MT7629_PIN(47, "MDI_TP_P4", 47),
+       MT7629_PIN(48, "MDI_TN_P4", 48),
+       MT7629_PIN(49, "SMI_MDC", 49),
+       MT7629_PIN(50, "SMI_MDIO", 50),
+       MT7629_PIN(51, "PCIE_PERESET_N", 51),
+       MT7629_PIN(52, "PWM_0", 52),
+       MT7629_PIN(53, "GPIO_0", 0),
+       MT7629_PIN(54, "GPIO_1", 1),
+       MT7629_PIN(55, "GPIO_2", 2),
+       MT7629_PIN(56, "GPIO_3", 3),
+       MT7629_PIN(57, "GPIO_4", 4),
+       MT7629_PIN(58, "GPIO_5", 5),
+       MT7629_PIN(59, "GPIO_6", 6),
+       MT7629_PIN(60, "GPIO_7", 7),
+       MT7629_PIN(61, "GPIO_8", 8),
+       MT7629_PIN(62, "SPI_CLK", 62),
+       MT7629_PIN(63, "SPI_CS", 63),
+       MT7629_PIN(64, "SPI_MOSI", 64),
+       MT7629_PIN(65, "SPI_MISO", 65),
+       MT7629_PIN(66, "SPI_WP", 66),
+       MT7629_PIN(67, "SPI_HOLD", 67),
+       MT7629_PIN(68, "UART0_TXD", 68),
+       MT7629_PIN(69, "UART0_RXD", 69),
+       MT7629_PIN(70, "TOP_2G_CLK", 70),
+       MT7629_PIN(71, "TOP_2G_DATA", 71),
+       MT7629_PIN(72, "WF0_2G_HB0", 72),
+       MT7629_PIN(73, "WF0_2G_HB1", 73),
+       MT7629_PIN(74, "WF0_2G_HB2", 74),
+       MT7629_PIN(75, "WF0_2G_HB3", 75),
+       MT7629_PIN(76, "WF0_2G_HB4", 76),
+       MT7629_PIN(77, "WF0_2G_HB5", 77),
+       MT7629_PIN(78, "WF0_2G_HB6", 78),
+};
+
+/* List all groups consisting of these pins dedicated to the enablement of
+ * certain hardware block and the corresponding mode for all of the pins.
+ * The hardware probably has multiple combinations of these pinouts.
+ */
+
+/* LED for EPHY */
+static int mt7629_ephy_leds_pins[] = { 12, 13, 14, 15, 16, 17, 18, };
+static int mt7629_ephy_leds_funcs[] = { 1, 1, 1, 1, 1, 1, 1, };
+static int mt7629_ephy_led0_pins[] = { 12, };
+static int mt7629_ephy_led0_funcs[] = { 1, };
+static int mt7629_ephy_led1_pins[] = { 13, };
+static int mt7629_ephy_led1_funcs[] = { 1, };
+static int mt7629_ephy_led2_pins[] = { 14, };
+static int mt7629_ephy_led2_funcs[] = { 1, };
+static int mt7629_ephy_led3_pins[] = { 15, };
+static int mt7629_ephy_led3_funcs[] = { 1, };
+static int mt7629_ephy_led4_pins[] = { 16, };
+static int mt7629_ephy_led4_funcs[] = { 1, };
+static int mt7629_wf2g_led_pins[] = { 17, };
+static int mt7629_wf2g_led_funcs[] = { 1, };
+static int mt7629_wf5g_led_pins[] = { 18, };
+static int mt7629_wf5g_led_funcs[] = { 1, };
+
+/* Watchdog */
+static int mt7629_watchdog_pins[] = { 11, };
+static int mt7629_watchdog_funcs[] = { 1, };
+
+/* LED for GPHY */
+static int mt7629_gphy_leds_0_pins[] = { 21, 22, 23, };
+static int mt7629_gphy_leds_0_funcs[] = { 2, 2, 2, };
+static int mt7629_gphy_led1_0_pins[] = { 21, };
+static int mt7629_gphy_led1_0_funcs[] = { 2, };
+static int mt7629_gphy_led2_0_pins[] = { 22, };
+static int mt7629_gphy_led2_0_funcs[] = { 2, };
+static int mt7629_gphy_led3_0_pins[] = { 23, };
+static int mt7629_gphy_led3_0_funcs[] = { 2, };
+static int mt7629_gphy_leds_1_pins[] = { 57, 58, 59, };
+static int mt7629_gphy_leds_1_funcs[] = { 1, 1, 1, };
+static int mt7629_gphy_led1_1_pins[] = { 57, };
+static int mt7629_gphy_led1_1_funcs[] = { 1, };
+static int mt7629_gphy_led2_1_pins[] = { 58, };
+static int mt7629_gphy_led2_1_funcs[] = { 1, };
+static int mt7629_gphy_led3_1_pins[] = { 59, };
+static int mt7629_gphy_led3_1_funcs[] = { 1, };
+
+/* I2C */
+static int mt7629_i2c_0_pins[] = { 19, 20, };
+static int mt7629_i2c_0_funcs[] = { 1, 1, };
+static int mt7629_i2c_1_pins[] = { 53, 54, };
+static int mt7629_i2c_1_funcs[] = { 1, 1, };
+
+/* SPI */
+static int mt7629_spi_0_pins[] = { 21, 22, 23, 24, };
+static int mt7629_spi_0_funcs[] = { 1, 1, 1, 1, };
+static int mt7629_spi_1_pins[] = { 62, 63, 64, 65, };
+static int mt7629_spi_1_funcs[] = { 1, 1, 1, 1, };
+static int mt7629_spi_wp_pins[] = { 66, };
+static int mt7629_spi_wp_funcs[] = { 1, };
+static int mt7629_spi_hold_pins[] = { 67, };
+static int mt7629_spi_hold_funcs[] = { 1, };
+
+/* UART */
+static int mt7629_uart1_0_txd_rxd_pins[] = { 25, 26, };
+static int mt7629_uart1_0_txd_rxd_funcs[] = { 1, 1, };
+static int mt7629_uart1_1_txd_rxd_pins[] = { 53, 54, };
+static int mt7629_uart1_1_txd_rxd_funcs[] = { 2, 2, };
+static int mt7629_uart2_0_txd_rxd_pins[] = { 29, 30, };
+static int mt7629_uart2_0_txd_rxd_funcs[] = { 1, 1, };
+static int mt7629_uart2_1_txd_rxd_pins[] = { 57, 58, };
+static int mt7629_uart2_1_txd_rxd_funcs[] = { 2, 2, };
+static int mt7629_uart1_0_cts_rts_pins[] = { 27, 28, };
+static int mt7629_uart1_0_cts_rts_funcs[] = { 1, 1, };
+static int mt7629_uart1_1_cts_rts_pins[] = { 55, 56, };
+static int mt7629_uart1_1_cts_rts_funcs[] = { 2, 2, };
+static int mt7629_uart2_0_cts_rts_pins[] = { 31, 32, };
+static int mt7629_uart2_0_cts_rts_funcs[] = { 1, 1, };
+static int mt7629_uart2_1_cts_rts_pins[] = { 59, 60, };
+static int mt7629_uart2_1_cts_rts_funcs[] = { 2, 2, };
+static int mt7629_uart0_txd_rxd_pins[] = { 68, 69, };
+static int mt7629_uart0_txd_rxd_funcs[] = { 1, 1, };
+
+/* MDC/MDIO */
+static int mt7629_mdc_mdio_pins[] = { 49, 50, };
+static int mt7629_mdc_mdio_funcs[] = { 1, 1, };
+
+/* PCIE */
+static int mt7629_pcie_pereset_pins[] = { 51, };
+static int mt7629_pcie_pereset_funcs[] = { 1, };
+static int mt7629_pcie_wake_pins[] = { 55, };
+static int mt7629_pcie_wake_funcs[] = { 1, };
+static int mt7629_pcie_clkreq_pins[] = { 56, };
+static int mt7629_pcie_clkreq_funcs[] = { 1, };
+
+/* PWM */
+static int mt7629_pwm_0_pins[] = { 52, };
+static int mt7629_pwm_0_funcs[] = { 1, };
+static int mt7629_pwm_1_pins[] = { 61, };
+static int mt7629_pwm_1_funcs[] = { 2, };
+
+/* WF 2G */
+static int mt7629_wf0_2g_pins[] = { 70, 71, 72, 73, 74, 75, 76, 77, 78, };
+static int mt7629_wf0_2g_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, };
+
+/* WF 5G */
+static int mt7629_wf0_5g_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, };
+static int mt7629_wf0_5g_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, };
+
+/* SNFI */
+static int mt7629_snfi_pins[] = { 62, 63, 64, 65, 66, 67 };
+static int mt7629_snfi_funcs[] = { 2, 2, 2, 2, 2, 2 };
+
+/* SPI NOR */
+static int mt7629_snor_pins[] = { 62, 63, 64, 65, 66, 67 };
+static int mt7629_snor_funcs[] = { 1, 1, 1, 1, 1, 1 };
+
+static const struct group_desc mt7629_groups[] = {
+       PINCTRL_PIN_GROUP("ephy_leds", mt7629_ephy_leds),
+       PINCTRL_PIN_GROUP("ephy_led0", mt7629_ephy_led0),
+       PINCTRL_PIN_GROUP("ephy_led1", mt7629_ephy_led1),
+       PINCTRL_PIN_GROUP("ephy_led2", mt7629_ephy_led2),
+       PINCTRL_PIN_GROUP("ephy_led3", mt7629_ephy_led3),
+       PINCTRL_PIN_GROUP("ephy_led4", mt7629_ephy_led4),
+       PINCTRL_PIN_GROUP("wf2g_led", mt7629_wf2g_led),
+       PINCTRL_PIN_GROUP("wf5g_led", mt7629_wf5g_led),
+       PINCTRL_PIN_GROUP("watchdog", mt7629_watchdog),
+       PINCTRL_PIN_GROUP("gphy_leds_0", mt7629_gphy_leds_0),
+       PINCTRL_PIN_GROUP("gphy_led1_0", mt7629_gphy_led1_0),
+       PINCTRL_PIN_GROUP("gphy_led2_0", mt7629_gphy_led2_0),
+       PINCTRL_PIN_GROUP("gphy_led3_0", mt7629_gphy_led3_0),
+       PINCTRL_PIN_GROUP("gphy_leds_1", mt7629_gphy_leds_1),
+       PINCTRL_PIN_GROUP("gphy_led1_1", mt7629_gphy_led1_1),
+       PINCTRL_PIN_GROUP("gphy_led2_1", mt7629_gphy_led2_1),
+       PINCTRL_PIN_GROUP("gphy_led3_1", mt7629_gphy_led3_1),
+       PINCTRL_PIN_GROUP("i2c_0", mt7629_i2c_0),
+       PINCTRL_PIN_GROUP("i2c_1", mt7629_i2c_1),
+       PINCTRL_PIN_GROUP("spi_0", mt7629_spi_0),
+       PINCTRL_PIN_GROUP("spi_1", mt7629_spi_1),
+       PINCTRL_PIN_GROUP("spi_wp", mt7629_spi_wp),
+       PINCTRL_PIN_GROUP("spi_hold", mt7629_spi_hold),
+       PINCTRL_PIN_GROUP("uart1_0_txd_rxd", mt7629_uart1_0_txd_rxd),
+       PINCTRL_PIN_GROUP("uart1_1_txd_rxd", mt7629_uart1_1_txd_rxd),
+       PINCTRL_PIN_GROUP("uart2_0_txd_rxd", mt7629_uart2_0_txd_rxd),
+       PINCTRL_PIN_GROUP("uart2_1_txd_rxd", mt7629_uart2_1_txd_rxd),
+       PINCTRL_PIN_GROUP("uart1_0_cts_rts", mt7629_uart1_0_cts_rts),
+       PINCTRL_PIN_GROUP("uart1_1_cts_rts", mt7629_uart1_1_cts_rts),
+       PINCTRL_PIN_GROUP("uart2_0_cts_rts", mt7629_uart2_0_cts_rts),
+       PINCTRL_PIN_GROUP("uart2_1_cts_rts", mt7629_uart2_1_cts_rts),
+       PINCTRL_PIN_GROUP("uart0_txd_rxd", mt7629_uart0_txd_rxd),
+       PINCTRL_PIN_GROUP("mdc_mdio", mt7629_mdc_mdio),
+       PINCTRL_PIN_GROUP("pcie_pereset", mt7629_pcie_pereset),
+       PINCTRL_PIN_GROUP("pcie_wake", mt7629_pcie_wake),
+       PINCTRL_PIN_GROUP("pcie_clkreq", mt7629_pcie_clkreq),
+       PINCTRL_PIN_GROUP("pwm_0", mt7629_pwm_0),
+       PINCTRL_PIN_GROUP("pwm_1", mt7629_pwm_1),
+       PINCTRL_PIN_GROUP("wf0_5g", mt7629_wf0_5g),
+       PINCTRL_PIN_GROUP("wf0_2g", mt7629_wf0_2g),
+       PINCTRL_PIN_GROUP("snfi", mt7629_snfi),
+       PINCTRL_PIN_GROUP("spi_nor", mt7629_snor),
+};
+
+/* Joint those groups owning the same capability in user point of view which
+ * allows that people tend to use through the device tree.
+ */
+static const char *mt7629_ethernet_groups[] = { "mdc_mdio", };
+static const char *mt7629_i2c_groups[] = { "i2c_0", "i2c_1", };
+static const char *mt7629_led_groups[] = { "ephy_leds", "ephy_led0",
+                                          "ephy_led1", "ephy_led2",
+                                          "ephy_led3", "ephy_led4",
+                                          "wf2g_led", "wf5g_led",
+                                          "gphy_leds_0", "gphy_led1_0",
+                                          "gphy_led2_0", "gphy_led3_0",
+                                          "gphy_leds_1", "gphy_led1_1",
+                                          "gphy_led2_1", "gphy_led3_1",};
+static const char *mt7629_pcie_groups[] = { "pcie_pereset", "pcie_wake",
+                                           "pcie_clkreq", };
+static const char *mt7629_pwm_groups[] = { "pwm_0", "pwm_1", };
+static const char *mt7629_spi_groups[] = { "spi_0", "spi_1", "spi_wp",
+                                          "spi_hold", };
+static const char *mt7629_uart_groups[] = { "uart1_0_txd_rxd",
+                                           "uart1_1_txd_rxd",
+                                           "uart2_0_txd_rxd",
+                                           "uart2_1_txd_rxd",
+                                           "uart1_0_cts_rts",
+                                           "uart1_1_cts_rts",
+                                           "uart2_0_cts_rts",
+                                           "uart2_1_cts_rts",
+                                           "uart0_txd_rxd", };
+static const char *mt7629_wdt_groups[] = { "watchdog", };
+static const char *mt7629_wifi_groups[] = { "wf0_5g", "wf0_2g", };
+static const char *mt7629_flash_groups[] = { "snfi", "spi_nor" };
+
+static const struct function_desc mt7629_functions[] = {
+       {"eth", mt7629_ethernet_groups, ARRAY_SIZE(mt7629_ethernet_groups)},
+       {"i2c", mt7629_i2c_groups, ARRAY_SIZE(mt7629_i2c_groups)},
+       {"led", mt7629_led_groups, ARRAY_SIZE(mt7629_led_groups)},
+       {"pcie", mt7629_pcie_groups, ARRAY_SIZE(mt7629_pcie_groups)},
+       {"pwm", mt7629_pwm_groups, ARRAY_SIZE(mt7629_pwm_groups)},
+       {"spi", mt7629_spi_groups, ARRAY_SIZE(mt7629_spi_groups)},
+       {"uart", mt7629_uart_groups, ARRAY_SIZE(mt7629_uart_groups)},
+       {"watchdog", mt7629_wdt_groups, ARRAY_SIZE(mt7629_wdt_groups)},
+       {"wifi", mt7629_wifi_groups, ARRAY_SIZE(mt7629_wifi_groups)},
+       {"flash", mt7629_flash_groups, ARRAY_SIZE(mt7629_flash_groups)},
+};
+
+static const struct mtk_eint_hw mt7629_eint_hw = {
+       .port_mask = 7,
+       .ports     = 7,
+       .ap_num    = ARRAY_SIZE(mt7629_pins),
+       .db_cnt    = 16,
+};
+
+static struct mtk_pin_soc mt7629_data = {
+       .reg_cal = mt7629_reg_cals,
+       .pins = mt7629_pins,
+       .npins = ARRAY_SIZE(mt7629_pins),
+       .grps = mt7629_groups,
+       .ngrps = ARRAY_SIZE(mt7629_groups),
+       .funcs = mt7629_functions,
+       .nfuncs = ARRAY_SIZE(mt7629_functions),
+       .eint_hw = &mt7629_eint_hw,
+       .gpio_m = 0,
+       .ies_present = true,
+       .base_names = mtk_default_register_base_names,
+       .nbase_names = ARRAY_SIZE(mtk_default_register_base_names),
+       .bias_disable_set = mtk_pinconf_bias_disable_set_rev1,
+       .bias_disable_get = mtk_pinconf_bias_disable_get_rev1,
+       .bias_set = mtk_pinconf_bias_set_rev1,
+       .bias_get = mtk_pinconf_bias_get_rev1,
+       .drive_set = mtk_pinconf_drive_set_rev1,
+       .drive_get = mtk_pinconf_drive_get_rev1,
+};
+
+static const struct of_device_id mt7629_pinctrl_of_match[] = {
+       { .compatible = "mediatek,mt7629-pinctrl", },
+       {}
+};
+
+static int mt7629_pinctrl_probe(struct platform_device *pdev)
+{
+       return mtk_moore_pinctrl_probe(pdev, &mt7629_data);
+}
+
+static struct platform_driver mt7629_pinctrl_driver = {
+       .driver = {
+               .name = "mt7629-pinctrl",
+               .of_match_table = mt7629_pinctrl_of_match,
+       },
+       .probe = mt7629_pinctrl_probe,
+};
+
+static int __init mt7629_pinctrl_init(void)
+{
+       return platform_driver_register(&mt7629_pinctrl_driver);
+}
+arch_initcall(mt7629_pinctrl_init);
diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-mt6797.h b/drivers/pinctrl/mediatek/pinctrl-mtk-mt6797.h
new file mode 100644 (file)
index 0000000..86ab78e
--- /dev/null
@@ -0,0 +1,2429 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Based on pinctrl-mtk-mt6765.h
+ *
+ * Copyright (C) 2018 MediaTek Inc.
+ *
+ * Author: ZH Chen <zh.chen@mediatek.com>
+ *
+ * Copyright (c) 2018 Manivannan Sadhasivam
+ */
+
+#ifndef __PINCTRL_MTK_MT6797_H
+#define __PINCTRL_MTK_MT6797_H
+
+#include "pinctrl-paris.h"
+
+static const struct mtk_pin_desc mtk_pins_mt6797[] = {
+       MTK_PIN(
+               0, "GPIO0",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO0"),
+               MTK_FUNCTION(1, "CSI0A_L0P_T0A")
+       ),
+       MTK_PIN(
+               1, "GPIO1",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO1"),
+               MTK_FUNCTION(1, "CSI0A_L0N_T0B")
+       ),
+       MTK_PIN(
+               2, "GPIO2",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO2"),
+               MTK_FUNCTION(1, "CSI0A_L1P_T0C")
+       ),
+       MTK_PIN(
+               3, "GPIO3",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO3"),
+               MTK_FUNCTION(1, "CSI0A_L1N_T1A")
+       ),
+       MTK_PIN(
+               4, "GPIO4",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO4"),
+               MTK_FUNCTION(1, "CSI0A_L2P_T1B")
+       ),
+       MTK_PIN(
+               5, "GPIO5",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO5"),
+               MTK_FUNCTION(1, "CSI0A_L2N_T1C")
+       ),
+       MTK_PIN(
+               6, "GPIO6",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO6"),
+               MTK_FUNCTION(1, "CSI0B_L0P_T0A")
+       ),
+       MTK_PIN(
+               7, "GPIO7",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO7"),
+               MTK_FUNCTION(1, "CSI0B_L0N_T0B")
+       ),
+       MTK_PIN(
+               8, "GPIO8",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO8"),
+               MTK_FUNCTION(1, "CSI0B_L1P_T0C")
+       ),
+       MTK_PIN(
+               9, "GPIO9",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO9"),
+               MTK_FUNCTION(1, "CSI0B_L1N_T1A")
+       ),
+       MTK_PIN(
+               10, "GPIO10",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO10"),
+               MTK_FUNCTION(1, "CSI1A_L0P_T0A")
+       ),
+       MTK_PIN(
+               11, "GPIO11",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO11"),
+               MTK_FUNCTION(1, "CSI1A_L0N_T0B")
+       ),
+       MTK_PIN(
+               12, "GPIO12",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO12"),
+               MTK_FUNCTION(1, "CSI1A_L1P_T0C")
+       ),
+       MTK_PIN(
+               13, "GPIO13",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO13"),
+               MTK_FUNCTION(1, "CSI1A_L1N_T1A")
+       ),
+       MTK_PIN(
+               14, "GPIO14",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO14"),
+               MTK_FUNCTION(1, "CSI1A_L2P_T1B")
+       ),
+       MTK_PIN(
+               15, "GPIO15",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO15"),
+               MTK_FUNCTION(1, "CSI1A_L2N_T1C")
+       ),
+       MTK_PIN(
+               16, "GPIO16",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO16"),
+               MTK_FUNCTION(1, "CSI1B_L0P_T0A")
+       ),
+       MTK_PIN(
+               17, "GPIO17",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO17"),
+               MTK_FUNCTION(1, "CSI1B_L0N_T0B")
+       ),
+       MTK_PIN(
+               18, "GPIO18",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO18"),
+               MTK_FUNCTION(1, "CSI1B_L1P_T0C")
+       ),
+       MTK_PIN(
+               19, "GPIO19",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO19"),
+               MTK_FUNCTION(1, "CSI1B_L1N_T1A")
+       ),
+       MTK_PIN(
+               20, "GPIO20",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO20"),
+               MTK_FUNCTION(1, "CSI1B_L2P_T1B")
+       ),
+       MTK_PIN(
+               21, "GPIO21",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO21"),
+               MTK_FUNCTION(1, "CSI1B_L2N_T1C")
+       ),
+       MTK_PIN(
+               22, "GPIO22",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO22"),
+               MTK_FUNCTION(1, "CSI2_L0P_T0A")
+       ),
+       MTK_PIN(
+               23, "GPIO23",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO23"),
+               MTK_FUNCTION(1, "CSI2_L0N_T0B")
+       ),
+       MTK_PIN(
+               24, "GPIO24",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO24"),
+               MTK_FUNCTION(1, "CSI2_L1P_T0C")
+       ),
+       MTK_PIN(
+               25, "GPIO25",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO25"),
+               MTK_FUNCTION(1, "CSI2_L1N_T1A")
+       ),
+       MTK_PIN(
+               26, "GPIO26",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO26"),
+               MTK_FUNCTION(1, "CSI2_L2P_T1B")
+       ),
+       MTK_PIN(
+               27, "GPIO27",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO27"),
+               MTK_FUNCTION(1, "CSI2_L2N_T1C")
+       ),
+       MTK_PIN(
+               28, "GPIO28",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO28"),
+               MTK_FUNCTION(1, "SPI5_CLK_A"),
+               MTK_FUNCTION(2, "IRTX_OUT"),
+               MTK_FUNCTION(3, "UDI_TDO"),
+               MTK_FUNCTION(4, "SCP_JTAG_TDO"),
+               MTK_FUNCTION(5, "CONN_MCU_TDO"),
+               MTK_FUNCTION(6, "PWM_A"),
+               MTK_FUNCTION(7, "C2K_DM_OTDO")
+       ),
+       MTK_PIN(
+               29, "GPIO29",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO29"),
+               MTK_FUNCTION(1, "SPI5_MI_A"),
+               MTK_FUNCTION(2, "DAP_SIB1_SWD"),
+               MTK_FUNCTION(3, "UDI_TMS"),
+               MTK_FUNCTION(4, "SCP_JTAG_TMS"),
+               MTK_FUNCTION(5, "CONN_MCU_TMS"),
+               MTK_FUNCTION(6, "CONN_MCU_AICE_TMSC"),
+               MTK_FUNCTION(7, "C2K_DM_OTMS")
+       ),
+       MTK_PIN(
+               30, "GPIO30",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO30"),
+               MTK_FUNCTION(1, "CMMCLK0"),
+               MTK_FUNCTION(7, "MD_CLKM0")
+       ),
+       MTK_PIN(
+               31, "GPIO31",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO31"),
+               MTK_FUNCTION(1, "CMMCLK1"),
+               MTK_FUNCTION(7, "MD_CLKM1")
+       ),
+       MTK_PIN(
+               32, "GPIO32",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO32"),
+               MTK_FUNCTION(1, "SPI5_CS_A"),
+               MTK_FUNCTION(2, "DAP_SIB1_SWCK"),
+               MTK_FUNCTION(3, "UDI_TCK_XI"),
+               MTK_FUNCTION(4, "SCP_JTAG_TCK"),
+               MTK_FUNCTION(5, "CONN_MCU_TCK"),
+               MTK_FUNCTION(6, "CONN_MCU_AICE_TCKC"),
+               MTK_FUNCTION(7, "C2K_DM_OTCK")
+       ),
+       MTK_PIN(
+               33, "GPIO33",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO33"),
+               MTK_FUNCTION(1, "SPI5_MO_A"),
+               MTK_FUNCTION(2, "CMFLASH"),
+               MTK_FUNCTION(3, "UDI_TDI"),
+               MTK_FUNCTION(4, "SCP_JTAG_TDI"),
+               MTK_FUNCTION(5, "CONN_MCU_TDI"),
+               MTK_FUNCTION(6, "MD_URXD0"),
+               MTK_FUNCTION(7, "C2K_DM_OTDI")
+       ),
+       MTK_PIN(
+               34, "GPIO34",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO34"),
+               MTK_FUNCTION(1, "CMFLASH"),
+               MTK_FUNCTION(2, "CLKM0"),
+               MTK_FUNCTION(3, "UDI_NTRST"),
+               MTK_FUNCTION(4, "SCP_JTAG_TRSTN"),
+               MTK_FUNCTION(5, "CONN_MCU_TRST_B"),
+               MTK_FUNCTION(6, "MD_UTXD0"),
+               MTK_FUNCTION(7, "C2K_DM_JTINTP")
+       ),
+       MTK_PIN(
+               35, "GPIO35",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO35"),
+               MTK_FUNCTION(1, "CMMCLK3"),
+               MTK_FUNCTION(2, "CLKM1"),
+               MTK_FUNCTION(3, "MD_URXD1"),
+               MTK_FUNCTION(4, "PTA_RXD"),
+               MTK_FUNCTION(5, "CONN_MCU_DBGACK_N"),
+               MTK_FUNCTION(6, "PWM_B"),
+               MTK_FUNCTION(7, "PCC_PPC_IO")
+       ),
+       MTK_PIN(
+               36, "GPIO36",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO36"),
+               MTK_FUNCTION(1, "CMMCLK2"),
+               MTK_FUNCTION(2, "CLKM2"),
+               MTK_FUNCTION(3, "MD_UTXD1"),
+               MTK_FUNCTION(4, "PTA_TXD"),
+               MTK_FUNCTION(5, "CONN_MCU_DBGI_N"),
+               MTK_FUNCTION(6, "PWM_C"),
+               MTK_FUNCTION(7, "EXT_FRAME_SYNC")
+       ),
+       MTK_PIN(
+               37, "GPIO37",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO37"),
+               MTK_FUNCTION(1, "SCL0_0")
+       ),
+       MTK_PIN(
+               38, "GPIO38",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO38"),
+               MTK_FUNCTION(1, "SDA0_0")
+       ),
+       MTK_PIN(
+               39, "GPIO39",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO39"),
+               MTK_FUNCTION(1, "DPI_D0"),
+               MTK_FUNCTION(2, "SPI1_CLK_A"),
+               MTK_FUNCTION(3, "PCM0_SYNC"),
+               MTK_FUNCTION(4, "I2S0_LRCK"),
+               MTK_FUNCTION(5, "CONN_MCU_TRST_B"),
+               MTK_FUNCTION(6, "URXD3"),
+               MTK_FUNCTION(7, "C2K_NTRST")
+       ),
+       MTK_PIN(
+               40, "GPIO40",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO40"),
+               MTK_FUNCTION(1, "DPI_D1"),
+               MTK_FUNCTION(2, "SPI1_MI_A"),
+               MTK_FUNCTION(3, "PCM0_CLK"),
+               MTK_FUNCTION(4, "I2S0_BCK"),
+               MTK_FUNCTION(5, "CONN_MCU_TDO"),
+               MTK_FUNCTION(6, "UTXD3"),
+               MTK_FUNCTION(7, "C2K_TCK")
+       ),
+       MTK_PIN(
+               41, "GPIO41",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO41"),
+               MTK_FUNCTION(1, "DPI_D2"),
+               MTK_FUNCTION(2, "SPI1_CS_A"),
+               MTK_FUNCTION(3, "PCM0_DO"),
+               MTK_FUNCTION(4, "I2S3_DO"),
+               MTK_FUNCTION(5, "CONN_MCU_DBGACK_N"),
+               MTK_FUNCTION(6, "URTS3"),
+               MTK_FUNCTION(7, "C2K_TDI")
+       ),
+       MTK_PIN(
+               42, "GPIO42",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO42"),
+               MTK_FUNCTION(1, "DPI_D3"),
+               MTK_FUNCTION(2, "SPI1_MO_A"),
+               MTK_FUNCTION(3, "PCM0_DI"),
+               MTK_FUNCTION(4, "I2S0_DI"),
+               MTK_FUNCTION(5, "CONN_MCU_TDI"),
+               MTK_FUNCTION(6, "UCTS3"),
+               MTK_FUNCTION(7, "C2K_TMS")
+       ),
+       MTK_PIN(
+               43, "GPIO43",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO43"),
+               MTK_FUNCTION(1, "DPI_D4"),
+               MTK_FUNCTION(2, "SPI2_CLK_A"),
+               MTK_FUNCTION(3, "PCM1_SYNC"),
+               MTK_FUNCTION(4, "I2S2_LRCK"),
+               MTK_FUNCTION(5, "CONN_MCU_TMS"),
+               MTK_FUNCTION(6, "CONN_MCU_AICE_TMSC"),
+               MTK_FUNCTION(7, "C2K_TDO")
+       ),
+       MTK_PIN(
+               44, "GPIO44",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO44"),
+               MTK_FUNCTION(1, "DPI_D5"),
+               MTK_FUNCTION(2, "SPI2_MI_A"),
+               MTK_FUNCTION(3, "PCM1_CLK"),
+               MTK_FUNCTION(4, "I2S2_BCK"),
+               MTK_FUNCTION(5, "CONN_MCU_TCK"),
+               MTK_FUNCTION(6, "CONN_MCU_AICE_TCKC"),
+               MTK_FUNCTION(7, "C2K_RTCK")
+       ),
+       MTK_PIN(
+               45, "GPIO45",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO45"),
+               MTK_FUNCTION(1, "DPI_D6"),
+               MTK_FUNCTION(2, "SPI2_CS_A"),
+               MTK_FUNCTION(3, "PCM1_DI"),
+               MTK_FUNCTION(4, "I2S2_DI"),
+               MTK_FUNCTION(5, "CONN_MCU_DBGI_N"),
+               MTK_FUNCTION(6, "MD_URXD0")
+       ),
+       MTK_PIN(
+               46, "GPIO46",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO46"),
+               MTK_FUNCTION(1, "DPI_D7"),
+               MTK_FUNCTION(2, "SPI2_MO_A"),
+               MTK_FUNCTION(3, "PCM1_DO0"),
+               MTK_FUNCTION(4, "I2S1_DO"),
+               MTK_FUNCTION(5, "ANT_SEL0"),
+               MTK_FUNCTION(6, "MD_UTXD0")
+       ),
+       MTK_PIN(
+               47, "GPIO47",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO47"),
+               MTK_FUNCTION(1, "DPI_D8"),
+               MTK_FUNCTION(2, "CLKM0"),
+               MTK_FUNCTION(3, "PCM1_DO1"),
+               MTK_FUNCTION(4, "I2S0_MCK"),
+               MTK_FUNCTION(5, "ANT_SEL1"),
+               MTK_FUNCTION(6, "PTA_RXD"),
+               MTK_FUNCTION(7, "C2K_URXD0")
+       ),
+       MTK_PIN(
+               48, "GPIO48",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO48"),
+               MTK_FUNCTION(1, "DPI_D9"),
+               MTK_FUNCTION(2, "CLKM1"),
+               MTK_FUNCTION(3, "CMFLASH"),
+               MTK_FUNCTION(4, "I2S2_MCK"),
+               MTK_FUNCTION(5, "ANT_SEL2"),
+               MTK_FUNCTION(6, "PTA_TXD"),
+               MTK_FUNCTION(7, "C2K_UTXD0")
+       ),
+       MTK_PIN(
+               49, "GPIO49",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO49"),
+               MTK_FUNCTION(1, "DPI_D10"),
+               MTK_FUNCTION(2, "MD_INT1_C2K_UIM1_HOT_PLUG_IN"),
+               MTK_FUNCTION(3, "PWM_C"),
+               MTK_FUNCTION(4, "IRTX_OUT"),
+               MTK_FUNCTION(5, "ANT_SEL3"),
+               MTK_FUNCTION(6, "MD_URXD1")
+       ),
+       MTK_PIN(
+               50, "GPIO50",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO50"),
+               MTK_FUNCTION(1, "DPI_D11"),
+               MTK_FUNCTION(2, "MD_INT2"),
+               MTK_FUNCTION(3, "PWM_D"),
+               MTK_FUNCTION(4, "CLKM2"),
+               MTK_FUNCTION(5, "ANT_SEL4"),
+               MTK_FUNCTION(6, "MD_UTXD1")
+       ),
+       MTK_PIN(
+               51, "GPIO51",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO51"),
+               MTK_FUNCTION(1, "DPI_DE"),
+               MTK_FUNCTION(2, "SPI4_CLK_A"),
+               MTK_FUNCTION(3, "IRTX_OUT"),
+               MTK_FUNCTION(4, "SCL0_1"),
+               MTK_FUNCTION(5, "ANT_SEL5"),
+               MTK_FUNCTION(7, "C2K_UTXD1")
+       ),
+       MTK_PIN(
+               52, "GPIO52",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO52"),
+               MTK_FUNCTION(1, "DPI_CK"),
+               MTK_FUNCTION(2, "SPI4_MI_A"),
+               MTK_FUNCTION(3, "SPI4_MO_A"),
+               MTK_FUNCTION(4, "SDA0_1"),
+               MTK_FUNCTION(5, "ANT_SEL6"),
+               MTK_FUNCTION(7, "C2K_URXD1")
+       ),
+       MTK_PIN(
+               53, "GPIO53",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO53"),
+               MTK_FUNCTION(1, "DPI_HSYNC"),
+               MTK_FUNCTION(2, "SPI4_CS_A"),
+               MTK_FUNCTION(3, "CMFLASH"),
+               MTK_FUNCTION(4, "SCL1_1"),
+               MTK_FUNCTION(5, "ANT_SEL7"),
+               MTK_FUNCTION(6, "MD_URXD2"),
+               MTK_FUNCTION(7, "PCC_PPC_IO")
+       ),
+       MTK_PIN(
+               54, "GPIO54",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO54"),
+               MTK_FUNCTION(1, "DPI_VSYNC"),
+               MTK_FUNCTION(2, "SPI4_MO_A"),
+               MTK_FUNCTION(3, "SPI4_MI_A"),
+               MTK_FUNCTION(4, "SDA1_1"),
+               MTK_FUNCTION(5, "PWM_A"),
+               MTK_FUNCTION(6, "MD_UTXD2"),
+               MTK_FUNCTION(7, "EXT_FRAME_SYNC")
+       ),
+       MTK_PIN(
+               55, "GPIO55",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO55"),
+               MTK_FUNCTION(1, "SCL1_0")
+       ),
+       MTK_PIN(
+               56, "GPIO56",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO56"),
+               MTK_FUNCTION(1, "SDA1_0")
+       ),
+       MTK_PIN(
+               57, "GPIO57",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO57"),
+               MTK_FUNCTION(1, "SPI0_CLK"),
+               MTK_FUNCTION(2, "SCL0_2"),
+               MTK_FUNCTION(3, "PWM_B"),
+               MTK_FUNCTION(4, "UTXD3"),
+               MTK_FUNCTION(5, "PCM0_SYNC")
+       ),
+       MTK_PIN(
+               58, "GPIO58",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO58"),
+               MTK_FUNCTION(1, "SPI0_MI"),
+               MTK_FUNCTION(2, "SPI0_MO"),
+               MTK_FUNCTION(3, "SDA1_2"),
+               MTK_FUNCTION(4, "URXD3"),
+               MTK_FUNCTION(5, "PCM0_CLK")
+       ),
+       MTK_PIN(
+               59, "GPIO59",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO59"),
+               MTK_FUNCTION(1, "SPI0_MO"),
+               MTK_FUNCTION(2, "SPI0_MI"),
+               MTK_FUNCTION(3, "PWM_C"),
+               MTK_FUNCTION(4, "URTS3"),
+               MTK_FUNCTION(5, "PCM0_DO")
+       ),
+       MTK_PIN(
+               60, "GPIO60",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO60"),
+               MTK_FUNCTION(1, "SPI0_CS"),
+               MTK_FUNCTION(2, "SDA0_2"),
+               MTK_FUNCTION(3, "SCL1_2"),
+               MTK_FUNCTION(4, "UCTS3"),
+               MTK_FUNCTION(5, "PCM0_DI")
+       ),
+       MTK_PIN(
+               61, "GPIO61",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO61"),
+               MTK_FUNCTION(1, "EINT0"),
+               MTK_FUNCTION(2, "IDDIG"),
+               MTK_FUNCTION(3, "SPI4_CLK_B"),
+               MTK_FUNCTION(4, "I2S0_LRCK"),
+               MTK_FUNCTION(5, "PCM0_SYNC"),
+               MTK_FUNCTION(7, "C2K_EINT0")
+       ),
+       MTK_PIN(
+               62, "GPIO62",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO62"),
+               MTK_FUNCTION(1, "EINT1"),
+               MTK_FUNCTION(2, "USB_DRVVBUS"),
+               MTK_FUNCTION(3, "SPI4_MI_B"),
+               MTK_FUNCTION(4, "I2S0_BCK"),
+               MTK_FUNCTION(5, "PCM0_CLK"),
+               MTK_FUNCTION(7, "C2K_EINT1")
+       ),
+       MTK_PIN(
+               63, "GPIO63",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO63"),
+               MTK_FUNCTION(1, "EINT2"),
+               MTK_FUNCTION(2, "IRTX_OUT"),
+               MTK_FUNCTION(3, "SPI4_MO_B"),
+               MTK_FUNCTION(4, "I2S0_MCK"),
+               MTK_FUNCTION(5, "PCM0_DI"),
+               MTK_FUNCTION(7, "C2K_DM_EINT0")
+       ),
+       MTK_PIN(
+               64, "GPIO64",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO64"),
+               MTK_FUNCTION(1, "EINT3"),
+               MTK_FUNCTION(2, "CMFLASH"),
+               MTK_FUNCTION(3, "SPI4_CS_B"),
+               MTK_FUNCTION(4, "I2S0_DI"),
+               MTK_FUNCTION(5, "PCM0_DO"),
+               MTK_FUNCTION(7, "C2K_DM_EINT1")
+       ),
+       MTK_PIN(
+               65, "GPIO65",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO65"),
+               MTK_FUNCTION(1, "EINT4"),
+               MTK_FUNCTION(2, "CLKM0"),
+               MTK_FUNCTION(3, "SPI5_CLK_B"),
+               MTK_FUNCTION(4, "I2S1_LRCK"),
+               MTK_FUNCTION(5, "PWM_A"),
+               MTK_FUNCTION(7, "C2K_DM_EINT2")
+       ),
+       MTK_PIN(
+               66, "GPIO66",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO66"),
+               MTK_FUNCTION(1, "EINT5"),
+               MTK_FUNCTION(2, "CLKM1"),
+               MTK_FUNCTION(3, "SPI5_MI_B"),
+               MTK_FUNCTION(4, "I2S1_BCK"),
+               MTK_FUNCTION(5, "PWM_B"),
+               MTK_FUNCTION(7, "C2K_DM_EINT3")
+       ),
+       MTK_PIN(
+               67, "GPIO67",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO67"),
+               MTK_FUNCTION(1, "EINT6"),
+               MTK_FUNCTION(2, "CLKM2"),
+               MTK_FUNCTION(3, "SPI5_MO_B"),
+               MTK_FUNCTION(4, "I2S1_MCK"),
+               MTK_FUNCTION(5, "PWM_C"),
+               MTK_FUNCTION(7, "DBG_MON_A0")
+       ),
+       MTK_PIN(
+               68, "GPIO68",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO68"),
+               MTK_FUNCTION(1, "EINT7"),
+               MTK_FUNCTION(2, "CLKM3"),
+               MTK_FUNCTION(3, "SPI5_CS_B"),
+               MTK_FUNCTION(4, "I2S1_DO"),
+               MTK_FUNCTION(5, "PWM_D"),
+               MTK_FUNCTION(7, "DBG_MON_A1")
+       ),
+       MTK_PIN(
+               69, "GPIO69",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO69"),
+               MTK_FUNCTION(1, "I2S0_LRCK"),
+               MTK_FUNCTION(2, "I2S3_LRCK"),
+               MTK_FUNCTION(3, "I2S1_LRCK"),
+               MTK_FUNCTION(4, "I2S2_LRCK"),
+               MTK_FUNCTION(7, "DBG_MON_A2")
+       ),
+       MTK_PIN(
+               70, "GPIO70",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO70"),
+               MTK_FUNCTION(1, "I2S0_BCK"),
+               MTK_FUNCTION(2, "I2S3_BCK"),
+               MTK_FUNCTION(3, "I2S1_BCK"),
+               MTK_FUNCTION(4, "I2S2_BCK"),
+               MTK_FUNCTION(7, "DBG_MON_A3")
+       ),
+       MTK_PIN(
+               71, "GPIO71",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO71"),
+               MTK_FUNCTION(1, "I2S0_MCK"),
+               MTK_FUNCTION(2, "I2S3_MCK"),
+               MTK_FUNCTION(3, "I2S1_MCK"),
+               MTK_FUNCTION(4, "I2S2_MCK"),
+               MTK_FUNCTION(7, "DBG_MON_A4")
+       ),
+       MTK_PIN(
+               72, "GPIO72",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO72"),
+               MTK_FUNCTION(1, "I2S0_DI"),
+               MTK_FUNCTION(2, "I2S0_DI"),
+               MTK_FUNCTION(3, "I2S2_DI"),
+               MTK_FUNCTION(4, "I2S2_DI"),
+               MTK_FUNCTION(7, "DBG_MON_A5")
+       ),
+       MTK_PIN(
+               73, "GPIO73",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO73"),
+               MTK_FUNCTION(1, "I2S3_DO"),
+               MTK_FUNCTION(2, "I2S3_DO"),
+               MTK_FUNCTION(3, "I2S1_DO"),
+               MTK_FUNCTION(4, "I2S1_DO"),
+               MTK_FUNCTION(7, "DBG_MON_A6")
+       ),
+       MTK_PIN(
+               74, "GPIO74",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO74"),
+               MTK_FUNCTION(1, "SCL3_0"),
+               MTK_FUNCTION(7, "AUXIF_CLK1")
+       ),
+       MTK_PIN(
+               75, "GPIO75",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO75"),
+               MTK_FUNCTION(1, "SDA3_0"),
+               MTK_FUNCTION(7, "AUXIF_ST1")
+       ),
+       MTK_PIN(
+               76, "GPIO76",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO76"),
+               MTK_FUNCTION(1, "CONN_HRST_B"),
+               MTK_FUNCTION(7, "C2K_DM_EINT0")
+       ),
+       MTK_PIN(
+               77, "GPIO77",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO77"),
+               MTK_FUNCTION(1, "CONN_TOP_CLK"),
+               MTK_FUNCTION(7, "C2K_DM_EINT1")
+       ),
+       MTK_PIN(
+               78, "GPIO78",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO78"),
+               MTK_FUNCTION(1, "CONN_TOP_DATA"),
+               MTK_FUNCTION(7, "C2K_DM_EINT2")
+       ),
+       MTK_PIN(
+               79, "GPIO79",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO79"),
+               MTK_FUNCTION(1, "CONN_WB_PTA"),
+               MTK_FUNCTION(7, "C2K_DM_EINT3")
+       ),
+       MTK_PIN(
+               80, "GPIO80",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO80"),
+               MTK_FUNCTION(1, "CONN_WF_HB0"),
+               MTK_FUNCTION(7, "C2K_EINT0")
+       ),
+       MTK_PIN(
+               81, "GPIO81",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO81"),
+               MTK_FUNCTION(1, "CONN_WF_HB1"),
+               MTK_FUNCTION(7, "C2K_EINT1")
+       ),
+       MTK_PIN(
+               82, "GPIO82",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO82"),
+               MTK_FUNCTION(1, "CONN_WF_HB2"),
+               MTK_FUNCTION(7, "MD_CLKM0")
+       ),
+       MTK_PIN(
+               83, "GPIO83",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO83"),
+               MTK_FUNCTION(1, "CONN_BT_CLK"),
+               MTK_FUNCTION(7, "MD_CLKM1")
+       ),
+       MTK_PIN(
+               84, "GPIO84",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO84"),
+               MTK_FUNCTION(1, "CONN_BT_DATA")
+       ),
+       MTK_PIN(
+               85, "GPIO85",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO85"),
+               MTK_FUNCTION(1, "EINT8"),
+               MTK_FUNCTION(2, "I2S1_LRCK"),
+               MTK_FUNCTION(3, "I2S2_LRCK"),
+               MTK_FUNCTION(4, "URXD1"),
+               MTK_FUNCTION(5, "MD_URXD0"),
+               MTK_FUNCTION(7, "DBG_MON_A7")
+       ),
+       MTK_PIN(
+               86, "GPIO86",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO86"),
+               MTK_FUNCTION(1, "EINT9"),
+               MTK_FUNCTION(2, "I2S1_BCK"),
+               MTK_FUNCTION(3, "I2S2_BCK"),
+               MTK_FUNCTION(4, "UTXD1"),
+               MTK_FUNCTION(5, "MD_UTXD0"),
+               MTK_FUNCTION(7, "DBG_MON_A8")
+       ),
+       MTK_PIN(
+               87, "GPIO87",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO87"),
+               MTK_FUNCTION(1, "EINT10"),
+               MTK_FUNCTION(2, "I2S1_MCK"),
+               MTK_FUNCTION(3, "I2S2_MCK"),
+               MTK_FUNCTION(4, "URTS1"),
+               MTK_FUNCTION(5, "MD_URXD1"),
+               MTK_FUNCTION(7, "DBG_MON_A9")
+       ),
+       MTK_PIN(
+               88, "GPIO88",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO88"),
+               MTK_FUNCTION(1, "EINT11"),
+               MTK_FUNCTION(2, "I2S1_DO"),
+               MTK_FUNCTION(3, "I2S2_DI"),
+               MTK_FUNCTION(4, "UCTS1"),
+               MTK_FUNCTION(5, "MD_UTXD1"),
+               MTK_FUNCTION(7, "DBG_MON_A10")
+       ),
+       MTK_PIN(
+               89, "GPIO89",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO89"),
+               MTK_FUNCTION(1, "EINT12"),
+               MTK_FUNCTION(2, "IRTX_OUT"),
+               MTK_FUNCTION(3, "CLKM0"),
+               MTK_FUNCTION(4, "PCM1_SYNC"),
+               MTK_FUNCTION(5, "URTS0"),
+               MTK_FUNCTION(7, "DBG_MON_A11")
+       ),
+       MTK_PIN(
+               90, "GPIO90",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO90"),
+               MTK_FUNCTION(1, "EINT13"),
+               MTK_FUNCTION(2, "CMFLASH"),
+               MTK_FUNCTION(3, "CLKM1"),
+               MTK_FUNCTION(4, "PCM1_CLK"),
+               MTK_FUNCTION(5, "UCTS0"),
+               MTK_FUNCTION(7, "C2K_DM_EINT0")
+       ),
+       MTK_PIN(
+               91, "GPIO91",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO91"),
+               MTK_FUNCTION(1, "EINT14"),
+               MTK_FUNCTION(2, "PWM_A"),
+               MTK_FUNCTION(3, "CLKM2"),
+               MTK_FUNCTION(4, "PCM1_DI"),
+               MTK_FUNCTION(5, "SDA0_3"),
+               MTK_FUNCTION(7, "C2K_DM_EINT1")
+       ),
+       MTK_PIN(
+               92, "GPIO92",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO92"),
+               MTK_FUNCTION(1, "EINT15"),
+               MTK_FUNCTION(2, "PWM_B"),
+               MTK_FUNCTION(3, "CLKM3"),
+               MTK_FUNCTION(4, "PCM1_DO0"),
+               MTK_FUNCTION(5, "SCL0_3")
+       ),
+       MTK_PIN(
+               93, "GPIO93",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO93"),
+               MTK_FUNCTION(1, "EINT16"),
+               MTK_FUNCTION(2, "IDDIG"),
+               MTK_FUNCTION(3, "CLKM4"),
+               MTK_FUNCTION(4, "PCM1_DO1"),
+               MTK_FUNCTION(5, "MD_INT2"),
+               MTK_FUNCTION(7, "DROP_ZONE")
+       ),
+       MTK_PIN(
+               94, "GPIO94",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO94"),
+               MTK_FUNCTION(1, "USB_DRVVBUS"),
+               MTK_FUNCTION(2, "PWM_C"),
+               MTK_FUNCTION(3, "CLKM5")
+       ),
+       MTK_PIN(
+               95, "GPIO95",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO95"),
+               MTK_FUNCTION(1, "SDA2_0"),
+               MTK_FUNCTION(7, "AUXIF_ST0")
+       ),
+       MTK_PIN(
+               96, "GPIO96",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO96"),
+               MTK_FUNCTION(1, "SCL2_0"),
+               MTK_FUNCTION(7, "AUXIF_CLK0")
+       ),
+       MTK_PIN(
+               97, "GPIO97",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO97"),
+               MTK_FUNCTION(1, "URXD0"),
+               MTK_FUNCTION(2, "UTXD0"),
+               MTK_FUNCTION(3, "MD_URXD0"),
+               MTK_FUNCTION(4, "MD_URXD1"),
+               MTK_FUNCTION(5, "MD_URXD2"),
+               MTK_FUNCTION(6, "C2K_URXD0"),
+               MTK_FUNCTION(7, "C2K_URXD1")
+       ),
+       MTK_PIN(
+               98, "GPIO98",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO98"),
+               MTK_FUNCTION(1, "UTXD0"),
+               MTK_FUNCTION(2, "URXD0"),
+               MTK_FUNCTION(3, "MD_UTXD0"),
+               MTK_FUNCTION(4, "MD_UTXD1"),
+               MTK_FUNCTION(5, "MD_UTXD2"),
+               MTK_FUNCTION(6, "C2K_UTXD0"),
+               MTK_FUNCTION(7, "C2K_UTXD1")
+       ),
+       MTK_PIN(
+               99, "GPIO99",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO99"),
+               MTK_FUNCTION(1, "RTC32K_CK")
+       ),
+       MTK_PIN(
+               100, "GPIO100",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO100"),
+               MTK_FUNCTION(1, "SRCLKENAI0")
+       ),
+       MTK_PIN(
+               101, "GPIO101",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO101"),
+               MTK_FUNCTION(1, "SRCLKENAI1")
+       ),
+       MTK_PIN(
+               102, "GPIO102",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO102"),
+               MTK_FUNCTION(1, "SRCLKENA0")
+       ),
+       MTK_PIN(
+               103, "GPIO103",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO103"),
+               MTK_FUNCTION(1, "SRCLKENA1")
+       ),
+       MTK_PIN(
+               104, "GPIO104",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO104"),
+               MTK_FUNCTION(1, "SYSRSTB")
+       ),
+       MTK_PIN(
+               105, "GPIO105",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO105"),
+               MTK_FUNCTION(1, "WATCHDOG")
+       ),
+       MTK_PIN(
+               106, "GPIO106",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO106"),
+               MTK_FUNCTION(1, "KPROW0"),
+               MTK_FUNCTION(2, "CMFLASH"),
+               MTK_FUNCTION(3, "CLKM4"),
+               MTK_FUNCTION(4, "TP_GPIO0_AO"),
+               MTK_FUNCTION(5, "IRTX_OUT")
+       ),
+       MTK_PIN(
+               107, "GPIO107",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO107"),
+               MTK_FUNCTION(1, "KPROW1"),
+               MTK_FUNCTION(2, "IDDIG"),
+               MTK_FUNCTION(3, "CLKM5"),
+               MTK_FUNCTION(4, "TP_GPIO1_AO"),
+               MTK_FUNCTION(5, "I2S1_BCK"),
+               MTK_FUNCTION(7, "DAP_SIB1_SWD")
+       ),
+       MTK_PIN(
+               108, "GPIO108",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO108"),
+               MTK_FUNCTION(1, "KPROW2"),
+               MTK_FUNCTION(2, "USB_DRVVBUS"),
+               MTK_FUNCTION(3, "PWM_A"),
+               MTK_FUNCTION(4, "CMFLASH"),
+               MTK_FUNCTION(5, "I2S1_LRCK"),
+               MTK_FUNCTION(7, "DAP_SIB1_SWCK")
+       ),
+       MTK_PIN(
+               109, "GPIO109",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO109"),
+               MTK_FUNCTION(1, "KPCOL0")
+       ),
+       MTK_PIN(
+               110, "GPIO110",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO110"),
+               MTK_FUNCTION(1, "KPCOL1"),
+               MTK_FUNCTION(2, "SDA1_3"),
+               MTK_FUNCTION(3, "PWM_B"),
+               MTK_FUNCTION(4, "CLKM0"),
+               MTK_FUNCTION(5, "I2S1_DO"),
+               MTK_FUNCTION(7, "C2K_DM_EINT3")
+       ),
+       MTK_PIN(
+               111, "GPIO111",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO111"),
+               MTK_FUNCTION(1, "KPCOL2"),
+               MTK_FUNCTION(2, "SCL1_3"),
+               MTK_FUNCTION(3, "PWM_C"),
+               MTK_FUNCTION(4, "DISP_PWM"),
+               MTK_FUNCTION(5, "I2S1_MCK"),
+               MTK_FUNCTION(7, "C2K_DM_EINT2")
+       ),
+       MTK_PIN(
+               112, "GPIO112",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO112"),
+               MTK_FUNCTION(1, "MD_INT1_C2K_UIM1_HOT_PLUG_IN"),
+               MTK_FUNCTION(7, "C2K_DM_EINT1")
+       ),
+       MTK_PIN(
+               113, "GPIO113",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO113"),
+               MTK_FUNCTION(1, "MD_INT0_C2K_UIM0_HOT_PLUG_IN"),
+               MTK_FUNCTION(7, "C2K_DM_EINT0")
+       ),
+       MTK_PIN(
+               114, "GPIO114",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO114"),
+               MTK_FUNCTION(1, "MSDC0_DAT0")
+       ),
+       MTK_PIN(
+               115, "GPIO115",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO115"),
+               MTK_FUNCTION(1, "MSDC0_DAT1")
+       ),
+       MTK_PIN(
+               116, "GPIO116",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO116"),
+               MTK_FUNCTION(1, "MSDC0_DAT2")
+       ),
+       MTK_PIN(
+               117, "GPIO117",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO117"),
+               MTK_FUNCTION(1, "MSDC0_DAT3")
+       ),
+       MTK_PIN(
+               118, "GPIO118",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO118"),
+               MTK_FUNCTION(1, "MSDC0_DAT4")
+       ),
+       MTK_PIN(
+               119, "GPIO119",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO119"),
+               MTK_FUNCTION(1, "MSDC0_DAT5")
+       ),
+       MTK_PIN(
+               120, "GPIO120",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO120"),
+               MTK_FUNCTION(1, "MSDC0_DAT6")
+       ),
+       MTK_PIN(
+               121, "GPIO121",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO121"),
+               MTK_FUNCTION(1, "MSDC0_DAT7")
+       ),
+       MTK_PIN(
+               122, "GPIO122",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO122"),
+               MTK_FUNCTION(1, "MSDC0_CMD")
+       ),
+       MTK_PIN(
+               123, "GPIO123",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO123"),
+               MTK_FUNCTION(1, "MSDC0_CLK")
+       ),
+       MTK_PIN(
+               124, "GPIO124",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO124"),
+               MTK_FUNCTION(1, "MSDC0_DSL")
+       ),
+       MTK_PIN(
+               125, "GPIO125",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO125"),
+               MTK_FUNCTION(1, "MSDC0_RSTB")
+       ),
+       MTK_PIN(
+               126, "GPIO126",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO126"),
+               MTK_FUNCTION(1, "MD1_SIM1_SCLK"),
+               MTK_FUNCTION(2, "MD1_SIM2_SCLK"),
+               MTK_FUNCTION(3, "C2K_UIM0_CLK"),
+               MTK_FUNCTION(4, "C2K_UIM1_CLK")
+       ),
+       MTK_PIN(
+               127, "GPIO127",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO127"),
+               MTK_FUNCTION(1, "MD1_SIM1_SRST"),
+               MTK_FUNCTION(2, "MD1_SIM2_SRST"),
+               MTK_FUNCTION(3, "C2K_UIM0_RST"),
+               MTK_FUNCTION(4, "C2K_UIM1_RST")
+       ),
+       MTK_PIN(
+               128, "GPIO128",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO128"),
+               MTK_FUNCTION(1, "MD1_SIM1_SIO"),
+               MTK_FUNCTION(2, "MD1_SIM2_SIO"),
+               MTK_FUNCTION(3, "C2K_UIM0_IO"),
+               MTK_FUNCTION(4, "C2K_UIM1_IO")
+       ),
+       MTK_PIN(
+               129, "GPIO129",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO129"),
+               MTK_FUNCTION(1, "MSDC1_CMD"),
+               MTK_FUNCTION(2, "CONN_DSP_JMS"),
+               MTK_FUNCTION(3, "LTE_JTAG_TMS"),
+               MTK_FUNCTION(4, "UDI_TMS"),
+               MTK_FUNCTION(5, "C2K_TMS")
+       ),
+       MTK_PIN(
+               130, "GPIO130",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO130"),
+               MTK_FUNCTION(1, "MSDC1_DAT0"),
+               MTK_FUNCTION(2, "CONN_DSP_JDI"),
+               MTK_FUNCTION(3, "LTE_JTAG_TDI"),
+               MTK_FUNCTION(4, "UDI_TDI"),
+               MTK_FUNCTION(5, "C2K_TDI")
+       ),
+       MTK_PIN(
+               131, "GPIO131",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO131"),
+               MTK_FUNCTION(1, "MSDC1_DAT1"),
+               MTK_FUNCTION(2, "CONN_DSP_JDO"),
+               MTK_FUNCTION(3, "LTE_JTAG_TDO"),
+               MTK_FUNCTION(4, "UDI_TDO"),
+               MTK_FUNCTION(5, "C2K_TDO")
+       ),
+       MTK_PIN(
+               132, "GPIO132",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO132"),
+               MTK_FUNCTION(1, "MSDC1_DAT2"),
+               MTK_FUNCTION(5, "C2K_RTCK")
+       ),
+       MTK_PIN(
+               133, "GPIO133",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO133"),
+               MTK_FUNCTION(1, "MSDC1_DAT3"),
+               MTK_FUNCTION(2, "CONN_DSP_JINTP"),
+               MTK_FUNCTION(3, "LTE_JTAG_TRSTN"),
+               MTK_FUNCTION(4, "UDI_NTRST"),
+               MTK_FUNCTION(5, "C2K_NTRST")
+       ),
+       MTK_PIN(
+               134, "GPIO134",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO134"),
+               MTK_FUNCTION(1, "MSDC1_CLK"),
+               MTK_FUNCTION(2, "CONN_DSP_JCK"),
+               MTK_FUNCTION(3, "LTE_JTAG_TCK"),
+               MTK_FUNCTION(4, "UDI_TCK_XI"),
+               MTK_FUNCTION(5, "C2K_TCK")
+       ),
+       MTK_PIN(
+               135, "GPIO135",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO135"),
+               MTK_FUNCTION(1, "TDM_LRCK"),
+               MTK_FUNCTION(2, "I2S0_LRCK"),
+               MTK_FUNCTION(3, "CLKM0"),
+               MTK_FUNCTION(4, "PCM1_SYNC"),
+               MTK_FUNCTION(5, "PWM_A"),
+               MTK_FUNCTION(7, "DBG_MON_A12")
+       ),
+       MTK_PIN(
+               136, "GPIO136",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO136"),
+               MTK_FUNCTION(1, "TDM_BCK"),
+               MTK_FUNCTION(2, "I2S0_BCK"),
+               MTK_FUNCTION(3, "CLKM1"),
+               MTK_FUNCTION(4, "PCM1_CLK"),
+               MTK_FUNCTION(5, "PWM_B"),
+               MTK_FUNCTION(7, "DBG_MON_A13")
+       ),
+       MTK_PIN(
+               137, "GPIO137",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO137"),
+               MTK_FUNCTION(1, "TDM_MCK"),
+               MTK_FUNCTION(2, "I2S0_MCK"),
+               MTK_FUNCTION(3, "CLKM2"),
+               MTK_FUNCTION(4, "PCM1_DI"),
+               MTK_FUNCTION(5, "IRTX_OUT"),
+               MTK_FUNCTION(7, "DBG_MON_A14")
+       ),
+       MTK_PIN(
+               138, "GPIO138",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO138"),
+               MTK_FUNCTION(1, "TDM_DATA0"),
+               MTK_FUNCTION(2, "I2S0_DI"),
+               MTK_FUNCTION(3, "CLKM3"),
+               MTK_FUNCTION(4, "PCM1_DO0"),
+               MTK_FUNCTION(5, "PWM_C"),
+               MTK_FUNCTION(6, "SDA3_1"),
+               MTK_FUNCTION(7, "DBG_MON_A15")
+       ),
+       MTK_PIN(
+               139, "GPIO139",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO139"),
+               MTK_FUNCTION(1, "TDM_DATA1"),
+               MTK_FUNCTION(2, "I2S3_DO"),
+               MTK_FUNCTION(3, "CLKM4"),
+               MTK_FUNCTION(4, "PCM1_DO1"),
+               MTK_FUNCTION(5, "ANT_SEL2"),
+               MTK_FUNCTION(6, "SCL3_1"),
+               MTK_FUNCTION(7, "DBG_MON_A16")
+       ),
+       MTK_PIN(
+               140, "GPIO140",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO140"),
+               MTK_FUNCTION(1, "TDM_DATA2"),
+               MTK_FUNCTION(2, "DISP_PWM"),
+               MTK_FUNCTION(3, "CLKM5"),
+               MTK_FUNCTION(4, "SDA1_4"),
+               MTK_FUNCTION(5, "ANT_SEL1"),
+               MTK_FUNCTION(6, "URXD3"),
+               MTK_FUNCTION(7, "DBG_MON_A17")
+       ),
+       MTK_PIN(
+               141, "GPIO141",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO141"),
+               MTK_FUNCTION(1, "TDM_DATA3"),
+               MTK_FUNCTION(2, "CMFLASH"),
+               MTK_FUNCTION(3, "IRTX_OUT"),
+               MTK_FUNCTION(4, "SCL1_4"),
+               MTK_FUNCTION(5, "ANT_SEL0"),
+               MTK_FUNCTION(6, "UTXD3"),
+               MTK_FUNCTION(7, "DBG_MON_A18")
+       ),
+       MTK_PIN(
+               142, "GPIO142",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO142"),
+               MTK_FUNCTION(1, "PWRAP_SPI0_MI"),
+               MTK_FUNCTION(2, "PWRAP_SPI0_MO")
+       ),
+       MTK_PIN(
+               143, "GPIO143",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO143"),
+               MTK_FUNCTION(1, "PWRAP_SPI0_MO"),
+               MTK_FUNCTION(2, "PWRAP_SPI0_MI")
+       ),
+       MTK_PIN(
+               144, "GPIO144",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO144"),
+               MTK_FUNCTION(1, "PWRAP_SPI0_CK")
+       ),
+       MTK_PIN(
+               145, "GPIO145",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO145"),
+               MTK_FUNCTION(1, "PWRAP_SPI0_CSN")
+       ),
+       MTK_PIN(
+               146, "GPIO146",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO146"),
+               MTK_FUNCTION(1, "AUD_CLK_MOSI")
+       ),
+       MTK_PIN(
+               147, "GPIO147",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO147"),
+               MTK_FUNCTION(1, "AUD_DAT_MISO"),
+               MTK_FUNCTION(2, "AUD_DAT_MOSI"),
+               MTK_FUNCTION(3, "VOW_DAT_MISO")
+       ),
+       MTK_PIN(
+               148, "GPIO148",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO148"),
+               MTK_FUNCTION(1, "AUD_DAT_MOSI"),
+               MTK_FUNCTION(2, "AUD_DAT_MISO")
+       ),
+       MTK_PIN(
+               149, "GPIO149",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO149"),
+               MTK_FUNCTION(1, "VOW_CLK_MISO")
+       ),
+       MTK_PIN(
+               150, "GPIO150",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO150"),
+               MTK_FUNCTION(1, "ANC_DAT_MOSI")
+       ),
+       MTK_PIN(
+               151, "GPIO151",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO151"),
+               MTK_FUNCTION(1, "SCL6_0")
+       ),
+       MTK_PIN(
+               152, "GPIO152",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO152"),
+               MTK_FUNCTION(1, "SDA6_0")
+       ),
+       MTK_PIN(
+               153, "GPIO153",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO153"),
+               MTK_FUNCTION(1, "SCL7_0")
+       ),
+       MTK_PIN(
+               154, "GPIO154",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO154"),
+               MTK_FUNCTION(1, "SDA7_0")
+       ),
+       MTK_PIN(
+               155, "GPIO155",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO155"),
+               MTK_FUNCTION(1, "MD1_SIM2_SCLK"),
+               MTK_FUNCTION(2, "MD1_SIM1_SCLK"),
+               MTK_FUNCTION(3, "C2K_UIM0_CLK"),
+               MTK_FUNCTION(4, "C2K_UIM1_CLK")
+       ),
+       MTK_PIN(
+               156, "GPIO156",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO156"),
+               MTK_FUNCTION(1, "MD1_SIM2_SRST"),
+               MTK_FUNCTION(2, "MD1_SIM1_SRST"),
+               MTK_FUNCTION(3, "C2K_UIM0_RST"),
+               MTK_FUNCTION(4, "C2K_UIM1_RST")
+       ),
+       MTK_PIN(
+               157, "GPIO157",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO157"),
+               MTK_FUNCTION(1, "MD1_SIM2_SIO"),
+               MTK_FUNCTION(2, "MD1_SIM1_SIO"),
+               MTK_FUNCTION(3, "C2K_UIM0_IO"),
+               MTK_FUNCTION(4, "C2K_UIM1_IO")
+       ),
+       MTK_PIN(
+               158, "GPIO158",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO158"),
+               MTK_FUNCTION(1, "MIPI_TDP0")
+       ),
+       MTK_PIN(
+               159, "GPIO159",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO159"),
+               MTK_FUNCTION(1, "MIPI_TDN0")
+       ),
+       MTK_PIN(
+               160, "GPIO160",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO160"),
+               MTK_FUNCTION(1, "MIPI_TDP1")
+       ),
+       MTK_PIN(
+               161, "GPIO161",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO161"),
+               MTK_FUNCTION(1, "MIPI_TDN1")
+       ),
+       MTK_PIN(
+               162, "GPIO162",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO162"),
+               MTK_FUNCTION(1, "MIPI_TCP")
+       ),
+       MTK_PIN(
+               163, "GPIO163",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO163"),
+               MTK_FUNCTION(1, "MIPI_TCN")
+       ),
+       MTK_PIN(
+               164, "GPIO164",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO164"),
+               MTK_FUNCTION(1, "MIPI_TDP2")
+       ),
+       MTK_PIN(
+               165, "GPIO165",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO165"),
+               MTK_FUNCTION(1, "MIPI_TDN2")
+       ),
+       MTK_PIN(
+               166, "GPIO166",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO166"),
+               MTK_FUNCTION(1, "MIPI_TDP3")
+       ),
+       MTK_PIN(
+               167, "GPIO167",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO167"),
+               MTK_FUNCTION(1, "MIPI_TDN3")
+       ),
+       MTK_PIN(
+               168, "GPIO168",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO168"),
+               MTK_FUNCTION(1, "MIPI_TDP0_A")
+       ),
+       MTK_PIN(
+               169, "GPIO169",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO169"),
+               MTK_FUNCTION(1, "MIPI_TDN0_A")
+       ),
+       MTK_PIN(
+               170, "GPIO170",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO170"),
+               MTK_FUNCTION(1, "MIPI_TDP1_A")
+       ),
+       MTK_PIN(
+               171, "GPIO171",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO171"),
+               MTK_FUNCTION(1, "MIPI_TDN1_A")
+       ),
+       MTK_PIN(
+               172, "GPIO172",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO172"),
+               MTK_FUNCTION(1, "MIPI_TCP_A")
+       ),
+       MTK_PIN(
+               173, "GPIO173",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO173"),
+               MTK_FUNCTION(1, "MIPI_TCN_A")
+       ),
+       MTK_PIN(
+               174, "GPIO174",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO174"),
+               MTK_FUNCTION(1, "MIPI_TDP2_A")
+       ),
+       MTK_PIN(
+               175, "GPIO175",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO175"),
+               MTK_FUNCTION(1, "MIPI_TDN2_A")
+       ),
+       MTK_PIN(
+               176, "GPIO176",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO176"),
+               MTK_FUNCTION(1, "MIPI_TDP3_A")
+       ),
+       MTK_PIN(
+               177, "GPIO177",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO177"),
+               MTK_FUNCTION(1, "MIPI_TDN3_A")
+       ),
+       MTK_PIN(
+               178, "GPIO178",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO178"),
+               MTK_FUNCTION(1, "DISP_PWM"),
+               MTK_FUNCTION(2, "PWM_D"),
+               MTK_FUNCTION(3, "CLKM5"),
+               MTK_FUNCTION(7, "DBG_MON_A19")
+       ),
+       MTK_PIN(
+               179, "GPIO179",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO179"),
+               MTK_FUNCTION(1, "DSI_TE0"),
+               MTK_FUNCTION(7, "DBG_MON_A20")
+       ),
+       MTK_PIN(
+               180, "GPIO180",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO180"),
+               MTK_FUNCTION(1, "LCM_RST"),
+               MTK_FUNCTION(2, "DSI_TE1"),
+               MTK_FUNCTION(7, "DBG_MON_A21")
+       ),
+       MTK_PIN(
+               181, "GPIO181",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO181"),
+               MTK_FUNCTION(1, "IDDIG"),
+               MTK_FUNCTION(2, "DSI_TE1"),
+               MTK_FUNCTION(7, "DBG_MON_A22")
+       ),
+       MTK_PIN(
+               182, "GPIO182",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO182"),
+               MTK_FUNCTION(1, "TESTMODE")
+       ),
+       MTK_PIN(
+               183, "GPIO183",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO183"),
+               MTK_FUNCTION(1, "RFIC0_BSI_CK"),
+               MTK_FUNCTION(2, "SPM_BSI_CK"),
+               MTK_FUNCTION(7, "DBG_MON_B27")
+       ),
+       MTK_PIN(
+               184, "GPIO184",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO184"),
+               MTK_FUNCTION(1, "RFIC0_BSI_EN"),
+               MTK_FUNCTION(2, "SPM_BSI_EN"),
+               MTK_FUNCTION(7, "DBG_MON_B28")
+       ),
+       MTK_PIN(
+               185, "GPIO185",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO185"),
+               MTK_FUNCTION(1, "RFIC0_BSI_D0"),
+               MTK_FUNCTION(2, "SPM_BSI_D0"),
+               MTK_FUNCTION(7, "DBG_MON_B29")
+       ),
+       MTK_PIN(
+               186, "GPIO186",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO186"),
+               MTK_FUNCTION(1, "RFIC0_BSI_D1"),
+               MTK_FUNCTION(2, "SPM_BSI_D1"),
+               MTK_FUNCTION(7, "DBG_MON_B30")
+       ),
+       MTK_PIN(
+               187, "GPIO187",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO187"),
+               MTK_FUNCTION(1, "RFIC0_BSI_D2"),
+               MTK_FUNCTION(2, "SPM_BSI_D2"),
+               MTK_FUNCTION(7, "DBG_MON_B31")
+       ),
+       MTK_PIN(
+               188, "GPIO188",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO188"),
+               MTK_FUNCTION(1, "MIPI0_SCLK"),
+               MTK_FUNCTION(7, "DBG_MON_B32")
+       ),
+       MTK_PIN(
+               189, "GPIO189",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO189"),
+               MTK_FUNCTION(1, "MIPI0_SDATA")
+       ),
+       MTK_PIN(
+               190, "GPIO190",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO190"),
+               MTK_FUNCTION(1, "MIPI1_SCLK")
+       ),
+       MTK_PIN(
+               191, "GPIO191",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO191"),
+               MTK_FUNCTION(1, "MIPI1_SDATA")
+       ),
+       MTK_PIN(
+               192, "GPIO192",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO192"),
+               MTK_FUNCTION(1, "BPI_BUS4")
+       ),
+       MTK_PIN(
+               193, "GPIO193",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO193"),
+               MTK_FUNCTION(1, "BPI_BUS5"),
+               MTK_FUNCTION(7, "DBG_MON_B0")
+       ),
+       MTK_PIN(
+               194, "GPIO194",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO194"),
+               MTK_FUNCTION(1, "BPI_BUS6"),
+               MTK_FUNCTION(7, "DBG_MON_B1")
+       ),
+       MTK_PIN(
+               195, "GPIO195",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO195"),
+               MTK_FUNCTION(1, "BPI_BUS7"),
+               MTK_FUNCTION(7, "DBG_MON_B2")
+       ),
+       MTK_PIN(
+               196, "GPIO196",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO196"),
+               MTK_FUNCTION(1, "BPI_BUS8"),
+               MTK_FUNCTION(7, "DBG_MON_B3")
+       ),
+       MTK_PIN(
+               197, "GPIO197",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO197"),
+               MTK_FUNCTION(1, "BPI_BUS9"),
+               MTK_FUNCTION(7, "DBG_MON_B4")
+       ),
+       MTK_PIN(
+               198, "GPIO198",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO198"),
+               MTK_FUNCTION(1, "BPI_BUS10"),
+               MTK_FUNCTION(7, "DBG_MON_B5")
+       ),
+       MTK_PIN(
+               199, "GPIO199",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO199"),
+               MTK_FUNCTION(1, "BPI_BUS11"),
+               MTK_FUNCTION(7, "DBG_MON_B6")
+       ),
+       MTK_PIN(
+               200, "GPIO200",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO200"),
+               MTK_FUNCTION(1, "BPI_BUS12"),
+               MTK_FUNCTION(7, "DBG_MON_B7")
+       ),
+       MTK_PIN(
+               201, "GPIO201",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO201"),
+               MTK_FUNCTION(1, "BPI_BUS13"),
+               MTK_FUNCTION(7, "DBG_MON_B8")
+       ),
+       MTK_PIN(
+               202, "GPIO202",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO202"),
+               MTK_FUNCTION(1, "BPI_BUS14"),
+               MTK_FUNCTION(7, "DBG_MON_B9")
+       ),
+       MTK_PIN(
+               203, "GPIO203",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO203"),
+               MTK_FUNCTION(1, "BPI_BUS15"),
+               MTK_FUNCTION(7, "DBG_MON_B10")
+       ),
+       MTK_PIN(
+               204, "GPIO204",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO204"),
+               MTK_FUNCTION(1, "BPI_BUS16"),
+               MTK_FUNCTION(2, "PA_VM0"),
+               MTK_FUNCTION(7, "DBG_MON_B11")
+       ),
+       MTK_PIN(
+               205, "GPIO205",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO205"),
+               MTK_FUNCTION(1, "BPI_BUS17"),
+               MTK_FUNCTION(2, "PA_VM1"),
+               MTK_FUNCTION(7, "DBG_MON_B12")
+       ),
+       MTK_PIN(
+               206, "GPIO206",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO206"),
+               MTK_FUNCTION(1, "BPI_BUS18"),
+               MTK_FUNCTION(2, "TX_SWAP0"),
+               MTK_FUNCTION(7, "DBG_MON_B13")
+       ),
+       MTK_PIN(
+               207, "GPIO207",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO207"),
+               MTK_FUNCTION(1, "BPI_BUS19"),
+               MTK_FUNCTION(2, "TX_SWAP1"),
+               MTK_FUNCTION(7, "DBG_MON_B14")
+       ),
+       MTK_PIN(
+               208, "GPIO208",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO208"),
+               MTK_FUNCTION(1, "BPI_BUS20"),
+               MTK_FUNCTION(2, "TX_SWAP2"),
+               MTK_FUNCTION(7, "DBG_MON_B15")
+       ),
+       MTK_PIN(
+               209, "GPIO209",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO209"),
+               MTK_FUNCTION(1, "BPI_BUS21"),
+               MTK_FUNCTION(2, "TX_SWAP3"),
+               MTK_FUNCTION(7, "DBG_MON_B16")
+       ),
+       MTK_PIN(
+               210, "GPIO210",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO210"),
+               MTK_FUNCTION(1, "BPI_BUS22"),
+               MTK_FUNCTION(2, "DET_BPI0"),
+               MTK_FUNCTION(7, "DBG_MON_B17")
+       ),
+       MTK_PIN(
+               211, "GPIO211",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO211"),
+               MTK_FUNCTION(1, "BPI_BUS23"),
+               MTK_FUNCTION(2, "DET_BPI1"),
+               MTK_FUNCTION(7, "DBG_MON_B18")
+       ),
+       MTK_PIN(
+               212, "GPIO212",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO212"),
+               MTK_FUNCTION(1, "BPI_BUS0"),
+               MTK_FUNCTION(7, "DBG_MON_B19")
+       ),
+       MTK_PIN(
+               213, "GPIO213",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO213"),
+               MTK_FUNCTION(1, "BPI_BUS1"),
+               MTK_FUNCTION(7, "DBG_MON_B20")
+       ),
+       MTK_PIN(
+               214, "GPIO214",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO214"),
+               MTK_FUNCTION(1, "BPI_BUS2"),
+               MTK_FUNCTION(7, "DBG_MON_B21")
+       ),
+       MTK_PIN(
+               215, "GPIO215",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO215"),
+               MTK_FUNCTION(1, "BPI_BUS3"),
+               MTK_FUNCTION(7, "DBG_MON_B22")
+       ),
+       MTK_PIN(
+               216, "GPIO216",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO216"),
+               MTK_FUNCTION(1, "MIPI2_SCLK"),
+               MTK_FUNCTION(7, "DBG_MON_B23")
+       ),
+       MTK_PIN(
+               217, "GPIO217",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO217"),
+               MTK_FUNCTION(1, "MIPI2_SDATA"),
+               MTK_FUNCTION(7, "DBG_MON_B24")
+       ),
+       MTK_PIN(
+               218, "GPIO218",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO218"),
+               MTK_FUNCTION(1, "MIPI3_SCLK"),
+               MTK_FUNCTION(7, "DBG_MON_B25")
+       ),
+       MTK_PIN(
+               219, "GPIO219",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO219"),
+               MTK_FUNCTION(1, "MIPI3_SDATA"),
+               MTK_FUNCTION(7, "DBG_MON_B26")
+       ),
+       MTK_PIN(
+               220, "GPIO220",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO220"),
+               MTK_FUNCTION(1, "CONN_WF_IP")
+       ),
+       MTK_PIN(
+               221, "GPIO221",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO221"),
+               MTK_FUNCTION(1, "CONN_WF_IN")
+       ),
+       MTK_PIN(
+               222, "GPIO222",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO222"),
+               MTK_FUNCTION(1, "CONN_WF_QP")
+       ),
+       MTK_PIN(
+               223, "GPIO223",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO223"),
+               MTK_FUNCTION(1, "CONN_WF_QN")
+       ),
+       MTK_PIN(
+               224, "GPIO224",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO224"),
+               MTK_FUNCTION(1, "CONN_BT_IP")
+       ),
+       MTK_PIN(
+               225, "GPIO225",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO225"),
+               MTK_FUNCTION(1, "CONN_BT_IN")
+       ),
+       MTK_PIN(
+               226, "GPIO226",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO226"),
+               MTK_FUNCTION(1, "CONN_BT_QP")
+       ),
+       MTK_PIN(
+               227, "GPIO227",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO227"),
+               MTK_FUNCTION(1, "CONN_BT_QN")
+       ),
+       MTK_PIN(
+               228, "GPIO228",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO228"),
+               MTK_FUNCTION(1, "CONN_GPS_IP")
+       ),
+       MTK_PIN(
+               229, "GPIO229",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO229"),
+               MTK_FUNCTION(1, "CONN_GPS_IN")
+       ),
+       MTK_PIN(
+               230, "GPIO230",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO230"),
+               MTK_FUNCTION(1, "CONN_GPS_QP")
+       ),
+       MTK_PIN(
+               231, "GPIO231",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO231"),
+               MTK_FUNCTION(1, "CONN_GPS_QN")
+       ),
+       MTK_PIN(
+               232, "GPIO232",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO232"),
+               MTK_FUNCTION(1, "URXD1"),
+               MTK_FUNCTION(2, "UTXD1"),
+               MTK_FUNCTION(3, "MD_URXD0"),
+               MTK_FUNCTION(4, "MD_URXD1"),
+               MTK_FUNCTION(5, "MD_URXD2"),
+               MTK_FUNCTION(6, "C2K_URXD0"),
+               MTK_FUNCTION(7, "C2K_URXD1")
+       ),
+       MTK_PIN(
+               233, "GPIO233",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO233"),
+               MTK_FUNCTION(1, "UTXD1"),
+               MTK_FUNCTION(2, "URXD1"),
+               MTK_FUNCTION(3, "MD_UTXD0"),
+               MTK_FUNCTION(4, "MD_UTXD1"),
+               MTK_FUNCTION(5, "MD_UTXD2"),
+               MTK_FUNCTION(6, "C2K_UTXD0"),
+               MTK_FUNCTION(7, "C2K_UTXD1")
+       ),
+       MTK_PIN(
+               234, "GPIO234",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO234"),
+               MTK_FUNCTION(1, "SPI1_CLK_B"),
+               MTK_FUNCTION(2, "TP_UTXD1_AO"),
+               MTK_FUNCTION(3, "SCL4_1"),
+               MTK_FUNCTION(4, "UTXD0"),
+               MTK_FUNCTION(6, "PWM_A"),
+               MTK_FUNCTION(7, "DBG_MON_A23")
+       ),
+       MTK_PIN(
+               235, "GPIO235",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO235"),
+               MTK_FUNCTION(1, "SPI1_MI_B"),
+               MTK_FUNCTION(2, "SPI1_MO_B"),
+               MTK_FUNCTION(3, "SDA4_1"),
+               MTK_FUNCTION(4, "URXD0"),
+               MTK_FUNCTION(6, "CLKM0"),
+               MTK_FUNCTION(7, "DBG_MON_A24")
+       ),
+       MTK_PIN(
+               236, "GPIO236",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO236"),
+               MTK_FUNCTION(1, "SPI1_MO_B"),
+               MTK_FUNCTION(2, "SPI1_MI_B"),
+               MTK_FUNCTION(3, "SCL5_1"),
+               MTK_FUNCTION(4, "URTS0"),
+               MTK_FUNCTION(6, "PWM_B"),
+               MTK_FUNCTION(7, "DBG_MON_A25")
+       ),
+       MTK_PIN(
+               237, "GPIO237",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO237"),
+               MTK_FUNCTION(1, "SPI1_CS_B"),
+               MTK_FUNCTION(2, "TP_URXD1_AO"),
+               MTK_FUNCTION(3, "SDA5_1"),
+               MTK_FUNCTION(4, "UCTS0"),
+               MTK_FUNCTION(6, "CLKM1"),
+               MTK_FUNCTION(7, "DBG_MON_A26")
+       ),
+       MTK_PIN(
+               238, "GPIO238",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO238"),
+               MTK_FUNCTION(1, "SDA4_0")
+       ),
+       MTK_PIN(
+               239, "GPIO239",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO239"),
+               MTK_FUNCTION(1, "SCL4_0")
+       ),
+       MTK_PIN(
+               240, "GPIO240",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO240"),
+               MTK_FUNCTION(1, "SDA5_0")
+       ),
+       MTK_PIN(
+               241, "GPIO241",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+                               MTK_FUNCTION(0, "GPIO241"),
+               MTK_FUNCTION(1, "SCL5_0")
+       ),
+       MTK_PIN(
+               242, "GPIO242",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO242"),
+               MTK_FUNCTION(1, "SPI2_CLK_B"),
+               MTK_FUNCTION(2, "TP_UTXD2_AO"),
+               MTK_FUNCTION(3, "SCL4_2"),
+               MTK_FUNCTION(4, "UTXD1"),
+               MTK_FUNCTION(5, "URTS3"),
+               MTK_FUNCTION(6, "PWM_C"),
+               MTK_FUNCTION(7, "DBG_MON_A27")
+       ),
+       MTK_PIN(
+               243, "GPIO243",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO243"),
+               MTK_FUNCTION(1, "SPI2_MI_B"),
+               MTK_FUNCTION(2, "SPI2_MO_B"),
+               MTK_FUNCTION(3, "SDA4_2"),
+               MTK_FUNCTION(4, "URXD1"),
+               MTK_FUNCTION(5, "UCTS3"),
+               MTK_FUNCTION(6, "CLKM2"),
+               MTK_FUNCTION(7, "DBG_MON_A28")
+       ),
+       MTK_PIN(
+               244, "GPIO244",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO244"),
+               MTK_FUNCTION(1, "SPI2_MO_B"),
+               MTK_FUNCTION(2, "SPI2_MI_B"),
+               MTK_FUNCTION(3, "SCL5_2"),
+               MTK_FUNCTION(4, "URTS1"),
+               MTK_FUNCTION(5, "UTXD3"),
+               MTK_FUNCTION(6, "PWM_D"),
+               MTK_FUNCTION(7, "DBG_MON_A29")
+       ),
+       MTK_PIN(
+               245, "GPIO245",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO245"),
+               MTK_FUNCTION(1, "SPI2_CS_B"),
+               MTK_FUNCTION(2, "TP_URXD2_AO"),
+               MTK_FUNCTION(3, "SDA5_2"),
+               MTK_FUNCTION(4, "UCTS1"),
+               MTK_FUNCTION(5, "URXD3"),
+               MTK_FUNCTION(6, "CLKM3"),
+               MTK_FUNCTION(7, "DBG_MON_A30")
+       ),
+       MTK_PIN(
+               246, "GPIO246",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO246"),
+               MTK_FUNCTION(1, "I2S1_LRCK"),
+               MTK_FUNCTION(2, "I2S2_LRCK"),
+               MTK_FUNCTION(3, "I2S0_LRCK"),
+               MTK_FUNCTION(4, "I2S3_LRCK"),
+               MTK_FUNCTION(5, "PCM0_SYNC"),
+               MTK_FUNCTION(6, "SPI5_CLK_C"),
+               MTK_FUNCTION(7, "DBG_MON_A31")
+       ),
+       MTK_PIN(
+               247, "GPIO247",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO247"),
+               MTK_FUNCTION(1, "I2S1_BCK"),
+               MTK_FUNCTION(2, "I2S2_BCK"),
+               MTK_FUNCTION(3, "I2S0_BCK"),
+               MTK_FUNCTION(4, "I2S3_BCK"),
+               MTK_FUNCTION(5, "PCM0_CLK"),
+               MTK_FUNCTION(6, "SPI5_MI_C"),
+               MTK_FUNCTION(7, "DBG_MON_A32")
+       ),
+       MTK_PIN(
+               248, "GPIO248",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO248"),
+               MTK_FUNCTION(1, "I2S2_DI"),
+               MTK_FUNCTION(2, "I2S2_DI"),
+               MTK_FUNCTION(3, "I2S0_DI"),
+               MTK_FUNCTION(4, "I2S0_DI"),
+               MTK_FUNCTION(5, "PCM0_DI"),
+               MTK_FUNCTION(6, "SPI5_CS_C")
+       ),
+       MTK_PIN(
+               249, "GPIO249",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO249"),
+               MTK_FUNCTION(1, "I2S1_DO"),
+               MTK_FUNCTION(2, "I2S1_DO"),
+               MTK_FUNCTION(3, "I2S3_DO"),
+               MTK_FUNCTION(4, "I2S3_DO"),
+               MTK_FUNCTION(5, "PCM0_DO"),
+               MTK_FUNCTION(6, "SPI5_MO_C"),
+               MTK_FUNCTION(7, "TRAP_SRAM_PWR_BYPASS")
+       ),
+       MTK_PIN(
+               250, "GPIO250",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO250"),
+               MTK_FUNCTION(1, "SPI3_MI"),
+               MTK_FUNCTION(2, "SPI3_MO"),
+               MTK_FUNCTION(3, "IRTX_OUT"),
+               MTK_FUNCTION(6, "TP_URXD1_AO"),
+               MTK_FUNCTION(7, "DROP_ZONE")
+       ),
+       MTK_PIN(
+               251, "GPIO251",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO251"),
+               MTK_FUNCTION(1, "SPI3_MO"),
+               MTK_FUNCTION(2, "SPI3_MI"),
+               MTK_FUNCTION(3, "CMFLASH"),
+               MTK_FUNCTION(6, "TP_UTXD1_AO"),
+               MTK_FUNCTION(7, "C2K_RTCK")
+       ),
+       MTK_PIN(
+               252, "GPIO252",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO252"),
+               MTK_FUNCTION(1, "SPI3_CLK"),
+               MTK_FUNCTION(2, "SCL0_4"),
+               MTK_FUNCTION(3, "PWM_D"),
+               MTK_FUNCTION(7, "C2K_TMS")
+       ),
+       MTK_PIN(
+               253, "GPIO253",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO253"),
+               MTK_FUNCTION(1, "SPI3_CS"),
+               MTK_FUNCTION(2, "SDA0_4"),
+               MTK_FUNCTION(3, "PWM_A"),
+               MTK_FUNCTION(7, "C2K_TCK")
+       ),
+       MTK_PIN(
+               254, "GPIO254",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO254"),
+               MTK_FUNCTION(1, "I2S1_MCK"),
+               MTK_FUNCTION(2, "I2S2_MCK"),
+               MTK_FUNCTION(3, "I2S0_MCK"),
+               MTK_FUNCTION(4, "I2S3_MCK"),
+               MTK_FUNCTION(5, "CLKM0"),
+               MTK_FUNCTION(7, "C2K_TDI")
+       ),
+       MTK_PIN(
+               255, "GPIO255",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO255"),
+               MTK_FUNCTION(1, "CLKM1"),
+               MTK_FUNCTION(2, "DISP_PWM"),
+               MTK_FUNCTION(3, "PWM_B"),
+               MTK_FUNCTION(6, "TP_GPIO1_AO"),
+               MTK_FUNCTION(7, "C2K_TDO")
+       ),
+       MTK_PIN(
+               256, "GPIO256",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO256"),
+               MTK_FUNCTION(1, "CLKM2"),
+               MTK_FUNCTION(2, "IRTX_OUT"),
+               MTK_FUNCTION(3, "PWM_C"),
+               MTK_FUNCTION(6, "TP_GPIO0_AO"),
+               MTK_FUNCTION(7, "C2K_NTRST")
+       ),
+       MTK_PIN(
+               257, "GPIO257",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO257"),
+               MTK_FUNCTION(1, "IO_JTAG_TMS"),
+               MTK_FUNCTION(2, "LTE_JTAG_TMS"),
+               MTK_FUNCTION(3, "DFD_TMS"),
+               MTK_FUNCTION(4, "DAP_SIB1_SWD"),
+               MTK_FUNCTION(5, "ANC_JTAG_TMS"),
+               MTK_FUNCTION(6, "SCP_JTAG_TMS"),
+               MTK_FUNCTION(7, "C2K_DM_OTMS")
+       ),
+       MTK_PIN(
+               258, "GPIO258",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO258"),
+               MTK_FUNCTION(1, "IO_JTAG_TCK"),
+               MTK_FUNCTION(2, "LTE_JTAG_TCK"),
+               MTK_FUNCTION(3, "DFD_TCK_XI"),
+               MTK_FUNCTION(4, "DAP_SIB1_SWCK"),
+               MTK_FUNCTION(5, "ANC_JTAG_TCK"),
+               MTK_FUNCTION(6, "SCP_JTAG_TCK"),
+               MTK_FUNCTION(7, "C2K_DM_OTCK")
+       ),
+       MTK_PIN(
+               259, "GPIO259",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO259"),
+               MTK_FUNCTION(1, "IO_JTAG_TDI"),
+               MTK_FUNCTION(2, "LTE_JTAG_TDI"),
+               MTK_FUNCTION(3, "DFD_TDI"),
+               MTK_FUNCTION(5, "ANC_JTAG_TDI"),
+               MTK_FUNCTION(6, "SCP_JTAG_TDI"),
+               MTK_FUNCTION(7, "C2K_DM_OTDI")
+       ),
+       MTK_PIN(
+               260, "GPIO260",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO260"),
+               MTK_FUNCTION(1, "IO_JTAG_TDO"),
+               MTK_FUNCTION(2, "LTE_JTAG_TDO"),
+               MTK_FUNCTION(3, "DFD_TDO"),
+               MTK_FUNCTION(5, "ANC_JTAG_TDO"),
+               MTK_FUNCTION(6, "SCP_JTAG_TDO"),
+               MTK_FUNCTION(7, "C2K_DM_OTDO")
+       ),
+       MTK_PIN(
+               261, "GPIO261",
+               MTK_EINT_FUNCTION(NO_EINT_SUPPORT, NO_EINT_SUPPORT),
+               DRV_GRP3,
+               MTK_FUNCTION(0, "GPIO261"),
+               MTK_FUNCTION(2, "LTE_JTAG_TRSTN"),
+               MTK_FUNCTION(3, "DFD_NTRST"),
+               MTK_FUNCTION(5, "ANC_JTAG_TRSTN"),
+               MTK_FUNCTION(6, "SCP_JTAG_TRSTN"),
+               MTK_FUNCTION(7, "C2K_DM_JTINTP")
+       ),
+};
+
+#endif /* __PINCTRL_MTK_MT6797_H */
index d2179028f1347e4044db20fa80bf06d8dd2b5eca..b59e10852bfbebd15740d7a7ed9db2bd3fc4526f 100644 (file)
@@ -282,8 +282,8 @@ static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
        case PIN_CONFIG_DRIVE_STRENGTH:
                if (hw->soc->drive_set) {
                        err = hw->soc->drive_set(hw, desc, arg);
-               if (err)
-                       return err;
+                       if (err)
+                               return err;
                } else {
                        return -ENOTSUPP;
                }
@@ -419,8 +419,8 @@ static int mtk_pctrl_dt_subnode_to_map(struct pinctrl_dev *pctldev,
 
        pins = of_find_property(node, "pinmux", NULL);
        if (!pins) {
-               dev_err(hw->dev, "missing pins property in node %s .\n",
-                       node->name);
+               dev_err(hw->dev, "missing pins property in node %pOFn .\n",
+                       node);
                return -EINVAL;
        }
 
index 158f618f169570d07dcbd2b9850c72f7334ca495..0c0a5018102b06af979aebea9166683cb28a7e7b 100644 (file)
@@ -239,13 +239,9 @@ static const unsigned int eth_link_led_pins[]      = { GPIOZ_14 };
 static const unsigned int eth_act_led_pins[]   = { GPIOZ_15 };
 
 static const unsigned int tsin_a_d0_pins[]     = { GPIODV_0 };
-static const unsigned int tsin_a_d0_x_pins[]   = { GPIOX_10 };
 static const unsigned int tsin_a_clk_pins[]    = { GPIODV_8 };
-static const unsigned int tsin_a_clk_x_pins[]  = { GPIOX_11 };
 static const unsigned int tsin_a_sop_pins[]    = { GPIODV_9 };
-static const unsigned int tsin_a_sop_x_pins[]  = { GPIOX_8 };
 static const unsigned int tsin_a_d_valid_pins[] = { GPIODV_10 };
-static const unsigned int tsin_a_d_valid_x_pins[] = { GPIOX_9 };
 static const unsigned int tsin_a_fail_pins[]   = { GPIODV_11 };
 static const unsigned int tsin_a_dp_pins[] = {
        GPIODV_1, GPIODV_2, GPIODV_3, GPIODV_4, GPIODV_5, GPIODV_6, GPIODV_7,
@@ -432,10 +428,6 @@ static struct meson_pmx_group meson_gxl_periphs_groups[] = {
        GROUP(spi_miso,         5,      2),
        GROUP(spi_ss0,          5,      1),
        GROUP(spi_sclk,         5,      0),
-       GROUP(tsin_a_sop_x,     6,      3),
-       GROUP(tsin_a_d_valid_x, 6,      2),
-       GROUP(tsin_a_d0_x,      6,      1),
-       GROUP(tsin_a_clk_x,     6,      0),
 
        /* Bank Z */
        GROUP(eth_mdio,         4,      23),
@@ -698,8 +690,8 @@ static const char * const eth_led_groups[] = {
 };
 
 static const char * const tsin_a_groups[] = {
-       "tsin_a_clk", "tsin_a_clk_x", "tsin_a_sop", "tsin_a_sop_x",
-       "tsin_a_d_valid", "tsin_a_d_valid_x", "tsin_a_d0", "tsin_a_d0_x",
+       "tsin_a_clk", "tsin_a_sop",
+       "tsin_a_d_valid", "tsin_a_d0",
        "tsin_a_dp", "tsin_a_fail",
 };
 
index 86466173114da013ff7dff4e6a89195c9399a82d..785e29e74a56ee7d87c4b3eb5d8256a338c2518f 100644 (file)
@@ -506,6 +506,32 @@ static struct meson_pmx_group meson8_cbus_groups[] = {
        GPIO_GROUP(GPIOZ_12),
        GPIO_GROUP(GPIOZ_13),
        GPIO_GROUP(GPIOZ_14),
+       GPIO_GROUP(CARD_0),
+       GPIO_GROUP(CARD_1),
+       GPIO_GROUP(CARD_2),
+       GPIO_GROUP(CARD_3),
+       GPIO_GROUP(CARD_4),
+       GPIO_GROUP(CARD_5),
+       GPIO_GROUP(CARD_6),
+       GPIO_GROUP(BOOT_0),
+       GPIO_GROUP(BOOT_1),
+       GPIO_GROUP(BOOT_2),
+       GPIO_GROUP(BOOT_3),
+       GPIO_GROUP(BOOT_4),
+       GPIO_GROUP(BOOT_5),
+       GPIO_GROUP(BOOT_6),
+       GPIO_GROUP(BOOT_7),
+       GPIO_GROUP(BOOT_8),
+       GPIO_GROUP(BOOT_9),
+       GPIO_GROUP(BOOT_10),
+       GPIO_GROUP(BOOT_11),
+       GPIO_GROUP(BOOT_12),
+       GPIO_GROUP(BOOT_13),
+       GPIO_GROUP(BOOT_14),
+       GPIO_GROUP(BOOT_15),
+       GPIO_GROUP(BOOT_16),
+       GPIO_GROUP(BOOT_17),
+       GPIO_GROUP(BOOT_18),
 
        /* bank X */
        GROUP(sd_d0_a,          8,      5),
@@ -774,7 +800,7 @@ static struct meson_pmx_group meson8_aobus_groups[] = {
        GROUP(hdmi_cec_ao,              0,      17),
 };
 
-static const char * const gpio_groups[] = {
+static const char * const gpio_periphs_groups[] = {
        "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4",
        "GPIOX_5", "GPIOX_6", "GPIOX_7", "GPIOX_8", "GPIOX_9",
        "GPIOX_10", "GPIOX_11", "GPIOX_12", "GPIOX_13", "GPIOX_14",
@@ -807,7 +833,9 @@ static const char * const gpio_groups[] = {
        "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9",
        "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14",
        "BOOT_15", "BOOT_16", "BOOT_17", "BOOT_18",
+};
 
+static const char * const gpio_aobus_groups[] = {
        "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3",
        "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", "GPIOAO_7",
        "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11",
@@ -994,7 +1022,7 @@ static const char * const hdmi_cec_ao_groups[] = {
 };
 
 static struct meson_pmx_func meson8_cbus_functions[] = {
-       FUNCTION(gpio),
+       FUNCTION(gpio_periphs),
        FUNCTION(sd_a),
        FUNCTION(sdxc_a),
        FUNCTION(pcm_a),
@@ -1030,6 +1058,7 @@ static struct meson_pmx_func meson8_cbus_functions[] = {
 };
 
 static struct meson_pmx_func meson8_aobus_functions[] = {
+       FUNCTION(gpio_aobus),
        FUNCTION(uart_ao),
        FUNCTION(remote),
        FUNCTION(i2c_slave_ao),
index 647ad15d5c3c41ee538688ade979145efa459b9b..c69ca95b1ad571368c89ccb8146aaa5b83a7c343 100644 (file)
@@ -403,6 +403,34 @@ static struct meson_pmx_group meson8b_cbus_groups[] = {
        GPIO_GROUP(GPIOH_8),
        GPIO_GROUP(GPIOH_9),
 
+       GPIO_GROUP(CARD_0),
+       GPIO_GROUP(CARD_1),
+       GPIO_GROUP(CARD_2),
+       GPIO_GROUP(CARD_3),
+       GPIO_GROUP(CARD_4),
+       GPIO_GROUP(CARD_5),
+       GPIO_GROUP(CARD_6),
+
+       GPIO_GROUP(BOOT_0),
+       GPIO_GROUP(BOOT_1),
+       GPIO_GROUP(BOOT_2),
+       GPIO_GROUP(BOOT_3),
+       GPIO_GROUP(BOOT_4),
+       GPIO_GROUP(BOOT_5),
+       GPIO_GROUP(BOOT_6),
+       GPIO_GROUP(BOOT_7),
+       GPIO_GROUP(BOOT_8),
+       GPIO_GROUP(BOOT_9),
+       GPIO_GROUP(BOOT_10),
+       GPIO_GROUP(BOOT_11),
+       GPIO_GROUP(BOOT_12),
+       GPIO_GROUP(BOOT_13),
+       GPIO_GROUP(BOOT_14),
+       GPIO_GROUP(BOOT_15),
+       GPIO_GROUP(BOOT_16),
+       GPIO_GROUP(BOOT_17),
+       GPIO_GROUP(BOOT_18),
+
        GPIO_GROUP(DIF_0_P),
        GPIO_GROUP(DIF_0_N),
        GPIO_GROUP(DIF_1_P),
@@ -622,7 +650,7 @@ static struct meson_pmx_group meson8b_aobus_groups[] = {
        GROUP(i2s_lr_clk_in,    0,      14),
 };
 
-static const char * const gpio_groups[] = {
+static const char * const gpio_periphs_groups[] = {
        "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4",
        "GPIOX_5", "GPIOX_6", "GPIOX_7", "GPIOX_8", "GPIOX_9",
        "GPIOX_10", "GPIOX_11", "GPIOX_16", "GPIOX_17", "GPIOX_18",
@@ -646,16 +674,18 @@ static const char * const gpio_groups[] = {
        "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14",
        "BOOT_15", "BOOT_16", "BOOT_17", "BOOT_18",
 
-       "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3",
-       "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", "GPIOAO_7",
-       "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11",
-       "GPIOAO_12", "GPIOAO_13", "GPIO_BSD_EN", "GPIO_TEST_N",
-
        "DIF_0_P", "DIF_0_N", "DIF_1_P", "DIF_1_N",
        "DIF_2_P", "DIF_2_N", "DIF_3_P", "DIF_3_N",
        "DIF_4_P", "DIF_4_N"
 };
 
+static const char * const gpio_aobus_groups[] = {
+       "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3",
+       "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", "GPIOAO_7",
+       "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11",
+       "GPIOAO_12", "GPIOAO_13", "GPIO_BSD_EN", "GPIO_TEST_N"
+};
+
 static const char * const sd_a_groups[] = {
        "sd_d0_a", "sd_d1_a", "sd_d2_a", "sd_d3_a", "sd_clk_a",
        "sd_cmd_a"
@@ -837,7 +867,7 @@ static const char * const tsin_b_groups[] = {
 };
 
 static struct meson_pmx_func meson8b_cbus_functions[] = {
-       FUNCTION(gpio),
+       FUNCTION(gpio_periphs),
        FUNCTION(sd_a),
        FUNCTION(sdxc_a),
        FUNCTION(pcm_a),
@@ -871,6 +901,7 @@ static struct meson_pmx_func meson8b_cbus_functions[] = {
 };
 
 static struct meson_pmx_func meson8b_aobus_functions[] = {
+       FUNCTION(gpio_aobus),
        FUNCTION(uart_ao),
        FUNCTION(uart_ao_b),
        FUNCTION(i2c_slave_ao),
index 7ad50d9268aac1331ff37b43f8dc53c18faba4a9..17f909d8b63a90e3cdd312788bc94a944148f208 100644 (file)
@@ -1799,19 +1799,12 @@ static int npcm7xx_config_set_one(struct npcm7xx_pinctrl *npcm,
                npcm_gpio_set(&bank->gc, bank->base + NPCM7XX_GP_N_PU, gpio);
                break;
        case PIN_CONFIG_INPUT_ENABLE:
-               if (arg) {
-                       iowrite32(gpio, bank->base + NPCM7XX_GP_N_OEC);
-                       npcm_gpio_set(&bank->gc, bank->base + NPCM7XX_GP_N_IEM,
-                                     gpio);
-               } else
-                       npcm_gpio_clr(&bank->gc, bank->base + NPCM7XX_GP_N_IEM,
-                                     gpio);
+               iowrite32(gpio, bank->base + NPCM7XX_GP_N_OEC);
+               bank->direction_input(&bank->gc, pin % bank->gc.ngpio);
                break;
        case PIN_CONFIG_OUTPUT:
-               npcm_gpio_clr(&bank->gc, bank->base + NPCM7XX_GP_N_IEM, gpio);
-               iowrite32(gpio, arg ? bank->base + NPCM7XX_GP_N_DOS :
-                         bank->base + NPCM7XX_GP_N_DOC);
                iowrite32(gpio, bank->base + NPCM7XX_GP_N_OES);
+               bank->direction_output(&bank->gc, pin % bank->gc.ngpio, arg);
                break;
        case PIN_CONFIG_DRIVE_PUSH_PULL:
                npcm_gpio_clr(&bank->gc, bank->base + NPCM7XX_GP_N_OTYP, gpio);
@@ -1932,6 +1925,9 @@ static int npcm7xx_gpio_of(struct npcm7xx_pinctrl *pctrl)
                        pctrl->gpio_bank[id].gc.label =
                                devm_kasprintf(pctrl->dev, GFP_KERNEL, "%pOF",
                                               np);
+                       if (pctrl->gpio_bank[id].gc.label == NULL)
+                               return -ENOMEM;
+
                        pctrl->gpio_bank[id].gc.dbg_show = npcmgpio_dbg_show;
                        pctrl->gpio_bank[id].direction_input =
                                pctrl->gpio_bank[id].gc.direction_input;
index d3fe14394b7364add1daa05fc83c0480d0fa1daf..2c7229380f081a998ceb838c95bc14b70056462f 100644 (file)
@@ -366,29 +366,8 @@ static int pinconf_groups_show(struct seq_file *s, void *what)
        return 0;
 }
 
-static int pinconf_pins_open(struct inode *inode, struct file *file)
-{
-       return single_open(file, pinconf_pins_show, inode->i_private);
-}
-
-static int pinconf_groups_open(struct inode *inode, struct file *file)
-{
-       return single_open(file, pinconf_groups_show, inode->i_private);
-}
-
-static const struct file_operations pinconf_pins_ops = {
-       .open           = pinconf_pins_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
-};
-
-static const struct file_operations pinconf_groups_ops = {
-       .open           = pinconf_groups_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
-};
+DEFINE_SHOW_ATTRIBUTE(pinconf_pins);
+DEFINE_SHOW_ATTRIBUTE(pinconf_groups);
 
 #define MAX_NAME_LEN 15
 
@@ -613,9 +592,9 @@ void pinconf_init_device_debugfs(struct dentry *devroot,
                         struct pinctrl_dev *pctldev)
 {
        debugfs_create_file("pinconf-pins", S_IFREG | S_IRUGO,
-                           devroot, pctldev, &pinconf_pins_ops);
+                           devroot, pctldev, &pinconf_pins_fops);
        debugfs_create_file("pinconf-groups", S_IFREG | S_IRUGO,
-                           devroot, pctldev, &pinconf_groups_ops);
+                           devroot, pctldev, &pinconf_groups_fops);
        debugfs_create_file("pinconf-config",  (S_IRUGO | S_IWUSR | S_IWGRP),
                            devroot, pctldev, &pinconf_dbg_pinconfig_fops);
 }
index 67718b0f978d3484d36a664eeb6ac8ec9c0f76c4..2a7d638978d804837793c7bcb54927eefe10b696 100644 (file)
@@ -791,8 +791,7 @@ static bool amd_gpio_should_save(struct amd_gpio *gpio_dev, unsigned int pin)
 
 static int amd_gpio_suspend(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct amd_gpio *gpio_dev = platform_get_drvdata(pdev);
+       struct amd_gpio *gpio_dev = dev_get_drvdata(dev);
        struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
        int i;
 
@@ -810,8 +809,7 @@ static int amd_gpio_suspend(struct device *dev)
 
 static int amd_gpio_resume(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct amd_gpio *gpio_dev = platform_get_drvdata(pdev);
+       struct amd_gpio *gpio_dev = dev_get_drvdata(dev);
        struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
        int i;
 
index 5a850491a5cb75ca5921cf0609cef69397715c25..4ee135d7b883f882353d146f2cb5c7d67cd78033 100644 (file)
@@ -868,8 +868,7 @@ static struct pinctrl_desc atmel_pinctrl_desc = {
 
 static int __maybe_unused atmel_pctrl_suspend(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct atmel_pioctrl *atmel_pioctrl = platform_get_drvdata(pdev);
+       struct atmel_pioctrl *atmel_pioctrl = dev_get_drvdata(dev);
        int i, j;
 
        /*
@@ -897,8 +896,7 @@ static int __maybe_unused atmel_pctrl_suspend(struct device *dev)
 
 static int __maybe_unused atmel_pctrl_resume(struct device *dev)
 {
-       struct platform_device *pdev = to_platform_device(dev);
-       struct atmel_pioctrl *atmel_pioctrl = platform_get_drvdata(pdev);
+       struct atmel_pioctrl *atmel_pioctrl = dev_get_drvdata(dev);
        int i, j;
 
        for (i = 0; i < atmel_pioctrl->nbanks; i++) {
index a14bc5e5fc248b19dd0e06a7e13c28e06dbffe8d..06be55dab341f20709010222ee891ca63c449b0d 100644 (file)
@@ -630,14 +630,8 @@ static const struct pinctrl_pin_desc lpc18xx_pins[] = {
        LPC18XX_PIN(i2c0_sda, PIN_I2C0_SDA),
 };
 
-/**
- * enum lpc18xx_pin_config_param - possible pin configuration parameters
- * @PIN_CONFIG_GPIO_PIN_INT: route gpio to the gpio pin interrupt
- *     controller.
- */
-enum lpc18xx_pin_config_param {
-       PIN_CONFIG_GPIO_PIN_INT = PIN_CONFIG_END + 1,
-};
+/* PIN_CONFIG_GPIO_PIN_INT: route gpio to the gpio pin interrupt controller */
+#define PIN_CONFIG_GPIO_PIN_INT                (PIN_CONFIG_END + 1)
 
 static const struct pinconf_generic_params lpc18xx_params[] = {
        {"nxp,gpio-pin-interrupt", PIN_CONFIG_GPIO_PIN_INT, 0},
index a7f37063518ec3217633e2fffdac2f38d2ddce57..3d05bc1937d40bd081ceee657a1c7243f3de7a4f 100644 (file)
@@ -34,14 +34,12 @@ enum max77620_pin_ppdrv {
        MAX77620_PIN_PP_DRV,
 };
 
-enum max77620_pinconf_param {
-       MAX77620_ACTIVE_FPS_SOURCE = PIN_CONFIG_END + 1,
-       MAX77620_ACTIVE_FPS_POWER_ON_SLOTS,
-       MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS,
-       MAX77620_SUSPEND_FPS_SOURCE,
-       MAX77620_SUSPEND_FPS_POWER_ON_SLOTS,
-       MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS,
-};
+#define MAX77620_ACTIVE_FPS_SOURCE             (PIN_CONFIG_END + 1)
+#define MAX77620_ACTIVE_FPS_POWER_ON_SLOTS     (PIN_CONFIG_END + 2)
+#define MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS   (PIN_CONFIG_END + 3)
+#define MAX77620_SUSPEND_FPS_SOURCE            (PIN_CONFIG_END + 4)
+#define MAX77620_SUSPEND_FPS_POWER_ON_SLOTS    (PIN_CONFIG_END + 5)
+#define MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS  (PIN_CONFIG_END + 6)
 
 struct max77620_pin_function {
        const char *name;
index f9fc2b3a8731ff9b7ee9267b5f482ecd83080e41..3b4ca52d2456f72b85638ea88394e5c92b02f7bd 100644 (file)
@@ -37,7 +37,6 @@
 #define OCELOT_GPIO_ALT1       0x24
 #define OCELOT_GPIO_SD_MAP     0x28
 
-#define OCELOT_PINS            22
 #define OCELOT_FUNC_PER_PIN    4
 
 enum {
@@ -48,6 +47,7 @@ enum {
        FUNC_IRQ1_IN,
        FUNC_IRQ1_OUT,
        FUNC_MIIM1,
+       FUNC_MIIM2,
        FUNC_PCI_WAKE,
        FUNC_PTP0,
        FUNC_PTP1,
@@ -62,10 +62,23 @@ enum {
        FUNC_SFP3,
        FUNC_SFP4,
        FUNC_SFP5,
+       FUNC_SFP6,
+       FUNC_SFP7,
+       FUNC_SFP8,
+       FUNC_SFP9,
+       FUNC_SFP10,
+       FUNC_SFP11,
+       FUNC_SFP12,
+       FUNC_SFP13,
+       FUNC_SFP14,
+       FUNC_SFP15,
        FUNC_SG0,
+       FUNC_SG1,
+       FUNC_SG2,
        FUNC_SI,
        FUNC_TACHO,
        FUNC_TWI,
+       FUNC_TWI2,
        FUNC_TWI_SCL_M,
        FUNC_UART,
        FUNC_UART2,
@@ -80,6 +93,7 @@ static const char *const ocelot_function_names[] = {
        [FUNC_IRQ1_IN]          = "irq1_in",
        [FUNC_IRQ1_OUT]         = "irq1_out",
        [FUNC_MIIM1]            = "miim1",
+       [FUNC_MIIM2]            = "miim2",
        [FUNC_PCI_WAKE]         = "pci_wake",
        [FUNC_PTP0]             = "ptp0",
        [FUNC_PTP1]             = "ptp1",
@@ -94,10 +108,23 @@ static const char *const ocelot_function_names[] = {
        [FUNC_SFP3]             = "sfp3",
        [FUNC_SFP4]             = "sfp4",
        [FUNC_SFP5]             = "sfp5",
+       [FUNC_SFP6]             = "sfp6",
+       [FUNC_SFP7]             = "sfp7",
+       [FUNC_SFP8]             = "sfp8",
+       [FUNC_SFP9]             = "sfp9",
+       [FUNC_SFP10]            = "sfp10",
+       [FUNC_SFP11]            = "sfp11",
+       [FUNC_SFP12]            = "sfp12",
+       [FUNC_SFP13]            = "sfp13",
+       [FUNC_SFP14]            = "sfp14",
+       [FUNC_SFP15]            = "sfp15",
        [FUNC_SG0]              = "sg0",
+       [FUNC_SG1]              = "sg1",
+       [FUNC_SG2]              = "sg2",
        [FUNC_SI]               = "si",
        [FUNC_TACHO]            = "tacho",
        [FUNC_TWI]              = "twi",
+       [FUNC_TWI2]             = "twi2",
        [FUNC_TWI_SCL_M]        = "twi_scl_m",
        [FUNC_UART]             = "uart",
        [FUNC_UART2]            = "uart2",
@@ -118,7 +145,9 @@ struct ocelot_pinctrl {
        struct pinctrl_dev *pctl;
        struct gpio_chip gpio_chip;
        struct regmap *map;
+       struct pinctrl_desc *desc;
        struct ocelot_pmx_func func[FUNC_MAX];
+       u8 stride;
 };
 
 #define OCELOT_P(p, f0, f1, f2)                                                \
@@ -183,6 +212,152 @@ static const struct pinctrl_pin_desc ocelot_pins[] = {
        OCELOT_PIN(21),
 };
 
+#define JAGUAR2_P(p, f0, f1)                                           \
+static struct ocelot_pin_caps jaguar2_pin_##p = {                      \
+       .pin = p,                                                       \
+       .functions = {                                                  \
+                       FUNC_GPIO, FUNC_##f0, FUNC_##f1, FUNC_NONE      \
+       },                                                              \
+}
+
+JAGUAR2_P(0,  SG0,       NONE);
+JAGUAR2_P(1,  SG0,       NONE);
+JAGUAR2_P(2,  SG0,       NONE);
+JAGUAR2_P(3,  SG0,       NONE);
+JAGUAR2_P(4,  SG1,       NONE);
+JAGUAR2_P(5,  SG1,       NONE);
+JAGUAR2_P(6,  IRQ0_IN,   IRQ0_OUT);
+JAGUAR2_P(7,  IRQ1_IN,   IRQ1_OUT);
+JAGUAR2_P(8,  PTP0,      NONE);
+JAGUAR2_P(9,  PTP1,      NONE);
+JAGUAR2_P(10, UART,      NONE);
+JAGUAR2_P(11, UART,      NONE);
+JAGUAR2_P(12, SG1,       NONE);
+JAGUAR2_P(13, SG1,       NONE);
+JAGUAR2_P(14, TWI,       TWI_SCL_M);
+JAGUAR2_P(15, TWI,       NONE);
+JAGUAR2_P(16, SI,        TWI_SCL_M);
+JAGUAR2_P(17, SI,        TWI_SCL_M);
+JAGUAR2_P(18, SI,        TWI_SCL_M);
+JAGUAR2_P(19, PCI_WAKE,  NONE);
+JAGUAR2_P(20, IRQ0_OUT,  TWI_SCL_M);
+JAGUAR2_P(21, IRQ1_OUT,  TWI_SCL_M);
+JAGUAR2_P(22, TACHO,     NONE);
+JAGUAR2_P(23, PWM,       NONE);
+JAGUAR2_P(24, UART2,     NONE);
+JAGUAR2_P(25, UART2,     SI);
+JAGUAR2_P(26, PTP2,      SI);
+JAGUAR2_P(27, PTP3,      SI);
+JAGUAR2_P(28, TWI2,      SI);
+JAGUAR2_P(29, TWI2,      SI);
+JAGUAR2_P(30, SG2,       SI);
+JAGUAR2_P(31, SG2,       SI);
+JAGUAR2_P(32, SG2,       SI);
+JAGUAR2_P(33, SG2,       SI);
+JAGUAR2_P(34, NONE,      TWI_SCL_M);
+JAGUAR2_P(35, NONE,      TWI_SCL_M);
+JAGUAR2_P(36, NONE,      TWI_SCL_M);
+JAGUAR2_P(37, NONE,      TWI_SCL_M);
+JAGUAR2_P(38, NONE,      TWI_SCL_M);
+JAGUAR2_P(39, NONE,      TWI_SCL_M);
+JAGUAR2_P(40, NONE,      TWI_SCL_M);
+JAGUAR2_P(41, NONE,      TWI_SCL_M);
+JAGUAR2_P(42, NONE,      TWI_SCL_M);
+JAGUAR2_P(43, NONE,      TWI_SCL_M);
+JAGUAR2_P(44, NONE,      SFP8);
+JAGUAR2_P(45, NONE,      SFP9);
+JAGUAR2_P(46, NONE,      SFP10);
+JAGUAR2_P(47, NONE,      SFP11);
+JAGUAR2_P(48, SFP0,      NONE);
+JAGUAR2_P(49, SFP1,      SI);
+JAGUAR2_P(50, SFP2,      SI);
+JAGUAR2_P(51, SFP3,      SI);
+JAGUAR2_P(52, SFP4,      NONE);
+JAGUAR2_P(53, SFP5,      NONE);
+JAGUAR2_P(54, SFP6,      NONE);
+JAGUAR2_P(55, SFP7,      NONE);
+JAGUAR2_P(56, MIIM1,     SFP12);
+JAGUAR2_P(57, MIIM1,     SFP13);
+JAGUAR2_P(58, MIIM2,     SFP14);
+JAGUAR2_P(59, MIIM2,     SFP15);
+JAGUAR2_P(60, NONE,      NONE);
+JAGUAR2_P(61, NONE,      NONE);
+JAGUAR2_P(62, NONE,      NONE);
+JAGUAR2_P(63, NONE,      NONE);
+
+#define JAGUAR2_PIN(n) {                                       \
+       .number = n,                                            \
+       .name = "GPIO_"#n,                                      \
+       .drv_data = &jaguar2_pin_##n                            \
+}
+
+static const struct pinctrl_pin_desc jaguar2_pins[] = {
+       JAGUAR2_PIN(0),
+       JAGUAR2_PIN(1),
+       JAGUAR2_PIN(2),
+       JAGUAR2_PIN(3),
+       JAGUAR2_PIN(4),
+       JAGUAR2_PIN(5),
+       JAGUAR2_PIN(6),
+       JAGUAR2_PIN(7),
+       JAGUAR2_PIN(8),
+       JAGUAR2_PIN(9),
+       JAGUAR2_PIN(10),
+       JAGUAR2_PIN(11),
+       JAGUAR2_PIN(12),
+       JAGUAR2_PIN(13),
+       JAGUAR2_PIN(14),
+       JAGUAR2_PIN(15),
+       JAGUAR2_PIN(16),
+       JAGUAR2_PIN(17),
+       JAGUAR2_PIN(18),
+       JAGUAR2_PIN(19),
+       JAGUAR2_PIN(20),
+       JAGUAR2_PIN(21),
+       JAGUAR2_PIN(22),
+       JAGUAR2_PIN(23),
+       JAGUAR2_PIN(24),
+       JAGUAR2_PIN(25),
+       JAGUAR2_PIN(26),
+       JAGUAR2_PIN(27),
+       JAGUAR2_PIN(28),
+       JAGUAR2_PIN(29),
+       JAGUAR2_PIN(30),
+       JAGUAR2_PIN(31),
+       JAGUAR2_PIN(32),
+       JAGUAR2_PIN(33),
+       JAGUAR2_PIN(34),
+       JAGUAR2_PIN(35),
+       JAGUAR2_PIN(36),
+       JAGUAR2_PIN(37),
+       JAGUAR2_PIN(38),
+       JAGUAR2_PIN(39),
+       JAGUAR2_PIN(40),
+       JAGUAR2_PIN(41),
+       JAGUAR2_PIN(42),
+       JAGUAR2_PIN(43),
+       JAGUAR2_PIN(44),
+       JAGUAR2_PIN(45),
+       JAGUAR2_PIN(46),
+       JAGUAR2_PIN(47),
+       JAGUAR2_PIN(48),
+       JAGUAR2_PIN(49),
+       JAGUAR2_PIN(50),
+       JAGUAR2_PIN(51),
+       JAGUAR2_PIN(52),
+       JAGUAR2_PIN(53),
+       JAGUAR2_PIN(54),
+       JAGUAR2_PIN(55),
+       JAGUAR2_PIN(56),
+       JAGUAR2_PIN(57),
+       JAGUAR2_PIN(58),
+       JAGUAR2_PIN(59),
+       JAGUAR2_PIN(60),
+       JAGUAR2_PIN(61),
+       JAGUAR2_PIN(62),
+       JAGUAR2_PIN(63),
+};
+
 static int ocelot_get_functions_count(struct pinctrl_dev *pctldev)
 {
        return ARRAY_SIZE(ocelot_function_names);
@@ -207,9 +382,10 @@ static int ocelot_get_function_groups(struct pinctrl_dev *pctldev,
        return 0;
 }
 
-static int ocelot_pin_function_idx(unsigned int pin, unsigned int function)
+static int ocelot_pin_function_idx(struct ocelot_pinctrl *info,
+                                  unsigned int pin, unsigned int function)
 {
-       struct ocelot_pin_caps *p = ocelot_pins[pin].drv_data;
+       struct ocelot_pin_caps *p = info->desc->pins[pin].drv_data;
        int i;
 
        for (i = 0; i < OCELOT_FUNC_PER_PIN; i++) {
@@ -220,14 +396,17 @@ static int ocelot_pin_function_idx(unsigned int pin, unsigned int function)
        return -1;
 }
 
+#define REG(r, info, p) ((r) * (info)->stride + (4 * ((p) / 32)))
+
 static int ocelot_pinmux_set_mux(struct pinctrl_dev *pctldev,
                                 unsigned int selector, unsigned int group)
 {
        struct ocelot_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
-       struct ocelot_pin_caps *pin = ocelot_pins[group].drv_data;
+       struct ocelot_pin_caps *pin = info->desc->pins[group].drv_data;
+       unsigned int p = pin->pin % 32;
        int f;
 
-       f = ocelot_pin_function_idx(group, selector);
+       f = ocelot_pin_function_idx(info, group, selector);
        if (f < 0)
                return -EINVAL;
 
@@ -238,10 +417,10 @@ static int ocelot_pinmux_set_mux(struct pinctrl_dev *pctldev,
         * This is racy because both registers can't be updated at the same time
         * but it doesn't matter much for now.
         */
-       regmap_update_bits(info->map, OCELOT_GPIO_ALT0, BIT(pin->pin),
-                          f << pin->pin);
-       regmap_update_bits(info->map, OCELOT_GPIO_ALT1, BIT(pin->pin),
-                          f << (pin->pin - 1));
+       regmap_update_bits(info->map, REG(OCELOT_GPIO_ALT0, info, pin->pin),
+                          BIT(p), f << p);
+       regmap_update_bits(info->map, REG(OCELOT_GPIO_ALT1, info, pin->pin),
+                          BIT(p), f << (p - 1));
 
        return 0;
 }
@@ -251,9 +430,10 @@ static int ocelot_gpio_set_direction(struct pinctrl_dev *pctldev,
                                     unsigned int pin, bool input)
 {
        struct ocelot_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
+       unsigned int p = pin % 32;
 
-       regmap_update_bits(info->map, OCELOT_GPIO_OE, BIT(pin),
-                          input ? 0 : BIT(pin));
+       regmap_update_bits(info->map, REG(OCELOT_GPIO_OE, info, p), BIT(p),
+                          input ? 0 : BIT(p));
 
        return 0;
 }
@@ -263,9 +443,12 @@ static int ocelot_gpio_request_enable(struct pinctrl_dev *pctldev,
                                      unsigned int offset)
 {
        struct ocelot_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
+       unsigned int p = offset % 32;
 
-       regmap_update_bits(info->map, OCELOT_GPIO_ALT0, BIT(offset), 0);
-       regmap_update_bits(info->map, OCELOT_GPIO_ALT1, BIT(offset), 0);
+       regmap_update_bits(info->map, REG(OCELOT_GPIO_ALT0, info, offset),
+                          BIT(p), 0);
+       regmap_update_bits(info->map, REG(OCELOT_GPIO_ALT1, info, offset),
+                          BIT(p), 0);
 
        return 0;
 }
@@ -281,13 +464,17 @@ static const struct pinmux_ops ocelot_pmx_ops = {
 
 static int ocelot_pctl_get_groups_count(struct pinctrl_dev *pctldev)
 {
-       return ARRAY_SIZE(ocelot_pins);
+       struct ocelot_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
+
+       return info->desc->npins;
 }
 
 static const char *ocelot_pctl_get_group_name(struct pinctrl_dev *pctldev,
                                              unsigned int group)
 {
-       return ocelot_pins[group].name;
+       struct ocelot_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
+
+       return info->desc->pins[group].name;
 }
 
 static int ocelot_pctl_get_group_pins(struct pinctrl_dev *pctldev,
@@ -295,7 +482,9 @@ static int ocelot_pctl_get_group_pins(struct pinctrl_dev *pctldev,
                                      const unsigned int **pins,
                                      unsigned int *num_pins)
 {
-       *pins = &ocelot_pins[group].number;
+       struct ocelot_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
+
+       *pins = &info->desc->pins[group].number;
        *num_pins = 1;
 
        return 0;
@@ -318,30 +507,47 @@ static struct pinctrl_desc ocelot_desc = {
        .owner = THIS_MODULE,
 };
 
+static struct pinctrl_desc jaguar2_desc = {
+       .name = "jaguar2-pinctrl",
+       .pins = jaguar2_pins,
+       .npins = ARRAY_SIZE(jaguar2_pins),
+       .pctlops = &ocelot_pctl_ops,
+       .pmxops = &ocelot_pmx_ops,
+       .owner = THIS_MODULE,
+};
+
 static int ocelot_create_group_func_map(struct device *dev,
                                        struct ocelot_pinctrl *info)
 {
-       u16 pins[ARRAY_SIZE(ocelot_pins)];
        int f, npins, i;
+       u8 *pins = kcalloc(info->desc->npins, sizeof(u8), GFP_KERNEL);
+
+       if (!pins)
+               return -ENOMEM;
 
        for (f = 0; f < FUNC_MAX; f++) {
-               for (npins = 0, i = 0; i < ARRAY_SIZE(ocelot_pins); i++) {
-                       if (ocelot_pin_function_idx(i, f) >= 0)
+               for (npins = 0, i = 0; i < info->desc->npins; i++) {
+                       if (ocelot_pin_function_idx(info, i, f) >= 0)
                                pins[npins++] = i;
                }
 
+               if (!npins)
+                       continue;
+
                info->func[f].ngroups = npins;
-               info->func[f].groups = devm_kcalloc(dev,
-                                                        npins,
-                                                        sizeof(char *),
-                                                        GFP_KERNEL);
-               if (!info->func[f].groups)
+               info->func[f].groups = devm_kcalloc(dev, npins, sizeof(char *),
+                                                   GFP_KERNEL);
+               if (!info->func[f].groups) {
+                       kfree(pins);
                        return -ENOMEM;
+               }
 
                for (i = 0; i < npins; i++)
-                       info->func[f].groups[i] = ocelot_pins[pins[i]].name;
+                       info->func[f].groups[i] = info->desc->pins[pins[i]].name;
        }
 
+       kfree(pins);
+
        return 0;
 }
 
@@ -356,7 +562,7 @@ static int ocelot_pinctrl_register(struct platform_device *pdev,
                return ret;
        }
 
-       info->pctl = devm_pinctrl_register(&pdev->dev, &ocelot_desc, info);
+       info->pctl = devm_pinctrl_register(&pdev->dev, info->desc, info);
        if (IS_ERR(info->pctl)) {
                dev_err(&pdev->dev, "Failed to register pinctrl\n");
                return PTR_ERR(info->pctl);
@@ -370,9 +576,9 @@ static int ocelot_gpio_get(struct gpio_chip *chip, unsigned int offset)
        struct ocelot_pinctrl *info = gpiochip_get_data(chip);
        unsigned int val;
 
-       regmap_read(info->map, OCELOT_GPIO_IN, &val);
+       regmap_read(info->map, REG(OCELOT_GPIO_IN, info, offset), &val);
 
-       return !!(val & BIT(offset));
+       return !!(val & BIT(offset % 32));
 }
 
 static void ocelot_gpio_set(struct gpio_chip *chip, unsigned int offset,
@@ -381,9 +587,11 @@ static void ocelot_gpio_set(struct gpio_chip *chip, unsigned int offset,
        struct ocelot_pinctrl *info = gpiochip_get_data(chip);
 
        if (value)
-               regmap_write(info->map, OCELOT_GPIO_OUT_SET, BIT(offset));
+               regmap_write(info->map, REG(OCELOT_GPIO_OUT_SET, info, offset),
+                            BIT(offset % 32));
        else
-               regmap_write(info->map, OCELOT_GPIO_OUT_CLR, BIT(offset));
+               regmap_write(info->map, REG(OCELOT_GPIO_OUT_CLR, info, offset),
+                            BIT(offset % 32));
 }
 
 static int ocelot_gpio_get_direction(struct gpio_chip *chip,
@@ -392,9 +600,9 @@ static int ocelot_gpio_get_direction(struct gpio_chip *chip,
        struct ocelot_pinctrl *info = gpiochip_get_data(chip);
        unsigned int val;
 
-       regmap_read(info->map, OCELOT_GPIO_OE, &val);
+       regmap_read(info->map, REG(OCELOT_GPIO_OE, info, offset), &val);
 
-       return !(val & BIT(offset));
+       return !(val & BIT(offset % 32));
 }
 
 static int ocelot_gpio_direction_input(struct gpio_chip *chip,
@@ -407,12 +615,14 @@ static int ocelot_gpio_direction_output(struct gpio_chip *chip,
                                        unsigned int offset, int value)
 {
        struct ocelot_pinctrl *info = gpiochip_get_data(chip);
-       unsigned int pin = BIT(offset);
+       unsigned int pin = BIT(offset % 32);
 
        if (value)
-               regmap_write(info->map, OCELOT_GPIO_OUT_SET, pin);
+               regmap_write(info->map, REG(OCELOT_GPIO_OUT_SET, info, offset),
+                            pin);
        else
-               regmap_write(info->map, OCELOT_GPIO_OUT_CLR, pin);
+               regmap_write(info->map, REG(OCELOT_GPIO_OUT_CLR, info, offset),
+                            pin);
 
        return pinctrl_gpio_direction_output(chip->base + offset);
 }
@@ -434,7 +644,8 @@ static void ocelot_irq_mask(struct irq_data *data)
        struct ocelot_pinctrl *info = gpiochip_get_data(chip);
        unsigned int gpio = irqd_to_hwirq(data);
 
-       regmap_update_bits(info->map, OCELOT_GPIO_INTR_ENA, BIT(gpio), 0);
+       regmap_update_bits(info->map, REG(OCELOT_GPIO_INTR_ENA, info, gpio),
+                          BIT(gpio % 32), 0);
 }
 
 static void ocelot_irq_unmask(struct irq_data *data)
@@ -443,8 +654,8 @@ static void ocelot_irq_unmask(struct irq_data *data)
        struct ocelot_pinctrl *info = gpiochip_get_data(chip);
        unsigned int gpio = irqd_to_hwirq(data);
 
-       regmap_update_bits(info->map, OCELOT_GPIO_INTR_ENA, BIT(gpio),
-                          BIT(gpio));
+       regmap_update_bits(info->map, REG(OCELOT_GPIO_INTR_ENA, info, gpio),
+                          BIT(gpio % 32), BIT(gpio % 32));
 }
 
 static void ocelot_irq_ack(struct irq_data *data)
@@ -453,7 +664,8 @@ static void ocelot_irq_ack(struct irq_data *data)
        struct ocelot_pinctrl *info = gpiochip_get_data(chip);
        unsigned int gpio = irqd_to_hwirq(data);
 
-       regmap_write_bits(info->map, OCELOT_GPIO_INTR, BIT(gpio), BIT(gpio));
+       regmap_write_bits(info->map, REG(OCELOT_GPIO_INTR, info, gpio),
+                         BIT(gpio % 32), BIT(gpio % 32));
 }
 
 static int ocelot_irq_set_type(struct irq_data *data, unsigned int type);
@@ -497,22 +709,25 @@ static void ocelot_irq_handler(struct irq_desc *desc)
        struct irq_chip *parent_chip = irq_desc_get_chip(desc);
        struct gpio_chip *chip = irq_desc_get_handler_data(desc);
        struct ocelot_pinctrl *info = gpiochip_get_data(chip);
-       unsigned int reg = 0, irq;
+       unsigned int reg = 0, irq, i;
        unsigned long irqs;
 
-       regmap_read(info->map, OCELOT_GPIO_INTR_IDENT, &reg);
-       if (!reg)
-               return;
+       for (i = 0; i < info->stride; i++) {
+               regmap_read(info->map, OCELOT_GPIO_INTR_IDENT + 4 * i, &reg);
+               if (!reg)
+                       continue;
 
-       chained_irq_enter(parent_chip, desc);
+               chained_irq_enter(parent_chip, desc);
 
-       irqs = reg;
+               irqs = reg;
 
-       for_each_set_bit(irq, &irqs, OCELOT_PINS) {
-               generic_handle_irq(irq_linear_revmap(chip->irq.domain, irq));
-       }
+               for_each_set_bit(irq, &irqs,
+                                min(32U, info->desc->npins - 32 * i))
+                       generic_handle_irq(irq_linear_revmap(chip->irq.domain,
+                                                            irq + 32 * i));
 
-       chained_irq_exit(parent_chip, desc);
+               chained_irq_exit(parent_chip, desc);
+       }
 }
 
 static int ocelot_gpiochip_register(struct platform_device *pdev,
@@ -524,7 +739,7 @@ static int ocelot_gpiochip_register(struct platform_device *pdev,
        info->gpio_chip = ocelot_gpiolib_chip;
 
        gc = &info->gpio_chip;
-       gc->ngpio = OCELOT_PINS;
+       gc->ngpio = info->desc->npins;
        gc->parent = &pdev->dev;
        gc->base = 0;
        gc->of_node = info->dev->of_node;
@@ -549,15 +764,9 @@ static int ocelot_gpiochip_register(struct platform_device *pdev,
        return 0;
 }
 
-static const struct regmap_config ocelot_pinctrl_regmap_config = {
-       .reg_bits = 32,
-       .val_bits = 32,
-       .reg_stride = 4,
-       .max_register = 0x64,
-};
-
 static const struct of_device_id ocelot_pinctrl_of_match[] = {
-       { .compatible = "mscc,ocelot-pinctrl" },
+       { .compatible = "mscc,ocelot-pinctrl", .data = &ocelot_desc },
+       { .compatible = "mscc,jaguar2-pinctrl", .data = &jaguar2_desc },
        {},
 };
 
@@ -567,11 +776,18 @@ static int ocelot_pinctrl_probe(struct platform_device *pdev)
        struct ocelot_pinctrl *info;
        void __iomem *base;
        int ret;
+       struct regmap_config regmap_config = {
+               .reg_bits = 32,
+               .val_bits = 32,
+               .reg_stride = 4,
+       };
 
        info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
        if (!info)
                return -ENOMEM;
 
+       info->desc = (struct pinctrl_desc *)device_get_match_data(dev);
+
        base = devm_ioremap_resource(dev,
                        platform_get_resource(pdev, IORESOURCE_MEM, 0));
        if (IS_ERR(base)) {
@@ -579,8 +795,10 @@ static int ocelot_pinctrl_probe(struct platform_device *pdev)
                return PTR_ERR(base);
        }
 
-       info->map = devm_regmap_init_mmio(dev, base,
-                                         &ocelot_pinctrl_regmap_config);
+       info->stride = 1 + (info->desc->npins - 1) / 32;
+       regmap_config.max_register = OCELOT_GPIO_SD_MAP * info->stride + 15 * 4;
+
+       info->map = devm_regmap_init_mmio(dev, base, &regmap_config);
        if (IS_ERR(info->map)) {
                dev_err(dev, "Failed to create regmap\n");
                return PTR_ERR(info->map);
index 95e4a06de01918159253610afa9532fec27453e8..16bf21bf69a28be67f6963d5e7d634dfb1e75cf2 100644 (file)
@@ -307,6 +307,12 @@ struct rockchip_mux_recalced_data {
        u8 mask;
 };
 
+enum rockchip_mux_route_location {
+       ROCKCHIP_ROUTE_SAME = 0,
+       ROCKCHIP_ROUTE_PMU,
+       ROCKCHIP_ROUTE_GRF,
+};
+
 /**
  * struct rockchip_mux_recalced_data: represent a pin iomux data.
  * @bank_num: bank number.
@@ -319,6 +325,7 @@ struct rockchip_mux_route_data {
        u8 bank_num;
        u8 pin;
        u8 func;
+       enum rockchip_mux_route_location route_location;
        u32 route_offset;
        u32 route_val;
 };
@@ -815,6 +822,26 @@ static struct rockchip_mux_route_data rk3128_mux_route_data[] = {
        },
 };
 
+static struct rockchip_mux_route_data rk3188_mux_route_data[] = {
+       {
+               /* non-iomuxed emmc/flash pins on flash-dqs */
+               .bank_num = 0,
+               .pin = 24,
+               .func = 1,
+               .route_location = ROCKCHIP_ROUTE_GRF,
+               .route_offset = 0xa0,
+               .route_val = BIT(16 + 11),
+       }, {
+               /* non-iomuxed emmc/flash pins on emmc-clk */
+               .bank_num = 0,
+               .pin = 24,
+               .func = 2,
+               .route_location = ROCKCHIP_ROUTE_GRF,
+               .route_offset = 0xa0,
+               .route_val = BIT(16 + 11) | BIT(11),
+       },
+};
+
 static struct rockchip_mux_route_data rk3228_mux_route_data[] = {
        {
                /* pwm0-0 */
@@ -1091,7 +1118,7 @@ static struct rockchip_mux_route_data rk3399_mux_route_data[] = {
 };
 
 static bool rockchip_get_mux_route(struct rockchip_pin_bank *bank, int pin,
-                                  int mux, u32 *reg, u32 *value)
+                                  int mux, u32 *loc, u32 *reg, u32 *value)
 {
        struct rockchip_pinctrl *info = bank->drvdata;
        struct rockchip_pin_ctrl *ctrl = info->ctrl;
@@ -1108,6 +1135,7 @@ static bool rockchip_get_mux_route(struct rockchip_pin_bank *bank, int pin,
        if (i >= ctrl->niomux_routes)
                return false;
 
+       *loc = data->route_location;
        *reg = data->route_offset;
        *value = data->route_val;
 
@@ -1210,7 +1238,7 @@ static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
        struct regmap *regmap;
        int reg, ret, mask, mux_type;
        u8 bit;
-       u32 data, rmask, route_reg, route_val;
+       u32 data, rmask, route_location, route_reg, route_val;
 
        ret = rockchip_verify_mux(bank, pin, mux);
        if (ret < 0)
@@ -1247,9 +1275,21 @@ static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
                rockchip_get_recalced_mux(bank, pin, &reg, &bit, &mask);
 
        if (bank->route_mask & BIT(pin)) {
-               if (rockchip_get_mux_route(bank, pin, mux, &route_reg,
-                                          &route_val)) {
-                       ret = regmap_write(regmap, route_reg, route_val);
+               if (rockchip_get_mux_route(bank, pin, mux, &route_location,
+                                          &route_reg, &route_val)) {
+                       struct regmap *route_regmap = regmap;
+
+                       /* handle special locations */
+                       switch (route_location) {
+                       case ROCKCHIP_ROUTE_PMU:
+                               route_regmap = info->regmap_pmu;
+                               break;
+                       case ROCKCHIP_ROUTE_GRF:
+                               route_regmap = info->regmap_base;
+                               break;
+                       }
+
+                       ret = regmap_write(route_regmap, route_reg, route_val);
                        if (ret)
                                return ret;
                }
@@ -3606,6 +3646,8 @@ static struct rockchip_pin_ctrl rk3188_pin_ctrl = {
                .label                  = "RK3188-GPIO",
                .type                   = RK3188,
                .grf_mux_offset         = 0x60,
+               .iomux_routes           = rk3188_mux_route_data,
+               .niomux_routes          = ARRAY_SIZE(rk3188_mux_route_data),
                .pull_calc_reg          = rk3188_calc_pull_reg_and_bit,
 };
 
index 14eb576c04a2b32216d8fb82775022ed0c82037d..9cfe9d0520acaf619df859f82e79f66f860f3cee 100644 (file)
@@ -1225,6 +1225,9 @@ static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
        chip->base      = -1;
        chip->label     = devm_kasprintf(rza1_pctl->dev, GFP_KERNEL, "%pOFn",
                                         np);
+       if (!chip->label)
+               return -ENOMEM;
+
        chip->ngpio     = of_args.args[2];
        chip->of_node   = np;
        chip->parent    = rza1_pctl->dev;
@@ -1326,6 +1329,8 @@ static int rza1_pinctrl_register(struct rza1_pinctrl *rza1_pctl)
                pins[i].number = i;
                pins[i].name = devm_kasprintf(rza1_pctl->dev, GFP_KERNEL,
                                              "P%u-%u", port, pin);
+               if (!pins[i].name)
+                       return -ENOMEM;
 
                if (i % RZA1_PINS_PER_PORT == 0) {
                        /*
diff --git a/drivers/pinctrl/pinctrl-rza2.c b/drivers/pinctrl/pinctrl-rza2.c
new file mode 100644 (file)
index 0000000..5b951c7
--- /dev/null
@@ -0,0 +1,519 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Combined GPIO and pin controller support for Renesas RZ/A2 (R7S9210) SoC
+ *
+ * Copyright (C) 2018 Chris Brandt
+ */
+
+/*
+ * This pin controller/gpio combined driver supports Renesas devices of RZ/A2
+ * family.
+ */
+
+#include <linux/bitops.h>
+#include <linux/gpio.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/pinmux.h>
+
+#include "core.h"
+#include "pinmux.h"
+
+#define DRIVER_NAME            "pinctrl-rza2"
+
+#define RZA2_PINS_PER_PORT     8
+#define RZA2_PIN_ID_TO_PORT(id)        ((id) / RZA2_PINS_PER_PORT)
+#define RZA2_PIN_ID_TO_PIN(id) ((id) % RZA2_PINS_PER_PORT)
+
+/*
+ * 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_OFFS          16
+#define MUX_FUNC(pinconf)      ((pinconf & MUX_FUNC_MASK) >> MUX_FUNC_OFFS)
+
+static const char port_names[] = "0123456789ABCDEFGHJKLM";
+
+struct rza2_pinctrl_priv {
+       struct device *dev;
+       void __iomem *base;
+
+       struct pinctrl_pin_desc *pins;
+       struct pinctrl_desc desc;
+       struct pinctrl_dev *pctl;
+       struct pinctrl_gpio_range gpio_range;
+       int npins;
+};
+
+#define RZA2_PDR(port)         (0x0000 + (port) * 2)   /* Direction 16-bit */
+#define RZA2_PODR(port)                (0x0040 + (port))       /* Output Data 8-bit */
+#define RZA2_PIDR(port)                (0x0060 + (port))       /* Input Data 8-bit */
+#define RZA2_PMR(port)         (0x0080 + (port))       /* Mode 8-bit */
+#define RZA2_DSCR(port)                (0x0140 + (port) * 2)   /* Drive 16-bit */
+#define RZA2_PFS(port, pin)    (0x0200 + ((port) * 8) + (pin)) /* Fnct 8-bit */
+
+#define RZA2_PWPR              0x02ff  /* Write Protect 8-bit */
+#define RZA2_PFENET            0x0820  /* Ethernet Pins 8-bit */
+#define RZA2_PPOC              0x0900  /* Dedicated Pins 32-bit */
+#define RZA2_PHMOMO            0x0980  /* Peripheral Pins 32-bit */
+#define RZA2_PCKIO             0x09d0  /* CKIO Drive 8-bit */
+
+#define RZA2_PDR_INPUT         0x02
+#define RZA2_PDR_OUTPUT                0x03
+#define RZA2_PDR_MASK          0x03
+
+#define PWPR_B0WI              BIT(7)  /* Bit Write Disable */
+#define PWPR_PFSWE             BIT(6)  /* PFS Register Write Enable */
+#define PFS_ISEL               BIT(6)  /* Interrupt Select */
+
+static void rza2_set_pin_function(void __iomem *pfc_base, u8 port, u8 pin,
+                                 u8 func)
+{
+       u16 mask16;
+       u16 reg16;
+       u8 reg8;
+
+       /* Set pin to 'Non-use (Hi-z input protection)'  */
+       reg16 = readw(pfc_base + RZA2_PDR(port));
+       mask16 = RZA2_PDR_MASK << (pin * 2);
+       reg16 &= ~mask16;
+       writew(reg16, pfc_base + RZA2_PDR(port));
+
+       /* Temporarily switch to GPIO */
+       reg8 = readb(pfc_base + RZA2_PMR(port));
+       reg8 &= ~BIT(pin);
+       writeb(reg8, pfc_base + RZA2_PMR(port));
+
+       /* PFS Register Write Protect : OFF */
+       writeb(0x00, pfc_base + RZA2_PWPR);             /* B0WI=0, PFSWE=0 */
+       writeb(PWPR_PFSWE, pfc_base + RZA2_PWPR);       /* B0WI=0, PFSWE=1 */
+
+       /* Set Pin function (interrupt disabled, ISEL=0) */
+       writeb(func, pfc_base + RZA2_PFS(port, pin));
+
+       /* PFS Register Write Protect : ON */
+       writeb(0x00, pfc_base + RZA2_PWPR);     /* B0WI=0, PFSWE=0 */
+       writeb(0x80, pfc_base + RZA2_PWPR);     /* B0WI=1, PFSWE=0 */
+
+       /* Port Mode  : Peripheral module pin functions */
+       reg8 = readb(pfc_base + RZA2_PMR(port));
+       reg8 |= BIT(pin);
+       writeb(reg8, pfc_base + RZA2_PMR(port));
+}
+
+static void rza2_pin_to_gpio(void __iomem *pfc_base, unsigned int offset,
+                            u8 dir)
+{
+       u8 port = RZA2_PIN_ID_TO_PORT(offset);
+       u8 pin = RZA2_PIN_ID_TO_PIN(offset);
+       u16 mask16;
+       u16 reg16;
+
+       reg16 = readw(pfc_base + RZA2_PDR(port));
+       mask16 = RZA2_PDR_MASK << (pin * 2);
+       reg16 &= ~mask16;
+
+       if (dir == GPIOF_DIR_IN)
+               reg16 |= RZA2_PDR_INPUT << (pin * 2);   /* pin as input */
+       else
+               reg16 |= RZA2_PDR_OUTPUT << (pin * 2);  /* pin as output */
+
+       writew(reg16, pfc_base + RZA2_PDR(port));
+}
+
+static int rza2_chip_get_direction(struct gpio_chip *chip, unsigned int offset)
+{
+       struct rza2_pinctrl_priv *priv = gpiochip_get_data(chip);
+       u8 port = RZA2_PIN_ID_TO_PORT(offset);
+       u8 pin = RZA2_PIN_ID_TO_PIN(offset);
+       u16 reg16;
+
+       reg16 = readw(priv->base + RZA2_PDR(port));
+       reg16 = (reg16 >> (pin * 2)) & RZA2_PDR_MASK;
+
+       if (reg16 == RZA2_PDR_OUTPUT)
+               return GPIOF_DIR_OUT;
+
+       if (reg16 == RZA2_PDR_INPUT)
+               return GPIOF_DIR_IN;
+
+       /*
+        * This GPIO controller has a default Hi-Z state that is not input or
+        * output, so force the pin to input now.
+        */
+       rza2_pin_to_gpio(priv->base, offset, GPIOF_DIR_IN);
+
+       return GPIOF_DIR_IN;
+}
+
+static int rza2_chip_direction_input(struct gpio_chip *chip,
+                                    unsigned int offset)
+{
+       struct rza2_pinctrl_priv *priv = gpiochip_get_data(chip);
+
+       rza2_pin_to_gpio(priv->base, offset, GPIOF_DIR_IN);
+
+       return 0;
+}
+
+static int rza2_chip_get(struct gpio_chip *chip, unsigned int offset)
+{
+       struct rza2_pinctrl_priv *priv = gpiochip_get_data(chip);
+       u8 port = RZA2_PIN_ID_TO_PORT(offset);
+       u8 pin = RZA2_PIN_ID_TO_PIN(offset);
+
+       return !!(readb(priv->base + RZA2_PIDR(port)) & BIT(pin));
+}
+
+static void rza2_chip_set(struct gpio_chip *chip, unsigned int offset,
+                         int value)
+{
+       struct rza2_pinctrl_priv *priv = gpiochip_get_data(chip);
+       u8 port = RZA2_PIN_ID_TO_PORT(offset);
+       u8 pin = RZA2_PIN_ID_TO_PIN(offset);
+       u8 new_value;
+
+       new_value = readb(priv->base + RZA2_PODR(port));
+
+       if (value)
+               new_value |= BIT(pin);
+       else
+               new_value &= ~BIT(pin);
+
+       writeb(new_value, priv->base + RZA2_PODR(port));
+}
+
+static int rza2_chip_direction_output(struct gpio_chip *chip,
+                                     unsigned int offset, int val)
+{
+       struct rza2_pinctrl_priv *priv = gpiochip_get_data(chip);
+
+       rza2_chip_set(chip, offset, val);
+       rza2_pin_to_gpio(priv->base, offset, GPIOF_DIR_OUT);
+
+       return 0;
+}
+
+static const char * const rza2_gpio_names[] = {
+       "P0_0", "P0_1", "P0_2", "P0_3", "P0_4", "P0_5", "P0_6", "P0_7",
+       "P1_0", "P1_1", "P1_2", "P1_3", "P1_4", "P1_5", "P1_6", "P1_7",
+       "P2_0", "P2_1", "P2_2", "P2_3", "P2_4", "P2_5", "P2_6", "P2_7",
+       "P3_0", "P3_1", "P3_2", "P3_3", "P3_4", "P3_5", "P3_6", "P3_7",
+       "P4_0", "P4_1", "P4_2", "P4_3", "P4_4", "P4_5", "P4_6", "P4_7",
+       "P5_0", "P5_1", "P5_2", "P5_3", "P5_4", "P5_5", "P5_6", "P5_7",
+       "P6_0", "P6_1", "P6_2", "P6_3", "P6_4", "P6_5", "P6_6", "P6_7",
+       "P7_0", "P7_1", "P7_2", "P7_3", "P7_4", "P7_5", "P7_6", "P7_7",
+       "P8_0", "P8_1", "P8_2", "P8_3", "P8_4", "P8_5", "P8_6", "P8_7",
+       "P9_0", "P9_1", "P9_2", "P9_3", "P9_4", "P9_5", "P9_6", "P9_7",
+       "PA_0", "PA_1", "PA_2", "PA_3", "PA_4", "PA_5", "PA_6", "PA_7",
+       "PB_0", "PB_1", "PB_2", "PB_3", "PB_4", "PB_5", "PB_6", "PB_7",
+       "PC_0", "PC_1", "PC_2", "PC_3", "PC_4", "PC_5", "PC_6", "PC_7",
+       "PD_0", "PD_1", "PD_2", "PD_3", "PD_4", "PD_5", "PD_6", "PD_7",
+       "PE_0", "PE_1", "PE_2", "PE_3", "PE_4", "PE_5", "PE_6", "PE_7",
+       "PF_0", "PF_1", "PF_2", "PF_3", "P0_4", "PF_5", "PF_6", "PF_7",
+       "PG_0", "PG_1", "PG_2", "P0_3", "PG_4", "PG_5", "PG_6", "PG_7",
+       "PH_0", "PH_1", "PH_2", "PH_3", "PH_4", "PH_5", "PH_6", "PH_7",
+       /* port I does not exist */
+       "PJ_0", "PJ_1", "PJ_2", "PJ_3", "PJ_4", "PJ_5", "PJ_6", "PJ_7",
+       "PK_0", "PK_1", "PK_2", "PK_3", "PK_4", "PK_5", "PK_6", "PK_7",
+       "PL_0", "PL_1", "PL_2", "PL_3", "PL_4", "PL_5", "PL_6", "PL_7",
+       "PM_0", "PM_1", "PM_2", "PM_3", "PM_4", "PM_5", "PM_6", "PM_7",
+};
+
+static struct gpio_chip chip = {
+       .names = rza2_gpio_names,
+       .base = -1,
+       .get_direction = rza2_chip_get_direction,
+       .direction_input = rza2_chip_direction_input,
+       .direction_output = rza2_chip_direction_output,
+       .get = rza2_chip_get,
+       .set = rza2_chip_set,
+};
+
+static int rza2_gpio_register(struct rza2_pinctrl_priv *priv)
+{
+       struct device_node *np = priv->dev->of_node;
+       struct of_phandle_args of_args;
+       int ret;
+
+       chip.label = devm_kasprintf(priv->dev, GFP_KERNEL, "%pOFn", np);
+       chip.of_node = np;
+       chip.parent = priv->dev;
+       chip.ngpio = priv->npins;
+
+       ret = of_parse_phandle_with_fixed_args(np, "gpio-ranges", 3, 0,
+                                              &of_args);
+       if (ret) {
+               dev_err(priv->dev, "Unable to parse gpio-ranges\n");
+               return ret;
+       }
+
+       if ((of_args.args[0] != 0) ||
+           (of_args.args[1] != 0) ||
+           (of_args.args[2] != priv->npins)) {
+               dev_err(priv->dev, "gpio-ranges does not match selected SOC\n");
+               return -EINVAL;
+       }
+       priv->gpio_range.id = 0;
+       priv->gpio_range.pin_base = priv->gpio_range.base = 0;
+       priv->gpio_range.npins = priv->npins;
+       priv->gpio_range.name = chip.label;
+       priv->gpio_range.gc = &chip;
+
+       /* Register our gpio chip with gpiolib */
+       ret = devm_gpiochip_add_data(priv->dev, &chip, priv);
+       if (ret)
+               return ret;
+
+       /* Register pin range with pinctrl core */
+       pinctrl_add_gpio_range(priv->pctl, &priv->gpio_range);
+
+       dev_dbg(priv->dev, "Registered gpio controller\n");
+
+       return 0;
+}
+
+static int rza2_pinctrl_register(struct rza2_pinctrl_priv *priv)
+{
+       struct pinctrl_pin_desc *pins;
+       unsigned int i;
+       int ret;
+
+       pins = devm_kcalloc(priv->dev, priv->npins, sizeof(*pins), GFP_KERNEL);
+       if (!pins)
+               return -ENOMEM;
+
+       priv->pins = pins;
+       priv->desc.pins = pins;
+       priv->desc.npins = priv->npins;
+
+       for (i = 0; i < priv->npins; i++) {
+               pins[i].number = i;
+               pins[i].name = rza2_gpio_names[i];
+       }
+
+       ret = devm_pinctrl_register_and_init(priv->dev, &priv->desc, priv,
+                                            &priv->pctl);
+       if (ret) {
+               dev_err(priv->dev, "pinctrl registration failed\n");
+               return ret;
+       }
+
+       ret = pinctrl_enable(priv->pctl);
+       if (ret) {
+               dev_err(priv->dev, "pinctrl enable failed\n");
+               return ret;
+       }
+
+       ret = rza2_gpio_register(priv);
+       if (ret) {
+               dev_err(priv->dev, "GPIO registration failed\n");
+               return ret;
+       }
+
+       return 0;
+}
+
+/*
+ * For each DT node, create a single pin mapping. That pin mapping will only
+ * contain a single group of pins, and that group of pins will only have a
+ * single function that can be selected.
+ */
+static int rza2_dt_node_to_map(struct pinctrl_dev *pctldev,
+                              struct device_node *np,
+                              struct pinctrl_map **map,
+                              unsigned int *num_maps)
+{
+       struct rza2_pinctrl_priv *priv = pinctrl_dev_get_drvdata(pctldev);
+       unsigned int *pins, *psel_val;
+       int i, ret, npins, gsel, fsel;
+       struct property *of_pins;
+       const char **pin_fn;
+
+       /* Find out how many pins to map */
+       of_pins = of_find_property(np, "pinmux", NULL);
+       if (!of_pins) {
+               dev_info(priv->dev, "Missing pinmux property\n");
+               return -ENOENT;
+       }
+       npins = of_pins->length / sizeof(u32);
+
+       pins = devm_kcalloc(priv->dev, npins, sizeof(*pins), GFP_KERNEL);
+       psel_val = devm_kcalloc(priv->dev, npins, sizeof(*psel_val),
+                               GFP_KERNEL);
+       pin_fn = devm_kzalloc(priv->dev, sizeof(*pin_fn), GFP_KERNEL);
+       if (!pins || !psel_val || !pin_fn)
+               return -ENOMEM;
+
+       /* Collect pin locations and mux settings from DT properties */
+       for (i = 0; i < npins; ++i) {
+               u32 value;
+
+               ret = of_property_read_u32_index(np, "pinmux", i, &value);
+               if (ret)
+                       return ret;
+               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, npins, NULL);
+       if (gsel < 0)
+               return gsel;
+
+       /*
+        * 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;
+       }
+
+       dev_dbg(priv->dev, "Parsed %pOF with %d pins\n", np, npins);
+
+       /* Create map where to retrieve function and mux settings from */
+       *num_maps = 0;
+       *map = kzalloc(sizeof(**map), GFP_KERNEL);
+       if (!*map) {
+               ret = -ENOMEM;
+               goto remove_function;
+       }
+
+       (*map)->type = PIN_MAP_TYPE_MUX_GROUP;
+       (*map)->data.mux.group = np->name;
+       (*map)->data.mux.function = np->name;
+       *num_maps = 1;
+
+       return 0;
+
+remove_function:
+       pinmux_generic_remove_function(pctldev, fsel);
+
+remove_group:
+       pinctrl_generic_remove_group(pctldev, gsel);
+
+       dev_err(priv->dev, "Unable to parse DT node %s\n", np->name);
+
+       return ret;
+}
+
+static void rza2_dt_free_map(struct pinctrl_dev *pctldev,
+                            struct pinctrl_map *map, unsigned int num_maps)
+{
+       kfree(map);
+}
+
+static const struct pinctrl_ops rza2_pinctrl_ops = {
+       .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         = rza2_dt_node_to_map,
+       .dt_free_map            = rza2_dt_free_map,
+};
+
+static int rza2_set_mux(struct pinctrl_dev *pctldev, unsigned int selector,
+                       unsigned int group)
+{
+       struct rza2_pinctrl_priv *priv = pinctrl_dev_get_drvdata(pctldev);
+       struct function_desc *func;
+       unsigned int i, *psel_val;
+       struct group_desc *grp;
+
+       grp = pinctrl_generic_get_group(pctldev, group);
+       if (!grp)
+               return -EINVAL;
+
+       func = pinmux_generic_get_function(pctldev, selector);
+       if (!func)
+               return -EINVAL;
+
+       psel_val = func->data;
+
+       for (i = 0; i < grp->num_pins; ++i) {
+               dev_dbg(priv->dev, "Setting P%c_%d to PSEL=%d\n",
+                       port_names[RZA2_PIN_ID_TO_PORT(grp->pins[i])],
+                       RZA2_PIN_ID_TO_PIN(grp->pins[i]),
+                       psel_val[i]);
+               rza2_set_pin_function(
+                       priv->base,
+                       RZA2_PIN_ID_TO_PORT(grp->pins[i]),
+                       RZA2_PIN_ID_TO_PIN(grp->pins[i]),
+                       psel_val[i]);
+       }
+
+       return 0;
+}
+
+static const struct pinmux_ops rza2_pinmux_ops = {
+       .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                = rza2_set_mux,
+       .strict                 = true,
+};
+
+static int rza2_pinctrl_probe(struct platform_device *pdev)
+{
+       struct rza2_pinctrl_priv *priv;
+       struct resource *res;
+       int ret;
+
+       priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+       if (!priv)
+               return -ENOMEM;
+
+       priv->dev = &pdev->dev;
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       priv->base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(priv->base))
+               return PTR_ERR(priv->base);
+
+       platform_set_drvdata(pdev, priv);
+
+       priv->npins = (int)(uintptr_t)of_device_get_match_data(&pdev->dev) *
+                     RZA2_PINS_PER_PORT;
+
+       priv->desc.name         = DRIVER_NAME;
+       priv->desc.pctlops      = &rza2_pinctrl_ops;
+       priv->desc.pmxops       = &rza2_pinmux_ops;
+       priv->desc.owner        = THIS_MODULE;
+
+       ret = rza2_pinctrl_register(priv);
+       if (ret)
+               return ret;
+
+       dev_info(&pdev->dev, "Registered ports P0 - P%c\n",
+                port_names[priv->desc.npins / RZA2_PINS_PER_PORT - 1]);
+
+       return 0;
+}
+
+static const struct of_device_id rza2_pinctrl_of_match[] = {
+       { .compatible = "renesas,r7s9210-pinctrl", .data = (void *)22, },
+       { /* sentinel */ }
+};
+
+static struct platform_driver rza2_pinctrl_driver = {
+       .driver = {
+               .name = DRIVER_NAME,
+               .of_match_table = rza2_pinctrl_of_match,
+       },
+       .probe = rza2_pinctrl_probe,
+};
+
+static int __init rza2_pinctrl_init(void)
+{
+       return platform_driver_register(&rza2_pinctrl_driver);
+}
+core_initcall(rza2_pinctrl_init);
+
+MODULE_AUTHOR("Chris Brandt <chris.brandt@renesas.com>");
+MODULE_DESCRIPTION("Pin and gpio controller driver for RZ/A2 SoC");
+MODULE_LICENSE("GPL v2");
index 57886dcff53d42c482af5764c326c77e01b0257d..cc0e5aa9128a141711582493e0d4d582851540f7 100644 (file)
@@ -112,7 +112,7 @@ struct rzn1_pinctrl {
        struct rzn1_pinctrl_regs __iomem *lev2;
        u32 lev1_protect_phys;
        u32 lev2_protect_phys;
-       u32 mdio_func[2];
+       int mdio_func[2];
 
        struct rzn1_pin_group *groups;
        unsigned int ngroups;
@@ -810,8 +810,8 @@ static int rzn1_pinctrl_probe_dt(struct platform_device *pdev,
        struct device_node *np = pdev->dev.of_node;
        struct device_node *child;
        unsigned int maxgroups = 0;
-       unsigned int nfuncs = 0;
        unsigned int i = 0;
+       int nfuncs = 0;
        int ret;
 
        nfuncs = of_get_child_count(np);
index cbf58a10113df861fbc12335e68c2158c492a60b..4d87d75b9c6eac47ca1a38f8475ee8fc1af78016 100644 (file)
@@ -1166,7 +1166,6 @@ static int sx150x_probe(struct i2c_client *client,
        }
 
        /* Register GPIO controller */
-       pctl->gpio.label = devm_kstrdup(dev, client->name, GFP_KERNEL);
        pctl->gpio.base = -1;
        pctl->gpio.ngpio = pctl->data->npins;
        pctl->gpio.get_direction = sx150x_gpio_get_direction;
@@ -1180,6 +1179,10 @@ static int sx150x_probe(struct i2c_client *client,
        pctl->gpio.of_node = dev->of_node;
 #endif
        pctl->gpio.can_sleep = true;
+       pctl->gpio.label = devm_kstrdup(dev, client->name, GFP_KERNEL);
+       if (!pctl->gpio.label)
+               return -ENOMEM;
+
        /*
         * Setting multiple pins is not safe when all pins are not
         * handled by the same regmap register. The oscio pin (present
@@ -1200,13 +1203,15 @@ static int sx150x_probe(struct i2c_client *client,
 
        /* Add Interrupt support if an irq is specified */
        if (client->irq > 0) {
-               pctl->irq_chip.name = devm_kstrdup(dev, client->name,
-                                                  GFP_KERNEL);
                pctl->irq_chip.irq_mask = sx150x_irq_mask;
                pctl->irq_chip.irq_unmask = sx150x_irq_unmask;
                pctl->irq_chip.irq_set_type = sx150x_irq_set_type;
                pctl->irq_chip.irq_bus_lock = sx150x_irq_bus_lock;
                pctl->irq_chip.irq_bus_sync_unlock = sx150x_irq_bus_sync_unlock;
+               pctl->irq_chip.name = devm_kstrdup(dev, client->name,
+                                                  GFP_KERNEL);
+               if (!pctl->irq_chip.name)
+                       return -ENOMEM;
 
                pctl->irq.masked = ~0;
                pctl->irq.sense = 0;
index 93f8bd04e7fe69ab92bb48c2715aa24371d315c3..ae74b260b014bddd2700b4edca00f44c99d3e84a 100644 (file)
@@ -1746,14 +1746,6 @@ static int pinmux_xway_probe(struct platform_device *pdev)
        }
        xway_pctrl_desc.pins = xway_info.pads;
 
-       /* register the gpio chip */
-       xway_chip.parent = &pdev->dev;
-       ret = devm_gpiochip_add_data(&pdev->dev, &xway_chip, NULL);
-       if (ret) {
-               dev_err(&pdev->dev, "Failed to register gpio chip\n");
-               return ret;
-       }
-
        /* setup the data needed by pinctrl */
        xway_pctrl_desc.name    = dev_name(&pdev->dev);
        xway_pctrl_desc.npins   = xway_chip.ngpio;
@@ -1775,10 +1767,33 @@ static int pinmux_xway_probe(struct platform_device *pdev)
                return ret;
        }
 
-       /* finish with registering the gpio range in pinctrl */
-       xway_gpio_range.npins = xway_chip.ngpio;
-       xway_gpio_range.base = xway_chip.base;
-       pinctrl_add_gpio_range(xway_info.pctrl, &xway_gpio_range);
+       /* register the gpio chip */
+       xway_chip.parent = &pdev->dev;
+       xway_chip.owner = THIS_MODULE;
+       xway_chip.of_node = pdev->dev.of_node;
+       ret = devm_gpiochip_add_data(&pdev->dev, &xway_chip, NULL);
+       if (ret) {
+               dev_err(&pdev->dev, "Failed to register gpio chip\n");
+               return ret;
+       }
+
+       /*
+        * For DeviceTree-supported systems, the gpio core checks the
+        * pinctrl's device node for the "gpio-ranges" property.
+        * If it is present, it takes care of adding the pin ranges
+        * for the driver. In this case the driver can skip ahead.
+        *
+        * In order to remain compatible with older, existing DeviceTree
+        * files which don't set the "gpio-ranges" property or systems that
+        * utilize ACPI the driver has to call gpiochip_add_pin_range().
+        */
+       if (!of_property_read_bool(pdev->dev.of_node, "gpio-ranges")) {
+               /* finish with registering the gpio range in pinctrl */
+               xway_gpio_range.npins = xway_chip.ngpio;
+               xway_gpio_range.base = xway_chip.base;
+               pinctrl_add_gpio_range(xway_info.pctrl, &xway_gpio_range);
+       }
+
        dev_info(&pdev->dev, "Init done\n");
        return 0;
 }
index a0daf27042bd0f95555f68ee01722ec0c1260ab1..90fd37e8207bfbabd39b53e45379719c311bad8a 100644 (file)
@@ -971,15 +971,12 @@ enum zynq_io_standards {
        zynq_iostd_max
 };
 
-/**
- * enum zynq_pin_config_param - possible pin configuration parameters
- * @PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to
+/*
+ * PIN_CONFIG_IOSTANDARD: if the pin can select an IO standard, the argument to
  *     this parameter (on a custom format) tells the driver which alternative
  *     IO standard to use.
  */
-enum zynq_pin_config_param {
-       PIN_CONFIG_IOSTANDARD = PIN_CONFIG_END + 1,
-};
+#define PIN_CONFIG_IOSTANDARD          (PIN_CONFIG_END + 1)
 
 static const struct pinconf_generic_params zynq_dt_params[] = {
        {"io-standard", PIN_CONFIG_IOSTANDARD, zynq_iostd_lvcmos18},
index 5780442c068b8743479d8c05eb6cdfb23365c8fe..4d0cc1889dd9dcb11d88f6f7647264e7ea632e99 100644 (file)
@@ -644,37 +644,16 @@ void pinmux_show_setting(struct seq_file *s,
                   setting->data.mux.func);
 }
 
-static int pinmux_functions_open(struct inode *inode, struct file *file)
-{
-       return single_open(file, pinmux_functions_show, inode->i_private);
-}
-
-static int pinmux_pins_open(struct inode *inode, struct file *file)
-{
-       return single_open(file, pinmux_pins_show, inode->i_private);
-}
-
-static const struct file_operations pinmux_functions_ops = {
-       .open           = pinmux_functions_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
-};
-
-static const struct file_operations pinmux_pins_ops = {
-       .open           = pinmux_pins_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
-};
+DEFINE_SHOW_ATTRIBUTE(pinmux_functions);
+DEFINE_SHOW_ATTRIBUTE(pinmux_pins);
 
 void pinmux_init_device_debugfs(struct dentry *devroot,
                         struct pinctrl_dev *pctldev)
 {
        debugfs_create_file("pinmux-functions", S_IFREG | S_IRUGO,
-                           devroot, pctldev, &pinmux_functions_ops);
+                           devroot, pctldev, &pinmux_functions_fops);
        debugfs_create_file("pinmux-pins", S_IFREG | S_IRUGO,
-                           devroot, pctldev, &pinmux_pins_ops);
+                           devroot, pctldev, &pinmux_pins_fops);
 }
 
 #endif /* CONFIG_DEBUG_FS */
index 7c7d083e2c0dcd6859f1e5ff3170be1d6bc3a130..ee8119879c4c952b4f01aec3f4684bb6d7e1dc69 100644 (file)
@@ -1072,6 +1072,25 @@ static void msm_pinctrl_setup_pm_reset(struct msm_pinctrl *pctrl)
                }
 }
 
+static __maybe_unused int msm_pinctrl_suspend(struct device *dev)
+{
+       struct msm_pinctrl *pctrl = dev_get_drvdata(dev);
+
+       return pinctrl_force_sleep(pctrl->pctrl);
+}
+
+static __maybe_unused int msm_pinctrl_resume(struct device *dev)
+{
+       struct msm_pinctrl *pctrl = dev_get_drvdata(dev);
+
+       return pinctrl_force_default(pctrl->pctrl);
+}
+
+SIMPLE_DEV_PM_OPS(msm_pinctrl_dev_pm_ops, msm_pinctrl_suspend,
+                 msm_pinctrl_resume);
+
+EXPORT_SYMBOL(msm_pinctrl_dev_pm_ops);
+
 int msm_pinctrl_probe(struct platform_device *pdev,
                      const struct msm_pinctrl_soc_data *soc_data)
 {
index 29172fdf5882c1b04ca7224a6738041e8c5d2425..c12048e54a6f01439eef9fa88bf061538d4ba2cf 100644 (file)
@@ -123,6 +123,8 @@ struct msm_pinctrl_soc_data {
        unsigned int ntiles;
 };
 
+extern const struct dev_pm_ops msm_pinctrl_dev_pm_ops;
+
 int msm_pinctrl_probe(struct platform_device *pdev,
                      const struct msm_pinctrl_soc_data *soc_data);
 int msm_pinctrl_remove(struct platform_device *pdev);
index 2ab7a88857579b2c2b98c61475c57af3870fed70..c97f20fca5fd315701da90b1b4bb8d7b8269c47a 100644 (file)
@@ -1300,6 +1300,7 @@ static const struct of_device_id sdm845_pinctrl_of_match[] = {
 static struct platform_driver sdm845_pinctrl_driver = {
        .driver = {
                .name = "sdm845-pinctrl",
+               .pm = &msm_pinctrl_dev_pm_ops,
                .of_match_table = sdm845_pinctrl_of_match,
        },
        .probe = sdm845_pinctrl_probe,
index a29efbe08f487fdf9702cb3029dcac0fb2463069..4458d44dfcf62e7d12a1031edea0c22c7535dfea 100644 (file)
@@ -1028,10 +1028,23 @@ static int pmic_gpio_probe(struct platform_device *pdev)
                return ret;
        }
 
-       ret = gpiochip_add_pin_range(&state->chip, dev_name(dev), 0, 0, npins);
-       if (ret) {
-               dev_err(dev, "failed to add pin range\n");
-               goto err_range;
+       /*
+        * For DeviceTree-supported systems, the gpio core checks the
+        * pinctrl's device node for the "gpio-ranges" property.
+        * If it is present, it takes care of adding the pin ranges
+        * for the driver. In this case the driver can skip ahead.
+        *
+        * In order to remain compatible with older, existing DeviceTree
+        * files which don't set the "gpio-ranges" property or systems that
+        * utilize ACPI the driver has to call gpiochip_add_pin_range().
+        */
+       if (!of_property_read_bool(dev->of_node, "gpio-ranges")) {
+               ret = gpiochip_add_pin_range(&state->chip, dev_name(dev), 0, 0,
+                                            npins);
+               if (ret) {
+                       dev_err(dev, "failed to add pin range\n");
+                       goto err_range;
+               }
        }
 
        return 0;
@@ -1055,6 +1068,7 @@ static const struct of_device_id pmic_gpio_of_match[] = {
        { .compatible = "qcom,pm8994-gpio" },   /* 22 GPIO's */
        { .compatible = "qcom,pmi8994-gpio" },  /* 10 GPIO's */
        { .compatible = "qcom,pma8084-gpio" },  /* 22 GPIO's */
+       { .compatible = "qcom,pms405-gpio" },   /* 12 GPIO's, holes on 1 9 10 */
        { .compatible = "qcom,spmi-gpio" }, /* Generic */
        { },
 };
index 6b30bef829ab586c183f680fb90b1a42761f8a96..ded7d765af2e1fe8aefc72670917f115455bd6c1 100644 (file)
@@ -762,12 +762,23 @@ static int pm8xxx_gpio_probe(struct platform_device *pdev)
                return ret;
        }
 
-       ret = gpiochip_add_pin_range(&pctrl->chip,
-                                    dev_name(pctrl->dev),
-                                    0, 0, pctrl->chip.ngpio);
-       if (ret) {
-               dev_err(pctrl->dev, "failed to add pin range\n");
-               goto unregister_gpiochip;
+       /*
+        * For DeviceTree-supported systems, the gpio core checks the
+        * pinctrl's device node for the "gpio-ranges" property.
+        * If it is present, it takes care of adding the pin ranges
+        * for the driver. In this case the driver can skip ahead.
+        *
+        * In order to remain compatible with older, existing DeviceTree
+        * files which don't set the "gpio-ranges" property or systems that
+        * utilize ACPI the driver has to call gpiochip_add_pin_range().
+        */
+       if (!of_property_read_bool(pctrl->dev->of_node, "gpio-ranges")) {
+               ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev),
+                                            0, 0, pctrl->chip.ngpio);
+               if (ret) {
+                       dev_err(pctrl->dev, "failed to add pin range\n");
+                       goto unregister_gpiochip;
+               }
        }
 
        platform_set_drvdata(pdev, pctrl);
index ee6ee23386066322b7f9857cad3ad2cde4c73b0a..de0477bb469db9018c9b3026902514f101d113f7 100644 (file)
@@ -1071,7 +1071,7 @@ samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d,
                        continue;
                bank = d->pin_banks;
                for (i = 0; i < d->nr_banks; ++i, ++bank) {
-                       if (!strcmp(bank->name, np->name)) {
+                       if (of_node_name_eq(np, bank->name)) {
                                bank->of_node = np;
                                break;
                        }
index a10f7050a74f35ffd4a7e83cf08c1efde452667d..f1cfcc8c6544666238ca7b03bb032b09fc5eafbb 100644 (file)
@@ -221,7 +221,7 @@ static void sh_pfc_write_config_reg(struct sh_pfc *pfc,
 
        dev_dbg(pfc->dev, "write_reg addr = %x, value = 0x%x, field = %u, "
                "r_width = %u, f_width = %u\n",
-               crp->reg, value, field, crp->reg_width, crp->field_width);
+               crp->reg, value, field, crp->reg_width, hweight32(mask));
 
        mask = ~(mask << pos);
        value = value << pos;
index d4f81491996deb5100a49d6033c2d4bc41c0480d..6d761e62c6c8a3628337902c070cc2acaf6159a2 100644 (file)
@@ -1969,7 +1969,7 @@ static const unsigned int gether_gmii_pins[] = {
         */
        185, 186, 187, 188, 189, 190, 191, 192, 174, 161, 204,
        171, 170, 169, 168, 167, 166, 173, 172, 176, 184, 183, 203,
-       205, 163, 206, 207,
+       205, 163, 206, 207, 158,
 };
 static const unsigned int gether_gmii_mux[] = {
        ET_ERXD0_MARK, ET_ERXD1_MARK, ET_ERXD2_MARK, ET_ERXD3_MARK,
@@ -2141,6 +2141,7 @@ static const unsigned int lcd0_data24_1_mux[] = {
        LCD0_D0_MARK, LCD0_D1_MARK, LCD0_D2_MARK, LCD0_D3_MARK,
        LCD0_D4_MARK, LCD0_D5_MARK, LCD0_D6_MARK, LCD0_D7_MARK,
        LCD0_D8_MARK, LCD0_D9_MARK, LCD0_D10_MARK, LCD0_D11_MARK,
+       LCD0_D12_MARK, LCD0_D13_MARK, LCD0_D14_MARK, LCD0_D15_MARK,
        LCD0_D16_MARK, LCD0_D17_MARK, LCD0_D18_PORT163_MARK,
        LCD0_D19_PORT162_MARK, LCD0_D20_PORT161_MARK, LCD0_D21_PORT158_MARK,
        LCD0_D22_PORT160_MARK, LCD0_D23_PORT159_MARK,
index 3d36e5f4ca7b0a784135c1dc13712e0e3737ffaf..4359aeb35dbdf8f3315717ac8febef1e439ee71b 100644 (file)
 #include "sh_pfc.h"
 
 #define CPU_ALL_PORT(fn, sfx)                                          \
-       PORT_GP_23(0, fn, sfx),                                         \
+       PORT_GP_4(0, fn, sfx),                                          \
+       PORT_GP_1(0, 4, fn, sfx),                                       \
+       PORT_GP_CFG_1(0,  5, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0,  6, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0,  7, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0,  8, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0,  9, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 10, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_1(0, 11, fn, sfx),                                      \
+       PORT_GP_1(0, 12, fn, sfx),                                      \
+       PORT_GP_CFG_1(0, 13, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 14, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 15, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 16, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 17, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 18, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 19, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 20, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 21, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(0, 22, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
        PORT_GP_23(1, fn, sfx),                                         \
        PORT_GP_32(2, fn, sfx),                                         \
        PORT_GP_17(3, fn, sfx),                                         \
        PORT_GP_1(3, 27, fn, sfx),                                      \
        PORT_GP_1(3, 28, fn, sfx),                                      \
        PORT_GP_1(3, 29, fn, sfx),                                      \
-       PORT_GP_26(4, fn, sfx),                                         \
+       PORT_GP_14(4, fn, sfx),                                         \
+       PORT_GP_CFG_1(4, 14, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(4, 15, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(4, 16, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(4, 17, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(4, 18, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_CFG_1(4, 19, fn, sfx, SH_PFC_PIN_CFG_IO_VOLTAGE),       \
+       PORT_GP_1(4, 20, fn, sfx),                                      \
+       PORT_GP_1(4, 21, fn, sfx),                                      \
+       PORT_GP_1(4, 22, fn, sfx),                                      \
+       PORT_GP_1(4, 23, fn, sfx),                                      \
+       PORT_GP_1(4, 24, fn, sfx),                                      \
+       PORT_GP_1(4, 25, fn, sfx),                                      \
        PORT_GP_32(5, fn, sfx)
 
 enum {
@@ -1284,6 +1315,229 @@ static const unsigned int du0_disp_pins[] = {
 static const unsigned int du0_disp_mux[] = {
        DU0_DISP_MARK
 };
+static const unsigned int du1_rgb666_pins[] = {
+       /* R[7:2], G[7:2], B[7:2] */
+       RCAR_GP_PIN(4, 9),  RCAR_GP_PIN(4, 8),  RCAR_GP_PIN(4, 7),
+       RCAR_GP_PIN(4, 6),  RCAR_GP_PIN(4, 5),  RCAR_GP_PIN(4, 4),
+       RCAR_GP_PIN(4, 17), RCAR_GP_PIN(4, 16), RCAR_GP_PIN(4, 15),
+       RCAR_GP_PIN(4, 14), RCAR_GP_PIN(4, 13), RCAR_GP_PIN(4, 12),
+       RCAR_GP_PIN(4, 25), RCAR_GP_PIN(4, 24), RCAR_GP_PIN(4, 23),
+       RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 21), RCAR_GP_PIN(4, 20),
+};
+static const unsigned int du1_rgb666_mux[] = {
+       DU1_DR7_MARK, DU1_DR6_MARK, DU1_DR5_MARK, DU1_DR4_MARK,
+       DU1_DR3_MARK, DU1_DR2_MARK,
+       DU1_DG7_MARK, DU1_DG6_MARK, DU1_DG5_MARK, DU1_DG4_MARK,
+       DU1_DG3_MARK, DU1_DG2_MARK,
+       DU1_DB7_MARK, DU1_DB6_MARK, DU1_DB5_MARK, DU1_DB4_MARK,
+       DU1_DB3_MARK, DU1_DB2_MARK,
+};
+static const unsigned int du1_rgb888_pins[] = {
+       /* R[7:0], G[7:0], B[7:0] */
+       RCAR_GP_PIN(4, 9),  RCAR_GP_PIN(4, 8),  RCAR_GP_PIN(4, 7),
+       RCAR_GP_PIN(4, 6),  RCAR_GP_PIN(4, 5),  RCAR_GP_PIN(4, 4),
+       RCAR_GP_PIN(4, 3),  RCAR_GP_PIN(4, 2),
+       RCAR_GP_PIN(4, 17), RCAR_GP_PIN(4, 16), RCAR_GP_PIN(4, 15),
+       RCAR_GP_PIN(4, 14), RCAR_GP_PIN(4, 13), RCAR_GP_PIN(4, 12),
+       RCAR_GP_PIN(4, 11), RCAR_GP_PIN(4, 10),
+       RCAR_GP_PIN(4, 25), RCAR_GP_PIN(4, 24), RCAR_GP_PIN(4, 23),
+       RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 21), RCAR_GP_PIN(4, 20),
+       RCAR_GP_PIN(4, 19), RCAR_GP_PIN(4, 18),
+};
+static const unsigned int du1_rgb888_mux[] = {
+       DU1_DR7_MARK, DU1_DR6_MARK, DU1_DR5_MARK, DU1_DR4_MARK,
+       DU1_DR3_MARK, DU1_DR2_MARK, DU1_DR1_MARK, DU1_DR0_MARK,
+       DU1_DG7_MARK, DU1_DG6_MARK, DU1_DG5_MARK, DU1_DG4_MARK,
+       DU1_DG3_MARK, DU1_DG2_MARK, DU1_DG1_MARK, DU1_DG0_MARK,
+       DU1_DB7_MARK, DU1_DB6_MARK, DU1_DB5_MARK, DU1_DB4_MARK,
+       DU1_DB3_MARK, DU1_DB2_MARK, DU1_DB1_MARK, DU1_DB0_MARK,
+};
+static const unsigned int du1_clk0_out_pins[] = {
+       /* DOTCLKOUT0 */
+       RCAR_GP_PIN(5, 2),
+};
+static const unsigned int du1_clk0_out_mux[] = {
+       DU1_DOTCLKOUT0_MARK
+};
+static const unsigned int du1_clk1_out_pins[] = {
+       /* DOTCLKOUT1 */
+       RCAR_GP_PIN(5, 0),
+};
+static const unsigned int du1_clk1_out_mux[] = {
+       DU1_DOTCLKOUT1_MARK
+};
+static const unsigned int du1_clk_in_pins[] = {
+       /* DOTCLKIN */
+       RCAR_GP_PIN(5, 1),
+};
+static const unsigned int du1_clk_in_mux[] = {
+       DU1_DOTCLKIN_MARK
+};
+static const unsigned int du1_sync_pins[] = {
+       /* EXVSYNC/VSYNC, EXHSYNC/HSYNC */
+       RCAR_GP_PIN(5, 5), RCAR_GP_PIN(5, 4),
+};
+static const unsigned int du1_sync_mux[] = {
+       DU1_EXVSYNC_DU1_VSYNC_MARK, DU1_EXHSYNC_DU1_HSYNC_MARK
+};
+static const unsigned int du1_oddf_pins[] = {
+       /* EXODDF/ODDF/DISP/CDE */
+       RCAR_GP_PIN(5, 3),
+};
+static const unsigned int du1_oddf_mux[] = {
+       DU1_EXODDF_DU1_ODDF_DISP_CDE_MARK,
+};
+static const unsigned int du1_cde_pins[] = {
+       /* CDE */
+       RCAR_GP_PIN(5, 7),
+};
+static const unsigned int du1_cde_mux[] = {
+       DU1_CDE_MARK
+};
+static const unsigned int du1_disp_pins[] = {
+       /* DISP */
+       RCAR_GP_PIN(5, 6),
+};
+static const unsigned int du1_disp_mux[] = {
+       DU1_DISP_MARK
+};
+/* - I2C0 ------------------------------------------------------------------- */
+static const unsigned int i2c0_a_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(4, 0), RCAR_GP_PIN(4, 1),
+};
+static const unsigned int i2c0_a_mux[] = {
+       SCL0_A_MARK, SDA0_A_MARK,
+};
+static const unsigned int i2c0_b_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(5, 28), RCAR_GP_PIN(5, 29),
+};
+static const unsigned int i2c0_b_mux[] = {
+       SCL0_B_MARK, SDA0_B_MARK,
+};
+static const unsigned int i2c0_c_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 11), RCAR_GP_PIN(3, 12),
+};
+static const unsigned int i2c0_c_mux[] = {
+       SCL0_C_MARK, SDA0_C_MARK,
+};
+static const unsigned int i2c0_d_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 3),
+};
+static const unsigned int i2c0_d_mux[] = {
+       SCL0_D_MARK, SDA0_D_MARK,
+};
+static const unsigned int i2c0_e_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 2), RCAR_GP_PIN(2, 3),
+};
+static const unsigned int i2c0_e_mux[] = {
+       SCL0_E_MARK, SDA0_E_MARK,
+};
+/* - I2C1 ------------------------------------------------------------------- */
+static const unsigned int i2c1_a_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(4, 2), RCAR_GP_PIN(4, 3),
+};
+static const unsigned int i2c1_a_mux[] = {
+       SCL1_A_MARK, SDA1_A_MARK,
+};
+static const unsigned int i2c1_b_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(1, 5), RCAR_GP_PIN(1, 6),
+};
+static const unsigned int i2c1_b_mux[] = {
+       SCL1_B_MARK, SDA1_B_MARK,
+};
+static const unsigned int i2c1_c_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(4, 22), RCAR_GP_PIN(4, 23),
+};
+static const unsigned int i2c1_c_mux[] = {
+       SCL1_C_MARK, SDA1_C_MARK,
+};
+static const unsigned int i2c1_d_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 9),
+};
+static const unsigned int i2c1_d_mux[] = {
+       SCL1_D_MARK, SDA1_D_MARK,
+};
+static const unsigned int i2c1_e_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(4, 16), RCAR_GP_PIN(4, 17),
+};
+static const unsigned int i2c1_e_mux[] = {
+       SCL1_E_MARK, SDA1_E_MARK,
+};
+/* - I2C2 ------------------------------------------------------------------- */
+static const unsigned int i2c2_a_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(4, 24), RCAR_GP_PIN(4, 25),
+};
+static const unsigned int i2c2_a_mux[] = {
+       SCL2_A_MARK, SDA2_A_MARK,
+};
+static const unsigned int i2c2_b_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 13), RCAR_GP_PIN(3, 14),
+};
+static const unsigned int i2c2_b_mux[] = {
+       SCL2_B_MARK, SDA2_B_MARK,
+};
+static const unsigned int i2c2_c_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(4, 4), RCAR_GP_PIN(4, 5),
+};
+static const unsigned int i2c2_c_mux[] = {
+       SCL2_C_MARK, SDA2_C_MARK,
+};
+static const unsigned int i2c2_d_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 0), RCAR_GP_PIN(2, 1),
+};
+static const unsigned int i2c2_d_mux[] = {
+       SCL2_D_MARK, SDA2_D_MARK,
+};
+/* - I2C3 ------------------------------------------------------------------- */
+static const unsigned int i2c3_a_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 9), RCAR_GP_PIN(3, 10),
+};
+static const unsigned int i2c3_a_mux[] = {
+       SCL3_A_MARK, SDA3_A_MARK,
+};
+static const unsigned int i2c3_b_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(1, 0), RCAR_GP_PIN(1, 1),
+};
+static const unsigned int i2c3_b_mux[] = {
+       SCL3_B_MARK, SDA3_B_MARK,
+};
+static const unsigned int i2c3_c_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(5, 1), RCAR_GP_PIN(5, 2),
+};
+static const unsigned int i2c3_c_mux[] = {
+       SCL3_C_MARK, SDA3_C_MARK,
+};
+static const unsigned int i2c3_d_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 8), RCAR_GP_PIN(2, 9),
+};
+static const unsigned int i2c3_d_mux[] = {
+       SCL3_D_MARK, SDA3_D_MARK,
+};
+static const unsigned int i2c3_e_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(5, 25), RCAR_GP_PIN(5, 26),
+};
+static const unsigned int i2c3_e_mux[] = {
+       SCL3_E_MARK, SDA3_E_MARK,
+};
 /* - I2C4 ------------------------------------------------------------------- */
 static const unsigned int i2c4_a_pins[] = {
        /* SCL, SDA */
@@ -1381,6 +1635,29 @@ static const unsigned int qspi0_data4_mux[] = {
        QSPI0_MOSI_QSPI0_IO0_MARK, QSPI0_MISO_QSPI0_IO1_MARK,
        QSPI0_IO2_MARK, QSPI0_IO3_MARK,
 };
+static const unsigned int qspi1_ctrl_pins[] = {
+       /* SPCLK, SSL */
+       RCAR_GP_PIN(4, 6), RCAR_GP_PIN(4, 9),
+};
+static const unsigned int qspi1_ctrl_mux[] = {
+       QSPI1_SPCLK_MARK, QSPI1_SSL_MARK,
+};
+static const unsigned int qspi1_data2_pins[] = {
+       /* MOSI_IO0, MISO_IO1 */
+       RCAR_GP_PIN(4, 4), RCAR_GP_PIN(4, 5),
+};
+static const unsigned int qspi1_data2_mux[] = {
+       QSPI1_MOSI_QSPI1_IO0_MARK, QSPI1_MISO_QSPI1_IO1_MARK,
+};
+static const unsigned int qspi1_data4_pins[] = {
+       /* MOSI_IO0, MISO_IO1, IO2, IO3 */
+       RCAR_GP_PIN(4, 4), RCAR_GP_PIN(4, 5), RCAR_GP_PIN(4, 7),
+       RCAR_GP_PIN(4, 8),
+};
+static const unsigned int qspi1_data4_mux[] = {
+       QSPI1_MOSI_QSPI1_IO0_MARK, QSPI1_MISO_QSPI1_IO1_MARK,
+       QSPI1_IO2_MARK, QSPI1_IO3_MARK,
+};
 /* - SCIF0 ------------------------------------------------------------------ */
 static const unsigned int scif0_data_a_pins[] = {
        /* RX, TX */
@@ -1619,6 +1896,81 @@ static const unsigned int scif_clk_b_pins[] = {
 static const unsigned int scif_clk_b_mux[] = {
        SCIF_CLK_B_MARK,
 };
+/* - SDHI0 ------------------------------------------------------------------ */
+static const unsigned int sdhi0_data1_pins[] = {
+       /* D0 */
+       RCAR_GP_PIN(0, 7),
+};
+static const unsigned int sdhi0_data1_mux[] = {
+       SD0_DAT0_MARK,
+};
+static const unsigned int sdhi0_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(0, 7), RCAR_GP_PIN(0, 8),
+       RCAR_GP_PIN(0, 9), RCAR_GP_PIN(0, 10),
+};
+static const unsigned int sdhi0_data4_mux[] = {
+       SD0_DAT0_MARK, SD0_DAT1_MARK, SD0_DAT2_MARK, SD0_DAT3_MARK,
+};
+static const unsigned int sdhi0_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 6),
+};
+static const unsigned int sdhi0_ctrl_mux[] = {
+       SD0_CLK_MARK, SD0_CMD_MARK,
+};
+static const unsigned int sdhi0_cd_pins[] = {
+       /* CD */
+       RCAR_GP_PIN(0, 11),
+};
+static const unsigned int sdhi0_cd_mux[] = {
+       SD0_CD_MARK,
+};
+static const unsigned int sdhi0_wp_pins[] = {
+       /* WP */
+       RCAR_GP_PIN(0, 12),
+};
+static const unsigned int sdhi0_wp_mux[] = {
+       SD0_WP_MARK,
+};
+/* - SDHI1 ------------------------------------------------------------------ */
+static const unsigned int sdhi1_data1_pins[] = {
+       /* D0 */
+       RCAR_GP_PIN(0, 15),
+};
+static const unsigned int sdhi1_data1_mux[] = {
+       MMC0_D0_SDHI1_D0_MARK,
+};
+static const unsigned int sdhi1_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(0, 15), RCAR_GP_PIN(0, 16),
+       RCAR_GP_PIN(0, 17), RCAR_GP_PIN(0, 18),
+};
+static const unsigned int sdhi1_data4_mux[] = {
+       MMC0_D0_SDHI1_D0_MARK, MMC0_D1_SDHI1_D1_MARK,
+       MMC0_D2_SDHI1_D2_MARK, MMC0_D3_SDHI1_D3_MARK,
+};
+static const unsigned int sdhi1_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(0, 13), RCAR_GP_PIN(0, 14),
+};
+static const unsigned int sdhi1_ctrl_mux[] = {
+       MMC0_CLK_SDHI1_CLK_MARK, MMC0_CMD_SDHI1_CMD_MARK,
+};
+static const unsigned int sdhi1_cd_pins[] = {
+       /* CD */
+       RCAR_GP_PIN(0, 19),
+};
+static const unsigned int sdhi1_cd_mux[] = {
+       SD1_CD_MARK,
+};
+static const unsigned int sdhi1_wp_pins[] = {
+       /* WP */
+       RCAR_GP_PIN(0, 20),
+};
+static const unsigned int sdhi1_wp_mux[] = {
+       SD1_WP_MARK,
+};
 /* - SDHI2 ------------------------------------------------------------------ */
 static const unsigned int sdhi2_data1_pins[] = {
        /* D0 */
@@ -1674,6 +2026,146 @@ static const unsigned int usb1_mux[] = {
        USB1_PWEN_MARK,
        USB1_OVC_MARK,
 };
+/* - VIN0 ------------------------------------------------------------------- */
+static const union vin_data vin0_data_pins = {
+       .data24 = {
+               /* B */
+               RCAR_GP_PIN(5, 20), RCAR_GP_PIN(5, 21),
+               RCAR_GP_PIN(5, 22), RCAR_GP_PIN(5, 23),
+               RCAR_GP_PIN(5, 24), RCAR_GP_PIN(5, 25),
+               RCAR_GP_PIN(5, 26), RCAR_GP_PIN(5, 27),
+               /* G */
+               RCAR_GP_PIN(4, 2), RCAR_GP_PIN(4, 3),
+               RCAR_GP_PIN(4, 4), RCAR_GP_PIN(4, 5),
+               RCAR_GP_PIN(4, 6), RCAR_GP_PIN(5, 8),
+               RCAR_GP_PIN(5, 9), RCAR_GP_PIN(5, 10),
+               /* R */
+               RCAR_GP_PIN(5, 11), RCAR_GP_PIN(5, 12),
+               RCAR_GP_PIN(5, 13), RCAR_GP_PIN(5, 14),
+               RCAR_GP_PIN(5, 15), RCAR_GP_PIN(5, 16),
+               RCAR_GP_PIN(5, 17), RCAR_GP_PIN(5, 19),
+       },
+};
+static const union vin_data vin0_data_mux = {
+       .data24 = {
+               /* B */
+               VI0_DATA0_VI0_B0_MARK, VI0_DATA1_VI0_B1_MARK,
+               VI0_DATA2_VI0_B2_MARK, VI0_DATA3_VI0_B3_MARK,
+               VI0_DATA4_VI0_B4_MARK, VI0_DATA5_VI0_B5_MARK,
+               VI0_DATA6_VI0_B6_MARK, VI0_DATA7_VI0_B7_MARK,
+               /* G */
+               VI0_G0_MARK, VI0_G1_MARK,
+               VI0_G2_MARK, VI0_G3_MARK,
+               VI0_G4_MARK, VI0_G5_MARK,
+               VI0_G6_MARK, VI0_G7_MARK,
+               /* R */
+               VI0_R0_MARK, VI0_R1_MARK,
+               VI0_R2_MARK, VI0_R3_MARK,
+               VI0_R4_MARK, VI0_R5_MARK,
+               VI0_R6_MARK, VI0_R7_MARK,
+       },
+};
+static const unsigned int vin0_data18_pins[] = {
+       /* B */
+       RCAR_GP_PIN(5, 22), RCAR_GP_PIN(5, 23),
+       RCAR_GP_PIN(5, 24), RCAR_GP_PIN(5, 25),
+       RCAR_GP_PIN(5, 26), RCAR_GP_PIN(5, 27),
+       /* G */
+       RCAR_GP_PIN(4, 4), RCAR_GP_PIN(4, 5),
+       RCAR_GP_PIN(4, 6), RCAR_GP_PIN(5, 8),
+       RCAR_GP_PIN(5, 9), RCAR_GP_PIN(5, 10),
+       /* R */
+       RCAR_GP_PIN(5, 13), RCAR_GP_PIN(5, 14),
+       RCAR_GP_PIN(5, 15), RCAR_GP_PIN(5, 16),
+       RCAR_GP_PIN(5, 17), RCAR_GP_PIN(5, 19),
+};
+static const unsigned int vin0_data18_mux[] = {
+       /* B */
+       VI0_DATA2_VI0_B2_MARK, VI0_DATA3_VI0_B3_MARK,
+       VI0_DATA4_VI0_B4_MARK, VI0_DATA5_VI0_B5_MARK,
+       VI0_DATA6_VI0_B6_MARK, VI0_DATA7_VI0_B7_MARK,
+       /* G */
+       VI0_G2_MARK, VI0_G3_MARK,
+       VI0_G4_MARK, VI0_G5_MARK,
+       VI0_G6_MARK, VI0_G7_MARK,
+       /* R */
+       VI0_R2_MARK, VI0_R3_MARK,
+       VI0_R4_MARK, VI0_R5_MARK,
+       VI0_R6_MARK, VI0_R7_MARK,
+};
+static const unsigned int vin0_sync_pins[] = {
+       RCAR_GP_PIN(5, 30), /* HSYNC */
+       RCAR_GP_PIN(5, 31), /* VSYNC */
+};
+static const unsigned int vin0_sync_mux[] = {
+       VI0_HSYNC_N_MARK,
+       VI0_VSYNC_N_MARK,
+};
+static const unsigned int vin0_field_pins[] = {
+       RCAR_GP_PIN(5, 29),
+};
+static const unsigned int vin0_field_mux[] = {
+       VI0_FIELD_MARK,
+};
+static const unsigned int vin0_clkenb_pins[] = {
+       RCAR_GP_PIN(5, 28),
+};
+static const unsigned int vin0_clkenb_mux[] = {
+       VI0_CLKENB_MARK,
+};
+static const unsigned int vin0_clk_pins[] = {
+       RCAR_GP_PIN(5, 18),
+};
+static const unsigned int vin0_clk_mux[] = {
+       VI0_CLK_MARK,
+};
+/* - VIN1 ------------------------------------------------------------------- */
+static const union vin_data vin1_data_pins = {
+       .data12 = {
+               RCAR_GP_PIN(3,  1), RCAR_GP_PIN(3, 2),
+               RCAR_GP_PIN(3,  3), RCAR_GP_PIN(3, 4),
+               RCAR_GP_PIN(3,  5), RCAR_GP_PIN(3, 6),
+               RCAR_GP_PIN(3,  7), RCAR_GP_PIN(3, 8),
+               RCAR_GP_PIN(3, 13), RCAR_GP_PIN(3, 14),
+               RCAR_GP_PIN(3, 15), RCAR_GP_PIN(3, 16),
+       },
+};
+static const union vin_data vin1_data_mux = {
+       .data12 = {
+               VI1_DATA0_MARK, VI1_DATA1_MARK,
+               VI1_DATA2_MARK, VI1_DATA3_MARK,
+               VI1_DATA4_MARK, VI1_DATA5_MARK,
+               VI1_DATA6_MARK, VI1_DATA7_MARK,
+               VI1_DATA8_MARK, VI1_DATA9_MARK,
+               VI1_DATA10_MARK, VI1_DATA11_MARK,
+       },
+};
+static const unsigned int vin1_sync_pins[] = {
+       RCAR_GP_PIN(3, 11), /* HSYNC */
+       RCAR_GP_PIN(3, 12), /* VSYNC */
+};
+static const unsigned int vin1_sync_mux[] = {
+       VI1_HSYNC_N_MARK,
+       VI1_VSYNC_N_MARK,
+};
+static const unsigned int vin1_field_pins[] = {
+       RCAR_GP_PIN(3, 10),
+};
+static const unsigned int vin1_field_mux[] = {
+       VI1_FIELD_MARK,
+};
+static const unsigned int vin1_clkenb_pins[] = {
+       RCAR_GP_PIN(3, 9),
+};
+static const unsigned int vin1_clkenb_mux[] = {
+       VI1_CLKENB_MARK,
+};
+static const unsigned int vin1_clk_pins[] = {
+       RCAR_GP_PIN(3, 0),
+};
+static const unsigned int vin1_clk_mux[] = {
+       VI1_CLK_MARK,
+};
 
 static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(avb_col),
@@ -1698,6 +2190,34 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(du0_oddf),
        SH_PFC_PIN_GROUP(du0_cde),
        SH_PFC_PIN_GROUP(du0_disp),
+       SH_PFC_PIN_GROUP(du1_rgb666),
+       SH_PFC_PIN_GROUP(du1_rgb888),
+       SH_PFC_PIN_GROUP(du1_clk0_out),
+       SH_PFC_PIN_GROUP(du1_clk1_out),
+       SH_PFC_PIN_GROUP(du1_clk_in),
+       SH_PFC_PIN_GROUP(du1_sync),
+       SH_PFC_PIN_GROUP(du1_oddf),
+       SH_PFC_PIN_GROUP(du1_cde),
+       SH_PFC_PIN_GROUP(du1_disp),
+       SH_PFC_PIN_GROUP(i2c0_a),
+       SH_PFC_PIN_GROUP(i2c0_b),
+       SH_PFC_PIN_GROUP(i2c0_c),
+       SH_PFC_PIN_GROUP(i2c0_d),
+       SH_PFC_PIN_GROUP(i2c0_e),
+       SH_PFC_PIN_GROUP(i2c1_a),
+       SH_PFC_PIN_GROUP(i2c1_b),
+       SH_PFC_PIN_GROUP(i2c1_c),
+       SH_PFC_PIN_GROUP(i2c1_d),
+       SH_PFC_PIN_GROUP(i2c1_e),
+       SH_PFC_PIN_GROUP(i2c2_a),
+       SH_PFC_PIN_GROUP(i2c2_b),
+       SH_PFC_PIN_GROUP(i2c2_c),
+       SH_PFC_PIN_GROUP(i2c2_d),
+       SH_PFC_PIN_GROUP(i2c3_a),
+       SH_PFC_PIN_GROUP(i2c3_b),
+       SH_PFC_PIN_GROUP(i2c3_c),
+       SH_PFC_PIN_GROUP(i2c3_d),
+       SH_PFC_PIN_GROUP(i2c3_e),
        SH_PFC_PIN_GROUP(i2c4_a),
        SH_PFC_PIN_GROUP(i2c4_b),
        SH_PFC_PIN_GROUP(i2c4_c),
@@ -1710,6 +2230,9 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(qspi0_ctrl),
        SH_PFC_PIN_GROUP(qspi0_data2),
        SH_PFC_PIN_GROUP(qspi0_data4),
+       SH_PFC_PIN_GROUP(qspi1_ctrl),
+       SH_PFC_PIN_GROUP(qspi1_data2),
+       SH_PFC_PIN_GROUP(qspi1_data4),
        SH_PFC_PIN_GROUP(scif0_data_a),
        SH_PFC_PIN_GROUP(scif0_data_b),
        SH_PFC_PIN_GROUP(scif0_data_c),
@@ -1743,6 +2266,16 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(scif5_data_f),
        SH_PFC_PIN_GROUP(scif_clk_a),
        SH_PFC_PIN_GROUP(scif_clk_b),
+       SH_PFC_PIN_GROUP(sdhi0_data1),
+       SH_PFC_PIN_GROUP(sdhi0_data4),
+       SH_PFC_PIN_GROUP(sdhi0_ctrl),
+       SH_PFC_PIN_GROUP(sdhi0_cd),
+       SH_PFC_PIN_GROUP(sdhi0_wp),
+       SH_PFC_PIN_GROUP(sdhi1_data1),
+       SH_PFC_PIN_GROUP(sdhi1_data4),
+       SH_PFC_PIN_GROUP(sdhi1_ctrl),
+       SH_PFC_PIN_GROUP(sdhi1_cd),
+       SH_PFC_PIN_GROUP(sdhi1_wp),
        SH_PFC_PIN_GROUP(sdhi2_data1),
        SH_PFC_PIN_GROUP(sdhi2_data4),
        SH_PFC_PIN_GROUP(sdhi2_ctrl),
@@ -1750,6 +2283,24 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(sdhi2_wp),
        SH_PFC_PIN_GROUP(usb0),
        SH_PFC_PIN_GROUP(usb1),
+       VIN_DATA_PIN_GROUP(vin0_data, 24),
+       VIN_DATA_PIN_GROUP(vin0_data, 20),
+       SH_PFC_PIN_GROUP(vin0_data18),
+       VIN_DATA_PIN_GROUP(vin0_data, 16),
+       VIN_DATA_PIN_GROUP(vin0_data, 12),
+       VIN_DATA_PIN_GROUP(vin0_data, 10),
+       VIN_DATA_PIN_GROUP(vin0_data, 8),
+       SH_PFC_PIN_GROUP(vin0_sync),
+       SH_PFC_PIN_GROUP(vin0_field),
+       SH_PFC_PIN_GROUP(vin0_clkenb),
+       SH_PFC_PIN_GROUP(vin0_clk),
+       VIN_DATA_PIN_GROUP(vin1_data, 12),
+       VIN_DATA_PIN_GROUP(vin1_data, 10),
+       VIN_DATA_PIN_GROUP(vin1_data, 8),
+       SH_PFC_PIN_GROUP(vin1_sync),
+       SH_PFC_PIN_GROUP(vin1_field),
+       SH_PFC_PIN_GROUP(vin1_clkenb),
+       SH_PFC_PIN_GROUP(vin1_clk),
 };
 
 static const char * const avb_groups[] = {
@@ -1780,6 +2331,49 @@ static const char * const du0_groups[] = {
        "du0_disp",
 };
 
+static const char * const du1_groups[] = {
+       "du1_rgb666",
+       "du1_rgb888",
+       "du1_clk0_out",
+       "du1_clk1_out",
+       "du1_clk_in",
+       "du1_sync",
+       "du1_oddf",
+       "du1_cde",
+       "du1_disp",
+};
+
+static const char * const i2c0_groups[] = {
+       "i2c0_a",
+       "i2c0_b",
+       "i2c0_c",
+       "i2c0_d",
+       "i2c0_e",
+};
+
+static const char * const i2c1_groups[] = {
+       "i2c1_a",
+       "i2c1_b",
+       "i2c1_c",
+       "i2c1_d",
+       "i2c1_e",
+};
+
+static const char * const i2c2_groups[] = {
+       "i2c2_a",
+       "i2c2_b",
+       "i2c2_c",
+       "i2c2_d",
+};
+
+static const char * const i2c3_groups[] = {
+       "i2c3_a",
+       "i2c3_b",
+       "i2c3_c",
+       "i2c3_d",
+       "i2c3_e",
+};
+
 static const char * const i2c4_groups[] = {
        "i2c4_a",
        "i2c4_b",
@@ -1801,6 +2395,12 @@ static const char * const qspi0_groups[] = {
        "qspi0_data4",
 };
 
+static const char * const qspi1_groups[] = {
+       "qspi1_ctrl",
+       "qspi1_data2",
+       "qspi1_data4",
+};
+
 static const char * const scif0_groups[] = {
        "scif0_data_a",
        "scif0_data_b",
@@ -1855,6 +2455,22 @@ static const char * const scif_clk_groups[] = {
        "scif_clk_b",
 };
 
+static const char * const sdhi0_groups[] = {
+       "sdhi0_data1",
+       "sdhi0_data4",
+       "sdhi0_ctrl",
+       "sdhi0_cd",
+       "sdhi0_wp",
+};
+
+static const char * const sdhi1_groups[] = {
+       "sdhi1_data1",
+       "sdhi1_data4",
+       "sdhi1_ctrl",
+       "sdhi1_cd",
+       "sdhi1_wp",
+};
+
 static const char * const sdhi2_groups[] = {
        "sdhi2_data1",
        "sdhi2_data4",
@@ -1871,12 +2487,42 @@ static const char * const usb1_groups[] = {
        "usb1",
 };
 
+static const char * const vin0_groups[] = {
+       "vin0_data24",
+       "vin0_data20",
+       "vin0_data18",
+       "vin0_data16",
+       "vin0_data12",
+       "vin0_data10",
+       "vin0_data8",
+       "vin0_sync",
+       "vin0_field",
+       "vin0_clkenb",
+       "vin0_clk",
+};
+
+static const char * const vin1_groups[] = {
+       "vin1_data12",
+       "vin1_data10",
+       "vin1_data8",
+       "vin1_sync",
+       "vin1_field",
+       "vin1_clkenb",
+       "vin1_clk",
+};
+
 static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(avb),
        SH_PFC_FUNCTION(du0),
+       SH_PFC_FUNCTION(du1),
+       SH_PFC_FUNCTION(i2c0),
+       SH_PFC_FUNCTION(i2c1),
+       SH_PFC_FUNCTION(i2c2),
+       SH_PFC_FUNCTION(i2c3),
        SH_PFC_FUNCTION(i2c4),
        SH_PFC_FUNCTION(mmc),
        SH_PFC_FUNCTION(qspi0),
+       SH_PFC_FUNCTION(qspi1),
        SH_PFC_FUNCTION(scif0),
        SH_PFC_FUNCTION(scif1),
        SH_PFC_FUNCTION(scif2),
@@ -1884,9 +2530,13 @@ static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(scif4),
        SH_PFC_FUNCTION(scif5),
        SH_PFC_FUNCTION(scif_clk),
+       SH_PFC_FUNCTION(sdhi0),
+       SH_PFC_FUNCTION(sdhi1),
        SH_PFC_FUNCTION(sdhi2),
        SH_PFC_FUNCTION(usb0),
        SH_PFC_FUNCTION(usb1),
+       SH_PFC_FUNCTION(vin0),
+       SH_PFC_FUNCTION(vin1),
 };
 
 static const struct pinmux_cfg_reg pinmux_config_regs[] = {
@@ -2729,9 +3379,33 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
        { },
 };
 
+static int r8a77470_pin_to_pocctrl(struct sh_pfc *pfc, unsigned int pin,
+                                  u32 *pocctrl)
+{
+       int bit = -EINVAL;
+
+       *pocctrl = 0xe60600b0;
+
+       if (pin >= RCAR_GP_PIN(0, 5) && pin <= RCAR_GP_PIN(0, 10))
+               bit = 0;
+
+       if (pin >= RCAR_GP_PIN(0, 13) && pin <= RCAR_GP_PIN(0, 22))
+               bit = 2;
+
+       if (pin >= RCAR_GP_PIN(4, 14) && pin <= RCAR_GP_PIN(4, 19))
+               bit = 1;
+
+       return bit;
+}
+
+static const struct sh_pfc_soc_operations r8a77470_pinmux_ops = {
+       .pin_to_pocctrl = r8a77470_pin_to_pocctrl,
+};
+
 #ifdef CONFIG_PINCTRL_PFC_R8A77470
 const struct sh_pfc_soc_info r8a77470_pinmux_info = {
        .name = "r8a77470_pfc",
+       .ops = &r8a77470_pinmux_ops,
        .unlock_reg = 0xe6060000, /* PMMR */
 
        .function = { PINMUX_FUNCTION_BEGIN, PINMUX_FUNCTION_END },
index 209f74a6e6ce5a6feb2ecb0e7d9ff1c358986754..2859231aaffc4546cb176cd51611bf7e4159aaa2 100644 (file)
@@ -3217,8 +3217,7 @@ static const unsigned int qspi_data4_b_pins[] = {
        RCAR_GP_PIN(6, 4),
 };
 static const unsigned int qspi_data4_b_mux[] = {
-       SPCLK_B_MARK, MOSI_IO0_B_MARK, MISO_IO1_B_MARK,
-       IO2_B_MARK, IO3_B_MARK, SSL_B_MARK,
+       MOSI_IO0_B_MARK, MISO_IO1_B_MARK, IO2_B_MARK, IO3_B_MARK,
 };
 /* - SCIF0 ------------------------------------------------------------------ */
 static const unsigned int scif0_data_pins[] = {
@@ -4372,17 +4371,14 @@ static const unsigned int vin1_b_data18_pins[] = {
 };
 static const unsigned int vin1_b_data18_mux[] = {
        /* B */
-       VI1_DATA0_B_MARK, VI1_DATA1_B_MARK,
        VI1_DATA2_B_MARK, VI1_DATA3_B_MARK,
        VI1_DATA4_B_MARK, VI1_DATA5_B_MARK,
        VI1_DATA6_B_MARK, VI1_DATA7_B_MARK,
        /* G */
-       VI1_G0_B_MARK, VI1_G1_B_MARK,
        VI1_G2_B_MARK, VI1_G3_B_MARK,
        VI1_G4_B_MARK, VI1_G5_B_MARK,
        VI1_G6_B_MARK, VI1_G7_B_MARK,
        /* R */
-       VI1_R0_B_MARK, VI1_R1_B_MARK,
        VI1_R2_B_MARK, VI1_R3_B_MARK,
        VI1_R4_B_MARK, VI1_R5_B_MARK,
        VI1_R6_B_MARK, VI1_R7_B_MARK,
index bf0681b381819a4b5567d43282eb143e690f4c60..a623459b234e048e24dc4a9cac590347cf6f2970 100644 (file)
@@ -1474,7 +1474,7 @@ static const unsigned int vin1_clk_mux[] = {
        VI1_CLK_MARK,
 };
 /* - VIN2 ------------------------------------------------------------------- */
-static const union vin_data vin2_data_pins = {
+static const union vin_data16 vin2_data_pins = {
        .data16 = {
                RCAR_GP_PIN(6, 4), RCAR_GP_PIN(6, 5),
                RCAR_GP_PIN(6, 6), RCAR_GP_PIN(6, 7),
@@ -1486,7 +1486,7 @@ static const union vin_data vin2_data_pins = {
                RCAR_GP_PIN(8, 11), RCAR_GP_PIN(8, 12),
        },
 };
-static const union vin_data vin2_data_mux = {
+static const union vin_data16 vin2_data_mux = {
        .data16 = {
                VI2_D0_C0_MARK, VI2_D1_C1_MARK,
                VI2_D2_C2_MARK, VI2_D3_C3_MARK,
@@ -1524,7 +1524,7 @@ static const unsigned int vin2_clk_mux[] = {
        VI2_CLK_MARK,
 };
 /* - VIN3 ------------------------------------------------------------------- */
-static const union vin_data vin3_data_pins = {
+static const union vin_data16 vin3_data_pins = {
        .data16 = {
                RCAR_GP_PIN(7, 4), RCAR_GP_PIN(7, 5),
                RCAR_GP_PIN(7, 6), RCAR_GP_PIN(7, 7),
@@ -1536,7 +1536,7 @@ static const union vin_data vin3_data_pins = {
                RCAR_GP_PIN(8, 15), RCAR_GP_PIN(8, 16),
        },
 };
-static const union vin_data vin3_data_mux = {
+static const union vin_data16 vin3_data_mux = {
        .data16 = {
                VI3_D0_C0_MARK, VI3_D1_C1_MARK,
                VI3_D2_C2_MARK, VI3_D3_C3_MARK,
@@ -1574,7 +1574,7 @@ static const unsigned int vin3_clk_mux[] = {
        VI3_CLK_MARK,
 };
 /* - VIN4 ------------------------------------------------------------------- */
-static const union vin_data vin4_data_pins = {
+static const union vin_data12 vin4_data_pins = {
        .data12 = {
                RCAR_GP_PIN(8, 4), RCAR_GP_PIN(8, 5),
                RCAR_GP_PIN(8, 6), RCAR_GP_PIN(8, 7),
@@ -1584,7 +1584,7 @@ static const union vin_data vin4_data_pins = {
                RCAR_GP_PIN(8, 14), RCAR_GP_PIN(8, 15),
        },
 };
-static const union vin_data vin4_data_mux = {
+static const union vin_data12 vin4_data_mux = {
        .data12 = {
                VI4_D0_C0_MARK, VI4_D1_C1_MARK,
                VI4_D2_C2_MARK, VI4_D3_C3_MARK,
@@ -1620,7 +1620,7 @@ static const unsigned int vin4_clk_mux[] = {
        VI4_CLK_MARK,
 };
 /* - VIN5 ------------------------------------------------------------------- */
-static const union vin_data vin5_data_pins = {
+static const union vin_data12 vin5_data_pins = {
        .data12 = {
                RCAR_GP_PIN(9, 4), RCAR_GP_PIN(9, 5),
                RCAR_GP_PIN(9, 6), RCAR_GP_PIN(9, 7),
@@ -1630,7 +1630,7 @@ static const union vin_data vin5_data_pins = {
                RCAR_GP_PIN(9, 14), RCAR_GP_PIN(9, 15),
        },
 };
-static const union vin_data vin5_data_mux = {
+static const union vin_data12 vin5_data_mux = {
        .data12 = {
                VI5_D0_C0_MARK, VI5_D1_C1_MARK,
                VI5_D2_C2_MARK, VI5_D3_C3_MARK,
@@ -1744,10 +1744,10 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        VIN_DATA_PIN_GROUP(vin1_data, 12),
        VIN_DATA_PIN_GROUP(vin1_data, 10),
        VIN_DATA_PIN_GROUP(vin1_data, 8),
-       VIN_DATA_PIN_GROUP(vin1_data_b, 24),
-       VIN_DATA_PIN_GROUP(vin1_data_b, 20),
+       VIN_DATA_PIN_GROUP(vin1_data, 24, _b),
+       VIN_DATA_PIN_GROUP(vin1_data, 20, _b),
        SH_PFC_PIN_GROUP(vin1_data18_b),
-       VIN_DATA_PIN_GROUP(vin1_data_b, 16),
+       VIN_DATA_PIN_GROUP(vin1_data, 16, _b),
        SH_PFC_PIN_GROUP(vin1_sync),
        SH_PFC_PIN_GROUP(vin1_field),
        SH_PFC_PIN_GROUP(vin1_clkenb),
index 6d1e5fdc03f845545679f8b1f640bbbb846b8d22..fcf1339c40584385eed6747dcbced42b59271387 100644 (file)
@@ -3704,7 +3704,7 @@ static const unsigned int vin0_clk_mux[] = {
        VI0_CLK_MARK,
 };
 /* - VIN1 ------------------------------------------------------------------- */
-static const union vin_data vin1_data_pins = {
+static const union vin_data12 vin1_data_pins = {
        .data12 = {
                RCAR_GP_PIN(5, 12), RCAR_GP_PIN(5, 13),
                RCAR_GP_PIN(5, 14), RCAR_GP_PIN(5, 15),
@@ -3714,7 +3714,7 @@ static const union vin_data vin1_data_pins = {
                RCAR_GP_PIN(1, 12), RCAR_GP_PIN(1, 13),
        },
 };
-static const union vin_data vin1_data_mux = {
+static const union vin_data12 vin1_data_mux = {
        .data12 = {
                VI1_DATA0_MARK, VI1_DATA1_MARK,
                VI1_DATA2_MARK, VI1_DATA3_MARK,
@@ -5212,7 +5212,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
                FN_AVB_MDC, FN_SSI_SDATA6_B, 0, 0, }
        },
        { PINMUX_CFG_REG_VAR("IPSR9", 0xE6060044, 32,
-                            1, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3, 3) {
+                            1, 3, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3) {
                /* IP9_31 [1] */
                0, 0,
                /* IP9_30_28 [3] */
index 8c7de44615d10802cf941089a1f5030f3c8e2ddc..287cfbb7e992f08807d3a6b624432c3c9c929da4 100644 (file)
@@ -537,6 +537,9 @@ MOD_SEL0_2_1                MOD_SEL1_2 \
        FM(DU_DOTCLKIN0) FM(DU_DOTCLKIN1) FM(DU_DOTCLKIN2) FM(DU_DOTCLKIN3) \
        FM(TMS) FM(TDO) FM(ASEBRK) FM(MLB_REF) FM(TDI) FM(TCK) FM(TRST) FM(EXTALR)
 
+#define PINMUX_PHYS \
+       FM(SCL0) FM(SDA0) FM(SCL3) FM(SDA3) FM(SCL5) FM(SDA5)
+
 enum {
        PINMUX_RESERVED = 0,
 
@@ -562,6 +565,7 @@ enum {
        PINMUX_IPSR
        PINMUX_MOD_SELS
        PINMUX_STATIC
+       PINMUX_PHYS
        PINMUX_MARK_END,
 #undef F_
 #undef FM
@@ -574,9 +578,6 @@ static const u16 pinmux_data[] = {
        PINMUX_SINGLE(AVS2),
        PINMUX_SINGLE(HDMI0_CEC),
        PINMUX_SINGLE(HDMI1_CEC),
-       PINMUX_SINGLE(I2C_SEL_0_1),
-       PINMUX_SINGLE(I2C_SEL_3_1),
-       PINMUX_SINGLE(I2C_SEL_5_1),
        PINMUX_SINGLE(MSIOF0_RXD),
        PINMUX_SINGLE(MSIOF0_SCK),
        PINMUX_SINGLE(MSIOF0_TXD),
@@ -608,13 +609,15 @@ static const u16 pinmux_data[] = {
        PINMUX_IPSR_MSEL(IP0_15_12,     MSIOF2_SCK_C,           SEL_MSIOF2_2),
        PINMUX_IPSR_MSEL(IP0_15_12,     TX4_A,                  SEL_SCIF4_0),
 
-       PINMUX_IPSR_MSEL(IP0_19_16,     AVB_AVTP_MATCH_A,       SEL_ETHERAVB_0),
-       PINMUX_IPSR_MSEL(IP0_19_16,     MSIOF2_RXD_C,           SEL_MSIOF2_2),
-       PINMUX_IPSR_MSEL(IP0_19_16,     CTS4_N_A,               SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_19_16, AVB_AVTP_MATCH_A,      I2C_SEL_5_0,    SEL_ETHERAVB_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_19_16, MSIOF2_RXD_C,          I2C_SEL_5_0,    SEL_MSIOF2_2),
+       PINMUX_IPSR_PHYS_MSEL(IP0_19_16, CTS4_N_A,              I2C_SEL_5_0,    SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS(IP0_19_16,     SCL5,                   I2C_SEL_5_1),
 
-       PINMUX_IPSR_MSEL(IP0_23_20,     AVB_AVTP_CAPTURE_A,     SEL_ETHERAVB_0),
-       PINMUX_IPSR_MSEL(IP0_23_20,     MSIOF2_TXD_C,           SEL_MSIOF2_2),
-       PINMUX_IPSR_MSEL(IP0_23_20,     RTS4_N_TANS_A,          SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_23_20, AVB_AVTP_CAPTURE_A,    I2C_SEL_5_0,    SEL_ETHERAVB_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_23_20, MSIOF2_TXD_C,          I2C_SEL_5_0,    SEL_MSIOF2_2),
+       PINMUX_IPSR_PHYS_MSEL(IP0_23_20, RTS4_N_TANS_A,         I2C_SEL_5_0,    SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS(IP0_23_20,     SDA5,                   I2C_SEL_5_1),
 
        PINMUX_IPSR_GPSR(IP0_27_24,     IRQ0),
        PINMUX_IPSR_GPSR(IP0_27_24,     QPOLB),
@@ -664,16 +667,18 @@ static const u16 pinmux_data[] = {
        PINMUX_IPSR_MSEL(IP1_19_16,     VI4_DATA6_B,            SEL_VIN4_1),
        PINMUX_IPSR_MSEL(IP1_19_16,     IECLK_B,                SEL_IEBUS_1),
 
-       PINMUX_IPSR_MSEL(IP1_23_20,     PWM1_A,                 SEL_PWM1_0),
-       PINMUX_IPSR_GPSR(IP1_23_20,     A21),
-       PINMUX_IPSR_MSEL(IP1_23_20,     HRX3_D,                 SEL_HSCIF3_3),
-       PINMUX_IPSR_MSEL(IP1_23_20,     VI4_DATA7_B,            SEL_VIN4_1),
-       PINMUX_IPSR_MSEL(IP1_23_20,     IERX_B,                 SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, PWM1_A,                I2C_SEL_3_0,    SEL_PWM1_0),
+       PINMUX_IPSR_MSEL(IP1_23_20,     A21,                    I2C_SEL_3_0),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, HRX3_D,                I2C_SEL_3_0,    SEL_HSCIF3_3),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, VI4_DATA7_B,           I2C_SEL_3_0,    SEL_VIN4_1),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, IERX_B,                I2C_SEL_3_0,    SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS(IP0_23_20,     SCL3,                   I2C_SEL_3_1),
 
-       PINMUX_IPSR_MSEL(IP1_27_24,     PWM2_A,                 SEL_PWM2_0),
-       PINMUX_IPSR_GPSR(IP1_27_24,     A20),
-       PINMUX_IPSR_MSEL(IP1_27_24,     HTX3_D,                 SEL_HSCIF3_3),
-       PINMUX_IPSR_MSEL(IP1_27_24,     IETX_B,                 SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS_MSEL(IP1_27_24, PWM2_A,                I2C_SEL_3_0,    SEL_PWM2_0),
+       PINMUX_IPSR_MSEL(IP1_27_24,     A20,                    I2C_SEL_3_0),
+       PINMUX_IPSR_PHYS_MSEL(IP1_27_24, HTX3_D,                I2C_SEL_3_0,    SEL_HSCIF3_3),
+       PINMUX_IPSR_PHYS_MSEL(IP1_27_24, IETX_B,                I2C_SEL_3_0,    SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS(IP1_27_24,     SDA3,                   I2C_SEL_3_1),
 
        PINMUX_IPSR_GPSR(IP1_31_28,     A0),
        PINMUX_IPSR_GPSR(IP1_31_28,     LCDOUT16),
@@ -1067,11 +1072,13 @@ static const u16 pinmux_data[] = {
        PINMUX_IPSR_GPSR(IP10_15_12,    SD0_WP),
        PINMUX_IPSR_MSEL(IP10_15_12,    SDA2_B,                 SEL_I2C2_1),
 
-       PINMUX_IPSR_GPSR(IP10_19_16,    SD1_CD),
-       PINMUX_IPSR_MSEL(IP10_19_16,    SIM0_CLK_B,             SEL_SIMCARD_1),
+       PINMUX_IPSR_MSEL(IP10_19_16,    SD1_CD,                 I2C_SEL_0_0),
+       PINMUX_IPSR_PHYS_MSEL(IP10_19_16, SIM0_CLK_B,           I2C_SEL_0_0,    SEL_SIMCARD_1),
+       PINMUX_IPSR_PHYS(IP10_19_16,    SCL0,                   I2C_SEL_0_1),
 
-       PINMUX_IPSR_GPSR(IP10_23_20,    SD1_WP),
-       PINMUX_IPSR_MSEL(IP10_23_20,    SIM0_D_B,               SEL_SIMCARD_1),
+       PINMUX_IPSR_MSEL(IP10_23_20,    SD1_WP,                 I2C_SEL_0_0),
+       PINMUX_IPSR_PHYS_MSEL(IP10_23_20, SIM0_D_B,             I2C_SEL_0_0,    SEL_SIMCARD_1),
+       PINMUX_IPSR_PHYS(IP10_23_20,    SDA0,                   I2C_SEL_0_1),
 
        PINMUX_IPSR_GPSR(IP10_27_24,    SCK0),
        PINMUX_IPSR_MSEL(IP10_27_24,    HSCK1_B,                SEL_HSCIF1_1),
@@ -2266,6 +2273,15 @@ static const unsigned int hscif4_data_b_mux[] = {
 };
 
 /* - I2C -------------------------------------------------------------------- */
+static const unsigned int i2c0_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 14), RCAR_GP_PIN(3, 15),
+};
+
+static const unsigned int i2c0_mux[] = {
+       SCL0_MARK, SDA0_MARK,
+};
+
 static const unsigned int i2c1_a_pins[] = {
        /* SDA, SCL */
        RCAR_GP_PIN(5, 11), RCAR_GP_PIN(5, 10),
@@ -2294,6 +2310,25 @@ static const unsigned int i2c2_b_pins[] = {
 static const unsigned int i2c2_b_mux[] = {
        SDA2_B_MARK, SCL2_B_MARK,
 };
+
+static const unsigned int i2c3_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 7), RCAR_GP_PIN(2, 8),
+};
+
+static const unsigned int i2c3_mux[] = {
+       SCL3_MARK, SDA3_MARK,
+};
+
+static const unsigned int i2c5_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 13), RCAR_GP_PIN(2, 14),
+};
+
+static const unsigned int i2c5_mux[] = {
+       SCL5_MARK, SDA5_MARK,
+};
+
 static const unsigned int i2c6_a_pins[] = {
        /* SDA, SCL */
        RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 11),
@@ -3936,10 +3971,13 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(hscif4_clk),
        SH_PFC_PIN_GROUP(hscif4_ctrl),
        SH_PFC_PIN_GROUP(hscif4_data_b),
+       SH_PFC_PIN_GROUP(i2c0),
        SH_PFC_PIN_GROUP(i2c1_a),
        SH_PFC_PIN_GROUP(i2c1_b),
        SH_PFC_PIN_GROUP(i2c2_a),
        SH_PFC_PIN_GROUP(i2c2_b),
+       SH_PFC_PIN_GROUP(i2c3),
+       SH_PFC_PIN_GROUP(i2c5),
        SH_PFC_PIN_GROUP(i2c6_a),
        SH_PFC_PIN_GROUP(i2c6_b),
        SH_PFC_PIN_GROUP(i2c6_c),
@@ -4309,6 +4347,10 @@ static const char * const hscif4_groups[] = {
        "hscif4_data_b",
 };
 
+static const char * const i2c0_groups[] = {
+       "i2c0",
+};
+
 static const char * const i2c1_groups[] = {
        "i2c1_a",
        "i2c1_b",
@@ -4319,6 +4361,14 @@ static const char * const i2c2_groups[] = {
        "i2c2_b",
 };
 
+static const char * const i2c3_groups[] = {
+       "i2c3",
+};
+
+static const char * const i2c5_groups[] = {
+       "i2c5",
+};
+
 static const char * const i2c6_groups[] = {
        "i2c6_a",
        "i2c6_b",
@@ -4651,8 +4701,11 @@ static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(hscif2),
        SH_PFC_FUNCTION(hscif3),
        SH_PFC_FUNCTION(hscif4),
+       SH_PFC_FUNCTION(i2c0),
        SH_PFC_FUNCTION(i2c1),
        SH_PFC_FUNCTION(i2c2),
+       SH_PFC_FUNCTION(i2c3),
+       SH_PFC_FUNCTION(i2c5),
        SH_PFC_FUNCTION(i2c6),
        SH_PFC_FUNCTION(intc_ex),
        SH_PFC_FUNCTION(msiof0),
index 0af737d11403b7e18220937c624cf78da677fbc0..01105bb8359882fc3b57f52112dadeefa7eb21ff 100644 (file)
@@ -550,6 +550,9 @@ MOD_SEL0_4_3                MOD_SEL1_4 \
        FM(DU_DOTCLKIN0) FM(DU_DOTCLKIN1) FM(DU_DOTCLKIN2) FM(DU_DOTCLKIN3) \
        FM(TMS) FM(TDO) FM(ASEBRK) FM(MLB_REF) FM(TDI) FM(TCK) FM(TRST) FM(EXTALR)
 
+#define PINMUX_PHYS \
+       FM(SCL0) FM(SDA0) FM(SCL3) FM(SDA3) FM(SCL5) FM(SDA5)
+
 enum {
        PINMUX_RESERVED = 0,
 
@@ -575,6 +578,7 @@ enum {
        PINMUX_IPSR
        PINMUX_MOD_SELS
        PINMUX_STATIC
+       PINMUX_PHYS
        PINMUX_MARK_END,
 #undef F_
 #undef FM
@@ -588,9 +592,6 @@ static const u16 pinmux_data[] = {
        PINMUX_SINGLE(CLKOUT),
        PINMUX_SINGLE(HDMI0_CEC),
        PINMUX_SINGLE(HDMI1_CEC),
-       PINMUX_SINGLE(I2C_SEL_0_1),
-       PINMUX_SINGLE(I2C_SEL_3_1),
-       PINMUX_SINGLE(I2C_SEL_5_1),
        PINMUX_SINGLE(MSIOF0_RXD),
        PINMUX_SINGLE(MSIOF0_SCK),
        PINMUX_SINGLE(MSIOF0_TXD),
@@ -614,14 +615,16 @@ static const u16 pinmux_data[] = {
        PINMUX_IPSR_MSEL(IP0_15_12,     MSIOF2_SCK_C,           SEL_MSIOF2_2),
        PINMUX_IPSR_MSEL(IP0_15_12,     TX4_A,                  SEL_SCIF4_0),
 
-       PINMUX_IPSR_MSEL(IP0_19_16,     AVB_AVTP_MATCH_A,       SEL_ETHERAVB_0),
-       PINMUX_IPSR_MSEL(IP0_19_16,     MSIOF2_RXD_C,           SEL_MSIOF2_2),
-       PINMUX_IPSR_MSEL(IP0_19_16,     CTS4_N_A,               SEL_SCIF4_0),
-       PINMUX_IPSR_GPSR(IP0_19_16,     FSCLKST2_N_A),
+       PINMUX_IPSR_PHYS_MSEL(IP0_19_16, AVB_AVTP_MATCH_A,      I2C_SEL_5_0,    SEL_ETHERAVB_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_19_16, MSIOF2_RXD_C,          I2C_SEL_5_0,    SEL_MSIOF2_2),
+       PINMUX_IPSR_PHYS_MSEL(IP0_19_16, CTS4_N_A,              I2C_SEL_5_0,    SEL_SCIF4_0),
+       PINMUX_IPSR_MSEL(IP0_19_16,     FSCLKST2_N_A,           I2C_SEL_5_0),
+       PINMUX_IPSR_PHYS(IP0_19_16,     SCL5,                   I2C_SEL_5_1),
 
-       PINMUX_IPSR_MSEL(IP0_23_20,     AVB_AVTP_CAPTURE_A,     SEL_ETHERAVB_0),
-       PINMUX_IPSR_MSEL(IP0_23_20,     MSIOF2_TXD_C,           SEL_MSIOF2_2),
-       PINMUX_IPSR_MSEL(IP0_23_20,     RTS4_N_A,               SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_23_20, AVB_AVTP_CAPTURE_A,    I2C_SEL_5_0,    SEL_ETHERAVB_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_23_20, MSIOF2_TXD_C,          I2C_SEL_5_0,    SEL_MSIOF2_2),
+       PINMUX_IPSR_PHYS_MSEL(IP0_23_20, RTS4_N_A,              I2C_SEL_5_0,    SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS(IP0_23_20,     SDA5,                   I2C_SEL_5_1),
 
        PINMUX_IPSR_GPSR(IP0_27_24,     IRQ0),
        PINMUX_IPSR_GPSR(IP0_27_24,     QPOLB),
@@ -674,14 +677,16 @@ static const u16 pinmux_data[] = {
        PINMUX_IPSR_MSEL(IP1_19_16,     VI4_DATA6_B,            SEL_VIN4_1),
        PINMUX_IPSR_MSEL(IP1_19_16,     IECLK_B,                SEL_IEBUS_1),
 
-       PINMUX_IPSR_MSEL(IP1_23_20,     PWM1_A,                 SEL_PWM1_0),
-       PINMUX_IPSR_MSEL(IP1_23_20,     HRX3_D,                 SEL_HSCIF3_3),
-       PINMUX_IPSR_MSEL(IP1_23_20,     VI4_DATA7_B,            SEL_VIN4_1),
-       PINMUX_IPSR_MSEL(IP1_23_20,     IERX_B,                 SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, PWM1_A,                I2C_SEL_3_0,    SEL_PWM1_0),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, HRX3_D,                I2C_SEL_3_0,    SEL_HSCIF3_3),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, VI4_DATA7_B,           I2C_SEL_3_0,    SEL_VIN4_1),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, IERX_B,                I2C_SEL_3_0,    SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS(IP0_23_20,     SCL3,                   I2C_SEL_3_1),
 
-       PINMUX_IPSR_MSEL(IP1_27_24,     PWM2_A,                 SEL_PWM2_0),
-       PINMUX_IPSR_MSEL(IP1_27_24,     HTX3_D,                 SEL_HSCIF3_3),
-       PINMUX_IPSR_MSEL(IP1_27_24,     IETX_B,                 SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS_MSEL(IP1_27_24, PWM2_A,                I2C_SEL_3_0,    SEL_PWM2_0),
+       PINMUX_IPSR_PHYS_MSEL(IP1_27_24, HTX3_D,                I2C_SEL_3_0,    SEL_HSCIF3_3),
+       PINMUX_IPSR_PHYS_MSEL(IP1_27_24, IETX_B,                I2C_SEL_3_0,    SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS(IP1_27_24,     SDA3,                   I2C_SEL_3_1),
 
        PINMUX_IPSR_GPSR(IP1_31_28,     A0),
        PINMUX_IPSR_GPSR(IP1_31_28,     LCDOUT16),
@@ -1113,11 +1118,13 @@ static const u16 pinmux_data[] = {
        PINMUX_IPSR_GPSR(IP11_15_12,    SD0_WP),
        PINMUX_IPSR_MSEL(IP11_15_12,    SDA2_B,                 SEL_I2C2_1),
 
-       PINMUX_IPSR_GPSR(IP11_19_16,    SD1_CD),
-       PINMUX_IPSR_MSEL(IP11_19_16,    SIM0_CLK_B,             SEL_SIMCARD_1),
+       PINMUX_IPSR_MSEL(IP11_19_16,    SD1_CD,                 I2C_SEL_0_0),
+       PINMUX_IPSR_PHYS_MSEL(IP11_19_16, SIM0_CLK_B,           I2C_SEL_0_0,    SEL_SIMCARD_1),
+       PINMUX_IPSR_PHYS(IP11_19_16,    SCL0,                   I2C_SEL_0_1),
 
-       PINMUX_IPSR_GPSR(IP11_23_20,    SD1_WP),
-       PINMUX_IPSR_MSEL(IP11_23_20,    SIM0_D_B,               SEL_SIMCARD_1),
+       PINMUX_IPSR_MSEL(IP11_23_20,    SD1_WP,                 I2C_SEL_0_0),
+       PINMUX_IPSR_PHYS_MSEL(IP11_23_20, SIM0_D_B,             I2C_SEL_0_0,    SEL_SIMCARD_1),
+       PINMUX_IPSR_PHYS(IP11_23_20,    SDA0,                   I2C_SEL_0_1),
 
        PINMUX_IPSR_GPSR(IP11_27_24,    SCK0),
        PINMUX_IPSR_MSEL(IP11_27_24,    HSCK1_B,                SEL_HSCIF1_1),
@@ -2348,6 +2355,15 @@ static const unsigned int hscif4_data_b_mux[] = {
 };
 
 /* - I2C -------------------------------------------------------------------- */
+static const unsigned int i2c0_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 14), RCAR_GP_PIN(3, 15),
+};
+
+static const unsigned int i2c0_mux[] = {
+       SCL0_MARK, SDA0_MARK,
+};
+
 static const unsigned int i2c1_a_pins[] = {
        /* SDA, SCL */
        RCAR_GP_PIN(5, 11), RCAR_GP_PIN(5, 10),
@@ -2376,6 +2392,25 @@ static const unsigned int i2c2_b_pins[] = {
 static const unsigned int i2c2_b_mux[] = {
        SDA2_B_MARK, SCL2_B_MARK,
 };
+
+static const unsigned int i2c3_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 7), RCAR_GP_PIN(2, 8),
+};
+
+static const unsigned int i2c3_mux[] = {
+       SCL3_MARK, SDA3_MARK,
+};
+
+static const unsigned int i2c5_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 13), RCAR_GP_PIN(2, 14),
+};
+
+static const unsigned int i2c5_mux[] = {
+       SCL5_MARK, SDA5_MARK,
+};
+
 static const unsigned int i2c6_a_pins[] = {
        /* SDA, SCL */
        RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 11),
@@ -4258,10 +4293,13 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(hscif4_clk),
        SH_PFC_PIN_GROUP(hscif4_ctrl),
        SH_PFC_PIN_GROUP(hscif4_data_b),
+       SH_PFC_PIN_GROUP(i2c0),
        SH_PFC_PIN_GROUP(i2c1_a),
        SH_PFC_PIN_GROUP(i2c1_b),
        SH_PFC_PIN_GROUP(i2c2_a),
        SH_PFC_PIN_GROUP(i2c2_b),
+       SH_PFC_PIN_GROUP(i2c3),
+       SH_PFC_PIN_GROUP(i2c5),
        SH_PFC_PIN_GROUP(i2c6_a),
        SH_PFC_PIN_GROUP(i2c6_b),
        SH_PFC_PIN_GROUP(i2c6_c),
@@ -4474,20 +4512,20 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(usb2),
        SH_PFC_PIN_GROUP(usb2_ch3),
        SH_PFC_PIN_GROUP(usb30),
-       VIN_DATA_PIN_GROUP(vin4_data_a, 8),
-       VIN_DATA_PIN_GROUP(vin4_data_a, 10),
-       VIN_DATA_PIN_GROUP(vin4_data_a, 12),
-       VIN_DATA_PIN_GROUP(vin4_data_a, 16),
+       VIN_DATA_PIN_GROUP(vin4_data, 8, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 10, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 12, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 16, _a),
        SH_PFC_PIN_GROUP(vin4_data18_a),
-       VIN_DATA_PIN_GROUP(vin4_data_a, 20),
-       VIN_DATA_PIN_GROUP(vin4_data_a, 24),
-       VIN_DATA_PIN_GROUP(vin4_data_b, 8),
-       VIN_DATA_PIN_GROUP(vin4_data_b, 10),
-       VIN_DATA_PIN_GROUP(vin4_data_b, 12),
-       VIN_DATA_PIN_GROUP(vin4_data_b, 16),
+       VIN_DATA_PIN_GROUP(vin4_data, 20, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 24, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 8, _b),
+       VIN_DATA_PIN_GROUP(vin4_data, 10, _b),
+       VIN_DATA_PIN_GROUP(vin4_data, 12, _b),
+       VIN_DATA_PIN_GROUP(vin4_data, 16, _b),
        SH_PFC_PIN_GROUP(vin4_data18_b),
-       VIN_DATA_PIN_GROUP(vin4_data_b, 20),
-       VIN_DATA_PIN_GROUP(vin4_data_b, 24),
+       VIN_DATA_PIN_GROUP(vin4_data, 20, _b),
+       VIN_DATA_PIN_GROUP(vin4_data, 24, _b),
        SH_PFC_PIN_GROUP(vin4_sync),
        SH_PFC_PIN_GROUP(vin4_field),
        SH_PFC_PIN_GROUP(vin4_clkenb),
@@ -4662,6 +4700,10 @@ static const char * const hscif4_groups[] = {
        "hscif4_data_b",
 };
 
+static const char * const i2c0_groups[] = {
+       "i2c0",
+};
+
 static const char * const i2c1_groups[] = {
        "i2c1_a",
        "i2c1_b",
@@ -4672,6 +4714,14 @@ static const char * const i2c2_groups[] = {
        "i2c2_b",
 };
 
+static const char * const i2c3_groups[] = {
+       "i2c3",
+};
+
+static const char * const i2c5_groups[] = {
+       "i2c5",
+};
+
 static const char * const i2c6_groups[] = {
        "i2c6_a",
        "i2c6_b",
@@ -5032,8 +5082,11 @@ static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(hscif2),
        SH_PFC_FUNCTION(hscif3),
        SH_PFC_FUNCTION(hscif4),
+       SH_PFC_FUNCTION(i2c0),
        SH_PFC_FUNCTION(i2c1),
        SH_PFC_FUNCTION(i2c2),
+       SH_PFC_FUNCTION(i2c3),
+       SH_PFC_FUNCTION(i2c5),
        SH_PFC_FUNCTION(i2c6),
        SH_PFC_FUNCTION(intc_ex),
        SH_PFC_FUNCTION(msiof0),
index 3a6d21d871070b925fe779bd9a314ab9d61bcb03..4b98ad8d93d9e5459fd1f9f44cf8d32ba0cb2341 100644 (file)
@@ -556,6 +556,9 @@ MOD_SEL0_4_3                MOD_SEL1_4 \
        FM(DU_DOTCLKIN0) FM(DU_DOTCLKIN1) FM(DU_DOTCLKIN2) \
        FM(TMS) FM(TDO) FM(ASEBRK) FM(MLB_REF) FM(TDI) FM(TCK) FM(TRST) FM(EXTALR)
 
+#define PINMUX_PHYS \
+       FM(SCL0) FM(SDA0) FM(SCL3) FM(SDA3) FM(SCL5) FM(SDA5)
+
 enum {
        PINMUX_RESERVED = 0,
 
@@ -581,6 +584,7 @@ enum {
        PINMUX_IPSR
        PINMUX_MOD_SELS
        PINMUX_STATIC
+       PINMUX_PHYS
        PINMUX_MARK_END,
 #undef F_
 #undef FM
@@ -617,13 +621,15 @@ static const u16 pinmux_data[] = {
        PINMUX_IPSR_MSEL(IP0_15_12,     MSIOF2_SCK_C,           SEL_MSIOF2_2),
        PINMUX_IPSR_MSEL(IP0_15_12,     TX4_A,                  SEL_SCIF4_0),
 
-       PINMUX_IPSR_MSEL(IP0_19_16,     AVB_AVTP_MATCH_A,       SEL_ETHERAVB_0),
-       PINMUX_IPSR_MSEL(IP0_19_16,     MSIOF2_RXD_C,           SEL_MSIOF2_2),
-       PINMUX_IPSR_MSEL(IP0_19_16,     CTS4_N_A,               SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_19_16, AVB_AVTP_MATCH_A,      I2C_SEL_5_0,    SEL_ETHERAVB_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_19_16, MSIOF2_RXD_C,          I2C_SEL_5_0,    SEL_MSIOF2_2),
+       PINMUX_IPSR_PHYS_MSEL(IP0_19_16, CTS4_N_A,              I2C_SEL_5_0,    SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS(IP0_19_16,     SCL5,                   I2C_SEL_5_1),
 
-       PINMUX_IPSR_MSEL(IP0_23_20,     AVB_AVTP_CAPTURE_A,     SEL_ETHERAVB_0),
-       PINMUX_IPSR_MSEL(IP0_23_20,     MSIOF2_TXD_C,           SEL_MSIOF2_2),
-       PINMUX_IPSR_MSEL(IP0_23_20,     RTS4_N_A,               SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_23_20, AVB_AVTP_CAPTURE_A,    I2C_SEL_5_0,    SEL_ETHERAVB_0),
+       PINMUX_IPSR_PHYS_MSEL(IP0_23_20, MSIOF2_TXD_C,          I2C_SEL_5_0,    SEL_MSIOF2_2),
+       PINMUX_IPSR_PHYS_MSEL(IP0_23_20, RTS4_N_A,              I2C_SEL_5_0,    SEL_SCIF4_0),
+       PINMUX_IPSR_PHYS(IP0_23_20,     SDA5,                   I2C_SEL_5_1),
 
        PINMUX_IPSR_GPSR(IP0_27_24,     IRQ0),
        PINMUX_IPSR_GPSR(IP0_27_24,     QPOLB),
@@ -675,14 +681,16 @@ static const u16 pinmux_data[] = {
        PINMUX_IPSR_MSEL(IP1_19_16,     VI4_DATA6_B,            SEL_VIN4_1),
        PINMUX_IPSR_MSEL(IP1_19_16,     IECLK_B,                SEL_IEBUS_1),
 
-       PINMUX_IPSR_MSEL(IP1_23_20,     PWM1_A,                 SEL_PWM1_0),
-       PINMUX_IPSR_MSEL(IP1_23_20,     HRX3_D,                 SEL_HSCIF3_3),
-       PINMUX_IPSR_MSEL(IP1_23_20,     VI4_DATA7_B,            SEL_VIN4_1),
-       PINMUX_IPSR_MSEL(IP1_23_20,     IERX_B,                 SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, PWM1_A,                I2C_SEL_3_0,    SEL_PWM1_0),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, HRX3_D,                I2C_SEL_3_0,    SEL_HSCIF3_3),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, VI4_DATA7_B,           I2C_SEL_3_0,    SEL_VIN4_1),
+       PINMUX_IPSR_PHYS_MSEL(IP1_23_20, IERX_B,                I2C_SEL_3_0,    SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS(IP0_23_20,     SCL3,                   I2C_SEL_3_1),
 
-       PINMUX_IPSR_MSEL(IP1_27_24,     PWM2_A,                 SEL_PWM2_0),
-       PINMUX_IPSR_MSEL(IP1_27_24,     HTX3_D,                 SEL_HSCIF3_3),
-       PINMUX_IPSR_MSEL(IP1_27_24,     IETX_B,                 SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS_MSEL(IP1_27_24, PWM2_A,                I2C_SEL_3_0,    SEL_PWM2_0),
+       PINMUX_IPSR_PHYS_MSEL(IP1_27_24, HTX3_D,                I2C_SEL_3_0,    SEL_HSCIF3_3),
+       PINMUX_IPSR_PHYS_MSEL(IP1_27_24, IETX_B,                I2C_SEL_3_0,    SEL_IEBUS_1),
+       PINMUX_IPSR_PHYS(IP1_27_24,     SDA3,                   I2C_SEL_3_1),
 
        PINMUX_IPSR_GPSR(IP1_31_28,     A0),
        PINMUX_IPSR_GPSR(IP1_31_28,     LCDOUT16),
@@ -1115,13 +1123,15 @@ static const u16 pinmux_data[] = {
        PINMUX_IPSR_MSEL(IP11_15_12,    NFDATA15_A,             SEL_NDFC_0),
        PINMUX_IPSR_MSEL(IP11_15_12,    SDA2_B,                 SEL_I2C2_1),
 
-       PINMUX_IPSR_GPSR(IP11_19_16,    SD1_CD),
-       PINMUX_IPSR_MSEL(IP11_19_16,    NFRB_N_A,               SEL_NDFC_0),
-       PINMUX_IPSR_MSEL(IP11_19_16,    SIM0_CLK_B,             SEL_SIMCARD_1),
+       PINMUX_IPSR_MSEL(IP11_19_16,    SD1_CD,                 I2C_SEL_0_0),
+       PINMUX_IPSR_PHYS_MSEL(IP11_19_16, NFRB_N_A,             I2C_SEL_0_0,    SEL_NDFC_0),
+       PINMUX_IPSR_PHYS_MSEL(IP11_19_16, SIM0_CLK_B,           I2C_SEL_0_0,    SEL_SIMCARD_1),
+       PINMUX_IPSR_PHYS(IP11_19_16,    SCL0,                   I2C_SEL_0_1),
 
-       PINMUX_IPSR_GPSR(IP11_23_20,    SD1_WP),
-       PINMUX_IPSR_MSEL(IP11_23_20,    NFCE_N_A,               SEL_NDFC_0),
-       PINMUX_IPSR_MSEL(IP11_23_20,    SIM0_D_B,               SEL_SIMCARD_1),
+       PINMUX_IPSR_MSEL(IP11_23_20,    SD1_WP,                 I2C_SEL_0_0),
+       PINMUX_IPSR_PHYS_MSEL(IP11_23_20, NFCE_N_A,             I2C_SEL_0_0,    SEL_NDFC_0),
+       PINMUX_IPSR_PHYS_MSEL(IP11_23_20, SIM0_D_B,             I2C_SEL_0_0,    SEL_SIMCARD_1),
+       PINMUX_IPSR_PHYS(IP11_23_20,    SDA0,                   I2C_SEL_0_1),
 
        PINMUX_IPSR_GPSR(IP11_27_24,    SCK0),
        PINMUX_IPSR_MSEL(IP11_27_24,    HSCK1_B,                SEL_HSCIF1_1),
@@ -2347,6 +2357,15 @@ static const unsigned int hscif4_data_b_mux[] = {
 };
 
 /* - I2C -------------------------------------------------------------------- */
+static const unsigned int i2c0_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 14), RCAR_GP_PIN(3, 15),
+};
+
+static const unsigned int i2c0_mux[] = {
+       SCL0_MARK, SDA0_MARK,
+};
+
 static const unsigned int i2c1_a_pins[] = {
        /* SDA, SCL */
        RCAR_GP_PIN(5, 11), RCAR_GP_PIN(5, 10),
@@ -2375,6 +2394,25 @@ static const unsigned int i2c2_b_pins[] = {
 static const unsigned int i2c2_b_mux[] = {
        SDA2_B_MARK, SCL2_B_MARK,
 };
+
+static const unsigned int i2c3_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 7), RCAR_GP_PIN(2, 8),
+};
+
+static const unsigned int i2c3_mux[] = {
+       SCL3_MARK, SDA3_MARK,
+};
+
+static const unsigned int i2c5_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 13), RCAR_GP_PIN(2, 14),
+};
+
+static const unsigned int i2c5_mux[] = {
+       SCL5_MARK, SDA5_MARK,
+};
+
 static const unsigned int i2c6_a_pins[] = {
        /* SDA, SCL */
        RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 11),
@@ -4124,7 +4162,7 @@ static const unsigned int vin5_clk_mux[] = {
 };
 
 static const struct {
-       struct sh_pfc_pin_group common[307];
+       struct sh_pfc_pin_group common[310];
        struct sh_pfc_pin_group automotive[33];
 } pinmux_groups = {
        .common = {
@@ -4197,10 +4235,13 @@ static const struct {
                SH_PFC_PIN_GROUP(hscif4_clk),
                SH_PFC_PIN_GROUP(hscif4_ctrl),
                SH_PFC_PIN_GROUP(hscif4_data_b),
+               SH_PFC_PIN_GROUP(i2c0),
                SH_PFC_PIN_GROUP(i2c1_a),
                SH_PFC_PIN_GROUP(i2c1_b),
                SH_PFC_PIN_GROUP(i2c2_a),
                SH_PFC_PIN_GROUP(i2c2_b),
+               SH_PFC_PIN_GROUP(i2c3),
+               SH_PFC_PIN_GROUP(i2c5),
                SH_PFC_PIN_GROUP(i2c6_a),
                SH_PFC_PIN_GROUP(i2c6_b),
                SH_PFC_PIN_GROUP(i2c6_c),
@@ -4409,20 +4450,20 @@ static const struct {
                SH_PFC_PIN_GROUP(usb0),
                SH_PFC_PIN_GROUP(usb1),
                SH_PFC_PIN_GROUP(usb30),
-               VIN_DATA_PIN_GROUP(vin4_data_a, 8),
-               VIN_DATA_PIN_GROUP(vin4_data_a, 10),
-               VIN_DATA_PIN_GROUP(vin4_data_a, 12),
-               VIN_DATA_PIN_GROUP(vin4_data_a, 16),
+               VIN_DATA_PIN_GROUP(vin4_data, 8, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 10, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 12, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 16, _a),
                SH_PFC_PIN_GROUP(vin4_data18_a),
-               VIN_DATA_PIN_GROUP(vin4_data_a, 20),
-               VIN_DATA_PIN_GROUP(vin4_data_a, 24),
-               VIN_DATA_PIN_GROUP(vin4_data_b, 8),
-               VIN_DATA_PIN_GROUP(vin4_data_b, 10),
-               VIN_DATA_PIN_GROUP(vin4_data_b, 12),
-               VIN_DATA_PIN_GROUP(vin4_data_b, 16),
+               VIN_DATA_PIN_GROUP(vin4_data, 20, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 24, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 8, _b),
+               VIN_DATA_PIN_GROUP(vin4_data, 10, _b),
+               VIN_DATA_PIN_GROUP(vin4_data, 12, _b),
+               VIN_DATA_PIN_GROUP(vin4_data, 16, _b),
                SH_PFC_PIN_GROUP(vin4_data18_b),
-               VIN_DATA_PIN_GROUP(vin4_data_b, 20),
-               VIN_DATA_PIN_GROUP(vin4_data_b, 24),
+               VIN_DATA_PIN_GROUP(vin4_data, 20, _b),
+               VIN_DATA_PIN_GROUP(vin4_data, 24, _b),
                SH_PFC_PIN_GROUP(vin4_sync),
                SH_PFC_PIN_GROUP(vin4_field),
                SH_PFC_PIN_GROUP(vin4_clkenb),
@@ -4629,6 +4670,10 @@ static const char * const hscif4_groups[] = {
        "hscif4_data_b",
 };
 
+static const char * const i2c0_groups[] = {
+       "i2c0",
+};
+
 static const char * const i2c1_groups[] = {
        "i2c1_a",
        "i2c1_b",
@@ -4639,6 +4684,14 @@ static const char * const i2c2_groups[] = {
        "i2c2_b",
 };
 
+static const char * const i2c3_groups[] = {
+       "i2c3",
+};
+
+static const char * const i2c5_groups[] = {
+       "i2c5",
+};
+
 static const char * const i2c6_groups[] = {
        "i2c6_a",
        "i2c6_b",
@@ -4967,7 +5020,7 @@ static const char * const vin5_groups[] = {
 };
 
 static const struct {
-       struct sh_pfc_function common[45];
+       struct sh_pfc_function common[48];
        struct sh_pfc_function automotive[6];
 } pinmux_functions = {
        .common = {
@@ -4983,8 +5036,11 @@ static const struct {
                SH_PFC_FUNCTION(hscif2),
                SH_PFC_FUNCTION(hscif3),
                SH_PFC_FUNCTION(hscif4),
+               SH_PFC_FUNCTION(i2c0),
                SH_PFC_FUNCTION(i2c1),
                SH_PFC_FUNCTION(i2c2),
+               SH_PFC_FUNCTION(i2c3),
+               SH_PFC_FUNCTION(i2c5),
                SH_PFC_FUNCTION(i2c6),
                SH_PFC_FUNCTION(intc_ex),
                SH_PFC_FUNCTION(msiof0),
index dfdd982984d4772e24f45e100c3a940514fd8c9f..a7c4882de09e3bd69bba7da47d4b173415765592 100644 (file)
@@ -1784,6 +1784,72 @@ static const unsigned int avb_avtp_capture_b_mux[] = {
        AVB_AVTP_CAPTURE_B_MARK,
 };
 
+/* - CAN ------------------------------------------------------------------ */
+static const unsigned int can0_data_a_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(1, 23),     RCAR_GP_PIN(1, 24),
+};
+
+static const unsigned int can0_data_a_mux[] = {
+       CAN0_TX_A_MARK,         CAN0_RX_A_MARK,
+};
+
+static const unsigned int can0_data_b_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(2, 0),      RCAR_GP_PIN(2, 1),
+};
+
+static const unsigned int can0_data_b_mux[] = {
+       CAN0_TX_B_MARK,         CAN0_RX_B_MARK,
+};
+
+static const unsigned int can1_data_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(1, 22),     RCAR_GP_PIN(1, 26),
+};
+
+static const unsigned int can1_data_mux[] = {
+       CAN1_TX_MARK,           CAN1_RX_MARK,
+};
+
+/* - CAN Clock -------------------------------------------------------------- */
+static const unsigned int can_clk_pins[] = {
+       /* CLK */
+       RCAR_GP_PIN(1, 25),
+};
+
+static const unsigned int can_clk_mux[] = {
+       CAN_CLK_MARK,
+};
+
+/* - CAN FD --------------------------------------------------------------- */
+static const unsigned int canfd0_data_a_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(1, 23),     RCAR_GP_PIN(1, 24),
+};
+
+static const unsigned int canfd0_data_a_mux[] = {
+       CANFD0_TX_A_MARK,       CANFD0_RX_A_MARK,
+};
+
+static const unsigned int canfd0_data_b_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(2, 0),      RCAR_GP_PIN(2, 1),
+};
+
+static const unsigned int canfd0_data_b_mux[] = {
+       CANFD0_TX_B_MARK,       CANFD0_RX_B_MARK,
+};
+
+static const unsigned int canfd1_data_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(1, 22),     RCAR_GP_PIN(1, 26),
+};
+
+static const unsigned int canfd1_data_mux[] = {
+       CANFD1_TX_MARK,         CANFD1_RX_MARK,
+};
+
 /* - DU --------------------------------------------------------------------- */
 static const unsigned int du_rgb666_pins[] = {
        /* R[7:2], G[7:2], B[7:2] */
@@ -3725,6 +3791,216 @@ static const unsigned int usb30_mux[] = {
        USB30_PWEN_MARK, USB30_OVC_MARK,
 };
 
+/* - VIN4 ------------------------------------------------------------------- */
+static const unsigned int vin4_data18_a_pins[] = {
+       RCAR_GP_PIN(0, 10), RCAR_GP_PIN(0, 11),
+       RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 13),
+       RCAR_GP_PIN(0, 14), RCAR_GP_PIN(0, 15),
+       RCAR_GP_PIN(1, 2),  RCAR_GP_PIN(1, 3),
+       RCAR_GP_PIN(1, 4),  RCAR_GP_PIN(1, 5),
+       RCAR_GP_PIN(1, 6),  RCAR_GP_PIN(1, 7),
+       RCAR_GP_PIN(0, 2),  RCAR_GP_PIN(0, 3),
+       RCAR_GP_PIN(0, 4),  RCAR_GP_PIN(0, 5),
+       RCAR_GP_PIN(0, 6),  RCAR_GP_PIN(0, 7),
+};
+
+static const unsigned int vin4_data18_a_mux[] = {
+       VI4_DATA2_A_MARK, VI4_DATA3_A_MARK,
+       VI4_DATA4_A_MARK, VI4_DATA5_A_MARK,
+       VI4_DATA6_A_MARK, VI4_DATA7_A_MARK,
+       VI4_DATA10_MARK,  VI4_DATA11_MARK,
+       VI4_DATA12_MARK,  VI4_DATA13_MARK,
+       VI4_DATA14_MARK,  VI4_DATA15_MARK,
+       VI4_DATA18_MARK,  VI4_DATA19_MARK,
+       VI4_DATA20_MARK,  VI4_DATA21_MARK,
+       VI4_DATA22_MARK,  VI4_DATA23_MARK,
+};
+
+static const union vin_data vin4_data_a_pins = {
+       .data24 = {
+               RCAR_GP_PIN(0, 8),  RCAR_GP_PIN(0, 9),
+               RCAR_GP_PIN(0, 10), RCAR_GP_PIN(0, 11),
+               RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 13),
+               RCAR_GP_PIN(0, 14), RCAR_GP_PIN(0, 15),
+               RCAR_GP_PIN(1, 0),  RCAR_GP_PIN(1, 1),
+               RCAR_GP_PIN(1, 2),  RCAR_GP_PIN(1, 3),
+               RCAR_GP_PIN(1, 4),  RCAR_GP_PIN(1, 5),
+               RCAR_GP_PIN(1, 6),  RCAR_GP_PIN(1, 7),
+               RCAR_GP_PIN(0, 0),  RCAR_GP_PIN(0, 1),
+               RCAR_GP_PIN(0, 2),  RCAR_GP_PIN(0, 3),
+               RCAR_GP_PIN(0, 4),  RCAR_GP_PIN(0, 5),
+               RCAR_GP_PIN(0, 6),  RCAR_GP_PIN(0, 7),
+       },
+};
+
+static const union vin_data vin4_data_a_mux = {
+       .data24 = {
+               VI4_DATA0_A_MARK, VI4_DATA1_A_MARK,
+               VI4_DATA2_A_MARK, VI4_DATA3_A_MARK,
+               VI4_DATA4_A_MARK, VI4_DATA5_A_MARK,
+               VI4_DATA6_A_MARK, VI4_DATA7_A_MARK,
+               VI4_DATA8_MARK,   VI4_DATA9_MARK,
+               VI4_DATA10_MARK,  VI4_DATA11_MARK,
+               VI4_DATA12_MARK,  VI4_DATA13_MARK,
+               VI4_DATA14_MARK,  VI4_DATA15_MARK,
+               VI4_DATA16_MARK,  VI4_DATA17_MARK,
+               VI4_DATA18_MARK,  VI4_DATA19_MARK,
+               VI4_DATA20_MARK,  VI4_DATA21_MARK,
+               VI4_DATA22_MARK,  VI4_DATA23_MARK,
+       },
+};
+
+static const unsigned int vin4_data18_b_pins[] = {
+       RCAR_GP_PIN(2, 2), RCAR_GP_PIN(2, 3),
+       RCAR_GP_PIN(2, 4), RCAR_GP_PIN(2, 5),
+       RCAR_GP_PIN(2, 6), RCAR_GP_PIN(2, 7),
+       RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 3),
+       RCAR_GP_PIN(1, 4), RCAR_GP_PIN(1, 5),
+       RCAR_GP_PIN(1, 6), RCAR_GP_PIN(1, 7),
+       RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 3),
+       RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5),
+       RCAR_GP_PIN(0, 6), RCAR_GP_PIN(0, 7),
+};
+
+static const unsigned int vin4_data18_b_mux[] = {
+       VI4_DATA2_B_MARK, VI4_DATA3_B_MARK,
+       VI4_DATA4_B_MARK, VI4_DATA5_B_MARK,
+       VI4_DATA6_B_MARK, VI4_DATA7_B_MARK,
+       VI4_DATA10_MARK,  VI4_DATA11_MARK,
+       VI4_DATA12_MARK,  VI4_DATA13_MARK,
+       VI4_DATA14_MARK,  VI4_DATA15_MARK,
+       VI4_DATA18_MARK,  VI4_DATA19_MARK,
+       VI4_DATA20_MARK,  VI4_DATA21_MARK,
+       VI4_DATA22_MARK,  VI4_DATA23_MARK,
+};
+
+static const union vin_data vin4_data_b_pins = {
+       .data24 = {
+               RCAR_GP_PIN(2, 0), RCAR_GP_PIN(2, 1),
+               RCAR_GP_PIN(2, 2), RCAR_GP_PIN(2, 3),
+               RCAR_GP_PIN(2, 4), RCAR_GP_PIN(2, 5),
+               RCAR_GP_PIN(2, 6), RCAR_GP_PIN(2, 7),
+               RCAR_GP_PIN(1, 0), RCAR_GP_PIN(1, 1),
+               RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 3),
+               RCAR_GP_PIN(1, 4), RCAR_GP_PIN(1, 5),
+               RCAR_GP_PIN(1, 6), RCAR_GP_PIN(1, 7),
+               RCAR_GP_PIN(0, 0), RCAR_GP_PIN(0, 1),
+               RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 3),
+               RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5),
+               RCAR_GP_PIN(0, 6), RCAR_GP_PIN(0, 7),
+       },
+};
+
+static const union vin_data vin4_data_b_mux = {
+       .data24 = {
+               VI4_DATA0_B_MARK, VI4_DATA1_B_MARK,
+               VI4_DATA2_B_MARK, VI4_DATA3_B_MARK,
+               VI4_DATA4_B_MARK, VI4_DATA5_B_MARK,
+               VI4_DATA6_B_MARK, VI4_DATA7_B_MARK,
+               VI4_DATA8_MARK,   VI4_DATA9_MARK,
+               VI4_DATA10_MARK,  VI4_DATA11_MARK,
+               VI4_DATA12_MARK,  VI4_DATA13_MARK,
+               VI4_DATA14_MARK,  VI4_DATA15_MARK,
+               VI4_DATA16_MARK,  VI4_DATA17_MARK,
+               VI4_DATA18_MARK,  VI4_DATA19_MARK,
+               VI4_DATA20_MARK,  VI4_DATA21_MARK,
+               VI4_DATA22_MARK,  VI4_DATA23_MARK,
+       },
+};
+
+static const unsigned int vin4_sync_pins[] = {
+       /* VSYNC_N, HSYNC_N */
+       RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 18),
+};
+
+static const unsigned int vin4_sync_mux[] = {
+       VI4_HSYNC_N_MARK, VI4_VSYNC_N_MARK,
+};
+
+static const unsigned int vin4_field_pins[] = {
+       RCAR_GP_PIN(1, 16),
+};
+
+static const unsigned int vin4_field_mux[] = {
+       VI4_FIELD_MARK,
+};
+
+static const unsigned int vin4_clkenb_pins[] = {
+       RCAR_GP_PIN(1, 19),
+};
+
+static const unsigned int vin4_clkenb_mux[] = {
+       VI4_CLKENB_MARK,
+};
+
+static const unsigned int vin4_clk_pins[] = {
+       RCAR_GP_PIN(1, 27),
+};
+
+static const unsigned int vin4_clk_mux[] = {
+       VI4_CLK_MARK,
+};
+
+/* - VIN5 ------------------------------------------------------------------- */
+static const union vin_data16 vin5_data_pins = {
+       .data16 = {
+               RCAR_GP_PIN(0, 0), RCAR_GP_PIN(0, 1),
+               RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 3),
+               RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 5),
+               RCAR_GP_PIN(0, 6), RCAR_GP_PIN(0, 7),
+               RCAR_GP_PIN(1, 12), RCAR_GP_PIN(1, 13),
+               RCAR_GP_PIN(1, 14), RCAR_GP_PIN(1, 15),
+               RCAR_GP_PIN(1, 4),  RCAR_GP_PIN(1, 5),
+               RCAR_GP_PIN(1, 6),  RCAR_GP_PIN(1, 7),
+       },
+};
+
+static const union vin_data16 vin5_data_mux = {
+       .data16 = {
+               VI5_DATA0_MARK, VI5_DATA1_MARK,
+               VI5_DATA2_MARK, VI5_DATA3_MARK,
+               VI5_DATA4_MARK, VI5_DATA5_MARK,
+               VI5_DATA6_MARK, VI5_DATA7_MARK,
+               VI5_DATA8_MARK,  VI5_DATA9_MARK,
+               VI5_DATA10_MARK, VI5_DATA11_MARK,
+               VI5_DATA12_MARK, VI5_DATA13_MARK,
+               VI5_DATA14_MARK, VI5_DATA15_MARK,
+       },
+};
+
+static const unsigned int vin5_sync_pins[] = {
+       /* VSYNC_N, HSYNC_N */
+       RCAR_GP_PIN(1, 9), RCAR_GP_PIN(1, 10),
+};
+
+static const unsigned int vin5_sync_mux[] = {
+       VI5_HSYNC_N_MARK, VI5_VSYNC_N_MARK,
+};
+
+static const unsigned int vin5_field_pins[] = {
+       RCAR_GP_PIN(1, 11),
+};
+
+static const unsigned int vin5_field_mux[] = {
+       VI5_FIELD_MARK,
+};
+
+static const unsigned int vin5_clkenb_pins[] = {
+       RCAR_GP_PIN(1, 20),
+};
+
+static const unsigned int vin5_clkenb_mux[] = {
+       VI5_CLKENB_MARK,
+};
+
+static const unsigned int vin5_clk_pins[] = {
+       RCAR_GP_PIN(1, 21),
+};
+
+static const unsigned int vin5_clk_mux[] = {
+       VI5_CLK_MARK,
+};
+
 static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(audio_clk_a_a),
        SH_PFC_PIN_GROUP(audio_clk_a_b),
@@ -3754,6 +4030,13 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(avb_avtp_capture_a),
        SH_PFC_PIN_GROUP(avb_avtp_match_b),
        SH_PFC_PIN_GROUP(avb_avtp_capture_b),
+       SH_PFC_PIN_GROUP(can0_data_a),
+       SH_PFC_PIN_GROUP(can0_data_b),
+       SH_PFC_PIN_GROUP(can1_data),
+       SH_PFC_PIN_GROUP(can_clk),
+       SH_PFC_PIN_GROUP(canfd0_data_a),
+       SH_PFC_PIN_GROUP(canfd0_data_b),
+       SH_PFC_PIN_GROUP(canfd1_data),
        SH_PFC_PIN_GROUP(du_rgb666),
        SH_PFC_PIN_GROUP(du_rgb888),
        SH_PFC_PIN_GROUP(du_clk_out_0),
@@ -4000,6 +4283,32 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(usb0),
        SH_PFC_PIN_GROUP(usb1),
        SH_PFC_PIN_GROUP(usb30),
+       VIN_DATA_PIN_GROUP(vin4_data, 8, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 10, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 12, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 16, _a),
+       SH_PFC_PIN_GROUP(vin4_data18_a),
+       VIN_DATA_PIN_GROUP(vin4_data, 20, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 24, _a),
+       VIN_DATA_PIN_GROUP(vin4_data, 8, _b),
+       VIN_DATA_PIN_GROUP(vin4_data, 10, _b),
+       VIN_DATA_PIN_GROUP(vin4_data, 12, _b),
+       VIN_DATA_PIN_GROUP(vin4_data, 16, _b),
+       SH_PFC_PIN_GROUP(vin4_data18_b),
+       VIN_DATA_PIN_GROUP(vin4_data, 20, _b),
+       VIN_DATA_PIN_GROUP(vin4_data, 24, _b),
+       SH_PFC_PIN_GROUP(vin4_sync),
+       SH_PFC_PIN_GROUP(vin4_field),
+       SH_PFC_PIN_GROUP(vin4_clkenb),
+       SH_PFC_PIN_GROUP(vin4_clk),
+       VIN_DATA_PIN_GROUP(vin5_data, 8),
+       VIN_DATA_PIN_GROUP(vin5_data, 10),
+       VIN_DATA_PIN_GROUP(vin5_data, 12),
+       VIN_DATA_PIN_GROUP(vin5_data, 16),
+       SH_PFC_PIN_GROUP(vin5_sync),
+       SH_PFC_PIN_GROUP(vin5_field),
+       SH_PFC_PIN_GROUP(vin5_clkenb),
+       SH_PFC_PIN_GROUP(vin5_clk),
 };
 
 static const char * const audio_clk_groups[] = {
@@ -4036,6 +4345,28 @@ static const char * const avb_groups[] = {
        "avb_avtp_capture_b",
 };
 
+static const char * const can0_groups[] = {
+       "can0_data_a",
+       "can0_data_b",
+};
+
+static const char * const can1_groups[] = {
+       "can1_data",
+};
+
+static const char * const can_clk_groups[] = {
+       "can_clk",
+};
+
+static const char * const canfd0_groups[] = {
+       "canfd0_data_a",
+       "canfd0_data_b",
+};
+
+static const char * const canfd1_groups[] = {
+       "canfd1_data",
+};
+
 static const char * const du_groups[] = {
        "du_rgb666",
        "du_rgb888",
@@ -4392,9 +4723,46 @@ static const char * const usb30_groups[] = {
        "usb30",
 };
 
+static const char * const vin4_groups[] = {
+       "vin4_data8_a",
+       "vin4_data10_a",
+       "vin4_data12_a",
+       "vin4_data16_a",
+       "vin4_data18_a",
+       "vin4_data20_a",
+       "vin4_data24_a",
+       "vin4_data8_b",
+       "vin4_data10_b",
+       "vin4_data12_b",
+       "vin4_data16_b",
+       "vin4_data18_b",
+       "vin4_data20_b",
+       "vin4_data24_b",
+       "vin4_sync",
+       "vin4_field",
+       "vin4_clkenb",
+       "vin4_clk",
+};
+
+static const char * const vin5_groups[] = {
+       "vin5_data8",
+       "vin5_data10",
+       "vin5_data12",
+       "vin5_data16",
+       "vin5_sync",
+       "vin5_field",
+       "vin5_clkenb",
+       "vin5_clk",
+};
+
 static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(audio_clk),
        SH_PFC_FUNCTION(avb),
+       SH_PFC_FUNCTION(can0),
+       SH_PFC_FUNCTION(can1),
+       SH_PFC_FUNCTION(can_clk),
+       SH_PFC_FUNCTION(canfd0),
+       SH_PFC_FUNCTION(canfd1),
        SH_PFC_FUNCTION(du),
        SH_PFC_FUNCTION(hscif0),
        SH_PFC_FUNCTION(hscif1),
@@ -4432,6 +4800,8 @@ static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(usb0),
        SH_PFC_FUNCTION(usb1),
        SH_PFC_FUNCTION(usb30),
+       SH_PFC_FUNCTION(vin4),
+       SH_PFC_FUNCTION(vin5),
 };
 
 static const struct pinmux_cfg_reg pinmux_config_regs[] = {
index 44f9eefc86b5d1551d53a074cbbbbfc3d70276a2..4a7ab84b366be9867590fa1b2efaa04e3ce28f4f 100644 (file)
@@ -1382,6 +1382,56 @@ static const unsigned int pwm4_b_mux[] = {
        PWM4_B_MARK,
 };
 
+/* - QSPI0 ------------------------------------------------------------------ */
+static const unsigned int qspi0_ctrl_pins[] = {
+       /* SPCLK, SSL */
+       RCAR_GP_PIN(5, 0), RCAR_GP_PIN(5, 5),
+};
+static const unsigned int qspi0_ctrl_mux[] = {
+       QSPI0_SPCLK_MARK, QSPI0_SSL_MARK,
+};
+static const unsigned int qspi0_data2_pins[] = {
+       /* MOSI_IO0, MISO_IO1 */
+       RCAR_GP_PIN(5, 1), RCAR_GP_PIN(5, 2),
+};
+static const unsigned int qspi0_data2_mux[] = {
+       QSPI0_MOSI_IO0_MARK, QSPI0_MISO_IO1_MARK,
+};
+static const unsigned int qspi0_data4_pins[] = {
+       /* MOSI_IO0, MISO_IO1, IO2, IO3 */
+       RCAR_GP_PIN(5, 1), RCAR_GP_PIN(5, 2),
+       RCAR_GP_PIN(5, 3), RCAR_GP_PIN(5, 4),
+};
+static const unsigned int qspi0_data4_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(5, 6), RCAR_GP_PIN(5, 11),
+};
+static const unsigned int qspi1_ctrl_mux[] = {
+       QSPI1_SPCLK_MARK, QSPI1_SSL_MARK,
+};
+static const unsigned int qspi1_data2_pins[] = {
+       /* MOSI_IO0, MISO_IO1 */
+       RCAR_GP_PIN(5, 7), RCAR_GP_PIN(5, 8),
+};
+static const unsigned int qspi1_data2_mux[] = {
+       QSPI1_MOSI_IO0_MARK, QSPI1_MISO_IO1_MARK,
+};
+static const unsigned int qspi1_data4_pins[] = {
+       /* MOSI_IO0, MISO_IO1, IO2, IO3 */
+       RCAR_GP_PIN(5, 7), RCAR_GP_PIN(5, 8),
+       RCAR_GP_PIN(5, 9), RCAR_GP_PIN(5, 10),
+};
+static const unsigned int qspi1_data4_mux[] = {
+       QSPI1_MOSI_IO0_MARK, QSPI1_MISO_IO1_MARK,
+       QSPI1_IO2_MARK, QSPI1_IO3_MARK
+};
+
 /* - SCIF Clock ------------------------------------------------------------- */
 static const unsigned int scif_clk_a_pins[] = {
        /* SCIF_CLK */
@@ -1756,6 +1806,12 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(pwm3_b),
        SH_PFC_PIN_GROUP(pwm4_a),
        SH_PFC_PIN_GROUP(pwm4_b),
+       SH_PFC_PIN_GROUP(qspi0_ctrl),
+       SH_PFC_PIN_GROUP(qspi0_data2),
+       SH_PFC_PIN_GROUP(qspi0_data4),
+       SH_PFC_PIN_GROUP(qspi1_ctrl),
+       SH_PFC_PIN_GROUP(qspi1_data2),
+       SH_PFC_PIN_GROUP(qspi1_data4),
        SH_PFC_PIN_GROUP(scif_clk_a),
        SH_PFC_PIN_GROUP(scif_clk_b),
        SH_PFC_PIN_GROUP(scif0_data),
@@ -1950,6 +2006,18 @@ static const char * const pwm4_groups[] = {
        "pwm4_b",
 };
 
+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 scif_clk_groups[] = {
        "scif_clk_a",
        "scif_clk_b",
@@ -2033,6 +2101,8 @@ static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(pwm2),
        SH_PFC_FUNCTION(pwm3),
        SH_PFC_FUNCTION(pwm4),
+       SH_PFC_FUNCTION(qspi0),
+       SH_PFC_FUNCTION(qspi1),
        SH_PFC_FUNCTION(scif_clk),
        SH_PFC_FUNCTION(scif0),
        SH_PFC_FUNCTION(scif1),
@@ -2351,7 +2421,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
 #define F_(x, y)       x,
 #define FM(x)          FN_##x,
        { PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
-                            4, 4, 4, 4,
+                            4, 4, 4, 4, 4,
                             1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) {
                /* RESERVED 31, 30, 29, 28 */
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
index 3f6967331f64695f526ebdf6ec476143db2f1b09..8bef24502f0c608d5bd18c5b668978b861158067 100644 (file)
@@ -1660,6 +1660,56 @@ static const unsigned int pwm4_b_mux[] = {
        PWM4_B_MARK,
 };
 
+/* - QSPI0 ------------------------------------------------------------------ */
+static const unsigned int qspi0_ctrl_pins[] = {
+       /* SPCLK, SSL */
+       RCAR_GP_PIN(5, 0), RCAR_GP_PIN(5, 5),
+};
+static const unsigned int qspi0_ctrl_mux[] = {
+       QSPI0_SPCLK_MARK, QSPI0_SSL_MARK,
+};
+static const unsigned int qspi0_data2_pins[] = {
+       /* MOSI_IO0, MISO_IO1 */
+       RCAR_GP_PIN(5, 1), RCAR_GP_PIN(5, 2),
+};
+static const unsigned int qspi0_data2_mux[] = {
+       QSPI0_MOSI_IO0_MARK, QSPI0_MISO_IO1_MARK,
+};
+static const unsigned int qspi0_data4_pins[] = {
+       /* MOSI_IO0, MISO_IO1, IO2, IO3 */
+       RCAR_GP_PIN(5, 1), RCAR_GP_PIN(5, 2),
+       RCAR_GP_PIN(5, 3), RCAR_GP_PIN(5, 4),
+};
+static const unsigned int qspi0_data4_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(5, 6), RCAR_GP_PIN(5, 11),
+};
+static const unsigned int qspi1_ctrl_mux[] = {
+       QSPI1_SPCLK_MARK, QSPI1_SSL_MARK,
+};
+static const unsigned int qspi1_data2_pins[] = {
+       /* MOSI_IO0, MISO_IO1 */
+       RCAR_GP_PIN(5, 7), RCAR_GP_PIN(5, 8),
+};
+static const unsigned int qspi1_data2_mux[] = {
+       QSPI1_MOSI_IO0_MARK, QSPI1_MISO_IO1_MARK,
+};
+static const unsigned int qspi1_data4_pins[] = {
+       /* MOSI_IO0, MISO_IO1, IO2, IO3 */
+       RCAR_GP_PIN(5, 7), RCAR_GP_PIN(5, 8),
+       RCAR_GP_PIN(5, 9), RCAR_GP_PIN(5, 10),
+};
+static const unsigned int qspi1_data4_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 */
@@ -2092,6 +2142,12 @@ static const struct sh_pfc_pin_group pinmux_groups[] = {
        SH_PFC_PIN_GROUP(pwm3_b),
        SH_PFC_PIN_GROUP(pwm4_a),
        SH_PFC_PIN_GROUP(pwm4_b),
+       SH_PFC_PIN_GROUP(qspi0_ctrl),
+       SH_PFC_PIN_GROUP(qspi0_data2),
+       SH_PFC_PIN_GROUP(qspi0_data4),
+       SH_PFC_PIN_GROUP(qspi1_ctrl),
+       SH_PFC_PIN_GROUP(qspi1_data2),
+       SH_PFC_PIN_GROUP(qspi1_data4),
        SH_PFC_PIN_GROUP(scif0_data),
        SH_PFC_PIN_GROUP(scif0_clk),
        SH_PFC_PIN_GROUP(scif0_ctrl),
@@ -2316,6 +2372,18 @@ static const char * const pwm4_groups[] = {
        "pwm4_b",
 };
 
+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",
@@ -2412,6 +2480,8 @@ static const struct sh_pfc_function pinmux_functions[] = {
        SH_PFC_FUNCTION(pwm2),
        SH_PFC_FUNCTION(pwm3),
        SH_PFC_FUNCTION(pwm4),
+       SH_PFC_FUNCTION(qspi0),
+       SH_PFC_FUNCTION(qspi1),
        SH_PFC_FUNCTION(scif0),
        SH_PFC_FUNCTION(scif1),
        SH_PFC_FUNCTION(scif3),
@@ -2751,7 +2821,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
 #define F_(x, y)       x,
 #define FM(x)          FN_##x,
        { PINMUX_CFG_REG_VAR("MOD_SEL0", 0xe6060500, 32,
-                            4, 4, 4, 4,
+                            4, 4, 4, 4, 4,
                             1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) {
                /* RESERVED 31, 30, 29, 28 */
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
index 1fdafa48479cc4af5601ea9fe358cac5426387c9..e40908dc37e06264f48b61475d71d3e4092ba550 100644 (file)
        PORT_GP_CFG_18(0, fn, sfx, CFG_FLAGS), \
        PORT_GP_CFG_23(1, fn, sfx, CFG_FLAGS), \
        PORT_GP_CFG_26(2, fn, sfx, CFG_FLAGS), \
-       PORT_GP_CFG_16(3, fn, sfx, CFG_FLAGS), \
-       PORT_GP_CFG_11(4, fn, sfx, CFG_FLAGS), \
+       PORT_GP_CFG_12(3, fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE), \
+       PORT_GP_CFG_1(3, 12, fn, sfx, CFG_FLAGS), \
+       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_11(4, fn, sfx, CFG_FLAGS | SH_PFC_PIN_CFG_IO_VOLTAGE), \
        PORT_GP_CFG_20(5, fn, sfx, CFG_FLAGS), \
        PORT_GP_CFG_18(6, fn, sfx, CFG_FLAGS)
 /*
@@ -395,7 +399,7 @@ FM(IP12_31_28)      IP12_31_28      FM(IP13_31_28)  IP13_31_28      FM(IP14_31_28)  IP14_31_28      FM
 #define MOD_SEL0_24            FM(SEL_HSCIF0_0)                FM(SEL_HSCIF0_1)
 #define MOD_SEL0_23            FM(SEL_HSCIF1_0)                FM(SEL_HSCIF1_1)
 #define MOD_SEL0_22            FM(SEL_HSCIF2_0)                FM(SEL_HSCIF2_1)
-#define MOD_SEL0_21_20         FM(SEL_I2C1_0)                  FM(SEL_I2C1_1)                  FM(SEL_I2C1_2)                  FM(SEL_I2C1_3)          FM(SEL_I2C1_4)          F_(0, 0)        F_(0, 0)        F_(0, 0)
+#define MOD_SEL0_21_20         FM(SEL_I2C1_0)                  FM(SEL_I2C1_1)                  FM(SEL_I2C1_2)                  FM(SEL_I2C1_3)
 #define MOD_SEL0_19_18_17      FM(SEL_I2C2_0)                  FM(SEL_I2C2_1)                  FM(SEL_I2C2_2)                  FM(SEL_I2C2_3)          FM(SEL_I2C2_4)          F_(0, 0)        F_(0, 0)        F_(0, 0)
 #define MOD_SEL0_16            FM(SEL_NDFC_0)                  FM(SEL_NDFC_1)
 #define MOD_SEL0_15            FM(SEL_PWM0_0)                  FM(SEL_PWM0_1)
@@ -1299,6 +1303,169 @@ static const struct sh_pfc_pin pinmux_pins[] = {
        SH_PFC_PIN_NAMED_CFG(ROW_GROUP_A('D'), 3, PRESETOUT_N, CFG_FLAGS),
 };
 
+/* - AUDIO CLOCK ------------------------------------------------------------ */
+static const unsigned int audio_clk_a_pins[] = {
+       /* CLK A */
+       RCAR_GP_PIN(6, 8),
+};
+
+static const unsigned int audio_clk_a_mux[] = {
+       AUDIO_CLKA_MARK,
+};
+
+static const unsigned int audio_clk_b_a_pins[] = {
+       /* CLK B_A */
+       RCAR_GP_PIN(5, 7),
+};
+
+static const unsigned int audio_clk_b_a_mux[] = {
+       AUDIO_CLKB_A_MARK,
+};
+
+static const unsigned int audio_clk_b_b_pins[] = {
+       /* CLK B_B */
+       RCAR_GP_PIN(6, 7),
+};
+
+static const unsigned int audio_clk_b_b_mux[] = {
+       AUDIO_CLKB_B_MARK,
+};
+
+static const unsigned int audio_clk_b_c_pins[] = {
+       /* CLK B_C */
+       RCAR_GP_PIN(6, 13),
+};
+
+static const unsigned int audio_clk_b_c_mux[] = {
+       AUDIO_CLKB_C_MARK,
+};
+
+static const unsigned int audio_clk_c_a_pins[] = {
+       /* CLK C_A */
+       RCAR_GP_PIN(5, 16),
+};
+
+static const unsigned int audio_clk_c_a_mux[] = {
+       AUDIO_CLKC_A_MARK,
+};
+
+static const unsigned int audio_clk_c_b_pins[] = {
+       /* CLK C_B */
+       RCAR_GP_PIN(6, 3),
+};
+
+static const unsigned int audio_clk_c_b_mux[] = {
+       AUDIO_CLKC_B_MARK,
+};
+
+static const unsigned int audio_clk_c_c_pins[] = {
+       /* CLK C_C */
+       RCAR_GP_PIN(6, 14),
+};
+
+static const unsigned int audio_clk_c_c_mux[] = {
+       AUDIO_CLKC_C_MARK,
+};
+
+static const unsigned int audio_clkout_a_pins[] = {
+       /* CLKOUT_A */
+       RCAR_GP_PIN(5, 3),
+};
+
+static const unsigned int audio_clkout_a_mux[] = {
+       AUDIO_CLKOUT_A_MARK,
+};
+
+static const unsigned int audio_clkout_b_pins[] = {
+       /* CLKOUT_B */
+       RCAR_GP_PIN(5, 13),
+};
+
+static const unsigned int audio_clkout_b_mux[] = {
+       AUDIO_CLKOUT_B_MARK,
+};
+
+static const unsigned int audio_clkout1_a_pins[] = {
+       /* CLKOUT1_A */
+       RCAR_GP_PIN(5, 4),
+};
+
+static const unsigned int audio_clkout1_a_mux[] = {
+       AUDIO_CLKOUT1_A_MARK,
+};
+
+static const unsigned int audio_clkout1_b_pins[] = {
+       /* CLKOUT1_B */
+       RCAR_GP_PIN(5, 5),
+};
+
+static const unsigned int audio_clkout1_b_mux[] = {
+       AUDIO_CLKOUT1_B_MARK,
+};
+
+static const unsigned int audio_clkout1_c_pins[] = {
+       /* CLKOUT1_C */
+       RCAR_GP_PIN(6, 7),
+};
+
+static const unsigned int audio_clkout1_c_mux[] = {
+       AUDIO_CLKOUT1_C_MARK,
+};
+
+static const unsigned int audio_clkout2_a_pins[] = {
+       /* CLKOUT2_A */
+       RCAR_GP_PIN(5, 8),
+};
+
+static const unsigned int audio_clkout2_a_mux[] = {
+       AUDIO_CLKOUT2_A_MARK,
+};
+
+static const unsigned int audio_clkout2_b_pins[] = {
+       /* CLKOUT2_B */
+       RCAR_GP_PIN(6, 4),
+};
+
+static const unsigned int audio_clkout2_b_mux[] = {
+       AUDIO_CLKOUT2_B_MARK,
+};
+
+static const unsigned int audio_clkout2_c_pins[] = {
+       /* CLKOUT2_C */
+       RCAR_GP_PIN(6, 15),
+};
+
+static const unsigned int audio_clkout2_c_mux[] = {
+       AUDIO_CLKOUT2_C_MARK,
+};
+
+static const unsigned int audio_clkout3_a_pins[] = {
+       /* CLKOUT3_A */
+       RCAR_GP_PIN(5, 9),
+};
+
+static const unsigned int audio_clkout3_a_mux[] = {
+       AUDIO_CLKOUT3_A_MARK,
+};
+
+static const unsigned int audio_clkout3_b_pins[] = {
+       /* CLKOUT3_B */
+       RCAR_GP_PIN(5, 6),
+};
+
+static const unsigned int audio_clkout3_b_mux[] = {
+       AUDIO_CLKOUT3_B_MARK,
+};
+
+static const unsigned int audio_clkout3_c_pins[] = {
+       /* CLKOUT3_C */
+       RCAR_GP_PIN(6, 16),
+};
+
+static const unsigned int audio_clkout3_c_mux[] = {
+       AUDIO_CLKOUT3_C_MARK,
+};
+
 /* - EtherAVB --------------------------------------------------------------- */
 static const unsigned int avb_link_pins[] = {
        /* AVB_LINK */
@@ -1371,6 +1538,54 @@ static const unsigned int avb_avtp_capture_a_mux[] = {
        AVB_AVTP_CAPTURE_A_MARK,
 };
 
+/* - CAN ------------------------------------------------------------------ */
+static const unsigned int can0_data_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 13),
+};
+
+static const unsigned int can0_data_mux[] = {
+       CAN0_TX_MARK, CAN0_RX_MARK,
+};
+
+static const unsigned int can1_data_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 7),
+};
+
+static const unsigned int can1_data_mux[] = {
+       CAN1_TX_MARK, CAN1_RX_MARK,
+};
+
+/* - CAN Clock -------------------------------------------------------------- */
+static const unsigned int can_clk_pins[] = {
+       /* CLK */
+       RCAR_GP_PIN(0, 14),
+};
+
+static const unsigned int can_clk_mux[] = {
+       CAN_CLK_MARK,
+};
+
+/* - CAN FD --------------------------------------------------------------- */
+static const unsigned int canfd0_data_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 13),
+};
+
+static const unsigned int canfd0_data_mux[] = {
+       CANFD0_TX_MARK, CANFD0_RX_MARK,
+};
+
+static const unsigned int canfd1_data_pins[] = {
+       /* TX, RX */
+       RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 7),
+};
+
+static const unsigned int canfd1_data_mux[] = {
+       CANFD1_TX_MARK, CANFD1_RX_MARK,
+};
+
 /* - DU --------------------------------------------------------------------- */
 static const unsigned int du_rgb666_pins[] = {
        /* R[7:2], G[7:2], B[7:2] */
@@ -1459,194 +1674,478 @@ static const unsigned int du_disp_mux[] = {
        DU_DISP_MARK,
 };
 
-/* - I2C -------------------------------------------------------------------- */
-static const unsigned int i2c1_a_pins[] = {
-       /* SCL, SDA */
+/* - HSCIF0 --------------------------------------------------*/
+static const unsigned int hscif0_data_a_pins[] = {
+       /* RX, TX */
        RCAR_GP_PIN(5, 8), RCAR_GP_PIN(5, 9),
 };
 
-static const unsigned int i2c1_a_mux[] = {
-       SCL1_A_MARK, SDA1_A_MARK,
+static const unsigned int hscif0_data_a_mux[] = {
+       HRX0_A_MARK, HTX0_A_MARK,
 };
 
-static const unsigned int i2c1_b_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(5, 17), RCAR_GP_PIN(5, 18),
+static const unsigned int hscif0_clk_a_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(5, 7),
 };
 
-static const unsigned int i2c1_b_mux[] = {
-       SCL1_B_MARK, SDA1_B_MARK,
+static const unsigned int hscif0_clk_a_mux[] = {
+       HSCK0_A_MARK,
 };
 
-static const unsigned int i2c1_c_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(3, 0), RCAR_GP_PIN(3, 5),
+static const unsigned int hscif0_ctrl_a_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(5, 15), RCAR_GP_PIN(5, 14),
 };
 
-static const unsigned int i2c1_c_mux[] = {
-       SCL1_C_MARK, SDA1_C_MARK,
+static const unsigned int hscif0_ctrl_a_mux[] = {
+       HRTS0_N_A_MARK, HCTS0_N_A_MARK,
 };
 
-static const unsigned int i2c1_d_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(6, 16), RCAR_GP_PIN(6, 15),
+static const unsigned int hscif0_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(6, 11), RCAR_GP_PIN(6, 12),
 };
 
-static const unsigned int i2c1_d_mux[] = {
-       SCL1_D_MARK, SDA1_D_MARK,
+static const unsigned int hscif0_data_b_mux[] = {
+       HRX0_B_MARK, HTX0_B_MARK,
 };
 
-static const unsigned int i2c2_a_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(5, 4), RCAR_GP_PIN(5, 0),
+static const unsigned int hscif0_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(6, 13),
 };
 
-static const unsigned int i2c2_a_mux[] = {
-       SCL2_A_MARK, SDA2_A_MARK,
+static const unsigned int hscif0_clk_b_mux[] = {
+       HSCK0_B_MARK,
 };
 
-static const unsigned int i2c2_b_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(3, 12), RCAR_GP_PIN(3, 13),
+/* - HSCIF1 ------------------------------------------------- */
+static const unsigned int hscif1_data_a_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(5, 1), RCAR_GP_PIN(5, 2),
 };
 
-static const unsigned int i2c2_b_mux[] = {
-       SCL2_B_MARK, SDA2_B_MARK,
+static const unsigned int hscif1_data_a_mux[] = {
+       HRX1_A_MARK, HTX1_A_MARK,
 };
 
-static const unsigned int i2c2_c_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(3, 4), RCAR_GP_PIN(3, 3),
+static const unsigned int hscif1_clk_a_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(5, 0),
 };
 
-static const unsigned int i2c2_c_mux[] = {
-       SCL2_C_MARK, SDA2_C_MARK,
+static const unsigned int hscif1_clk_a_mux[] = {
+       HSCK1_A_MARK,
 };
 
-static const unsigned int i2c2_d_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(6, 11), RCAR_GP_PIN(6, 12),
+static const unsigned int hscif1_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(3, 1), RCAR_GP_PIN(3, 2),
 };
 
-static const unsigned int i2c2_d_mux[] = {
-       SCL2_D_MARK, SDA2_D_MARK,
+static const unsigned int hscif1_data_b_mux[] = {
+       HRX1_B_MARK, HTX1_B_MARK,
 };
 
-static const unsigned int i2c2_e_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(3, 5), RCAR_GP_PIN(3, 0),
+static const unsigned int hscif1_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(3, 0),
 };
 
-static const unsigned int i2c2_e_mux[] = {
-       SCL2_E_MARK, SDA2_E_MARK,
+static const unsigned int hscif1_clk_b_mux[] = {
+       HSCK1_B_MARK,
 };
 
-static const unsigned int i2c4_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(0, 16), RCAR_GP_PIN(0, 17),
+static const unsigned int hscif1_ctrl_b_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(3, 4), RCAR_GP_PIN(3, 3),
 };
 
-static const unsigned int i2c4_mux[] = {
-       SCL4_MARK, SDA4_MARK,
+static const unsigned int hscif1_ctrl_b_mux[] = {
+       HRTS1_N_B_MARK, HCTS1_N_B_MARK,
 };
 
-static const unsigned int i2c5_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(1, 21), RCAR_GP_PIN(1, 22),
+/* - HSCIF2 ------------------------------------------------- */
+static const unsigned int hscif2_data_a_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(5, 14), RCAR_GP_PIN(5, 15),
 };
 
-static const unsigned int i2c5_mux[] = {
-       SCL5_MARK, SDA5_MARK,
+static const unsigned int hscif2_data_a_mux[] = {
+       HRX2_A_MARK, HTX2_A_MARK,
 };
 
-static const unsigned int i2c6_a_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(1, 11), RCAR_GP_PIN(1, 8),
+static const unsigned int hscif2_clk_a_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(6, 14),
 };
 
-static const unsigned int i2c6_a_mux[] = {
-       SCL6_A_MARK, SDA6_A_MARK,
+static const unsigned int hscif2_clk_a_mux[] = {
+       HSCK2_A_MARK,
 };
 
-static const unsigned int i2c6_b_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 1),
+static const unsigned int hscif2_ctrl_a_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(6, 16), RCAR_GP_PIN(6, 15),
 };
 
-static const unsigned int i2c6_b_mux[] = {
-       SCL6_B_MARK, SDA6_B_MARK,
+static const unsigned int hscif2_ctrl_a_mux[] = {
+       HRTS2_N_A_MARK, HCTS2_N_A_MARK,
 };
 
-static const unsigned int i2c7_a_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(2, 24), RCAR_GP_PIN(2, 25),
+static const unsigned int hscif2_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(5, 5), RCAR_GP_PIN(5, 6),
 };
 
-static const unsigned int i2c7_a_mux[] = {
-       SCL7_A_MARK, SDA7_A_MARK,
+static const unsigned int hscif2_data_b_mux[] = {
+       HRX2_B_MARK, HTX2_B_MARK,
 };
 
-static const unsigned int i2c7_b_pins[] = {
-       /* SCL, SDA */
-       RCAR_GP_PIN(0, 13), RCAR_GP_PIN(0, 14),
+/* - HSCIF3 ------------------------------------------------*/
+static const unsigned int hscif3_data_a_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(0, 14), RCAR_GP_PIN(0, 15),
 };
 
-static const unsigned int i2c7_b_mux[] = {
-       SCL7_B_MARK, SDA7_B_MARK,
+static const unsigned int hscif3_data_a_mux[] = {
+       HRX3_A_MARK, HTX3_A_MARK,
 };
 
-/* - INTC-EX ---------------------------------------------------------------- */
-static const unsigned int intc_ex_irq0_pins[] = {
-       /* IRQ0 */
-       RCAR_GP_PIN(1, 0),
-};
-static const unsigned int intc_ex_irq0_mux[] = {
-       IRQ0_MARK,
-};
-static const unsigned int intc_ex_irq1_pins[] = {
-       /* IRQ1 */
-       RCAR_GP_PIN(1, 1),
+static const unsigned int hscif3_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 6),
 };
-static const unsigned int intc_ex_irq1_mux[] = {
-       IRQ1_MARK,
+
+static const unsigned int hscif3_data_b_mux[] = {
+       HRX3_B_MARK, HTX3_B_MARK,
 };
-static const unsigned int intc_ex_irq2_pins[] = {
-       /* IRQ2 */
-       RCAR_GP_PIN(1, 2),
+
+static const unsigned int hscif3_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(0, 4),
 };
-static const unsigned int intc_ex_irq2_mux[] = {
-       IRQ2_MARK,
+
+static const unsigned int hscif3_clk_b_mux[] = {
+       HSCK3_B_MARK,
 };
-static const unsigned int intc_ex_irq3_pins[] = {
-       /* IRQ3 */
-       RCAR_GP_PIN(1, 9),
+
+static const unsigned int hscif3_data_c_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(2, 10), RCAR_GP_PIN(2, 9),
 };
-static const unsigned int intc_ex_irq3_mux[] = {
-       IRQ3_MARK,
+
+static const unsigned int hscif3_data_c_mux[] = {
+       HRX3_C_MARK, HTX3_C_MARK,
 };
-static const unsigned int intc_ex_irq4_pins[] = {
-       /* IRQ4 */
-       RCAR_GP_PIN(1, 10),
+
+static const unsigned int hscif3_clk_c_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(2, 11),
 };
-static const unsigned int intc_ex_irq4_mux[] = {
-       IRQ4_MARK,
+
+static const unsigned int hscif3_clk_c_mux[] = {
+       HSCK3_C_MARK,
 };
-static const unsigned int intc_ex_irq5_pins[] = {
-       /* IRQ5 */
-       RCAR_GP_PIN(0, 7),
+
+static const unsigned int hscif3_ctrl_c_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(2, 13), RCAR_GP_PIN(2, 12),
 };
-static const unsigned int intc_ex_irq5_mux[] = {
-       IRQ5_MARK,
+
+static const unsigned int hscif3_ctrl_c_mux[] = {
+       HRTS3_N_C_MARK, HCTS3_N_C_MARK,
 };
 
-/* - MSIOF0 ----------------------------------------------------------------- */
-static const unsigned int msiof0_clk_pins[] = {
-       /* SCK */
-       RCAR_GP_PIN(5, 10),
+static const unsigned int hscif3_data_d_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(1, 0), RCAR_GP_PIN(1, 3),
 };
 
-static const unsigned int msiof0_clk_mux[] = {
-       MSIOF0_SCK_MARK,
+static const unsigned int hscif3_data_d_mux[] = {
+       HRX3_D_MARK, HTX3_D_MARK,
+};
+
+static const unsigned int hscif3_data_e_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(0, 9), RCAR_GP_PIN(0, 10),
+};
+
+static const unsigned int hscif3_data_e_mux[] = {
+       HRX3_E_MARK, HTX3_E_MARK,
+};
+
+static const unsigned int hscif3_ctrl_e_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(0, 11), RCAR_GP_PIN(0, 8),
+};
+
+static const unsigned int hscif3_ctrl_e_mux[] = {
+       HRTS3_N_E_MARK, HCTS3_N_E_MARK,
+};
+
+/* - HSCIF4 -------------------------------------------------- */
+static const unsigned int hscif4_data_a_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(2, 4), RCAR_GP_PIN(2, 3),
+};
+
+static const unsigned int hscif4_data_a_mux[] = {
+       HRX4_A_MARK, HTX4_A_MARK,
+};
+
+static const unsigned int hscif4_clk_a_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(2, 0),
+};
+
+static const unsigned int hscif4_clk_a_mux[] = {
+       HSCK4_A_MARK,
+};
+
+static const unsigned int hscif4_ctrl_a_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(2, 2), RCAR_GP_PIN(2, 1),
+};
+
+static const unsigned int hscif4_ctrl_a_mux[] = {
+       HRTS4_N_A_MARK, HCTS4_N_A_MARK,
+};
+
+static const unsigned int hscif4_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(2, 8), RCAR_GP_PIN(2, 7),
+};
+
+static const unsigned int hscif4_data_b_mux[] = {
+       HRX4_B_MARK, HTX4_B_MARK,
+};
+
+static const unsigned int hscif4_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(2, 6),
+};
+
+static const unsigned int hscif4_clk_b_mux[] = {
+       HSCK4_B_MARK,
+};
+
+static const unsigned int hscif4_data_c_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 11),
+};
+
+static const unsigned int hscif4_data_c_mux[] = {
+       HRX4_C_MARK, HTX4_C_MARK,
+};
+
+static const unsigned int hscif4_data_d_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 14),
+};
+
+static const unsigned int hscif4_data_d_mux[] = {
+       HRX4_D_MARK, HTX4_D_MARK,
+};
+
+static const unsigned int hscif4_data_e_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(1, 18), RCAR_GP_PIN(1, 19),
+};
+
+static const unsigned int hscif4_data_e_mux[] = {
+       HRX4_E_MARK, HTX4_E_MARK,
+};
+
+/* - I2C -------------------------------------------------------------------- */
+static const unsigned int i2c1_a_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(5, 8), RCAR_GP_PIN(5, 9),
+};
+
+static const unsigned int i2c1_a_mux[] = {
+       SCL1_A_MARK, SDA1_A_MARK,
+};
+
+static const unsigned int i2c1_b_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(5, 17), RCAR_GP_PIN(5, 18),
+};
+
+static const unsigned int i2c1_b_mux[] = {
+       SCL1_B_MARK, SDA1_B_MARK,
+};
+
+static const unsigned int i2c1_c_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 0), RCAR_GP_PIN(3, 5),
+};
+
+static const unsigned int i2c1_c_mux[] = {
+       SCL1_C_MARK, SDA1_C_MARK,
+};
+
+static const unsigned int i2c1_d_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(6, 16), RCAR_GP_PIN(6, 15),
+};
+
+static const unsigned int i2c1_d_mux[] = {
+       SCL1_D_MARK, SDA1_D_MARK,
+};
+
+static const unsigned int i2c2_a_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(5, 4), RCAR_GP_PIN(5, 0),
+};
+
+static const unsigned int i2c2_a_mux[] = {
+       SCL2_A_MARK, SDA2_A_MARK,
+};
+
+static const unsigned int i2c2_b_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 12), RCAR_GP_PIN(3, 13),
+};
+
+static const unsigned int i2c2_b_mux[] = {
+       SCL2_B_MARK, SDA2_B_MARK,
+};
+
+static const unsigned int i2c2_c_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 4), RCAR_GP_PIN(3, 3),
+};
+
+static const unsigned int i2c2_c_mux[] = {
+       SCL2_C_MARK, SDA2_C_MARK,
+};
+
+static const unsigned int i2c2_d_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(6, 11), RCAR_GP_PIN(6, 12),
+};
+
+static const unsigned int i2c2_d_mux[] = {
+       SCL2_D_MARK, SDA2_D_MARK,
+};
+
+static const unsigned int i2c2_e_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(3, 5), RCAR_GP_PIN(3, 0),
+};
+
+static const unsigned int i2c2_e_mux[] = {
+       SCL2_E_MARK, SDA2_E_MARK,
+};
+
+static const unsigned int i2c4_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(0, 16), RCAR_GP_PIN(0, 17),
+};
+
+static const unsigned int i2c4_mux[] = {
+       SCL4_MARK, SDA4_MARK,
+};
+
+static const unsigned int i2c5_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(1, 21), RCAR_GP_PIN(1, 22),
+};
+
+static const unsigned int i2c5_mux[] = {
+       SCL5_MARK, SDA5_MARK,
+};
+
+static const unsigned int i2c6_a_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(1, 11), RCAR_GP_PIN(1, 8),
+};
+
+static const unsigned int i2c6_a_mux[] = {
+       SCL6_A_MARK, SDA6_A_MARK,
+};
+
+static const unsigned int i2c6_b_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(1, 2), RCAR_GP_PIN(1, 1),
+};
+
+static const unsigned int i2c6_b_mux[] = {
+       SCL6_B_MARK, SDA6_B_MARK,
+};
+
+static const unsigned int i2c7_a_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(2, 24), RCAR_GP_PIN(2, 25),
+};
+
+static const unsigned int i2c7_a_mux[] = {
+       SCL7_A_MARK, SDA7_A_MARK,
+};
+
+static const unsigned int i2c7_b_pins[] = {
+       /* SCL, SDA */
+       RCAR_GP_PIN(0, 13), RCAR_GP_PIN(0, 14),
+};
+
+static const unsigned int i2c7_b_mux[] = {
+       SCL7_B_MARK, SDA7_B_MARK,
+};
+
+/* - INTC-EX ---------------------------------------------------------------- */
+static const unsigned int intc_ex_irq0_pins[] = {
+       /* IRQ0 */
+       RCAR_GP_PIN(1, 0),
+};
+static const unsigned int intc_ex_irq0_mux[] = {
+       IRQ0_MARK,
+};
+static const unsigned int intc_ex_irq1_pins[] = {
+       /* IRQ1 */
+       RCAR_GP_PIN(1, 1),
+};
+static const unsigned int intc_ex_irq1_mux[] = {
+       IRQ1_MARK,
+};
+static const unsigned int intc_ex_irq2_pins[] = {
+       /* IRQ2 */
+       RCAR_GP_PIN(1, 2),
+};
+static const unsigned int intc_ex_irq2_mux[] = {
+       IRQ2_MARK,
+};
+static const unsigned int intc_ex_irq3_pins[] = {
+       /* IRQ3 */
+       RCAR_GP_PIN(1, 9),
+};
+static const unsigned int intc_ex_irq3_mux[] = {
+       IRQ3_MARK,
+};
+static const unsigned int intc_ex_irq4_pins[] = {
+       /* IRQ4 */
+       RCAR_GP_PIN(1, 10),
+};
+static const unsigned int intc_ex_irq4_mux[] = {
+       IRQ4_MARK,
+};
+static const unsigned int intc_ex_irq5_pins[] = {
+       /* IRQ5 */
+       RCAR_GP_PIN(0, 7),
+};
+static const unsigned int intc_ex_irq5_mux[] = {
+       IRQ5_MARK,
+};
+
+/* - MSIOF0 ----------------------------------------------------------------- */
+static const unsigned int msiof0_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(5, 10),
+};
+
+static const unsigned int msiof0_clk_mux[] = {
+       MSIOF0_SCK_MARK,
 };
 
 static const unsigned int msiof0_sync_pins[] = {
@@ -2161,229 +2660,587 @@ static const unsigned int scif1_data_pins[] = {
        RCAR_GP_PIN(5, 5), RCAR_GP_PIN(5, 6),
 };
 
-static const unsigned int scif1_data_mux[] = {
-       RX1_MARK, TX1_MARK,
+static const unsigned int scif1_data_mux[] = {
+       RX1_MARK, TX1_MARK,
+};
+
+static const unsigned int scif1_clk_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(5, 16),
+};
+
+static const unsigned int scif1_clk_mux[] = {
+       SCK1_MARK,
+};
+
+static const unsigned int scif1_ctrl_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(5, 0), RCAR_GP_PIN(5, 7),
+};
+
+static const unsigned int scif1_ctrl_mux[] = {
+       RTS1_N_TANS_MARK, CTS1_N_MARK,
+};
+
+/* - SCIF2 ------------------------------------------------------------------ */
+static const unsigned int scif2_data_a_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(5, 9), RCAR_GP_PIN(5, 8),
+};
+
+static const unsigned int scif2_data_a_mux[] = {
+       RX2_A_MARK, TX2_A_MARK,
+};
+
+static const unsigned int scif2_clk_a_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(5, 7),
+};
+
+static const unsigned int scif2_clk_a_mux[] = {
+       SCK2_A_MARK,
+};
+
+static const unsigned int scif2_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(5, 12), RCAR_GP_PIN(5, 11),
+};
+
+static const unsigned int scif2_data_b_mux[] = {
+       RX2_B_MARK, TX2_B_MARK,
+};
+
+/* - SCIF3 ------------------------------------------------------------------ */
+static const unsigned int scif3_data_a_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 6),
+};
+
+static const unsigned int scif3_data_a_mux[] = {
+       RX3_A_MARK, TX3_A_MARK,
+};
+
+static const unsigned int scif3_clk_a_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(0, 1),
+};
+
+static const unsigned int scif3_clk_a_mux[] = {
+       SCK3_A_MARK,
+};
+
+static const unsigned int scif3_ctrl_a_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 7),
+};
+
+static const unsigned int scif3_ctrl_a_mux[] = {
+       RTS3_N_TANS_A_MARK, CTS3_N_A_MARK,
+};
+
+static const unsigned int scif3_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 11),
+};
+
+static const unsigned int scif3_data_b_mux[] = {
+       RX3_B_MARK, TX3_B_MARK,
+};
+
+static const unsigned int scif3_data_c_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(2, 23), RCAR_GP_PIN(2, 22),
+};
+
+static const unsigned int scif3_data_c_mux[] = {
+       RX3_C_MARK, TX3_C_MARK,
+};
+
+static const unsigned int scif3_clk_c_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(2, 24),
+};
+
+static const unsigned int scif3_clk_c_mux[] = {
+       SCK3_C_MARK,
+};
+
+/* - SCIF4 ------------------------------------------------------------------ */
+static const unsigned int scif4_data_a_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(1, 6), RCAR_GP_PIN(1, 7),
+};
+
+static const unsigned int scif4_data_a_mux[] = {
+       RX4_A_MARK, TX4_A_MARK,
+};
+
+static const unsigned int scif4_clk_a_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(1, 5),
+};
+
+static const unsigned int scif4_clk_a_mux[] = {
+       SCK4_A_MARK,
+};
+
+static const unsigned int scif4_ctrl_a_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(1, 4), RCAR_GP_PIN(1, 3),
+};
+
+static const unsigned int scif4_ctrl_a_mux[] = {
+       RTS4_N_TANS_A_MARK, CTS4_N_A_MARK,
+};
+
+static const unsigned int scif4_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(0, 13), RCAR_GP_PIN(0, 12),
+};
+
+static const unsigned int scif4_data_b_mux[] = {
+       RX4_B_MARK, TX4_B_MARK,
+};
+
+static const unsigned int scif4_clk_b_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(0, 8),
+};
+
+static const unsigned int scif4_clk_b_mux[] = {
+       SCK4_B_MARK,
+};
+
+static const unsigned int scif4_data_c_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 3),
+};
+
+static const unsigned int scif4_data_c_mux[] = {
+       RX4_C_MARK, TX4_C_MARK,
+};
+
+static const unsigned int scif4_ctrl_c_pins[] = {
+       /* RTS, CTS */
+       RCAR_GP_PIN(0, 1), RCAR_GP_PIN(0, 0),
+};
+
+static const unsigned int scif4_ctrl_c_mux[] = {
+       RTS4_N_TANS_C_MARK, CTS4_N_C_MARK,
+};
+
+/* - SCIF5 ------------------------------------------------------------------ */
+static const unsigned int scif5_data_a_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(1, 12), RCAR_GP_PIN(1, 9),
+};
+
+static const unsigned int scif5_data_a_mux[] = {
+       RX5_A_MARK, TX5_A_MARK,
+};
+
+static const unsigned int scif5_clk_a_pins[] = {
+       /* SCK */
+       RCAR_GP_PIN(1, 13),
+};
+
+static const unsigned int scif5_clk_a_mux[] = {
+       SCK5_A_MARK,
+};
+
+static const unsigned int scif5_data_b_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(2, 25), RCAR_GP_PIN(2, 24),
+};
+
+static const unsigned int scif5_data_b_mux[] = {
+       RX5_B_MARK, TX5_B_MARK,
+};
+
+static const unsigned int scif5_data_c_pins[] = {
+       /* RX, TX */
+       RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 3),
+};
+
+static const unsigned int scif5_data_c_mux[] = {
+       RX5_C_MARK, TX5_C_MARK,
+};
+
+/* - SCIF Clock ------------------------------------------------------------- */
+static const unsigned int scif_clk_a_pins[] = {
+       /* SCIF_CLK */
+       RCAR_GP_PIN(5, 3),
+};
+
+static const unsigned int scif_clk_a_mux[] = {
+       SCIF_CLK_A_MARK,
+};
+
+static const unsigned int scif_clk_b_pins[] = {
+       /* SCIF_CLK */
+       RCAR_GP_PIN(5, 7),
+};
+
+static const unsigned int scif_clk_b_mux[] = {
+       SCIF_CLK_B_MARK,
+};
+
+/* - SDHI0 ------------------------------------------------------------------ */
+static const unsigned int sdhi0_data1_pins[] = {
+       /* D0 */
+       RCAR_GP_PIN(3, 2),
+};
+
+static const unsigned int sdhi0_data1_mux[] = {
+       SD0_DAT0_MARK,
+};
+
+static const unsigned int sdhi0_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(3, 2), RCAR_GP_PIN(3, 3),
+       RCAR_GP_PIN(3, 4), RCAR_GP_PIN(3, 5),
+};
+
+static const unsigned int sdhi0_data4_mux[] = {
+       SD0_DAT0_MARK, SD0_DAT1_MARK,
+       SD0_DAT2_MARK, SD0_DAT3_MARK,
+};
+
+static const unsigned int sdhi0_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(3, 0), RCAR_GP_PIN(3, 1),
+};
+
+static const unsigned int sdhi0_ctrl_mux[] = {
+       SD0_CLK_MARK, SD0_CMD_MARK,
+};
+
+static const unsigned int sdhi0_cd_pins[] = {
+       /* CD */
+       RCAR_GP_PIN(3, 12),
+};
+
+static const unsigned int sdhi0_cd_mux[] = {
+       SD0_CD_MARK,
+};
+
+static const unsigned int sdhi0_wp_pins[] = {
+       /* WP */
+       RCAR_GP_PIN(3, 13),
+};
+
+static const unsigned int sdhi0_wp_mux[] = {
+       SD0_WP_MARK,
+};
+
+/* - SDHI1 ------------------------------------------------------------------ */
+static const unsigned int sdhi1_data1_pins[] = {
+       /* D0 */
+       RCAR_GP_PIN(3, 8),
+};
+
+static const unsigned int sdhi1_data1_mux[] = {
+       SD1_DAT0_MARK,
+};
+
+static const unsigned int sdhi1_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(3, 8),  RCAR_GP_PIN(3, 9),
+       RCAR_GP_PIN(3, 10), RCAR_GP_PIN(3, 11),
+};
+
+static const unsigned int sdhi1_data4_mux[] = {
+       SD1_DAT0_MARK, SD1_DAT1_MARK,
+       SD1_DAT2_MARK, SD1_DAT3_MARK,
+};
+
+static const unsigned int sdhi1_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(3, 6), RCAR_GP_PIN(3, 7),
+};
+
+static const unsigned int sdhi1_ctrl_mux[] = {
+       SD1_CLK_MARK, SD1_CMD_MARK,
+};
+
+static const unsigned int sdhi1_cd_pins[] = {
+       /* CD */
+       RCAR_GP_PIN(3, 14),
+};
+
+static const unsigned int sdhi1_cd_mux[] = {
+       SD1_CD_MARK,
+};
+
+static const unsigned int sdhi1_wp_pins[] = {
+       /* WP */
+       RCAR_GP_PIN(3, 15),
+};
+
+static const unsigned int sdhi1_wp_mux[] = {
+       SD1_WP_MARK,
+};
+
+/* - SDHI3 ------------------------------------------------------------------ */
+static const unsigned int sdhi3_data1_pins[] = {
+       /* D0 */
+       RCAR_GP_PIN(4, 2),
+};
+
+static const unsigned int sdhi3_data1_mux[] = {
+       SD3_DAT0_MARK,
+};
+
+static const unsigned int sdhi3_data4_pins[] = {
+       /* D[0:3] */
+       RCAR_GP_PIN(4, 2), RCAR_GP_PIN(4, 3),
+       RCAR_GP_PIN(4, 4), RCAR_GP_PIN(4, 5),
+};
+
+static const unsigned int sdhi3_data4_mux[] = {
+       SD3_DAT0_MARK, SD3_DAT1_MARK,
+       SD3_DAT2_MARK, SD3_DAT3_MARK,
+};
+
+static const unsigned int sdhi3_data8_pins[] = {
+       /* D[0:7] */
+       RCAR_GP_PIN(4, 2), RCAR_GP_PIN(4, 3),
+       RCAR_GP_PIN(4, 4), RCAR_GP_PIN(4, 5),
+       RCAR_GP_PIN(4, 6), RCAR_GP_PIN(4, 7),
+       RCAR_GP_PIN(4, 8), RCAR_GP_PIN(4, 9),
+};
+
+static const unsigned int sdhi3_data8_mux[] = {
+       SD3_DAT0_MARK, SD3_DAT1_MARK,
+       SD3_DAT2_MARK, SD3_DAT3_MARK,
+       SD3_DAT4_MARK, SD3_DAT5_MARK,
+       SD3_DAT6_MARK, SD3_DAT7_MARK,
+};
+
+static const unsigned int sdhi3_ctrl_pins[] = {
+       /* CLK, CMD */
+       RCAR_GP_PIN(4, 0), RCAR_GP_PIN(4, 1),
 };
 
-static const unsigned int scif1_clk_pins[] = {
-       /* SCK */
-       RCAR_GP_PIN(5, 16),
+static const unsigned int sdhi3_ctrl_mux[] = {
+       SD3_CLK_MARK, SD3_CMD_MARK,
 };
 
-static const unsigned int scif1_clk_mux[] = {
-       SCK1_MARK,
+static const unsigned int sdhi3_cd_pins[] = {
+       /* CD */
+       RCAR_GP_PIN(3, 12),
 };
 
-static const unsigned int scif1_ctrl_pins[] = {
-       /* RTS, CTS */
-       RCAR_GP_PIN(5, 0), RCAR_GP_PIN(5, 7),
+static const unsigned int sdhi3_cd_mux[] = {
+       SD3_CD_MARK,
 };
 
-static const unsigned int scif1_ctrl_mux[] = {
-       RTS1_N_TANS_MARK, CTS1_N_MARK,
+static const unsigned int sdhi3_wp_pins[] = {
+       /* WP */
+       RCAR_GP_PIN(3, 13),
 };
 
-/* - SCIF2 ------------------------------------------------------------------ */
-static const unsigned int scif2_data_a_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(5, 9), RCAR_GP_PIN(5, 8),
+static const unsigned int sdhi3_wp_mux[] = {
+       SD3_WP_MARK,
 };
 
-static const unsigned int scif2_data_a_mux[] = {
-       RX2_A_MARK, TX2_A_MARK,
+static const unsigned int sdhi3_ds_pins[] = {
+       /* DS */
+       RCAR_GP_PIN(4, 10),
 };
 
-static const unsigned int scif2_clk_a_pins[] = {
-       /* SCK */
-       RCAR_GP_PIN(5, 7),
+static const unsigned int sdhi3_ds_mux[] = {
+       SD3_DS_MARK,
 };
 
-static const unsigned int scif2_clk_a_mux[] = {
-       SCK2_A_MARK,
+/* - SSI -------------------------------------------------------------------- */
+static const unsigned int ssi0_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(6, 2),
 };
 
-static const unsigned int scif2_data_b_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(5, 12), RCAR_GP_PIN(5, 11),
+static const unsigned int ssi0_data_mux[] = {
+       SSI_SDATA0_MARK,
 };
 
-static const unsigned int scif2_data_b_mux[] = {
-       RX2_B_MARK, TX2_B_MARK,
+static const unsigned int ssi01239_ctrl_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(6, 0), RCAR_GP_PIN(6, 1),
 };
 
-/* - SCIF3 ------------------------------------------------------------------ */
-static const unsigned int scif3_data_a_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(0, 5), RCAR_GP_PIN(0, 6),
+static const unsigned int ssi01239_ctrl_mux[] = {
+       SSI_SCK01239_MARK, SSI_WS01239_MARK,
 };
 
-static const unsigned int scif3_data_a_mux[] = {
-       RX3_A_MARK, TX3_A_MARK,
+static const unsigned int ssi1_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(6, 3),
 };
 
-static const unsigned int scif3_clk_a_pins[] = {
-       /* SCK */
-       RCAR_GP_PIN(0, 1),
+static const unsigned int ssi1_data_mux[] = {
+       SSI_SDATA1_MARK,
 };
 
-static const unsigned int scif3_clk_a_mux[] = {
-       SCK3_A_MARK,
+static const unsigned int ssi1_ctrl_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(3, 14), RCAR_GP_PIN(3, 15),
 };
 
-static const unsigned int scif3_ctrl_a_pins[] = {
-       /* RTS, CTS */
-       RCAR_GP_PIN(0, 4), RCAR_GP_PIN(0, 7),
+static const unsigned int ssi1_ctrl_mux[] = {
+       SSI_SCK1_MARK, SSI_WS1_MARK,
 };
 
-static const unsigned int scif3_ctrl_a_mux[] = {
-       RTS3_N_TANS_A_MARK, CTS3_N_A_MARK,
+static const unsigned int ssi2_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(6, 4),
 };
 
-static const unsigned int scif3_data_b_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 11),
+static const unsigned int ssi2_data_mux[] = {
+       SSI_SDATA2_MARK,
 };
 
-static const unsigned int scif3_data_b_mux[] = {
-       RX3_B_MARK, TX3_B_MARK,
+static const unsigned int ssi2_ctrl_a_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(5, 1), RCAR_GP_PIN(5, 2),
 };
 
-static const unsigned int scif3_data_c_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(2, 23), RCAR_GP_PIN(2, 22),
+static const unsigned int ssi2_ctrl_a_mux[] = {
+       SSI_SCK2_A_MARK, SSI_WS2_A_MARK,
 };
 
-static const unsigned int scif3_data_c_mux[] = {
-       RX3_C_MARK, TX3_C_MARK,
+static const unsigned int ssi2_ctrl_b_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(3, 12), RCAR_GP_PIN(3, 13),
 };
 
-static const unsigned int scif3_clk_c_pins[] = {
-       /* SCK */
-       RCAR_GP_PIN(2, 24),
+static const unsigned int ssi2_ctrl_b_mux[] = {
+       SSI_SCK2_B_MARK, SSI_WS2_B_MARK,
 };
 
-static const unsigned int scif3_clk_c_mux[] = {
-       SCK3_C_MARK,
+static const unsigned int ssi3_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(6, 7),
 };
 
-/* - SCIF4 ------------------------------------------------------------------ */
-static const unsigned int scif4_data_a_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(1, 6), RCAR_GP_PIN(1, 7),
+static const unsigned int ssi3_data_mux[] = {
+       SSI_SDATA3_MARK,
 };
 
-static const unsigned int scif4_data_a_mux[] = {
-       RX4_A_MARK, TX4_A_MARK,
+static const unsigned int ssi349_ctrl_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(6, 5), RCAR_GP_PIN(6, 6),
 };
 
-static const unsigned int scif4_clk_a_pins[] = {
-       /* SCK */
-       RCAR_GP_PIN(1, 5),
+static const unsigned int ssi349_ctrl_mux[] = {
+       SSI_SCK349_MARK, SSI_WS349_MARK,
 };
 
-static const unsigned int scif4_clk_a_mux[] = {
-       SCK4_A_MARK,
+static const unsigned int ssi4_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(6, 10),
 };
 
-static const unsigned int scif4_ctrl_a_pins[] = {
-       /* RTS, CTS */
-       RCAR_GP_PIN(1, 4), RCAR_GP_PIN(1, 3),
+static const unsigned int ssi4_data_mux[] = {
+       SSI_SDATA4_MARK,
 };
 
-static const unsigned int scif4_ctrl_a_mux[] = {
-       RTS4_N_TANS_A_MARK, CTS4_N_A_MARK,
+static const unsigned int ssi4_ctrl_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(5, 14), RCAR_GP_PIN(5, 15),
 };
 
-static const unsigned int scif4_data_b_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(0, 13), RCAR_GP_PIN(0, 12),
+static const unsigned int ssi4_ctrl_mux[] = {
+       SSI_SCK4_MARK, SSI_WS4_MARK,
 };
 
-static const unsigned int scif4_data_b_mux[] = {
-       RX4_B_MARK, TX4_B_MARK,
+static const unsigned int ssi5_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(6, 13),
 };
 
-static const unsigned int scif4_clk_b_pins[] = {
-       /* SCK */
-       RCAR_GP_PIN(0, 8),
+static const unsigned int ssi5_data_mux[] = {
+       SSI_SDATA5_MARK,
 };
 
-static const unsigned int scif4_clk_b_mux[] = {
-       SCK4_B_MARK,
+static const unsigned int ssi5_ctrl_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(6, 11), RCAR_GP_PIN(6, 12),
 };
 
-static const unsigned int scif4_data_c_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 3),
+static const unsigned int ssi5_ctrl_mux[] = {
+       SSI_SCK5_MARK, SSI_WS5_MARK,
 };
 
-static const unsigned int scif4_data_c_mux[] = {
-       RX4_C_MARK, TX4_C_MARK,
+static const unsigned int ssi6_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(6, 16),
 };
 
-static const unsigned int scif4_ctrl_c_pins[] = {
-       /* RTS, CTS */
-       RCAR_GP_PIN(0, 1), RCAR_GP_PIN(0, 0),
+static const unsigned int ssi6_data_mux[] = {
+       SSI_SDATA6_MARK,
 };
 
-static const unsigned int scif4_ctrl_c_mux[] = {
-       RTS4_N_TANS_C_MARK, CTS4_N_C_MARK,
+static const unsigned int ssi6_ctrl_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(6, 14), RCAR_GP_PIN(6, 15),
 };
 
-/* - SCIF5 ------------------------------------------------------------------ */
-static const unsigned int scif5_data_a_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(1, 12), RCAR_GP_PIN(1, 9),
+static const unsigned int ssi6_ctrl_mux[] = {
+       SSI_SCK6_MARK, SSI_WS6_MARK,
 };
 
-static const unsigned int scif5_data_a_mux[] = {
-       RX5_A_MARK, TX5_A_MARK,
+static const unsigned int ssi7_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(5, 12),
 };
 
-static const unsigned int scif5_clk_a_pins[] = {
-       /* SCK */
-       RCAR_GP_PIN(1, 13),
+static const unsigned int ssi7_data_mux[] = {
+       SSI_SDATA7_MARK,
 };
 
-static const unsigned int scif5_clk_a_mux[] = {
-       SCK5_A_MARK,
+static const unsigned int ssi78_ctrl_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(5, 10), RCAR_GP_PIN(5, 11),
 };
 
-static const unsigned int scif5_data_b_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(2, 25), RCAR_GP_PIN(2, 24),
+static const unsigned int ssi78_ctrl_mux[] = {
+       SSI_SCK78_MARK, SSI_WS78_MARK,
 };
 
-static const unsigned int scif5_data_b_mux[] = {
-       RX5_B_MARK, TX5_B_MARK,
+static const unsigned int ssi8_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(5, 13),
 };
 
-static const unsigned int scif5_data_c_pins[] = {
-       /* RX, TX */
-       RCAR_GP_PIN(0, 2), RCAR_GP_PIN(0, 3),
+static const unsigned int ssi8_data_mux[] = {
+       SSI_SDATA8_MARK,
 };
 
-static const unsigned int scif5_data_c_mux[] = {
-       RX5_C_MARK, TX5_C_MARK,
+static const unsigned int ssi9_data_pins[] = {
+       /* SDATA */
+       RCAR_GP_PIN(5, 16),
 };
 
-/* - SCIF Clock ------------------------------------------------------------- */
-static const unsigned int scif_clk_a_pins[] = {
-       /* SCIF_CLK */
-       RCAR_GP_PIN(5, 3),
+static const unsigned int ssi9_data_mux[] = {
+       SSI_SDATA9_MARK,
 };
 
-static const unsigned int scif_clk_a_mux[] = {
-       SCIF_CLK_A_MARK,
+static const unsigned int ssi9_ctrl_a_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(6, 4), RCAR_GP_PIN(6, 10),
 };
 
-static const unsigned int scif_clk_b_pins[] = {
-       /* SCIF_CLK */
-       RCAR_GP_PIN(5, 7),
+static const unsigned int ssi9_ctrl_a_mux[] = {
+       SSI_SCK9_A_MARK, SSI_WS9_A_MARK,
 };
 
-static const unsigned int scif_clk_b_mux[] = {
-       SCIF_CLK_B_MARK,
+static const unsigned int ssi9_ctrl_b_pins[] = {
+       /* SCK, WS */
+       RCAR_GP_PIN(5, 5), RCAR_GP_PIN(5, 6),
+};
+
+static const unsigned int ssi9_ctrl_b_mux[] = {
+       SSI_SCK9_B_MARK, SSI_WS9_B_MARK,
 };
 
 /* - USB0 ------------------------------------------------------------------- */
@@ -2433,11 +3290,261 @@ static const unsigned int usb30_id_mux[] = {
        USB3HS0_ID_MARK,
 };
 
+/* - VIN4 ------------------------------------------------------------------- */
+static const unsigned int vin4_data18_a_pins[] = {
+       RCAR_GP_PIN(2, 8),  RCAR_GP_PIN(2, 9),
+       RCAR_GP_PIN(2, 10), RCAR_GP_PIN(2, 11),
+       RCAR_GP_PIN(2, 12), RCAR_GP_PIN(2, 13),
+       RCAR_GP_PIN(1, 6),  RCAR_GP_PIN(1, 7),
+       RCAR_GP_PIN(1, 3),  RCAR_GP_PIN(1, 10),
+       RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 14),
+       RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 16),
+       RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 18),
+       RCAR_GP_PIN(1, 19), RCAR_GP_PIN(0, 1),
+};
+
+static const unsigned int vin4_data18_a_mux[] = {
+       VI4_DATA2_A_MARK, VI4_DATA3_A_MARK,
+       VI4_DATA4_A_MARK, VI4_DATA5_A_MARK,
+       VI4_DATA6_A_MARK, VI4_DATA7_A_MARK,
+       VI4_DATA10_MARK,  VI4_DATA11_MARK,
+       VI4_DATA12_MARK,  VI4_DATA13_MARK,
+       VI4_DATA14_MARK,  VI4_DATA15_MARK,
+       VI4_DATA18_MARK,  VI4_DATA19_MARK,
+       VI4_DATA20_MARK,  VI4_DATA21_MARK,
+       VI4_DATA22_MARK,  VI4_DATA23_MARK,
+};
+
+static const union vin_data vin4_data_a_pins = {
+       .data24 = {
+               RCAR_GP_PIN(2, 6),  RCAR_GP_PIN(2, 7),
+               RCAR_GP_PIN(2, 8),  RCAR_GP_PIN(2, 9),
+               RCAR_GP_PIN(2, 10), RCAR_GP_PIN(2, 11),
+               RCAR_GP_PIN(2, 12), RCAR_GP_PIN(2, 13),
+               RCAR_GP_PIN(1, 4),  RCAR_GP_PIN(1, 5),
+               RCAR_GP_PIN(1, 6),  RCAR_GP_PIN(1, 7),
+               RCAR_GP_PIN(1, 3),  RCAR_GP_PIN(1, 10),
+               RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 14),
+               RCAR_GP_PIN(1, 9),  RCAR_GP_PIN(1, 12),
+               RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 16),
+               RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 18),
+               RCAR_GP_PIN(1, 19), RCAR_GP_PIN(0, 1),
+       },
+};
+
+static const union vin_data vin4_data_a_mux = {
+       .data24 = {
+               VI4_DATA0_A_MARK, VI4_DATA1_A_MARK,
+               VI4_DATA2_A_MARK, VI4_DATA3_A_MARK,
+               VI4_DATA4_A_MARK, VI4_DATA5_A_MARK,
+               VI4_DATA6_A_MARK, VI4_DATA7_A_MARK,
+               VI4_DATA8_MARK,   VI4_DATA9_MARK,
+               VI4_DATA10_MARK,  VI4_DATA11_MARK,
+               VI4_DATA12_MARK,  VI4_DATA13_MARK,
+               VI4_DATA14_MARK,  VI4_DATA15_MARK,
+               VI4_DATA16_MARK,  VI4_DATA17_MARK,
+               VI4_DATA18_MARK,  VI4_DATA19_MARK,
+               VI4_DATA20_MARK,  VI4_DATA21_MARK,
+               VI4_DATA22_MARK,  VI4_DATA23_MARK,
+       },
+};
+
+static const unsigned int vin4_data18_b_pins[] = {
+       RCAR_GP_PIN(1, 21), RCAR_GP_PIN(1, 22),
+       RCAR_GP_PIN(0, 5),  RCAR_GP_PIN(0, 6),
+       RCAR_GP_PIN(0, 16), RCAR_GP_PIN(0, 17),
+       RCAR_GP_PIN(1, 6),  RCAR_GP_PIN(1, 7),
+       RCAR_GP_PIN(1, 3),  RCAR_GP_PIN(1, 10),
+       RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 14),
+       RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 16),
+       RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 18),
+       RCAR_GP_PIN(1, 19), RCAR_GP_PIN(0, 1),
+};
+
+static const unsigned int vin4_data18_b_mux[] = {
+       VI4_DATA2_B_MARK, VI4_DATA3_B_MARK,
+       VI4_DATA4_B_MARK, VI4_DATA5_B_MARK,
+       VI4_DATA6_B_MARK, VI4_DATA7_B_MARK,
+       VI4_DATA10_MARK,  VI4_DATA11_MARK,
+       VI4_DATA12_MARK,  VI4_DATA13_MARK,
+       VI4_DATA14_MARK,  VI4_DATA15_MARK,
+       VI4_DATA18_MARK,  VI4_DATA19_MARK,
+       VI4_DATA20_MARK,  VI4_DATA21_MARK,
+       VI4_DATA22_MARK,  VI4_DATA23_MARK,
+};
+
+static const union vin_data vin4_data_b_pins = {
+       .data24 = {
+               RCAR_GP_PIN(1, 8),  RCAR_GP_PIN(1, 11),
+               RCAR_GP_PIN(1, 21), RCAR_GP_PIN(1, 22),
+               RCAR_GP_PIN(0, 5),  RCAR_GP_PIN(0, 6),
+               RCAR_GP_PIN(0, 16), RCAR_GP_PIN(0, 17),
+               RCAR_GP_PIN(1, 4),  RCAR_GP_PIN(1, 5),
+               RCAR_GP_PIN(1, 6),  RCAR_GP_PIN(1, 7),
+               RCAR_GP_PIN(1, 3),  RCAR_GP_PIN(1, 10),
+               RCAR_GP_PIN(1, 13), RCAR_GP_PIN(1, 14),
+               RCAR_GP_PIN(1, 9),  RCAR_GP_PIN(1, 12),
+               RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 16),
+               RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 18),
+               RCAR_GP_PIN(1, 19), RCAR_GP_PIN(0, 1),
+       },
+};
+
+static const union vin_data vin4_data_b_mux = {
+       .data24 = {
+               VI4_DATA0_B_MARK, VI4_DATA1_B_MARK,
+               VI4_DATA2_B_MARK, VI4_DATA3_B_MARK,
+               VI4_DATA4_B_MARK, VI4_DATA5_B_MARK,
+               VI4_DATA6_B_MARK, VI4_DATA7_B_MARK,
+               VI4_DATA8_MARK,   VI4_DATA9_MARK,
+               VI4_DATA10_MARK,  VI4_DATA11_MARK,
+               VI4_DATA12_MARK,  VI4_DATA13_MARK,
+               VI4_DATA14_MARK,  VI4_DATA15_MARK,
+               VI4_DATA16_MARK,  VI4_DATA17_MARK,
+               VI4_DATA18_MARK,  VI4_DATA19_MARK,
+               VI4_DATA20_MARK,  VI4_DATA21_MARK,
+               VI4_DATA22_MARK,  VI4_DATA23_MARK,
+       },
+};
+
+static const unsigned int vin4_sync_pins[] = {
+       /* HSYNC, VSYNC */
+       RCAR_GP_PIN(2, 25), RCAR_GP_PIN(2, 24),
+};
+
+static const unsigned int vin4_sync_mux[] = {
+       VI4_HSYNC_N_MARK, VI4_VSYNC_N_MARK,
+};
+
+static const unsigned int vin4_field_pins[] = {
+       RCAR_GP_PIN(2, 23),
+};
+
+static const unsigned int vin4_field_mux[] = {
+       VI4_FIELD_MARK,
+};
+
+static const unsigned int vin4_clkenb_pins[] = {
+       RCAR_GP_PIN(1, 2),
+};
+
+static const unsigned int vin4_clkenb_mux[] = {
+       VI4_CLKENB_MARK,
+};
+
+static const unsigned int vin4_clk_pins[] = {
+       RCAR_GP_PIN(2, 22),
+};
+
+static const unsigned int vin4_clk_mux[] = {
+       VI4_CLK_MARK,
+};
+
+/* - VIN5 ------------------------------------------------------------------- */
+static const union vin_data16 vin5_data_a_pins = {
+       .data16 = {
+               RCAR_GP_PIN(1, 1),  RCAR_GP_PIN(1, 2),
+               RCAR_GP_PIN(1, 19), RCAR_GP_PIN(1, 12),
+               RCAR_GP_PIN(1, 15), RCAR_GP_PIN(1, 16),
+               RCAR_GP_PIN(1, 17), RCAR_GP_PIN(1, 18),
+               RCAR_GP_PIN(0, 12), RCAR_GP_PIN(0, 13),
+               RCAR_GP_PIN(0, 9),  RCAR_GP_PIN(0, 11),
+               RCAR_GP_PIN(0, 8),  RCAR_GP_PIN(0, 10),
+               RCAR_GP_PIN(0, 2),  RCAR_GP_PIN(0, 3),
+       },
+};
+
+static const union vin_data16 vin5_data_a_mux = {
+       .data16 = {
+               VI5_DATA0_A_MARK,  VI5_DATA1_A_MARK,
+               VI5_DATA2_A_MARK,  VI5_DATA3_A_MARK,
+               VI5_DATA4_A_MARK,  VI5_DATA5_A_MARK,
+               VI5_DATA6_A_MARK,  VI5_DATA7_A_MARK,
+               VI5_DATA8_A_MARK,  VI5_DATA9_A_MARK,
+               VI5_DATA10_A_MARK, VI5_DATA11_A_MARK,
+               VI5_DATA12_A_MARK, VI5_DATA13_A_MARK,
+               VI5_DATA14_A_MARK, VI5_DATA15_A_MARK,
+       },
+};
+
+static const unsigned int vin5_data8_b_pins[] = {
+       RCAR_GP_PIN(2, 23), RCAR_GP_PIN(0, 4),
+       RCAR_GP_PIN(0, 7),  RCAR_GP_PIN(0, 12),
+       RCAR_GP_PIN(0, 13), RCAR_GP_PIN(0, 14),
+       RCAR_GP_PIN(0, 16), RCAR_GP_PIN(0, 17),
+};
+
+static const unsigned int vin5_data8_b_mux[] = {
+       VI5_DATA0_B_MARK,  VI5_DATA1_B_MARK,
+       VI5_DATA2_B_MARK,  VI5_DATA3_B_MARK,
+       VI5_DATA4_B_MARK,  VI5_DATA5_B_MARK,
+       VI5_DATA6_B_MARK,  VI5_DATA7_B_MARK,
+};
+
+static const unsigned int vin5_sync_a_pins[] = {
+       /* HSYNC_N, VSYNC_N */
+       RCAR_GP_PIN(1, 8), RCAR_GP_PIN(1, 9),
+};
+
+static const unsigned int vin5_sync_a_mux[] = {
+       VI5_HSYNC_N_A_MARK, VI5_VSYNC_N_A_MARK,
+};
+
+static const unsigned int vin5_field_a_pins[] = {
+       RCAR_GP_PIN(1, 10),
+};
+
+static const unsigned int vin5_field_a_mux[] = {
+       VI5_FIELD_A_MARK,
+};
+
+static const unsigned int vin5_clkenb_a_pins[] = {
+       RCAR_GP_PIN(0, 1),
+};
+
+static const unsigned int vin5_clkenb_a_mux[] = {
+       VI5_CLKENB_A_MARK,
+};
+
+static const unsigned int vin5_clk_a_pins[] = {
+       RCAR_GP_PIN(1, 0),
+};
+
+static const unsigned int vin5_clk_a_mux[] = {
+       VI5_CLK_A_MARK,
+};
+
+static const unsigned int vin5_clk_b_pins[] = {
+       RCAR_GP_PIN(2, 22),
+};
+
+static const unsigned int vin5_clk_b_mux[] = {
+       VI5_CLK_B_MARK,
+};
+
 static const struct {
-       struct sh_pfc_pin_group common[123];
-       struct sh_pfc_pin_group automotive[0];
+       struct sh_pfc_pin_group common[241];
+       struct sh_pfc_pin_group automotive[2];
 } pinmux_groups = {
        .common = {
+               SH_PFC_PIN_GROUP(audio_clk_a),
+               SH_PFC_PIN_GROUP(audio_clk_b_a),
+               SH_PFC_PIN_GROUP(audio_clk_b_b),
+               SH_PFC_PIN_GROUP(audio_clk_b_c),
+               SH_PFC_PIN_GROUP(audio_clk_c_a),
+               SH_PFC_PIN_GROUP(audio_clk_c_b),
+               SH_PFC_PIN_GROUP(audio_clk_c_c),
+               SH_PFC_PIN_GROUP(audio_clkout_a),
+               SH_PFC_PIN_GROUP(audio_clkout_b),
+               SH_PFC_PIN_GROUP(audio_clkout1_a),
+               SH_PFC_PIN_GROUP(audio_clkout1_b),
+               SH_PFC_PIN_GROUP(audio_clkout1_c),
+               SH_PFC_PIN_GROUP(audio_clkout2_a),
+               SH_PFC_PIN_GROUP(audio_clkout2_b),
+               SH_PFC_PIN_GROUP(audio_clkout2_c),
+               SH_PFC_PIN_GROUP(audio_clkout3_a),
+               SH_PFC_PIN_GROUP(audio_clkout3_b),
+               SH_PFC_PIN_GROUP(audio_clkout3_c),
                SH_PFC_PIN_GROUP(avb_link),
                SH_PFC_PIN_GROUP(avb_magic),
                SH_PFC_PIN_GROUP(avb_phy_int),
@@ -2445,6 +3552,9 @@ static const struct {
                SH_PFC_PIN_GROUP(avb_avtp_pps),
                SH_PFC_PIN_GROUP(avb_avtp_match_a),
                SH_PFC_PIN_GROUP(avb_avtp_capture_a),
+               SH_PFC_PIN_GROUP(can0_data),
+               SH_PFC_PIN_GROUP(can1_data),
+               SH_PFC_PIN_GROUP(can_clk),
                SH_PFC_PIN_GROUP(du_rgb666),
                SH_PFC_PIN_GROUP(du_rgb888),
                SH_PFC_PIN_GROUP(du_clk_in_0),
@@ -2454,6 +3564,37 @@ static const struct {
                SH_PFC_PIN_GROUP(du_disp_cde),
                SH_PFC_PIN_GROUP(du_cde),
                SH_PFC_PIN_GROUP(du_disp),
+               SH_PFC_PIN_GROUP(hscif0_data_a),
+               SH_PFC_PIN_GROUP(hscif0_clk_a),
+               SH_PFC_PIN_GROUP(hscif0_ctrl_a),
+               SH_PFC_PIN_GROUP(hscif0_data_b),
+               SH_PFC_PIN_GROUP(hscif0_clk_b),
+               SH_PFC_PIN_GROUP(hscif1_data_a),
+               SH_PFC_PIN_GROUP(hscif1_clk_a),
+               SH_PFC_PIN_GROUP(hscif1_data_b),
+               SH_PFC_PIN_GROUP(hscif1_clk_b),
+               SH_PFC_PIN_GROUP(hscif1_ctrl_b),
+               SH_PFC_PIN_GROUP(hscif2_data_a),
+               SH_PFC_PIN_GROUP(hscif2_clk_a),
+               SH_PFC_PIN_GROUP(hscif2_ctrl_a),
+               SH_PFC_PIN_GROUP(hscif2_data_b),
+               SH_PFC_PIN_GROUP(hscif3_data_a),
+               SH_PFC_PIN_GROUP(hscif3_data_b),
+               SH_PFC_PIN_GROUP(hscif3_clk_b),
+               SH_PFC_PIN_GROUP(hscif3_data_c),
+               SH_PFC_PIN_GROUP(hscif3_clk_c),
+               SH_PFC_PIN_GROUP(hscif3_ctrl_c),
+               SH_PFC_PIN_GROUP(hscif3_data_d),
+               SH_PFC_PIN_GROUP(hscif3_data_e),
+               SH_PFC_PIN_GROUP(hscif3_ctrl_e),
+               SH_PFC_PIN_GROUP(hscif4_data_a),
+               SH_PFC_PIN_GROUP(hscif4_clk_a),
+               SH_PFC_PIN_GROUP(hscif4_ctrl_a),
+               SH_PFC_PIN_GROUP(hscif4_data_b),
+               SH_PFC_PIN_GROUP(hscif4_clk_b),
+               SH_PFC_PIN_GROUP(hscif4_data_c),
+               SH_PFC_PIN_GROUP(hscif4_data_d),
+               SH_PFC_PIN_GROUP(hscif4_data_e),
                SH_PFC_PIN_GROUP(i2c1_a),
                SH_PFC_PIN_GROUP(i2c1_b),
                SH_PFC_PIN_GROUP(i2c1_c),
@@ -2556,14 +3697,105 @@ static const struct {
                SH_PFC_PIN_GROUP(scif5_data_c),
                SH_PFC_PIN_GROUP(scif_clk_a),
                SH_PFC_PIN_GROUP(scif_clk_b),
+               SH_PFC_PIN_GROUP(sdhi0_data1),
+               SH_PFC_PIN_GROUP(sdhi0_data4),
+               SH_PFC_PIN_GROUP(sdhi0_ctrl),
+               SH_PFC_PIN_GROUP(sdhi0_cd),
+               SH_PFC_PIN_GROUP(sdhi0_wp),
+               SH_PFC_PIN_GROUP(sdhi1_data1),
+               SH_PFC_PIN_GROUP(sdhi1_data4),
+               SH_PFC_PIN_GROUP(sdhi1_ctrl),
+               SH_PFC_PIN_GROUP(sdhi1_cd),
+               SH_PFC_PIN_GROUP(sdhi1_wp),
+               SH_PFC_PIN_GROUP(sdhi3_data1),
+               SH_PFC_PIN_GROUP(sdhi3_data4),
+               SH_PFC_PIN_GROUP(sdhi3_data8),
+               SH_PFC_PIN_GROUP(sdhi3_ctrl),
+               SH_PFC_PIN_GROUP(sdhi3_cd),
+               SH_PFC_PIN_GROUP(sdhi3_wp),
+               SH_PFC_PIN_GROUP(sdhi3_ds),
+               SH_PFC_PIN_GROUP(ssi0_data),
+               SH_PFC_PIN_GROUP(ssi01239_ctrl),
+               SH_PFC_PIN_GROUP(ssi1_data),
+               SH_PFC_PIN_GROUP(ssi1_ctrl),
+               SH_PFC_PIN_GROUP(ssi2_data),
+               SH_PFC_PIN_GROUP(ssi2_ctrl_a),
+               SH_PFC_PIN_GROUP(ssi2_ctrl_b),
+               SH_PFC_PIN_GROUP(ssi3_data),
+               SH_PFC_PIN_GROUP(ssi349_ctrl),
+               SH_PFC_PIN_GROUP(ssi4_data),
+               SH_PFC_PIN_GROUP(ssi4_ctrl),
+               SH_PFC_PIN_GROUP(ssi5_data),
+               SH_PFC_PIN_GROUP(ssi5_ctrl),
+               SH_PFC_PIN_GROUP(ssi6_data),
+               SH_PFC_PIN_GROUP(ssi6_ctrl),
+               SH_PFC_PIN_GROUP(ssi7_data),
+               SH_PFC_PIN_GROUP(ssi78_ctrl),
+               SH_PFC_PIN_GROUP(ssi8_data),
+               SH_PFC_PIN_GROUP(ssi9_data),
+               SH_PFC_PIN_GROUP(ssi9_ctrl_a),
+               SH_PFC_PIN_GROUP(ssi9_ctrl_b),
                SH_PFC_PIN_GROUP(usb0_a),
                SH_PFC_PIN_GROUP(usb0_b),
                SH_PFC_PIN_GROUP(usb0_id),
                SH_PFC_PIN_GROUP(usb30),
                SH_PFC_PIN_GROUP(usb30_id),
+               VIN_DATA_PIN_GROUP(vin4_data, 8, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 10, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 12, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 16, _a),
+               SH_PFC_PIN_GROUP(vin4_data18_a),
+               VIN_DATA_PIN_GROUP(vin4_data, 20, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 24, _a),
+               VIN_DATA_PIN_GROUP(vin4_data, 8, _b),
+               VIN_DATA_PIN_GROUP(vin4_data, 10, _b),
+               VIN_DATA_PIN_GROUP(vin4_data, 12, _b),
+               VIN_DATA_PIN_GROUP(vin4_data, 16, _b),
+               SH_PFC_PIN_GROUP(vin4_data18_b),
+               VIN_DATA_PIN_GROUP(vin4_data, 20, _b),
+               VIN_DATA_PIN_GROUP(vin4_data, 24, _b),
+               SH_PFC_PIN_GROUP(vin4_sync),
+               SH_PFC_PIN_GROUP(vin4_field),
+               SH_PFC_PIN_GROUP(vin4_clkenb),
+               SH_PFC_PIN_GROUP(vin4_clk),
+               VIN_DATA_PIN_GROUP(vin5_data, 8, _a),
+               VIN_DATA_PIN_GROUP(vin5_data, 10, _a),
+               VIN_DATA_PIN_GROUP(vin5_data, 12, _a),
+               VIN_DATA_PIN_GROUP(vin5_data, 16, _a),
+               SH_PFC_PIN_GROUP(vin5_data8_b),
+               SH_PFC_PIN_GROUP(vin5_sync_a),
+               SH_PFC_PIN_GROUP(vin5_field_a),
+               SH_PFC_PIN_GROUP(vin5_clkenb_a),
+               SH_PFC_PIN_GROUP(vin5_clk_a),
+               SH_PFC_PIN_GROUP(vin5_clk_b),
+       },
+       .automotive = {
+               SH_PFC_PIN_GROUP(canfd0_data),
+               SH_PFC_PIN_GROUP(canfd1_data),
        }
 };
 
+static const char * const audio_clk_groups[] = {
+       "audio_clk_a",
+       "audio_clk_b_a",
+       "audio_clk_b_b",
+       "audio_clk_b_c",
+       "audio_clk_c_a",
+       "audio_clk_c_b",
+       "audio_clk_c_c",
+       "audio_clkout_a",
+       "audio_clkout_b",
+       "audio_clkout1_a",
+       "audio_clkout1_b",
+       "audio_clkout1_c",
+       "audio_clkout2_a",
+       "audio_clkout2_b",
+       "audio_clkout2_c",
+       "audio_clkout3_a",
+       "audio_clkout3_b",
+       "audio_clkout3_c",
+};
+
 static const char * const avb_groups[] = {
        "avb_link",
        "avb_magic",
@@ -2574,6 +3806,26 @@ static const char * const avb_groups[] = {
        "avb_avtp_capture_a",
 };
 
+static const char * const can0_groups[] = {
+       "can0_data",
+};
+
+static const char * const can1_groups[] = {
+       "can1_data",
+};
+
+static const char * const can_clk_groups[] = {
+       "can_clk",
+};
+
+static const char * const canfd0_groups[] = {
+       "canfd0_data",
+};
+
+static const char * const canfd1_groups[] = {
+       "canfd1_data",
+};
+
 static const char * const du_groups[] = {
        "du_rgb666",
        "du_rgb888",
@@ -2586,6 +3838,52 @@ static const char * const du_groups[] = {
        "du_disp",
 };
 
+static const char * const hscif0_groups[] = {
+       "hscif0_data_a",
+       "hscif0_clk_a",
+       "hscif0_ctrl_a",
+       "hscif0_data_b",
+       "hscif0_clk_b",
+};
+
+static const char * const hscif1_groups[] = {
+       "hscif1_data_a",
+       "hscif1_clk_a",
+       "hscif1_data_b",
+       "hscif1_clk_b",
+       "hscif1_ctrl_b",
+};
+
+static const char * const hscif2_groups[] = {
+       "hscif2_data_a",
+       "hscif2_clk_a",
+       "hscif2_ctrl_a",
+       "hscif2_data_b",
+};
+
+static const char * const hscif3_groups[] = {
+       "hscif3_data_a",
+       "hscif3_data_b",
+       "hscif3_clk_b",
+       "hscif3_data_c",
+       "hscif3_clk_c",
+       "hscif3_ctrl_c",
+       "hscif3_data_d",
+       "hscif3_data_e",
+       "hscif3_ctrl_e",
+};
+
+static const char * const hscif4_groups[] = {
+       "hscif4_data_a",
+       "hscif4_clk_a",
+       "hscif4_ctrl_a",
+       "hscif4_data_b",
+       "hscif4_clk_b",
+       "hscif4_data_c",
+       "hscif4_data_d",
+       "hscif4_data_e",
+};
+
 static const char * const i2c1_groups[] = {
        "i2c1_a",
        "i2c1_b",
@@ -2763,6 +4061,56 @@ static const char * const scif_clk_groups[] = {
        "scif_clk_b",
 };
 
+static const char * const sdhi0_groups[] = {
+       "sdhi0_data1",
+       "sdhi0_data4",
+       "sdhi0_ctrl",
+       "sdhi0_cd",
+       "sdhi0_wp",
+};
+
+static const char * const sdhi1_groups[] = {
+       "sdhi1_data1",
+       "sdhi1_data4",
+       "sdhi1_ctrl",
+       "sdhi1_cd",
+       "sdhi1_wp",
+};
+
+static const char * const sdhi3_groups[] = {
+       "sdhi3_data1",
+       "sdhi3_data4",
+       "sdhi3_data8",
+       "sdhi3_ctrl",
+       "sdhi3_cd",
+       "sdhi3_wp",
+       "sdhi3_ds",
+};
+
+static const char * const ssi_groups[] = {
+       "ssi0_data",
+       "ssi01239_ctrl",
+       "ssi1_data",
+       "ssi1_ctrl",
+       "ssi2_data",
+       "ssi2_ctrl_a",
+       "ssi2_ctrl_b",
+       "ssi3_data",
+       "ssi349_ctrl",
+       "ssi4_data",
+       "ssi4_ctrl",
+       "ssi5_data",
+       "ssi5_ctrl",
+       "ssi6_data",
+       "ssi6_ctrl",
+       "ssi7_data",
+       "ssi78_ctrl",
+       "ssi8_data",
+       "ssi9_data",
+       "ssi9_ctrl_a",
+       "ssi9_ctrl_b",
+};
+
 static const char * const usb0_groups[] = {
        "usb0_a",
        "usb0_b",
@@ -2774,13 +4122,56 @@ static const char * const usb30_groups[] = {
        "usb30_id",
 };
 
+static const char * const vin4_groups[] = {
+       "vin4_data8_a",
+       "vin4_data10_a",
+       "vin4_data12_a",
+       "vin4_data16_a",
+       "vin4_data18_a",
+       "vin4_data20_a",
+       "vin4_data24_a",
+       "vin4_data8_b",
+       "vin4_data10_b",
+       "vin4_data12_b",
+       "vin4_data16_b",
+       "vin4_data18_b",
+       "vin4_data20_b",
+       "vin4_data24_b",
+       "vin4_sync",
+       "vin4_field",
+       "vin4_clkenb",
+       "vin4_clk",
+};
+
+static const char * const vin5_groups[] = {
+       "vin5_data8_a",
+       "vin5_data10_a",
+       "vin5_data12_a",
+       "vin5_data16_a",
+       "vin5_data8_b",
+       "vin5_sync_a",
+       "vin5_field_a",
+       "vin5_clkenb_a",
+       "vin5_clk_a",
+       "vin5_clk_b",
+};
+
 static const struct {
-       struct sh_pfc_function common[29];
-       struct sh_pfc_function automotive[0];
+       struct sh_pfc_function common[44];
+       struct sh_pfc_function automotive[2];
 } pinmux_functions = {
        .common = {
+               SH_PFC_FUNCTION(audio_clk),
                SH_PFC_FUNCTION(avb),
+               SH_PFC_FUNCTION(can0),
+               SH_PFC_FUNCTION(can1),
+               SH_PFC_FUNCTION(can_clk),
                SH_PFC_FUNCTION(du),
+               SH_PFC_FUNCTION(hscif0),
+               SH_PFC_FUNCTION(hscif1),
+               SH_PFC_FUNCTION(hscif2),
+               SH_PFC_FUNCTION(hscif3),
+               SH_PFC_FUNCTION(hscif4),
                SH_PFC_FUNCTION(i2c1),
                SH_PFC_FUNCTION(i2c2),
                SH_PFC_FUNCTION(i2c4),
@@ -2806,8 +4197,18 @@ static const struct {
                SH_PFC_FUNCTION(scif4),
                SH_PFC_FUNCTION(scif5),
                SH_PFC_FUNCTION(scif_clk),
+               SH_PFC_FUNCTION(sdhi0),
+               SH_PFC_FUNCTION(sdhi1),
+               SH_PFC_FUNCTION(sdhi3),
+               SH_PFC_FUNCTION(ssi),
                SH_PFC_FUNCTION(usb0),
                SH_PFC_FUNCTION(usb30),
+               SH_PFC_FUNCTION(vin4),
+               SH_PFC_FUNCTION(vin5),
+       },
+       .automotive = {
+               SH_PFC_FUNCTION(canfd0),
+               SH_PFC_FUNCTION(canfd1),
        }
 };
 
@@ -3280,6 +4681,31 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
        { },
 };
 
+enum ioctrl_regs {
+       IOCTRL30,
+};
+
+static const struct pinmux_ioctrl_reg pinmux_ioctrl_regs[] = {
+       [IOCTRL30] = { 0xe6060380, },
+       { /* sentinel */ },
+};
+
+static int r8a77990_pin_to_pocctrl(struct sh_pfc *pfc, unsigned int pin,
+                                  u32 *pocctrl)
+{
+       int bit = -EINVAL;
+
+       *pocctrl = pinmux_ioctrl_regs[IOCTRL30].reg;
+
+       if (pin >= RCAR_GP_PIN(3, 0) && pin <= RCAR_GP_PIN(3, 11))
+               bit = pin & 0x1f;
+
+       if (pin >= RCAR_GP_PIN(4, 0) && pin <= RCAR_GP_PIN(4, 10))
+               bit = (pin & 0x1f) + 19;
+
+       return bit;
+}
+
 static const struct pinmux_bias_reg pinmux_bias_regs[] = {
        { PINMUX_BIAS_REG("PUEN0", 0xe6060400, "PUD0", 0xe6060440) {
                 [0] = RCAR_GP_PIN(2, 23),      /* RD# */
@@ -3488,6 +4914,17 @@ static const struct pinmux_bias_reg pinmux_bias_regs[] = {
        { /* sentinel */ },
 };
 
+static bool pin_has_pud(unsigned int pin)
+{
+       /* Some pins are pull-up only */
+       switch (pin) {
+       case RCAR_GP_PIN(6, 9): /* USB30_OVC  */
+               return false;
+       }
+
+       return true;
+}
+
 static unsigned int r8a77990_pinmux_get_bias(struct sh_pfc *pfc,
                                             unsigned int pin)
 {
@@ -3500,7 +4937,7 @@ static unsigned int r8a77990_pinmux_get_bias(struct sh_pfc *pfc,
 
        if (!(sh_pfc_read(pfc, reg->puen) & BIT(bit)))
                return PIN_CONFIG_BIAS_DISABLE;
-       else if (sh_pfc_read(pfc, reg->pud) & BIT(bit))
+       else if (!pin_has_pud(pin) || (sh_pfc_read(pfc, reg->pud) & BIT(bit)))
                return PIN_CONFIG_BIAS_PULL_UP;
        else
                return PIN_CONFIG_BIAS_PULL_DOWN;
@@ -3521,15 +4958,18 @@ static void r8a77990_pinmux_set_bias(struct sh_pfc *pfc, unsigned int pin,
        if (bias != PIN_CONFIG_BIAS_DISABLE)
                enable |= BIT(bit);
 
-       updown = sh_pfc_read(pfc, reg->pud) & ~BIT(bit);
-       if (bias == PIN_CONFIG_BIAS_PULL_UP)
-               updown |= BIT(bit);
+       if (pin_has_pud(pin)) {
+               updown = sh_pfc_read(pfc, reg->pud) & ~BIT(bit);
+               if (bias == PIN_CONFIG_BIAS_PULL_UP)
+                       updown |= BIT(bit);
 
-       sh_pfc_write(pfc, reg->pud, updown);
+               sh_pfc_write(pfc, reg->pud, updown);
+       }
        sh_pfc_write(pfc, reg->puen, enable);
 }
 
 static const struct sh_pfc_soc_operations r8a77990_pinmux_ops = {
+       .pin_to_pocctrl = r8a77990_pin_to_pocctrl,
        .get_bias = r8a77990_pinmux_get_bias,
        .set_bias = r8a77990_pinmux_set_bias,
 };
@@ -3551,6 +4991,7 @@ const struct sh_pfc_soc_info r8a774c0_pinmux_info = {
 
        .cfg_regs = pinmux_config_regs,
        .bias_regs = pinmux_bias_regs,
+       .ioctrl_regs = pinmux_ioctrl_regs,
 
        .pinmux_data = pinmux_data,
        .pinmux_data_size = ARRAY_SIZE(pinmux_data),
@@ -3576,6 +5017,7 @@ const struct sh_pfc_soc_info r8a77990_pinmux_info = {
 
        .cfg_regs = pinmux_config_regs,
        .bias_regs = pinmux_bias_regs,
+       .ioctrl_regs = pinmux_ioctrl_regs,
 
        .pinmux_data = pinmux_data,
        .pinmux_data_size = ARRAY_SIZE(pinmux_data),
index 9484eaa8522aec6f25186962559b33b633c67ae6..84d78db381e302492b457f70c6e3d86a390fb56a 100644 (file)
@@ -388,10 +388,10 @@ FM(IP12_31_28)    IP12_31_28 \
 #define MOD_SEL0_27            FM(SEL_MSIOF3_0)        FM(SEL_MSIOF3_1)
 #define MOD_SEL0_26            FM(SEL_HSCIF3_0)        FM(SEL_HSCIF3_1)
 #define MOD_SEL0_25            FM(SEL_SCIF4_0)         FM(SEL_SCIF4_1)
-#define MOD_SEL0_24_23         FM(SEL_PWM0_0)          FM(SEL_PWM0_1)          FM(SEL_PWM0_2)          FM(SEL_PWM0_3)
-#define MOD_SEL0_22_21         FM(SEL_PWM1_0)          FM(SEL_PWM1_1)          FM(SEL_PWM1_2)          FM(SEL_PWM1_3)
-#define MOD_SEL0_20_19         FM(SEL_PWM2_0)          FM(SEL_PWM2_1)          FM(SEL_PWM2_2)          FM(SEL_PWM2_3)
-#define MOD_SEL0_18_17         FM(SEL_PWM3_0)          FM(SEL_PWM3_1)          FM(SEL_PWM3_2)          FM(SEL_PWM3_3)
+#define MOD_SEL0_24_23         FM(SEL_PWM0_0)          FM(SEL_PWM0_1)          FM(SEL_PWM0_2)          F_(0, 0)
+#define MOD_SEL0_22_21         FM(SEL_PWM1_0)          FM(SEL_PWM1_1)          FM(SEL_PWM1_2)          F_(0, 0)
+#define MOD_SEL0_20_19         FM(SEL_PWM2_0)          FM(SEL_PWM2_1)          FM(SEL_PWM2_2)          F_(0, 0)
+#define MOD_SEL0_18_17         FM(SEL_PWM3_0)          FM(SEL_PWM3_1)          FM(SEL_PWM3_2)          F_(0, 0)
 #define MOD_SEL0_15            FM(SEL_IRQ_0_0)         FM(SEL_IRQ_0_1)
 #define MOD_SEL0_14            FM(SEL_IRQ_1_0)         FM(SEL_IRQ_1_1)
 #define MOD_SEL0_13            FM(SEL_IRQ_2_0)         FM(SEL_IRQ_2_1)
@@ -468,12 +468,6 @@ enum {
 #undef FM
 };
 
-#define PINMUX_IPSR_MSEL2(ipsr, fn, msel1, msel2) \
-       PINMUX_DATA(fn##_MARK, FN_##msel1, FN_##msel2, FN_##fn, FN_##ipsr)
-
-#define PINMUX_IPSR_PHYS(ipsr, fn, msel) \
-       PINMUX_DATA(fn##_MARK, FN_##msel)
-
 static const u16 pinmux_data[] = {
        PINMUX_DATA_GP_ALL(),
 
index 4f44ce0d7237faa9f203ccd5f4cf2f3185b15d02..501de63e6c5f4be2bcb2bd706df746261a732cd1 100644 (file)
@@ -1713,6 +1713,9 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
        },
 
        { PINMUX_CFG_REG("PFCR3", 0xfffe38a8, 16, 4) {
+               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                PF12MD_000, PF12MD_001, 0, PF12MD_011,
                PF12MD_100, PF12MD_101, 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0 }
@@ -1756,8 +1759,10 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
                0, 0, 0, 0, 0, 0, 0, 0,
                PF1MD_000, PF1MD_001, PF1MD_010, PF1MD_011,
                PF1MD_100, PF1MD_101, 0, 0,
-               0, 0, 0, 0, 0, 0, 0, 0
-        }
+               0, 0, 0, 0, 0, 0, 0, 0,
+               PF0MD_000, PF0MD_001, PF0MD_010, PF0MD_011,
+               PF0MD_100, PF0MD_101, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0 }
        },
 
        { PINMUX_CFG_REG("PFIOR0", 0xfffe38b2, 16, 1) {
index 5b48a0368e55b33a84feff17a01c5a55bfdbbfa8..a95997a389a4e873d11eedab4568babaae08398c 100644 (file)
@@ -2116,7 +2116,7 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
        },
 
        { PINMUX_CFG_REG("PCIOR0", 0xfffe3852, 16, 1) {
-               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+               0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                PC8_IN, PC8_OUT,
                PC7_IN, PC7_OUT,
                PC6_IN, PC6_OUT,
index 654029fc8d96ffccb785cde10295509564b137a7..085770e66895680a5bd32728b6e98352f597ea4f 100644 (file)
@@ -3073,6 +3073,7 @@ static const unsigned int tpu4_to2_mux[] = {
 };
 static const unsigned int tpu4_to3_pins[] = {
        /* TO */
+       PIN_NUMBER(6, 26),
 };
 static const unsigned int tpu4_to3_mux[] = {
        TPU4TO3_MARK,
index b0533c86053a64676039558171b0e28fe6fc5db7..748a32a3af82d3685a0a475fa7faeeccdfa27399 100644 (file)
@@ -2210,31 +2210,31 @@ static const struct pinmux_cfg_reg pinmux_config_regs[] = {
            /* IP10_22 [1] */
                FN_CAN_CLK_A, FN_RX4_D,
            /* IP10_21_19 [3] */
-               FN_AUDIO_CLKOUT, FN_TX1_E, FN_HRTS0_C, FN_FSE_B,
-               FN_LCD_M_DISP_B, 0, 0, 0,
+               FN_AUDIO_CLKOUT, FN_TX1_E, 0, FN_HRTS0_C, FN_FSE_B,
+               FN_LCD_M_DISP_B, 0, 0,
            /* IP10_18_16 [3] */
-               FN_AUDIO_CLKC, FN_SCK1_E, FN_HCTS0_C, FN_FRB_B,
-               FN_LCD_VEPWC_B, 0, 0, 0,
+               FN_AUDIO_CLKC, FN_SCK1_E, 0, FN_HCTS0_C, FN_FRB_B,
+               FN_LCD_VEPWC_B, 0, 0,
            /* IP10_15 [1] */
                FN_AUDIO_CLKB_A, FN_LCD_CLK_B,
            /* IP10_14_12 [3] */
                FN_AUDIO_CLKA_A, FN_VI1_CLK_B, FN_SCK1_D, FN_IECLK_B,
                FN_LCD_FLM_B, 0, 0, 0,
            /* IP10_11_9 [3] */
-               FN_SSI_SDATA3, FN_VI1_7_B, FN_HTX0_C, FN_FWE_B,
-               FN_LCD_CL2_B, 0, 0, 0,
+               FN_SSI_SDATA3, FN_VI1_7_B, 0, FN_HTX0_C, FN_FWE_B,
+               FN_LCD_CL2_B, 0, 0,
            /* IP10_8_6 [3] */
-               FN_SSI_SDATA2, FN_VI1_6_B, FN_HRX0_C, FN_FRE_B,
-               FN_LCD_CL1_B, 0, 0, 0,
+               FN_SSI_SDATA2, FN_VI1_6_B, 0, FN_HRX0_C, FN_FRE_B,
+               FN_LCD_CL1_B, 0, 0,
            /* IP10_5_3 [3] */
                FN_SSI_WS23, FN_VI1_5_B, FN_TX1_D, FN_HSCK0_C, FN_FALE_B,
-               FN_LCD_DON_B, 0, 0, 0,
+               FN_LCD_DON_B, 0, 0,
            /* IP10_2_0 [3] */
                FN_SSI_SCK23, FN_VI1_4_B, FN_RX1_D, FN_FCLE_B,
                FN_LCD_DATA15_B, 0, 0, 0 }
        },
        { PINMUX_CFG_REG_VAR("IPSR11", 0xFFFC0048, 32,
-                       3, 1, 2, 2, 2, 3, 3, 1, 2, 3, 3, 1, 1, 1, 1) {
+                       3, 1, 2, 3, 2, 2, 3, 3, 1, 2, 3, 3, 1, 1, 1, 1) {
            /* IP11_31_29 [3] */
            0, 0, 0, 0, 0, 0, 0, 0,
            /* IP11_28 [1] */
index 458ae0a6b5404631984569a7ab64916f4c4f016e..46d477ff510921f36036b92bf8778296fbf3b081 100644 (file)
@@ -41,7 +41,8 @@ struct sh_pfc_pin {
                .name = #alias,                         \
                .pins = n##_pins,                       \
                .mux = n##_mux,                         \
-               .nr_pins = ARRAY_SIZE(n##_pins),        \
+               .nr_pins = ARRAY_SIZE(n##_pins) +       \
+               BUILD_BUG_ON_ZERO(sizeof(n##_pins) != sizeof(n##_mux)), \
        }
 #define SH_PFC_PIN_GROUP(n)    SH_PFC_PIN_GROUP_ALIAS(n, n)
 
@@ -53,18 +54,32 @@ struct sh_pfc_pin_group {
 };
 
 /*
- * Using union vin_data saves memory occupied by the VIN data pins.
- * VIN_DATA_PIN_GROUP() is  a macro  used  to describe the VIN pin groups
- * in this case.
+ * Using union vin_data{,12,16} saves memory occupied by the VIN data pins.
+ * VIN_DATA_PIN_GROUP() is a macro used to describe the VIN pin groups
+ * in this case. It accepts an optional 'version' argument used when the
+ * same group can appear on a different set of pins.
  */
-#define VIN_DATA_PIN_GROUP(n, s)                               \
-       {                                                       \
-               .name = #n#s,                                   \
-               .pins = n##_pins.data##s,                       \
-               .mux = n##_mux.data##s,                         \
-               .nr_pins = ARRAY_SIZE(n##_pins.data##s),        \
+#define VIN_DATA_PIN_GROUP(n, s, ...)                                  \
+       {                                                               \
+               .name = #n#s#__VA_ARGS__,                               \
+               .pins = n##__VA_ARGS__##_pins.data##s,                  \
+               .mux = n##__VA_ARGS__##_mux.data##s,                    \
+               .nr_pins = ARRAY_SIZE(n##__VA_ARGS__##_pins.data##s),   \
        }
 
+union vin_data12 {
+       unsigned int data12[12];
+       unsigned int data10[10];
+       unsigned int data8[8];
+};
+
+union vin_data16 {
+       unsigned int data16[16];
+       unsigned int data12[12];
+       unsigned int data10[10];
+       unsigned int data8[8];
+};
+
 union vin_data {
        unsigned int data24[24];
        unsigned int data20[20];
@@ -127,8 +142,7 @@ struct pinmux_cfg_reg {
  */
 #define PINMUX_CFG_REG_VAR(name, r, r_width, var_fw0, var_fwn...) \
        .reg = r, .reg_width = r_width, \
-       .var_field_width = (const u8 [r_width]) \
-               { var_fw0, var_fwn, 0 }, \
+       .var_field_width = (const u8 []) { var_fw0, var_fwn, 0 }, \
        .enum_ids = (const u16 [])
 
 struct pinmux_drive_reg_field {
@@ -372,6 +386,28 @@ extern const struct sh_pfc_soc_info shx3_pinmux_info;
 #define PINMUX_IPSR_MSEL(ipsr, fn, msel)                               \
        PINMUX_DATA(fn##_MARK, FN_##msel, FN_##fn, FN_##ipsr)
 
+/*
+ * Describe a pinmux configuration similar to PINMUX_IPSR_MSEL, but with
+ * an additional select register that controls physical multiplexing
+ * with another pin.
+ *   - ipsr: IPSR field
+ *   - fn: Function name, also referring to the IPSR field
+ *   - psel: Physical multiplexing selector
+ *   - msel: Module selector
+ */
+#define PINMUX_IPSR_PHYS_MSEL(ipsr, fn, psel, msel) \
+       PINMUX_DATA(fn##_MARK, FN_##psel, FN_##msel, FN_##fn, FN_##ipsr)
+
+/*
+ * Describe a pinmux configuration in which a pin is physically multiplexed
+ * with other pins.
+ *   - ipsr: IPSR field
+ *   - fn: Function name, also referring to the IPSR field
+ *   - psel: Physical multiplexing selector
+ */
+#define PINMUX_IPSR_PHYS(ipsr, fn, psel) \
+       PINMUX_DATA(fn##_MARK, FN_##psel)
+
 /*
  * Describe a pinmux configuration for a single-function pin with GPIO
  * capability.
index 4537b545399669140801660d85ce7f47b51aae31..7d9a44bd0047f3d4dd394141c8e28a352471839f 100644 (file)
@@ -159,10 +159,8 @@ struct sprd_pinctrl {
        struct sprd_pinctrl_soc_info *info;
 };
 
-enum sprd_pinconf_params {
-       SPRD_PIN_CONFIG_CONTROL = PIN_CONFIG_END + 1,
-       SPRD_PIN_CONFIG_SLEEP_MODE = PIN_CONFIG_END + 2,
-};
+#define SPRD_PIN_CONFIG_CONTROL                (PIN_CONFIG_END + 1)
+#define SPRD_PIN_CONFIG_SLEEP_MODE     (PIN_CONFIG_END + 2)
 
 static int sprd_pinctrl_get_id_by_name(struct sprd_pinctrl *sprd_pctl,
                                       const char *name)
index 0fbfcc9ea07c5ab3198e77f5e453353c4da7955d..813eccbb9aafadc01a90caec136356b70ddcb3e1 100644 (file)
@@ -8,6 +8,7 @@
  */
 #include <linux/clk.h>
 #include <linux/gpio/driver.h>
+#include <linux/hwspinlock.h>
 #include <linux/io.h>
 #include <linux/irq.h>
 #include <linux/mfd/syscon.h>
@@ -51,6 +52,8 @@
 #define gpio_range_to_bank(chip) \
                container_of(chip, struct stm32_gpio_bank, range)
 
+#define HWSPINLOCK_TIMEOUT     5 /* msec */
+
 static const char * const stm32_gpio_functions[] = {
        "gpio", "af0", "af1",
        "af2", "af3", "af4",
@@ -91,6 +94,7 @@ struct stm32_pinctrl {
        struct irq_domain       *domain;
        struct regmap           *regmap;
        struct regmap_field     *irqmux[STM32_GPIO_PINS_PER_BANK];
+       struct hwspinlock *hwlock;
 };
 
 static inline int stm32_gpio_pin(int gpio)
@@ -576,14 +580,24 @@ static int stm32_pmx_get_func_groups(struct pinctrl_dev *pctldev,
 static void stm32_pmx_set_mode(struct stm32_gpio_bank *bank,
                int pin, u32 mode, u32 alt)
 {
+       struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
        u32 val;
        int alt_shift = (pin % 8) * 4;
        int alt_offset = STM32_GPIO_AFRL + (pin / 8) * 4;
        unsigned long flags;
+       int err = 0;
 
        clk_enable(bank->clk);
        spin_lock_irqsave(&bank->lock, flags);
 
+       if (pctl->hwlock)
+               err = hwspin_lock_timeout(pctl->hwlock, HWSPINLOCK_TIMEOUT);
+
+       if (err) {
+               dev_err(pctl->dev, "Can't get hwspinlock\n");
+               goto unlock;
+       }
+
        val = readl_relaxed(bank->base + alt_offset);
        val &= ~GENMASK(alt_shift + 3, alt_shift);
        val |= (alt << alt_shift);
@@ -594,6 +608,10 @@ static void stm32_pmx_set_mode(struct stm32_gpio_bank *bank,
        val |= mode << (pin * 2);
        writel_relaxed(val, bank->base + STM32_GPIO_MODER);
 
+       if (pctl->hwlock)
+               hwspin_unlock(pctl->hwlock);
+
+unlock:
        spin_unlock_irqrestore(&bank->lock, flags);
        clk_disable(bank->clk);
 }
@@ -683,17 +701,31 @@ static const struct pinmux_ops stm32_pmx_ops = {
 static void stm32_pconf_set_driving(struct stm32_gpio_bank *bank,
        unsigned offset, u32 drive)
 {
+       struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
        unsigned long flags;
        u32 val;
+       int err = 0;
 
        clk_enable(bank->clk);
        spin_lock_irqsave(&bank->lock, flags);
 
+       if (pctl->hwlock)
+               err = hwspin_lock_timeout(pctl->hwlock, HWSPINLOCK_TIMEOUT);
+
+       if (err) {
+               dev_err(pctl->dev, "Can't get hwspinlock\n");
+               goto unlock;
+       }
+
        val = readl_relaxed(bank->base + STM32_GPIO_TYPER);
        val &= ~BIT(offset);
        val |= drive << offset;
        writel_relaxed(val, bank->base + STM32_GPIO_TYPER);
 
+       if (pctl->hwlock)
+               hwspin_unlock(pctl->hwlock);
+
+unlock:
        spin_unlock_irqrestore(&bank->lock, flags);
        clk_disable(bank->clk);
 }
@@ -719,17 +751,31 @@ static u32 stm32_pconf_get_driving(struct stm32_gpio_bank *bank,
 static void stm32_pconf_set_speed(struct stm32_gpio_bank *bank,
        unsigned offset, u32 speed)
 {
+       struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
        unsigned long flags;
        u32 val;
+       int err = 0;
 
        clk_enable(bank->clk);
        spin_lock_irqsave(&bank->lock, flags);
 
+       if (pctl->hwlock)
+               err = hwspin_lock_timeout(pctl->hwlock, HWSPINLOCK_TIMEOUT);
+
+       if (err) {
+               dev_err(pctl->dev, "Can't get hwspinlock\n");
+               goto unlock;
+       }
+
        val = readl_relaxed(bank->base + STM32_GPIO_SPEEDR);
        val &= ~GENMASK(offset * 2 + 1, offset * 2);
        val |= speed << (offset * 2);
        writel_relaxed(val, bank->base + STM32_GPIO_SPEEDR);
 
+       if (pctl->hwlock)
+               hwspin_unlock(pctl->hwlock);
+
+unlock:
        spin_unlock_irqrestore(&bank->lock, flags);
        clk_disable(bank->clk);
 }
@@ -755,17 +801,31 @@ static u32 stm32_pconf_get_speed(struct stm32_gpio_bank *bank,
 static void stm32_pconf_set_bias(struct stm32_gpio_bank *bank,
        unsigned offset, u32 bias)
 {
+       struct stm32_pinctrl *pctl = dev_get_drvdata(bank->gpio_chip.parent);
        unsigned long flags;
        u32 val;
+       int err = 0;
 
        clk_enable(bank->clk);
        spin_lock_irqsave(&bank->lock, flags);
 
+       if (pctl->hwlock)
+               err = hwspin_lock_timeout(pctl->hwlock, HWSPINLOCK_TIMEOUT);
+
+       if (err) {
+               dev_err(pctl->dev, "Can't get hwspinlock\n");
+               goto unlock;
+       }
+
        val = readl_relaxed(bank->base + STM32_GPIO_PUPDR);
        val &= ~GENMASK(offset * 2 + 1, offset * 2);
        val |= bias << (offset * 2);
        writel_relaxed(val, bank->base + STM32_GPIO_PUPDR);
 
+       if (pctl->hwlock)
+               hwspin_unlock(pctl->hwlock);
+
+unlock:
        spin_unlock_irqrestore(&bank->lock, flags);
        clk_disable(bank->clk);
 }
@@ -1140,7 +1200,7 @@ int stm32_pctl_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        struct stm32_pinctrl *pctl;
        struct pinctrl_pin_desc *pins;
-       int i, ret, banks = 0;
+       int i, ret, hwlock_id, banks = 0;
 
        if (!np)
                return -EINVAL;
@@ -1160,6 +1220,15 @@ int stm32_pctl_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, pctl);
 
+       /* hwspinlock is optional */
+       hwlock_id = of_hwspin_lock_get_id(pdev->dev.of_node, 0);
+       if (hwlock_id < 0) {
+               if (hwlock_id == -EPROBE_DEFER)
+                       return hwlock_id;
+       } else {
+               pctl->hwlock = hwspin_lock_request_specific(hwlock_id);
+       }
+
        pctl->dev = dev;
        pctl->match_data = match->data;
        ret = stm32_pctrl_build_state(pdev);
index 95282cda6ceea55af7867a4066f0af178237d3a5..a731fc966b632fa43dc938831c978b49f746d303 100644 (file)
@@ -6,6 +6,10 @@ config PINCTRL_SUNXI
        select GENERIC_PINCONF
        select GPIOLIB
 
+config PINCTRL_SUNIV_F1C100S
+       def_bool MACH_SUNIV
+       select PINCTRL_SUNXI
+
 config PINCTRL_SUN4I_A10
        def_bool MACH_SUN4I || MACH_SUN7I || MACH_SUN8I
        select PINCTRL_SUNXI
index adb8443aa55c27ce5827b29dad6716308776933d..fafcdae8134f85773d3c143fe0c622853e92fd8e 100644 (file)
@@ -3,6 +3,7 @@
 obj-y                                  += pinctrl-sunxi.o
 
 # SoC Drivers
+obj-$(CONFIG_PINCTRL_SUNIV_F1C100S)    += pinctrl-suniv-f1c100s.o
 obj-$(CONFIG_PINCTRL_SUN4I_A10)                += pinctrl-sun4i-a10.o
 obj-$(CONFIG_PINCTRL_SUN5I)            += pinctrl-sun5i.o
 obj-$(CONFIG_PINCTRL_SUN6I_A31)                += pinctrl-sun6i-a31.o
index f5f77432ce6f830677d09887a16b34e0af01b2a4..7b83d3755a0ede02eec371def3bdbb0b260c57c7 100644 (file)
@@ -323,71 +323,71 @@ static const struct sunxi_desc_pin a64_pins[] = {
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* PCK */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* CLK */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* PCK */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* CLK */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* CK */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* ERR */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* CK */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* ERR */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* HSYNC */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* SYNC */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* HSYNC */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* SYNC */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* VSYNC */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* DVLD */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* VSYNC */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* DVLD */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* D0 */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* D0 */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D0 */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* D0 */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* D1 */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* D1 */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D1 */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* D1 */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* D2 */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* D2 */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D2 */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* D2 */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* D3 */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* D3 */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D3 */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* D3 */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* D4 */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* D4 */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D4 */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* D4 */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* D5 */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* D5 */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D5 */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* D5 */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* D6 */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* D6 */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D6 */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* D6 */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0"),          /* D7 */
-                 SUNXI_FUNCTION(0x4, "ts0")),          /* D7 */
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D7 */
+                 SUNXI_FUNCTION(0x4, "ts")),           /* D7 */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0")),         /* SCK */
+                 SUNXI_FUNCTION(0x2, "csi")),          /* SCK */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 13),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
-                 SUNXI_FUNCTION(0x2, "csi0")),         /* SDA */
+                 SUNXI_FUNCTION(0x2, "csi")),          /* SDA */
        SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 14),
                  SUNXI_FUNCTION(0x0, "gpio_in"),
                  SUNXI_FUNCTION(0x1, "gpio_out"),
diff --git a/drivers/pinctrl/sunxi/pinctrl-suniv-f1c100s.c b/drivers/pinctrl/sunxi/pinctrl-suniv-f1c100s.c
new file mode 100644 (file)
index 0000000..2801ca7
--- /dev/null
@@ -0,0 +1,416 @@
+/*
+ * Allwinner new F-series F1C100s SoC (suniv) pinctrl driver.
+ *
+ * Copyright (C) 2018 Icenowy Zheng
+ *
+ * Icenowy Zheng <icenowy@aosc.io>
+ *
+ * Copyright (C) 2014 Jackie Hwang
+ *
+ * Jackie Hwang <huangshr@allwinnertech.com>
+ *
+ * Copyright (C) 2014 Chen-Yu Tsai
+ *
+ * Chen-Yu Tsai <wens@csie.org>
+ *
+ * Copyright (C) 2014 Maxime Ripard
+ *
+ * Maxime Ripard <maxime.ripard@free-electrons.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#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 suniv_f1c100s_pins[] = {
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 0),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "rtp"),           /* X1 */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* BCLK */
+                 SUNXI_FUNCTION(0x5, "uart1"),         /* RTS */
+                 SUNXI_FUNCTION(0x6, "spi1")),         /* CS */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 1),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "rtp"),           /* X2 */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* LRCK */
+                 SUNXI_FUNCTION(0x5, "uart1"),         /* CTS */
+                 SUNXI_FUNCTION(0x6, "spi1")),         /* MOSI */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 2),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "rtp"),           /* Y1 */
+                 SUNXI_FUNCTION(0x3, "pwm0"),          /* PWM0 */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* IN */
+                 SUNXI_FUNCTION(0x5, "uart1"),         /* RX */
+                 SUNXI_FUNCTION(0x6, "spi1")),         /* MOSI */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(A, 3),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "rtp"),           /* Y2 */
+                 SUNXI_FUNCTION(0x3, "ir0"),           /* RX */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* OUT */
+                 SUNXI_FUNCTION(0x5, "uart1"),         /* TX */
+                 SUNXI_FUNCTION(0x6, "spi1")),         /* MISO */
+       /* Hole */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "dram"),          /* DQS0 */
+                 SUNXI_FUNCTION(0x3, "i2c1"),          /* SCK */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* BCLK */
+                 SUNXI_FUNCTION(0x5, "uart1"),         /* RTS */
+                 SUNXI_FUNCTION(0x6, "spi1")),         /* CS */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "dram"),          /* DQS1 */
+                 SUNXI_FUNCTION(0x3, "i2c1"),          /* SDA */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* LRCK */
+                 SUNXI_FUNCTION(0x5, "uart1"),         /* CTS */
+                 SUNXI_FUNCTION(0x6, "spi1")),         /* MOSI */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "dram"),          /* CKE */
+                 SUNXI_FUNCTION(0x3, "pwm0"),          /* PWM0 */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* IN */
+                 SUNXI_FUNCTION(0x5, "uart1"),         /* RX */
+                 SUNXI_FUNCTION(0x6, "spi1")),         /* CLK */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "dram"),          /* DDR_REF_D */
+                 SUNXI_FUNCTION(0x3, "ir0"),           /* RX */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* OUT */
+                 SUNXI_FUNCTION(0x5, "uart1"),         /* TX */
+                 SUNXI_FUNCTION(0x6, "spi1")),         /* MISO */
+       /* Hole */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "spi0"),          /* CLK */
+                 SUNXI_FUNCTION(0x3, "mmc1")),         /* CLK */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "spi0"),          /* CS */
+                 SUNXI_FUNCTION(0x3, "mmc1")),         /* CMD */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "spi0"),          /* MISO */
+                 SUNXI_FUNCTION(0x3, "mmc1")),         /* D0 */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "spi0"),          /* MOSI */
+                 SUNXI_FUNCTION(0x3, "uart0")),        /* TX */
+       /* Hole */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D2 */
+                 SUNXI_FUNCTION(0x3, "i2c0"),          /* SDA */
+                 SUNXI_FUNCTION(0x4, "rsb"),           /* SDA */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D3 */
+                 SUNXI_FUNCTION(0x3, "uart1"),         /* RTS */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D4*/
+                 SUNXI_FUNCTION(0x3, "uart1"),         /* CTS */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D5 */
+                 SUNXI_FUNCTION(0x3, "uart1"),         /* RX */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D6 */
+                 SUNXI_FUNCTION(0x3, "uart1"),         /* TX */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D7 */
+                 SUNXI_FUNCTION(0x3, "i2c1"),          /* SCK */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D10 */
+                 SUNXI_FUNCTION(0x3, "i2c1"),          /* SDA */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D11 */
+                 SUNXI_FUNCTION(0x3, "i2s"),           /* MCLK */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D12 */
+                 SUNXI_FUNCTION(0x3, "i2s"),           /* BCLK */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D13 */
+                 SUNXI_FUNCTION(0x3, "i2s"),           /* LRCK */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D14 */
+                 SUNXI_FUNCTION(0x3, "i2s"),           /* IN */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D15 */
+                 SUNXI_FUNCTION(0x3, "i2s"),           /* OUT */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D18 */
+                 SUNXI_FUNCTION(0x3, "i2c0"),          /* SCK */
+                 SUNXI_FUNCTION(0x4, "rsb"),           /* SCK */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 12)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D19 */
+                 SUNXI_FUNCTION(0x3, "uart2"),         /* TX */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 13)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D20 */
+                 SUNXI_FUNCTION(0x3, "lvds1"),         /* RX */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D21 */
+                 SUNXI_FUNCTION(0x3, "uart2"),         /* RTS */
+                 SUNXI_FUNCTION(0x4, "i2c2"),          /* SCK */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D22 */
+                 SUNXI_FUNCTION(0x3, "uart2"),         /* CTS */
+                 SUNXI_FUNCTION(0x4, "i2c2"),          /* SDA */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* D23 */
+                 SUNXI_FUNCTION(0x3, "spdif"),         /* OUT */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 17)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* CLK */
+                 SUNXI_FUNCTION(0x3, "spi0"),          /* CS */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 18)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* DE */
+                 SUNXI_FUNCTION(0x3, "spi0"),          /* MOSI */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 19)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* HYSNC */
+                 SUNXI_FUNCTION(0x3, "spi0"),          /* CLK */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 20)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "lcd"),           /* VSYNC */
+                 SUNXI_FUNCTION(0x3, "spi0"),          /* MISO */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 21)),
+       /* Hole */
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* HSYNC */
+                 SUNXI_FUNCTION(0x3, "lcd"),           /* D0 */
+                 SUNXI_FUNCTION(0x4, "i2c2"),          /* SCK */
+                 SUNXI_FUNCTION(0x5, "uart0"),         /* RX */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* VSYNC */
+                 SUNXI_FUNCTION(0x3, "lcd"),           /* D1 */
+                 SUNXI_FUNCTION(0x4, "i2c2"),          /* SDA */
+                 SUNXI_FUNCTION(0x5, "uart0"),         /* TX */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* PCLK */
+                 SUNXI_FUNCTION(0x3, "lcd"),           /* D8 */
+                 SUNXI_FUNCTION(0x4, "clk"),           /* OUT */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D0 */
+                 SUNXI_FUNCTION(0x3, "lcd"),           /* D9 */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* BCLK */
+                 SUNXI_FUNCTION(0x5, "rsb"),           /* SCK */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D1 */
+                 SUNXI_FUNCTION(0x3, "lcd"),           /* D16 */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* LRCK */
+                 SUNXI_FUNCTION(0x5, "rsb"),           /* SDA */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D2 */
+                 SUNXI_FUNCTION(0x3, "lcd"),           /* D17 */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* IN */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D3 */
+                 SUNXI_FUNCTION(0x3, "pwm1"),          /* PWM1 */
+                 SUNXI_FUNCTION(0x4, "i2s"),           /* OUT */
+                 SUNXI_FUNCTION(0x5, "spdif"),         /* OUT */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D4 */
+                 SUNXI_FUNCTION(0x3, "uart2"),         /* TX */
+                 SUNXI_FUNCTION(0x4, "spi1"),          /* CS */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D5 */
+                 SUNXI_FUNCTION(0x3, "uart2"),         /* RX */
+                 SUNXI_FUNCTION(0x4, "spi1"),          /* MOSI */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D6 */
+                 SUNXI_FUNCTION(0x3, "uart2"),         /* RTS */
+                 SUNXI_FUNCTION(0x4, "spi1"),          /* CLK */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 10),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "csi"),           /* D7 */
+                 SUNXI_FUNCTION(0x3, "uart2"),         /* CTS */
+                 SUNXI_FUNCTION(0x4, "spi1"),          /* MISO */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 11),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "clk0"),          /* OUT */
+                 SUNXI_FUNCTION(0x3, "i2c0"),          /* SCK */
+                 SUNXI_FUNCTION(0x4, "ir"),            /* RX */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)),
+       SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 12),
+                 SUNXI_FUNCTION(0x0, "gpio_in"),
+                 SUNXI_FUNCTION(0x1, "gpio_out"),
+                 SUNXI_FUNCTION(0x2, "i2s"),           /* MCLK */
+                 SUNXI_FUNCTION(0x3, "i2c0"),          /* SDA */
+                 SUNXI_FUNCTION(0x4, "pwm0"),          /* PWM0 */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)),
+
+       /* Hole */
+       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, "ir0"),           /* MS */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 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, "dgb0"),          /* DI */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 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_IRQ_BANK(0x6, 2, 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_IRQ_BANK(0x6, 2, 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"),         /* TX */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 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, "pwm1"),          /* PWM1 */
+                 SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)),
+};
+
+static const struct sunxi_pinctrl_desc suniv_f1c100s_pinctrl_data = {
+       .pins = suniv_f1c100s_pins,
+       .npins = ARRAY_SIZE(suniv_f1c100s_pins),
+       .irq_banks = 3,
+};
+
+static int suniv_pinctrl_probe(struct platform_device *pdev)
+{
+       return sunxi_pinctrl_init(pdev,
+                                 &suniv_f1c100s_pinctrl_data);
+}
+
+static const struct of_device_id suniv_f1c100s_pinctrl_match[] = {
+       { .compatible = "allwinner,suniv-f1c100s-pinctrl", },
+       {}
+};
+
+static struct platform_driver suniv_f1c100s_pinctrl_driver = {
+       .probe  = suniv_pinctrl_probe,
+       .driver = {
+               .name           = "suniv-f1c100s-pinctrl",
+               .of_match_table = suniv_f1c100s_pinctrl_match,
+       },
+};
+builtin_platform_driver(suniv_f1c100s_pinctrl_driver);
index 34e17376ef99ecd9e533d9346ca7145392d6b1c2..5d9184d18c16058fbd0f6e7dd4854c3cc5b8e827 100644 (file)
@@ -26,6 +26,7 @@
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/pinctrl/pinconf-generic.h>
 #include <linux/pinctrl/pinmux.h>
+#include <linux/regulator/consumer.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 
@@ -693,12 +694,74 @@ sunxi_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
        return 0;
 }
 
+static int sunxi_pmx_request(struct pinctrl_dev *pctldev, unsigned offset)
+{
+       struct sunxi_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
+       unsigned short bank = offset / PINS_PER_BANK;
+       struct sunxi_pinctrl_regulator *s_reg = &pctl->regulators[bank];
+       struct regulator *reg;
+       int ret;
+
+       reg = s_reg->regulator;
+       if (!reg) {
+               char supply[16];
+
+               snprintf(supply, sizeof(supply), "vcc-p%c", 'a' + bank);
+               reg = regulator_get(pctl->dev, supply);
+               if (IS_ERR(reg)) {
+                       dev_err(pctl->dev, "Couldn't get bank P%c regulator\n",
+                               'A' + bank);
+                       return PTR_ERR(reg);
+               }
+
+               s_reg->regulator = reg;
+               refcount_set(&s_reg->refcount, 1);
+       } else {
+               refcount_inc(&s_reg->refcount);
+       }
+
+       ret = regulator_enable(reg);
+       if (ret) {
+               dev_err(pctl->dev,
+                       "Couldn't enable bank P%c regulator\n", 'A' + bank);
+               goto out;
+       }
+
+       return 0;
+
+out:
+       if (refcount_dec_and_test(&s_reg->refcount)) {
+               regulator_put(s_reg->regulator);
+               s_reg->regulator = NULL;
+       }
+
+       return ret;
+}
+
+static int sunxi_pmx_free(struct pinctrl_dev *pctldev, unsigned offset)
+{
+       struct sunxi_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
+       unsigned short bank = offset / PINS_PER_BANK;
+       struct sunxi_pinctrl_regulator *s_reg = &pctl->regulators[bank];
+
+       if (!refcount_dec_and_test(&s_reg->refcount))
+               return 0;
+
+       regulator_disable(s_reg->regulator);
+       regulator_put(s_reg->regulator);
+       s_reg->regulator = NULL;
+
+       return 0;
+}
+
 static const struct pinmux_ops sunxi_pmx_ops = {
        .get_functions_count    = sunxi_pmx_get_funcs_cnt,
        .get_function_name      = sunxi_pmx_get_func_name,
        .get_function_groups    = sunxi_pmx_get_func_groups,
        .set_mux                = sunxi_pmx_set_mux,
        .gpio_set_direction     = sunxi_pmx_gpio_set_direction,
+       .request                = sunxi_pmx_request,
+       .free                   = sunxi_pmx_free,
        .strict                 = true,
 };
 
index 4a892e7dde6688ae803cc2d2d6841a8d4a8f45bb..e340d2a24b44e3874246d78c7fb3b4f0c413882c 100644 (file)
@@ -126,11 +126,17 @@ struct sunxi_pinctrl_group {
        unsigned        pin;
 };
 
+struct sunxi_pinctrl_regulator {
+       struct regulator        *regulator;
+       refcount_t              refcount;
+};
+
 struct sunxi_pinctrl {
        void __iomem                    *membase;
        struct gpio_chip                *chip;
        const struct sunxi_pinctrl_desc *desc;
        struct device                   *dev;
+       struct sunxi_pinctrl_regulator  regulators[12];
        struct irq_domain               *domain;
        struct sunxi_pinctrl_function   *functions;
        unsigned                        nfunctions;
index add8e870667b3d2c862c55a78b468366c07c25bc..57babf31e320f2aa5bf7285478ef4d2303a47327 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2015-2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2015-2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/list.h>
 #include <linux/mfd/syscon.h>
@@ -46,7 +36,7 @@ struct uniphier_pinctrl_priv {
        struct pinctrl_desc pctldesc;
        struct pinctrl_dev *pctldev;
        struct regmap *regmap;
-       struct uniphier_pinctrl_socdata *socdata;
+       const struct uniphier_pinctrl_socdata *socdata;
        struct list_head reg_regions;
 };
 
@@ -869,7 +859,7 @@ const struct dev_pm_ops uniphier_pinctrl_pm_ops = {
 };
 
 int uniphier_pinctrl_probe(struct platform_device *pdev,
-                          struct uniphier_pinctrl_socdata *socdata)
+                          const struct uniphier_pinctrl_socdata *socdata)
 {
        struct device *dev = &pdev->dev;
        struct uniphier_pinctrl_priv *priv;
index 280dca725d6ea3c7542635b46a47638611f5e47f..92fef3ae1177ece8c0fc80905cfe9be95c95921b 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2016-2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2016-2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -690,7 +680,7 @@ static int uniphier_ld11_get_gpio_muxval(unsigned int pin,
        return 15;
 }
 
-static struct uniphier_pinctrl_socdata uniphier_ld11_pindata = {
+static const struct uniphier_pinctrl_socdata uniphier_ld11_pindata = {
        .pins = uniphier_ld11_pins,
        .npins = ARRAY_SIZE(uniphier_ld11_pins),
        .groups = uniphier_ld11_groups,
index d2d56c985c83029bddc5af85b6ea77b8d526bcd5..7fbc9652b1344a4fae010ef633de15babeac6027 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2016-2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2016-2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -795,7 +785,7 @@ static int uniphier_ld20_get_gpio_muxval(unsigned int pin,
        return 15;
 }
 
-static struct uniphier_pinctrl_socdata uniphier_ld20_pindata = {
+static const struct uniphier_pinctrl_socdata uniphier_ld20_pindata = {
        .pins = uniphier_ld20_pins,
        .npins = ARRAY_SIZE(uniphier_ld20_pins),
        .groups = uniphier_ld20_groups,
index 03d87ad82726785bb7c8f896cbed15cfe7e6cd94..d09019bfbb1a3408a569ddecab117cf55e444c4f 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2015-2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2015-2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -723,7 +713,7 @@ static int uniphier_ld4_get_gpio_muxval(unsigned int pin,
        }
 }
 
-static struct uniphier_pinctrl_socdata uniphier_ld4_pindata = {
+static const struct uniphier_pinctrl_socdata uniphier_ld4_pindata = {
        .pins = uniphier_ld4_pins,
        .npins = ARRAY_SIZE(uniphier_ld4_pins),
        .groups = uniphier_ld4_groups,
index 31f36ea539115b246166633164095bf1b29f105d..414ff3aee67ba058aed45486a53101ab9516ee7b 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2015-2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2015-2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -938,7 +928,7 @@ static int uniphier_ld6b_get_gpio_muxval(unsigned int pin,
        return 15;
 }
 
-static struct uniphier_pinctrl_socdata uniphier_ld6b_pindata = {
+static const struct uniphier_pinctrl_socdata uniphier_ld6b_pindata = {
        .pins = uniphier_ld6b_pins,
        .npins = ARRAY_SIZE(uniphier_ld6b_pins),
        .groups = uniphier_ld6b_groups,
index 4326f5c3683c9f5187b2c928ede0ca6f5dd4c3d6..919b9bec20272024ee705dfc8ebbcabe4ac86fae 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2015-2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program5 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2015-2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -1232,7 +1222,7 @@ static int uniphier_pro4_get_gpio_muxval(unsigned int pin,
        return 7;
 }
 
-static struct uniphier_pinctrl_socdata uniphier_pro4_pindata = {
+static const struct uniphier_pinctrl_socdata uniphier_pro4_pindata = {
        .pins = uniphier_pro4_pins,
        .npins = ARRAY_SIZE(uniphier_pro4_pins),
        .groups = uniphier_pro4_groups,
index ae79815301412ec1c3b226688d33d4146624ccae..4a6580da4edb871a64548aac9809dcf657e3dab9 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2015-2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program5 is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2015-2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -996,7 +986,7 @@ static int uniphier_pro5_get_gpio_muxval(unsigned int pin,
        return 15;
 }
 
-static struct uniphier_pinctrl_socdata uniphier_pro5_pindata = {
+static const struct uniphier_pinctrl_socdata uniphier_pro5_pindata = {
        .pins = uniphier_pro5_pins,
        .npins = ARRAY_SIZE(uniphier_pro5_pins),
        .groups = uniphier_pro5_groups,
index 7975bd7f99c8fd3e8065f879c85326f730243cb6..169bb4489bc76ea7e07daac2b0d88a1f754ee603 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2015-2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2015-2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -960,7 +950,7 @@ static int uniphier_pxs2_get_gpio_muxval(unsigned int pin,
        return 15;
 }
 
-static struct uniphier_pinctrl_socdata uniphier_pxs2_pindata = {
+static const struct uniphier_pinctrl_socdata uniphier_pxs2_pindata = {
        .pins = uniphier_pxs2_pins,
        .npins = ARRAY_SIZE(uniphier_pxs2_pins),
        .groups = uniphier_pxs2_groups,
index b16ce283695bb9bd5d59b0119cb3014651939f44..3dc3e5b1e80c24575d34b7b66b83acb3dabb6948 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/init.h>
 #include <linux/kernel.h>
@@ -971,7 +961,7 @@ static int uniphier_pxs3_get_gpio_muxval(unsigned int pin,
        return 15;
 }
 
-static struct uniphier_pinctrl_socdata uniphier_pxs3_pindata = {
+static const struct uniphier_pinctrl_socdata uniphier_pxs3_pindata = {
        .pins = uniphier_pxs3_pins,
        .npins = ARRAY_SIZE(uniphier_pxs3_pins),
        .groups = uniphier_pxs3_groups,
index cb44568fcbbce37f0f0d19ec083cea963307f20b..463e9324ab5486d20b6740fa306813740cffffac 100644 (file)
@@ -1,17 +1,7 @@
-/*
- * Copyright (C) 2015-2017 Socionext Inc.
- *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
+// SPDX-License-Identifier: GPL-2.0+
+//
+// Copyright (C) 2015-2017 Socionext Inc.
+//   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -652,7 +642,7 @@ static int uniphier_sld8_get_gpio_muxval(unsigned int pin,
        }
 }
 
-static struct uniphier_pinctrl_socdata uniphier_sld8_pindata = {
+static const struct uniphier_pinctrl_socdata uniphier_sld8_pindata = {
        .pins = uniphier_sld8_pins,
        .npins = ARRAY_SIZE(uniphier_sld8_pins),
        .groups = uniphier_sld8_groups,
index c63e3c8b97cd6c07caa7d6ef4cd5a0c19c4cbee6..24976473307e651520e6fea08c124f37501a807c 100644 (file)
@@ -1,16 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
 /*
  * Copyright (C) 2015-2017 Socionext Inc.
  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
  */
 
 #ifndef __PINCTRL_UNIPHIER_H__
@@ -190,7 +181,7 @@ struct uniphier_pinctrl_socdata {
        }
 
 int uniphier_pinctrl_probe(struct platform_device *pdev,
-                          struct uniphier_pinctrl_socdata *socdata);
+                          const struct uniphier_pinctrl_socdata *socdata);
 
 extern const struct dev_pm_ops uniphier_pinctrl_pm_ops;
 
index e4e4fdf5d38fbef0dfdcff1ca2e288507f252677..b5b2654a0e4dc5a6ca7d8d186673d14f4c10f5d6 100644 (file)
@@ -1,14 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * Header providing constants for bcm2835 pinctrl bindings.
  *
  * Copyright (C) 2015 Stefan Wahren <stefan.wahren@i2se.com>
- *
- * The code contained herein is licensed under the GNU General Public
- * License. You may obtain a copy of the GNU General Public License
- * Version 2 at the following locations:
- *
- * http://www.opensource.org/licenses/gpl-license.html
- * http://www.gnu.org/copyleft/gpl.html
  */
 
 #ifndef __DT_BINDINGS_PINCTRL_BCM2835_H__
diff --git a/include/dt-bindings/pinctrl/mt6797-pinfunc.h b/include/dt-bindings/pinctrl/mt6797-pinfunc.h
new file mode 100644 (file)
index 0000000..e981336
--- /dev/null
@@ -0,0 +1,1368 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __DTS_MT6797_PINFUNC_H
+#define __DTS_MT6797_PINFUNC_H
+
+#include <dt-bindings/pinctrl/mt65xx.h>
+
+#define MT6797_GPIO0__FUNC_GPIO0 (MTK_PIN_NO(0) | 0)
+#define MT6797_GPIO0__FUNC_CSI0A_L0P_T0A (MTK_PIN_NO(0) | 1)
+
+#define MT6797_GPIO1__FUNC_GPIO1 (MTK_PIN_NO(1) | 0)
+#define MT6797_GPIO1__FUNC_CSI0A_L0N_T0B (MTK_PIN_NO(1) | 1)
+
+#define MT6797_GPIO2__FUNC_GPIO2 (MTK_PIN_NO(2) | 0)
+#define MT6797_GPIO2__FUNC_CSI0A_L1P_T0C (MTK_PIN_NO(2) | 1)
+
+#define MT6797_GPIO3__FUNC_GPIO3 (MTK_PIN_NO(3) | 0)
+#define MT6797_GPIO3__FUNC_CSI0A_L1N_T1A (MTK_PIN_NO(3) | 1)
+
+#define MT6797_GPIO4__FUNC_GPIO4 (MTK_PIN_NO(4) | 0)
+#define MT6797_GPIO4__FUNC_CSI0A_L2P_T1B (MTK_PIN_NO(4) | 1)
+
+#define MT6797_GPIO5__FUNC_GPIO5 (MTK_PIN_NO(5) | 0)
+#define MT6797_GPIO5__FUNC_CSI0A_L2N_T1C (MTK_PIN_NO(5) | 1)
+
+#define MT6797_GPIO6__FUNC_GPIO6 (MTK_PIN_NO(6) | 0)
+#define MT6797_GPIO6__FUNC_CSI0B_L0P_T0A (MTK_PIN_NO(6) | 1)
+
+#define MT6797_GPIO7__FUNC_GPIO7 (MTK_PIN_NO(7) | 0)
+#define MT6797_GPIO7__FUNC_CSI0B_L0N_T0B (MTK_PIN_NO(7) | 1)
+
+#define MT6797_GPIO8__FUNC_GPIO8 (MTK_PIN_NO(8) | 0)
+#define MT6797_GPIO8__FUNC_CSI0B_L1P_T0C (MTK_PIN_NO(8) | 1)
+
+#define MT6797_GPIO9__FUNC_GPIO9 (MTK_PIN_NO(9) | 0)
+#define MT6797_GPIO9__FUNC_CSI0B_L1N_T1A (MTK_PIN_NO(9) | 1)
+
+#define MT6797_GPIO10__FUNC_GPIO10 (MTK_PIN_NO(10) | 0)
+#define MT6797_GPIO10__FUNC_CSI1A_L0P_T0A (MTK_PIN_NO(10) | 1)
+
+#define MT6797_GPIO11__FUNC_GPIO11 (MTK_PIN_NO(11) | 0)
+#define MT6797_GPIO11__FUNC_CSI1A_L0N_T0B (MTK_PIN_NO(11) | 1)
+
+#define MT6797_GPIO12__FUNC_GPIO12 (MTK_PIN_NO(12) | 0)
+#define MT6797_GPIO12__FUNC_CSI1A_L1P_T0C (MTK_PIN_NO(12) | 1)
+
+#define MT6797_GPIO13__FUNC_GPIO13 (MTK_PIN_NO(13) | 0)
+#define MT6797_GPIO13__FUNC_CSI1A_L1N_T1A (MTK_PIN_NO(13) | 1)
+
+#define MT6797_GPIO14__FUNC_GPIO14 (MTK_PIN_NO(14) | 0)
+#define MT6797_GPIO14__FUNC_CSI1A_L2P_T1B (MTK_PIN_NO(14) | 1)
+
+#define MT6797_GPIO15__FUNC_GPIO15 (MTK_PIN_NO(15) | 0)
+#define MT6797_GPIO15__FUNC_CSI1A_L2N_T1C (MTK_PIN_NO(15) | 1)
+
+#define MT6797_GPIO16__FUNC_GPIO16 (MTK_PIN_NO(16) | 0)
+#define MT6797_GPIO16__FUNC_CSI1B_L0P_T0A (MTK_PIN_NO(16) | 1)
+
+#define MT6797_GPIO17__FUNC_GPIO17 (MTK_PIN_NO(17) | 0)
+#define MT6797_GPIO17__FUNC_CSI1B_L0N_T0B (MTK_PIN_NO(17) | 1)
+
+#define MT6797_GPIO18__FUNC_GPIO18 (MTK_PIN_NO(18) | 0)
+#define MT6797_GPIO18__FUNC_CSI1B_L1P_T0C (MTK_PIN_NO(18) | 1)
+
+#define MT6797_GPIO19__FUNC_GPIO19 (MTK_PIN_NO(19) | 0)
+#define MT6797_GPIO19__FUNC_CSI1B_L1N_T1A (MTK_PIN_NO(19) | 1)
+
+#define MT6797_GPIO20__FUNC_GPIO20 (MTK_PIN_NO(20) | 0)
+#define MT6797_GPIO20__FUNC_CSI1B_L2P_T1B (MTK_PIN_NO(20) | 1)
+
+#define MT6797_GPIO21__FUNC_GPIO21 (MTK_PIN_NO(21) | 0)
+#define MT6797_GPIO21__FUNC_CSI1B_L2N_T1C (MTK_PIN_NO(21) | 1)
+
+#define MT6797_GPIO22__FUNC_GPIO22 (MTK_PIN_NO(22) | 0)
+#define MT6797_GPIO22__FUNC_CSI2_L0P_T0A (MTK_PIN_NO(22) | 1)
+
+#define MT6797_GPIO23__FUNC_GPIO23 (MTK_PIN_NO(23) | 0)
+#define MT6797_GPIO23__FUNC_CSI2_L0N_T0B (MTK_PIN_NO(23) | 1)
+
+#define MT6797_GPIO24__FUNC_GPIO24 (MTK_PIN_NO(24) | 0)
+#define MT6797_GPIO24__FUNC_CSI2_L1P_T0C (MTK_PIN_NO(24) | 1)
+
+#define MT6797_GPIO25__FUNC_GPIO25 (MTK_PIN_NO(25) | 0)
+#define MT6797_GPIO25__FUNC_CSI2_L1N_T1A (MTK_PIN_NO(25) | 1)
+
+#define MT6797_GPIO26__FUNC_GPIO26 (MTK_PIN_NO(26) | 0)
+#define MT6797_GPIO26__FUNC_CSI2_L2P_T1B (MTK_PIN_NO(26) | 1)
+
+#define MT6797_GPIO27__FUNC_GPIO27 (MTK_PIN_NO(27) | 0)
+#define MT6797_GPIO27__FUNC_CSI2_L2N_T1C (MTK_PIN_NO(27) | 1)
+
+#define MT6797_GPIO28__FUNC_GPIO28 (MTK_PIN_NO(28) | 0)
+#define MT6797_GPIO28__FUNC_SPI5_CLK_A (MTK_PIN_NO(28) | 1)
+#define MT6797_GPIO28__FUNC_IRTX_OUT (MTK_PIN_NO(28) | 2)
+#define MT6797_GPIO28__FUNC_UDI_TDO (MTK_PIN_NO(28) | 3)
+#define MT6797_GPIO28__FUNC_SCP_JTAG_TDO (MTK_PIN_NO(28) | 4)
+#define MT6797_GPIO28__FUNC_CONN_MCU_TDO (MTK_PIN_NO(28) | 5)
+#define MT6797_GPIO28__FUNC_PWM_A (MTK_PIN_NO(28) | 6)
+#define MT6797_GPIO28__FUNC_C2K_DM_OTDO (MTK_PIN_NO(28) | 7)
+
+#define MT6797_GPIO29__FUNC_GPIO29 (MTK_PIN_NO(29) | 0)
+#define MT6797_GPIO29__FUNC_SPI5_MI_A (MTK_PIN_NO(29) | 1)
+#define MT6797_GPIO29__FUNC_DAP_SIB1_SWD (MTK_PIN_NO(29) | 2)
+#define MT6797_GPIO29__FUNC_UDI_TMS (MTK_PIN_NO(29) | 3)
+#define MT6797_GPIO29__FUNC_SCP_JTAG_TMS (MTK_PIN_NO(29) | 4)
+#define MT6797_GPIO29__FUNC_CONN_MCU_TMS (MTK_PIN_NO(29) | 5)
+#define MT6797_GPIO29__FUNC_CONN_MCU_AICE_TMSC (MTK_PIN_NO(29) | 6)
+#define MT6797_GPIO29__FUNC_C2K_DM_OTMS (MTK_PIN_NO(29) | 7)
+
+#define MT6797_GPIO30__FUNC_GPIO30 (MTK_PIN_NO(30) | 0)
+#define MT6797_GPIO30__FUNC_CMMCLK0 (MTK_PIN_NO(30) | 1)
+#define MT6797_GPIO30__FUNC_MD_CLKM0 (MTK_PIN_NO(30) | 7)
+
+#define MT6797_GPIO31__FUNC_GPIO31 (MTK_PIN_NO(31) | 0)
+#define MT6797_GPIO31__FUNC_CMMCLK1 (MTK_PIN_NO(31) | 1)
+#define MT6797_GPIO31__FUNC_MD_CLKM1 (MTK_PIN_NO(31) | 7)
+
+#define MT6797_GPIO32__FUNC_GPIO32 (MTK_PIN_NO(32) | 0)
+#define MT6797_GPIO32__FUNC_SPI5_CS_A (MTK_PIN_NO(32) | 1)
+#define MT6797_GPIO32__FUNC_DAP_SIB1_SWCK (MTK_PIN_NO(32) | 2)
+#define MT6797_GPIO32__FUNC_UDI_TCK_XI (MTK_PIN_NO(32) | 3)
+#define MT6797_GPIO32__FUNC_SCP_JTAG_TCK (MTK_PIN_NO(32) | 4)
+#define MT6797_GPIO32__FUNC_CONN_MCU_TCK (MTK_PIN_NO(32) | 5)
+#define MT6797_GPIO32__FUNC_CONN_MCU_AICE_TCKC (MTK_PIN_NO(32) | 6)
+#define MT6797_GPIO32__FUNC_C2K_DM_OTCK (MTK_PIN_NO(32) | 7)
+
+#define MT6797_GPIO33__FUNC_GPIO33 (MTK_PIN_NO(33) | 0)
+#define MT6797_GPIO33__FUNC_SPI5_MO_A (MTK_PIN_NO(33) | 1)
+#define MT6797_GPIO33__FUNC_CMFLASH (MTK_PIN_NO(33) | 2)
+#define MT6797_GPIO33__FUNC_UDI_TDI (MTK_PIN_NO(33) | 3)
+#define MT6797_GPIO33__FUNC_SCP_JTAG_TDI (MTK_PIN_NO(33) | 4)
+#define MT6797_GPIO33__FUNC_CONN_MCU_TDI (MTK_PIN_NO(33) | 5)
+#define MT6797_GPIO33__FUNC_MD_URXD0 (MTK_PIN_NO(33) | 6)
+#define MT6797_GPIO33__FUNC_C2K_DM_OTDI (MTK_PIN_NO(33) | 7)
+
+#define MT6797_GPIO34__FUNC_GPIO34 (MTK_PIN_NO(34) | 0)
+#define MT6797_GPIO34__FUNC_CMFLASH (MTK_PIN_NO(34) | 1)
+#define MT6797_GPIO34__FUNC_CLKM0 (MTK_PIN_NO(34) | 2)
+#define MT6797_GPIO34__FUNC_UDI_NTRST (MTK_PIN_NO(34) | 3)
+#define MT6797_GPIO34__FUNC_SCP_JTAG_TRSTN (MTK_PIN_NO(34) | 4)
+#define MT6797_GPIO34__FUNC_CONN_MCU_TRST_B (MTK_PIN_NO(34) | 5)
+#define MT6797_GPIO34__FUNC_MD_UTXD0 (MTK_PIN_NO(34) | 6)
+#define MT6797_GPIO34__FUNC_C2K_DM_JTINTP (MTK_PIN_NO(34) | 7)
+
+#define MT6797_GPIO35__FUNC_GPIO35 (MTK_PIN_NO(35) | 0)
+#define MT6797_GPIO35__FUNC_CMMCLK3 (MTK_PIN_NO(35) | 1)
+#define MT6797_GPIO35__FUNC_CLKM1 (MTK_PIN_NO(35) | 2)
+#define MT6797_GPIO35__FUNC_MD_URXD1 (MTK_PIN_NO(35) | 3)
+#define MT6797_GPIO35__FUNC_PTA_RXD (MTK_PIN_NO(35) | 4)
+#define MT6797_GPIO35__FUNC_CONN_MCU_DBGACK_N (MTK_PIN_NO(35) | 5)
+#define MT6797_GPIO35__FUNC_PWM_B (MTK_PIN_NO(35) | 6)
+#define MT6797_GPIO35__FUNC_PCC_PPC_IO (MTK_PIN_NO(35) | 7)
+
+#define MT6797_GPIO36__FUNC_GPIO36 (MTK_PIN_NO(36) | 0)
+#define MT6797_GPIO36__FUNC_CMMCLK2 (MTK_PIN_NO(36) | 1)
+#define MT6797_GPIO36__FUNC_CLKM2 (MTK_PIN_NO(36) | 2)
+#define MT6797_GPIO36__FUNC_MD_UTXD1 (MTK_PIN_NO(36) | 3)
+#define MT6797_GPIO36__FUNC_PTA_TXD (MTK_PIN_NO(36) | 4)
+#define MT6797_GPIO36__FUNC_CONN_MCU_DBGI_N (MTK_PIN_NO(36) | 5)
+#define MT6797_GPIO36__FUNC_PWM_C (MTK_PIN_NO(36) | 6)
+#define MT6797_GPIO36__FUNC_EXT_FRAME_SYNC (MTK_PIN_NO(36) | 7)
+
+#define MT6797_GPIO37__FUNC_GPIO37 (MTK_PIN_NO(37) | 0)
+#define MT6797_GPIO37__FUNC_SCL0_0 (MTK_PIN_NO(37) | 1)
+
+#define MT6797_GPIO38__FUNC_GPIO38 (MTK_PIN_NO(38) | 0)
+#define MT6797_GPIO38__FUNC_SDA0_0 (MTK_PIN_NO(38) | 1)
+
+#define MT6797_GPIO39__FUNC_GPIO39 (MTK_PIN_NO(39) | 0)
+#define MT6797_GPIO39__FUNC_DPI_D0 (MTK_PIN_NO(39) | 1)
+#define MT6797_GPIO39__FUNC_SPI1_CLK_A (MTK_PIN_NO(39) | 2)
+#define MT6797_GPIO39__FUNC_PCM0_SYNC (MTK_PIN_NO(39) | 3)
+#define MT6797_GPIO39__FUNC_I2S0_LRCK (MTK_PIN_NO(39) | 4)
+#define MT6797_GPIO39__FUNC_CONN_MCU_TRST_B (MTK_PIN_NO(39) | 5)
+#define MT6797_GPIO39__FUNC_URXD3 (MTK_PIN_NO(39) | 6)
+#define MT6797_GPIO39__FUNC_C2K_NTRST (MTK_PIN_NO(39) | 7)
+
+#define MT6797_GPIO40__FUNC_GPIO40 (MTK_PIN_NO(40) | 0)
+#define MT6797_GPIO40__FUNC_DPI_D1 (MTK_PIN_NO(40) | 1)
+#define MT6797_GPIO40__FUNC_SPI1_MI_A (MTK_PIN_NO(40) | 2)
+#define MT6797_GPIO40__FUNC_PCM0_CLK (MTK_PIN_NO(40) | 3)
+#define MT6797_GPIO40__FUNC_I2S0_BCK (MTK_PIN_NO(40) | 4)
+#define MT6797_GPIO40__FUNC_CONN_MCU_TDO (MTK_PIN_NO(40) | 5)
+#define MT6797_GPIO40__FUNC_UTXD3 (MTK_PIN_NO(40) | 6)
+#define MT6797_GPIO40__FUNC_C2K_TCK (MTK_PIN_NO(40) | 7)
+
+#define MT6797_GPIO41__FUNC_GPIO41 (MTK_PIN_NO(41) | 0)
+#define MT6797_GPIO41__FUNC_DPI_D2 (MTK_PIN_NO(41) | 1)
+#define MT6797_GPIO41__FUNC_SPI1_CS_A (MTK_PIN_NO(41) | 2)
+#define MT6797_GPIO41__FUNC_PCM0_DO (MTK_PIN_NO(41) | 3)
+#define MT6797_GPIO41__FUNC_I2S3_DO (MTK_PIN_NO(41) | 4)
+#define MT6797_GPIO41__FUNC_CONN_MCU_DBGACK_N (MTK_PIN_NO(41) | 5)
+#define MT6797_GPIO41__FUNC_URTS3 (MTK_PIN_NO(41) | 6)
+#define MT6797_GPIO41__FUNC_C2K_TDI (MTK_PIN_NO(41) | 7)
+
+#define MT6797_GPIO42__FUNC_GPIO42 (MTK_PIN_NO(42) | 0)
+#define MT6797_GPIO42__FUNC_DPI_D3 (MTK_PIN_NO(42) | 1)
+#define MT6797_GPIO42__FUNC_SPI1_MO_A (MTK_PIN_NO(42) | 2)
+#define MT6797_GPIO42__FUNC_PCM0_DI (MTK_PIN_NO(42) | 3)
+#define MT6797_GPIO42__FUNC_I2S0_DI (MTK_PIN_NO(42) | 4)
+#define MT6797_GPIO42__FUNC_CONN_MCU_TDI (MTK_PIN_NO(42) | 5)
+#define MT6797_GPIO42__FUNC_UCTS3 (MTK_PIN_NO(42) | 6)
+#define MT6797_GPIO42__FUNC_C2K_TMS (MTK_PIN_NO(42) | 7)
+
+#define MT6797_GPIO43__FUNC_GPIO43 (MTK_PIN_NO(43) | 0)
+#define MT6797_GPIO43__FUNC_DPI_D4 (MTK_PIN_NO(43) | 1)
+#define MT6797_GPIO43__FUNC_SPI2_CLK_A (MTK_PIN_NO(43) | 2)
+#define MT6797_GPIO43__FUNC_PCM1_SYNC (MTK_PIN_NO(43) | 3)
+#define MT6797_GPIO43__FUNC_I2S2_LRCK (MTK_PIN_NO(43) | 4)
+#define MT6797_GPIO43__FUNC_CONN_MCU_TMS (MTK_PIN_NO(43) | 5)
+#define MT6797_GPIO43__FUNC_CONN_MCU_AICE_TMSC (MTK_PIN_NO(43) | 6)
+#define MT6797_GPIO43__FUNC_C2K_TDO (MTK_PIN_NO(43) | 7)
+
+#define MT6797_GPIO44__FUNC_GPIO44 (MTK_PIN_NO(44) | 0)
+#define MT6797_GPIO44__FUNC_DPI_D5 (MTK_PIN_NO(44) | 1)
+#define MT6797_GPIO44__FUNC_SPI2_MI_A (MTK_PIN_NO(44) | 2)
+#define MT6797_GPIO44__FUNC_PCM1_CLK (MTK_PIN_NO(44) | 3)
+#define MT6797_GPIO44__FUNC_I2S2_BCK (MTK_PIN_NO(44) | 4)
+#define MT6797_GPIO44__FUNC_CONN_MCU_TCK (MTK_PIN_NO(44) | 5)
+#define MT6797_GPIO44__FUNC_CONN_MCU_AICE_TCKC (MTK_PIN_NO(44) | 6)
+#define MT6797_GPIO44__FUNC_C2K_RTCK (MTK_PIN_NO(44) | 7)
+
+#define MT6797_GPIO45__FUNC_GPIO45 (MTK_PIN_NO(45) | 0)
+#define MT6797_GPIO45__FUNC_DPI_D6 (MTK_PIN_NO(45) | 1)
+#define MT6797_GPIO45__FUNC_SPI2_CS_A (MTK_PIN_NO(45) | 2)
+#define MT6797_GPIO45__FUNC_PCM1_DI (MTK_PIN_NO(45) | 3)
+#define MT6797_GPIO45__FUNC_I2S2_DI (MTK_PIN_NO(45) | 4)
+#define MT6797_GPIO45__FUNC_CONN_MCU_DBGI_N (MTK_PIN_NO(45) | 5)
+#define MT6797_GPIO45__FUNC_MD_URXD0 (MTK_PIN_NO(45) | 6)
+
+#define MT6797_GPIO46__FUNC_GPIO46 (MTK_PIN_NO(46) | 0)
+#define MT6797_GPIO46__FUNC_DPI_D7 (MTK_PIN_NO(46) | 1)
+#define MT6797_GPIO46__FUNC_SPI2_MO_A (MTK_PIN_NO(46) | 2)
+#define MT6797_GPIO46__FUNC_PCM1_DO0 (MTK_PIN_NO(46) | 3)
+#define MT6797_GPIO46__FUNC_I2S1_DO (MTK_PIN_NO(46) | 4)
+#define MT6797_GPIO46__FUNC_ANT_SEL0 (MTK_PIN_NO(46) | 5)
+#define MT6797_GPIO46__FUNC_MD_UTXD0 (MTK_PIN_NO(46) | 6)
+
+#define MT6797_GPIO47__FUNC_GPIO47 (MTK_PIN_NO(47) | 0)
+#define MT6797_GPIO47__FUNC_DPI_D8 (MTK_PIN_NO(47) | 1)
+#define MT6797_GPIO47__FUNC_CLKM0 (MTK_PIN_NO(47) | 2)
+#define MT6797_GPIO47__FUNC_PCM1_DO1 (MTK_PIN_NO(47) | 3)
+#define MT6797_GPIO47__FUNC_I2S0_MCK (MTK_PIN_NO(47) | 4)
+#define MT6797_GPIO47__FUNC_ANT_SEL1 (MTK_PIN_NO(47) | 5)
+#define MT6797_GPIO47__FUNC_PTA_RXD (MTK_PIN_NO(47) | 6)
+#define MT6797_GPIO47__FUNC_C2K_URXD0 (MTK_PIN_NO(47) | 7)
+
+#define MT6797_GPIO48__FUNC_GPIO48 (MTK_PIN_NO(48) | 0)
+#define MT6797_GPIO48__FUNC_DPI_D9 (MTK_PIN_NO(48) | 1)
+#define MT6797_GPIO48__FUNC_CLKM1 (MTK_PIN_NO(48) | 2)
+#define MT6797_GPIO48__FUNC_CMFLASH (MTK_PIN_NO(48) | 3)
+#define MT6797_GPIO48__FUNC_I2S2_MCK (MTK_PIN_NO(48) | 4)
+#define MT6797_GPIO48__FUNC_ANT_SEL2 (MTK_PIN_NO(48) | 5)
+#define MT6797_GPIO48__FUNC_PTA_TXD (MTK_PIN_NO(48) | 6)
+#define MT6797_GPIO48__FUNC_C2K_UTXD0 (MTK_PIN_NO(48) | 7)
+
+#define MT6797_GPIO49__FUNC_GPIO49 (MTK_PIN_NO(49) | 0)
+#define MT6797_GPIO49__FUNC_DPI_D10 (MTK_PIN_NO(49) | 1)
+#define MT6797_GPIO49__FUNC_MD_INT1_C2K_UIM1_HOT_PLUG_IN (MTK_PIN_NO(49) | 2)
+#define MT6797_GPIO49__FUNC_PWM_C (MTK_PIN_NO(49) | 3)
+#define MT6797_GPIO49__FUNC_IRTX_OUT (MTK_PIN_NO(49) | 4)
+#define MT6797_GPIO49__FUNC_ANT_SEL3 (MTK_PIN_NO(49) | 5)
+#define MT6797_GPIO49__FUNC_MD_URXD1 (MTK_PIN_NO(49) | 6)
+
+#define MT6797_GPIO50__FUNC_GPIO50 (MTK_PIN_NO(50) | 0)
+#define MT6797_GPIO50__FUNC_DPI_D11 (MTK_PIN_NO(50) | 1)
+#define MT6797_GPIO50__FUNC_MD_INT2 (MTK_PIN_NO(50) | 2)
+#define MT6797_GPIO50__FUNC_PWM_D (MTK_PIN_NO(50) | 3)
+#define MT6797_GPIO50__FUNC_CLKM2 (MTK_PIN_NO(50) | 4)
+#define MT6797_GPIO50__FUNC_ANT_SEL4 (MTK_PIN_NO(50) | 5)
+#define MT6797_GPIO50__FUNC_MD_UTXD1 (MTK_PIN_NO(50) | 6)
+
+#define MT6797_GPIO51__FUNC_GPIO51 (MTK_PIN_NO(51) | 0)
+#define MT6797_GPIO51__FUNC_DPI_DE (MTK_PIN_NO(51) | 1)
+#define MT6797_GPIO51__FUNC_SPI4_CLK_A (MTK_PIN_NO(51) | 2)
+#define MT6797_GPIO51__FUNC_IRTX_OUT (MTK_PIN_NO(51) | 3)
+#define MT6797_GPIO51__FUNC_SCL0_1 (MTK_PIN_NO(51) | 4)
+#define MT6797_GPIO51__FUNC_ANT_SEL5 (MTK_PIN_NO(51) | 5)
+#define MT6797_GPIO51__FUNC_C2K_UTXD1 (MTK_PIN_NO(51) | 7)
+
+#define MT6797_GPIO52__FUNC_GPIO52 (MTK_PIN_NO(52) | 0)
+#define MT6797_GPIO52__FUNC_DPI_CK (MTK_PIN_NO(52) | 1)
+#define MT6797_GPIO52__FUNC_SPI4_MI_A (MTK_PIN_NO(52) | 2)
+#define MT6797_GPIO52__FUNC_SPI4_MO_A (MTK_PIN_NO(52) | 3)
+#define MT6797_GPIO52__FUNC_SDA0_1 (MTK_PIN_NO(52) | 4)
+#define MT6797_GPIO52__FUNC_ANT_SEL6 (MTK_PIN_NO(52) | 5)
+#define MT6797_GPIO52__FUNC_C2K_URXD1 (MTK_PIN_NO(52) | 7)
+
+#define MT6797_GPIO53__FUNC_GPIO53 (MTK_PIN_NO(53) | 0)
+#define MT6797_GPIO53__FUNC_DPI_HSYNC (MTK_PIN_NO(53) | 1)
+#define MT6797_GPIO53__FUNC_SPI4_CS_A (MTK_PIN_NO(53) | 2)
+#define MT6797_GPIO53__FUNC_CMFLASH (MTK_PIN_NO(53) | 3)
+#define MT6797_GPIO53__FUNC_SCL1_1 (MTK_PIN_NO(53) | 4)
+#define MT6797_GPIO53__FUNC_ANT_SEL7 (MTK_PIN_NO(53) | 5)
+#define MT6797_GPIO53__FUNC_MD_URXD2 (MTK_PIN_NO(53) | 6)
+#define MT6797_GPIO53__FUNC_PCC_PPC_IO (MTK_PIN_NO(53) | 7)
+
+#define MT6797_GPIO54__FUNC_GPIO54 (MTK_PIN_NO(54) | 0)
+#define MT6797_GPIO54__FUNC_DPI_VSYNC (MTK_PIN_NO(54) | 1)
+#define MT6797_GPIO54__FUNC_SPI4_MO_A (MTK_PIN_NO(54) | 2)
+#define MT6797_GPIO54__FUNC_SPI4_MI_A (MTK_PIN_NO(54) | 3)
+#define MT6797_GPIO54__FUNC_SDA1_1 (MTK_PIN_NO(54) | 4)
+#define MT6797_GPIO54__FUNC_PWM_A (MTK_PIN_NO(54) | 5)
+#define MT6797_GPIO54__FUNC_MD_UTXD2 (MTK_PIN_NO(54) | 6)
+#define MT6797_GPIO54__FUNC_EXT_FRAME_SYNC (MTK_PIN_NO(54) | 7)
+
+#define MT6797_GPIO55__FUNC_GPIO55 (MTK_PIN_NO(55) | 0)
+#define MT6797_GPIO55__FUNC_SCL1_0 (MTK_PIN_NO(55) | 1)
+
+#define MT6797_GPIO56__FUNC_GPIO56 (MTK_PIN_NO(56) | 0)
+#define MT6797_GPIO56__FUNC_SDA1_0 (MTK_PIN_NO(56) | 1)
+
+#define MT6797_GPIO57__FUNC_GPIO57 (MTK_PIN_NO(57) | 0)
+#define MT6797_GPIO57__FUNC_SPI0_CLK (MTK_PIN_NO(57) | 1)
+#define MT6797_GPIO57__FUNC_SCL0_2 (MTK_PIN_NO(57) | 2)
+#define MT6797_GPIO57__FUNC_PWM_B (MTK_PIN_NO(57) | 3)
+#define MT6797_GPIO57__FUNC_UTXD3 (MTK_PIN_NO(57) | 4)
+#define MT6797_GPIO57__FUNC_PCM0_SYNC (MTK_PIN_NO(57) | 5)
+
+#define MT6797_GPIO58__FUNC_GPIO58 (MTK_PIN_NO(58) | 0)
+#define MT6797_GPIO58__FUNC_SPI0_MI (MTK_PIN_NO(58) | 1)
+#define MT6797_GPIO58__FUNC_SPI0_MO (MTK_PIN_NO(58) | 2)
+#define MT6797_GPIO58__FUNC_SDA1_2 (MTK_PIN_NO(58) | 3)
+#define MT6797_GPIO58__FUNC_URXD3 (MTK_PIN_NO(58) | 4)
+#define MT6797_GPIO58__FUNC_PCM0_CLK (MTK_PIN_NO(58) | 5)
+
+#define MT6797_GPIO59__FUNC_GPIO59 (MTK_PIN_NO(59) | 0)
+#define MT6797_GPIO59__FUNC_SPI0_MO (MTK_PIN_NO(59) | 1)
+#define MT6797_GPIO59__FUNC_SPI0_MI (MTK_PIN_NO(59) | 2)
+#define MT6797_GPIO59__FUNC_PWM_C (MTK_PIN_NO(59) | 3)
+#define MT6797_GPIO59__FUNC_URTS3 (MTK_PIN_NO(59) | 4)
+#define MT6797_GPIO59__FUNC_PCM0_DO (MTK_PIN_NO(59) | 5)
+
+#define MT6797_GPIO60__FUNC_GPIO60 (MTK_PIN_NO(60) | 0)
+#define MT6797_GPIO60__FUNC_SPI0_CS (MTK_PIN_NO(60) | 1)
+#define MT6797_GPIO60__FUNC_SDA0_2 (MTK_PIN_NO(60) | 2)
+#define MT6797_GPIO60__FUNC_SCL1_2 (MTK_PIN_NO(60) | 3)
+#define MT6797_GPIO60__FUNC_UCTS3 (MTK_PIN_NO(60) | 4)
+#define MT6797_GPIO60__FUNC_PCM0_DI (MTK_PIN_NO(60) | 5)
+
+#define MT6797_GPIO61__FUNC_GPIO61 (MTK_PIN_NO(61) | 0)
+#define MT6797_GPIO61__FUNC_EINT0 (MTK_PIN_NO(61) | 1)
+#define MT6797_GPIO61__FUNC_IDDIG (MTK_PIN_NO(61) | 2)
+#define MT6797_GPIO61__FUNC_SPI4_CLK_B (MTK_PIN_NO(61) | 3)
+#define MT6797_GPIO61__FUNC_I2S0_LRCK (MTK_PIN_NO(61) | 4)
+#define MT6797_GPIO61__FUNC_PCM0_SYNC (MTK_PIN_NO(61) | 5)
+#define MT6797_GPIO61__FUNC_C2K_EINT0 (MTK_PIN_NO(61) | 7)
+
+#define MT6797_GPIO62__FUNC_GPIO62 (MTK_PIN_NO(62) | 0)
+#define MT6797_GPIO62__FUNC_EINT1 (MTK_PIN_NO(62) | 1)
+#define MT6797_GPIO62__FUNC_USB_DRVVBUS (MTK_PIN_NO(62) | 2)
+#define MT6797_GPIO62__FUNC_SPI4_MI_B (MTK_PIN_NO(62) | 3)
+#define MT6797_GPIO62__FUNC_I2S0_BCK (MTK_PIN_NO(62) | 4)
+#define MT6797_GPIO62__FUNC_PCM0_CLK (MTK_PIN_NO(62) | 5)
+#define MT6797_GPIO62__FUNC_C2K_EINT1 (MTK_PIN_NO(62) | 7)
+
+#define MT6797_GPIO63__FUNC_GPIO63 (MTK_PIN_NO(63) | 0)
+#define MT6797_GPIO63__FUNC_EINT2 (MTK_PIN_NO(63) | 1)
+#define MT6797_GPIO63__FUNC_IRTX_OUT (MTK_PIN_NO(63) | 2)
+#define MT6797_GPIO63__FUNC_SPI4_MO_B (MTK_PIN_NO(63) | 3)
+#define MT6797_GPIO63__FUNC_I2S0_MCK (MTK_PIN_NO(63) | 4)
+#define MT6797_GPIO63__FUNC_PCM0_DI (MTK_PIN_NO(63) | 5)
+#define MT6797_GPIO63__FUNC_C2K_DM_EINT0 (MTK_PIN_NO(63) | 7)
+
+#define MT6797_GPIO64__FUNC_GPIO64 (MTK_PIN_NO(64) | 0)
+#define MT6797_GPIO64__FUNC_EINT3 (MTK_PIN_NO(64) | 1)
+#define MT6797_GPIO64__FUNC_CMFLASH (MTK_PIN_NO(64) | 2)
+#define MT6797_GPIO64__FUNC_SPI4_CS_B (MTK_PIN_NO(64) | 3)
+#define MT6797_GPIO64__FUNC_I2S0_DI (MTK_PIN_NO(64) | 4)
+#define MT6797_GPIO64__FUNC_PCM0_DO (MTK_PIN_NO(64) | 5)
+#define MT6797_GPIO64__FUNC_C2K_DM_EINT1 (MTK_PIN_NO(64) | 7)
+
+#define MT6797_GPIO65__FUNC_GPIO65 (MTK_PIN_NO(65) | 0)
+#define MT6797_GPIO65__FUNC_EINT4 (MTK_PIN_NO(65) | 1)
+#define MT6797_GPIO65__FUNC_CLKM0 (MTK_PIN_NO(65) | 2)
+#define MT6797_GPIO65__FUNC_SPI5_CLK_B (MTK_PIN_NO(65) | 3)
+#define MT6797_GPIO65__FUNC_I2S1_LRCK (MTK_PIN_NO(65) | 4)
+#define MT6797_GPIO65__FUNC_PWM_A (MTK_PIN_NO(65) | 5)
+#define MT6797_GPIO65__FUNC_C2K_DM_EINT2 (MTK_PIN_NO(65) | 7)
+
+#define MT6797_GPIO66__FUNC_GPIO66 (MTK_PIN_NO(66) | 0)
+#define MT6797_GPIO66__FUNC_EINT5 (MTK_PIN_NO(66) | 1)
+#define MT6797_GPIO66__FUNC_CLKM1 (MTK_PIN_NO(66) | 2)
+#define MT6797_GPIO66__FUNC_SPI5_MI_B (MTK_PIN_NO(66) | 3)
+#define MT6797_GPIO66__FUNC_I2S1_BCK (MTK_PIN_NO(66) | 4)
+#define MT6797_GPIO66__FUNC_PWM_B (MTK_PIN_NO(66) | 5)
+#define MT6797_GPIO66__FUNC_C2K_DM_EINT3 (MTK_PIN_NO(66) | 7)
+
+#define MT6797_GPIO67__FUNC_GPIO67 (MTK_PIN_NO(67) | 0)
+#define MT6797_GPIO67__FUNC_EINT6 (MTK_PIN_NO(67) | 1)
+#define MT6797_GPIO67__FUNC_CLKM2 (MTK_PIN_NO(67) | 2)
+#define MT6797_GPIO67__FUNC_SPI5_MO_B (MTK_PIN_NO(67) | 3)
+#define MT6797_GPIO67__FUNC_I2S1_MCK (MTK_PIN_NO(67) | 4)
+#define MT6797_GPIO67__FUNC_PWM_C (MTK_PIN_NO(67) | 5)
+#define MT6797_GPIO67__FUNC_DBG_MON_A0 (MTK_PIN_NO(67) | 7)
+
+#define MT6797_GPIO68__FUNC_GPIO68 (MTK_PIN_NO(68) | 0)
+#define MT6797_GPIO68__FUNC_EINT7 (MTK_PIN_NO(68) | 1)
+#define MT6797_GPIO68__FUNC_CLKM3 (MTK_PIN_NO(68) | 2)
+#define MT6797_GPIO68__FUNC_SPI5_CS_B (MTK_PIN_NO(68) | 3)
+#define MT6797_GPIO68__FUNC_I2S1_DO (MTK_PIN_NO(68) | 4)
+#define MT6797_GPIO68__FUNC_PWM_D (MTK_PIN_NO(68) | 5)
+#define MT6797_GPIO68__FUNC_DBG_MON_A1 (MTK_PIN_NO(68) | 7)
+
+#define MT6797_GPIO69__FUNC_GPIO69 (MTK_PIN_NO(69) | 0)
+#define MT6797_GPIO69__FUNC_I2S0_LRCK (MTK_PIN_NO(69) | 1)
+#define MT6797_GPIO69__FUNC_I2S3_LRCK (MTK_PIN_NO(69) | 2)
+#define MT6797_GPIO69__FUNC_I2S1_LRCK (MTK_PIN_NO(69) | 3)
+#define MT6797_GPIO69__FUNC_I2S2_LRCK (MTK_PIN_NO(69) | 4)
+#define MT6797_GPIO69__FUNC_DBG_MON_A2 (MTK_PIN_NO(69) | 7)
+
+#define MT6797_GPIO70__FUNC_GPIO70 (MTK_PIN_NO(70) | 0)
+#define MT6797_GPIO70__FUNC_I2S0_BCK (MTK_PIN_NO(70) | 1)
+#define MT6797_GPIO70__FUNC_I2S3_BCK (MTK_PIN_NO(70) | 2)
+#define MT6797_GPIO70__FUNC_I2S1_BCK (MTK_PIN_NO(70) | 3)
+#define MT6797_GPIO70__FUNC_I2S2_BCK (MTK_PIN_NO(70) | 4)
+#define MT6797_GPIO70__FUNC_DBG_MON_A3 (MTK_PIN_NO(70) | 7)
+
+#define MT6797_GPIO71__FUNC_GPIO71 (MTK_PIN_NO(71) | 0)
+#define MT6797_GPIO71__FUNC_I2S0_MCK (MTK_PIN_NO(71) | 1)
+#define MT6797_GPIO71__FUNC_I2S3_MCK (MTK_PIN_NO(71) | 2)
+#define MT6797_GPIO71__FUNC_I2S1_MCK (MTK_PIN_NO(71) | 3)
+#define MT6797_GPIO71__FUNC_I2S2_MCK (MTK_PIN_NO(71) | 4)
+#define MT6797_GPIO71__FUNC_DBG_MON_A4 (MTK_PIN_NO(71) | 7)
+
+#define MT6797_GPIO72__FUNC_GPIO72 (MTK_PIN_NO(72) | 0)
+/* #define MT6797_GPIO72__FUNC_I2S0_DI (MTK_PIN_NO(72) | 1) */
+#define MT6797_GPIO72__FUNC_I2S0_DI (MTK_PIN_NO(72) | 2)
+/* #define MT6797_GPIO72__FUNC_I2S2_DI (MTK_PIN_NO(72) | 3) */
+#define MT6797_GPIO72__FUNC_I2S2_DI (MTK_PIN_NO(72) | 4)
+#define MT6797_GPIO72__FUNC_DBG_MON_A5 (MTK_PIN_NO(72) | 7)
+
+#define MT6797_GPIO73__FUNC_GPIO73 (MTK_PIN_NO(73) | 0)
+/* #define MT6797_GPIO73__FUNC_I2S3_DO (MTK_PIN_NO(73) | 1) */
+#define MT6797_GPIO73__FUNC_I2S3_DO (MTK_PIN_NO(73) | 2)
+/* #define MT6797_GPIO73__FUNC_I2S1_DO (MTK_PIN_NO(73) | 3) */
+#define MT6797_GPIO73__FUNC_I2S1_DO (MTK_PIN_NO(73) | 4)
+#define MT6797_GPIO73__FUNC_DBG_MON_A6 (MTK_PIN_NO(73) | 7)
+
+#define MT6797_GPIO74__FUNC_GPIO74 (MTK_PIN_NO(74) | 0)
+#define MT6797_GPIO74__FUNC_SCL3_0 (MTK_PIN_NO(74) | 1)
+#define MT6797_GPIO74__FUNC_AUXIF_CLK1 (MTK_PIN_NO(74) | 7)
+
+#define MT6797_GPIO75__FUNC_GPIO75 (MTK_PIN_NO(75) | 0)
+#define MT6797_GPIO75__FUNC_SDA3_0 (MTK_PIN_NO(75) | 1)
+#define MT6797_GPIO75__FUNC_AUXIF_ST1 (MTK_PIN_NO(75) | 7)
+
+#define MT6797_GPIO76__FUNC_GPIO76 (MTK_PIN_NO(76) | 0)
+#define MT6797_GPIO76__FUNC_CONN_HRST_B (MTK_PIN_NO(76) | 1)
+#define MT6797_GPIO76__FUNC_C2K_DM_EINT0 (MTK_PIN_NO(76) | 7)
+
+#define MT6797_GPIO77__FUNC_GPIO77 (MTK_PIN_NO(77) | 0)
+#define MT6797_GPIO77__FUNC_CONN_TOP_CLK (MTK_PIN_NO(77) | 1)
+#define MT6797_GPIO77__FUNC_C2K_DM_EINT1 (MTK_PIN_NO(77) | 7)
+
+#define MT6797_GPIO78__FUNC_GPIO78 (MTK_PIN_NO(78) | 0)
+#define MT6797_GPIO78__FUNC_CONN_TOP_DATA (MTK_PIN_NO(78) | 1)
+#define MT6797_GPIO78__FUNC_C2K_DM_EINT2 (MTK_PIN_NO(78) | 7)
+
+#define MT6797_GPIO79__FUNC_GPIO79 (MTK_PIN_NO(79) | 0)
+#define MT6797_GPIO79__FUNC_CONN_WB_PTA (MTK_PIN_NO(79) | 1)
+#define MT6797_GPIO79__FUNC_C2K_DM_EINT3 (MTK_PIN_NO(79) | 7)
+
+#define MT6797_GPIO80__FUNC_GPIO80 (MTK_PIN_NO(80) | 0)
+#define MT6797_GPIO80__FUNC_CONN_WF_HB0 (MTK_PIN_NO(80) | 1)
+#define MT6797_GPIO80__FUNC_C2K_EINT0 (MTK_PIN_NO(80) | 7)
+
+#define MT6797_GPIO81__FUNC_GPIO81 (MTK_PIN_NO(81) | 0)
+#define MT6797_GPIO81__FUNC_CONN_WF_HB1 (MTK_PIN_NO(81) | 1)
+#define MT6797_GPIO81__FUNC_C2K_EINT1 (MTK_PIN_NO(81) | 7)
+
+#define MT6797_GPIO82__FUNC_GPIO82 (MTK_PIN_NO(82) | 0)
+#define MT6797_GPIO82__FUNC_CONN_WF_HB2 (MTK_PIN_NO(82) | 1)
+#define MT6797_GPIO82__FUNC_MD_CLKM0 (MTK_PIN_NO(82) | 7)
+
+#define MT6797_GPIO83__FUNC_GPIO83 (MTK_PIN_NO(83) | 0)
+#define MT6797_GPIO83__FUNC_CONN_BT_CLK (MTK_PIN_NO(83) | 1)
+#define MT6797_GPIO83__FUNC_MD_CLKM1 (MTK_PIN_NO(83) | 7)
+
+#define MT6797_GPIO84__FUNC_GPIO84 (MTK_PIN_NO(84) | 0)
+#define MT6797_GPIO84__FUNC_CONN_BT_DATA (MTK_PIN_NO(84) | 1)
+
+#define MT6797_GPIO85__FUNC_GPIO85 (MTK_PIN_NO(85) | 0)
+#define MT6797_GPIO85__FUNC_EINT8 (MTK_PIN_NO(85) | 1)
+#define MT6797_GPIO85__FUNC_I2S1_LRCK (MTK_PIN_NO(85) | 2)
+#define MT6797_GPIO85__FUNC_I2S2_LRCK (MTK_PIN_NO(85) | 3)
+#define MT6797_GPIO85__FUNC_URXD1 (MTK_PIN_NO(85) | 4)
+#define MT6797_GPIO85__FUNC_MD_URXD0 (MTK_PIN_NO(85) | 5)
+#define MT6797_GPIO85__FUNC_DBG_MON_A7 (MTK_PIN_NO(85) | 7)
+
+#define MT6797_GPIO86__FUNC_GPIO86 (MTK_PIN_NO(86) | 0)
+#define MT6797_GPIO86__FUNC_EINT9 (MTK_PIN_NO(86) | 1)
+#define MT6797_GPIO86__FUNC_I2S1_BCK (MTK_PIN_NO(86) | 2)
+#define MT6797_GPIO86__FUNC_I2S2_BCK (MTK_PIN_NO(86) | 3)
+#define MT6797_GPIO86__FUNC_UTXD1 (MTK_PIN_NO(86) | 4)
+#define MT6797_GPIO86__FUNC_MD_UTXD0 (MTK_PIN_NO(86) | 5)
+#define MT6797_GPIO86__FUNC_DBG_MON_A8 (MTK_PIN_NO(86) | 7)
+
+#define MT6797_GPIO87__FUNC_GPIO87 (MTK_PIN_NO(87) | 0)
+#define MT6797_GPIO87__FUNC_EINT10 (MTK_PIN_NO(87) | 1)
+#define MT6797_GPIO87__FUNC_I2S1_MCK (MTK_PIN_NO(87) | 2)
+#define MT6797_GPIO87__FUNC_I2S2_MCK (MTK_PIN_NO(87) | 3)
+#define MT6797_GPIO87__FUNC_URTS1 (MTK_PIN_NO(87) | 4)
+#define MT6797_GPIO87__FUNC_MD_URXD1 (MTK_PIN_NO(87) | 5)
+#define MT6797_GPIO87__FUNC_DBG_MON_A9 (MTK_PIN_NO(87) | 7)
+
+#define MT6797_GPIO88__FUNC_GPIO88 (MTK_PIN_NO(88) | 0)
+#define MT6797_GPIO88__FUNC_EINT11 (MTK_PIN_NO(88) | 1)
+#define MT6797_GPIO88__FUNC_I2S1_DO (MTK_PIN_NO(88) | 2)
+#define MT6797_GPIO88__FUNC_I2S2_DI (MTK_PIN_NO(88) | 3)
+#define MT6797_GPIO88__FUNC_UCTS1 (MTK_PIN_NO(88) | 4)
+#define MT6797_GPIO88__FUNC_MD_UTXD1 (MTK_PIN_NO(88) | 5)
+#define MT6797_GPIO88__FUNC_DBG_MON_A10 (MTK_PIN_NO(88) | 7)
+
+#define MT6797_GPIO89__FUNC_GPIO89 (MTK_PIN_NO(89) | 0)
+#define MT6797_GPIO89__FUNC_EINT12 (MTK_PIN_NO(89) | 1)
+#define MT6797_GPIO89__FUNC_IRTX_OUT (MTK_PIN_NO(89) | 2)
+#define MT6797_GPIO89__FUNC_CLKM0 (MTK_PIN_NO(89) | 3)
+#define MT6797_GPIO89__FUNC_PCM1_SYNC (MTK_PIN_NO(89) | 4)
+#define MT6797_GPIO89__FUNC_URTS0 (MTK_PIN_NO(89) | 5)
+#define MT6797_GPIO89__FUNC_DBG_MON_A11 (MTK_PIN_NO(89) | 7)
+
+#define MT6797_GPIO90__FUNC_GPIO90 (MTK_PIN_NO(90) | 0)
+#define MT6797_GPIO90__FUNC_EINT13 (MTK_PIN_NO(90) | 1)
+#define MT6797_GPIO90__FUNC_CMFLASH (MTK_PIN_NO(90) | 2)
+#define MT6797_GPIO90__FUNC_CLKM1 (MTK_PIN_NO(90) | 3)
+#define MT6797_GPIO90__FUNC_PCM1_CLK (MTK_PIN_NO(90) | 4)
+#define MT6797_GPIO90__FUNC_UCTS0 (MTK_PIN_NO(90) | 5)
+#define MT6797_GPIO90__FUNC_C2K_DM_EINT0 (MTK_PIN_NO(90) | 7)
+
+#define MT6797_GPIO91__FUNC_GPIO91 (MTK_PIN_NO(91) | 0)
+#define MT6797_GPIO91__FUNC_EINT14 (MTK_PIN_NO(91) | 1)
+#define MT6797_GPIO91__FUNC_PWM_A (MTK_PIN_NO(91) | 2)
+#define MT6797_GPIO91__FUNC_CLKM2 (MTK_PIN_NO(91) | 3)
+#define MT6797_GPIO91__FUNC_PCM1_DI (MTK_PIN_NO(91) | 4)
+#define MT6797_GPIO91__FUNC_SDA0_3 (MTK_PIN_NO(91) | 5)
+#define MT6797_GPIO91__FUNC_C2K_DM_EINT1 (MTK_PIN_NO(91) | 7)
+
+#define MT6797_GPIO92__FUNC_GPIO92 (MTK_PIN_NO(92) | 0)
+#define MT6797_GPIO92__FUNC_EINT15 (MTK_PIN_NO(92) | 1)
+#define MT6797_GPIO92__FUNC_PWM_B (MTK_PIN_NO(92) | 2)
+#define MT6797_GPIO92__FUNC_CLKM3 (MTK_PIN_NO(92) | 3)
+#define MT6797_GPIO92__FUNC_PCM1_DO0 (MTK_PIN_NO(92) | 4)
+#define MT6797_GPIO92__FUNC_SCL0_3 (MTK_PIN_NO(92) | 5)
+
+#define MT6797_GPIO93__FUNC_GPIO93 (MTK_PIN_NO(93) | 0)
+#define MT6797_GPIO93__FUNC_EINT16 (MTK_PIN_NO(93) | 1)
+#define MT6797_GPIO93__FUNC_IDDIG (MTK_PIN_NO(93) | 2)
+#define MT6797_GPIO93__FUNC_CLKM4 (MTK_PIN_NO(93) | 3)
+#define MT6797_GPIO93__FUNC_PCM1_DO1 (MTK_PIN_NO(93) | 4)
+#define MT6797_GPIO93__FUNC_MD_INT2 (MTK_PIN_NO(93) | 5)
+#define MT6797_GPIO93__FUNC_DROP_ZONE (MTK_PIN_NO(93) | 7)
+
+#define MT6797_GPIO94__FUNC_GPIO94 (MTK_PIN_NO(94) | 0)
+#define MT6797_GPIO94__FUNC_USB_DRVVBUS (MTK_PIN_NO(94) | 1)
+#define MT6797_GPIO94__FUNC_PWM_C (MTK_PIN_NO(94) | 2)
+#define MT6797_GPIO94__FUNC_CLKM5 (MTK_PIN_NO(94) | 3)
+
+#define MT6797_GPIO95__FUNC_GPIO95 (MTK_PIN_NO(95) | 0)
+#define MT6797_GPIO95__FUNC_SDA2_0 (MTK_PIN_NO(95) | 1)
+#define MT6797_GPIO95__FUNC_AUXIF_ST0 (MTK_PIN_NO(95) | 7)
+
+#define MT6797_GPIO96__FUNC_GPIO96 (MTK_PIN_NO(96) | 0)
+#define MT6797_GPIO96__FUNC_SCL2_0 (MTK_PIN_NO(96) | 1)
+#define MT6797_GPIO96__FUNC_AUXIF_CLK0 (MTK_PIN_NO(96) | 7)
+
+#define MT6797_GPIO97__FUNC_GPIO97 (MTK_PIN_NO(97) | 0)
+#define MT6797_GPIO97__FUNC_URXD0 (MTK_PIN_NO(97) | 1)
+#define MT6797_GPIO97__FUNC_UTXD0 (MTK_PIN_NO(97) | 2)
+#define MT6797_GPIO97__FUNC_MD_URXD0 (MTK_PIN_NO(97) | 3)
+#define MT6797_GPIO97__FUNC_MD_URXD1 (MTK_PIN_NO(97) | 4)
+#define MT6797_GPIO97__FUNC_MD_URXD2 (MTK_PIN_NO(97) | 5)
+#define MT6797_GPIO97__FUNC_C2K_URXD0 (MTK_PIN_NO(97) | 6)
+#define MT6797_GPIO97__FUNC_C2K_URXD1 (MTK_PIN_NO(97) | 7)
+
+#define MT6797_GPIO98__FUNC_GPIO98 (MTK_PIN_NO(98) | 0)
+#define MT6797_GPIO98__FUNC_UTXD0 (MTK_PIN_NO(98) | 1)
+#define MT6797_GPIO98__FUNC_URXD0 (MTK_PIN_NO(98) | 2)
+#define MT6797_GPIO98__FUNC_MD_UTXD0 (MTK_PIN_NO(98) | 3)
+#define MT6797_GPIO98__FUNC_MD_UTXD1 (MTK_PIN_NO(98) | 4)
+#define MT6797_GPIO98__FUNC_MD_UTXD2 (MTK_PIN_NO(98) | 5)
+#define MT6797_GPIO98__FUNC_C2K_UTXD0 (MTK_PIN_NO(98) | 6)
+#define MT6797_GPIO98__FUNC_C2K_UTXD1 (MTK_PIN_NO(98) | 7)
+
+#define MT6797_GPIO99__FUNC_GPIO99 (MTK_PIN_NO(99) | 0)
+#define MT6797_GPIO99__FUNC_RTC32K_CK (MTK_PIN_NO(99) | 1)
+
+#define MT6797_GPIO100__FUNC_GPIO100 (MTK_PIN_NO(100) | 0)
+#define MT6797_GPIO100__FUNC_SRCLKENAI0 (MTK_PIN_NO(100) | 1)
+
+#define MT6797_GPIO101__FUNC_GPIO101 (MTK_PIN_NO(101) | 0)
+#define MT6797_GPIO101__FUNC_SRCLKENAI1 (MTK_PIN_NO(101) | 1)
+
+#define MT6797_GPIO102__FUNC_GPIO102 (MTK_PIN_NO(102) | 0)
+#define MT6797_GPIO102__FUNC_SRCLKENA0 (MTK_PIN_NO(102) | 1)
+
+#define MT6797_GPIO103__FUNC_GPIO103 (MTK_PIN_NO(103) | 0)
+#define MT6797_GPIO103__FUNC_SRCLKENA1 (MTK_PIN_NO(103) | 1)
+
+#define MT6797_GPIO104__FUNC_GPIO104 (MTK_PIN_NO(104) | 0)
+#define MT6797_GPIO104__FUNC_SYSRSTB (MTK_PIN_NO(104) | 1)
+
+#define MT6797_GPIO105__FUNC_GPIO105 (MTK_PIN_NO(105) | 0)
+#define MT6797_GPIO105__FUNC_WATCHDOG (MTK_PIN_NO(105) | 1)
+
+#define MT6797_GPIO106__FUNC_GPIO106 (MTK_PIN_NO(106) | 0)
+#define MT6797_GPIO106__FUNC_KPROW0 (MTK_PIN_NO(106) | 1)
+#define MT6797_GPIO106__FUNC_CMFLASH (MTK_PIN_NO(106) | 2)
+#define MT6797_GPIO106__FUNC_CLKM4 (MTK_PIN_NO(106) | 3)
+#define MT6797_GPIO106__FUNC_TP_GPIO0_AO (MTK_PIN_NO(106) | 4)
+#define MT6797_GPIO106__FUNC_IRTX_OUT (MTK_PIN_NO(106) | 5)
+
+#define MT6797_GPIO107__FUNC_GPIO107 (MTK_PIN_NO(107) | 0)
+#define MT6797_GPIO107__FUNC_KPROW1 (MTK_PIN_NO(107) | 1)
+#define MT6797_GPIO107__FUNC_IDDIG (MTK_PIN_NO(107) | 2)
+#define MT6797_GPIO107__FUNC_CLKM5 (MTK_PIN_NO(107) | 3)
+#define MT6797_GPIO107__FUNC_TP_GPIO1_AO (MTK_PIN_NO(107) | 4)
+#define MT6797_GPIO107__FUNC_I2S1_BCK (MTK_PIN_NO(107) | 5)
+#define MT6797_GPIO107__FUNC_DAP_SIB1_SWD (MTK_PIN_NO(107) | 7)
+
+#define MT6797_GPIO108__FUNC_GPIO108 (MTK_PIN_NO(108) | 0)
+#define MT6797_GPIO108__FUNC_KPROW2 (MTK_PIN_NO(108) | 1)
+#define MT6797_GPIO108__FUNC_USB_DRVVBUS (MTK_PIN_NO(108) | 2)
+#define MT6797_GPIO108__FUNC_PWM_A (MTK_PIN_NO(108) | 3)
+#define MT6797_GPIO108__FUNC_CMFLASH (MTK_PIN_NO(108) | 4)
+#define MT6797_GPIO108__FUNC_I2S1_LRCK (MTK_PIN_NO(108) | 5)
+#define MT6797_GPIO108__FUNC_DAP_SIB1_SWCK (MTK_PIN_NO(108) | 7)
+
+#define MT6797_GPIO109__FUNC_GPIO109 (MTK_PIN_NO(109) | 0)
+#define MT6797_GPIO109__FUNC_KPCOL0 (MTK_PIN_NO(109) | 1)
+
+#define MT6797_GPIO110__FUNC_GPIO110 (MTK_PIN_NO(110) | 0)
+#define MT6797_GPIO110__FUNC_KPCOL1 (MTK_PIN_NO(110) | 1)
+#define MT6797_GPIO110__FUNC_SDA1_3 (MTK_PIN_NO(110) | 2)
+#define MT6797_GPIO110__FUNC_PWM_B (MTK_PIN_NO(110) | 3)
+#define MT6797_GPIO110__FUNC_CLKM0 (MTK_PIN_NO(110) | 4)
+#define MT6797_GPIO110__FUNC_I2S1_DO (MTK_PIN_NO(110) | 5)
+#define MT6797_GPIO110__FUNC_C2K_DM_EINT3 (MTK_PIN_NO(110) | 7)
+
+#define MT6797_GPIO111__FUNC_GPIO111 (MTK_PIN_NO(111) | 0)
+#define MT6797_GPIO111__FUNC_KPCOL2 (MTK_PIN_NO(111) | 1)
+#define MT6797_GPIO111__FUNC_SCL1_3 (MTK_PIN_NO(111) | 2)
+#define MT6797_GPIO111__FUNC_PWM_C (MTK_PIN_NO(111) | 3)
+#define MT6797_GPIO111__FUNC_DISP_PWM (MTK_PIN_NO(111) | 4)
+#define MT6797_GPIO111__FUNC_I2S1_MCK (MTK_PIN_NO(111) | 5)
+#define MT6797_GPIO111__FUNC_C2K_DM_EINT2 (MTK_PIN_NO(111) | 7)
+
+#define MT6797_GPIO112__FUNC_GPIO112 (MTK_PIN_NO(112) | 0)
+#define MT6797_GPIO112__FUNC_MD_INT1_C2K_UIM1_HOT_PLUG_IN (MTK_PIN_NO(112) | 1)
+#define MT6797_GPIO112__FUNC_C2K_DM_EINT1 (MTK_PIN_NO(112) | 7)
+
+#define MT6797_GPIO113__FUNC_GPIO113 (MTK_PIN_NO(113) | 0)
+#define MT6797_GPIO113__FUNC_MD_INT0_C2K_UIM0_HOT_PLUG_IN (MTK_PIN_NO(113) | 1)
+#define MT6797_GPIO113__FUNC_C2K_DM_EINT0 (MTK_PIN_NO(113) | 7)
+
+#define MT6797_GPIO114__FUNC_GPIO114 (MTK_PIN_NO(114) | 0)
+#define MT6797_GPIO114__FUNC_MSDC0_DAT0 (MTK_PIN_NO(114) | 1)
+
+#define MT6797_GPIO115__FUNC_GPIO115 (MTK_PIN_NO(115) | 0)
+#define MT6797_GPIO115__FUNC_MSDC0_DAT1 (MTK_PIN_NO(115) | 1)
+
+#define MT6797_GPIO116__FUNC_GPIO116 (MTK_PIN_NO(116) | 0)
+#define MT6797_GPIO116__FUNC_MSDC0_DAT2 (MTK_PIN_NO(116) | 1)
+
+#define MT6797_GPIO117__FUNC_GPIO117 (MTK_PIN_NO(117) | 0)
+#define MT6797_GPIO117__FUNC_MSDC0_DAT3 (MTK_PIN_NO(117) | 1)
+
+#define MT6797_GPIO118__FUNC_GPIO118 (MTK_PIN_NO(118) | 0)
+#define MT6797_GPIO118__FUNC_MSDC0_DAT4 (MTK_PIN_NO(118) | 1)
+
+#define MT6797_GPIO119__FUNC_GPIO119 (MTK_PIN_NO(119) | 0)
+#define MT6797_GPIO119__FUNC_MSDC0_DAT5 (MTK_PIN_NO(119) | 1)
+
+#define MT6797_GPIO120__FUNC_GPIO120 (MTK_PIN_NO(120) | 0)
+#define MT6797_GPIO120__FUNC_MSDC0_DAT6 (MTK_PIN_NO(120) | 1)
+
+#define MT6797_GPIO121__FUNC_GPIO121 (MTK_PIN_NO(121) | 0)
+#define MT6797_GPIO121__FUNC_MSDC0_DAT7 (MTK_PIN_NO(121) | 1)
+
+#define MT6797_GPIO122__FUNC_GPIO122 (MTK_PIN_NO(122) | 0)
+#define MT6797_GPIO122__FUNC_MSDC0_CMD (MTK_PIN_NO(122) | 1)
+
+#define MT6797_GPIO123__FUNC_GPIO123 (MTK_PIN_NO(123) | 0)
+#define MT6797_GPIO123__FUNC_MSDC0_CLK (MTK_PIN_NO(123) | 1)
+
+#define MT6797_GPIO124__FUNC_GPIO124 (MTK_PIN_NO(124) | 0)
+#define MT6797_GPIO124__FUNC_MSDC0_DSL (MTK_PIN_NO(124) | 1)
+
+#define MT6797_GPIO125__FUNC_GPIO125 (MTK_PIN_NO(125) | 0)
+#define MT6797_GPIO125__FUNC_MSDC0_RSTB (MTK_PIN_NO(125) | 1)
+
+#define MT6797_GPIO126__FUNC_GPIO126 (MTK_PIN_NO(126) | 0)
+#define MT6797_GPIO126__FUNC_MD1_SIM1_SCLK (MTK_PIN_NO(126) | 1)
+#define MT6797_GPIO126__FUNC_MD1_SIM2_SCLK (MTK_PIN_NO(126) | 2)
+#define MT6797_GPIO126__FUNC_C2K_UIM0_CLK (MTK_PIN_NO(126) | 3)
+#define MT6797_GPIO126__FUNC_C2K_UIM1_CLK (MTK_PIN_NO(126) | 4)
+
+#define MT6797_GPIO127__FUNC_GPIO127 (MTK_PIN_NO(127) | 0)
+#define MT6797_GPIO127__FUNC_MD1_SIM1_SRST (MTK_PIN_NO(127) | 1)
+#define MT6797_GPIO127__FUNC_MD1_SIM2_SRST (MTK_PIN_NO(127) | 2)
+#define MT6797_GPIO127__FUNC_C2K_UIM0_RST (MTK_PIN_NO(127) | 3)
+#define MT6797_GPIO127__FUNC_C2K_UIM1_RST (MTK_PIN_NO(127) | 4)
+
+#define MT6797_GPIO128__FUNC_GPIO128 (MTK_PIN_NO(128) | 0)
+#define MT6797_GPIO128__FUNC_MD1_SIM1_SIO (MTK_PIN_NO(128) | 1)
+#define MT6797_GPIO128__FUNC_MD1_SIM2_SIO (MTK_PIN_NO(128) | 2)
+#define MT6797_GPIO128__FUNC_C2K_UIM0_IO (MTK_PIN_NO(128) | 3)
+#define MT6797_GPIO128__FUNC_C2K_UIM1_IO (MTK_PIN_NO(128) | 4)
+
+#define MT6797_GPIO129__FUNC_GPIO129 (MTK_PIN_NO(129) | 0)
+#define MT6797_GPIO129__FUNC_MSDC1_CMD (MTK_PIN_NO(129) | 1)
+#define MT6797_GPIO129__FUNC_CONN_DSP_JMS (MTK_PIN_NO(129) | 2)
+#define MT6797_GPIO129__FUNC_LTE_JTAG_TMS (MTK_PIN_NO(129) | 3)
+#define MT6797_GPIO129__FUNC_UDI_TMS (MTK_PIN_NO(129) | 4)
+#define MT6797_GPIO129__FUNC_C2K_TMS (MTK_PIN_NO(129) | 5)
+
+#define MT6797_GPIO130__FUNC_GPIO130 (MTK_PIN_NO(130) | 0)
+#define MT6797_GPIO130__FUNC_MSDC1_DAT0 (MTK_PIN_NO(130) | 1)
+#define MT6797_GPIO130__FUNC_CONN_DSP_JDI (MTK_PIN_NO(130) | 2)
+#define MT6797_GPIO130__FUNC_LTE_JTAG_TDI (MTK_PIN_NO(130) | 3)
+#define MT6797_GPIO130__FUNC_UDI_TDI (MTK_PIN_NO(130) | 4)
+#define MT6797_GPIO130__FUNC_C2K_TDI (MTK_PIN_NO(130) | 5)
+
+#define MT6797_GPIO131__FUNC_GPIO131 (MTK_PIN_NO(131) | 0)
+#define MT6797_GPIO131__FUNC_MSDC1_DAT1 (MTK_PIN_NO(131) | 1)
+#define MT6797_GPIO131__FUNC_CONN_DSP_JDO (MTK_PIN_NO(131) | 2)
+#define MT6797_GPIO131__FUNC_LTE_JTAG_TDO (MTK_PIN_NO(131) | 3)
+#define MT6797_GPIO131__FUNC_UDI_TDO (MTK_PIN_NO(131) | 4)
+#define MT6797_GPIO131__FUNC_C2K_TDO (MTK_PIN_NO(131) | 5)
+
+#define MT6797_GPIO132__FUNC_GPIO132 (MTK_PIN_NO(132) | 0)
+#define MT6797_GPIO132__FUNC_MSDC1_DAT2 (MTK_PIN_NO(132) | 1)
+#define MT6797_GPIO132__FUNC_C2K_RTCK (MTK_PIN_NO(132) | 5)
+
+#define MT6797_GPIO133__FUNC_GPIO133 (MTK_PIN_NO(133) | 0)
+#define MT6797_GPIO133__FUNC_MSDC1_DAT3 (MTK_PIN_NO(133) | 1)
+#define MT6797_GPIO133__FUNC_CONN_DSP_JINTP (MTK_PIN_NO(133) | 2)
+#define MT6797_GPIO133__FUNC_LTE_JTAG_TRSTN (MTK_PIN_NO(133) | 3)
+#define MT6797_GPIO133__FUNC_UDI_NTRST (MTK_PIN_NO(133) | 4)
+#define MT6797_GPIO133__FUNC_C2K_NTRST (MTK_PIN_NO(133) | 5)
+
+#define MT6797_GPIO134__FUNC_GPIO134 (MTK_PIN_NO(134) | 0)
+#define MT6797_GPIO134__FUNC_MSDC1_CLK (MTK_PIN_NO(134) | 1)
+#define MT6797_GPIO134__FUNC_CONN_DSP_JCK (MTK_PIN_NO(134) | 2)
+#define MT6797_GPIO134__FUNC_LTE_JTAG_TCK (MTK_PIN_NO(134) | 3)
+#define MT6797_GPIO134__FUNC_UDI_TCK_XI (MTK_PIN_NO(134) | 4)
+#define MT6797_GPIO134__FUNC_C2K_TCK (MTK_PIN_NO(134) | 5)
+
+#define MT6797_GPIO135__FUNC_GPIO135 (MTK_PIN_NO(135) | 0)
+#define MT6797_GPIO135__FUNC_TDM_LRCK (MTK_PIN_NO(135) | 1)
+#define MT6797_GPIO135__FUNC_I2S0_LRCK (MTK_PIN_NO(135) | 2)
+#define MT6797_GPIO135__FUNC_CLKM0 (MTK_PIN_NO(135) | 3)
+#define MT6797_GPIO135__FUNC_PCM1_SYNC (MTK_PIN_NO(135) | 4)
+#define MT6797_GPIO135__FUNC_PWM_A (MTK_PIN_NO(135) | 5)
+#define MT6797_GPIO135__FUNC_DBG_MON_A12 (MTK_PIN_NO(135) | 7)
+
+#define MT6797_GPIO136__FUNC_GPIO136 (MTK_PIN_NO(136) | 0)
+#define MT6797_GPIO136__FUNC_TDM_BCK (MTK_PIN_NO(136) | 1)
+#define MT6797_GPIO136__FUNC_I2S0_BCK (MTK_PIN_NO(136) | 2)
+#define MT6797_GPIO136__FUNC_CLKM1 (MTK_PIN_NO(136) | 3)
+#define MT6797_GPIO136__FUNC_PCM1_CLK (MTK_PIN_NO(136) | 4)
+#define MT6797_GPIO136__FUNC_PWM_B (MTK_PIN_NO(136) | 5)
+#define MT6797_GPIO136__FUNC_DBG_MON_A13 (MTK_PIN_NO(136) | 7)
+
+#define MT6797_GPIO137__FUNC_GPIO137 (MTK_PIN_NO(137) | 0)
+#define MT6797_GPIO137__FUNC_TDM_MCK (MTK_PIN_NO(137) | 1)
+#define MT6797_GPIO137__FUNC_I2S0_MCK (MTK_PIN_NO(137) | 2)
+#define MT6797_GPIO137__FUNC_CLKM2 (MTK_PIN_NO(137) | 3)
+#define MT6797_GPIO137__FUNC_PCM1_DI (MTK_PIN_NO(137) | 4)
+#define MT6797_GPIO137__FUNC_IRTX_OUT (MTK_PIN_NO(137) | 5)
+#define MT6797_GPIO137__FUNC_DBG_MON_A14 (MTK_PIN_NO(137) | 7)
+
+#define MT6797_GPIO138__FUNC_GPIO138 (MTK_PIN_NO(138) | 0)
+#define MT6797_GPIO138__FUNC_TDM_DATA0 (MTK_PIN_NO(138) | 1)
+#define MT6797_GPIO138__FUNC_I2S0_DI (MTK_PIN_NO(138) | 2)
+#define MT6797_GPIO138__FUNC_CLKM3 (MTK_PIN_NO(138) | 3)
+#define MT6797_GPIO138__FUNC_PCM1_DO0 (MTK_PIN_NO(138) | 4)
+#define MT6797_GPIO138__FUNC_PWM_C (MTK_PIN_NO(138) | 5)
+#define MT6797_GPIO138__FUNC_SDA3_1 (MTK_PIN_NO(138) | 6)
+#define MT6797_GPIO138__FUNC_DBG_MON_A15 (MTK_PIN_NO(138) | 7)
+
+#define MT6797_GPIO139__FUNC_GPIO139 (MTK_PIN_NO(139) | 0)
+#define MT6797_GPIO139__FUNC_TDM_DATA1 (MTK_PIN_NO(139) | 1)
+#define MT6797_GPIO139__FUNC_I2S3_DO (MTK_PIN_NO(139) | 2)
+#define MT6797_GPIO139__FUNC_CLKM4 (MTK_PIN_NO(139) | 3)
+#define MT6797_GPIO139__FUNC_PCM1_DO1 (MTK_PIN_NO(139) | 4)
+#define MT6797_GPIO139__FUNC_ANT_SEL2 (MTK_PIN_NO(139) | 5)
+#define MT6797_GPIO139__FUNC_SCL3_1 (MTK_PIN_NO(139) | 6)
+#define MT6797_GPIO139__FUNC_DBG_MON_A16 (MTK_PIN_NO(139) | 7)
+
+#define MT6797_GPIO140__FUNC_GPIO140 (MTK_PIN_NO(140) | 0)
+#define MT6797_GPIO140__FUNC_TDM_DATA2 (MTK_PIN_NO(140) | 1)
+#define MT6797_GPIO140__FUNC_DISP_PWM (MTK_PIN_NO(140) | 2)
+#define MT6797_GPIO140__FUNC_CLKM5 (MTK_PIN_NO(140) | 3)
+#define MT6797_GPIO140__FUNC_SDA1_4 (MTK_PIN_NO(140) | 4)
+#define MT6797_GPIO140__FUNC_ANT_SEL1 (MTK_PIN_NO(140) | 5)
+#define MT6797_GPIO140__FUNC_URXD3 (MTK_PIN_NO(140) | 6)
+#define MT6797_GPIO140__FUNC_DBG_MON_A17 (MTK_PIN_NO(140) | 7)
+
+#define MT6797_GPIO141__FUNC_GPIO141 (MTK_PIN_NO(141) | 0)
+#define MT6797_GPIO141__FUNC_TDM_DATA3 (MTK_PIN_NO(141) | 1)
+#define MT6797_GPIO141__FUNC_CMFLASH (MTK_PIN_NO(141) | 2)
+#define MT6797_GPIO141__FUNC_IRTX_OUT (MTK_PIN_NO(141) | 3)
+#define MT6797_GPIO141__FUNC_SCL1_4 (MTK_PIN_NO(141) | 4)
+#define MT6797_GPIO141__FUNC_ANT_SEL0 (MTK_PIN_NO(141) | 5)
+#define MT6797_GPIO141__FUNC_UTXD3 (MTK_PIN_NO(141) | 6)
+#define MT6797_GPIO141__FUNC_DBG_MON_A18 (MTK_PIN_NO(141) | 7)
+
+#define MT6797_GPIO142__FUNC_GPIO142 (MTK_PIN_NO(142) | 0)
+#define MT6797_GPIO142__FUNC_PWRAP_SPI0_MI (MTK_PIN_NO(142) | 1)
+#define MT6797_GPIO142__FUNC_PWRAP_SPI0_MO (MTK_PIN_NO(142) | 2)
+
+#define MT6797_GPIO143__FUNC_GPIO143 (MTK_PIN_NO(143) | 0)
+#define MT6797_GPIO143__FUNC_PWRAP_SPI0_MO (MTK_PIN_NO(143) | 1)
+#define MT6797_GPIO143__FUNC_PWRAP_SPI0_MI (MTK_PIN_NO(143) | 2)
+
+#define MT6797_GPIO144__FUNC_GPIO144 (MTK_PIN_NO(144) | 0)
+#define MT6797_GPIO144__FUNC_PWRAP_SPI0_CK (MTK_PIN_NO(144) | 1)
+
+#define MT6797_GPIO145__FUNC_GPIO145 (MTK_PIN_NO(145) | 0)
+#define MT6797_GPIO145__FUNC_PWRAP_SPI0_CSN (MTK_PIN_NO(145) | 1)
+
+#define MT6797_GPIO146__FUNC_GPIO146 (MTK_PIN_NO(146) | 0)
+#define MT6797_GPIO146__FUNC_AUD_CLK_MOSI (MTK_PIN_NO(146) | 1)
+
+#define MT6797_GPIO147__FUNC_GPIO147 (MTK_PIN_NO(147) | 0)
+#define MT6797_GPIO147__FUNC_AUD_DAT_MISO (MTK_PIN_NO(147) | 1)
+#define MT6797_GPIO147__FUNC_AUD_DAT_MOSI (MTK_PIN_NO(147) | 2)
+#define MT6797_GPIO147__FUNC_VOW_DAT_MISO (MTK_PIN_NO(147) | 3)
+
+#define MT6797_GPIO148__FUNC_GPIO148 (MTK_PIN_NO(148) | 0)
+#define MT6797_GPIO148__FUNC_AUD_DAT_MOSI (MTK_PIN_NO(148) | 1)
+#define MT6797_GPIO148__FUNC_AUD_DAT_MISO (MTK_PIN_NO(148) | 2)
+
+#define MT6797_GPIO149__FUNC_GPIO149 (MTK_PIN_NO(149) | 0)
+#define MT6797_GPIO149__FUNC_VOW_CLK_MISO (MTK_PIN_NO(149) | 1)
+
+#define MT6797_GPIO150__FUNC_GPIO150 (MTK_PIN_NO(150) | 0)
+#define MT6797_GPIO150__FUNC_ANC_DAT_MOSI (MTK_PIN_NO(150) | 1)
+
+#define MT6797_GPIO151__FUNC_GPIO151 (MTK_PIN_NO(151) | 0)
+#define MT6797_GPIO151__FUNC_SCL6_0 (MTK_PIN_NO(151) | 1)
+
+#define MT6797_GPIO152__FUNC_GPIO152 (MTK_PIN_NO(152) | 0)
+#define MT6797_GPIO152__FUNC_SDA6_0 (MTK_PIN_NO(152) | 1)
+
+#define MT6797_GPIO153__FUNC_GPIO153 (MTK_PIN_NO(153) | 0)
+#define MT6797_GPIO153__FUNC_SCL7_0 (MTK_PIN_NO(153) | 1)
+
+#define MT6797_GPIO154__FUNC_GPIO154 (MTK_PIN_NO(154) | 0)
+#define MT6797_GPIO154__FUNC_SDA7_0 (MTK_PIN_NO(154) | 1)
+
+#define MT6797_GPIO155__FUNC_GPIO155 (MTK_PIN_NO(155) | 0)
+#define MT6797_GPIO155__FUNC_MD1_SIM2_SCLK (MTK_PIN_NO(155) | 1)
+#define MT6797_GPIO155__FUNC_MD1_SIM1_SCLK (MTK_PIN_NO(155) | 2)
+#define MT6797_GPIO155__FUNC_C2K_UIM0_CLK (MTK_PIN_NO(155) | 3)
+#define MT6797_GPIO155__FUNC_C2K_UIM1_CLK (MTK_PIN_NO(155) | 4)
+
+#define MT6797_GPIO156__FUNC_GPIO156 (MTK_PIN_NO(156) | 0)
+#define MT6797_GPIO156__FUNC_MD1_SIM2_SRST (MTK_PIN_NO(156) | 1)
+#define MT6797_GPIO156__FUNC_MD1_SIM1_SRST (MTK_PIN_NO(156) | 2)
+#define MT6797_GPIO156__FUNC_C2K_UIM0_RST (MTK_PIN_NO(156) | 3)
+#define MT6797_GPIO156__FUNC_C2K_UIM1_RST (MTK_PIN_NO(156) | 4)
+
+#define MT6797_GPIO157__FUNC_GPIO157 (MTK_PIN_NO(157) | 0)
+#define MT6797_GPIO157__FUNC_MD1_SIM2_SIO (MTK_PIN_NO(157) | 1)
+#define MT6797_GPIO157__FUNC_MD1_SIM1_SIO (MTK_PIN_NO(157) | 2)
+#define MT6797_GPIO157__FUNC_C2K_UIM0_IO (MTK_PIN_NO(157) | 3)
+#define MT6797_GPIO157__FUNC_C2K_UIM1_IO (MTK_PIN_NO(157) | 4)
+
+#define MT6797_GPIO158__FUNC_GPIO158 (MTK_PIN_NO(158) | 0)
+#define MT6797_GPIO158__FUNC_MIPI_TDP0 (MTK_PIN_NO(158) | 1)
+
+#define MT6797_GPIO159__FUNC_GPIO159 (MTK_PIN_NO(159) | 0)
+#define MT6797_GPIO159__FUNC_MIPI_TDN0 (MTK_PIN_NO(159) | 1)
+
+#define MT6797_GPIO160__FUNC_GPIO160 (MTK_PIN_NO(160) | 0)
+#define MT6797_GPIO160__FUNC_MIPI_TDP1 (MTK_PIN_NO(160) | 1)
+
+#define MT6797_GPIO161__FUNC_GPIO161 (MTK_PIN_NO(161) | 0)
+#define MT6797_GPIO161__FUNC_MIPI_TDN1 (MTK_PIN_NO(161) | 1)
+
+#define MT6797_GPIO162__FUNC_GPIO162 (MTK_PIN_NO(162) | 0)
+#define MT6797_GPIO162__FUNC_MIPI_TCP (MTK_PIN_NO(162) | 1)
+
+#define MT6797_GPIO163__FUNC_GPIO163 (MTK_PIN_NO(163) | 0)
+#define MT6797_GPIO163__FUNC_MIPI_TCN (MTK_PIN_NO(163) | 1)
+
+#define MT6797_GPIO164__FUNC_GPIO164 (MTK_PIN_NO(164) | 0)
+#define MT6797_GPIO164__FUNC_MIPI_TDP2 (MTK_PIN_NO(164) | 1)
+
+#define MT6797_GPIO165__FUNC_GPIO165 (MTK_PIN_NO(165) | 0)
+#define MT6797_GPIO165__FUNC_MIPI_TDN2 (MTK_PIN_NO(165) | 1)
+
+#define MT6797_GPIO166__FUNC_GPIO166 (MTK_PIN_NO(166) | 0)
+#define MT6797_GPIO166__FUNC_MIPI_TDP3 (MTK_PIN_NO(166) | 1)
+
+#define MT6797_GPIO167__FUNC_GPIO167 (MTK_PIN_NO(167) | 0)
+#define MT6797_GPIO167__FUNC_MIPI_TDN3 (MTK_PIN_NO(167) | 1)
+
+#define MT6797_GPIO168__FUNC_GPIO168 (MTK_PIN_NO(168) | 0)
+#define MT6797_GPIO168__FUNC_MIPI_TDP0_A (MTK_PIN_NO(168) | 1)
+
+#define MT6797_GPIO169__FUNC_GPIO169 (MTK_PIN_NO(169) | 0)
+#define MT6797_GPIO169__FUNC_MIPI_TDN0_A (MTK_PIN_NO(169) | 1)
+
+#define MT6797_GPIO170__FUNC_GPIO170 (MTK_PIN_NO(170) | 0)
+#define MT6797_GPIO170__FUNC_MIPI_TDP1_A (MTK_PIN_NO(170) | 1)
+
+#define MT6797_GPIO171__FUNC_GPIO171 (MTK_PIN_NO(171) | 0)
+#define MT6797_GPIO171__FUNC_MIPI_TDN1_A (MTK_PIN_NO(171) | 1)
+
+#define MT6797_GPIO172__FUNC_GPIO172 (MTK_PIN_NO(172) | 0)
+#define MT6797_GPIO172__FUNC_MIPI_TCP_A (MTK_PIN_NO(172) | 1)
+
+#define MT6797_GPIO173__FUNC_GPIO173 (MTK_PIN_NO(173) | 0)
+#define MT6797_GPIO173__FUNC_MIPI_TCN_A (MTK_PIN_NO(173) | 1)
+
+#define MT6797_GPIO174__FUNC_GPIO174 (MTK_PIN_NO(174) | 0)
+#define MT6797_GPIO174__FUNC_MIPI_TDP2_A (MTK_PIN_NO(174) | 1)
+
+#define MT6797_GPIO175__FUNC_GPIO175 (MTK_PIN_NO(175) | 0)
+#define MT6797_GPIO175__FUNC_MIPI_TDN2_A (MTK_PIN_NO(175) | 1)
+
+#define MT6797_GPIO176__FUNC_GPIO176 (MTK_PIN_NO(176) | 0)
+#define MT6797_GPIO176__FUNC_MIPI_TDP3_A (MTK_PIN_NO(176) | 1)
+
+#define MT6797_GPIO177__FUNC_GPIO177 (MTK_PIN_NO(177) | 0)
+#define MT6797_GPIO177__FUNC_MIPI_TDN3_A (MTK_PIN_NO(177) | 1)
+
+#define MT6797_GPIO178__FUNC_GPIO178 (MTK_PIN_NO(178) | 0)
+#define MT6797_GPIO178__FUNC_DISP_PWM (MTK_PIN_NO(178) | 1)
+#define MT6797_GPIO178__FUNC_PWM_D (MTK_PIN_NO(178) | 2)
+#define MT6797_GPIO178__FUNC_CLKM5 (MTK_PIN_NO(178) | 3)
+#define MT6797_GPIO178__FUNC_DBG_MON_A19 (MTK_PIN_NO(178) | 7)
+
+#define MT6797_GPIO179__FUNC_GPIO179 (MTK_PIN_NO(179) | 0)
+#define MT6797_GPIO179__FUNC_DSI_TE0 (MTK_PIN_NO(179) | 1)
+#define MT6797_GPIO179__FUNC_DBG_MON_A20 (MTK_PIN_NO(179) | 7)
+
+#define MT6797_GPIO180__FUNC_GPIO180 (MTK_PIN_NO(180) | 0)
+#define MT6797_GPIO180__FUNC_LCM_RST (MTK_PIN_NO(180) | 1)
+#define MT6797_GPIO180__FUNC_DSI_TE1 (MTK_PIN_NO(180) | 2)
+#define MT6797_GPIO180__FUNC_DBG_MON_A21 (MTK_PIN_NO(180) | 7)
+
+#define MT6797_GPIO181__FUNC_GPIO181 (MTK_PIN_NO(181) | 0)
+#define MT6797_GPIO181__FUNC_IDDIG (MTK_PIN_NO(181) | 1)
+#define MT6797_GPIO181__FUNC_DSI_TE1 (MTK_PIN_NO(181) | 2)
+#define MT6797_GPIO181__FUNC_DBG_MON_A22 (MTK_PIN_NO(181) | 7)
+
+#define MT6797_GPIO182__FUNC_GPIO182 (MTK_PIN_NO(182) | 0)
+#define MT6797_GPIO182__FUNC_TESTMODE (MTK_PIN_NO(182) | 1)
+
+#define MT6797_GPIO183__FUNC_GPIO183 (MTK_PIN_NO(183) | 0)
+#define MT6797_GPIO183__FUNC_RFIC0_BSI_CK (MTK_PIN_NO(183) | 1)
+#define MT6797_GPIO183__FUNC_SPM_BSI_CK (MTK_PIN_NO(183) | 2)
+#define MT6797_GPIO183__FUNC_DBG_MON_B27 (MTK_PIN_NO(183) | 7)
+
+#define MT6797_GPIO184__FUNC_GPIO184 (MTK_PIN_NO(184) | 0)
+#define MT6797_GPIO184__FUNC_RFIC0_BSI_EN (MTK_PIN_NO(184) | 1)
+#define MT6797_GPIO184__FUNC_SPM_BSI_EN (MTK_PIN_NO(184) | 2)
+#define MT6797_GPIO184__FUNC_DBG_MON_B28 (MTK_PIN_NO(184) | 7)
+
+#define MT6797_GPIO185__FUNC_GPIO185 (MTK_PIN_NO(185) | 0)
+#define MT6797_GPIO185__FUNC_RFIC0_BSI_D0 (MTK_PIN_NO(185) | 1)
+#define MT6797_GPIO185__FUNC_SPM_BSI_D0 (MTK_PIN_NO(185) | 2)
+#define MT6797_GPIO185__FUNC_DBG_MON_B29 (MTK_PIN_NO(185) | 7)
+
+#define MT6797_GPIO186__FUNC_GPIO186 (MTK_PIN_NO(186) | 0)
+#define MT6797_GPIO186__FUNC_RFIC0_BSI_D1 (MTK_PIN_NO(186) | 1)
+#define MT6797_GPIO186__FUNC_SPM_BSI_D1 (MTK_PIN_NO(186) | 2)
+#define MT6797_GPIO186__FUNC_DBG_MON_B30 (MTK_PIN_NO(186) | 7)
+
+#define MT6797_GPIO187__FUNC_GPIO187 (MTK_PIN_NO(187) | 0)
+#define MT6797_GPIO187__FUNC_RFIC0_BSI_D2 (MTK_PIN_NO(187) | 1)
+#define MT6797_GPIO187__FUNC_SPM_BSI_D2 (MTK_PIN_NO(187) | 2)
+#define MT6797_GPIO187__FUNC_DBG_MON_B31 (MTK_PIN_NO(187) | 7)
+
+#define MT6797_GPIO188__FUNC_GPIO188 (MTK_PIN_NO(188) | 0)
+#define MT6797_GPIO188__FUNC_MIPI0_SCLK (MTK_PIN_NO(188) | 1)
+#define MT6797_GPIO188__FUNC_DBG_MON_B32 (MTK_PIN_NO(188) | 7)
+
+#define MT6797_GPIO189__FUNC_GPIO189 (MTK_PIN_NO(189) | 0)
+#define MT6797_GPIO189__FUNC_MIPI0_SDATA (MTK_PIN_NO(189) | 1)
+
+#define MT6797_GPIO190__FUNC_GPIO190 (MTK_PIN_NO(190) | 0)
+#define MT6797_GPIO190__FUNC_MIPI1_SCLK (MTK_PIN_NO(190) | 1)
+
+#define MT6797_GPIO191__FUNC_GPIO191 (MTK_PIN_NO(191) | 0)
+#define MT6797_GPIO191__FUNC_MIPI1_SDATA (MTK_PIN_NO(191) | 1)
+
+#define MT6797_GPIO192__FUNC_GPIO192 (MTK_PIN_NO(192) | 0)
+#define MT6797_GPIO192__FUNC_BPI_BUS4 (MTK_PIN_NO(192) | 1)
+
+#define MT6797_GPIO193__FUNC_GPIO193 (MTK_PIN_NO(193) | 0)
+#define MT6797_GPIO193__FUNC_BPI_BUS5 (MTK_PIN_NO(193) | 1)
+#define MT6797_GPIO193__FUNC_DBG_MON_B0 (MTK_PIN_NO(193) | 7)
+
+#define MT6797_GPIO194__FUNC_GPIO194 (MTK_PIN_NO(194) | 0)
+#define MT6797_GPIO194__FUNC_BPI_BUS6 (MTK_PIN_NO(194) | 1)
+#define MT6797_GPIO194__FUNC_DBG_MON_B1 (MTK_PIN_NO(194) | 7)
+
+#define MT6797_GPIO195__FUNC_GPIO195 (MTK_PIN_NO(195) | 0)
+#define MT6797_GPIO195__FUNC_BPI_BUS7 (MTK_PIN_NO(195) | 1)
+#define MT6797_GPIO195__FUNC_DBG_MON_B2 (MTK_PIN_NO(195) | 7)
+
+#define MT6797_GPIO196__FUNC_GPIO196 (MTK_PIN_NO(196) | 0)
+#define MT6797_GPIO196__FUNC_BPI_BUS8 (MTK_PIN_NO(196) | 1)
+#define MT6797_GPIO196__FUNC_DBG_MON_B3 (MTK_PIN_NO(196) | 7)
+
+#define MT6797_GPIO197__FUNC_GPIO197 (MTK_PIN_NO(197) | 0)
+#define MT6797_GPIO197__FUNC_BPI_BUS9 (MTK_PIN_NO(197) | 1)
+#define MT6797_GPIO197__FUNC_DBG_MON_B4 (MTK_PIN_NO(197) | 7)
+
+#define MT6797_GPIO198__FUNC_GPIO198 (MTK_PIN_NO(198) | 0)
+#define MT6797_GPIO198__FUNC_BPI_BUS10 (MTK_PIN_NO(198) | 1)
+#define MT6797_GPIO198__FUNC_DBG_MON_B5 (MTK_PIN_NO(198) | 7)
+
+#define MT6797_GPIO199__FUNC_GPIO199 (MTK_PIN_NO(199) | 0)
+#define MT6797_GPIO199__FUNC_BPI_BUS11 (MTK_PIN_NO(199) | 1)
+#define MT6797_GPIO199__FUNC_DBG_MON_B6 (MTK_PIN_NO(199) | 7)
+
+#define MT6797_GPIO200__FUNC_GPIO200 (MTK_PIN_NO(200) | 0)
+#define MT6797_GPIO200__FUNC_BPI_BUS12 (MTK_PIN_NO(200) | 1)
+#define MT6797_GPIO200__FUNC_DBG_MON_B7 (MTK_PIN_NO(200) | 7)
+
+#define MT6797_GPIO201__FUNC_GPIO201 (MTK_PIN_NO(201) | 0)
+#define MT6797_GPIO201__FUNC_BPI_BUS13 (MTK_PIN_NO(201) | 1)
+#define MT6797_GPIO201__FUNC_DBG_MON_B8 (MTK_PIN_NO(201) | 7)
+
+#define MT6797_GPIO202__FUNC_GPIO202 (MTK_PIN_NO(202) | 0)
+#define MT6797_GPIO202__FUNC_BPI_BUS14 (MTK_PIN_NO(202) | 1)
+#define MT6797_GPIO202__FUNC_DBG_MON_B9 (MTK_PIN_NO(202) | 7)
+
+#define MT6797_GPIO203__FUNC_GPIO203 (MTK_PIN_NO(203) | 0)
+#define MT6797_GPIO203__FUNC_BPI_BUS15 (MTK_PIN_NO(203) | 1)
+#define MT6797_GPIO203__FUNC_DBG_MON_B10 (MTK_PIN_NO(203) | 7)
+
+#define MT6797_GPIO204__FUNC_GPIO204 (MTK_PIN_NO(204) | 0)
+#define MT6797_GPIO204__FUNC_BPI_BUS16 (MTK_PIN_NO(204) | 1)
+#define MT6797_GPIO204__FUNC_PA_VM0 (MTK_PIN_NO(204) | 2)
+#define MT6797_GPIO204__FUNC_DBG_MON_B11 (MTK_PIN_NO(204) | 7)
+
+#define MT6797_GPIO205__FUNC_GPIO205 (MTK_PIN_NO(205) | 0)
+#define MT6797_GPIO205__FUNC_BPI_BUS17 (MTK_PIN_NO(205) | 1)
+#define MT6797_GPIO205__FUNC_PA_VM1 (MTK_PIN_NO(205) | 2)
+#define MT6797_GPIO205__FUNC_DBG_MON_B12 (MTK_PIN_NO(205) | 7)
+
+#define MT6797_GPIO206__FUNC_GPIO206 (MTK_PIN_NO(206) | 0)
+#define MT6797_GPIO206__FUNC_BPI_BUS18 (MTK_PIN_NO(206) | 1)
+#define MT6797_GPIO206__FUNC_TX_SWAP0 (MTK_PIN_NO(206) | 2)
+#define MT6797_GPIO206__FUNC_DBG_MON_B13 (MTK_PIN_NO(206) | 7)
+
+#define MT6797_GPIO207__FUNC_GPIO207 (MTK_PIN_NO(207) | 0)
+#define MT6797_GPIO207__FUNC_BPI_BUS19 (MTK_PIN_NO(207) | 1)
+#define MT6797_GPIO207__FUNC_TX_SWAP1 (MTK_PIN_NO(207) | 2)
+#define MT6797_GPIO207__FUNC_DBG_MON_B14 (MTK_PIN_NO(207) | 7)
+
+#define MT6797_GPIO208__FUNC_GPIO208 (MTK_PIN_NO(208) | 0)
+#define MT6797_GPIO208__FUNC_BPI_BUS20 (MTK_PIN_NO(208) | 1)
+#define MT6797_GPIO208__FUNC_TX_SWAP2 (MTK_PIN_NO(208) | 2)
+#define MT6797_GPIO208__FUNC_DBG_MON_B15 (MTK_PIN_NO(208) | 7)
+
+#define MT6797_GPIO209__FUNC_GPIO209 (MTK_PIN_NO(209) | 0)
+#define MT6797_GPIO209__FUNC_BPI_BUS21 (MTK_PIN_NO(209) | 1)
+#define MT6797_GPIO209__FUNC_TX_SWAP3 (MTK_PIN_NO(209) | 2)
+#define MT6797_GPIO209__FUNC_DBG_MON_B16 (MTK_PIN_NO(209) | 7)
+
+#define MT6797_GPIO210__FUNC_GPIO210 (MTK_PIN_NO(210) | 0)
+#define MT6797_GPIO210__FUNC_BPI_BUS22 (MTK_PIN_NO(210) | 1)
+#define MT6797_GPIO210__FUNC_DET_BPI0 (MTK_PIN_NO(210) | 2)
+#define MT6797_GPIO210__FUNC_DBG_MON_B17 (MTK_PIN_NO(210) | 7)
+
+#define MT6797_GPIO211__FUNC_GPIO211 (MTK_PIN_NO(211) | 0)
+#define MT6797_GPIO211__FUNC_BPI_BUS23 (MTK_PIN_NO(211) | 1)
+#define MT6797_GPIO211__FUNC_DET_BPI1 (MTK_PIN_NO(211) | 2)
+#define MT6797_GPIO211__FUNC_DBG_MON_B18 (MTK_PIN_NO(211) | 7)
+
+#define MT6797_GPIO212__FUNC_GPIO212 (MTK_PIN_NO(212) | 0)
+#define MT6797_GPIO212__FUNC_BPI_BUS0 (MTK_PIN_NO(212) | 1)
+#define MT6797_GPIO212__FUNC_DBG_MON_B19 (MTK_PIN_NO(212) | 7)
+
+#define MT6797_GPIO213__FUNC_GPIO213 (MTK_PIN_NO(213) | 0)
+#define MT6797_GPIO213__FUNC_BPI_BUS1 (MTK_PIN_NO(213) | 1)
+#define MT6797_GPIO213__FUNC_DBG_MON_B20 (MTK_PIN_NO(213) | 7)
+
+#define MT6797_GPIO214__FUNC_GPIO214 (MTK_PIN_NO(214) | 0)
+#define MT6797_GPIO214__FUNC_BPI_BUS2 (MTK_PIN_NO(214) | 1)
+#define MT6797_GPIO214__FUNC_DBG_MON_B21 (MTK_PIN_NO(214) | 7)
+
+#define MT6797_GPIO215__FUNC_GPIO215 (MTK_PIN_NO(215) | 0)
+#define MT6797_GPIO215__FUNC_BPI_BUS3 (MTK_PIN_NO(215) | 1)
+#define MT6797_GPIO215__FUNC_DBG_MON_B22 (MTK_PIN_NO(215) | 7)
+
+#define MT6797_GPIO216__FUNC_GPIO216 (MTK_PIN_NO(216) | 0)
+#define MT6797_GPIO216__FUNC_MIPI2_SCLK (MTK_PIN_NO(216) | 1)
+#define MT6797_GPIO216__FUNC_DBG_MON_B23 (MTK_PIN_NO(216) | 7)
+
+#define MT6797_GPIO217__FUNC_GPIO217 (MTK_PIN_NO(217) | 0)
+#define MT6797_GPIO217__FUNC_MIPI2_SDATA (MTK_PIN_NO(217) | 1)
+#define MT6797_GPIO217__FUNC_DBG_MON_B24 (MTK_PIN_NO(217) | 7)
+
+#define MT6797_GPIO218__FUNC_GPIO218 (MTK_PIN_NO(218) | 0)
+#define MT6797_GPIO218__FUNC_MIPI3_SCLK (MTK_PIN_NO(218) | 1)
+#define MT6797_GPIO218__FUNC_DBG_MON_B25 (MTK_PIN_NO(218) | 7)
+
+#define MT6797_GPIO219__FUNC_GPIO219 (MTK_PIN_NO(219) | 0)
+#define MT6797_GPIO219__FUNC_MIPI3_SDATA (MTK_PIN_NO(219) | 1)
+#define MT6797_GPIO219__FUNC_DBG_MON_B26 (MTK_PIN_NO(219) | 7)
+
+#define MT6797_GPIO220__FUNC_GPIO220 (MTK_PIN_NO(220) | 0)
+#define MT6797_GPIO220__FUNC_CONN_WF_IP (MTK_PIN_NO(220) | 1)
+
+#define MT6797_GPIO221__FUNC_GPIO221 (MTK_PIN_NO(221) | 0)
+#define MT6797_GPIO221__FUNC_CONN_WF_IN (MTK_PIN_NO(221) | 1)
+
+#define MT6797_GPIO222__FUNC_GPIO222 (MTK_PIN_NO(222) | 0)
+#define MT6797_GPIO222__FUNC_CONN_WF_QP (MTK_PIN_NO(222) | 1)
+
+#define MT6797_GPIO223__FUNC_GPIO223 (MTK_PIN_NO(223) | 0)
+#define MT6797_GPIO223__FUNC_CONN_WF_QN (MTK_PIN_NO(223) | 1)
+
+#define MT6797_GPIO224__FUNC_GPIO224 (MTK_PIN_NO(224) | 0)
+#define MT6797_GPIO224__FUNC_CONN_BT_IP (MTK_PIN_NO(224) | 1)
+
+#define MT6797_GPIO225__FUNC_GPIO225 (MTK_PIN_NO(225) | 0)
+#define MT6797_GPIO225__FUNC_CONN_BT_IN (MTK_PIN_NO(225) | 1)
+
+#define MT6797_GPIO226__FUNC_GPIO226 (MTK_PIN_NO(226) | 0)
+#define MT6797_GPIO226__FUNC_CONN_BT_QP (MTK_PIN_NO(226) | 1)
+
+#define MT6797_GPIO227__FUNC_GPIO227 (MTK_PIN_NO(227) | 0)
+#define MT6797_GPIO227__FUNC_CONN_BT_QN (MTK_PIN_NO(227) | 1)
+
+#define MT6797_GPIO228__FUNC_GPIO228 (MTK_PIN_NO(228) | 0)
+#define MT6797_GPIO228__FUNC_CONN_GPS_IP (MTK_PIN_NO(228) | 1)
+
+#define MT6797_GPIO229__FUNC_GPIO229 (MTK_PIN_NO(229) | 0)
+#define MT6797_GPIO229__FUNC_CONN_GPS_IN (MTK_PIN_NO(229) | 1)
+
+#define MT6797_GPIO230__FUNC_GPIO230 (MTK_PIN_NO(230) | 0)
+#define MT6797_GPIO230__FUNC_CONN_GPS_QP (MTK_PIN_NO(230) | 1)
+
+#define MT6797_GPIO231__FUNC_GPIO231 (MTK_PIN_NO(231) | 0)
+#define MT6797_GPIO231__FUNC_CONN_GPS_QN (MTK_PIN_NO(231) | 1)
+
+#define MT6797_GPIO232__FUNC_GPIO232 (MTK_PIN_NO(232) | 0)
+#define MT6797_GPIO232__FUNC_URXD1 (MTK_PIN_NO(232) | 1)
+#define MT6797_GPIO232__FUNC_UTXD1 (MTK_PIN_NO(232) | 2)
+#define MT6797_GPIO232__FUNC_MD_URXD0 (MTK_PIN_NO(232) | 3)
+#define MT6797_GPIO232__FUNC_MD_URXD1 (MTK_PIN_NO(232) | 4)
+#define MT6797_GPIO232__FUNC_MD_URXD2 (MTK_PIN_NO(232) | 5)
+#define MT6797_GPIO232__FUNC_C2K_URXD0 (MTK_PIN_NO(232) | 6)
+#define MT6797_GPIO232__FUNC_C2K_URXD1 (MTK_PIN_NO(232) | 7)
+
+#define MT6797_GPIO233__FUNC_GPIO233 (MTK_PIN_NO(233) | 0)
+#define MT6797_GPIO233__FUNC_UTXD1 (MTK_PIN_NO(233) | 1)
+#define MT6797_GPIO233__FUNC_URXD1 (MTK_PIN_NO(233) | 2)
+#define MT6797_GPIO233__FUNC_MD_UTXD0 (MTK_PIN_NO(233) | 3)
+#define MT6797_GPIO233__FUNC_MD_UTXD1 (MTK_PIN_NO(233) | 4)
+#define MT6797_GPIO233__FUNC_MD_UTXD2 (MTK_PIN_NO(233) | 5)
+#define MT6797_GPIO233__FUNC_C2K_UTXD0 (MTK_PIN_NO(233) | 6)
+#define MT6797_GPIO233__FUNC_C2K_UTXD1 (MTK_PIN_NO(233) | 7)
+
+#define MT6797_GPIO234__FUNC_GPIO234 (MTK_PIN_NO(234) | 0)
+#define MT6797_GPIO234__FUNC_SPI1_CLK_B (MTK_PIN_NO(234) | 1)
+#define MT6797_GPIO234__FUNC_TP_UTXD1_AO (MTK_PIN_NO(234) | 2)
+#define MT6797_GPIO234__FUNC_SCL4_1 (MTK_PIN_NO(234) | 3)
+#define MT6797_GPIO234__FUNC_UTXD0 (MTK_PIN_NO(234) | 4)
+#define MT6797_GPIO234__FUNC_PWM_A (MTK_PIN_NO(234) | 6)
+#define MT6797_GPIO234__FUNC_DBG_MON_A23 (MTK_PIN_NO(234) | 7)
+
+#define MT6797_GPIO235__FUNC_GPIO235 (MTK_PIN_NO(235) | 0)
+#define MT6797_GPIO235__FUNC_SPI1_MI_B (MTK_PIN_NO(235) | 1)
+#define MT6797_GPIO235__FUNC_SPI1_MO_B (MTK_PIN_NO(235) | 2)
+#define MT6797_GPIO235__FUNC_SDA4_1 (MTK_PIN_NO(235) | 3)
+#define MT6797_GPIO235__FUNC_URXD0 (MTK_PIN_NO(235) | 4)
+#define MT6797_GPIO235__FUNC_CLKM0 (MTK_PIN_NO(235) | 6)
+#define MT6797_GPIO235__FUNC_DBG_MON_A24 (MTK_PIN_NO(235) | 7)
+
+#define MT6797_GPIO236__FUNC_GPIO236 (MTK_PIN_NO(236) | 0)
+#define MT6797_GPIO236__FUNC_SPI1_MO_B (MTK_PIN_NO(236) | 1)
+#define MT6797_GPIO236__FUNC_SPI1_MI_B (MTK_PIN_NO(236) | 2)
+#define MT6797_GPIO236__FUNC_SCL5_1 (MTK_PIN_NO(236) | 3)
+#define MT6797_GPIO236__FUNC_URTS0 (MTK_PIN_NO(236) | 4)
+#define MT6797_GPIO236__FUNC_PWM_B (MTK_PIN_NO(236) | 6)
+#define MT6797_GPIO236__FUNC_DBG_MON_A25 (MTK_PIN_NO(236) | 7)
+
+#define MT6797_GPIO237__FUNC_GPIO237 (MTK_PIN_NO(237) | 0)
+#define MT6797_GPIO237__FUNC_SPI1_CS_B (MTK_PIN_NO(237) | 1)
+#define MT6797_GPIO237__FUNC_TP_URXD1_AO (MTK_PIN_NO(237) | 2)
+#define MT6797_GPIO237__FUNC_SDA5_1 (MTK_PIN_NO(237) | 3)
+#define MT6797_GPIO237__FUNC_UCTS0 (MTK_PIN_NO(237) | 4)
+#define MT6797_GPIO237__FUNC_CLKM1 (MTK_PIN_NO(237) | 6)
+#define MT6797_GPIO237__FUNC_DBG_MON_A26 (MTK_PIN_NO(237) | 7)
+
+#define MT6797_GPIO238__FUNC_GPIO238 (MTK_PIN_NO(238) | 0)
+#define MT6797_GPIO238__FUNC_SDA4_0 (MTK_PIN_NO(238) | 1)
+
+#define MT6797_GPIO239__FUNC_GPIO239 (MTK_PIN_NO(239) | 0)
+#define MT6797_GPIO239__FUNC_SCL4_0 (MTK_PIN_NO(239) | 1)
+
+#define MT6797_GPIO240__FUNC_GPIO240 (MTK_PIN_NO(240) | 0)
+#define MT6797_GPIO240__FUNC_SDA5_0 (MTK_PIN_NO(240) | 1)
+
+#define MT6797_GPIO241__FUNC_GPIO241 (MTK_PIN_NO(241) | 0)
+#define MT6797_GPIO241__FUNC_SCL5_0 (MTK_PIN_NO(241) | 1)
+
+#define MT6797_GPIO242__FUNC_GPIO242 (MTK_PIN_NO(242) | 0)
+#define MT6797_GPIO242__FUNC_SPI2_CLK_B (MTK_PIN_NO(242) | 1)
+#define MT6797_GPIO242__FUNC_TP_UTXD2_AO (MTK_PIN_NO(242) | 2)
+#define MT6797_GPIO242__FUNC_SCL4_2 (MTK_PIN_NO(242) | 3)
+#define MT6797_GPIO242__FUNC_UTXD1 (MTK_PIN_NO(242) | 4)
+#define MT6797_GPIO242__FUNC_URTS3 (MTK_PIN_NO(242) | 5)
+#define MT6797_GPIO242__FUNC_PWM_C (MTK_PIN_NO(242) | 6)
+#define MT6797_GPIO242__FUNC_DBG_MON_A27 (MTK_PIN_NO(242) | 7)
+
+#define MT6797_GPIO243__FUNC_GPIO243 (MTK_PIN_NO(243) | 0)
+#define MT6797_GPIO243__FUNC_SPI2_MI_B (MTK_PIN_NO(243) | 1)
+#define MT6797_GPIO243__FUNC_SPI2_MO_B (MTK_PIN_NO(243) | 2)
+#define MT6797_GPIO243__FUNC_SDA4_2 (MTK_PIN_NO(243) | 3)
+#define MT6797_GPIO243__FUNC_URXD1 (MTK_PIN_NO(243) | 4)
+#define MT6797_GPIO243__FUNC_UCTS3 (MTK_PIN_NO(243) | 5)
+#define MT6797_GPIO243__FUNC_CLKM2 (MTK_PIN_NO(243) | 6)
+#define MT6797_GPIO243__FUNC_DBG_MON_A28 (MTK_PIN_NO(243) | 7)
+
+#define MT6797_GPIO244__FUNC_GPIO244 (MTK_PIN_NO(244) | 0)
+#define MT6797_GPIO244__FUNC_SPI2_MO_B (MTK_PIN_NO(244) | 1)
+#define MT6797_GPIO244__FUNC_SPI2_MI_B (MTK_PIN_NO(244) | 2)
+#define MT6797_GPIO244__FUNC_SCL5_2 (MTK_PIN_NO(244) | 3)
+#define MT6797_GPIO244__FUNC_URTS1 (MTK_PIN_NO(244) | 4)
+#define MT6797_GPIO244__FUNC_UTXD3 (MTK_PIN_NO(244) | 5)
+#define MT6797_GPIO244__FUNC_PWM_D (MTK_PIN_NO(244) | 6)
+#define MT6797_GPIO244__FUNC_DBG_MON_A29 (MTK_PIN_NO(244) | 7)
+
+#define MT6797_GPIO245__FUNC_GPIO245 (MTK_PIN_NO(245) | 0)
+#define MT6797_GPIO245__FUNC_SPI2_CS_B (MTK_PIN_NO(245) | 1)
+#define MT6797_GPIO245__FUNC_TP_URXD2_AO (MTK_PIN_NO(245) | 2)
+#define MT6797_GPIO245__FUNC_SDA5_2 (MTK_PIN_NO(245) | 3)
+#define MT6797_GPIO245__FUNC_UCTS1 (MTK_PIN_NO(245) | 4)
+#define MT6797_GPIO245__FUNC_URXD3 (MTK_PIN_NO(245) | 5)
+#define MT6797_GPIO245__FUNC_CLKM3 (MTK_PIN_NO(245) | 6)
+#define MT6797_GPIO245__FUNC_DBG_MON_A30 (MTK_PIN_NO(245) | 7)
+
+#define MT6797_GPIO246__FUNC_GPIO246 (MTK_PIN_NO(246) | 0)
+#define MT6797_GPIO246__FUNC_I2S1_LRCK (MTK_PIN_NO(246) | 1)
+#define MT6797_GPIO246__FUNC_I2S2_LRCK (MTK_PIN_NO(246) | 2)
+#define MT6797_GPIO246__FUNC_I2S0_LRCK (MTK_PIN_NO(246) | 3)
+#define MT6797_GPIO246__FUNC_I2S3_LRCK (MTK_PIN_NO(246) | 4)
+#define MT6797_GPIO246__FUNC_PCM0_SYNC (MTK_PIN_NO(246) | 5)
+#define MT6797_GPIO246__FUNC_SPI5_CLK_C (MTK_PIN_NO(246) | 6)
+#define MT6797_GPIO246__FUNC_DBG_MON_A31 (MTK_PIN_NO(246) | 7)
+
+#define MT6797_GPIO247__FUNC_GPIO247 (MTK_PIN_NO(247) | 0)
+#define MT6797_GPIO247__FUNC_I2S1_BCK (MTK_PIN_NO(247) | 1)
+#define MT6797_GPIO247__FUNC_I2S2_BCK (MTK_PIN_NO(247) | 2)
+#define MT6797_GPIO247__FUNC_I2S0_BCK (MTK_PIN_NO(247) | 3)
+#define MT6797_GPIO247__FUNC_I2S3_BCK (MTK_PIN_NO(247) | 4)
+#define MT6797_GPIO247__FUNC_PCM0_CLK (MTK_PIN_NO(247) | 5)
+#define MT6797_GPIO247__FUNC_SPI5_MI_C (MTK_PIN_NO(247) | 6)
+#define MT6797_GPIO247__FUNC_DBG_MON_A32 (MTK_PIN_NO(247) | 7)
+
+#define MT6797_GPIO248__FUNC_GPIO248 (MTK_PIN_NO(248) | 0)
+/* #define MT6797_GPIO248__FUNC_I2S2_DI (MTK_PIN_NO(248) | 1) */
+#define MT6797_GPIO248__FUNC_I2S2_DI (MTK_PIN_NO(248) | 2)
+/* #define MT6797_GPIO248__FUNC_I2S0_DI (MTK_PIN_NO(248) | 3) */
+#define MT6797_GPIO248__FUNC_I2S0_DI (MTK_PIN_NO(248) | 4)
+#define MT6797_GPIO248__FUNC_PCM0_DI (MTK_PIN_NO(248) | 5)
+#define MT6797_GPIO248__FUNC_SPI5_CS_C (MTK_PIN_NO(248) | 6)
+
+#define MT6797_GPIO249__FUNC_GPIO249 (MTK_PIN_NO(249) | 0)
+/* #define MT6797_GPIO249__FUNC_I2S1_DO (MTK_PIN_NO(249) | 1) */
+#define MT6797_GPIO249__FUNC_I2S1_DO (MTK_PIN_NO(249) | 2)
+/* #define MT6797_GPIO249__FUNC_I2S3_DO (MTK_PIN_NO(249) | 3) */
+#define MT6797_GPIO249__FUNC_I2S3_DO (MTK_PIN_NO(249) | 4)
+#define MT6797_GPIO249__FUNC_PCM0_DO (MTK_PIN_NO(249) | 5)
+#define MT6797_GPIO249__FUNC_SPI5_MO_C (MTK_PIN_NO(249) | 6)
+#define MT6797_GPIO249__FUNC_TRAP_SRAM_PWR_BYPASS (MTK_PIN_NO(249) | 7)
+
+#define MT6797_GPIO250__FUNC_GPIO250 (MTK_PIN_NO(250) | 0)
+#define MT6797_GPIO250__FUNC_SPI3_MI (MTK_PIN_NO(250) | 1)
+#define MT6797_GPIO250__FUNC_SPI3_MO (MTK_PIN_NO(250) | 2)
+#define MT6797_GPIO250__FUNC_IRTX_OUT (MTK_PIN_NO(250) | 3)
+#define MT6797_GPIO250__FUNC_TP_URXD1_AO (MTK_PIN_NO(250) | 6)
+#define MT6797_GPIO250__FUNC_DROP_ZONE (MTK_PIN_NO(250) | 7)
+
+#define MT6797_GPIO251__FUNC_GPIO251 (MTK_PIN_NO(251) | 0)
+#define MT6797_GPIO251__FUNC_SPI3_MO (MTK_PIN_NO(251) | 1)
+#define MT6797_GPIO251__FUNC_SPI3_MI (MTK_PIN_NO(251) | 2)
+#define MT6797_GPIO251__FUNC_CMFLASH (MTK_PIN_NO(251) | 3)
+#define MT6797_GPIO251__FUNC_TP_UTXD1_AO (MTK_PIN_NO(251) | 6)
+#define MT6797_GPIO251__FUNC_C2K_RTCK (MTK_PIN_NO(251) | 7)
+
+#define MT6797_GPIO252__FUNC_GPIO252 (MTK_PIN_NO(252) | 0)
+#define MT6797_GPIO252__FUNC_SPI3_CLK (MTK_PIN_NO(252) | 1)
+#define MT6797_GPIO252__FUNC_SCL0_4 (MTK_PIN_NO(252) | 2)
+#define MT6797_GPIO252__FUNC_PWM_D (MTK_PIN_NO(252) | 3)
+#define MT6797_GPIO252__FUNC_C2K_TMS (MTK_PIN_NO(252) | 7)
+
+#define MT6797_GPIO253__FUNC_GPIO253 (MTK_PIN_NO(253) | 0)
+#define MT6797_GPIO253__FUNC_SPI3_CS (MTK_PIN_NO(253) | 1)
+#define MT6797_GPIO253__FUNC_SDA0_4 (MTK_PIN_NO(253) | 2)
+#define MT6797_GPIO253__FUNC_PWM_A (MTK_PIN_NO(253) | 3)
+#define MT6797_GPIO253__FUNC_C2K_TCK (MTK_PIN_NO(253) | 7)
+
+#define MT6797_GPIO254__FUNC_GPIO254 (MTK_PIN_NO(254) | 0)
+#define MT6797_GPIO254__FUNC_I2S1_MCK (MTK_PIN_NO(254) | 1)
+#define MT6797_GPIO254__FUNC_I2S2_MCK (MTK_PIN_NO(254) | 2)
+#define MT6797_GPIO254__FUNC_I2S0_MCK (MTK_PIN_NO(254) | 3)
+#define MT6797_GPIO254__FUNC_I2S3_MCK (MTK_PIN_NO(254) | 4)
+#define MT6797_GPIO254__FUNC_CLKM0 (MTK_PIN_NO(254) | 5)
+#define MT6797_GPIO254__FUNC_C2K_TDI (MTK_PIN_NO(254) | 7)
+
+#define MT6797_GPIO255__FUNC_GPIO255 (MTK_PIN_NO(255) | 0)
+#define MT6797_GPIO255__FUNC_CLKM1 (MTK_PIN_NO(255) | 1)
+#define MT6797_GPIO255__FUNC_DISP_PWM (MTK_PIN_NO(255) | 2)
+#define MT6797_GPIO255__FUNC_PWM_B (MTK_PIN_NO(255) | 3)
+#define MT6797_GPIO255__FUNC_TP_GPIO1_AO (MTK_PIN_NO(255) | 6)
+#define MT6797_GPIO255__FUNC_C2K_TDO (MTK_PIN_NO(255) | 7)
+
+#define MT6797_GPIO256__FUNC_GPIO256 (MTK_PIN_NO(256) | 0)
+#define MT6797_GPIO256__FUNC_CLKM2 (MTK_PIN_NO(256) | 1)
+#define MT6797_GPIO256__FUNC_IRTX_OUT (MTK_PIN_NO(256) | 2)
+#define MT6797_GPIO256__FUNC_PWM_C (MTK_PIN_NO(256) | 3)
+#define MT6797_GPIO256__FUNC_TP_GPIO0_AO (MTK_PIN_NO(256) | 6)
+#define MT6797_GPIO256__FUNC_C2K_NTRST (MTK_PIN_NO(256) | 7)
+
+#define MT6797_GPIO257__FUNC_GPIO257 (MTK_PIN_NO(257) | 0)
+#define MT6797_GPIO257__FUNC_IO_JTAG_TMS (MTK_PIN_NO(257) | 1)
+#define MT6797_GPIO257__FUNC_LTE_JTAG_TMS (MTK_PIN_NO(257) | 2)
+#define MT6797_GPIO257__FUNC_DFD_TMS (MTK_PIN_NO(257) | 3)
+#define MT6797_GPIO257__FUNC_DAP_SIB1_SWD (MTK_PIN_NO(257) | 4)
+#define MT6797_GPIO257__FUNC_ANC_JTAG_TMS (MTK_PIN_NO(257) | 5)
+#define MT6797_GPIO257__FUNC_SCP_JTAG_TMS (MTK_PIN_NO(257) | 6)
+#define MT6797_GPIO257__FUNC_C2K_DM_OTMS (MTK_PIN_NO(257) | 7)
+
+#define MT6797_GPIO258__FUNC_GPIO258 (MTK_PIN_NO(258) | 0)
+#define MT6797_GPIO258__FUNC_IO_JTAG_TCK (MTK_PIN_NO(258) | 1)
+#define MT6797_GPIO258__FUNC_LTE_JTAG_TCK (MTK_PIN_NO(258) | 2)
+#define MT6797_GPIO258__FUNC_DFD_TCK_XI (MTK_PIN_NO(258) | 3)
+#define MT6797_GPIO258__FUNC_DAP_SIB1_SWCK (MTK_PIN_NO(258) | 4)
+#define MT6797_GPIO258__FUNC_ANC_JTAG_TCK (MTK_PIN_NO(258) | 5)
+#define MT6797_GPIO258__FUNC_SCP_JTAG_TCK (MTK_PIN_NO(258) | 6)
+#define MT6797_GPIO258__FUNC_C2K_DM_OTCK (MTK_PIN_NO(258) | 7)
+
+#define MT6797_GPIO259__FUNC_GPIO259 (MTK_PIN_NO(259) | 0)
+#define MT6797_GPIO259__FUNC_IO_JTAG_TDI (MTK_PIN_NO(259) | 1)
+#define MT6797_GPIO259__FUNC_LTE_JTAG_TDI (MTK_PIN_NO(259) | 2)
+#define MT6797_GPIO259__FUNC_DFD_TDI (MTK_PIN_NO(259) | 3)
+#define MT6797_GPIO259__FUNC_ANC_JTAG_TDI (MTK_PIN_NO(259) | 5)
+#define MT6797_GPIO259__FUNC_SCP_JTAG_TDI (MTK_PIN_NO(259) | 6)
+#define MT6797_GPIO259__FUNC_C2K_DM_OTDI (MTK_PIN_NO(259) | 7)
+
+#define MT6797_GPIO260__FUNC_GPIO260 (MTK_PIN_NO(260) | 0)
+#define MT6797_GPIO260__FUNC_IO_JTAG_TDO (MTK_PIN_NO(260) | 1)
+#define MT6797_GPIO260__FUNC_LTE_JTAG_TDO (MTK_PIN_NO(260) | 2)
+#define MT6797_GPIO260__FUNC_DFD_TDO (MTK_PIN_NO(260) | 3)
+#define MT6797_GPIO260__FUNC_ANC_JTAG_TDO (MTK_PIN_NO(260) | 5)
+#define MT6797_GPIO260__FUNC_SCP_JTAG_TDO (MTK_PIN_NO(260) | 6)
+#define MT6797_GPIO260__FUNC_C2K_DM_OTDO (MTK_PIN_NO(260) | 7)
+
+#define MT6797_GPIO261__FUNC_GPIO261 (MTK_PIN_NO(261) | 0)
+#define MT6797_GPIO261__FUNC_LTE_JTAG_TRSTN (MTK_PIN_NO(261) | 2)
+#define MT6797_GPIO261__FUNC_DFD_NTRST (MTK_PIN_NO(261) | 3)
+#define MT6797_GPIO261__FUNC_ANC_JTAG_TRSTN (MTK_PIN_NO(261) | 5)
+#define MT6797_GPIO261__FUNC_SCP_JTAG_TRSTN (MTK_PIN_NO(261) | 6)
+#define MT6797_GPIO261__FUNC_C2K_DM_JTINTP (MTK_PIN_NO(261) | 7)
+
+#endif /* __DTS_MT6797_PINFUNC_H */
diff --git a/include/dt-bindings/pinctrl/pads-imx8qm.h b/include/dt-bindings/pinctrl/pads-imx8qm.h
new file mode 100644 (file)
index 0000000..ae7b294
--- /dev/null
@@ -0,0 +1,960 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017~2018 NXP
+ */
+
+#ifndef _IMX8QM_PADS_H
+#define _IMX8QM_PADS_H
+
+/* pin id */
+#define IMX8QM_SIM0_CLK                                        0
+#define IMX8QM_SIM0_RST                                        1
+#define IMX8QM_SIM0_IO                                 2
+#define IMX8QM_SIM0_PD                                 3
+#define IMX8QM_SIM0_POWER_EN                           4
+#define IMX8QM_SIM0_GPIO0_00                           5
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_SIM               6
+#define IMX8QM_M40_I2C0_SCL                            7
+#define IMX8QM_M40_I2C0_SDA                            8
+#define IMX8QM_M40_GPIO0_00                            9
+#define IMX8QM_M40_GPIO0_01                            10
+#define IMX8QM_M41_I2C0_SCL                            11
+#define IMX8QM_M41_I2C0_SDA                            12
+#define IMX8QM_M41_GPIO0_00                            13
+#define IMX8QM_M41_GPIO0_01                            14
+#define IMX8QM_GPT0_CLK                                        15
+#define IMX8QM_GPT0_CAPTURE                            16
+#define IMX8QM_GPT0_COMPARE                            17
+#define IMX8QM_GPT1_CLK                                        18
+#define IMX8QM_GPT1_CAPTURE                            19
+#define IMX8QM_GPT1_COMPARE                            20
+#define IMX8QM_UART0_RX                                        21
+#define IMX8QM_UART0_TX                                        22
+#define IMX8QM_UART0_RTS_B                             23
+#define IMX8QM_UART0_CTS_B                             24
+#define IMX8QM_UART1_TX                                        25
+#define IMX8QM_UART1_RX                                        26
+#define IMX8QM_UART1_RTS_B                             27
+#define IMX8QM_UART1_CTS_B                             28
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_GPIOLH            29
+#define IMX8QM_SCU_PMIC_MEMC_ON                                30
+#define IMX8QM_SCU_WDOG_OUT                            31
+#define IMX8QM_PMIC_I2C_SDA                            32
+#define IMX8QM_PMIC_I2C_SCL                            33
+#define IMX8QM_PMIC_EARLY_WARNING                      34
+#define IMX8QM_PMIC_INT_B                              35
+#define IMX8QM_SCU_GPIO0_00                            36
+#define IMX8QM_SCU_GPIO0_01                            37
+#define IMX8QM_SCU_GPIO0_02                            38
+#define IMX8QM_SCU_GPIO0_03                            39
+#define IMX8QM_SCU_GPIO0_04                            40
+#define IMX8QM_SCU_GPIO0_05                            41
+#define IMX8QM_SCU_GPIO0_06                            42
+#define IMX8QM_SCU_GPIO0_07                            43
+#define IMX8QM_SCU_BOOT_MODE0                          44
+#define IMX8QM_SCU_BOOT_MODE1                          45
+#define IMX8QM_SCU_BOOT_MODE2                          46
+#define IMX8QM_SCU_BOOT_MODE3                          47
+#define IMX8QM_SCU_BOOT_MODE4                          48
+#define IMX8QM_SCU_BOOT_MODE5                          49
+#define IMX8QM_LVDS0_GPIO00                            50
+#define IMX8QM_LVDS0_GPIO01                            51
+#define IMX8QM_LVDS0_I2C0_SCL                          52
+#define IMX8QM_LVDS0_I2C0_SDA                          53
+#define IMX8QM_LVDS0_I2C1_SCL                          54
+#define IMX8QM_LVDS0_I2C1_SDA                          55
+#define IMX8QM_LVDS1_GPIO00                            56
+#define IMX8QM_LVDS1_GPIO01                            57
+#define IMX8QM_LVDS1_I2C0_SCL                          58
+#define IMX8QM_LVDS1_I2C0_SDA                          59
+#define IMX8QM_LVDS1_I2C1_SCL                          60
+#define IMX8QM_LVDS1_I2C1_SDA                          61
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_LVDSGPIO          62
+#define IMX8QM_MIPI_DSI0_I2C0_SCL                      63
+#define IMX8QM_MIPI_DSI0_I2C0_SDA                      64
+#define IMX8QM_MIPI_DSI0_GPIO0_00                      65
+#define IMX8QM_MIPI_DSI0_GPIO0_01                      66
+#define IMX8QM_MIPI_DSI1_I2C0_SCL                      67
+#define IMX8QM_MIPI_DSI1_I2C0_SDA                      68
+#define IMX8QM_MIPI_DSI1_GPIO0_00                      69
+#define IMX8QM_MIPI_DSI1_GPIO0_01                      70
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO       71
+#define IMX8QM_MIPI_CSI0_MCLK_OUT                      72
+#define IMX8QM_MIPI_CSI0_I2C0_SCL                      73
+#define IMX8QM_MIPI_CSI0_I2C0_SDA                      74
+#define IMX8QM_MIPI_CSI0_GPIO0_00                      75
+#define IMX8QM_MIPI_CSI0_GPIO0_01                      76
+#define IMX8QM_MIPI_CSI1_MCLK_OUT                      77
+#define IMX8QM_MIPI_CSI1_GPIO0_00                      78
+#define IMX8QM_MIPI_CSI1_GPIO0_01                      79
+#define IMX8QM_MIPI_CSI1_I2C0_SCL                      80
+#define IMX8QM_MIPI_CSI1_I2C0_SDA                      81
+#define IMX8QM_HDMI_TX0_TS_SCL                         82
+#define IMX8QM_HDMI_TX0_TS_SDA                         83
+#define IMX8QM_COMP_CTL_GPIO_3V3_HDMIGPIO              84
+#define IMX8QM_ESAI1_FSR                               85
+#define IMX8QM_ESAI1_FST                               86
+#define IMX8QM_ESAI1_SCKR                              87
+#define IMX8QM_ESAI1_SCKT                              88
+#define IMX8QM_ESAI1_TX0                               89
+#define IMX8QM_ESAI1_TX1                               90
+#define IMX8QM_ESAI1_TX2_RX3                           91
+#define IMX8QM_ESAI1_TX3_RX2                           92
+#define IMX8QM_ESAI1_TX4_RX1                           93
+#define IMX8QM_ESAI1_TX5_RX0                           94
+#define IMX8QM_SPDIF0_RX                               95
+#define IMX8QM_SPDIF0_TX                               96
+#define IMX8QM_SPDIF0_EXT_CLK                          97
+#define IMX8QM_SPI3_SCK                                        98
+#define IMX8QM_SPI3_SDO                                        99
+#define IMX8QM_SPI3_SDI                                        100
+#define IMX8QM_SPI3_CS0                                        101
+#define IMX8QM_SPI3_CS1                                        102
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_GPIORHB           103
+#define IMX8QM_ESAI0_FSR                               104
+#define IMX8QM_ESAI0_FST                               105
+#define IMX8QM_ESAI0_SCKR                              106
+#define IMX8QM_ESAI0_SCKT                              107
+#define IMX8QM_ESAI0_TX0                               108
+#define IMX8QM_ESAI0_TX1                               109
+#define IMX8QM_ESAI0_TX2_RX3                           110
+#define IMX8QM_ESAI0_TX3_RX2                           111
+#define IMX8QM_ESAI0_TX4_RX1                           112
+#define IMX8QM_ESAI0_TX5_RX0                           113
+#define IMX8QM_MCLK_IN0                                        114
+#define IMX8QM_MCLK_OUT0                               115
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_GPIORHC           116
+#define IMX8QM_SPI0_SCK                                        117
+#define IMX8QM_SPI0_SDO                                        118
+#define IMX8QM_SPI0_SDI                                        119
+#define IMX8QM_SPI0_CS0                                        120
+#define IMX8QM_SPI0_CS1                                        121
+#define IMX8QM_SPI2_SCK                                        122
+#define IMX8QM_SPI2_SDO                                        123
+#define IMX8QM_SPI2_SDI                                        124
+#define IMX8QM_SPI2_CS0                                        125
+#define IMX8QM_SPI2_CS1                                        126
+#define IMX8QM_SAI1_RXC                                        127
+#define IMX8QM_SAI1_RXD                                        128
+#define IMX8QM_SAI1_RXFS                               129
+#define IMX8QM_SAI1_TXC                                        130
+#define IMX8QM_SAI1_TXD                                        131
+#define IMX8QM_SAI1_TXFS                               132
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_GPIORHT           133
+#define IMX8QM_ADC_IN7                                 134
+#define IMX8QM_ADC_IN6                                 135
+#define IMX8QM_ADC_IN5                                 136
+#define IMX8QM_ADC_IN4                                 137
+#define IMX8QM_ADC_IN3                                 138
+#define IMX8QM_ADC_IN2                                 139
+#define IMX8QM_ADC_IN1                                 140
+#define IMX8QM_ADC_IN0                                 141
+#define IMX8QM_MLB_SIG                                 142
+#define IMX8QM_MLB_CLK                                 143
+#define IMX8QM_MLB_DATA                                        144
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_GPIOLHT           145
+#define IMX8QM_FLEXCAN0_RX                             146
+#define IMX8QM_FLEXCAN0_TX                             147
+#define IMX8QM_FLEXCAN1_RX                             148
+#define IMX8QM_FLEXCAN1_TX                             149
+#define IMX8QM_FLEXCAN2_RX                             150
+#define IMX8QM_FLEXCAN2_TX                             151
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_GPIOTHR           152
+#define IMX8QM_USB_SS3_TC0                             153
+#define IMX8QM_USB_SS3_TC1                             154
+#define IMX8QM_USB_SS3_TC2                             155
+#define IMX8QM_USB_SS3_TC3                             156
+#define IMX8QM_COMP_CTL_GPIO_3V3_USB3IO                        157
+#define IMX8QM_USDHC1_RESET_B                          158
+#define IMX8QM_USDHC1_VSELECT                          159
+#define IMX8QM_USDHC2_RESET_B                          160
+#define IMX8QM_USDHC2_VSELECT                          161
+#define IMX8QM_USDHC2_WP                               162
+#define IMX8QM_USDHC2_CD_B                             163
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_VSELSEP           164
+#define IMX8QM_ENET0_MDIO                              165
+#define IMX8QM_ENET0_MDC                               166
+#define IMX8QM_ENET0_REFCLK_125M_25M                   167
+#define IMX8QM_ENET1_REFCLK_125M_25M                   168
+#define IMX8QM_ENET1_MDIO                              169
+#define IMX8QM_ENET1_MDC                               170
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_GPIOCT            171
+#define IMX8QM_QSPI1A_SS0_B                            172
+#define IMX8QM_QSPI1A_SS1_B                            173
+#define IMX8QM_QSPI1A_SCLK                             174
+#define IMX8QM_QSPI1A_DQS                              175
+#define IMX8QM_QSPI1A_DATA3                            176
+#define IMX8QM_QSPI1A_DATA2                            177
+#define IMX8QM_QSPI1A_DATA1                            178
+#define IMX8QM_QSPI1A_DATA0                            179
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_QSPI1             180
+#define IMX8QM_QSPI0A_DATA0                            181
+#define IMX8QM_QSPI0A_DATA1                            182
+#define IMX8QM_QSPI0A_DATA2                            183
+#define IMX8QM_QSPI0A_DATA3                            184
+#define IMX8QM_QSPI0A_DQS                              185
+#define IMX8QM_QSPI0A_SS0_B                            186
+#define IMX8QM_QSPI0A_SS1_B                            187
+#define IMX8QM_QSPI0A_SCLK                             188
+#define IMX8QM_QSPI0B_SCLK                             189
+#define IMX8QM_QSPI0B_DATA0                            190
+#define IMX8QM_QSPI0B_DATA1                            191
+#define IMX8QM_QSPI0B_DATA2                            192
+#define IMX8QM_QSPI0B_DATA3                            193
+#define IMX8QM_QSPI0B_DQS                              194
+#define IMX8QM_QSPI0B_SS0_B                            195
+#define IMX8QM_QSPI0B_SS1_B                            196
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_QSPI0             197
+#define IMX8QM_PCIE_CTRL0_CLKREQ_B                     198
+#define IMX8QM_PCIE_CTRL0_WAKE_B                       199
+#define IMX8QM_PCIE_CTRL0_PERST_B                      200
+#define IMX8QM_PCIE_CTRL1_CLKREQ_B                     201
+#define IMX8QM_PCIE_CTRL1_WAKE_B                       202
+#define IMX8QM_PCIE_CTRL1_PERST_B                      203
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_PCIESEP           204
+#define IMX8QM_USB_HSIC0_DATA                          205
+#define IMX8QM_USB_HSIC0_STROBE                                206
+#define IMX8QM_CALIBRATION_0_HSIC                      207
+#define IMX8QM_CALIBRATION_1_HSIC                      208
+#define IMX8QM_EMMC0_CLK                               209
+#define IMX8QM_EMMC0_CMD                               210
+#define IMX8QM_EMMC0_DATA0                             211
+#define IMX8QM_EMMC0_DATA1                             212
+#define IMX8QM_EMMC0_DATA2                             213
+#define IMX8QM_EMMC0_DATA3                             214
+#define IMX8QM_EMMC0_DATA4                             215
+#define IMX8QM_EMMC0_DATA5                             216
+#define IMX8QM_EMMC0_DATA6                             217
+#define IMX8QM_EMMC0_DATA7                             218
+#define IMX8QM_EMMC0_STROBE                            219
+#define IMX8QM_EMMC0_RESET_B                           220
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_SD1FIX            221
+#define IMX8QM_USDHC1_CLK                              222
+#define IMX8QM_USDHC1_CMD                              223
+#define IMX8QM_USDHC1_DATA0                            224
+#define IMX8QM_USDHC1_DATA1                            225
+#define IMX8QM_CTL_NAND_RE_P_N                         226
+#define IMX8QM_USDHC1_DATA2                            227
+#define IMX8QM_USDHC1_DATA3                            228
+#define IMX8QM_CTL_NAND_DQS_P_N                                229
+#define IMX8QM_USDHC1_DATA4                            230
+#define IMX8QM_USDHC1_DATA5                            231
+#define IMX8QM_USDHC1_DATA6                            232
+#define IMX8QM_USDHC1_DATA7                            233
+#define IMX8QM_USDHC1_STROBE                           234
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_VSEL2             235
+#define IMX8QM_USDHC2_CLK                              236
+#define IMX8QM_USDHC2_CMD                              237
+#define IMX8QM_USDHC2_DATA0                            238
+#define IMX8QM_USDHC2_DATA1                            239
+#define IMX8QM_USDHC2_DATA2                            240
+#define IMX8QM_USDHC2_DATA3                            241
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_VSEL3             242
+#define IMX8QM_ENET0_RGMII_TXC                         243
+#define IMX8QM_ENET0_RGMII_TX_CTL                      244
+#define IMX8QM_ENET0_RGMII_TXD0                                245
+#define IMX8QM_ENET0_RGMII_TXD1                                246
+#define IMX8QM_ENET0_RGMII_TXD2                                247
+#define IMX8QM_ENET0_RGMII_TXD3                                248
+#define IMX8QM_ENET0_RGMII_RXC                         249
+#define IMX8QM_ENET0_RGMII_RX_CTL                      250
+#define IMX8QM_ENET0_RGMII_RXD0                                251
+#define IMX8QM_ENET0_RGMII_RXD1                                252
+#define IMX8QM_ENET0_RGMII_RXD2                                253
+#define IMX8QM_ENET0_RGMII_RXD3                                254
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB                255
+#define IMX8QM_ENET1_RGMII_TXC                         256
+#define IMX8QM_ENET1_RGMII_TX_CTL                      257
+#define IMX8QM_ENET1_RGMII_TXD0                                258
+#define IMX8QM_ENET1_RGMII_TXD1                                259
+#define IMX8QM_ENET1_RGMII_TXD2                                260
+#define IMX8QM_ENET1_RGMII_TXD3                                261
+#define IMX8QM_ENET1_RGMII_RXC                         262
+#define IMX8QM_ENET1_RGMII_RX_CTL                      263
+#define IMX8QM_ENET1_RGMII_RXD0                                264
+#define IMX8QM_ENET1_RGMII_RXD1                                265
+#define IMX8QM_ENET1_RGMII_RXD2                                266
+#define IMX8QM_ENET1_RGMII_RXD3                                267
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_ENET_ENETA                268
+
+/*
+ * format: <pin_id mux_mode>
+ */
+#define IMX8QM_SIM0_CLK_DMA_SIM0_CLK                           IMX8QM_SIM0_CLK                 0
+#define IMX8QM_SIM0_CLK_LSIO_GPIO0_IO00                                IMX8QM_SIM0_CLK                 3
+#define IMX8QM_SIM0_RST_DMA_SIM0_RST                           IMX8QM_SIM0_RST                 0
+#define IMX8QM_SIM0_RST_LSIO_GPIO0_IO01                                IMX8QM_SIM0_RST                 3
+#define IMX8QM_SIM0_IO_DMA_SIM0_IO                             IMX8QM_SIM0_IO                  0
+#define IMX8QM_SIM0_IO_LSIO_GPIO0_IO02                         IMX8QM_SIM0_IO                  3
+#define IMX8QM_SIM0_PD_DMA_SIM0_PD                             IMX8QM_SIM0_PD                  0
+#define IMX8QM_SIM0_PD_DMA_I2C3_SCL                            IMX8QM_SIM0_PD                  1
+#define IMX8QM_SIM0_PD_LSIO_GPIO0_IO03                         IMX8QM_SIM0_PD                  3
+#define IMX8QM_SIM0_POWER_EN_DMA_SIM0_POWER_EN                 IMX8QM_SIM0_POWER_EN            0
+#define IMX8QM_SIM0_POWER_EN_DMA_I2C3_SDA                      IMX8QM_SIM0_POWER_EN            1
+#define IMX8QM_SIM0_POWER_EN_LSIO_GPIO0_IO04                   IMX8QM_SIM0_POWER_EN            3
+#define IMX8QM_SIM0_GPIO0_00_DMA_SIM0_POWER_EN                 IMX8QM_SIM0_GPIO0_00            0
+#define IMX8QM_SIM0_GPIO0_00_LSIO_GPIO0_IO05                   IMX8QM_SIM0_GPIO0_00            3
+#define IMX8QM_M40_I2C0_SCL_M40_I2C0_SCL                       IMX8QM_M40_I2C0_SCL             0
+#define IMX8QM_M40_I2C0_SCL_M40_UART0_RX                       IMX8QM_M40_I2C0_SCL             1
+#define IMX8QM_M40_I2C0_SCL_M40_GPIO0_IO02                     IMX8QM_M40_I2C0_SCL             2
+#define IMX8QM_M40_I2C0_SCL_LSIO_GPIO0_IO06                    IMX8QM_M40_I2C0_SCL             3
+#define IMX8QM_M40_I2C0_SDA_M40_I2C0_SDA                       IMX8QM_M40_I2C0_SDA             0
+#define IMX8QM_M40_I2C0_SDA_M40_UART0_TX                       IMX8QM_M40_I2C0_SDA             1
+#define IMX8QM_M40_I2C0_SDA_M40_GPIO0_IO03                     IMX8QM_M40_I2C0_SDA             2
+#define IMX8QM_M40_I2C0_SDA_LSIO_GPIO0_IO07                    IMX8QM_M40_I2C0_SDA             3
+#define IMX8QM_M40_GPIO0_00_M40_GPIO0_IO00                     IMX8QM_M40_GPIO0_00             0
+#define IMX8QM_M40_GPIO0_00_M40_TPM0_CH0                       IMX8QM_M40_GPIO0_00             1
+#define IMX8QM_M40_GPIO0_00_DMA_UART4_RX                       IMX8QM_M40_GPIO0_00             2
+#define IMX8QM_M40_GPIO0_00_LSIO_GPIO0_IO08                    IMX8QM_M40_GPIO0_00             3
+#define IMX8QM_M40_GPIO0_01_M40_GPIO0_IO01                     IMX8QM_M40_GPIO0_01             0
+#define IMX8QM_M40_GPIO0_01_M40_TPM0_CH1                       IMX8QM_M40_GPIO0_01             1
+#define IMX8QM_M40_GPIO0_01_DMA_UART4_TX                       IMX8QM_M40_GPIO0_01             2
+#define IMX8QM_M40_GPIO0_01_LSIO_GPIO0_IO09                    IMX8QM_M40_GPIO0_01             3
+#define IMX8QM_M41_I2C0_SCL_M41_I2C0_SCL                       IMX8QM_M41_I2C0_SCL             0
+#define IMX8QM_M41_I2C0_SCL_M41_UART0_RX                       IMX8QM_M41_I2C0_SCL             1
+#define IMX8QM_M41_I2C0_SCL_M41_GPIO0_IO02                     IMX8QM_M41_I2C0_SCL             2
+#define IMX8QM_M41_I2C0_SCL_LSIO_GPIO0_IO10                    IMX8QM_M41_I2C0_SCL             3
+#define IMX8QM_M41_I2C0_SDA_M41_I2C0_SDA                       IMX8QM_M41_I2C0_SDA             0
+#define IMX8QM_M41_I2C0_SDA_M41_UART0_TX                       IMX8QM_M41_I2C0_SDA             1
+#define IMX8QM_M41_I2C0_SDA_M41_GPIO0_IO03                     IMX8QM_M41_I2C0_SDA             2
+#define IMX8QM_M41_I2C0_SDA_LSIO_GPIO0_IO11                    IMX8QM_M41_I2C0_SDA             3
+#define IMX8QM_M41_GPIO0_00_M41_GPIO0_IO00                     IMX8QM_M41_GPIO0_00             0
+#define IMX8QM_M41_GPIO0_00_M41_TPM0_CH0                       IMX8QM_M41_GPIO0_00             1
+#define IMX8QM_M41_GPIO0_00_DMA_UART3_RX                       IMX8QM_M41_GPIO0_00             2
+#define IMX8QM_M41_GPIO0_00_LSIO_GPIO0_IO12                    IMX8QM_M41_GPIO0_00             3
+#define IMX8QM_M41_GPIO0_01_M41_GPIO0_IO01                     IMX8QM_M41_GPIO0_01             0
+#define IMX8QM_M41_GPIO0_01_M41_TPM0_CH1                       IMX8QM_M41_GPIO0_01             1
+#define IMX8QM_M41_GPIO0_01_DMA_UART3_TX                       IMX8QM_M41_GPIO0_01             2
+#define IMX8QM_M41_GPIO0_01_LSIO_GPIO0_IO13                    IMX8QM_M41_GPIO0_01             3
+#define IMX8QM_GPT0_CLK_LSIO_GPT0_CLK                          IMX8QM_GPT0_CLK                 0
+#define IMX8QM_GPT0_CLK_DMA_I2C1_SCL                           IMX8QM_GPT0_CLK                 1
+#define IMX8QM_GPT0_CLK_LSIO_KPP0_COL4                         IMX8QM_GPT0_CLK                 2
+#define IMX8QM_GPT0_CLK_LSIO_GPIO0_IO14                                IMX8QM_GPT0_CLK                 3
+#define IMX8QM_GPT0_CAPTURE_LSIO_GPT0_CAPTURE                  IMX8QM_GPT0_CAPTURE             0
+#define IMX8QM_GPT0_CAPTURE_DMA_I2C1_SDA                       IMX8QM_GPT0_CAPTURE             1
+#define IMX8QM_GPT0_CAPTURE_LSIO_KPP0_COL5                     IMX8QM_GPT0_CAPTURE             2
+#define IMX8QM_GPT0_CAPTURE_LSIO_GPIO0_IO15                    IMX8QM_GPT0_CAPTURE             3
+#define IMX8QM_GPT0_COMPARE_LSIO_GPT0_COMPARE                  IMX8QM_GPT0_COMPARE             0
+#define IMX8QM_GPT0_COMPARE_LSIO_PWM3_OUT                      IMX8QM_GPT0_COMPARE             1
+#define IMX8QM_GPT0_COMPARE_LSIO_KPP0_COL6                     IMX8QM_GPT0_COMPARE             2
+#define IMX8QM_GPT0_COMPARE_LSIO_GPIO0_IO16                    IMX8QM_GPT0_COMPARE             3
+#define IMX8QM_GPT1_CLK_LSIO_GPT1_CLK                          IMX8QM_GPT1_CLK                 0
+#define IMX8QM_GPT1_CLK_DMA_I2C2_SCL                           IMX8QM_GPT1_CLK                 1
+#define IMX8QM_GPT1_CLK_LSIO_KPP0_COL7                         IMX8QM_GPT1_CLK                 2
+#define IMX8QM_GPT1_CLK_LSIO_GPIO0_IO17                                IMX8QM_GPT1_CLK                 3
+#define IMX8QM_GPT1_CAPTURE_LSIO_GPT1_CAPTURE                  IMX8QM_GPT1_CAPTURE             0
+#define IMX8QM_GPT1_CAPTURE_DMA_I2C2_SDA                       IMX8QM_GPT1_CAPTURE             1
+#define IMX8QM_GPT1_CAPTURE_LSIO_KPP0_ROW4                     IMX8QM_GPT1_CAPTURE             2
+#define IMX8QM_GPT1_CAPTURE_LSIO_GPIO0_IO18                    IMX8QM_GPT1_CAPTURE             3
+#define IMX8QM_GPT1_COMPARE_LSIO_GPT1_COMPARE                  IMX8QM_GPT1_COMPARE             0
+#define IMX8QM_GPT1_COMPARE_LSIO_PWM2_OUT                      IMX8QM_GPT1_COMPARE             1
+#define IMX8QM_GPT1_COMPARE_LSIO_KPP0_ROW5                     IMX8QM_GPT1_COMPARE             2
+#define IMX8QM_GPT1_COMPARE_LSIO_GPIO0_IO19                    IMX8QM_GPT1_COMPARE             3
+#define IMX8QM_UART0_RX_DMA_UART0_RX                           IMX8QM_UART0_RX                 0
+#define IMX8QM_UART0_RX_SCU_UART0_RX                           IMX8QM_UART0_RX                 1
+#define IMX8QM_UART0_RX_LSIO_GPIO0_IO20                                IMX8QM_UART0_RX                 3
+#define IMX8QM_UART0_TX_DMA_UART0_TX                           IMX8QM_UART0_TX                 0
+#define IMX8QM_UART0_TX_SCU_UART0_TX                           IMX8QM_UART0_TX                 1
+#define IMX8QM_UART0_TX_LSIO_GPIO0_IO21                                IMX8QM_UART0_TX                 3
+#define IMX8QM_UART0_RTS_B_DMA_UART0_RTS_B                     IMX8QM_UART0_RTS_B              0
+#define IMX8QM_UART0_RTS_B_LSIO_PWM0_OUT                       IMX8QM_UART0_RTS_B              1
+#define IMX8QM_UART0_RTS_B_DMA_UART2_RX                                IMX8QM_UART0_RTS_B              2
+#define IMX8QM_UART0_RTS_B_LSIO_GPIO0_IO22                     IMX8QM_UART0_RTS_B              3
+#define IMX8QM_UART0_CTS_B_DMA_UART0_CTS_B                     IMX8QM_UART0_CTS_B              0
+#define IMX8QM_UART0_CTS_B_LSIO_PWM1_OUT                       IMX8QM_UART0_CTS_B              1
+#define IMX8QM_UART0_CTS_B_DMA_UART2_TX                                IMX8QM_UART0_CTS_B              2
+#define IMX8QM_UART0_CTS_B_LSIO_GPIO0_IO23                     IMX8QM_UART0_CTS_B              3
+#define IMX8QM_UART1_TX_DMA_UART1_TX                           IMX8QM_UART1_TX                 0
+#define IMX8QM_UART1_TX_DMA_SPI3_SCK                           IMX8QM_UART1_TX                 1
+#define IMX8QM_UART1_TX_LSIO_GPIO0_IO24                                IMX8QM_UART1_TX                 3
+#define IMX8QM_UART1_RX_DMA_UART1_RX                           IMX8QM_UART1_RX                 0
+#define IMX8QM_UART1_RX_DMA_SPI3_SDO                           IMX8QM_UART1_RX                 1
+#define IMX8QM_UART1_RX_LSIO_GPIO0_IO25                                IMX8QM_UART1_RX                 3
+#define IMX8QM_UART1_RTS_B_DMA_UART1_RTS_B                     IMX8QM_UART1_RTS_B              0
+#define IMX8QM_UART1_RTS_B_DMA_SPI3_SDI                                IMX8QM_UART1_RTS_B              1
+#define IMX8QM_UART1_RTS_B_DMA_UART1_CTS_B                     IMX8QM_UART1_RTS_B              2
+#define IMX8QM_UART1_RTS_B_LSIO_GPIO0_IO26                     IMX8QM_UART1_RTS_B              3
+#define IMX8QM_UART1_CTS_B_DMA_UART1_CTS_B                     IMX8QM_UART1_CTS_B              0
+#define IMX8QM_UART1_CTS_B_DMA_SPI3_CS0                                IMX8QM_UART1_CTS_B              1
+#define IMX8QM_UART1_CTS_B_DMA_UART1_RTS_B                     IMX8QM_UART1_CTS_B              2
+#define IMX8QM_UART1_CTS_B_LSIO_GPIO0_IO27                     IMX8QM_UART1_CTS_B              3
+#define IMX8QM_SCU_PMIC_MEMC_ON_SCU_GPIO0_IOXX_PMIC_MEMC_ON    IMX8QM_SCU_PMIC_MEMC_ON         0
+#define IMX8QM_SCU_WDOG_OUT_SCU_WDOG0_WDOG_OUT                 IMX8QM_SCU_WDOG_OUT             0
+#define IMX8QM_PMIC_I2C_SDA_SCU_PMIC_I2C_SDA                   IMX8QM_PMIC_I2C_SDA             0
+#define IMX8QM_PMIC_I2C_SCL_SCU_PMIC_I2C_SCL                   IMX8QM_PMIC_I2C_SCL             0
+#define IMX8QM_PMIC_EARLY_WARNING_SCU_PMIC_EARLY_WARNING       IMX8QM_PMIC_EARLY_WARNING       0
+#define IMX8QM_PMIC_INT_B_SCU_DIMX8QMMIC_INT_B                 IMX8QM_PMIC_INT_B               0
+#define IMX8QM_SCU_GPIO0_00_SCU_GPIO0_IO00                     IMX8QM_SCU_GPIO0_00             0
+#define IMX8QM_SCU_GPIO0_00_SCU_UART0_RX                       IMX8QM_SCU_GPIO0_00             1
+#define IMX8QM_SCU_GPIO0_00_LSIO_GPIO0_IO28                    IMX8QM_SCU_GPIO0_00             3
+#define IMX8QM_SCU_GPIO0_01_SCU_GPIO0_IO01                     IMX8QM_SCU_GPIO0_01             0
+#define IMX8QM_SCU_GPIO0_01_SCU_UART0_TX                       IMX8QM_SCU_GPIO0_01             1
+#define IMX8QM_SCU_GPIO0_01_LSIO_GPIO0_IO29                    IMX8QM_SCU_GPIO0_01             3
+#define IMX8QM_SCU_GPIO0_02_SCU_GPIO0_IO02                     IMX8QM_SCU_GPIO0_02             0
+#define IMX8QM_SCU_GPIO0_02_SCU_GPIO0_IOXX_PMIC_GPU0_ON                IMX8QM_SCU_GPIO0_02             1
+#define IMX8QM_SCU_GPIO0_02_LSIO_GPIO0_IO30                    IMX8QM_SCU_GPIO0_02             3
+#define IMX8QM_SCU_GPIO0_03_SCU_GPIO0_IO03                     IMX8QM_SCU_GPIO0_03             0
+#define IMX8QM_SCU_GPIO0_03_SCU_GPIO0_IOXX_PMIC_GPU1_ON                IMX8QM_SCU_GPIO0_03             1
+#define IMX8QM_SCU_GPIO0_03_LSIO_GPIO0_IO31                    IMX8QM_SCU_GPIO0_03             3
+#define IMX8QM_SCU_GPIO0_04_SCU_GPIO0_IO04                     IMX8QM_SCU_GPIO0_04             0
+#define IMX8QM_SCU_GPIO0_04_SCU_GPIO0_IOXX_PMIC_A72_ON         IMX8QM_SCU_GPIO0_04             1
+#define IMX8QM_SCU_GPIO0_04_LSIO_GPIO1_IO00                    IMX8QM_SCU_GPIO0_04             3
+#define IMX8QM_SCU_GPIO0_05_SCU_GPIO0_IO05                     IMX8QM_SCU_GPIO0_05             0
+#define IMX8QM_SCU_GPIO0_05_SCU_GPIO0_IOXX_PMIC_A53_ON         IMX8QM_SCU_GPIO0_05             1
+#define IMX8QM_SCU_GPIO0_05_LSIO_GPIO1_IO01                    IMX8QM_SCU_GPIO0_05             3
+#define IMX8QM_SCU_GPIO0_06_SCU_GPIO0_IO06                     IMX8QM_SCU_GPIO0_06             0
+#define IMX8QM_SCU_GPIO0_06_SCU_TPM0_CH0                       IMX8QM_SCU_GPIO0_06             1
+#define IMX8QM_SCU_GPIO0_06_LSIO_GPIO1_IO02                    IMX8QM_SCU_GPIO0_06             3
+#define IMX8QM_SCU_GPIO0_07_SCU_GPIO0_IO07                     IMX8QM_SCU_GPIO0_07             0
+#define IMX8QM_SCU_GPIO0_07_SCU_TPM0_CH1                       IMX8QM_SCU_GPIO0_07             1
+#define IMX8QM_SCU_GPIO0_07_SCU_DSC_RTC_CLOCK_OUTPUT_32K       IMX8QM_SCU_GPIO0_07             2
+#define IMX8QM_SCU_GPIO0_07_LSIO_GPIO1_IO03                    IMX8QM_SCU_GPIO0_07             3
+#define IMX8QM_SCU_BOOT_MODE0_SCU_DSC_BOOT_MODE0               IMX8QM_SCU_BOOT_MODE0           0
+#define IMX8QM_SCU_BOOT_MODE1_SCU_DSC_BOOT_MODE1               IMX8QM_SCU_BOOT_MODE1           0
+#define IMX8QM_SCU_BOOT_MODE2_SCU_DSC_BOOT_MODE2               IMX8QM_SCU_BOOT_MODE2           0
+#define IMX8QM_SCU_BOOT_MODE3_SCU_DSC_BOOT_MODE3               IMX8QM_SCU_BOOT_MODE3           0
+#define IMX8QM_SCU_BOOT_MODE4_SCU_DSC_BOOT_MODE4               IMX8QM_SCU_BOOT_MODE4           0
+#define IMX8QM_SCU_BOOT_MODE4_SCU_PMIC_I2C_SCL                 IMX8QM_SCU_BOOT_MODE4           1
+#define IMX8QM_SCU_BOOT_MODE5_SCU_DSC_BOOT_MODE5               IMX8QM_SCU_BOOT_MODE5           0
+#define IMX8QM_SCU_BOOT_MODE5_SCU_PMIC_I2C_SDA                 IMX8QM_SCU_BOOT_MODE5           1
+#define IMX8QM_LVDS0_GPIO00_LVDS0_GPIO0_IO00                   IMX8QM_LVDS0_GPIO00             0
+#define IMX8QM_LVDS0_GPIO00_LVDS0_PWM0_OUT                     IMX8QM_LVDS0_GPIO00             1
+#define IMX8QM_LVDS0_GPIO00_LSIO_GPIO1_IO04                    IMX8QM_LVDS0_GPIO00             3
+#define IMX8QM_LVDS0_GPIO01_LVDS0_GPIO0_IO01                   IMX8QM_LVDS0_GPIO01             0
+#define IMX8QM_LVDS0_GPIO01_LSIO_GPIO1_IO05                    IMX8QM_LVDS0_GPIO01             3
+#define IMX8QM_LVDS0_I2C0_SCL_LVDS0_I2C0_SCL                   IMX8QM_LVDS0_I2C0_SCL           0
+#define IMX8QM_LVDS0_I2C0_SCL_LVDS0_GPIO0_IO02                 IMX8QM_LVDS0_I2C0_SCL           1
+#define IMX8QM_LVDS0_I2C0_SCL_LSIO_GPIO1_IO06                  IMX8QM_LVDS0_I2C0_SCL           3
+#define IMX8QM_LVDS0_I2C0_SDA_LVDS0_I2C0_SDA                   IMX8QM_LVDS0_I2C0_SDA           0
+#define IMX8QM_LVDS0_I2C0_SDA_LVDS0_GPIO0_IO03                 IMX8QM_LVDS0_I2C0_SDA           1
+#define IMX8QM_LVDS0_I2C0_SDA_LSIO_GPIO1_IO07                  IMX8QM_LVDS0_I2C0_SDA           3
+#define IMX8QM_LVDS0_I2C1_SCL_LVDS0_I2C1_SCL                   IMX8QM_LVDS0_I2C1_SCL           0
+#define IMX8QM_LVDS0_I2C1_SCL_DMA_UART2_TX                     IMX8QM_LVDS0_I2C1_SCL           1
+#define IMX8QM_LVDS0_I2C1_SCL_LSIO_GPIO1_IO08                  IMX8QM_LVDS0_I2C1_SCL           3
+#define IMX8QM_LVDS0_I2C1_SDA_LVDS0_I2C1_SDA                   IMX8QM_LVDS0_I2C1_SDA           0
+#define IMX8QM_LVDS0_I2C1_SDA_DMA_UART2_RX                     IMX8QM_LVDS0_I2C1_SDA           1
+#define IMX8QM_LVDS0_I2C1_SDA_LSIO_GPIO1_IO09                  IMX8QM_LVDS0_I2C1_SDA           3
+#define IMX8QM_LVDS1_GPIO00_LVDS1_GPIO0_IO00                   IMX8QM_LVDS1_GPIO00             0
+#define IMX8QM_LVDS1_GPIO00_LVDS1_PWM0_OUT                     IMX8QM_LVDS1_GPIO00             1
+#define IMX8QM_LVDS1_GPIO00_LSIO_GPIO1_IO10                    IMX8QM_LVDS1_GPIO00             3
+#define IMX8QM_LVDS1_GPIO01_LVDS1_GPIO0_IO01                   IMX8QM_LVDS1_GPIO01             0
+#define IMX8QM_LVDS1_GPIO01_LSIO_GPIO1_IO11                    IMX8QM_LVDS1_GPIO01             3
+#define IMX8QM_LVDS1_I2C0_SCL_LVDS1_I2C0_SCL                   IMX8QM_LVDS1_I2C0_SCL           0
+#define IMX8QM_LVDS1_I2C0_SCL_LVDS1_GPIO0_IO02                 IMX8QM_LVDS1_I2C0_SCL           1
+#define IMX8QM_LVDS1_I2C0_SCL_LSIO_GPIO1_IO12                  IMX8QM_LVDS1_I2C0_SCL           3
+#define IMX8QM_LVDS1_I2C0_SDA_LVDS1_I2C0_SDA                   IMX8QM_LVDS1_I2C0_SDA           0
+#define IMX8QM_LVDS1_I2C0_SDA_LVDS1_GPIO0_IO03                 IMX8QM_LVDS1_I2C0_SDA           1
+#define IMX8QM_LVDS1_I2C0_SDA_LSIO_GPIO1_IO13                  IMX8QM_LVDS1_I2C0_SDA           3
+#define IMX8QM_LVDS1_I2C1_SCL_LVDS1_I2C1_SCL                   IMX8QM_LVDS1_I2C1_SCL           0
+#define IMX8QM_LVDS1_I2C1_SCL_DMA_UART3_TX                     IMX8QM_LVDS1_I2C1_SCL           1
+#define IMX8QM_LVDS1_I2C1_SCL_LSIO_GPIO1_IO14                  IMX8QM_LVDS1_I2C1_SCL           3
+#define IMX8QM_LVDS1_I2C1_SDA_LVDS1_I2C1_SDA                   IMX8QM_LVDS1_I2C1_SDA           0
+#define IMX8QM_LVDS1_I2C1_SDA_DMA_UART3_RX                     IMX8QM_LVDS1_I2C1_SDA           1
+#define IMX8QM_LVDS1_I2C1_SDA_LSIO_GPIO1_IO15                  IMX8QM_LVDS1_I2C1_SDA           3
+#define IMX8QM_MIPI_DSI0_I2C0_SCL_MIPI_DSI0_I2C0_SCL           IMX8QM_MIPI_DSI0_I2C0_SCL       0
+#define IMX8QM_MIPI_DSI0_I2C0_SCL_LSIO_GPIO1_IO16              IMX8QM_MIPI_DSI0_I2C0_SCL       3
+#define IMX8QM_MIPI_DSI0_I2C0_SDA_MIPI_DSI0_I2C0_SDA           IMX8QM_MIPI_DSI0_I2C0_SDA       0
+#define IMX8QM_MIPI_DSI0_I2C0_SDA_LSIO_GPIO1_IO17              IMX8QM_MIPI_DSI0_I2C0_SDA       3
+#define IMX8QM_MIPI_DSI0_GPIO0_00_MIPI_DSI0_GPIO0_IO00         IMX8QM_MIPI_DSI0_GPIO0_00       0
+#define IMX8QM_MIPI_DSI0_GPIO0_00_MIPI_DSI0_PWM0_OUT           IMX8QM_MIPI_DSI0_GPIO0_00       1
+#define IMX8QM_MIPI_DSI0_GPIO0_00_LSIO_GPIO1_IO18              IMX8QM_MIPI_DSI0_GPIO0_00       3
+#define IMX8QM_MIPI_DSI0_GPIO0_01_MIPI_DSI0_GPIO0_IO01         IMX8QM_MIPI_DSI0_GPIO0_01       0
+#define IMX8QM_MIPI_DSI0_GPIO0_01_LSIO_GPIO1_IO19              IMX8QM_MIPI_DSI0_GPIO0_01       3
+#define IMX8QM_MIPI_DSI1_I2C0_SCL_MIPI_DSI1_I2C0_SCL           IMX8QM_MIPI_DSI1_I2C0_SCL       0
+#define IMX8QM_MIPI_DSI1_I2C0_SCL_LSIO_GPIO1_IO20              IMX8QM_MIPI_DSI1_I2C0_SCL       3
+#define IMX8QM_MIPI_DSI1_I2C0_SDA_MIPI_DSI1_I2C0_SDA           IMX8QM_MIPI_DSI1_I2C0_SDA       0
+#define IMX8QM_MIPI_DSI1_I2C0_SDA_LSIO_GPIO1_IO21              IMX8QM_MIPI_DSI1_I2C0_SDA       3
+#define IMX8QM_MIPI_DSI1_GPIO0_00_MIPI_DSI1_GPIO0_IO00         IMX8QM_MIPI_DSI1_GPIO0_00       0
+#define IMX8QM_MIPI_DSI1_GPIO0_00_MIPI_DSI1_PWM0_OUT           IMX8QM_MIPI_DSI1_GPIO0_00       1
+#define IMX8QM_MIPI_DSI1_GPIO0_00_LSIO_GPIO1_IO22              IMX8QM_MIPI_DSI1_GPIO0_00       3
+#define IMX8QM_MIPI_DSI1_GPIO0_01_MIPI_DSI1_GPIO0_IO01         IMX8QM_MIPI_DSI1_GPIO0_01       0
+#define IMX8QM_MIPI_DSI1_GPIO0_01_LSIO_GPIO1_IO23              IMX8QM_MIPI_DSI1_GPIO0_01       3
+#define IMX8QM_MIPI_CSI0_MCLK_OUT_MIPI_CSI0_ACM_MCLK_OUT       IMX8QM_MIPI_CSI0_MCLK_OUT       0
+#define IMX8QM_MIPI_CSI0_MCLK_OUT_LSIO_GPIO1_IO24              IMX8QM_MIPI_CSI0_MCLK_OUT       3
+#define IMX8QM_MIPI_CSI0_I2C0_SCL_MIPI_CSI0_I2C0_SCL           IMX8QM_MIPI_CSI0_I2C0_SCL       0
+#define IMX8QM_MIPI_CSI0_I2C0_SCL_LSIO_GPIO1_IO25              IMX8QM_MIPI_CSI0_I2C0_SCL       3
+#define IMX8QM_MIPI_CSI0_I2C0_SDA_MIPI_CSI0_I2C0_SDA           IMX8QM_MIPI_CSI0_I2C0_SDA       0
+#define IMX8QM_MIPI_CSI0_I2C0_SDA_LSIO_GPIO1_IO26              IMX8QM_MIPI_CSI0_I2C0_SDA       3
+#define IMX8QM_MIPI_CSI0_GPIO0_00_MIPI_CSI0_GPIO0_IO00         IMX8QM_MIPI_CSI0_GPIO0_00       0
+#define IMX8QM_MIPI_CSI0_GPIO0_00_DMA_I2C0_SCL                 IMX8QM_MIPI_CSI0_GPIO0_00       1
+#define IMX8QM_MIPI_CSI0_GPIO0_00_MIPI_CSI1_I2C0_SCL           IMX8QM_MIPI_CSI0_GPIO0_00       2
+#define IMX8QM_MIPI_CSI0_GPIO0_00_LSIO_GPIO1_IO27              IMX8QM_MIPI_CSI0_GPIO0_00       3
+#define IMX8QM_MIPI_CSI0_GPIO0_01_MIPI_CSI0_GPIO0_IO01         IMX8QM_MIPI_CSI0_GPIO0_01       0
+#define IMX8QM_MIPI_CSI0_GPIO0_01_DMA_I2C0_SDA                 IMX8QM_MIPI_CSI0_GPIO0_01       1
+#define IMX8QM_MIPI_CSI0_GPIO0_01_MIPI_CSI1_I2C0_SDA           IMX8QM_MIPI_CSI0_GPIO0_01       2
+#define IMX8QM_MIPI_CSI0_GPIO0_01_LSIO_GPIO1_IO28              IMX8QM_MIPI_CSI0_GPIO0_01       3
+#define IMX8QM_MIPI_CSI1_MCLK_OUT_MIPI_CSI1_ACM_MCLK_OUT       IMX8QM_MIPI_CSI1_MCLK_OUT       0
+#define IMX8QM_MIPI_CSI1_MCLK_OUT_LSIO_GPIO1_IO29              IMX8QM_MIPI_CSI1_MCLK_OUT       3
+#define IMX8QM_MIPI_CSI1_GPIO0_00_MIPI_CSI1_GPIO0_IO00         IMX8QM_MIPI_CSI1_GPIO0_00       0
+#define IMX8QM_MIPI_CSI1_GPIO0_00_DMA_UART4_RX                 IMX8QM_MIPI_CSI1_GPIO0_00       1
+#define IMX8QM_MIPI_CSI1_GPIO0_00_LSIO_GPIO1_IO30              IMX8QM_MIPI_CSI1_GPIO0_00       3
+#define IMX8QM_MIPI_CSI1_GPIO0_01_MIPI_CSI1_GPIO0_IO01         IMX8QM_MIPI_CSI1_GPIO0_01       0
+#define IMX8QM_MIPI_CSI1_GPIO0_01_DMA_UART4_TX                 IMX8QM_MIPI_CSI1_GPIO0_01       1
+#define IMX8QM_MIPI_CSI1_GPIO0_01_LSIO_GPIO1_IO31              IMX8QM_MIPI_CSI1_GPIO0_01       3
+#define IMX8QM_MIPI_CSI1_I2C0_SCL_MIPI_CSI1_I2C0_SCL           IMX8QM_MIPI_CSI1_I2C0_SCL       0
+#define IMX8QM_MIPI_CSI1_I2C0_SCL_LSIO_GPIO2_IO00              IMX8QM_MIPI_CSI1_I2C0_SCL       3
+#define IMX8QM_MIPI_CSI1_I2C0_SDA_MIPI_CSI1_I2C0_SDA           IMX8QM_MIPI_CSI1_I2C0_SDA       0
+#define IMX8QM_MIPI_CSI1_I2C0_SDA_LSIO_GPIO2_IO01              IMX8QM_MIPI_CSI1_I2C0_SDA       3
+#define IMX8QM_HDMI_TX0_TS_SCL_HDMI_TX0_I2C0_SCL               IMX8QM_HDMI_TX0_TS_SCL          0
+#define IMX8QM_HDMI_TX0_TS_SCL_DMA_I2C0_SCL                    IMX8QM_HDMI_TX0_TS_SCL          1
+#define IMX8QM_HDMI_TX0_TS_SCL_LSIO_GPIO2_IO02                 IMX8QM_HDMI_TX0_TS_SCL          3
+#define IMX8QM_HDMI_TX0_TS_SDA_HDMI_TX0_I2C0_SDA               IMX8QM_HDMI_TX0_TS_SDA          0
+#define IMX8QM_HDMI_TX0_TS_SDA_DMA_I2C0_SDA                    IMX8QM_HDMI_TX0_TS_SDA          1
+#define IMX8QM_HDMI_TX0_TS_SDA_LSIO_GPIO2_IO03                 IMX8QM_HDMI_TX0_TS_SDA          3
+#define IMX8QM_ESAI1_FSR_AUD_ESAI1_FSR                         IMX8QM_ESAI1_FSR                0
+#define IMX8QM_ESAI1_FSR_LSIO_GPIO2_IO04                       IMX8QM_ESAI1_FSR                3
+#define IMX8QM_ESAI1_FST_AUD_ESAI1_FST                         IMX8QM_ESAI1_FST                0
+#define IMX8QM_ESAI1_FST_AUD_SPDIF0_EXT_CLK                    IMX8QM_ESAI1_FST                1
+#define IMX8QM_ESAI1_FST_LSIO_GPIO2_IO05                       IMX8QM_ESAI1_FST                3
+#define IMX8QM_ESAI1_SCKR_AUD_ESAI1_SCKR                       IMX8QM_ESAI1_SCKR               0
+#define IMX8QM_ESAI1_SCKR_LSIO_GPIO2_IO06                      IMX8QM_ESAI1_SCKR               3
+#define IMX8QM_ESAI1_SCKT_AUD_ESAI1_SCKT                       IMX8QM_ESAI1_SCKT               0
+#define IMX8QM_ESAI1_SCKT_AUD_SAI2_RXC                         IMX8QM_ESAI1_SCKT               1
+#define IMX8QM_ESAI1_SCKT_AUD_SPDIF0_EXT_CLK                   IMX8QM_ESAI1_SCKT               2
+#define IMX8QM_ESAI1_SCKT_LSIO_GPIO2_IO07                      IMX8QM_ESAI1_SCKT               3
+#define IMX8QM_ESAI1_TX0_AUD_ESAI1_TX0                         IMX8QM_ESAI1_TX0                0
+#define IMX8QM_ESAI1_TX0_AUD_SAI2_RXD                          IMX8QM_ESAI1_TX0                1
+#define IMX8QM_ESAI1_TX0_AUD_SPDIF0_RX                         IMX8QM_ESAI1_TX0                2
+#define IMX8QM_ESAI1_TX0_LSIO_GPIO2_IO08                       IMX8QM_ESAI1_TX0                3
+#define IMX8QM_ESAI1_TX1_AUD_ESAI1_TX1                         IMX8QM_ESAI1_TX1                0
+#define IMX8QM_ESAI1_TX1_AUD_SAI2_RXFS                         IMX8QM_ESAI1_TX1                1
+#define IMX8QM_ESAI1_TX1_AUD_SPDIF0_TX                         IMX8QM_ESAI1_TX1                2
+#define IMX8QM_ESAI1_TX1_LSIO_GPIO2_IO09                       IMX8QM_ESAI1_TX1                3
+#define IMX8QM_ESAI1_TX2_RX3_AUD_ESAI1_TX2_RX3                 IMX8QM_ESAI1_TX2_RX3            0
+#define IMX8QM_ESAI1_TX2_RX3_AUD_SPDIF0_RX                     IMX8QM_ESAI1_TX2_RX3            1
+#define IMX8QM_ESAI1_TX2_RX3_LSIO_GPIO2_IO10                   IMX8QM_ESAI1_TX2_RX3            3
+#define IMX8QM_ESAI1_TX3_RX2_AUD_ESAI1_TX3_RX2                 IMX8QM_ESAI1_TX3_RX2            0
+#define IMX8QM_ESAI1_TX3_RX2_AUD_SPDIF0_TX                     IMX8QM_ESAI1_TX3_RX2            1
+#define IMX8QM_ESAI1_TX3_RX2_LSIO_GPIO2_IO11                   IMX8QM_ESAI1_TX3_RX2            3
+#define IMX8QM_ESAI1_TX4_RX1_AUD_ESAI1_TX4_RX1                 IMX8QM_ESAI1_TX4_RX1            0
+#define IMX8QM_ESAI1_TX4_RX1_LSIO_GPIO2_IO12                   IMX8QM_ESAI1_TX4_RX1            3
+#define IMX8QM_ESAI1_TX5_RX0_AUD_ESAI1_TX5_RX0                 IMX8QM_ESAI1_TX5_RX0            0
+#define IMX8QM_ESAI1_TX5_RX0_LSIO_GPIO2_IO13                   IMX8QM_ESAI1_TX5_RX0            3
+#define IMX8QM_SPDIF0_RX_AUD_SPDIF0_RX                         IMX8QM_SPDIF0_RX                0
+#define IMX8QM_SPDIF0_RX_AUD_MQS_R                             IMX8QM_SPDIF0_RX                1
+#define IMX8QM_SPDIF0_RX_AUD_ACM_MCLK_IN1                      IMX8QM_SPDIF0_RX                2
+#define IMX8QM_SPDIF0_RX_LSIO_GPIO2_IO14                       IMX8QM_SPDIF0_RX                3
+#define IMX8QM_SPDIF0_TX_AUD_SPDIF0_TX                         IMX8QM_SPDIF0_TX                0
+#define IMX8QM_SPDIF0_TX_AUD_MQS_L                             IMX8QM_SPDIF0_TX                1
+#define IMX8QM_SPDIF0_TX_AUD_ACM_MCLK_OUT1                     IMX8QM_SPDIF0_TX                2
+#define IMX8QM_SPDIF0_TX_LSIO_GPIO2_IO15                       IMX8QM_SPDIF0_TX                3
+#define IMX8QM_SPDIF0_EXT_CLK_AUD_SPDIF0_EXT_CLK               IMX8QM_SPDIF0_EXT_CLK           0
+#define IMX8QM_SPDIF0_EXT_CLK_DMA_DMA0_REQ_IN0                 IMX8QM_SPDIF0_EXT_CLK           1
+#define IMX8QM_SPDIF0_EXT_CLK_LSIO_GPIO2_IO16                  IMX8QM_SPDIF0_EXT_CLK           3
+#define IMX8QM_SPI3_SCK_DMA_SPI3_SCK                           IMX8QM_SPI3_SCK                 0
+#define IMX8QM_SPI3_SCK_LSIO_GPIO2_IO17                                IMX8QM_SPI3_SCK                 3
+#define IMX8QM_SPI3_SDO_DMA_SPI3_SDO                           IMX8QM_SPI3_SDO                 0
+#define IMX8QM_SPI3_SDO_DMA_FTM_CH0                            IMX8QM_SPI3_SDO                 1
+#define IMX8QM_SPI3_SDO_LSIO_GPIO2_IO18                                IMX8QM_SPI3_SDO                 3
+#define IMX8QM_SPI3_SDI_DMA_SPI3_SDI                           IMX8QM_SPI3_SDI                 0
+#define IMX8QM_SPI3_SDI_DMA_FTM_CH1                            IMX8QM_SPI3_SDI                 1
+#define IMX8QM_SPI3_SDI_LSIO_GPIO2_IO19                                IMX8QM_SPI3_SDI                 3
+#define IMX8QM_SPI3_CS0_DMA_SPI3_CS0                           IMX8QM_SPI3_CS0                 0
+#define IMX8QM_SPI3_CS0_DMA_FTM_CH2                            IMX8QM_SPI3_CS0                 1
+#define IMX8QM_SPI3_CS0_LSIO_GPIO2_IO20                                IMX8QM_SPI3_CS0                 3
+#define IMX8QM_SPI3_CS1_DMA_SPI3_CS1                           IMX8QM_SPI3_CS1                 0
+#define IMX8QM_SPI3_CS1_LSIO_GPIO2_IO21                                IMX8QM_SPI3_CS1                 3
+#define IMX8QM_ESAI0_FSR_AUD_ESAI0_FSR                         IMX8QM_ESAI0_FSR                0
+#define IMX8QM_ESAI0_FSR_LSIO_GPIO2_IO22                       IMX8QM_ESAI0_FSR                3
+#define IMX8QM_ESAI0_FST_AUD_ESAI0_FST                         IMX8QM_ESAI0_FST                0
+#define IMX8QM_ESAI0_FST_LSIO_GPIO2_IO23                       IMX8QM_ESAI0_FST                3
+#define IMX8QM_ESAI0_SCKR_AUD_ESAI0_SCKR                       IMX8QM_ESAI0_SCKR               0
+#define IMX8QM_ESAI0_SCKR_LSIO_GPIO2_IO24                      IMX8QM_ESAI0_SCKR               3
+#define IMX8QM_ESAI0_SCKT_AUD_ESAI0_SCKT                       IMX8QM_ESAI0_SCKT               0
+#define IMX8QM_ESAI0_SCKT_LSIO_GPIO2_IO25                      IMX8QM_ESAI0_SCKT               3
+#define IMX8QM_ESAI0_TX0_AUD_ESAI0_TX0                         IMX8QM_ESAI0_TX0                0
+#define IMX8QM_ESAI0_TX0_LSIO_GPIO2_IO26                       IMX8QM_ESAI0_TX0                3
+#define IMX8QM_ESAI0_TX1_AUD_ESAI0_TX1                         IMX8QM_ESAI0_TX1                0
+#define IMX8QM_ESAI0_TX1_LSIO_GPIO2_IO27                       IMX8QM_ESAI0_TX1                3
+#define IMX8QM_ESAI0_TX2_RX3_AUD_ESAI0_TX2_RX3                 IMX8QM_ESAI0_TX2_RX3            0
+#define IMX8QM_ESAI0_TX2_RX3_LSIO_GPIO2_IO28                   IMX8QM_ESAI0_TX2_RX3            3
+#define IMX8QM_ESAI0_TX3_RX2_AUD_ESAI0_TX3_RX2                 IMX8QM_ESAI0_TX3_RX2            0
+#define IMX8QM_ESAI0_TX3_RX2_LSIO_GPIO2_IO29                   IMX8QM_ESAI0_TX3_RX2            3
+#define IMX8QM_ESAI0_TX4_RX1_AUD_ESAI0_TX4_RX1                 IMX8QM_ESAI0_TX4_RX1            0
+#define IMX8QM_ESAI0_TX4_RX1_LSIO_GPIO2_IO30                   IMX8QM_ESAI0_TX4_RX1            3
+#define IMX8QM_ESAI0_TX5_RX0_AUD_ESAI0_TX5_RX0                 IMX8QM_ESAI0_TX5_RX0            0
+#define IMX8QM_ESAI0_TX5_RX0_LSIO_GPIO2_IO31                   IMX8QM_ESAI0_TX5_RX0            3
+#define IMX8QM_MCLK_IN0_AUD_ACM_MCLK_IN0                       IMX8QM_MCLK_IN0                 0
+#define IMX8QM_MCLK_IN0_AUD_ESAI0_RX_HF_CLK                    IMX8QM_MCLK_IN0                 1
+#define IMX8QM_MCLK_IN0_AUD_ESAI1_RX_HF_CLK                    IMX8QM_MCLK_IN0                 2
+#define IMX8QM_MCLK_IN0_LSIO_GPIO3_IO00                                IMX8QM_MCLK_IN0                 3
+#define IMX8QM_MCLK_OUT0_AUD_ACM_MCLK_OUT0                     IMX8QM_MCLK_OUT0                0
+#define IMX8QM_MCLK_OUT0_AUD_ESAI0_TX_HF_CLK                   IMX8QM_MCLK_OUT0                1
+#define IMX8QM_MCLK_OUT0_AUD_ESAI1_TX_HF_CLK                   IMX8QM_MCLK_OUT0                2
+#define IMX8QM_MCLK_OUT0_LSIO_GPIO3_IO01                       IMX8QM_MCLK_OUT0                3
+#define IMX8QM_SPI0_SCK_DMA_SPI0_SCK                           IMX8QM_SPI0_SCK                 0
+#define IMX8QM_SPI0_SCK_AUD_SAI0_RXC                           IMX8QM_SPI0_SCK                 1
+#define IMX8QM_SPI0_SCK_LSIO_GPIO3_IO02                                IMX8QM_SPI0_SCK                 3
+#define IMX8QM_SPI0_SDO_DMA_SPI0_SDO                           IMX8QM_SPI0_SDO                 0
+#define IMX8QM_SPI0_SDO_AUD_SAI0_TXD                           IMX8QM_SPI0_SDO                 1
+#define IMX8QM_SPI0_SDO_LSIO_GPIO3_IO03                                IMX8QM_SPI0_SDO                 3
+#define IMX8QM_SPI0_SDI_DMA_SPI0_SDI                           IMX8QM_SPI0_SDI                 0
+#define IMX8QM_SPI0_SDI_AUD_SAI0_RXD                           IMX8QM_SPI0_SDI                 1
+#define IMX8QM_SPI0_SDI_LSIO_GPIO3_IO04                                IMX8QM_SPI0_SDI                 3
+#define IMX8QM_SPI0_CS0_DMA_SPI0_CS0                           IMX8QM_SPI0_CS0                 0
+#define IMX8QM_SPI0_CS0_AUD_SAI0_RXFS                          IMX8QM_SPI0_CS0                 1
+#define IMX8QM_SPI0_CS0_LSIO_GPIO3_IO05                                IMX8QM_SPI0_CS0                 3
+#define IMX8QM_SPI0_CS1_DMA_SPI0_CS1                           IMX8QM_SPI0_CS1                 0
+#define IMX8QM_SPI0_CS1_AUD_SAI0_TXC                           IMX8QM_SPI0_CS1                 1
+#define IMX8QM_SPI0_CS1_LSIO_GPIO3_IO06                                IMX8QM_SPI0_CS1                 3
+#define IMX8QM_SPI2_SCK_DMA_SPI2_SCK                           IMX8QM_SPI2_SCK                 0
+#define IMX8QM_SPI2_SCK_LSIO_GPIO3_IO07                                IMX8QM_SPI2_SCK                 3
+#define IMX8QM_SPI2_SDO_DMA_SPI2_SDO                           IMX8QM_SPI2_SDO                 0
+#define IMX8QM_SPI2_SDO_LSIO_GPIO3_IO08                                IMX8QM_SPI2_SDO                 3
+#define IMX8QM_SPI2_SDI_DMA_SPI2_SDI                           IMX8QM_SPI2_SDI                 0
+#define IMX8QM_SPI2_SDI_LSIO_GPIO3_IO09                                IMX8QM_SPI2_SDI                 3
+#define IMX8QM_SPI2_CS0_DMA_SPI2_CS0                           IMX8QM_SPI2_CS0                 0
+#define IMX8QM_SPI2_CS0_LSIO_GPIO3_IO10                                IMX8QM_SPI2_CS0                 3
+#define IMX8QM_SPI2_CS1_DMA_SPI2_CS1                           IMX8QM_SPI2_CS1                 0
+#define IMX8QM_SPI2_CS1_AUD_SAI0_TXFS                          IMX8QM_SPI2_CS1                 1
+#define IMX8QM_SPI2_CS1_LSIO_GPIO3_IO11                                IMX8QM_SPI2_CS1                 3
+#define IMX8QM_SAI1_RXC_AUD_SAI1_RXC                           IMX8QM_SAI1_RXC                 0
+#define IMX8QM_SAI1_RXC_AUD_SAI0_TXD                           IMX8QM_SAI1_RXC                 1
+#define IMX8QM_SAI1_RXC_LSIO_GPIO3_IO12                                IMX8QM_SAI1_RXC                 3
+#define IMX8QM_SAI1_RXD_AUD_SAI1_RXD                           IMX8QM_SAI1_RXD                 0
+#define IMX8QM_SAI1_RXD_AUD_SAI0_TXFS                          IMX8QM_SAI1_RXD                 1
+#define IMX8QM_SAI1_RXD_LSIO_GPIO3_IO13                                IMX8QM_SAI1_RXD                 3
+#define IMX8QM_SAI1_RXFS_AUD_SAI1_RXFS                         IMX8QM_SAI1_RXFS                0
+#define IMX8QM_SAI1_RXFS_AUD_SAI0_RXD                          IMX8QM_SAI1_RXFS                1
+#define IMX8QM_SAI1_RXFS_LSIO_GPIO3_IO14                       IMX8QM_SAI1_RXFS                3
+#define IMX8QM_SAI1_TXC_AUD_SAI1_TXC                           IMX8QM_SAI1_TXC                 0
+#define IMX8QM_SAI1_TXC_AUD_SAI0_TXC                           IMX8QM_SAI1_TXC                 1
+#define IMX8QM_SAI1_TXC_LSIO_GPIO3_IO15                                IMX8QM_SAI1_TXC                 3
+#define IMX8QM_SAI1_TXD_AUD_SAI1_TXD                           IMX8QM_SAI1_TXD                 0
+#define IMX8QM_SAI1_TXD_AUD_SAI1_RXC                           IMX8QM_SAI1_TXD                 1
+#define IMX8QM_SAI1_TXD_LSIO_GPIO3_IO16                                IMX8QM_SAI1_TXD                 3
+#define IMX8QM_SAI1_TXFS_AUD_SAI1_TXFS                         IMX8QM_SAI1_TXFS                0
+#define IMX8QM_SAI1_TXFS_AUD_SAI1_RXFS                         IMX8QM_SAI1_TXFS                1
+#define IMX8QM_SAI1_TXFS_LSIO_GPIO3_IO17                       IMX8QM_SAI1_TXFS                3
+#define IMX8QM_ADC_IN7_DMA_ADC1_IN3                            IMX8QM_ADC_IN7                  0
+#define IMX8QM_ADC_IN7_DMA_SPI1_CS1                            IMX8QM_ADC_IN7                  1
+#define IMX8QM_ADC_IN7_LSIO_KPP0_ROW3                          IMX8QM_ADC_IN7                  2
+#define IMX8QM_ADC_IN7_LSIO_GPIO3_IO25                         IMX8QM_ADC_IN7                  3
+#define IMX8QM_ADC_IN6_DMA_ADC1_IN2                            IMX8QM_ADC_IN6                  0
+#define IMX8QM_ADC_IN6_DMA_SPI1_CS0                            IMX8QM_ADC_IN6                  1
+#define IMX8QM_ADC_IN6_LSIO_KPP0_ROW2                          IMX8QM_ADC_IN6                  2
+#define IMX8QM_ADC_IN6_LSIO_GPIO3_IO24                         IMX8QM_ADC_IN6                  3
+#define IMX8QM_ADC_IN5_DMA_ADC1_IN1                            IMX8QM_ADC_IN5                  0
+#define IMX8QM_ADC_IN5_DMA_SPI1_SDI                            IMX8QM_ADC_IN5                  1
+#define IMX8QM_ADC_IN5_LSIO_KPP0_ROW1                          IMX8QM_ADC_IN5                  2
+#define IMX8QM_ADC_IN5_LSIO_GPIO3_IO23                         IMX8QM_ADC_IN5                  3
+#define IMX8QM_ADC_IN4_DMA_ADC1_IN0                            IMX8QM_ADC_IN4                  0
+#define IMX8QM_ADC_IN4_DMA_SPI1_SDO                            IMX8QM_ADC_IN4                  1
+#define IMX8QM_ADC_IN4_LSIO_KPP0_ROW0                          IMX8QM_ADC_IN4                  2
+#define IMX8QM_ADC_IN4_LSIO_GPIO3_IO22                         IMX8QM_ADC_IN4                  3
+#define IMX8QM_ADC_IN3_DMA_ADC0_IN3                            IMX8QM_ADC_IN3                  0
+#define IMX8QM_ADC_IN3_DMA_SPI1_SCK                            IMX8QM_ADC_IN3                  1
+#define IMX8QM_ADC_IN3_LSIO_KPP0_COL3                          IMX8QM_ADC_IN3                  2
+#define IMX8QM_ADC_IN3_LSIO_GPIO3_IO21                         IMX8QM_ADC_IN3                  3
+#define IMX8QM_ADC_IN2_DMA_ADC0_IN2                            IMX8QM_ADC_IN2                  0
+#define IMX8QM_ADC_IN2_LSIO_KPP0_COL2                          IMX8QM_ADC_IN2                  2
+#define IMX8QM_ADC_IN2_LSIO_GPIO3_IO20                         IMX8QM_ADC_IN2                  3
+#define IMX8QM_ADC_IN1_DMA_ADC0_IN1                            IMX8QM_ADC_IN1                  0
+#define IMX8QM_ADC_IN1_LSIO_KPP0_COL1                          IMX8QM_ADC_IN1                  2
+#define IMX8QM_ADC_IN1_LSIO_GPIO3_IO19                         IMX8QM_ADC_IN1                  3
+#define IMX8QM_ADC_IN0_DMA_ADC0_IN0                            IMX8QM_ADC_IN0                  0
+#define IMX8QM_ADC_IN0_LSIO_KPP0_COL0                          IMX8QM_ADC_IN0                  2
+#define IMX8QM_ADC_IN0_LSIO_GPIO3_IO18                         IMX8QM_ADC_IN0                  3
+#define IMX8QM_MLB_SIG_CONN_MLB_SIG                            IMX8QM_MLB_SIG                  0
+#define IMX8QM_MLB_SIG_AUD_SAI3_RXC                            IMX8QM_MLB_SIG                  1
+#define IMX8QM_MLB_SIG_LSIO_GPIO3_IO26                         IMX8QM_MLB_SIG                  3
+#define IMX8QM_MLB_CLK_CONN_MLB_CLK                            IMX8QM_MLB_CLK                  0
+#define IMX8QM_MLB_CLK_AUD_SAI3_RXFS                           IMX8QM_MLB_CLK                  1
+#define IMX8QM_MLB_CLK_LSIO_GPIO3_IO27                         IMX8QM_MLB_CLK                  3
+#define IMX8QM_MLB_DATA_CONN_MLB_DATA                          IMX8QM_MLB_DATA                 0
+#define IMX8QM_MLB_DATA_AUD_SAI3_RXD                           IMX8QM_MLB_DATA                 1
+#define IMX8QM_MLB_DATA_LSIO_GPIO3_IO28                                IMX8QM_MLB_DATA                 3
+#define IMX8QM_FLEXCAN0_RX_DMA_FLEXCAN0_RX                     IMX8QM_FLEXCAN0_RX              0
+#define IMX8QM_FLEXCAN0_RX_LSIO_GPIO3_IO29                     IMX8QM_FLEXCAN0_RX              3
+#define IMX8QM_FLEXCAN0_TX_DMA_FLEXCAN0_TX                     IMX8QM_FLEXCAN0_TX              0
+#define IMX8QM_FLEXCAN0_TX_LSIO_GPIO3_IO30                     IMX8QM_FLEXCAN0_TX              3
+#define IMX8QM_FLEXCAN1_RX_DMA_FLEXCAN1_RX                     IMX8QM_FLEXCAN1_RX              0
+#define IMX8QM_FLEXCAN1_RX_LSIO_GPIO3_IO31                     IMX8QM_FLEXCAN1_RX              3
+#define IMX8QM_FLEXCAN1_TX_DMA_FLEXCAN1_TX                     IMX8QM_FLEXCAN1_TX              0
+#define IMX8QM_FLEXCAN1_TX_LSIO_GPIO4_IO00                     IMX8QM_FLEXCAN1_TX              3
+#define IMX8QM_FLEXCAN2_RX_DMA_FLEXCAN2_RX                     IMX8QM_FLEXCAN2_RX              0
+#define IMX8QM_FLEXCAN2_RX_LSIO_GPIO4_IO01                     IMX8QM_FLEXCAN2_RX              3
+#define IMX8QM_FLEXCAN2_TX_DMA_FLEXCAN2_TX                     IMX8QM_FLEXCAN2_TX              0
+#define IMX8QM_FLEXCAN2_TX_LSIO_GPIO4_IO02                     IMX8QM_FLEXCAN2_TX              3
+#define IMX8QM_USB_SS3_TC0_DMA_I2C1_SCL                                IMX8QM_USB_SS3_TC0              0
+#define IMX8QM_USB_SS3_TC0_CONN_USB_OTG1_PWR                   IMX8QM_USB_SS3_TC0              1
+#define IMX8QM_USB_SS3_TC0_LSIO_GPIO4_IO03                     IMX8QM_USB_SS3_TC0              3
+#define IMX8QM_USB_SS3_TC1_DMA_I2C1_SCL                                IMX8QM_USB_SS3_TC1              0
+#define IMX8QM_USB_SS3_TC1_CONN_USB_OTG2_PWR                   IMX8QM_USB_SS3_TC1              1
+#define IMX8QM_USB_SS3_TC1_LSIO_GPIO4_IO04                     IMX8QM_USB_SS3_TC1              3
+#define IMX8QM_USB_SS3_TC2_DMA_I2C1_SDA                                IMX8QM_USB_SS3_TC2              0
+#define IMX8QM_USB_SS3_TC2_CONN_USB_OTG1_OC                    IMX8QM_USB_SS3_TC2              1
+#define IMX8QM_USB_SS3_TC2_LSIO_GPIO4_IO05                     IMX8QM_USB_SS3_TC2              3
+#define IMX8QM_USB_SS3_TC3_DMA_I2C1_SDA                                IMX8QM_USB_SS3_TC3              0
+#define IMX8QM_USB_SS3_TC3_CONN_USB_OTG2_OC                    IMX8QM_USB_SS3_TC3              1
+#define IMX8QM_USB_SS3_TC3_LSIO_GPIO4_IO06                     IMX8QM_USB_SS3_TC3              3
+#define IMX8QM_USDHC1_RESET_B_CONN_USDHC1_RESET_B              IMX8QM_USDHC1_RESET_B           0
+#define IMX8QM_USDHC1_RESET_B_LSIO_GPIO4_IO07                  IMX8QM_USDHC1_RESET_B           3
+#define IMX8QM_USDHC1_VSELECT_CONN_USDHC1_VSELECT              IMX8QM_USDHC1_VSELECT           0
+#define IMX8QM_USDHC1_VSELECT_LSIO_GPIO4_IO08                  IMX8QM_USDHC1_VSELECT           3
+#define IMX8QM_USDHC2_RESET_B_CONN_USDHC2_RESET_B              IMX8QM_USDHC2_RESET_B           0
+#define IMX8QM_USDHC2_RESET_B_LSIO_GPIO4_IO09                  IMX8QM_USDHC2_RESET_B           3
+#define IMX8QM_USDHC2_VSELECT_CONN_USDHC2_VSELECT              IMX8QM_USDHC2_VSELECT           0
+#define IMX8QM_USDHC2_VSELECT_LSIO_GPIO4_IO10                  IMX8QM_USDHC2_VSELECT           3
+#define IMX8QM_USDHC2_WP_CONN_USDHC2_WP                                IMX8QM_USDHC2_WP                0
+#define IMX8QM_USDHC2_WP_LSIO_GPIO4_IO11                       IMX8QM_USDHC2_WP                3
+#define IMX8QM_USDHC2_CD_B_CONN_USDHC2_CD_B                    IMX8QM_USDHC2_CD_B              0
+#define IMX8QM_USDHC2_CD_B_LSIO_GPIO4_IO12                     IMX8QM_USDHC2_CD_B              3
+#define IMX8QM_ENET0_MDIO_CONN_ENET0_MDIO                      IMX8QM_ENET0_MDIO               0
+#define IMX8QM_ENET0_MDIO_DMA_I2C4_SDA                         IMX8QM_ENET0_MDIO               1
+#define IMX8QM_ENET0_MDIO_LSIO_GPIO4_IO13                      IMX8QM_ENET0_MDIO               3
+#define IMX8QM_ENET0_MDC_CONN_ENET0_MDC                                IMX8QM_ENET0_MDC                0
+#define IMX8QM_ENET0_MDC_DMA_I2C4_SCL                          IMX8QM_ENET0_MDC                1
+#define IMX8QM_ENET0_MDC_LSIO_GPIO4_IO14                       IMX8QM_ENET0_MDC                3
+#define IMX8QM_ENET0_REFCLK_125M_25M_CONN_ENET0_REFCLK_125M_25M        IMX8QM_ENET0_REFCLK_125M_25M    0
+#define IMX8QM_ENET0_REFCLK_125M_25M_CONN_ENET0_PPS            IMX8QM_ENET0_REFCLK_125M_25M    1
+#define IMX8QM_ENET0_REFCLK_125M_25M_LSIO_GPIO4_IO15           IMX8QM_ENET0_REFCLK_125M_25M    3
+#define IMX8QM_ENET1_REFCLK_125M_25M_CONN_ENET1_REFCLK_125M_25M        IMX8QM_ENET1_REFCLK_125M_25M    0
+#define IMX8QM_ENET1_REFCLK_125M_25M_CONN_ENET1_PPS            IMX8QM_ENET1_REFCLK_125M_25M    1
+#define IMX8QM_ENET1_REFCLK_125M_25M_LSIO_GPIO4_IO16           IMX8QM_ENET1_REFCLK_125M_25M    3
+#define IMX8QM_ENET1_MDIO_CONN_ENET1_MDIO                      IMX8QM_ENET1_MDIO               0
+#define IMX8QM_ENET1_MDIO_DMA_I2C4_SDA                         IMX8QM_ENET1_MDIO               1
+#define IMX8QM_ENET1_MDIO_LSIO_GPIO4_IO17                      IMX8QM_ENET1_MDIO               3
+#define IMX8QM_ENET1_MDC_CONN_ENET1_MDC                                IMX8QM_ENET1_MDC                0
+#define IMX8QM_ENET1_MDC_DMA_I2C4_SCL                          IMX8QM_ENET1_MDC                1
+#define IMX8QM_ENET1_MDC_LSIO_GPIO4_IO18                       IMX8QM_ENET1_MDC                3
+#define IMX8QM_QSPI1A_SS0_B_LSIO_QSPI1A_SS0_B                  IMX8QM_QSPI1A_SS0_B             0
+#define IMX8QM_QSPI1A_SS0_B_LSIO_GPIO4_IO19                    IMX8QM_QSPI1A_SS0_B             3
+#define IMX8QM_QSPI1A_SS1_B_LSIO_QSPI1A_SS1_B                  IMX8QM_QSPI1A_SS1_B             0
+#define IMX8QM_QSPI1A_SS1_B_LSIO_QSPI1A_SCLK2                  IMX8QM_QSPI1A_SS1_B             1
+#define IMX8QM_QSPI1A_SS1_B_LSIO_GPIO4_IO20                    IMX8QM_QSPI1A_SS1_B             3
+#define IMX8QM_QSPI1A_SCLK_LSIO_QSPI1A_SCLK                    IMX8QM_QSPI1A_SCLK              0
+#define IMX8QM_QSPI1A_SCLK_LSIO_GPIO4_IO21                     IMX8QM_QSPI1A_SCLK              3
+#define IMX8QM_QSPI1A_DQS_LSIO_QSPI1A_DQS                      IMX8QM_QSPI1A_DQS               0
+#define IMX8QM_QSPI1A_DQS_LSIO_GPIO4_IO22                      IMX8QM_QSPI1A_DQS               3
+#define IMX8QM_QSPI1A_DATA3_LSIO_QSPI1A_DATA3                  IMX8QM_QSPI1A_DATA3             0
+#define IMX8QM_QSPI1A_DATA3_DMA_I2C1_SDA                       IMX8QM_QSPI1A_DATA3             1
+#define IMX8QM_QSPI1A_DATA3_CONN_USB_OTG1_OC                   IMX8QM_QSPI1A_DATA3             2
+#define IMX8QM_QSPI1A_DATA3_LSIO_GPIO4_IO23                    IMX8QM_QSPI1A_DATA3             3
+#define IMX8QM_QSPI1A_DATA2_LSIO_QSPI1A_DATA2                  IMX8QM_QSPI1A_DATA2             0
+#define IMX8QM_QSPI1A_DATA2_DMA_I2C1_SCL                       IMX8QM_QSPI1A_DATA2             1
+#define IMX8QM_QSPI1A_DATA2_CONN_USB_OTG2_PWR                  IMX8QM_QSPI1A_DATA2             2
+#define IMX8QM_QSPI1A_DATA2_LSIO_GPIO4_IO24                    IMX8QM_QSPI1A_DATA2             3
+#define IMX8QM_QSPI1A_DATA1_LSIO_QSPI1A_DATA1                  IMX8QM_QSPI1A_DATA1             0
+#define IMX8QM_QSPI1A_DATA1_DMA_I2C1_SDA                       IMX8QM_QSPI1A_DATA1             1
+#define IMX8QM_QSPI1A_DATA1_CONN_USB_OTG2_OC                   IMX8QM_QSPI1A_DATA1             2
+#define IMX8QM_QSPI1A_DATA1_LSIO_GPIO4_IO25                    IMX8QM_QSPI1A_DATA1             3
+#define IMX8QM_QSPI1A_DATA0_LSIO_QSPI1A_DATA0                  IMX8QM_QSPI1A_DATA0             0
+#define IMX8QM_QSPI1A_DATA0_LSIO_GPIO4_IO26                    IMX8QM_QSPI1A_DATA0             3
+#define IMX8QM_QSPI0A_DATA0_LSIO_QSPI0A_DATA0                  IMX8QM_QSPI0A_DATA0             0
+#define IMX8QM_QSPI0A_DATA1_LSIO_QSPI0A_DATA1                  IMX8QM_QSPI0A_DATA1             0
+#define IMX8QM_QSPI0A_DATA2_LSIO_QSPI0A_DATA2                  IMX8QM_QSPI0A_DATA2             0
+#define IMX8QM_QSPI0A_DATA3_LSIO_QSPI0A_DATA3                  IMX8QM_QSPI0A_DATA3             0
+#define IMX8QM_QSPI0A_DQS_LSIO_QSPI0A_DQS                      IMX8QM_QSPI0A_DQS               0
+#define IMX8QM_QSPI0A_SS0_B_LSIO_QSPI0A_SS0_B                  IMX8QM_QSPI0A_SS0_B             0
+#define IMX8QM_QSPI0A_SS1_B_LSIO_QSPI0A_SS1_B                  IMX8QM_QSPI0A_SS1_B             0
+#define IMX8QM_QSPI0A_SS1_B_LSIO_QSPI0A_SCLK2                  IMX8QM_QSPI0A_SS1_B             1
+#define IMX8QM_QSPI0A_SCLK_LSIO_QSPI0A_SCLK                    IMX8QM_QSPI0A_SCLK              0
+#define IMX8QM_QSPI0B_SCLK_LSIO_QSPI0B_SCLK                    IMX8QM_QSPI0B_SCLK              0
+#define IMX8QM_QSPI0B_DATA0_LSIO_QSPI0B_DATA0                  IMX8QM_QSPI0B_DATA0             0
+#define IMX8QM_QSPI0B_DATA1_LSIO_QSPI0B_DATA1                  IMX8QM_QSPI0B_DATA1             0
+#define IMX8QM_QSPI0B_DATA2_LSIO_QSPI0B_DATA2                  IMX8QM_QSPI0B_DATA2             0
+#define IMX8QM_QSPI0B_DATA3_LSIO_QSPI0B_DATA3                  IMX8QM_QSPI0B_DATA3             0
+#define IMX8QM_QSPI0B_DQS_LSIO_QSPI0B_DQS                      IMX8QM_QSPI0B_DQS               0
+#define IMX8QM_QSPI0B_SS0_B_LSIO_QSPI0B_SS0_B                  IMX8QM_QSPI0B_SS0_B             0
+#define IMX8QM_QSPI0B_SS1_B_LSIO_QSPI0B_SS1_B                  IMX8QM_QSPI0B_SS1_B             0
+#define IMX8QM_QSPI0B_SS1_B_LSIO_QSPI0B_SCLK2                  IMX8QM_QSPI0B_SS1_B             1
+#define IMX8QM_PCIE_CTRL0_CLKREQ_B_HSIO_PCIE0_CLKREQ_B         IMX8QM_PCIE_CTRL0_CLKREQ_B      0
+#define IMX8QM_PCIE_CTRL0_CLKREQ_B_LSIO_GPIO4_IO27             IMX8QM_PCIE_CTRL0_CLKREQ_B      3
+#define IMX8QM_PCIE_CTRL0_WAKE_B_HSIO_PCIE0_WAKE_B             IMX8QM_PCIE_CTRL0_WAKE_B        0
+#define IMX8QM_PCIE_CTRL0_WAKE_B_LSIO_GPIO4_IO28               IMX8QM_PCIE_CTRL0_WAKE_B        3
+#define IMX8QM_PCIE_CTRL0_PERST_B_HSIO_PCIE0_PERST_B           IMX8QM_PCIE_CTRL0_PERST_B       0
+#define IMX8QM_PCIE_CTRL0_PERST_B_LSIO_GPIO4_IO29              IMX8QM_PCIE_CTRL0_PERST_B       3
+#define IMX8QM_PCIE_CTRL1_CLKREQ_B_HSIO_PCIE1_CLKREQ_B         IMX8QM_PCIE_CTRL1_CLKREQ_B      0
+#define IMX8QM_PCIE_CTRL1_CLKREQ_B_DMA_I2C1_SDA                        IMX8QM_PCIE_CTRL1_CLKREQ_B      1
+#define IMX8QM_PCIE_CTRL1_CLKREQ_B_CONN_USB_OTG2_OC            IMX8QM_PCIE_CTRL1_CLKREQ_B      2
+#define IMX8QM_PCIE_CTRL1_CLKREQ_B_LSIO_GPIO4_IO30             IMX8QM_PCIE_CTRL1_CLKREQ_B      3
+#define IMX8QM_PCIE_CTRL1_WAKE_B_HSIO_PCIE1_WAKE_B             IMX8QM_PCIE_CTRL1_WAKE_B        0
+#define IMX8QM_PCIE_CTRL1_WAKE_B_DMA_I2C1_SCL                  IMX8QM_PCIE_CTRL1_WAKE_B        1
+#define IMX8QM_PCIE_CTRL1_WAKE_B_CONN_USB_OTG2_PWR             IMX8QM_PCIE_CTRL1_WAKE_B        2
+#define IMX8QM_PCIE_CTRL1_WAKE_B_LSIO_GPIO4_IO31               IMX8QM_PCIE_CTRL1_WAKE_B        3
+#define IMX8QM_PCIE_CTRL1_PERST_B_HSIO_PCIE1_PERST_B           IMX8QM_PCIE_CTRL1_PERST_B       0
+#define IMX8QM_PCIE_CTRL1_PERST_B_DMA_I2C1_SCL                 IMX8QM_PCIE_CTRL1_PERST_B       1
+#define IMX8QM_PCIE_CTRL1_PERST_B_CONN_USB_OTG1_PWR            IMX8QM_PCIE_CTRL1_PERST_B       2
+#define IMX8QM_PCIE_CTRL1_PERST_B_LSIO_GPIO5_IO00              IMX8QM_PCIE_CTRL1_PERST_B       3
+#define IMX8QM_USB_HSIC0_DATA_CONN_USB_HSIC0_DATA              IMX8QM_USB_HSIC0_DATA           0
+#define IMX8QM_USB_HSIC0_DATA_DMA_I2C1_SDA                     IMX8QM_USB_HSIC0_DATA           1
+#define IMX8QM_USB_HSIC0_DATA_LSIO_GPIO5_IO01                  IMX8QM_USB_HSIC0_DATA           3
+#define IMX8QM_USB_HSIC0_STROBE_CONN_USB_HSIC0_STROBE          IMX8QM_USB_HSIC0_STROBE         0
+#define IMX8QM_USB_HSIC0_STROBE_DMA_I2C1_SCL                   IMX8QM_USB_HSIC0_STROBE         1
+#define IMX8QM_USB_HSIC0_STROBE_LSIO_GPIO5_IO02                        IMX8QM_USB_HSIC0_STROBE         3
+#define IMX8QM_EMMC0_CLK_CONN_EMMC0_CLK                                IMX8QM_EMMC0_CLK                0
+#define IMX8QM_EMMC0_CLK_CONN_NAND_READY_B                     IMX8QM_EMMC0_CLK                1
+#define IMX8QM_EMMC0_CMD_CONN_EMMC0_CMD                                IMX8QM_EMMC0_CMD                0
+#define IMX8QM_EMMC0_CMD_CONN_NAND_DQS                         IMX8QM_EMMC0_CMD                1
+#define IMX8QM_EMMC0_CMD_AUD_MQS_R                             IMX8QM_EMMC0_CMD                2
+#define IMX8QM_EMMC0_CMD_LSIO_GPIO5_IO03                       IMX8QM_EMMC0_CMD                3
+#define IMX8QM_EMMC0_DATA0_CONN_EMMC0_DATA0                    IMX8QM_EMMC0_DATA0              0
+#define IMX8QM_EMMC0_DATA0_CONN_NAND_DATA00                    IMX8QM_EMMC0_DATA0              1
+#define IMX8QM_EMMC0_DATA0_LSIO_GPIO5_IO04                     IMX8QM_EMMC0_DATA0              3
+#define IMX8QM_EMMC0_DATA1_CONN_EMMC0_DATA1                    IMX8QM_EMMC0_DATA1              0
+#define IMX8QM_EMMC0_DATA1_CONN_NAND_DATA01                    IMX8QM_EMMC0_DATA1              1
+#define IMX8QM_EMMC0_DATA1_LSIO_GPIO5_IO05                     IMX8QM_EMMC0_DATA1              3
+#define IMX8QM_EMMC0_DATA2_CONN_EMMC0_DATA2                    IMX8QM_EMMC0_DATA2              0
+#define IMX8QM_EMMC0_DATA2_CONN_NAND_DATA02                    IMX8QM_EMMC0_DATA2              1
+#define IMX8QM_EMMC0_DATA2_LSIO_GPIO5_IO06                     IMX8QM_EMMC0_DATA2              3
+#define IMX8QM_EMMC0_DATA3_CONN_EMMC0_DATA3                    IMX8QM_EMMC0_DATA3              0
+#define IMX8QM_EMMC0_DATA3_CONN_NAND_DATA03                    IMX8QM_EMMC0_DATA3              1
+#define IMX8QM_EMMC0_DATA3_LSIO_GPIO5_IO07                     IMX8QM_EMMC0_DATA3              3
+#define IMX8QM_EMMC0_DATA4_CONN_EMMC0_DATA4                    IMX8QM_EMMC0_DATA4              0
+#define IMX8QM_EMMC0_DATA4_CONN_NAND_DATA04                    IMX8QM_EMMC0_DATA4              1
+#define IMX8QM_EMMC0_DATA4_LSIO_GPIO5_IO08                     IMX8QM_EMMC0_DATA4              3
+#define IMX8QM_EMMC0_DATA5_CONN_EMMC0_DATA5                    IMX8QM_EMMC0_DATA5              0
+#define IMX8QM_EMMC0_DATA5_CONN_NAND_DATA05                    IMX8QM_EMMC0_DATA5              1
+#define IMX8QM_EMMC0_DATA5_LSIO_GPIO5_IO09                     IMX8QM_EMMC0_DATA5              3
+#define IMX8QM_EMMC0_DATA6_CONN_EMMC0_DATA6                    IMX8QM_EMMC0_DATA6              0
+#define IMX8QM_EMMC0_DATA6_CONN_NAND_DATA06                    IMX8QM_EMMC0_DATA6              1
+#define IMX8QM_EMMC0_DATA6_LSIO_GPIO5_IO10                     IMX8QM_EMMC0_DATA6              3
+#define IMX8QM_EMMC0_DATA7_CONN_EMMC0_DATA7                    IMX8QM_EMMC0_DATA7              0
+#define IMX8QM_EMMC0_DATA7_CONN_NAND_DATA07                    IMX8QM_EMMC0_DATA7              1
+#define IMX8QM_EMMC0_DATA7_LSIO_GPIO5_IO11                     IMX8QM_EMMC0_DATA7              3
+#define IMX8QM_EMMC0_STROBE_CONN_EMMC0_STROBE                  IMX8QM_EMMC0_STROBE             0
+#define IMX8QM_EMMC0_STROBE_CONN_NAND_CLE                      IMX8QM_EMMC0_STROBE             1
+#define IMX8QM_EMMC0_STROBE_LSIO_GPIO5_IO12                    IMX8QM_EMMC0_STROBE             3
+#define IMX8QM_EMMC0_RESET_B_CONN_EMMC0_RESET_B                        IMX8QM_EMMC0_RESET_B            0
+#define IMX8QM_EMMC0_RESET_B_CONN_NAND_WP_B                    IMX8QM_EMMC0_RESET_B            1
+#define IMX8QM_EMMC0_RESET_B_CONN_USDHC1_VSELECT               IMX8QM_EMMC0_RESET_B            2
+#define IMX8QM_EMMC0_RESET_B_LSIO_GPIO5_IO13                   IMX8QM_EMMC0_RESET_B            3
+#define IMX8QM_USDHC1_CLK_CONN_USDHC1_CLK                      IMX8QM_USDHC1_CLK               0
+#define IMX8QM_USDHC1_CLK_AUD_MQS_R                            IMX8QM_USDHC1_CLK               1
+#define IMX8QM_USDHC1_CMD_CONN_USDHC1_CMD                      IMX8QM_USDHC1_CMD               0
+#define IMX8QM_USDHC1_CMD_AUD_MQS_L                            IMX8QM_USDHC1_CMD               1
+#define IMX8QM_USDHC1_CMD_LSIO_GPIO5_IO14                      IMX8QM_USDHC1_CMD               3
+#define IMX8QM_USDHC1_DATA0_CONN_USDHC1_DATA0                  IMX8QM_USDHC1_DATA0             0
+#define IMX8QM_USDHC1_DATA0_CONN_NAND_RE_N                     IMX8QM_USDHC1_DATA0             1
+#define IMX8QM_USDHC1_DATA0_LSIO_GPIO5_IO15                    IMX8QM_USDHC1_DATA0             3
+#define IMX8QM_USDHC1_DATA1_CONN_USDHC1_DATA1                  IMX8QM_USDHC1_DATA1             0
+#define IMX8QM_USDHC1_DATA1_CONN_NAND_RE_P                     IMX8QM_USDHC1_DATA1             1
+#define IMX8QM_USDHC1_DATA1_LSIO_GPIO5_IO16                    IMX8QM_USDHC1_DATA1             3
+#define IMX8QM_USDHC1_DATA2_CONN_USDHC1_DATA2                  IMX8QM_USDHC1_DATA2             0
+#define IMX8QM_USDHC1_DATA2_CONN_NAND_DQS_N                    IMX8QM_USDHC1_DATA2             1
+#define IMX8QM_USDHC1_DATA2_LSIO_GPIO5_IO17                    IMX8QM_USDHC1_DATA2             3
+#define IMX8QM_USDHC1_DATA3_CONN_USDHC1_DATA3                  IMX8QM_USDHC1_DATA3             0
+#define IMX8QM_USDHC1_DATA3_CONN_NAND_DQS_P                    IMX8QM_USDHC1_DATA3             1
+#define IMX8QM_USDHC1_DATA3_LSIO_GPIO5_IO18                    IMX8QM_USDHC1_DATA3             3
+#define IMX8QM_USDHC1_DATA4_CONN_USDHC1_DATA4                  IMX8QM_USDHC1_DATA4             0
+#define IMX8QM_USDHC1_DATA4_CONN_NAND_CE0_B                    IMX8QM_USDHC1_DATA4             1
+#define IMX8QM_USDHC1_DATA4_AUD_MQS_R                          IMX8QM_USDHC1_DATA4             2
+#define IMX8QM_USDHC1_DATA4_LSIO_GPIO5_IO19                    IMX8QM_USDHC1_DATA4             3
+#define IMX8QM_USDHC1_DATA5_CONN_USDHC1_DATA5                  IMX8QM_USDHC1_DATA5             0
+#define IMX8QM_USDHC1_DATA5_CONN_NAND_RE_B                     IMX8QM_USDHC1_DATA5             1
+#define IMX8QM_USDHC1_DATA5_AUD_MQS_L                          IMX8QM_USDHC1_DATA5             2
+#define IMX8QM_USDHC1_DATA5_LSIO_GPIO5_IO20                    IMX8QM_USDHC1_DATA5             3
+#define IMX8QM_USDHC1_DATA6_CONN_USDHC1_DATA6                  IMX8QM_USDHC1_DATA6             0
+#define IMX8QM_USDHC1_DATA6_CONN_NAND_WE_B                     IMX8QM_USDHC1_DATA6             1
+#define IMX8QM_USDHC1_DATA6_CONN_USDHC1_WP                     IMX8QM_USDHC1_DATA6             2
+#define IMX8QM_USDHC1_DATA6_LSIO_GPIO5_IO21                    IMX8QM_USDHC1_DATA6             3
+#define IMX8QM_USDHC1_DATA7_CONN_USDHC1_DATA7                  IMX8QM_USDHC1_DATA7             0
+#define IMX8QM_USDHC1_DATA7_CONN_NAND_ALE                      IMX8QM_USDHC1_DATA7             1
+#define IMX8QM_USDHC1_DATA7_CONN_USDHC1_CD_B                   IMX8QM_USDHC1_DATA7             2
+#define IMX8QM_USDHC1_DATA7_LSIO_GPIO5_IO22                    IMX8QM_USDHC1_DATA7             3
+#define IMX8QM_USDHC1_STROBE_CONN_USDHC1_STROBE                        IMX8QM_USDHC1_STROBE            0
+#define IMX8QM_USDHC1_STROBE_CONN_NAND_CE1_B                   IMX8QM_USDHC1_STROBE            1
+#define IMX8QM_USDHC1_STROBE_CONN_USDHC1_RESET_B               IMX8QM_USDHC1_STROBE            2
+#define IMX8QM_USDHC1_STROBE_LSIO_GPIO5_IO23                   IMX8QM_USDHC1_STROBE            3
+#define IMX8QM_USDHC2_CLK_CONN_USDHC2_CLK                      IMX8QM_USDHC2_CLK               0
+#define IMX8QM_USDHC2_CLK_AUD_MQS_R                            IMX8QM_USDHC2_CLK               1
+#define IMX8QM_USDHC2_CLK_LSIO_GPIO5_IO24                      IMX8QM_USDHC2_CLK               3
+#define IMX8QM_USDHC2_CMD_CONN_USDHC2_CMD                      IMX8QM_USDHC2_CMD               0
+#define IMX8QM_USDHC2_CMD_AUD_MQS_L                            IMX8QM_USDHC2_CMD               1
+#define IMX8QM_USDHC2_CMD_LSIO_GPIO5_IO25                      IMX8QM_USDHC2_CMD               3
+#define IMX8QM_USDHC2_DATA0_CONN_USDHC2_DATA0                  IMX8QM_USDHC2_DATA0             0
+#define IMX8QM_USDHC2_DATA0_DMA_UART4_RX                       IMX8QM_USDHC2_DATA0             1
+#define IMX8QM_USDHC2_DATA0_LSIO_GPIO5_IO26                    IMX8QM_USDHC2_DATA0             3
+#define IMX8QM_USDHC2_DATA1_CONN_USDHC2_DATA1                  IMX8QM_USDHC2_DATA1             0
+#define IMX8QM_USDHC2_DATA1_DMA_UART4_TX                       IMX8QM_USDHC2_DATA1             1
+#define IMX8QM_USDHC2_DATA1_LSIO_GPIO5_IO27                    IMX8QM_USDHC2_DATA1             3
+#define IMX8QM_USDHC2_DATA2_CONN_USDHC2_DATA2                  IMX8QM_USDHC2_DATA2             0
+#define IMX8QM_USDHC2_DATA2_DMA_UART4_CTS_B                    IMX8QM_USDHC2_DATA2             1
+#define IMX8QM_USDHC2_DATA2_LSIO_GPIO5_IO28                    IMX8QM_USDHC2_DATA2             3
+#define IMX8QM_USDHC2_DATA3_CONN_USDHC2_DATA3                  IMX8QM_USDHC2_DATA3             0
+#define IMX8QM_USDHC2_DATA3_DMA_UART4_RTS_B                    IMX8QM_USDHC2_DATA3             1
+#define IMX8QM_USDHC2_DATA3_LSIO_GPIO5_IO29                    IMX8QM_USDHC2_DATA3             3
+#define IMX8QM_ENET0_RGMII_TXC_CONN_ENET0_RGMII_TXC            IMX8QM_ENET0_RGMII_TXC          0
+#define IMX8QM_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_OUT          IMX8QM_ENET0_RGMII_TXC          1
+#define IMX8QM_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_IN           IMX8QM_ENET0_RGMII_TXC          2
+#define IMX8QM_ENET0_RGMII_TXC_LSIO_GPIO5_IO30                 IMX8QM_ENET0_RGMII_TXC          3
+#define IMX8QM_ENET0_RGMII_TX_CTL_CONN_ENET0_RGMII_TX_CTL      IMX8QM_ENET0_RGMII_TX_CTL       0
+#define IMX8QM_ENET0_RGMII_TX_CTL_LSIO_GPIO5_IO31              IMX8QM_ENET0_RGMII_TX_CTL       3
+#define IMX8QM_ENET0_RGMII_TXD0_CONN_ENET0_RGMII_TXD0          IMX8QM_ENET0_RGMII_TXD0         0
+#define IMX8QM_ENET0_RGMII_TXD0_LSIO_GPIO6_IO00                        IMX8QM_ENET0_RGMII_TXD0         3
+#define IMX8QM_ENET0_RGMII_TXD1_CONN_ENET0_RGMII_TXD1          IMX8QM_ENET0_RGMII_TXD1         0
+#define IMX8QM_ENET0_RGMII_TXD1_LSIO_GPIO6_IO01                        IMX8QM_ENET0_RGMII_TXD1         3
+#define IMX8QM_ENET0_RGMII_TXD2_CONN_ENET0_RGMII_TXD2          IMX8QM_ENET0_RGMII_TXD2         0
+#define IMX8QM_ENET0_RGMII_TXD2_DMA_UART3_TX                   IMX8QM_ENET0_RGMII_TXD2         1
+#define IMX8QM_ENET0_RGMII_TXD2_VPU_TSI_S1_VID                 IMX8QM_ENET0_RGMII_TXD2         2
+#define IMX8QM_ENET0_RGMII_TXD2_LSIO_GPIO6_IO02                        IMX8QM_ENET0_RGMII_TXD2         3
+#define IMX8QM_ENET0_RGMII_TXD3_CONN_ENET0_RGMII_TXD3          IMX8QM_ENET0_RGMII_TXD3         0
+#define IMX8QM_ENET0_RGMII_TXD3_DMA_UART3_RTS_B                        IMX8QM_ENET0_RGMII_TXD3         1
+#define IMX8QM_ENET0_RGMII_TXD3_VPU_TSI_S1_SYNC                        IMX8QM_ENET0_RGMII_TXD3         2
+#define IMX8QM_ENET0_RGMII_TXD3_LSIO_GPIO6_IO03                        IMX8QM_ENET0_RGMII_TXD3         3
+#define IMX8QM_ENET0_RGMII_RXC_CONN_ENET0_RGMII_RXC            IMX8QM_ENET0_RGMII_RXC          0
+#define IMX8QM_ENET0_RGMII_RXC_DMA_UART3_CTS_B                 IMX8QM_ENET0_RGMII_RXC          1
+#define IMX8QM_ENET0_RGMII_RXC_VPU_TSI_S1_DATA                 IMX8QM_ENET0_RGMII_RXC          2
+#define IMX8QM_ENET0_RGMII_RXC_LSIO_GPIO6_IO04                 IMX8QM_ENET0_RGMII_RXC          3
+#define IMX8QM_ENET0_RGMII_RX_CTL_CONN_ENET0_RGMII_RX_CTL      IMX8QM_ENET0_RGMII_RX_CTL       0
+#define IMX8QM_ENET0_RGMII_RX_CTL_VPU_TSI_S0_VID               IMX8QM_ENET0_RGMII_RX_CTL       2
+#define IMX8QM_ENET0_RGMII_RX_CTL_LSIO_GPIO6_IO05              IMX8QM_ENET0_RGMII_RX_CTL       3
+#define IMX8QM_ENET0_RGMII_RXD0_CONN_ENET0_RGMII_RXD0          IMX8QM_ENET0_RGMII_RXD0         0
+#define IMX8QM_ENET0_RGMII_RXD0_VPU_TSI_S0_SYNC                        IMX8QM_ENET0_RGMII_RXD0         2
+#define IMX8QM_ENET0_RGMII_RXD0_LSIO_GPIO6_IO06                        IMX8QM_ENET0_RGMII_RXD0         3
+#define IMX8QM_ENET0_RGMII_RXD1_CONN_ENET0_RGMII_RXD1          IMX8QM_ENET0_RGMII_RXD1         0
+#define IMX8QM_ENET0_RGMII_RXD1_VPU_TSI_S0_DATA                        IMX8QM_ENET0_RGMII_RXD1         2
+#define IMX8QM_ENET0_RGMII_RXD1_LSIO_GPIO6_IO07                        IMX8QM_ENET0_RGMII_RXD1         3
+#define IMX8QM_ENET0_RGMII_RXD2_CONN_ENET0_RGMII_RXD2          IMX8QM_ENET0_RGMII_RXD2         0
+#define IMX8QM_ENET0_RGMII_RXD2_CONN_ENET0_RMII_RX_ER          IMX8QM_ENET0_RGMII_RXD2         1
+#define IMX8QM_ENET0_RGMII_RXD2_VPU_TSI_S0_CLK                 IMX8QM_ENET0_RGMII_RXD2         2
+#define IMX8QM_ENET0_RGMII_RXD2_LSIO_GPIO6_IO08                        IMX8QM_ENET0_RGMII_RXD2         3
+#define IMX8QM_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3          IMX8QM_ENET0_RGMII_RXD3         0
+#define IMX8QM_ENET0_RGMII_RXD3_DMA_UART3_RX                   IMX8QM_ENET0_RGMII_RXD3         1
+#define IMX8QM_ENET0_RGMII_RXD3_VPU_TSI_S1_CLK                 IMX8QM_ENET0_RGMII_RXD3         2
+#define IMX8QM_ENET0_RGMII_RXD3_LSIO_GPIO6_IO09                        IMX8QM_ENET0_RGMII_RXD3         3
+#define IMX8QM_ENET1_RGMII_TXC_CONN_ENET1_RGMII_TXC            IMX8QM_ENET1_RGMII_TXC          0
+#define IMX8QM_ENET1_RGMII_TXC_CONN_ENET1_RCLK50M_OUT          IMX8QM_ENET1_RGMII_TXC          1
+#define IMX8QM_ENET1_RGMII_TXC_CONN_ENET1_RCLK50M_IN           IMX8QM_ENET1_RGMII_TXC          2
+#define IMX8QM_ENET1_RGMII_TXC_LSIO_GPIO6_IO10                 IMX8QM_ENET1_RGMII_TXC          3
+#define IMX8QM_ENET1_RGMII_TX_CTL_CONN_ENET1_RGMII_TX_CTL      IMX8QM_ENET1_RGMII_TX_CTL       0
+#define IMX8QM_ENET1_RGMII_TX_CTL_LSIO_GPIO6_IO11              IMX8QM_ENET1_RGMII_TX_CTL       3
+#define IMX8QM_ENET1_RGMII_TXD0_CONN_ENET1_RGMII_TXD0          IMX8QM_ENET1_RGMII_TXD0         0
+#define IMX8QM_ENET1_RGMII_TXD0_LSIO_GPIO6_IO12                        IMX8QM_ENET1_RGMII_TXD0         3
+#define IMX8QM_ENET1_RGMII_TXD1_CONN_ENET1_RGMII_TXD1          IMX8QM_ENET1_RGMII_TXD1         0
+#define IMX8QM_ENET1_RGMII_TXD1_LSIO_GPIO6_IO13                        IMX8QM_ENET1_RGMII_TXD1         3
+#define IMX8QM_ENET1_RGMII_TXD2_CONN_ENET1_RGMII_TXD2          IMX8QM_ENET1_RGMII_TXD2         0
+#define IMX8QM_ENET1_RGMII_TXD2_DMA_UART3_TX                   IMX8QM_ENET1_RGMII_TXD2         1
+#define IMX8QM_ENET1_RGMII_TXD2_VPU_TSI_S1_VID                 IMX8QM_ENET1_RGMII_TXD2         2
+#define IMX8QM_ENET1_RGMII_TXD2_LSIO_GPIO6_IO14                        IMX8QM_ENET1_RGMII_TXD2         3
+#define IMX8QM_ENET1_RGMII_TXD3_CONN_ENET1_RGMII_TXD3          IMX8QM_ENET1_RGMII_TXD3         0
+#define IMX8QM_ENET1_RGMII_TXD3_DMA_UART3_RTS_B                        IMX8QM_ENET1_RGMII_TXD3         1
+#define IMX8QM_ENET1_RGMII_TXD3_VPU_TSI_S1_SYNC                        IMX8QM_ENET1_RGMII_TXD3         2
+#define IMX8QM_ENET1_RGMII_TXD3_LSIO_GPIO6_IO15                        IMX8QM_ENET1_RGMII_TXD3         3
+#define IMX8QM_ENET1_RGMII_RXC_CONN_ENET1_RGMII_RXC            IMX8QM_ENET1_RGMII_RXC          0
+#define IMX8QM_ENET1_RGMII_RXC_DMA_UART3_CTS_B                 IMX8QM_ENET1_RGMII_RXC          1
+#define IMX8QM_ENET1_RGMII_RXC_VPU_TSI_S1_DATA                 IMX8QM_ENET1_RGMII_RXC          2
+#define IMX8QM_ENET1_RGMII_RXC_LSIO_GPIO6_IO16                 IMX8QM_ENET1_RGMII_RXC          3
+#define IMX8QM_ENET1_RGMII_RX_CTL_CONN_ENET1_RGMII_RX_CTL      IMX8QM_ENET1_RGMII_RX_CTL       0
+#define IMX8QM_ENET1_RGMII_RX_CTL_VPU_TSI_S0_VID               IMX8QM_ENET1_RGMII_RX_CTL       2
+#define IMX8QM_ENET1_RGMII_RX_CTL_LSIO_GPIO6_IO17              IMX8QM_ENET1_RGMII_RX_CTL       3
+#define IMX8QM_ENET1_RGMII_RXD0_CONN_ENET1_RGMII_RXD0          IMX8QM_ENET1_RGMII_RXD0         0
+#define IMX8QM_ENET1_RGMII_RXD0_VPU_TSI_S0_SYNC                        IMX8QM_ENET1_RGMII_RXD0         2
+#define IMX8QM_ENET1_RGMII_RXD0_LSIO_GPIO6_IO18                        IMX8QM_ENET1_RGMII_RXD0         3
+#define IMX8QM_ENET1_RGMII_RXD1_CONN_ENET1_RGMII_RXD1          IMX8QM_ENET1_RGMII_RXD1         0
+#define IMX8QM_ENET1_RGMII_RXD1_VPU_TSI_S0_DATA                        IMX8QM_ENET1_RGMII_RXD1         2
+#define IMX8QM_ENET1_RGMII_RXD1_LSIO_GPIO6_IO19                        IMX8QM_ENET1_RGMII_RXD1         3
+#define IMX8QM_ENET1_RGMII_RXD2_CONN_ENET1_RGMII_RXD2          IMX8QM_ENET1_RGMII_RXD2         0
+#define IMX8QM_ENET1_RGMII_RXD2_CONN_ENET1_RMII_RX_ER          IMX8QM_ENET1_RGMII_RXD2         1
+#define IMX8QM_ENET1_RGMII_RXD2_VPU_TSI_S0_CLK                 IMX8QM_ENET1_RGMII_RXD2         2
+#define IMX8QM_ENET1_RGMII_RXD2_LSIO_GPIO6_IO20                        IMX8QM_ENET1_RGMII_RXD2         3
+#define IMX8QM_ENET1_RGMII_RXD3_CONN_ENET1_RGMII_RXD3          IMX8QM_ENET1_RGMII_RXD3         0
+#define IMX8QM_ENET1_RGMII_RXD3_DMA_UART3_RX                   IMX8QM_ENET1_RGMII_RXD3         1
+#define IMX8QM_ENET1_RGMII_RXD3_VPU_TSI_S1_CLK                 IMX8QM_ENET1_RGMII_RXD3         2
+#define IMX8QM_ENET1_RGMII_RXD3_LSIO_GPIO6_IO21                        IMX8QM_ENET1_RGMII_RXD3         3
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB_PAD            IMX8QM_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB         0
+#define IMX8QM_COMP_CTL_GPIO_1V8_3V3_ENET_ENETA_PAD            IMX8QM_COMP_CTL_GPIO_1V8_3V3_ENET_ENETA         0
+
+#endif /* _IMX8QM_PADS_H */
diff --git a/include/dt-bindings/pinctrl/pads-imx8qxp.h b/include/dt-bindings/pinctrl/pads-imx8qxp.h
new file mode 100644 (file)
index 0000000..fbfee7e
--- /dev/null
@@ -0,0 +1,751 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017~2018 NXP
+ */
+
+#ifndef _IMX8QXP_PADS_H
+#define _IMX8QXP_PADS_H
+
+/* pin id */
+#define IMX8QXP_PCIE_CTRL0_PERST_B                  0
+#define IMX8QXP_PCIE_CTRL0_CLKREQ_B                 1
+#define IMX8QXP_PCIE_CTRL0_WAKE_B                   2
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_PCIESEP       3
+#define IMX8QXP_USB_SS3_TC0                         4
+#define IMX8QXP_USB_SS3_TC1                         5
+#define IMX8QXP_USB_SS3_TC2                         6
+#define IMX8QXP_USB_SS3_TC3                         7
+#define IMX8QXP_COMP_CTL_GPIO_3V3_USB3IO            8
+#define IMX8QXP_EMMC0_CLK                           9
+#define IMX8QXP_EMMC0_CMD                           10
+#define IMX8QXP_EMMC0_DATA0                         11
+#define IMX8QXP_EMMC0_DATA1                         12
+#define IMX8QXP_EMMC0_DATA2                         13
+#define IMX8QXP_EMMC0_DATA3                         14
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_SD1FIX0       15
+#define IMX8QXP_EMMC0_DATA4                         16
+#define IMX8QXP_EMMC0_DATA5                         17
+#define IMX8QXP_EMMC0_DATA6                         18
+#define IMX8QXP_EMMC0_DATA7                         19
+#define IMX8QXP_EMMC0_STROBE                        20
+#define IMX8QXP_EMMC0_RESET_B                       21
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_SD1FIX1       22
+#define IMX8QXP_USDHC1_RESET_B                      23
+#define IMX8QXP_USDHC1_VSELECT                      24
+#define IMX8QXP_CTL_NAND_RE_P_N                     25
+#define IMX8QXP_USDHC1_WP                           26
+#define IMX8QXP_USDHC1_CD_B                         27
+#define IMX8QXP_CTL_NAND_DQS_P_N                    28
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_VSELSEP       29
+#define IMX8QXP_USDHC1_CLK                          30
+#define IMX8QXP_USDHC1_CMD                          31
+#define IMX8QXP_USDHC1_DATA0                        32
+#define IMX8QXP_USDHC1_DATA1                        33
+#define IMX8QXP_USDHC1_DATA2                        34
+#define IMX8QXP_USDHC1_DATA3                        35
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_VSEL3         36
+#define IMX8QXP_ENET0_RGMII_TXC                     37
+#define IMX8QXP_ENET0_RGMII_TX_CTL                  38
+#define IMX8QXP_ENET0_RGMII_TXD0                    39
+#define IMX8QXP_ENET0_RGMII_TXD1                    40
+#define IMX8QXP_ENET0_RGMII_TXD2                    41
+#define IMX8QXP_ENET0_RGMII_TXD3                    42
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB0   43
+#define IMX8QXP_ENET0_RGMII_RXC                     44
+#define IMX8QXP_ENET0_RGMII_RX_CTL                  45
+#define IMX8QXP_ENET0_RGMII_RXD0                    46
+#define IMX8QXP_ENET0_RGMII_RXD1                    47
+#define IMX8QXP_ENET0_RGMII_RXD2                    48
+#define IMX8QXP_ENET0_RGMII_RXD3                    49
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_ENET_ENETB1   50
+#define IMX8QXP_ENET0_REFCLK_125M_25M               51
+#define IMX8QXP_ENET0_MDIO                          52
+#define IMX8QXP_ENET0_MDC                           53
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIOCT        54
+#define IMX8QXP_ESAI0_FSR                           55
+#define IMX8QXP_ESAI0_FST                           56
+#define IMX8QXP_ESAI0_SCKR                          57
+#define IMX8QXP_ESAI0_SCKT                          58
+#define IMX8QXP_ESAI0_TX0                           59
+#define IMX8QXP_ESAI0_TX1                           60
+#define IMX8QXP_ESAI0_TX2_RX3                       61
+#define IMX8QXP_ESAI0_TX3_RX2                       62
+#define IMX8QXP_ESAI0_TX4_RX1                       63
+#define IMX8QXP_ESAI0_TX5_RX0                       64
+#define IMX8QXP_SPDIF0_RX                           65
+#define IMX8QXP_SPDIF0_TX                           66
+#define IMX8QXP_SPDIF0_EXT_CLK                      67
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIORHB       68
+#define IMX8QXP_SPI3_SCK                            69
+#define IMX8QXP_SPI3_SDO                            70
+#define IMX8QXP_SPI3_SDI                            71
+#define IMX8QXP_SPI3_CS0                            72
+#define IMX8QXP_SPI3_CS1                            73
+#define IMX8QXP_MCLK_IN1                            74
+#define IMX8QXP_MCLK_IN0                            75
+#define IMX8QXP_MCLK_OUT0                           76
+#define IMX8QXP_UART1_TX                            77
+#define IMX8QXP_UART1_RX                            78
+#define IMX8QXP_UART1_RTS_B                         79
+#define IMX8QXP_UART1_CTS_B                         80
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIORHK       81
+#define IMX8QXP_SAI0_TXD                            82
+#define IMX8QXP_SAI0_TXC                            83
+#define IMX8QXP_SAI0_RXD                            84
+#define IMX8QXP_SAI0_TXFS                           85
+#define IMX8QXP_SAI1_RXD                            86
+#define IMX8QXP_SAI1_RXC                            87
+#define IMX8QXP_SAI1_RXFS                           88
+#define IMX8QXP_SPI2_CS0                            89
+#define IMX8QXP_SPI2_SDO                            90
+#define IMX8QXP_SPI2_SDI                            91
+#define IMX8QXP_SPI2_SCK                            92
+#define IMX8QXP_SPI0_SCK                            93
+#define IMX8QXP_SPI0_SDI                            94
+#define IMX8QXP_SPI0_SDO                            95
+#define IMX8QXP_SPI0_CS1                            96
+#define IMX8QXP_SPI0_CS0                            97
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIORHT       98
+#define IMX8QXP_ADC_IN1                             99
+#define IMX8QXP_ADC_IN0                             100
+#define IMX8QXP_ADC_IN3                             101
+#define IMX8QXP_ADC_IN2                             102
+#define IMX8QXP_ADC_IN5                             103
+#define IMX8QXP_ADC_IN4                             104
+#define IMX8QXP_FLEXCAN0_RX                         105
+#define IMX8QXP_FLEXCAN0_TX                         106
+#define IMX8QXP_FLEXCAN1_RX                         107
+#define IMX8QXP_FLEXCAN1_TX                         108
+#define IMX8QXP_FLEXCAN2_RX                         109
+#define IMX8QXP_FLEXCAN2_TX                         110
+#define IMX8QXP_UART0_RX                            111
+#define IMX8QXP_UART0_TX                            112
+#define IMX8QXP_UART2_TX                            113
+#define IMX8QXP_UART2_RX                            114
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIOLH        115
+#define IMX8QXP_MIPI_DSI0_I2C0_SCL                  116
+#define IMX8QXP_MIPI_DSI0_I2C0_SDA                  117
+#define IMX8QXP_MIPI_DSI0_GPIO0_00                  118
+#define IMX8QXP_MIPI_DSI0_GPIO0_01                  119
+#define IMX8QXP_MIPI_DSI1_I2C0_SCL                  120
+#define IMX8QXP_MIPI_DSI1_I2C0_SDA                  121
+#define IMX8QXP_MIPI_DSI1_GPIO0_00                  122
+#define IMX8QXP_MIPI_DSI1_GPIO0_01                  123
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_MIPIDSIGPIO   124
+#define IMX8QXP_JTAG_TRST_B                         125
+#define IMX8QXP_PMIC_I2C_SCL                        126
+#define IMX8QXP_PMIC_I2C_SDA                        127
+#define IMX8QXP_PMIC_INT_B                          128
+#define IMX8QXP_SCU_GPIO0_00                        129
+#define IMX8QXP_SCU_GPIO0_01                        130
+#define IMX8QXP_SCU_PMIC_STANDBY                    131
+#define IMX8QXP_SCU_BOOT_MODE0                      132
+#define IMX8QXP_SCU_BOOT_MODE1                      133
+#define IMX8QXP_SCU_BOOT_MODE2                      134
+#define IMX8QXP_SCU_BOOT_MODE3                      135
+#define IMX8QXP_CSI_D00                             136
+#define IMX8QXP_CSI_D01                             137
+#define IMX8QXP_CSI_D02                             138
+#define IMX8QXP_CSI_D03                             139
+#define IMX8QXP_CSI_D04                             140
+#define IMX8QXP_CSI_D05                             141
+#define IMX8QXP_CSI_D06                             142
+#define IMX8QXP_CSI_D07                             143
+#define IMX8QXP_CSI_HSYNC                           144
+#define IMX8QXP_CSI_VSYNC                           145
+#define IMX8QXP_CSI_PCLK                            146
+#define IMX8QXP_CSI_MCLK                            147
+#define IMX8QXP_CSI_EN                              148
+#define IMX8QXP_CSI_RESET                           149
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_GPIORHD       150
+#define IMX8QXP_MIPI_CSI0_MCLK_OUT                  151
+#define IMX8QXP_MIPI_CSI0_I2C0_SCL                  152
+#define IMX8QXP_MIPI_CSI0_I2C0_SDA                  153
+#define IMX8QXP_MIPI_CSI0_GPIO0_01                  154
+#define IMX8QXP_MIPI_CSI0_GPIO0_00                  155
+#define IMX8QXP_QSPI0A_DATA0                        156
+#define IMX8QXP_QSPI0A_DATA1                        157
+#define IMX8QXP_QSPI0A_DATA2                        158
+#define IMX8QXP_QSPI0A_DATA3                        159
+#define IMX8QXP_QSPI0A_DQS                          160
+#define IMX8QXP_QSPI0A_SS0_B                        161
+#define IMX8QXP_QSPI0A_SS1_B                        162
+#define IMX8QXP_QSPI0A_SCLK                         163
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_QSPI0A        164
+#define IMX8QXP_QSPI0B_SCLK                         165
+#define IMX8QXP_QSPI0B_DATA0                        166
+#define IMX8QXP_QSPI0B_DATA1                        167
+#define IMX8QXP_QSPI0B_DATA2                        168
+#define IMX8QXP_QSPI0B_DATA3                        169
+#define IMX8QXP_QSPI0B_DQS                          170
+#define IMX8QXP_QSPI0B_SS0_B                        171
+#define IMX8QXP_QSPI0B_SS1_B                        172
+#define IMX8QXP_COMP_CTL_GPIO_1V8_3V3_QSPI0B        173
+
+/*
+ * format: <pin_id mux_mode>
+ */
+#define IMX8QXP_PCIE_CTRL0_PERST_B_HSIO_PCIE0_PERST_B              IMX8QXP_PCIE_CTRL0_PERST_B            0
+#define IMX8QXP_PCIE_CTRL0_PERST_B_LSIO_GPIO4_IO00                 IMX8QXP_PCIE_CTRL0_PERST_B            4
+#define IMX8QXP_PCIE_CTRL0_CLKREQ_B_HSIO_PCIE0_CLKREQ_B            IMX8QXP_PCIE_CTRL0_CLKREQ_B           0
+#define IMX8QXP_PCIE_CTRL0_CLKREQ_B_LSIO_GPIO4_IO01                IMX8QXP_PCIE_CTRL0_CLKREQ_B           4
+#define IMX8QXP_PCIE_CTRL0_WAKE_B_HSIO_PCIE0_WAKE_B                IMX8QXP_PCIE_CTRL0_WAKE_B             0
+#define IMX8QXP_PCIE_CTRL0_WAKE_B_LSIO_GPIO4_IO02                  IMX8QXP_PCIE_CTRL0_WAKE_B             4
+#define IMX8QXP_USB_SS3_TC0_ADMA_I2C1_SCL                          IMX8QXP_USB_SS3_TC0                   0
+#define IMX8QXP_USB_SS3_TC0_CONN_USB_OTG1_PWR                      IMX8QXP_USB_SS3_TC0                   1
+#define IMX8QXP_USB_SS3_TC0_CONN_USB_OTG2_PWR                      IMX8QXP_USB_SS3_TC0                   2
+#define IMX8QXP_USB_SS3_TC0_LSIO_GPIO4_IO03                        IMX8QXP_USB_SS3_TC0                   4
+#define IMX8QXP_USB_SS3_TC1_ADMA_I2C1_SCL                          IMX8QXP_USB_SS3_TC1                   0
+#define IMX8QXP_USB_SS3_TC1_CONN_USB_OTG2_PWR                      IMX8QXP_USB_SS3_TC1                   1
+#define IMX8QXP_USB_SS3_TC1_LSIO_GPIO4_IO04                        IMX8QXP_USB_SS3_TC1                   4
+#define IMX8QXP_USB_SS3_TC2_ADMA_I2C1_SDA                          IMX8QXP_USB_SS3_TC2                   0
+#define IMX8QXP_USB_SS3_TC2_CONN_USB_OTG1_OC                       IMX8QXP_USB_SS3_TC2                   1
+#define IMX8QXP_USB_SS3_TC2_CONN_USB_OTG2_OC                       IMX8QXP_USB_SS3_TC2                   2
+#define IMX8QXP_USB_SS3_TC2_LSIO_GPIO4_IO05                        IMX8QXP_USB_SS3_TC2                   4
+#define IMX8QXP_USB_SS3_TC3_ADMA_I2C1_SDA                          IMX8QXP_USB_SS3_TC3                   0
+#define IMX8QXP_USB_SS3_TC3_CONN_USB_OTG2_OC                       IMX8QXP_USB_SS3_TC3                   1
+#define IMX8QXP_USB_SS3_TC3_LSIO_GPIO4_IO06                        IMX8QXP_USB_SS3_TC3                   4
+#define IMX8QXP_EMMC0_CLK_CONN_EMMC0_CLK                           IMX8QXP_EMMC0_CLK                     0
+#define IMX8QXP_EMMC0_CLK_CONN_NAND_READY_B                        IMX8QXP_EMMC0_CLK                     1
+#define IMX8QXP_EMMC0_CLK_LSIO_GPIO4_IO07                          IMX8QXP_EMMC0_CLK                     4
+#define IMX8QXP_EMMC0_CMD_CONN_EMMC0_CMD                           IMX8QXP_EMMC0_CMD                     0
+#define IMX8QXP_EMMC0_CMD_CONN_NAND_DQS                            IMX8QXP_EMMC0_CMD                     1
+#define IMX8QXP_EMMC0_CMD_LSIO_GPIO4_IO08                          IMX8QXP_EMMC0_CMD                     4
+#define IMX8QXP_EMMC0_DATA0_CONN_EMMC0_DATA0                       IMX8QXP_EMMC0_DATA0                   0
+#define IMX8QXP_EMMC0_DATA0_CONN_NAND_DATA00                       IMX8QXP_EMMC0_DATA0                   1
+#define IMX8QXP_EMMC0_DATA0_LSIO_GPIO4_IO09                        IMX8QXP_EMMC0_DATA0                   4
+#define IMX8QXP_EMMC0_DATA1_CONN_EMMC0_DATA1                       IMX8QXP_EMMC0_DATA1                   0
+#define IMX8QXP_EMMC0_DATA1_CONN_NAND_DATA01                       IMX8QXP_EMMC0_DATA1                   1
+#define IMX8QXP_EMMC0_DATA1_LSIO_GPIO4_IO10                        IMX8QXP_EMMC0_DATA1                   4
+#define IMX8QXP_EMMC0_DATA2_CONN_EMMC0_DATA2                       IMX8QXP_EMMC0_DATA2                   0
+#define IMX8QXP_EMMC0_DATA2_CONN_NAND_DATA02                       IMX8QXP_EMMC0_DATA2                   1
+#define IMX8QXP_EMMC0_DATA2_LSIO_GPIO4_IO11                        IMX8QXP_EMMC0_DATA2                   4
+#define IMX8QXP_EMMC0_DATA3_CONN_EMMC0_DATA3                       IMX8QXP_EMMC0_DATA3                   0
+#define IMX8QXP_EMMC0_DATA3_CONN_NAND_DATA03                       IMX8QXP_EMMC0_DATA3                   1
+#define IMX8QXP_EMMC0_DATA3_LSIO_GPIO4_IO12                        IMX8QXP_EMMC0_DATA3                   4
+#define IMX8QXP_EMMC0_DATA4_CONN_EMMC0_DATA4                       IMX8QXP_EMMC0_DATA4                   0
+#define IMX8QXP_EMMC0_DATA4_CONN_NAND_DATA04                       IMX8QXP_EMMC0_DATA4                   1
+#define IMX8QXP_EMMC0_DATA4_CONN_EMMC0_WP                          IMX8QXP_EMMC0_DATA4                   3
+#define IMX8QXP_EMMC0_DATA4_LSIO_GPIO4_IO13                        IMX8QXP_EMMC0_DATA4                   4
+#define IMX8QXP_EMMC0_DATA5_CONN_EMMC0_DATA5                       IMX8QXP_EMMC0_DATA5                   0
+#define IMX8QXP_EMMC0_DATA5_CONN_NAND_DATA05                       IMX8QXP_EMMC0_DATA5                   1
+#define IMX8QXP_EMMC0_DATA5_CONN_EMMC0_VSELECT                     IMX8QXP_EMMC0_DATA5                   3
+#define IMX8QXP_EMMC0_DATA5_LSIO_GPIO4_IO14                        IMX8QXP_EMMC0_DATA5                   4
+#define IMX8QXP_EMMC0_DATA6_CONN_EMMC0_DATA6                       IMX8QXP_EMMC0_DATA6                   0
+#define IMX8QXP_EMMC0_DATA6_CONN_NAND_DATA06                       IMX8QXP_EMMC0_DATA6                   1
+#define IMX8QXP_EMMC0_DATA6_CONN_MLB_CLK                           IMX8QXP_EMMC0_DATA6                   3
+#define IMX8QXP_EMMC0_DATA6_LSIO_GPIO4_IO15                        IMX8QXP_EMMC0_DATA6                   4
+#define IMX8QXP_EMMC0_DATA7_CONN_EMMC0_DATA7                       IMX8QXP_EMMC0_DATA7                   0
+#define IMX8QXP_EMMC0_DATA7_CONN_NAND_DATA07                       IMX8QXP_EMMC0_DATA7                   1
+#define IMX8QXP_EMMC0_DATA7_CONN_MLB_SIG                           IMX8QXP_EMMC0_DATA7                   3
+#define IMX8QXP_EMMC0_DATA7_LSIO_GPIO4_IO16                        IMX8QXP_EMMC0_DATA7                   4
+#define IMX8QXP_EMMC0_STROBE_CONN_EMMC0_STROBE                     IMX8QXP_EMMC0_STROBE                  0
+#define IMX8QXP_EMMC0_STROBE_CONN_NAND_CLE                         IMX8QXP_EMMC0_STROBE                  1
+#define IMX8QXP_EMMC0_STROBE_CONN_MLB_DATA                         IMX8QXP_EMMC0_STROBE                  3
+#define IMX8QXP_EMMC0_STROBE_LSIO_GPIO4_IO17                       IMX8QXP_EMMC0_STROBE                  4
+#define IMX8QXP_EMMC0_RESET_B_CONN_EMMC0_RESET_B                   IMX8QXP_EMMC0_RESET_B                 0
+#define IMX8QXP_EMMC0_RESET_B_CONN_NAND_WP_B                       IMX8QXP_EMMC0_RESET_B                 1
+#define IMX8QXP_EMMC0_RESET_B_LSIO_GPIO4_IO18                      IMX8QXP_EMMC0_RESET_B                 4
+#define IMX8QXP_USDHC1_RESET_B_CONN_USDHC1_RESET_B                 IMX8QXP_USDHC1_RESET_B                0
+#define IMX8QXP_USDHC1_RESET_B_CONN_NAND_RE_N                      IMX8QXP_USDHC1_RESET_B                1
+#define IMX8QXP_USDHC1_RESET_B_ADMA_SPI2_SCK                       IMX8QXP_USDHC1_RESET_B                2
+#define IMX8QXP_USDHC1_RESET_B_LSIO_GPIO4_IO19                     IMX8QXP_USDHC1_RESET_B                4
+#define IMX8QXP_USDHC1_VSELECT_CONN_USDHC1_VSELECT                 IMX8QXP_USDHC1_VSELECT                0
+#define IMX8QXP_USDHC1_VSELECT_CONN_NAND_RE_P                      IMX8QXP_USDHC1_VSELECT                1
+#define IMX8QXP_USDHC1_VSELECT_ADMA_SPI2_SDO                       IMX8QXP_USDHC1_VSELECT                2
+#define IMX8QXP_USDHC1_VSELECT_CONN_NAND_RE_B                      IMX8QXP_USDHC1_VSELECT                3
+#define IMX8QXP_USDHC1_VSELECT_LSIO_GPIO4_IO20                     IMX8QXP_USDHC1_VSELECT                4
+#define IMX8QXP_USDHC1_WP_CONN_USDHC1_WP                           IMX8QXP_USDHC1_WP                     0
+#define IMX8QXP_USDHC1_WP_CONN_NAND_DQS_N                          IMX8QXP_USDHC1_WP                     1
+#define IMX8QXP_USDHC1_WP_ADMA_SPI2_SDI                            IMX8QXP_USDHC1_WP                     2
+#define IMX8QXP_USDHC1_WP_LSIO_GPIO4_IO21                          IMX8QXP_USDHC1_WP                     4
+#define IMX8QXP_USDHC1_CD_B_CONN_USDHC1_CD_B                       IMX8QXP_USDHC1_CD_B                   0
+#define IMX8QXP_USDHC1_CD_B_CONN_NAND_DQS_P                        IMX8QXP_USDHC1_CD_B                   1
+#define IMX8QXP_USDHC1_CD_B_ADMA_SPI2_CS0                          IMX8QXP_USDHC1_CD_B                   2
+#define IMX8QXP_USDHC1_CD_B_CONN_NAND_DQS                          IMX8QXP_USDHC1_CD_B                   3
+#define IMX8QXP_USDHC1_CD_B_LSIO_GPIO4_IO22                        IMX8QXP_USDHC1_CD_B                   4
+#define IMX8QXP_USDHC1_CLK_CONN_USDHC1_CLK                         IMX8QXP_USDHC1_CLK                    0
+#define IMX8QXP_USDHC1_CLK_ADMA_UART3_RX                           IMX8QXP_USDHC1_CLK                    2
+#define IMX8QXP_USDHC1_CLK_LSIO_GPIO4_IO23                         IMX8QXP_USDHC1_CLK                    4
+#define IMX8QXP_USDHC1_CMD_CONN_USDHC1_CMD                         IMX8QXP_USDHC1_CMD                    0
+#define IMX8QXP_USDHC1_CMD_CONN_NAND_CE0_B                         IMX8QXP_USDHC1_CMD                    1
+#define IMX8QXP_USDHC1_CMD_ADMA_MQS_R                              IMX8QXP_USDHC1_CMD                    2
+#define IMX8QXP_USDHC1_CMD_LSIO_GPIO4_IO24                         IMX8QXP_USDHC1_CMD                    4
+#define IMX8QXP_USDHC1_DATA0_CONN_USDHC1_DATA0                     IMX8QXP_USDHC1_DATA0                  0
+#define IMX8QXP_USDHC1_DATA0_CONN_NAND_CE1_B                       IMX8QXP_USDHC1_DATA0                  1
+#define IMX8QXP_USDHC1_DATA0_ADMA_MQS_L                            IMX8QXP_USDHC1_DATA0                  2
+#define IMX8QXP_USDHC1_DATA0_LSIO_GPIO4_IO25                       IMX8QXP_USDHC1_DATA0                  4
+#define IMX8QXP_USDHC1_DATA1_CONN_USDHC1_DATA1                     IMX8QXP_USDHC1_DATA1                  0
+#define IMX8QXP_USDHC1_DATA1_CONN_NAND_RE_B                        IMX8QXP_USDHC1_DATA1                  1
+#define IMX8QXP_USDHC1_DATA1_ADMA_UART3_TX                         IMX8QXP_USDHC1_DATA1                  2
+#define IMX8QXP_USDHC1_DATA1_LSIO_GPIO4_IO26                       IMX8QXP_USDHC1_DATA1                  4
+#define IMX8QXP_USDHC1_DATA2_CONN_USDHC1_DATA2                     IMX8QXP_USDHC1_DATA2                  0
+#define IMX8QXP_USDHC1_DATA2_CONN_NAND_WE_B                        IMX8QXP_USDHC1_DATA2                  1
+#define IMX8QXP_USDHC1_DATA2_ADMA_UART3_CTS_B                      IMX8QXP_USDHC1_DATA2                  2
+#define IMX8QXP_USDHC1_DATA2_LSIO_GPIO4_IO27                       IMX8QXP_USDHC1_DATA2                  4
+#define IMX8QXP_USDHC1_DATA3_CONN_USDHC1_DATA3                     IMX8QXP_USDHC1_DATA3                  0
+#define IMX8QXP_USDHC1_DATA3_CONN_NAND_ALE                         IMX8QXP_USDHC1_DATA3                  1
+#define IMX8QXP_USDHC1_DATA3_ADMA_UART3_RTS_B                      IMX8QXP_USDHC1_DATA3                  2
+#define IMX8QXP_USDHC1_DATA3_LSIO_GPIO4_IO28                       IMX8QXP_USDHC1_DATA3                  4
+#define IMX8QXP_ENET0_RGMII_TXC_CONN_ENET0_RGMII_TXC               IMX8QXP_ENET0_RGMII_TXC               0
+#define IMX8QXP_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_OUT             IMX8QXP_ENET0_RGMII_TXC               1
+#define IMX8QXP_ENET0_RGMII_TXC_CONN_ENET0_RCLK50M_IN              IMX8QXP_ENET0_RGMII_TXC               2
+#define IMX8QXP_ENET0_RGMII_TXC_CONN_NAND_CE1_B                    IMX8QXP_ENET0_RGMII_TXC               3
+#define IMX8QXP_ENET0_RGMII_TXC_LSIO_GPIO4_IO29                    IMX8QXP_ENET0_RGMII_TXC               4
+#define IMX8QXP_ENET0_RGMII_TX_CTL_CONN_ENET0_RGMII_TX_CTL         IMX8QXP_ENET0_RGMII_TX_CTL            0
+#define IMX8QXP_ENET0_RGMII_TX_CTL_CONN_USDHC1_RESET_B             IMX8QXP_ENET0_RGMII_TX_CTL            3
+#define IMX8QXP_ENET0_RGMII_TX_CTL_LSIO_GPIO4_IO30                 IMX8QXP_ENET0_RGMII_TX_CTL            4
+#define IMX8QXP_ENET0_RGMII_TXD0_CONN_ENET0_RGMII_TXD0             IMX8QXP_ENET0_RGMII_TXD0              0
+#define IMX8QXP_ENET0_RGMII_TXD0_CONN_USDHC1_VSELECT               IMX8QXP_ENET0_RGMII_TXD0              3
+#define IMX8QXP_ENET0_RGMII_TXD0_LSIO_GPIO4_IO31                   IMX8QXP_ENET0_RGMII_TXD0              4
+#define IMX8QXP_ENET0_RGMII_TXD1_CONN_ENET0_RGMII_TXD1             IMX8QXP_ENET0_RGMII_TXD1              0
+#define IMX8QXP_ENET0_RGMII_TXD1_CONN_USDHC1_WP                    IMX8QXP_ENET0_RGMII_TXD1              3
+#define IMX8QXP_ENET0_RGMII_TXD1_LSIO_GPIO5_IO00                   IMX8QXP_ENET0_RGMII_TXD1              4
+#define IMX8QXP_ENET0_RGMII_TXD2_CONN_ENET0_RGMII_TXD2             IMX8QXP_ENET0_RGMII_TXD2              0
+#define IMX8QXP_ENET0_RGMII_TXD2_CONN_MLB_CLK                      IMX8QXP_ENET0_RGMII_TXD2              1
+#define IMX8QXP_ENET0_RGMII_TXD2_CONN_NAND_CE0_B                   IMX8QXP_ENET0_RGMII_TXD2              2
+#define IMX8QXP_ENET0_RGMII_TXD2_CONN_USDHC1_CD_B                  IMX8QXP_ENET0_RGMII_TXD2              3
+#define IMX8QXP_ENET0_RGMII_TXD2_LSIO_GPIO5_IO01                   IMX8QXP_ENET0_RGMII_TXD2              4
+#define IMX8QXP_ENET0_RGMII_TXD3_CONN_ENET0_RGMII_TXD3             IMX8QXP_ENET0_RGMII_TXD3              0
+#define IMX8QXP_ENET0_RGMII_TXD3_CONN_MLB_SIG                      IMX8QXP_ENET0_RGMII_TXD3              1
+#define IMX8QXP_ENET0_RGMII_TXD3_CONN_NAND_RE_B                    IMX8QXP_ENET0_RGMII_TXD3              2
+#define IMX8QXP_ENET0_RGMII_TXD3_LSIO_GPIO5_IO02                   IMX8QXP_ENET0_RGMII_TXD3              4
+#define IMX8QXP_ENET0_RGMII_RXC_CONN_ENET0_RGMII_RXC               IMX8QXP_ENET0_RGMII_RXC               0
+#define IMX8QXP_ENET0_RGMII_RXC_CONN_MLB_DATA                      IMX8QXP_ENET0_RGMII_RXC               1
+#define IMX8QXP_ENET0_RGMII_RXC_CONN_NAND_WE_B                     IMX8QXP_ENET0_RGMII_RXC               2
+#define IMX8QXP_ENET0_RGMII_RXC_CONN_USDHC1_CLK                    IMX8QXP_ENET0_RGMII_RXC               3
+#define IMX8QXP_ENET0_RGMII_RXC_LSIO_GPIO5_IO03                    IMX8QXP_ENET0_RGMII_RXC               4
+#define IMX8QXP_ENET0_RGMII_RX_CTL_CONN_ENET0_RGMII_RX_CTL         IMX8QXP_ENET0_RGMII_RX_CTL            0
+#define IMX8QXP_ENET0_RGMII_RX_CTL_CONN_USDHC1_CMD                 IMX8QXP_ENET0_RGMII_RX_CTL            3
+#define IMX8QXP_ENET0_RGMII_RX_CTL_LSIO_GPIO5_IO04                 IMX8QXP_ENET0_RGMII_RX_CTL            4
+#define IMX8QXP_ENET0_RGMII_RXD0_CONN_ENET0_RGMII_RXD0             IMX8QXP_ENET0_RGMII_RXD0              0
+#define IMX8QXP_ENET0_RGMII_RXD0_CONN_USDHC1_DATA0                 IMX8QXP_ENET0_RGMII_RXD0              3
+#define IMX8QXP_ENET0_RGMII_RXD0_LSIO_GPIO5_IO05                   IMX8QXP_ENET0_RGMII_RXD0              4
+#define IMX8QXP_ENET0_RGMII_RXD1_CONN_ENET0_RGMII_RXD1             IMX8QXP_ENET0_RGMII_RXD1              0
+#define IMX8QXP_ENET0_RGMII_RXD1_CONN_USDHC1_DATA1                 IMX8QXP_ENET0_RGMII_RXD1              3
+#define IMX8QXP_ENET0_RGMII_RXD1_LSIO_GPIO5_IO06                   IMX8QXP_ENET0_RGMII_RXD1              4
+#define IMX8QXP_ENET0_RGMII_RXD2_CONN_ENET0_RGMII_RXD2             IMX8QXP_ENET0_RGMII_RXD2              0
+#define IMX8QXP_ENET0_RGMII_RXD2_CONN_ENET0_RMII_RX_ER             IMX8QXP_ENET0_RGMII_RXD2              1
+#define IMX8QXP_ENET0_RGMII_RXD2_CONN_USDHC1_DATA2                 IMX8QXP_ENET0_RGMII_RXD2              3
+#define IMX8QXP_ENET0_RGMII_RXD2_LSIO_GPIO5_IO07                   IMX8QXP_ENET0_RGMII_RXD2              4
+#define IMX8QXP_ENET0_RGMII_RXD3_CONN_ENET0_RGMII_RXD3             IMX8QXP_ENET0_RGMII_RXD3              0
+#define IMX8QXP_ENET0_RGMII_RXD3_CONN_NAND_ALE                     IMX8QXP_ENET0_RGMII_RXD3              2
+#define IMX8QXP_ENET0_RGMII_RXD3_CONN_USDHC1_DATA3                 IMX8QXP_ENET0_RGMII_RXD3              3
+#define IMX8QXP_ENET0_RGMII_RXD3_LSIO_GPIO5_IO08                   IMX8QXP_ENET0_RGMII_RXD3              4
+#define IMX8QXP_ENET0_REFCLK_125M_25M_CONN_ENET0_REFCLK_125M_25M   IMX8QXP_ENET0_REFCLK_125M_25M         0
+#define IMX8QXP_ENET0_REFCLK_125M_25M_CONN_ENET0_PPS               IMX8QXP_ENET0_REFCLK_125M_25M         1
+#define IMX8QXP_ENET0_REFCLK_125M_25M_CONN_ENET1_PPS               IMX8QXP_ENET0_REFCLK_125M_25M         2
+#define IMX8QXP_ENET0_REFCLK_125M_25M_LSIO_GPIO5_IO09              IMX8QXP_ENET0_REFCLK_125M_25M         4
+#define IMX8QXP_ENET0_MDIO_CONN_ENET0_MDIO                         IMX8QXP_ENET0_MDIO                    0
+#define IMX8QXP_ENET0_MDIO_ADMA_I2C3_SDA                           IMX8QXP_ENET0_MDIO                    1
+#define IMX8QXP_ENET0_MDIO_CONN_ENET1_MDIO                         IMX8QXP_ENET0_MDIO                    2
+#define IMX8QXP_ENET0_MDIO_LSIO_GPIO5_IO10                         IMX8QXP_ENET0_MDIO                    4
+#define IMX8QXP_ENET0_MDC_CONN_ENET0_MDC                           IMX8QXP_ENET0_MDC                     0
+#define IMX8QXP_ENET0_MDC_ADMA_I2C3_SCL                            IMX8QXP_ENET0_MDC                     1
+#define IMX8QXP_ENET0_MDC_CONN_ENET1_MDC                           IMX8QXP_ENET0_MDC                     2
+#define IMX8QXP_ENET0_MDC_LSIO_GPIO5_IO11                          IMX8QXP_ENET0_MDC                     4
+#define IMX8QXP_ESAI0_FSR_ADMA_ESAI0_FSR                           IMX8QXP_ESAI0_FSR                     0
+#define IMX8QXP_ESAI0_FSR_CONN_ENET1_RCLK50M_OUT                   IMX8QXP_ESAI0_FSR                     1
+#define IMX8QXP_ESAI0_FSR_ADMA_LCDIF_D00                           IMX8QXP_ESAI0_FSR                     2
+#define IMX8QXP_ESAI0_FSR_CONN_ENET1_RGMII_TXC                     IMX8QXP_ESAI0_FSR                     3
+#define IMX8QXP_ESAI0_FSR_CONN_ENET1_RCLK50M_IN                    IMX8QXP_ESAI0_FSR                     4
+#define IMX8QXP_ESAI0_FST_ADMA_ESAI0_FST                           IMX8QXP_ESAI0_FST                     0
+#define IMX8QXP_ESAI0_FST_CONN_MLB_CLK                             IMX8QXP_ESAI0_FST                     1
+#define IMX8QXP_ESAI0_FST_ADMA_LCDIF_D01                           IMX8QXP_ESAI0_FST                     2
+#define IMX8QXP_ESAI0_FST_CONN_ENET1_RGMII_TXD2                    IMX8QXP_ESAI0_FST                     3
+#define IMX8QXP_ESAI0_FST_LSIO_GPIO0_IO01                          IMX8QXP_ESAI0_FST                     4
+#define IMX8QXP_ESAI0_SCKR_ADMA_ESAI0_SCKR                         IMX8QXP_ESAI0_SCKR                    0
+#define IMX8QXP_ESAI0_SCKR_ADMA_LCDIF_D02                          IMX8QXP_ESAI0_SCKR                    2
+#define IMX8QXP_ESAI0_SCKR_CONN_ENET1_RGMII_TX_CTL                 IMX8QXP_ESAI0_SCKR                    3
+#define IMX8QXP_ESAI0_SCKR_LSIO_GPIO0_IO02                         IMX8QXP_ESAI0_SCKR                    4
+#define IMX8QXP_ESAI0_SCKT_ADMA_ESAI0_SCKT                         IMX8QXP_ESAI0_SCKT                    0
+#define IMX8QXP_ESAI0_SCKT_CONN_MLB_SIG                            IMX8QXP_ESAI0_SCKT                    1
+#define IMX8QXP_ESAI0_SCKT_ADMA_LCDIF_D03                          IMX8QXP_ESAI0_SCKT                    2
+#define IMX8QXP_ESAI0_SCKT_CONN_ENET1_RGMII_TXD3                   IMX8QXP_ESAI0_SCKT                    3
+#define IMX8QXP_ESAI0_SCKT_LSIO_GPIO0_IO03                         IMX8QXP_ESAI0_SCKT                    4
+#define IMX8QXP_ESAI0_TX0_ADMA_ESAI0_TX0                           IMX8QXP_ESAI0_TX0                     0
+#define IMX8QXP_ESAI0_TX0_CONN_MLB_DATA                            IMX8QXP_ESAI0_TX0                     1
+#define IMX8QXP_ESAI0_TX0_ADMA_LCDIF_D04                           IMX8QXP_ESAI0_TX0                     2
+#define IMX8QXP_ESAI0_TX0_CONN_ENET1_RGMII_RXC                     IMX8QXP_ESAI0_TX0                     3
+#define IMX8QXP_ESAI0_TX0_LSIO_GPIO0_IO04                          IMX8QXP_ESAI0_TX0                     4
+#define IMX8QXP_ESAI0_TX1_ADMA_ESAI0_TX1                           IMX8QXP_ESAI0_TX1                     0
+#define IMX8QXP_ESAI0_TX1_ADMA_LCDIF_D05                           IMX8QXP_ESAI0_TX1                     2
+#define IMX8QXP_ESAI0_TX1_CONN_ENET1_RGMII_RXD3                    IMX8QXP_ESAI0_TX1                     3
+#define IMX8QXP_ESAI0_TX1_LSIO_GPIO0_IO05                          IMX8QXP_ESAI0_TX1                     4
+#define IMX8QXP_ESAI0_TX2_RX3_ADMA_ESAI0_TX2_RX3                   IMX8QXP_ESAI0_TX2_RX3                 0
+#define IMX8QXP_ESAI0_TX2_RX3_CONN_ENET1_RMII_RX_ER                IMX8QXP_ESAI0_TX2_RX3                 1
+#define IMX8QXP_ESAI0_TX2_RX3_ADMA_LCDIF_D06                       IMX8QXP_ESAI0_TX2_RX3                 2
+#define IMX8QXP_ESAI0_TX2_RX3_CONN_ENET1_RGMII_RXD2                IMX8QXP_ESAI0_TX2_RX3                 3
+#define IMX8QXP_ESAI0_TX2_RX3_LSIO_GPIO0_IO06                      IMX8QXP_ESAI0_TX2_RX3                 4
+#define IMX8QXP_ESAI0_TX3_RX2_ADMA_ESAI0_TX3_RX2                   IMX8QXP_ESAI0_TX3_RX2                 0
+#define IMX8QXP_ESAI0_TX3_RX2_ADMA_LCDIF_D07                       IMX8QXP_ESAI0_TX3_RX2                 2
+#define IMX8QXP_ESAI0_TX3_RX2_CONN_ENET1_RGMII_RXD1                IMX8QXP_ESAI0_TX3_RX2                 3
+#define IMX8QXP_ESAI0_TX3_RX2_LSIO_GPIO0_IO07                      IMX8QXP_ESAI0_TX3_RX2                 4
+#define IMX8QXP_ESAI0_TX4_RX1_ADMA_ESAI0_TX4_RX1                   IMX8QXP_ESAI0_TX4_RX1                 0
+#define IMX8QXP_ESAI0_TX4_RX1_ADMA_LCDIF_D08                       IMX8QXP_ESAI0_TX4_RX1                 2
+#define IMX8QXP_ESAI0_TX4_RX1_CONN_ENET1_RGMII_TXD0                IMX8QXP_ESAI0_TX4_RX1                 3
+#define IMX8QXP_ESAI0_TX4_RX1_LSIO_GPIO0_IO08                      IMX8QXP_ESAI0_TX4_RX1                 4
+#define IMX8QXP_ESAI0_TX5_RX0_ADMA_ESAI0_TX5_RX0                   IMX8QXP_ESAI0_TX5_RX0                 0
+#define IMX8QXP_ESAI0_TX5_RX0_ADMA_LCDIF_D09                       IMX8QXP_ESAI0_TX5_RX0                 2
+#define IMX8QXP_ESAI0_TX5_RX0_CONN_ENET1_RGMII_TXD1                IMX8QXP_ESAI0_TX5_RX0                 3
+#define IMX8QXP_ESAI0_TX5_RX0_LSIO_GPIO0_IO09                      IMX8QXP_ESAI0_TX5_RX0                 4
+#define IMX8QXP_SPDIF0_RX_ADMA_SPDIF0_RX                           IMX8QXP_SPDIF0_RX                     0
+#define IMX8QXP_SPDIF0_RX_ADMA_MQS_R                               IMX8QXP_SPDIF0_RX                     1
+#define IMX8QXP_SPDIF0_RX_ADMA_LCDIF_D10                           IMX8QXP_SPDIF0_RX                     2
+#define IMX8QXP_SPDIF0_RX_CONN_ENET1_RGMII_RXD0                    IMX8QXP_SPDIF0_RX                     3
+#define IMX8QXP_SPDIF0_RX_LSIO_GPIO0_IO10                          IMX8QXP_SPDIF0_RX                     4
+#define IMX8QXP_SPDIF0_TX_ADMA_SPDIF0_TX                           IMX8QXP_SPDIF0_TX                     0
+#define IMX8QXP_SPDIF0_TX_ADMA_MQS_L                               IMX8QXP_SPDIF0_TX                     1
+#define IMX8QXP_SPDIF0_TX_ADMA_LCDIF_D11                           IMX8QXP_SPDIF0_TX                     2
+#define IMX8QXP_SPDIF0_TX_CONN_ENET1_RGMII_RX_CTL                  IMX8QXP_SPDIF0_TX                     3
+#define IMX8QXP_SPDIF0_TX_LSIO_GPIO0_IO11                          IMX8QXP_SPDIF0_TX                     4
+#define IMX8QXP_SPDIF0_EXT_CLK_ADMA_SPDIF0_EXT_CLK                 IMX8QXP_SPDIF0_EXT_CLK                0
+#define IMX8QXP_SPDIF0_EXT_CLK_ADMA_LCDIF_D12                      IMX8QXP_SPDIF0_EXT_CLK                2
+#define IMX8QXP_SPDIF0_EXT_CLK_CONN_ENET1_REFCLK_125M_25M          IMX8QXP_SPDIF0_EXT_CLK                3
+#define IMX8QXP_SPDIF0_EXT_CLK_LSIO_GPIO0_IO12                     IMX8QXP_SPDIF0_EXT_CLK                4
+#define IMX8QXP_SPI3_SCK_ADMA_SPI3_SCK                             IMX8QXP_SPI3_SCK                      0
+#define IMX8QXP_SPI3_SCK_ADMA_LCDIF_D13                            IMX8QXP_SPI3_SCK                      2
+#define IMX8QXP_SPI3_SCK_LSIO_GPIO0_IO13                           IMX8QXP_SPI3_SCK                      4
+#define IMX8QXP_SPI3_SDO_ADMA_SPI3_SDO                             IMX8QXP_SPI3_SDO                      0
+#define IMX8QXP_SPI3_SDO_ADMA_LCDIF_D14                            IMX8QXP_SPI3_SDO                      2
+#define IMX8QXP_SPI3_SDO_LSIO_GPIO0_IO14                           IMX8QXP_SPI3_SDO                      4
+#define IMX8QXP_SPI3_SDI_ADMA_SPI3_SDI                             IMX8QXP_SPI3_SDI                      0
+#define IMX8QXP_SPI3_SDI_ADMA_LCDIF_D15                            IMX8QXP_SPI3_SDI                      2
+#define IMX8QXP_SPI3_SDI_LSIO_GPIO0_IO15                           IMX8QXP_SPI3_SDI                      4
+#define IMX8QXP_SPI3_CS0_ADMA_SPI3_CS0                             IMX8QXP_SPI3_CS0                      0
+#define IMX8QXP_SPI3_CS0_ADMA_ACM_MCLK_OUT1                        IMX8QXP_SPI3_CS0                      1
+#define IMX8QXP_SPI3_CS0_ADMA_LCDIF_HSYNC                          IMX8QXP_SPI3_CS0                      2
+#define IMX8QXP_SPI3_CS0_LSIO_GPIO0_IO16                           IMX8QXP_SPI3_CS0                      4
+#define IMX8QXP_SPI3_CS1_ADMA_SPI3_CS1                             IMX8QXP_SPI3_CS1                      0
+#define IMX8QXP_SPI3_CS1_ADMA_I2C3_SCL                             IMX8QXP_SPI3_CS1                      1
+#define IMX8QXP_SPI3_CS1_ADMA_LCDIF_RESET                          IMX8QXP_SPI3_CS1                      2
+#define IMX8QXP_SPI3_CS1_ADMA_SPI2_CS0                             IMX8QXP_SPI3_CS1                      3
+#define IMX8QXP_SPI3_CS1_ADMA_LCDIF_D16                            IMX8QXP_SPI3_CS1                      4
+#define IMX8QXP_MCLK_IN1_ADMA_ACM_MCLK_IN1                         IMX8QXP_MCLK_IN1                      0
+#define IMX8QXP_MCLK_IN1_ADMA_I2C3_SDA                             IMX8QXP_MCLK_IN1                      1
+#define IMX8QXP_MCLK_IN1_ADMA_LCDIF_EN                             IMX8QXP_MCLK_IN1                      2
+#define IMX8QXP_MCLK_IN1_ADMA_SPI2_SCK                             IMX8QXP_MCLK_IN1                      3
+#define IMX8QXP_MCLK_IN1_ADMA_LCDIF_D17                            IMX8QXP_MCLK_IN1                      4
+#define IMX8QXP_MCLK_IN0_ADMA_ACM_MCLK_IN0                         IMX8QXP_MCLK_IN0                      0
+#define IMX8QXP_MCLK_IN0_ADMA_ESAI0_RX_HF_CLK                      IMX8QXP_MCLK_IN0                      1
+#define IMX8QXP_MCLK_IN0_ADMA_LCDIF_VSYNC                          IMX8QXP_MCLK_IN0                      2
+#define IMX8QXP_MCLK_IN0_ADMA_SPI2_SDI                             IMX8QXP_MCLK_IN0                      3
+#define IMX8QXP_MCLK_IN0_LSIO_GPIO0_IO19                           IMX8QXP_MCLK_IN0                      4
+#define IMX8QXP_MCLK_OUT0_ADMA_ACM_MCLK_OUT0                       IMX8QXP_MCLK_OUT0                     0
+#define IMX8QXP_MCLK_OUT0_ADMA_ESAI0_TX_HF_CLK                     IMX8QXP_MCLK_OUT0                     1
+#define IMX8QXP_MCLK_OUT0_ADMA_LCDIF_CLK                           IMX8QXP_MCLK_OUT0                     2
+#define IMX8QXP_MCLK_OUT0_ADMA_SPI2_SDO                            IMX8QXP_MCLK_OUT0                     3
+#define IMX8QXP_MCLK_OUT0_LSIO_GPIO0_IO20                          IMX8QXP_MCLK_OUT0                     4
+#define IMX8QXP_UART1_TX_ADMA_UART1_TX                             IMX8QXP_UART1_TX                      0
+#define IMX8QXP_UART1_TX_LSIO_PWM0_OUT                             IMX8QXP_UART1_TX                      1
+#define IMX8QXP_UART1_TX_LSIO_GPT0_CAPTURE                         IMX8QXP_UART1_TX                      2
+#define IMX8QXP_UART1_TX_LSIO_GPIO0_IO21                           IMX8QXP_UART1_TX                      4
+#define IMX8QXP_UART1_RX_ADMA_UART1_RX                             IMX8QXP_UART1_RX                      0
+#define IMX8QXP_UART1_RX_LSIO_PWM1_OUT                             IMX8QXP_UART1_RX                      1
+#define IMX8QXP_UART1_RX_LSIO_GPT0_COMPARE                         IMX8QXP_UART1_RX                      2
+#define IMX8QXP_UART1_RX_LSIO_GPT1_CLK                             IMX8QXP_UART1_RX                      3
+#define IMX8QXP_UART1_RX_LSIO_GPIO0_IO22                           IMX8QXP_UART1_RX                      4
+#define IMX8QXP_UART1_RTS_B_ADMA_UART1_RTS_B                       IMX8QXP_UART1_RTS_B                   0
+#define IMX8QXP_UART1_RTS_B_LSIO_PWM2_OUT                          IMX8QXP_UART1_RTS_B                   1
+#define IMX8QXP_UART1_RTS_B_ADMA_LCDIF_D16                         IMX8QXP_UART1_RTS_B                   2
+#define IMX8QXP_UART1_RTS_B_LSIO_GPT1_CAPTURE                      IMX8QXP_UART1_RTS_B                   3
+#define IMX8QXP_UART1_RTS_B_LSIO_GPT0_CLK                          IMX8QXP_UART1_RTS_B                   4
+#define IMX8QXP_UART1_CTS_B_ADMA_UART1_CTS_B                       IMX8QXP_UART1_CTS_B                   0
+#define IMX8QXP_UART1_CTS_B_LSIO_PWM3_OUT                          IMX8QXP_UART1_CTS_B                   1
+#define IMX8QXP_UART1_CTS_B_ADMA_LCDIF_D17                         IMX8QXP_UART1_CTS_B                   2
+#define IMX8QXP_UART1_CTS_B_LSIO_GPT1_COMPARE                      IMX8QXP_UART1_CTS_B                   3
+#define IMX8QXP_UART1_CTS_B_LSIO_GPIO0_IO24                        IMX8QXP_UART1_CTS_B                   4
+#define IMX8QXP_SAI0_TXD_ADMA_SAI0_TXD                             IMX8QXP_SAI0_TXD                      0
+#define IMX8QXP_SAI0_TXD_ADMA_SAI1_RXC                             IMX8QXP_SAI0_TXD                      1
+#define IMX8QXP_SAI0_TXD_ADMA_SPI1_SDO                             IMX8QXP_SAI0_TXD                      2
+#define IMX8QXP_SAI0_TXD_ADMA_LCDIF_D18                            IMX8QXP_SAI0_TXD                      3
+#define IMX8QXP_SAI0_TXD_LSIO_GPIO0_IO25                           IMX8QXP_SAI0_TXD                      4
+#define IMX8QXP_SAI0_TXC_ADMA_SAI0_TXC                             IMX8QXP_SAI0_TXC                      0
+#define IMX8QXP_SAI0_TXC_ADMA_SAI1_TXD                             IMX8QXP_SAI0_TXC                      1
+#define IMX8QXP_SAI0_TXC_ADMA_SPI1_SDI                             IMX8QXP_SAI0_TXC                      2
+#define IMX8QXP_SAI0_TXC_ADMA_LCDIF_D19                            IMX8QXP_SAI0_TXC                      3
+#define IMX8QXP_SAI0_TXC_LSIO_GPIO0_IO26                           IMX8QXP_SAI0_TXC                      4
+#define IMX8QXP_SAI0_RXD_ADMA_SAI0_RXD                             IMX8QXP_SAI0_RXD                      0
+#define IMX8QXP_SAI0_RXD_ADMA_SAI1_RXFS                            IMX8QXP_SAI0_RXD                      1
+#define IMX8QXP_SAI0_RXD_ADMA_SPI1_CS0                             IMX8QXP_SAI0_RXD                      2
+#define IMX8QXP_SAI0_RXD_ADMA_LCDIF_D20                            IMX8QXP_SAI0_RXD                      3
+#define IMX8QXP_SAI0_RXD_LSIO_GPIO0_IO27                           IMX8QXP_SAI0_RXD                      4
+#define IMX8QXP_SAI0_TXFS_ADMA_SAI0_TXFS                           IMX8QXP_SAI0_TXFS                     0
+#define IMX8QXP_SAI0_TXFS_ADMA_SPI2_CS1                            IMX8QXP_SAI0_TXFS                     1
+#define IMX8QXP_SAI0_TXFS_ADMA_SPI1_SCK                            IMX8QXP_SAI0_TXFS                     2
+#define IMX8QXP_SAI0_TXFS_LSIO_GPIO0_IO28                          IMX8QXP_SAI0_TXFS                     4
+#define IMX8QXP_SAI1_RXD_ADMA_SAI1_RXD                             IMX8QXP_SAI1_RXD                      0
+#define IMX8QXP_SAI1_RXD_ADMA_SAI0_RXFS                            IMX8QXP_SAI1_RXD                      1
+#define IMX8QXP_SAI1_RXD_ADMA_SPI1_CS1                             IMX8QXP_SAI1_RXD                      2
+#define IMX8QXP_SAI1_RXD_ADMA_LCDIF_D21                            IMX8QXP_SAI1_RXD                      3
+#define IMX8QXP_SAI1_RXD_LSIO_GPIO0_IO29                           IMX8QXP_SAI1_RXD                      4
+#define IMX8QXP_SAI1_RXC_ADMA_SAI1_RXC                             IMX8QXP_SAI1_RXC                      0
+#define IMX8QXP_SAI1_RXC_ADMA_SAI1_TXC                             IMX8QXP_SAI1_RXC                      1
+#define IMX8QXP_SAI1_RXC_ADMA_LCDIF_D22                            IMX8QXP_SAI1_RXC                      3
+#define IMX8QXP_SAI1_RXC_LSIO_GPIO0_IO30                           IMX8QXP_SAI1_RXC                      4
+#define IMX8QXP_SAI1_RXFS_ADMA_SAI1_RXFS                           IMX8QXP_SAI1_RXFS                     0
+#define IMX8QXP_SAI1_RXFS_ADMA_SAI1_TXFS                           IMX8QXP_SAI1_RXFS                     1
+#define IMX8QXP_SAI1_RXFS_ADMA_LCDIF_D23                           IMX8QXP_SAI1_RXFS                     3
+#define IMX8QXP_SAI1_RXFS_LSIO_GPIO0_IO31                          IMX8QXP_SAI1_RXFS                     4
+#define IMX8QXP_SPI2_CS0_ADMA_SPI2_CS0                             IMX8QXP_SPI2_CS0                      0
+#define IMX8QXP_SPI2_CS0_LSIO_GPIO1_IO00                           IMX8QXP_SPI2_CS0                      4
+#define IMX8QXP_SPI2_SDO_ADMA_SPI2_SDO                             IMX8QXP_SPI2_SDO                      0
+#define IMX8QXP_SPI2_SDO_LSIO_GPIO1_IO01                           IMX8QXP_SPI2_SDO                      4
+#define IMX8QXP_SPI2_SDI_ADMA_SPI2_SDI                             IMX8QXP_SPI2_SDI                      0
+#define IMX8QXP_SPI2_SDI_LSIO_GPIO1_IO02                           IMX8QXP_SPI2_SDI                      4
+#define IMX8QXP_SPI2_SCK_ADMA_SPI2_SCK                             IMX8QXP_SPI2_SCK                      0
+#define IMX8QXP_SPI2_SCK_LSIO_GPIO1_IO03                           IMX8QXP_SPI2_SCK                      4
+#define IMX8QXP_SPI0_SCK_ADMA_SPI0_SCK                             IMX8QXP_SPI0_SCK                      0
+#define IMX8QXP_SPI0_SCK_ADMA_SAI0_TXC                             IMX8QXP_SPI0_SCK                      1
+#define IMX8QXP_SPI0_SCK_M40_I2C0_SCL                              IMX8QXP_SPI0_SCK                      2
+#define IMX8QXP_SPI0_SCK_M40_GPIO0_IO00                            IMX8QXP_SPI0_SCK                      3
+#define IMX8QXP_SPI0_SCK_LSIO_GPIO1_IO04                           IMX8QXP_SPI0_SCK                      4
+#define IMX8QXP_SPI0_SDI_ADMA_SPI0_SDI                             IMX8QXP_SPI0_SDI                      0
+#define IMX8QXP_SPI0_SDI_ADMA_SAI0_TXD                             IMX8QXP_SPI0_SDI                      1
+#define IMX8QXP_SPI0_SDI_M40_TPM0_CH0                              IMX8QXP_SPI0_SDI                      2
+#define IMX8QXP_SPI0_SDI_M40_GPIO0_IO02                            IMX8QXP_SPI0_SDI                      3
+#define IMX8QXP_SPI0_SDI_LSIO_GPIO1_IO05                           IMX8QXP_SPI0_SDI                      4
+#define IMX8QXP_SPI0_SDO_ADMA_SPI0_SDO                             IMX8QXP_SPI0_SDO                      0
+#define IMX8QXP_SPI0_SDO_ADMA_SAI0_TXFS                            IMX8QXP_SPI0_SDO                      1
+#define IMX8QXP_SPI0_SDO_M40_I2C0_SDA                              IMX8QXP_SPI0_SDO                      2
+#define IMX8QXP_SPI0_SDO_M40_GPIO0_IO01                            IMX8QXP_SPI0_SDO                      3
+#define IMX8QXP_SPI0_SDO_LSIO_GPIO1_IO06                           IMX8QXP_SPI0_SDO                      4
+#define IMX8QXP_SPI0_CS1_ADMA_SPI0_CS1                             IMX8QXP_SPI0_CS1                      0
+#define IMX8QXP_SPI0_CS1_ADMA_SAI0_RXC                             IMX8QXP_SPI0_CS1                      1
+#define IMX8QXP_SPI0_CS1_ADMA_SAI1_TXD                             IMX8QXP_SPI0_CS1                      2
+#define IMX8QXP_SPI0_CS1_ADMA_LCD_PWM0_OUT                         IMX8QXP_SPI0_CS1                      3
+#define IMX8QXP_SPI0_CS1_LSIO_GPIO1_IO07                           IMX8QXP_SPI0_CS1                      4
+#define IMX8QXP_SPI0_CS0_ADMA_SPI0_CS0                             IMX8QXP_SPI0_CS0                      0
+#define IMX8QXP_SPI0_CS0_ADMA_SAI0_RXD                             IMX8QXP_SPI0_CS0                      1
+#define IMX8QXP_SPI0_CS0_M40_TPM0_CH1                              IMX8QXP_SPI0_CS0                      2
+#define IMX8QXP_SPI0_CS0_M40_GPIO0_IO03                            IMX8QXP_SPI0_CS0                      3
+#define IMX8QXP_SPI0_CS0_LSIO_GPIO1_IO08                           IMX8QXP_SPI0_CS0                      4
+#define IMX8QXP_ADC_IN1_ADMA_ADC_IN1                               IMX8QXP_ADC_IN1                       0
+#define IMX8QXP_ADC_IN1_M40_I2C0_SDA                               IMX8QXP_ADC_IN1                       1
+#define IMX8QXP_ADC_IN1_M40_GPIO0_IO01                             IMX8QXP_ADC_IN1                       2
+#define IMX8QXP_ADC_IN1_LSIO_GPIO1_IO09                            IMX8QXP_ADC_IN1                       4
+#define IMX8QXP_ADC_IN0_ADMA_ADC_IN0                               IMX8QXP_ADC_IN0                       0
+#define IMX8QXP_ADC_IN0_M40_I2C0_SCL                               IMX8QXP_ADC_IN0                       1
+#define IMX8QXP_ADC_IN0_M40_GPIO0_IO00                             IMX8QXP_ADC_IN0                       2
+#define IMX8QXP_ADC_IN0_LSIO_GPIO1_IO10                            IMX8QXP_ADC_IN0                       4
+#define IMX8QXP_ADC_IN3_ADMA_ADC_IN3                               IMX8QXP_ADC_IN3                       0
+#define IMX8QXP_ADC_IN3_M40_UART0_TX                               IMX8QXP_ADC_IN3                       1
+#define IMX8QXP_ADC_IN3_M40_GPIO0_IO03                             IMX8QXP_ADC_IN3                       2
+#define IMX8QXP_ADC_IN3_ADMA_ACM_MCLK_OUT0                         IMX8QXP_ADC_IN3                       3
+#define IMX8QXP_ADC_IN3_LSIO_GPIO1_IO11                            IMX8QXP_ADC_IN3                       4
+#define IMX8QXP_ADC_IN2_ADMA_ADC_IN2                               IMX8QXP_ADC_IN2                       0
+#define IMX8QXP_ADC_IN2_M40_UART0_RX                               IMX8QXP_ADC_IN2                       1
+#define IMX8QXP_ADC_IN2_M40_GPIO0_IO02                             IMX8QXP_ADC_IN2                       2
+#define IMX8QXP_ADC_IN2_ADMA_ACM_MCLK_IN0                          IMX8QXP_ADC_IN2                       3
+#define IMX8QXP_ADC_IN2_LSIO_GPIO1_IO12                            IMX8QXP_ADC_IN2                       4
+#define IMX8QXP_ADC_IN5_ADMA_ADC_IN5                               IMX8QXP_ADC_IN5                       0
+#define IMX8QXP_ADC_IN5_M40_TPM0_CH1                               IMX8QXP_ADC_IN5                       1
+#define IMX8QXP_ADC_IN5_M40_GPIO0_IO05                             IMX8QXP_ADC_IN5                       2
+#define IMX8QXP_ADC_IN5_LSIO_GPIO1_IO13                            IMX8QXP_ADC_IN5                       4
+#define IMX8QXP_ADC_IN4_ADMA_ADC_IN4                               IMX8QXP_ADC_IN4                       0
+#define IMX8QXP_ADC_IN4_M40_TPM0_CH0                               IMX8QXP_ADC_IN4                       1
+#define IMX8QXP_ADC_IN4_M40_GPIO0_IO04                             IMX8QXP_ADC_IN4                       2
+#define IMX8QXP_ADC_IN4_LSIO_GPIO1_IO14                            IMX8QXP_ADC_IN4                       4
+#define IMX8QXP_FLEXCAN0_RX_ADMA_FLEXCAN0_RX                       IMX8QXP_FLEXCAN0_RX                   0
+#define IMX8QXP_FLEXCAN0_RX_ADMA_SAI2_RXC                          IMX8QXP_FLEXCAN0_RX                   1
+#define IMX8QXP_FLEXCAN0_RX_ADMA_UART0_RTS_B                       IMX8QXP_FLEXCAN0_RX                   2
+#define IMX8QXP_FLEXCAN0_RX_ADMA_SAI1_TXC                          IMX8QXP_FLEXCAN0_RX                   3
+#define IMX8QXP_FLEXCAN0_RX_LSIO_GPIO1_IO15                        IMX8QXP_FLEXCAN0_RX                   4
+#define IMX8QXP_FLEXCAN0_TX_ADMA_FLEXCAN0_TX                       IMX8QXP_FLEXCAN0_TX                   0
+#define IMX8QXP_FLEXCAN0_TX_ADMA_SAI2_RXD                          IMX8QXP_FLEXCAN0_TX                   1
+#define IMX8QXP_FLEXCAN0_TX_ADMA_UART0_CTS_B                       IMX8QXP_FLEXCAN0_TX                   2
+#define IMX8QXP_FLEXCAN0_TX_ADMA_SAI1_TXFS                         IMX8QXP_FLEXCAN0_TX                   3
+#define IMX8QXP_FLEXCAN0_TX_LSIO_GPIO1_IO16                        IMX8QXP_FLEXCAN0_TX                   4
+#define IMX8QXP_FLEXCAN1_RX_ADMA_FLEXCAN1_RX                       IMX8QXP_FLEXCAN1_RX                   0
+#define IMX8QXP_FLEXCAN1_RX_ADMA_SAI2_RXFS                         IMX8QXP_FLEXCAN1_RX                   1
+#define IMX8QXP_FLEXCAN1_RX_ADMA_FTM_CH2                           IMX8QXP_FLEXCAN1_RX                   2
+#define IMX8QXP_FLEXCAN1_RX_ADMA_SAI1_TXD                          IMX8QXP_FLEXCAN1_RX                   3
+#define IMX8QXP_FLEXCAN1_RX_LSIO_GPIO1_IO17                        IMX8QXP_FLEXCAN1_RX                   4
+#define IMX8QXP_FLEXCAN1_TX_ADMA_FLEXCAN1_TX                       IMX8QXP_FLEXCAN1_TX                   0
+#define IMX8QXP_FLEXCAN1_TX_ADMA_SAI3_RXC                          IMX8QXP_FLEXCAN1_TX                   1
+#define IMX8QXP_FLEXCAN1_TX_ADMA_DMA0_REQ_IN0                      IMX8QXP_FLEXCAN1_TX                   2
+#define IMX8QXP_FLEXCAN1_TX_ADMA_SAI1_RXD                          IMX8QXP_FLEXCAN1_TX                   3
+#define IMX8QXP_FLEXCAN1_TX_LSIO_GPIO1_IO18                        IMX8QXP_FLEXCAN1_TX                   4
+#define IMX8QXP_FLEXCAN2_RX_ADMA_FLEXCAN2_RX                       IMX8QXP_FLEXCAN2_RX                   0
+#define IMX8QXP_FLEXCAN2_RX_ADMA_SAI3_RXD                          IMX8QXP_FLEXCAN2_RX                   1
+#define IMX8QXP_FLEXCAN2_RX_ADMA_UART3_RX                          IMX8QXP_FLEXCAN2_RX                   2
+#define IMX8QXP_FLEXCAN2_RX_ADMA_SAI1_RXFS                         IMX8QXP_FLEXCAN2_RX                   3
+#define IMX8QXP_FLEXCAN2_RX_LSIO_GPIO1_IO19                        IMX8QXP_FLEXCAN2_RX                   4
+#define IMX8QXP_FLEXCAN2_TX_ADMA_FLEXCAN2_TX                       IMX8QXP_FLEXCAN2_TX                   0
+#define IMX8QXP_FLEXCAN2_TX_ADMA_SAI3_RXFS                         IMX8QXP_FLEXCAN2_TX                   1
+#define IMX8QXP_FLEXCAN2_TX_ADMA_UART3_TX                          IMX8QXP_FLEXCAN2_TX                   2
+#define IMX8QXP_FLEXCAN2_TX_ADMA_SAI1_RXC                          IMX8QXP_FLEXCAN2_TX                   3
+#define IMX8QXP_FLEXCAN2_TX_LSIO_GPIO1_IO20                        IMX8QXP_FLEXCAN2_TX                   4
+#define IMX8QXP_UART0_RX_ADMA_UART0_RX                             IMX8QXP_UART0_RX                      0
+#define IMX8QXP_UART0_RX_ADMA_MQS_R                                IMX8QXP_UART0_RX                      1
+#define IMX8QXP_UART0_RX_ADMA_FLEXCAN0_RX                          IMX8QXP_UART0_RX                      2
+#define IMX8QXP_UART0_RX_LSIO_GPIO1_IO21                           IMX8QXP_UART0_RX                      4
+#define IMX8QXP_UART0_TX_ADMA_UART0_TX                             IMX8QXP_UART0_TX                      0
+#define IMX8QXP_UART0_TX_ADMA_MQS_L                                IMX8QXP_UART0_TX                      1
+#define IMX8QXP_UART0_TX_ADMA_FLEXCAN0_TX                          IMX8QXP_UART0_TX                      2
+#define IMX8QXP_UART0_TX_LSIO_GPIO1_IO22                           IMX8QXP_UART0_TX                      4
+#define IMX8QXP_UART2_TX_ADMA_UART2_TX                             IMX8QXP_UART2_TX                      0
+#define IMX8QXP_UART2_TX_ADMA_FTM_CH1                              IMX8QXP_UART2_TX                      1
+#define IMX8QXP_UART2_TX_ADMA_FLEXCAN1_TX                          IMX8QXP_UART2_TX                      2
+#define IMX8QXP_UART2_TX_LSIO_GPIO1_IO23                           IMX8QXP_UART2_TX                      4
+#define IMX8QXP_UART2_RX_ADMA_UART2_RX                             IMX8QXP_UART2_RX                      0
+#define IMX8QXP_UART2_RX_ADMA_FTM_CH0                              IMX8QXP_UART2_RX                      1
+#define IMX8QXP_UART2_RX_ADMA_FLEXCAN1_RX                          IMX8QXP_UART2_RX                      2
+#define IMX8QXP_UART2_RX_LSIO_GPIO1_IO24                           IMX8QXP_UART2_RX                      4
+#define IMX8QXP_MIPI_DSI0_I2C0_SCL_MIPI_DSI0_I2C0_SCL              IMX8QXP_MIPI_DSI0_I2C0_SCL            0
+#define IMX8QXP_MIPI_DSI0_I2C0_SCL_MIPI_DSI1_GPIO0_IO02            IMX8QXP_MIPI_DSI0_I2C0_SCL            1
+#define IMX8QXP_MIPI_DSI0_I2C0_SCL_LSIO_GPIO1_IO25                 IMX8QXP_MIPI_DSI0_I2C0_SCL            4
+#define IMX8QXP_MIPI_DSI0_I2C0_SDA_MIPI_DSI0_I2C0_SDA              IMX8QXP_MIPI_DSI0_I2C0_SDA            0
+#define IMX8QXP_MIPI_DSI0_I2C0_SDA_MIPI_DSI1_GPIO0_IO03            IMX8QXP_MIPI_DSI0_I2C0_SDA            1
+#define IMX8QXP_MIPI_DSI0_I2C0_SDA_LSIO_GPIO1_IO26                 IMX8QXP_MIPI_DSI0_I2C0_SDA            4
+#define IMX8QXP_MIPI_DSI0_GPIO0_00_MIPI_DSI0_GPIO0_IO00            IMX8QXP_MIPI_DSI0_GPIO0_00            0
+#define IMX8QXP_MIPI_DSI0_GPIO0_00_ADMA_I2C1_SCL                   IMX8QXP_MIPI_DSI0_GPIO0_00            1
+#define IMX8QXP_MIPI_DSI0_GPIO0_00_MIPI_DSI0_PWM0_OUT              IMX8QXP_MIPI_DSI0_GPIO0_00            2
+#define IMX8QXP_MIPI_DSI0_GPIO0_00_LSIO_GPIO1_IO27                 IMX8QXP_MIPI_DSI0_GPIO0_00            4
+#define IMX8QXP_MIPI_DSI0_GPIO0_01_MIPI_DSI0_GPIO0_IO01            IMX8QXP_MIPI_DSI0_GPIO0_01            0
+#define IMX8QXP_MIPI_DSI0_GPIO0_01_ADMA_I2C1_SDA                   IMX8QXP_MIPI_DSI0_GPIO0_01            1
+#define IMX8QXP_MIPI_DSI0_GPIO0_01_LSIO_GPIO1_IO28                 IMX8QXP_MIPI_DSI0_GPIO0_01            4
+#define IMX8QXP_MIPI_DSI1_I2C0_SCL_MIPI_DSI1_I2C0_SCL              IMX8QXP_MIPI_DSI1_I2C0_SCL            0
+#define IMX8QXP_MIPI_DSI1_I2C0_SCL_MIPI_DSI0_GPIO0_IO02            IMX8QXP_MIPI_DSI1_I2C0_SCL            1
+#define IMX8QXP_MIPI_DSI1_I2C0_SCL_LSIO_GPIO1_IO29                 IMX8QXP_MIPI_DSI1_I2C0_SCL            4
+#define IMX8QXP_MIPI_DSI1_I2C0_SDA_MIPI_DSI1_I2C0_SDA              IMX8QXP_MIPI_DSI1_I2C0_SDA            0
+#define IMX8QXP_MIPI_DSI1_I2C0_SDA_MIPI_DSI0_GPIO0_IO03            IMX8QXP_MIPI_DSI1_I2C0_SDA            1
+#define IMX8QXP_MIPI_DSI1_I2C0_SDA_LSIO_GPIO1_IO30                 IMX8QXP_MIPI_DSI1_I2C0_SDA            4
+#define IMX8QXP_MIPI_DSI1_GPIO0_00_MIPI_DSI1_GPIO0_IO00            IMX8QXP_MIPI_DSI1_GPIO0_00            0
+#define IMX8QXP_MIPI_DSI1_GPIO0_00_ADMA_I2C2_SCL                   IMX8QXP_MIPI_DSI1_GPIO0_00            1
+#define IMX8QXP_MIPI_DSI1_GPIO0_00_MIPI_DSI1_PWM0_OUT              IMX8QXP_MIPI_DSI1_GPIO0_00            2
+#define IMX8QXP_MIPI_DSI1_GPIO0_00_LSIO_GPIO1_IO31                 IMX8QXP_MIPI_DSI1_GPIO0_00            4
+#define IMX8QXP_MIPI_DSI1_GPIO0_01_MIPI_DSI1_GPIO0_IO01            IMX8QXP_MIPI_DSI1_GPIO0_01            0
+#define IMX8QXP_MIPI_DSI1_GPIO0_01_ADMA_I2C2_SDA                   IMX8QXP_MIPI_DSI1_GPIO0_01            1
+#define IMX8QXP_MIPI_DSI1_GPIO0_01_LSIO_GPIO2_IO00                 IMX8QXP_MIPI_DSI1_GPIO0_01            4
+#define IMX8QXP_JTAG_TRST_B_SCU_JTAG_TRST_B                        IMX8QXP_JTAG_TRST_B                   0
+#define IMX8QXP_JTAG_TRST_B_SCU_WDOG0_WDOG_OUT                     IMX8QXP_JTAG_TRST_B                   1
+#define IMX8QXP_PMIC_I2C_SCL_SCU_PMIC_I2C_SCL                      IMX8QXP_PMIC_I2C_SCL                  0
+#define IMX8QXP_PMIC_I2C_SCL_SCU_GPIO0_IOXX_PMIC_A35_ON            IMX8QXP_PMIC_I2C_SCL                  1
+#define IMX8QXP_PMIC_I2C_SCL_LSIO_GPIO2_IO01                       IMX8QXP_PMIC_I2C_SCL                  4
+#define IMX8QXP_PMIC_I2C_SDA_SCU_PMIC_I2C_SDA                      IMX8QXP_PMIC_I2C_SDA                  0
+#define IMX8QXP_PMIC_I2C_SDA_SCU_GPIO0_IOXX_PMIC_GPU_ON            IMX8QXP_PMIC_I2C_SDA                  1
+#define IMX8QXP_PMIC_I2C_SDA_LSIO_GPIO2_IO02                       IMX8QXP_PMIC_I2C_SDA                  4
+#define IMX8QXP_PMIC_INT_B_SCU_DIMX8QXPMIC_INT_B                      IMX8QXP_PMIC_INT_B                    0
+#define IMX8QXP_SCU_GPIO0_00_SCU_GPIO0_IO00                        IMX8QXP_SCU_GPIO0_00                  0
+#define IMX8QXP_SCU_GPIO0_00_SCU_UART0_RX                          IMX8QXP_SCU_GPIO0_00                  1
+#define IMX8QXP_SCU_GPIO0_00_M40_UART0_RX                          IMX8QXP_SCU_GPIO0_00                  2
+#define IMX8QXP_SCU_GPIO0_00_ADMA_UART3_RX                         IMX8QXP_SCU_GPIO0_00                  3
+#define IMX8QXP_SCU_GPIO0_00_LSIO_GPIO2_IO03                       IMX8QXP_SCU_GPIO0_00                  4
+#define IMX8QXP_SCU_GPIO0_01_SCU_GPIO0_IO01                        IMX8QXP_SCU_GPIO0_01                  0
+#define IMX8QXP_SCU_GPIO0_01_SCU_UART0_TX                          IMX8QXP_SCU_GPIO0_01                  1
+#define IMX8QXP_SCU_GPIO0_01_M40_UART0_TX                          IMX8QXP_SCU_GPIO0_01                  2
+#define IMX8QXP_SCU_GPIO0_01_ADMA_UART3_TX                         IMX8QXP_SCU_GPIO0_01                  3
+#define IMX8QXP_SCU_GPIO0_01_SCU_WDOG0_WDOG_OUT                    IMX8QXP_SCU_GPIO0_01                  4
+#define IMX8QXP_SCU_PMIC_STANDBY_SCU_DIMX8QXPMIC_STANDBY              IMX8QXP_SCU_PMIC_STANDBY              0
+#define IMX8QXP_SCU_BOOT_MODE0_SCU_DSC_BOOT_MODE0                  IMX8QXP_SCU_BOOT_MODE0                0
+#define IMX8QXP_SCU_BOOT_MODE1_SCU_DSC_BOOT_MODE1                  IMX8QXP_SCU_BOOT_MODE1                0
+#define IMX8QXP_SCU_BOOT_MODE2_SCU_DSC_BOOT_MODE2                  IMX8QXP_SCU_BOOT_MODE2                0
+#define IMX8QXP_SCU_BOOT_MODE2_SCU_PMIC_I2C_SDA                    IMX8QXP_SCU_BOOT_MODE2                1
+#define IMX8QXP_SCU_BOOT_MODE3_SCU_DSC_BOOT_MODE3                  IMX8QXP_SCU_BOOT_MODE3                0
+#define IMX8QXP_SCU_BOOT_MODE3_SCU_PMIC_I2C_SCL                    IMX8QXP_SCU_BOOT_MODE3                1
+#define IMX8QXP_SCU_BOOT_MODE3_SCU_DSC_RTC_CLOCK_OUTPUT_32K        IMX8QXP_SCU_BOOT_MODE3                3
+#define IMX8QXP_CSI_D00_CI_PI_D02                                  IMX8QXP_CSI_D00                       0
+#define IMX8QXP_CSI_D00_ADMA_SAI0_RXC                              IMX8QXP_CSI_D00                       2
+#define IMX8QXP_CSI_D01_CI_PI_D03                                  IMX8QXP_CSI_D01                       0
+#define IMX8QXP_CSI_D01_ADMA_SAI0_RXD                              IMX8QXP_CSI_D01                       2
+#define IMX8QXP_CSI_D02_CI_PI_D04                                  IMX8QXP_CSI_D02                       0
+#define IMX8QXP_CSI_D02_ADMA_SAI0_RXFS                             IMX8QXP_CSI_D02                       2
+#define IMX8QXP_CSI_D03_CI_PI_D05                                  IMX8QXP_CSI_D03                       0
+#define IMX8QXP_CSI_D03_ADMA_SAI2_RXC                              IMX8QXP_CSI_D03                       2
+#define IMX8QXP_CSI_D04_CI_PI_D06                                  IMX8QXP_CSI_D04                       0
+#define IMX8QXP_CSI_D04_ADMA_SAI2_RXD                              IMX8QXP_CSI_D04                       2
+#define IMX8QXP_CSI_D05_CI_PI_D07                                  IMX8QXP_CSI_D05                       0
+#define IMX8QXP_CSI_D05_ADMA_SAI2_RXFS                             IMX8QXP_CSI_D05                       2
+#define IMX8QXP_CSI_D06_CI_PI_D08                                  IMX8QXP_CSI_D06                       0
+#define IMX8QXP_CSI_D06_ADMA_SAI3_RXC                              IMX8QXP_CSI_D06                       2
+#define IMX8QXP_CSI_D07_CI_PI_D09                                  IMX8QXP_CSI_D07                       0
+#define IMX8QXP_CSI_D07_ADMA_SAI3_RXD                              IMX8QXP_CSI_D07                       2
+#define IMX8QXP_CSI_HSYNC_CI_PI_HSYNC                              IMX8QXP_CSI_HSYNC                     0
+#define IMX8QXP_CSI_HSYNC_CI_PI_D00                                IMX8QXP_CSI_HSYNC                     1
+#define IMX8QXP_CSI_HSYNC_ADMA_SAI3_RXFS                           IMX8QXP_CSI_HSYNC                     2
+#define IMX8QXP_CSI_VSYNC_CI_PI_VSYNC                              IMX8QXP_CSI_VSYNC                     0
+#define IMX8QXP_CSI_VSYNC_CI_PI_D01                                IMX8QXP_CSI_VSYNC                     1
+#define IMX8QXP_CSI_PCLK_CI_PI_PCLK                                IMX8QXP_CSI_PCLK                      0
+#define IMX8QXP_CSI_PCLK_MIPI_CSI0_I2C0_SCL                        IMX8QXP_CSI_PCLK                      1
+#define IMX8QXP_CSI_PCLK_ADMA_SPI1_SCK                             IMX8QXP_CSI_PCLK                      3
+#define IMX8QXP_CSI_PCLK_LSIO_GPIO3_IO00                           IMX8QXP_CSI_PCLK                      4
+#define IMX8QXP_CSI_MCLK_CI_PI_MCLK                                IMX8QXP_CSI_MCLK                      0
+#define IMX8QXP_CSI_MCLK_MIPI_CSI0_I2C0_SDA                        IMX8QXP_CSI_MCLK                      1
+#define IMX8QXP_CSI_MCLK_ADMA_SPI1_SDO                             IMX8QXP_CSI_MCLK                      3
+#define IMX8QXP_CSI_MCLK_LSIO_GPIO3_IO01                           IMX8QXP_CSI_MCLK                      4
+#define IMX8QXP_CSI_EN_CI_PI_EN                                    IMX8QXP_CSI_EN                        0
+#define IMX8QXP_CSI_EN_CI_PI_I2C_SCL                               IMX8QXP_CSI_EN                        1
+#define IMX8QXP_CSI_EN_ADMA_I2C3_SCL                               IMX8QXP_CSI_EN                        2
+#define IMX8QXP_CSI_EN_ADMA_SPI1_SDI                               IMX8QXP_CSI_EN                        3
+#define IMX8QXP_CSI_EN_LSIO_GPIO3_IO02                             IMX8QXP_CSI_EN                        4
+#define IMX8QXP_CSI_RESET_CI_PI_RESET                              IMX8QXP_CSI_RESET                     0
+#define IMX8QXP_CSI_RESET_CI_PI_I2C_SDA                            IMX8QXP_CSI_RESET                     1
+#define IMX8QXP_CSI_RESET_ADMA_I2C3_SDA                            IMX8QXP_CSI_RESET                     2
+#define IMX8QXP_CSI_RESET_ADMA_SPI1_CS0                            IMX8QXP_CSI_RESET                     3
+#define IMX8QXP_CSI_RESET_LSIO_GPIO3_IO03                          IMX8QXP_CSI_RESET                     4
+#define IMX8QXP_MIPI_CSI0_MCLK_OUT_MIPI_CSI0_ACM_MCLK_OUT          IMX8QXP_MIPI_CSI0_MCLK_OUT            0
+#define IMX8QXP_MIPI_CSI0_MCLK_OUT_LSIO_GPIO3_IO04                 IMX8QXP_MIPI_CSI0_MCLK_OUT            4
+#define IMX8QXP_MIPI_CSI0_I2C0_SCL_MIPI_CSI0_I2C0_SCL              IMX8QXP_MIPI_CSI0_I2C0_SCL            0
+#define IMX8QXP_MIPI_CSI0_I2C0_SCL_MIPI_CSI0_GPIO0_IO02            IMX8QXP_MIPI_CSI0_I2C0_SCL            1
+#define IMX8QXP_MIPI_CSI0_I2C0_SCL_LSIO_GPIO3_IO05                 IMX8QXP_MIPI_CSI0_I2C0_SCL            4
+#define IMX8QXP_MIPI_CSI0_I2C0_SDA_MIPI_CSI0_I2C0_SDA              IMX8QXP_MIPI_CSI0_I2C0_SDA            0
+#define IMX8QXP_MIPI_CSI0_I2C0_SDA_MIPI_CSI0_GPIO0_IO03            IMX8QXP_MIPI_CSI0_I2C0_SDA            1
+#define IMX8QXP_MIPI_CSI0_I2C0_SDA_LSIO_GPIO3_IO06                 IMX8QXP_MIPI_CSI0_I2C0_SDA            4
+#define IMX8QXP_MIPI_CSI0_GPIO0_01_MIPI_CSI0_GPIO0_IO01            IMX8QXP_MIPI_CSI0_GPIO0_01            0
+#define IMX8QXP_MIPI_CSI0_GPIO0_01_ADMA_I2C0_SDA                   IMX8QXP_MIPI_CSI0_GPIO0_01            1
+#define IMX8QXP_MIPI_CSI0_GPIO0_01_LSIO_GPIO3_IO07                 IMX8QXP_MIPI_CSI0_GPIO0_01            4
+#define IMX8QXP_MIPI_CSI0_GPIO0_00_MIPI_CSI0_GPIO0_IO00            IMX8QXP_MIPI_CSI0_GPIO0_00            0
+#define IMX8QXP_MIPI_CSI0_GPIO0_00_ADMA_I2C0_SCL                   IMX8QXP_MIPI_CSI0_GPIO0_00            1
+#define IMX8QXP_MIPI_CSI0_GPIO0_00_LSIO_GPIO3_IO08                 IMX8QXP_MIPI_CSI0_GPIO0_00            4
+#define IMX8QXP_QSPI0A_DATA0_LSIO_QSPI0A_DATA0                     IMX8QXP_QSPI0A_DATA0                  0
+#define IMX8QXP_QSPI0A_DATA0_LSIO_GPIO3_IO09                       IMX8QXP_QSPI0A_DATA0                  4
+#define IMX8QXP_QSPI0A_DATA1_LSIO_QSPI0A_DATA1                     IMX8QXP_QSPI0A_DATA1                  0
+#define IMX8QXP_QSPI0A_DATA1_LSIO_GPIO3_IO10                       IMX8QXP_QSPI0A_DATA1                  4
+#define IMX8QXP_QSPI0A_DATA2_LSIO_QSPI0A_DATA2                     IMX8QXP_QSPI0A_DATA2                  0
+#define IMX8QXP_QSPI0A_DATA2_LSIO_GPIO3_IO11                       IMX8QXP_QSPI0A_DATA2                  4
+#define IMX8QXP_QSPI0A_DATA3_LSIO_QSPI0A_DATA3                     IMX8QXP_QSPI0A_DATA3                  0
+#define IMX8QXP_QSPI0A_DATA3_LSIO_GPIO3_IO12                       IMX8QXP_QSPI0A_DATA3                  4
+#define IMX8QXP_QSPI0A_DQS_LSIO_QSPI0A_DQS                         IMX8QXP_QSPI0A_DQS                    0
+#define IMX8QXP_QSPI0A_DQS_LSIO_GPIO3_IO13                         IMX8QXP_QSPI0A_DQS                    4
+#define IMX8QXP_QSPI0A_SS0_B_LSIO_QSPI0A_SS0_B                     IMX8QXP_QSPI0A_SS0_B                  0
+#define IMX8QXP_QSPI0A_SS0_B_LSIO_GPIO3_IO14                       IMX8QXP_QSPI0A_SS0_B                  4
+#define IMX8QXP_QSPI0A_SS1_B_LSIO_QSPI0A_SS1_B                     IMX8QXP_QSPI0A_SS1_B                  0
+#define IMX8QXP_QSPI0A_SS1_B_LSIO_GPIO3_IO15                       IMX8QXP_QSPI0A_SS1_B                  4
+#define IMX8QXP_QSPI0A_SCLK_LSIO_QSPI0A_SCLK                       IMX8QXP_QSPI0A_SCLK                   0
+#define IMX8QXP_QSPI0A_SCLK_LSIO_GPIO3_IO16                        IMX8QXP_QSPI0A_SCLK                   4
+#define IMX8QXP_QSPI0B_SCLK_LSIO_QSPI0B_SCLK                       IMX8QXP_QSPI0B_SCLK                   0
+#define IMX8QXP_QSPI0B_SCLK_LSIO_QSPI1A_SCLK                       IMX8QXP_QSPI0B_SCLK                   1
+#define IMX8QXP_QSPI0B_SCLK_LSIO_KPP0_COL0                         IMX8QXP_QSPI0B_SCLK                   2
+#define IMX8QXP_QSPI0B_SCLK_LSIO_GPIO3_IO17                        IMX8QXP_QSPI0B_SCLK                   4
+#define IMX8QXP_QSPI0B_DATA0_LSIO_QSPI0B_DATA0                     IMX8QXP_QSPI0B_DATA0                  0
+#define IMX8QXP_QSPI0B_DATA0_LSIO_QSPI1A_DATA0                     IMX8QXP_QSPI0B_DATA0                  1
+#define IMX8QXP_QSPI0B_DATA0_LSIO_KPP0_COL1                        IMX8QXP_QSPI0B_DATA0                  2
+#define IMX8QXP_QSPI0B_DATA0_LSIO_GPIO3_IO18                       IMX8QXP_QSPI0B_DATA0                  4
+#define IMX8QXP_QSPI0B_DATA1_LSIO_QSPI0B_DATA1                     IMX8QXP_QSPI0B_DATA1                  0
+#define IMX8QXP_QSPI0B_DATA1_LSIO_QSPI1A_DATA1                     IMX8QXP_QSPI0B_DATA1                  1
+#define IMX8QXP_QSPI0B_DATA1_LSIO_KPP0_COL2                        IMX8QXP_QSPI0B_DATA1                  2
+#define IMX8QXP_QSPI0B_DATA1_LSIO_GPIO3_IO19                       IMX8QXP_QSPI0B_DATA1                  4
+#define IMX8QXP_QSPI0B_DATA2_LSIO_QSPI0B_DATA2                     IMX8QXP_QSPI0B_DATA2                  0
+#define IMX8QXP_QSPI0B_DATA2_LSIO_QSPI1A_DATA2                     IMX8QXP_QSPI0B_DATA2                  1
+#define IMX8QXP_QSPI0B_DATA2_LSIO_KPP0_COL3                        IMX8QXP_QSPI0B_DATA2                  2
+#define IMX8QXP_QSPI0B_DATA2_LSIO_GPIO3_IO20                       IMX8QXP_QSPI0B_DATA2                  4
+#define IMX8QXP_QSPI0B_DATA3_LSIO_QSPI0B_DATA3                     IMX8QXP_QSPI0B_DATA3                  0
+#define IMX8QXP_QSPI0B_DATA3_LSIO_QSPI1A_DATA3                     IMX8QXP_QSPI0B_DATA3                  1
+#define IMX8QXP_QSPI0B_DATA3_LSIO_KPP0_ROW0                        IMX8QXP_QSPI0B_DATA3                  2
+#define IMX8QXP_QSPI0B_DATA3_LSIO_GPIO3_IO21                       IMX8QXP_QSPI0B_DATA3                  4
+#define IMX8QXP_QSPI0B_DQS_LSIO_QSPI0B_DQS                         IMX8QXP_QSPI0B_DQS                    0
+#define IMX8QXP_QSPI0B_DQS_LSIO_QSPI1A_DQS                         IMX8QXP_QSPI0B_DQS                    1
+#define IMX8QXP_QSPI0B_DQS_LSIO_KPP0_ROW1                          IMX8QXP_QSPI0B_DQS                    2
+#define IMX8QXP_QSPI0B_DQS_LSIO_GPIO3_IO22                         IMX8QXP_QSPI0B_DQS                    4
+#define IMX8QXP_QSPI0B_SS0_B_LSIO_QSPI0B_SS0_B                     IMX8QXP_QSPI0B_SS0_B                  0
+#define IMX8QXP_QSPI0B_SS0_B_LSIO_QSPI1A_SS0_B                     IMX8QXP_QSPI0B_SS0_B                  1
+#define IMX8QXP_QSPI0B_SS0_B_LSIO_KPP0_ROW2                        IMX8QXP_QSPI0B_SS0_B                  2
+#define IMX8QXP_QSPI0B_SS0_B_LSIO_GPIO3_IO23                       IMX8QXP_QSPI0B_SS0_B                  4
+#define IMX8QXP_QSPI0B_SS1_B_LSIO_QSPI0B_SS1_B                     IMX8QXP_QSPI0B_SS1_B                  0
+#define IMX8QXP_QSPI0B_SS1_B_LSIO_QSPI1A_SS1_B                     IMX8QXP_QSPI0B_SS1_B                  1
+#define IMX8QXP_QSPI0B_SS1_B_LSIO_KPP0_ROW3                        IMX8QXP_QSPI0B_SS1_B                  2
+#define IMX8QXP_QSPI0B_SS1_B_LSIO_GPIO3_IO24                       IMX8QXP_QSPI0B_SS1_B                  4
+
+#endif /* _IMX8QXP_PADS_H */
diff --git a/include/dt-bindings/pinctrl/r7s9210-pinctrl.h b/include/dt-bindings/pinctrl/r7s9210-pinctrl.h
new file mode 100644 (file)
index 0000000..2d0c23e
--- /dev/null
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Defines macros and constants for Renesas RZ/A2 pin controller pin
+ * muxing functions.
+ */
+#ifndef __DT_BINDINGS_PINCTRL_RENESAS_RZA2_H
+#define __DT_BINDINGS_PINCTRL_RENESAS_RZA2_H
+
+#define RZA2_PINS_PER_PORT     8
+
+/* Port names as labeled in the Hardware Manual */
+#define PORT0 0
+#define PORT1 1
+#define PORT2 2
+#define PORT3 3
+#define PORT4 4
+#define PORT5 5
+#define PORT6 6
+#define PORT7 7
+#define PORT8 8
+#define PORT9 9
+#define PORTA 10
+#define PORTB 11
+#define PORTC 12
+#define PORTD 13
+#define PORTE 14
+#define PORTF 15
+#define PORTG 16
+#define PORTH 17
+/* No I */
+#define PORTJ 18
+#define PORTK 19
+#define PORTL 20
+#define PORTM 21       /* Pins PM_0/1 are labeled JP_0/1 in HW manual */
+
+/*
+ * Create the pin index from its bank and position numbers and store in
+ * the upper 16 bits the alternate function identifier
+ */
+#define RZA2_PINMUX(b, p, f)   ((b) * RZA2_PINS_PER_PORT + (p) | (f << 16))
+
+/*
+ * Convert a port and pin label to its global pin index
+ */
+ #define RZA2_PIN(port, pin)   ((port) * RZA2_PINS_PER_PORT + (pin))
+
+#endif /* __DT_BINDINGS_PINCTRL_RENESAS_RZA2_H */