162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * Driver for the ST Microelectronics SPEAr1340 pinmux 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 2012 ST Microelectronics 562306a36Sopenharmony_ci * Viresh Kumar <vireshk@kernel.org> 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * This file is licensed under the terms of the GNU General Public 862306a36Sopenharmony_ci * License version 2. This program is licensed "as is" without any 962306a36Sopenharmony_ci * warranty of any kind, whether express or implied. 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/err.h> 1362306a36Sopenharmony_ci#include <linux/init.h> 1462306a36Sopenharmony_ci#include <linux/mod_devicetable.h> 1562306a36Sopenharmony_ci#include <linux/platform_device.h> 1662306a36Sopenharmony_ci#include "pinctrl-spear.h" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define DRIVER_NAME "spear1340-pinmux" 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* pins */ 2162306a36Sopenharmony_cistatic const struct pinctrl_pin_desc spear1340_pins[] = { 2262306a36Sopenharmony_ci SPEAR_PIN_0_TO_101, 2362306a36Sopenharmony_ci SPEAR_PIN_102_TO_245, 2462306a36Sopenharmony_ci PINCTRL_PIN(246, "PLGPIO246"), 2562306a36Sopenharmony_ci PINCTRL_PIN(247, "PLGPIO247"), 2662306a36Sopenharmony_ci PINCTRL_PIN(248, "PLGPIO248"), 2762306a36Sopenharmony_ci PINCTRL_PIN(249, "PLGPIO249"), 2862306a36Sopenharmony_ci PINCTRL_PIN(250, "PLGPIO250"), 2962306a36Sopenharmony_ci PINCTRL_PIN(251, "PLGPIO251"), 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci/* In SPEAr1340 there are two levels of pad muxing */ 3362306a36Sopenharmony_ci/* - pads as gpio OR peripherals */ 3462306a36Sopenharmony_ci#define PAD_FUNCTION_EN_1 0x668 3562306a36Sopenharmony_ci#define PAD_FUNCTION_EN_2 0x66C 3662306a36Sopenharmony_ci#define PAD_FUNCTION_EN_3 0x670 3762306a36Sopenharmony_ci#define PAD_FUNCTION_EN_4 0x674 3862306a36Sopenharmony_ci#define PAD_FUNCTION_EN_5 0x690 3962306a36Sopenharmony_ci#define PAD_FUNCTION_EN_6 0x694 4062306a36Sopenharmony_ci#define PAD_FUNCTION_EN_7 0x698 4162306a36Sopenharmony_ci#define PAD_FUNCTION_EN_8 0x69C 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci/* - If peripherals, then primary OR alternate peripheral */ 4462306a36Sopenharmony_ci#define PAD_SHARED_IP_EN_1 0x6A0 4562306a36Sopenharmony_ci#define PAD_SHARED_IP_EN_2 0x6A4 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* 4862306a36Sopenharmony_ci * Macro's for first level of pmx - pads as gpio OR peripherals. There are 8 4962306a36Sopenharmony_ci * registers with 32 bits each for handling gpio pads, register 8 has only 26 5062306a36Sopenharmony_ci * relevant bits. 5162306a36Sopenharmony_ci */ 5262306a36Sopenharmony_ci/* macro's for making pads as gpio's */ 5362306a36Sopenharmony_ci#define PADS_AS_GPIO_REG0_MASK 0xFFFFFFFE 5462306a36Sopenharmony_ci#define PADS_AS_GPIO_REGS_MASK 0xFFFFFFFF 5562306a36Sopenharmony_ci#define PADS_AS_GPIO_REG7_MASK 0x07FFFFFF 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci/* macro's for making pads as peripherals */ 5862306a36Sopenharmony_ci#define FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK 0x00000FFE 5962306a36Sopenharmony_ci#define UART0_ENH_AND_GPT_REG0_MASK 0x0003F000 6062306a36Sopenharmony_ci#define PWM1_AND_KBD_COL5_REG0_MASK 0x00040000 6162306a36Sopenharmony_ci#define I2C1_REG0_MASK 0x01080000 6262306a36Sopenharmony_ci#define SPDIF_IN_REG0_MASK 0x00100000 6362306a36Sopenharmony_ci#define PWM2_AND_GPT0_TMR0_CPT_REG0_MASK 0x00400000 6462306a36Sopenharmony_ci#define PWM3_AND_GPT0_TMR1_CLK_REG0_MASK 0x00800000 6562306a36Sopenharmony_ci#define PWM0_AND_SSP0_CS1_REG0_MASK 0x02000000 6662306a36Sopenharmony_ci#define VIP_AND_CAM3_REG0_MASK 0xFC200000 6762306a36Sopenharmony_ci#define VIP_AND_CAM3_REG1_MASK 0x0000000F 6862306a36Sopenharmony_ci#define VIP_REG1_MASK 0x00001EF0 6962306a36Sopenharmony_ci#define VIP_AND_CAM2_REG1_MASK 0x007FE100 7062306a36Sopenharmony_ci#define VIP_AND_CAM1_REG1_MASK 0xFF800000 7162306a36Sopenharmony_ci#define VIP_AND_CAM1_REG2_MASK 0x00000003 7262306a36Sopenharmony_ci#define VIP_AND_CAM0_REG2_MASK 0x00001FFC 7362306a36Sopenharmony_ci#define SMI_REG2_MASK 0x0021E000 7462306a36Sopenharmony_ci#define SSP0_REG2_MASK 0x001E0000 7562306a36Sopenharmony_ci#define TS_AND_SSP0_CS2_REG2_MASK 0x00400000 7662306a36Sopenharmony_ci#define UART0_REG2_MASK 0x01800000 7762306a36Sopenharmony_ci#define UART1_REG2_MASK 0x06000000 7862306a36Sopenharmony_ci#define I2S_IN_REG2_MASK 0xF8000000 7962306a36Sopenharmony_ci#define DEVS_GRP_AND_MIPHY_DBG_REG3_MASK 0x000001FE 8062306a36Sopenharmony_ci#define I2S_OUT_REG3_MASK 0x000001EF 8162306a36Sopenharmony_ci#define I2S_IN_REG3_MASK 0x00000010 8262306a36Sopenharmony_ci#define GMAC_REG3_MASK 0xFFFFFE00 8362306a36Sopenharmony_ci#define GMAC_REG4_MASK 0x0000001F 8462306a36Sopenharmony_ci#define DEVS_GRP_AND_MIPHY_DBG_REG4_MASK 0x7FFFFF20 8562306a36Sopenharmony_ci#define SSP0_CS3_REG4_MASK 0x00000020 8662306a36Sopenharmony_ci#define I2C0_REG4_MASK 0x000000C0 8762306a36Sopenharmony_ci#define CEC0_REG4_MASK 0x00000100 8862306a36Sopenharmony_ci#define CEC1_REG4_MASK 0x00000200 8962306a36Sopenharmony_ci#define SPDIF_OUT_REG4_MASK 0x00000400 9062306a36Sopenharmony_ci#define CLCD_REG4_MASK 0x7FFFF800 9162306a36Sopenharmony_ci#define CLCD_AND_ARM_TRACE_REG4_MASK 0x80000000 9262306a36Sopenharmony_ci#define CLCD_AND_ARM_TRACE_REG5_MASK 0xFFFFFFFF 9362306a36Sopenharmony_ci#define CLCD_AND_ARM_TRACE_REG6_MASK 0x00000001 9462306a36Sopenharmony_ci#define FSMC_PNOR_AND_MCIF_REG6_MASK 0x073FFFFE 9562306a36Sopenharmony_ci#define MCIF_REG6_MASK 0xF8C00000 9662306a36Sopenharmony_ci#define MCIF_REG7_MASK 0x000043FF 9762306a36Sopenharmony_ci#define FSMC_8BIT_REG7_MASK 0x07FFBC00 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci/* other registers */ 10062306a36Sopenharmony_ci#define PERIP_CFG 0x42C 10162306a36Sopenharmony_ci /* PERIP_CFG register masks */ 10262306a36Sopenharmony_ci #define SSP_CS_CTL_HW 0 10362306a36Sopenharmony_ci #define SSP_CS_CTL_SW 1 10462306a36Sopenharmony_ci #define SSP_CS_CTL_MASK 1 10562306a36Sopenharmony_ci #define SSP_CS_CTL_SHIFT 21 10662306a36Sopenharmony_ci #define SSP_CS_VAL_MASK 1 10762306a36Sopenharmony_ci #define SSP_CS_VAL_SHIFT 20 10862306a36Sopenharmony_ci #define SSP_CS_SEL_CS0 0 10962306a36Sopenharmony_ci #define SSP_CS_SEL_CS1 1 11062306a36Sopenharmony_ci #define SSP_CS_SEL_CS2 2 11162306a36Sopenharmony_ci #define SSP_CS_SEL_MASK 3 11262306a36Sopenharmony_ci #define SSP_CS_SEL_SHIFT 18 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci #define I2S_CHNL_2_0 (0) 11562306a36Sopenharmony_ci #define I2S_CHNL_3_1 (1) 11662306a36Sopenharmony_ci #define I2S_CHNL_5_1 (2) 11762306a36Sopenharmony_ci #define I2S_CHNL_7_1 (3) 11862306a36Sopenharmony_ci #define I2S_CHNL_PLAY_SHIFT (4) 11962306a36Sopenharmony_ci #define I2S_CHNL_PLAY_MASK (3 << 4) 12062306a36Sopenharmony_ci #define I2S_CHNL_REC_SHIFT (6) 12162306a36Sopenharmony_ci #define I2S_CHNL_REC_MASK (3 << 6) 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci #define SPDIF_OUT_ENB_MASK (1 << 2) 12462306a36Sopenharmony_ci #define SPDIF_OUT_ENB_SHIFT 2 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci #define MCIF_SEL_SD 1 12762306a36Sopenharmony_ci #define MCIF_SEL_CF 2 12862306a36Sopenharmony_ci #define MCIF_SEL_XD 3 12962306a36Sopenharmony_ci #define MCIF_SEL_MASK 3 13062306a36Sopenharmony_ci #define MCIF_SEL_SHIFT 0 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci#define GMAC_CLK_CFG 0x248 13362306a36Sopenharmony_ci #define GMAC_PHY_IF_GMII_VAL (0 << 3) 13462306a36Sopenharmony_ci #define GMAC_PHY_IF_RGMII_VAL (1 << 3) 13562306a36Sopenharmony_ci #define GMAC_PHY_IF_SGMII_VAL (2 << 3) 13662306a36Sopenharmony_ci #define GMAC_PHY_IF_RMII_VAL (4 << 3) 13762306a36Sopenharmony_ci #define GMAC_PHY_IF_SEL_MASK (7 << 3) 13862306a36Sopenharmony_ci #define GMAC_PHY_INPUT_ENB_VAL 0 13962306a36Sopenharmony_ci #define GMAC_PHY_SYNT_ENB_VAL 1 14062306a36Sopenharmony_ci #define GMAC_PHY_CLK_MASK 1 14162306a36Sopenharmony_ci #define GMAC_PHY_CLK_SHIFT 2 14262306a36Sopenharmony_ci #define GMAC_PHY_125M_PAD_VAL 0 14362306a36Sopenharmony_ci #define GMAC_PHY_PLL2_VAL 1 14462306a36Sopenharmony_ci #define GMAC_PHY_OSC3_VAL 2 14562306a36Sopenharmony_ci #define GMAC_PHY_INPUT_CLK_MASK 3 14662306a36Sopenharmony_ci #define GMAC_PHY_INPUT_CLK_SHIFT 0 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci#define PCIE_SATA_CFG 0x424 14962306a36Sopenharmony_ci /* PCIE CFG MASks */ 15062306a36Sopenharmony_ci #define PCIE_CFG_DEVICE_PRESENT (1 << 11) 15162306a36Sopenharmony_ci #define PCIE_CFG_POWERUP_RESET (1 << 10) 15262306a36Sopenharmony_ci #define PCIE_CFG_CORE_CLK_EN (1 << 9) 15362306a36Sopenharmony_ci #define PCIE_CFG_AUX_CLK_EN (1 << 8) 15462306a36Sopenharmony_ci #define SATA_CFG_TX_CLK_EN (1 << 4) 15562306a36Sopenharmony_ci #define SATA_CFG_RX_CLK_EN (1 << 3) 15662306a36Sopenharmony_ci #define SATA_CFG_POWERUP_RESET (1 << 2) 15762306a36Sopenharmony_ci #define SATA_CFG_PM_CLK_EN (1 << 1) 15862306a36Sopenharmony_ci #define PCIE_SATA_SEL_PCIE (0) 15962306a36Sopenharmony_ci #define PCIE_SATA_SEL_SATA (1) 16062306a36Sopenharmony_ci #define SATA_PCIE_CFG_MASK 0xF1F 16162306a36Sopenharmony_ci #define PCIE_CFG_VAL (PCIE_SATA_SEL_PCIE | PCIE_CFG_AUX_CLK_EN | \ 16262306a36Sopenharmony_ci PCIE_CFG_CORE_CLK_EN | PCIE_CFG_POWERUP_RESET |\ 16362306a36Sopenharmony_ci PCIE_CFG_DEVICE_PRESENT) 16462306a36Sopenharmony_ci #define SATA_CFG_VAL (PCIE_SATA_SEL_SATA | SATA_CFG_PM_CLK_EN | \ 16562306a36Sopenharmony_ci SATA_CFG_POWERUP_RESET | SATA_CFG_RX_CLK_EN | \ 16662306a36Sopenharmony_ci SATA_CFG_TX_CLK_EN) 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci/* Macro's for second level of pmx - pads as primary OR alternate peripheral */ 16962306a36Sopenharmony_ci/* Write 0 to enable FSMC_16_BIT */ 17062306a36Sopenharmony_ci#define KBD_ROW_COL_MASK (1 << 0) 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci/* Write 0 to enable UART0_ENH */ 17362306a36Sopenharmony_ci#define GPT_MASK (1 << 1) /* Only clk & cpt */ 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci/* Write 0 to enable PWM1 */ 17662306a36Sopenharmony_ci#define KBD_COL5_MASK (1 << 2) 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci/* Write 0 to enable PWM2 */ 17962306a36Sopenharmony_ci#define GPT0_TMR0_CPT_MASK (1 << 3) /* Only clk & cpt */ 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci/* Write 0 to enable PWM3 */ 18262306a36Sopenharmony_ci#define GPT0_TMR1_CLK_MASK (1 << 4) /* Only clk & cpt */ 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci/* Write 0 to enable PWM0 */ 18562306a36Sopenharmony_ci#define SSP0_CS1_MASK (1 << 5) 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci/* Write 0 to enable VIP */ 18862306a36Sopenharmony_ci#define CAM3_MASK (1 << 6) 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci/* Write 0 to enable VIP */ 19162306a36Sopenharmony_ci#define CAM2_MASK (1 << 7) 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci/* Write 0 to enable VIP */ 19462306a36Sopenharmony_ci#define CAM1_MASK (1 << 8) 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci/* Write 0 to enable VIP */ 19762306a36Sopenharmony_ci#define CAM0_MASK (1 << 9) 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci/* Write 0 to enable TS */ 20062306a36Sopenharmony_ci#define SSP0_CS2_MASK (1 << 10) 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci/* Write 0 to enable FSMC PNOR */ 20362306a36Sopenharmony_ci#define MCIF_MASK (1 << 11) 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci/* Write 0 to enable CLCD */ 20662306a36Sopenharmony_ci#define ARM_TRACE_MASK (1 << 12) 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci/* Write 0 to enable I2S, SSP0_CS2, CEC0, 1, SPDIF out, CLCD */ 20962306a36Sopenharmony_ci#define MIPHY_DBG_MASK (1 << 13) 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci/* 21262306a36Sopenharmony_ci * Pad multiplexing for making all pads as gpio's. This is done to override the 21362306a36Sopenharmony_ci * values passed from bootloader and start from scratch. 21462306a36Sopenharmony_ci */ 21562306a36Sopenharmony_cistatic const unsigned pads_as_gpio_pins[] = { 12, 88, 89, 251 }; 21662306a36Sopenharmony_cistatic struct spear_muxreg pads_as_gpio_muxreg[] = { 21762306a36Sopenharmony_ci { 21862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 21962306a36Sopenharmony_ci .mask = PADS_AS_GPIO_REG0_MASK, 22062306a36Sopenharmony_ci .val = 0x0, 22162306a36Sopenharmony_ci }, { 22262306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_2, 22362306a36Sopenharmony_ci .mask = PADS_AS_GPIO_REGS_MASK, 22462306a36Sopenharmony_ci .val = 0x0, 22562306a36Sopenharmony_ci }, { 22662306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 22762306a36Sopenharmony_ci .mask = PADS_AS_GPIO_REGS_MASK, 22862306a36Sopenharmony_ci .val = 0x0, 22962306a36Sopenharmony_ci }, { 23062306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_4, 23162306a36Sopenharmony_ci .mask = PADS_AS_GPIO_REGS_MASK, 23262306a36Sopenharmony_ci .val = 0x0, 23362306a36Sopenharmony_ci }, { 23462306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 23562306a36Sopenharmony_ci .mask = PADS_AS_GPIO_REGS_MASK, 23662306a36Sopenharmony_ci .val = 0x0, 23762306a36Sopenharmony_ci }, { 23862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_6, 23962306a36Sopenharmony_ci .mask = PADS_AS_GPIO_REGS_MASK, 24062306a36Sopenharmony_ci .val = 0x0, 24162306a36Sopenharmony_ci }, { 24262306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_7, 24362306a36Sopenharmony_ci .mask = PADS_AS_GPIO_REGS_MASK, 24462306a36Sopenharmony_ci .val = 0x0, 24562306a36Sopenharmony_ci }, { 24662306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_8, 24762306a36Sopenharmony_ci .mask = PADS_AS_GPIO_REG7_MASK, 24862306a36Sopenharmony_ci .val = 0x0, 24962306a36Sopenharmony_ci }, 25062306a36Sopenharmony_ci}; 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_cistatic struct spear_modemux pads_as_gpio_modemux[] = { 25362306a36Sopenharmony_ci { 25462306a36Sopenharmony_ci .muxregs = pads_as_gpio_muxreg, 25562306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(pads_as_gpio_muxreg), 25662306a36Sopenharmony_ci }, 25762306a36Sopenharmony_ci}; 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_cistatic struct spear_pingroup pads_as_gpio_pingroup = { 26062306a36Sopenharmony_ci .name = "pads_as_gpio_grp", 26162306a36Sopenharmony_ci .pins = pads_as_gpio_pins, 26262306a36Sopenharmony_ci .npins = ARRAY_SIZE(pads_as_gpio_pins), 26362306a36Sopenharmony_ci .modemuxs = pads_as_gpio_modemux, 26462306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(pads_as_gpio_modemux), 26562306a36Sopenharmony_ci}; 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_cistatic const char *const pads_as_gpio_grps[] = { "pads_as_gpio_grp" }; 26862306a36Sopenharmony_cistatic struct spear_function pads_as_gpio_function = { 26962306a36Sopenharmony_ci .name = "pads_as_gpio", 27062306a36Sopenharmony_ci .groups = pads_as_gpio_grps, 27162306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(pads_as_gpio_grps), 27262306a36Sopenharmony_ci}; 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ci/* Pad multiplexing for fsmc_8bit device */ 27562306a36Sopenharmony_cistatic const unsigned fsmc_8bit_pins[] = { 233, 234, 235, 236, 238, 239, 240, 27662306a36Sopenharmony_ci 241, 242, 243, 244, 245, 246, 247, 248, 249 }; 27762306a36Sopenharmony_cistatic struct spear_muxreg fsmc_8bit_muxreg[] = { 27862306a36Sopenharmony_ci { 27962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_8, 28062306a36Sopenharmony_ci .mask = FSMC_8BIT_REG7_MASK, 28162306a36Sopenharmony_ci .val = FSMC_8BIT_REG7_MASK, 28262306a36Sopenharmony_ci } 28362306a36Sopenharmony_ci}; 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_cistatic struct spear_modemux fsmc_8bit_modemux[] = { 28662306a36Sopenharmony_ci { 28762306a36Sopenharmony_ci .muxregs = fsmc_8bit_muxreg, 28862306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(fsmc_8bit_muxreg), 28962306a36Sopenharmony_ci }, 29062306a36Sopenharmony_ci}; 29162306a36Sopenharmony_ci 29262306a36Sopenharmony_cistatic struct spear_pingroup fsmc_8bit_pingroup = { 29362306a36Sopenharmony_ci .name = "fsmc_8bit_grp", 29462306a36Sopenharmony_ci .pins = fsmc_8bit_pins, 29562306a36Sopenharmony_ci .npins = ARRAY_SIZE(fsmc_8bit_pins), 29662306a36Sopenharmony_ci .modemuxs = fsmc_8bit_modemux, 29762306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(fsmc_8bit_modemux), 29862306a36Sopenharmony_ci}; 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci/* Pad multiplexing for fsmc_16bit device */ 30162306a36Sopenharmony_cistatic const unsigned fsmc_16bit_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 30262306a36Sopenharmony_cistatic struct spear_muxreg fsmc_16bit_muxreg[] = { 30362306a36Sopenharmony_ci { 30462306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 30562306a36Sopenharmony_ci .mask = KBD_ROW_COL_MASK, 30662306a36Sopenharmony_ci .val = 0, 30762306a36Sopenharmony_ci }, { 30862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 30962306a36Sopenharmony_ci .mask = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK, 31062306a36Sopenharmony_ci .val = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK, 31162306a36Sopenharmony_ci }, 31262306a36Sopenharmony_ci}; 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_cistatic struct spear_modemux fsmc_16bit_modemux[] = { 31562306a36Sopenharmony_ci { 31662306a36Sopenharmony_ci .muxregs = fsmc_16bit_muxreg, 31762306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(fsmc_16bit_muxreg), 31862306a36Sopenharmony_ci }, 31962306a36Sopenharmony_ci}; 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_cistatic struct spear_pingroup fsmc_16bit_pingroup = { 32262306a36Sopenharmony_ci .name = "fsmc_16bit_grp", 32362306a36Sopenharmony_ci .pins = fsmc_16bit_pins, 32462306a36Sopenharmony_ci .npins = ARRAY_SIZE(fsmc_16bit_pins), 32562306a36Sopenharmony_ci .modemuxs = fsmc_16bit_modemux, 32662306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(fsmc_16bit_modemux), 32762306a36Sopenharmony_ci}; 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci/* pad multiplexing for fsmc_pnor device */ 33062306a36Sopenharmony_cistatic const unsigned fsmc_pnor_pins[] = { 192, 193, 194, 195, 196, 197, 198, 33162306a36Sopenharmony_ci 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 33262306a36Sopenharmony_ci 215, 216, 217 }; 33362306a36Sopenharmony_cistatic struct spear_muxreg fsmc_pnor_muxreg[] = { 33462306a36Sopenharmony_ci { 33562306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 33662306a36Sopenharmony_ci .mask = MCIF_MASK, 33762306a36Sopenharmony_ci .val = 0, 33862306a36Sopenharmony_ci }, { 33962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_7, 34062306a36Sopenharmony_ci .mask = FSMC_PNOR_AND_MCIF_REG6_MASK, 34162306a36Sopenharmony_ci .val = FSMC_PNOR_AND_MCIF_REG6_MASK, 34262306a36Sopenharmony_ci }, 34362306a36Sopenharmony_ci}; 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_cistatic struct spear_modemux fsmc_pnor_modemux[] = { 34662306a36Sopenharmony_ci { 34762306a36Sopenharmony_ci .muxregs = fsmc_pnor_muxreg, 34862306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(fsmc_pnor_muxreg), 34962306a36Sopenharmony_ci }, 35062306a36Sopenharmony_ci}; 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_cistatic struct spear_pingroup fsmc_pnor_pingroup = { 35362306a36Sopenharmony_ci .name = "fsmc_pnor_grp", 35462306a36Sopenharmony_ci .pins = fsmc_pnor_pins, 35562306a36Sopenharmony_ci .npins = ARRAY_SIZE(fsmc_pnor_pins), 35662306a36Sopenharmony_ci .modemuxs = fsmc_pnor_modemux, 35762306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(fsmc_pnor_modemux), 35862306a36Sopenharmony_ci}; 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_cistatic const char *const fsmc_grps[] = { "fsmc_8bit_grp", "fsmc_16bit_grp", 36162306a36Sopenharmony_ci "fsmc_pnor_grp" }; 36262306a36Sopenharmony_cistatic struct spear_function fsmc_function = { 36362306a36Sopenharmony_ci .name = "fsmc", 36462306a36Sopenharmony_ci .groups = fsmc_grps, 36562306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(fsmc_grps), 36662306a36Sopenharmony_ci}; 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci/* pad multiplexing for keyboard rows-cols device */ 36962306a36Sopenharmony_cistatic const unsigned keyboard_row_col_pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37062306a36Sopenharmony_ci 10 }; 37162306a36Sopenharmony_cistatic struct spear_muxreg keyboard_row_col_muxreg[] = { 37262306a36Sopenharmony_ci { 37362306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 37462306a36Sopenharmony_ci .mask = KBD_ROW_COL_MASK, 37562306a36Sopenharmony_ci .val = KBD_ROW_COL_MASK, 37662306a36Sopenharmony_ci }, { 37762306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 37862306a36Sopenharmony_ci .mask = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK, 37962306a36Sopenharmony_ci .val = FSMC_16_BIT_AND_KBD_ROW_COL_REG0_MASK, 38062306a36Sopenharmony_ci }, 38162306a36Sopenharmony_ci}; 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_cistatic struct spear_modemux keyboard_row_col_modemux[] = { 38462306a36Sopenharmony_ci { 38562306a36Sopenharmony_ci .muxregs = keyboard_row_col_muxreg, 38662306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(keyboard_row_col_muxreg), 38762306a36Sopenharmony_ci }, 38862306a36Sopenharmony_ci}; 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_cistatic struct spear_pingroup keyboard_row_col_pingroup = { 39162306a36Sopenharmony_ci .name = "keyboard_row_col_grp", 39262306a36Sopenharmony_ci .pins = keyboard_row_col_pins, 39362306a36Sopenharmony_ci .npins = ARRAY_SIZE(keyboard_row_col_pins), 39462306a36Sopenharmony_ci .modemuxs = keyboard_row_col_modemux, 39562306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(keyboard_row_col_modemux), 39662306a36Sopenharmony_ci}; 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci/* pad multiplexing for keyboard col5 device */ 39962306a36Sopenharmony_cistatic const unsigned keyboard_col5_pins[] = { 17 }; 40062306a36Sopenharmony_cistatic struct spear_muxreg keyboard_col5_muxreg[] = { 40162306a36Sopenharmony_ci { 40262306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 40362306a36Sopenharmony_ci .mask = KBD_COL5_MASK, 40462306a36Sopenharmony_ci .val = KBD_COL5_MASK, 40562306a36Sopenharmony_ci }, { 40662306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 40762306a36Sopenharmony_ci .mask = PWM1_AND_KBD_COL5_REG0_MASK, 40862306a36Sopenharmony_ci .val = PWM1_AND_KBD_COL5_REG0_MASK, 40962306a36Sopenharmony_ci }, 41062306a36Sopenharmony_ci}; 41162306a36Sopenharmony_ci 41262306a36Sopenharmony_cistatic struct spear_modemux keyboard_col5_modemux[] = { 41362306a36Sopenharmony_ci { 41462306a36Sopenharmony_ci .muxregs = keyboard_col5_muxreg, 41562306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(keyboard_col5_muxreg), 41662306a36Sopenharmony_ci }, 41762306a36Sopenharmony_ci}; 41862306a36Sopenharmony_ci 41962306a36Sopenharmony_cistatic struct spear_pingroup keyboard_col5_pingroup = { 42062306a36Sopenharmony_ci .name = "keyboard_col5_grp", 42162306a36Sopenharmony_ci .pins = keyboard_col5_pins, 42262306a36Sopenharmony_ci .npins = ARRAY_SIZE(keyboard_col5_pins), 42362306a36Sopenharmony_ci .modemuxs = keyboard_col5_modemux, 42462306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(keyboard_col5_modemux), 42562306a36Sopenharmony_ci}; 42662306a36Sopenharmony_ci 42762306a36Sopenharmony_cistatic const char *const keyboard_grps[] = { "keyboard_row_col_grp", 42862306a36Sopenharmony_ci "keyboard_col5_grp" }; 42962306a36Sopenharmony_cistatic struct spear_function keyboard_function = { 43062306a36Sopenharmony_ci .name = "keyboard", 43162306a36Sopenharmony_ci .groups = keyboard_grps, 43262306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(keyboard_grps), 43362306a36Sopenharmony_ci}; 43462306a36Sopenharmony_ci 43562306a36Sopenharmony_ci/* pad multiplexing for spdif_in device */ 43662306a36Sopenharmony_cistatic const unsigned spdif_in_pins[] = { 19 }; 43762306a36Sopenharmony_cistatic struct spear_muxreg spdif_in_muxreg[] = { 43862306a36Sopenharmony_ci { 43962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 44062306a36Sopenharmony_ci .mask = SPDIF_IN_REG0_MASK, 44162306a36Sopenharmony_ci .val = SPDIF_IN_REG0_MASK, 44262306a36Sopenharmony_ci }, 44362306a36Sopenharmony_ci}; 44462306a36Sopenharmony_ci 44562306a36Sopenharmony_cistatic struct spear_modemux spdif_in_modemux[] = { 44662306a36Sopenharmony_ci { 44762306a36Sopenharmony_ci .muxregs = spdif_in_muxreg, 44862306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(spdif_in_muxreg), 44962306a36Sopenharmony_ci }, 45062306a36Sopenharmony_ci}; 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_cistatic struct spear_pingroup spdif_in_pingroup = { 45362306a36Sopenharmony_ci .name = "spdif_in_grp", 45462306a36Sopenharmony_ci .pins = spdif_in_pins, 45562306a36Sopenharmony_ci .npins = ARRAY_SIZE(spdif_in_pins), 45662306a36Sopenharmony_ci .modemuxs = spdif_in_modemux, 45762306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(spdif_in_modemux), 45862306a36Sopenharmony_ci}; 45962306a36Sopenharmony_ci 46062306a36Sopenharmony_cistatic const char *const spdif_in_grps[] = { "spdif_in_grp" }; 46162306a36Sopenharmony_cistatic struct spear_function spdif_in_function = { 46262306a36Sopenharmony_ci .name = "spdif_in", 46362306a36Sopenharmony_ci .groups = spdif_in_grps, 46462306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(spdif_in_grps), 46562306a36Sopenharmony_ci}; 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ci/* pad multiplexing for spdif_out device */ 46862306a36Sopenharmony_cistatic const unsigned spdif_out_pins[] = { 137 }; 46962306a36Sopenharmony_cistatic struct spear_muxreg spdif_out_muxreg[] = { 47062306a36Sopenharmony_ci { 47162306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 47262306a36Sopenharmony_ci .mask = SPDIF_OUT_REG4_MASK, 47362306a36Sopenharmony_ci .val = SPDIF_OUT_REG4_MASK, 47462306a36Sopenharmony_ci }, { 47562306a36Sopenharmony_ci .reg = PERIP_CFG, 47662306a36Sopenharmony_ci .mask = SPDIF_OUT_ENB_MASK, 47762306a36Sopenharmony_ci .val = SPDIF_OUT_ENB_MASK, 47862306a36Sopenharmony_ci } 47962306a36Sopenharmony_ci}; 48062306a36Sopenharmony_ci 48162306a36Sopenharmony_cistatic struct spear_modemux spdif_out_modemux[] = { 48262306a36Sopenharmony_ci { 48362306a36Sopenharmony_ci .muxregs = spdif_out_muxreg, 48462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(spdif_out_muxreg), 48562306a36Sopenharmony_ci }, 48662306a36Sopenharmony_ci}; 48762306a36Sopenharmony_ci 48862306a36Sopenharmony_cistatic struct spear_pingroup spdif_out_pingroup = { 48962306a36Sopenharmony_ci .name = "spdif_out_grp", 49062306a36Sopenharmony_ci .pins = spdif_out_pins, 49162306a36Sopenharmony_ci .npins = ARRAY_SIZE(spdif_out_pins), 49262306a36Sopenharmony_ci .modemuxs = spdif_out_modemux, 49362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(spdif_out_modemux), 49462306a36Sopenharmony_ci}; 49562306a36Sopenharmony_ci 49662306a36Sopenharmony_cistatic const char *const spdif_out_grps[] = { "spdif_out_grp" }; 49762306a36Sopenharmony_cistatic struct spear_function spdif_out_function = { 49862306a36Sopenharmony_ci .name = "spdif_out", 49962306a36Sopenharmony_ci .groups = spdif_out_grps, 50062306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(spdif_out_grps), 50162306a36Sopenharmony_ci}; 50262306a36Sopenharmony_ci 50362306a36Sopenharmony_ci/* pad multiplexing for gpt_0_1 device */ 50462306a36Sopenharmony_cistatic const unsigned gpt_0_1_pins[] = { 11, 12, 13, 14, 15, 16, 21, 22 }; 50562306a36Sopenharmony_cistatic struct spear_muxreg gpt_0_1_muxreg[] = { 50662306a36Sopenharmony_ci { 50762306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 50862306a36Sopenharmony_ci .mask = GPT_MASK | GPT0_TMR0_CPT_MASK | GPT0_TMR1_CLK_MASK, 50962306a36Sopenharmony_ci .val = GPT_MASK | GPT0_TMR0_CPT_MASK | GPT0_TMR1_CLK_MASK, 51062306a36Sopenharmony_ci }, { 51162306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 51262306a36Sopenharmony_ci .mask = UART0_ENH_AND_GPT_REG0_MASK | 51362306a36Sopenharmony_ci PWM2_AND_GPT0_TMR0_CPT_REG0_MASK | 51462306a36Sopenharmony_ci PWM3_AND_GPT0_TMR1_CLK_REG0_MASK, 51562306a36Sopenharmony_ci .val = UART0_ENH_AND_GPT_REG0_MASK | 51662306a36Sopenharmony_ci PWM2_AND_GPT0_TMR0_CPT_REG0_MASK | 51762306a36Sopenharmony_ci PWM3_AND_GPT0_TMR1_CLK_REG0_MASK, 51862306a36Sopenharmony_ci }, 51962306a36Sopenharmony_ci}; 52062306a36Sopenharmony_ci 52162306a36Sopenharmony_cistatic struct spear_modemux gpt_0_1_modemux[] = { 52262306a36Sopenharmony_ci { 52362306a36Sopenharmony_ci .muxregs = gpt_0_1_muxreg, 52462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(gpt_0_1_muxreg), 52562306a36Sopenharmony_ci }, 52662306a36Sopenharmony_ci}; 52762306a36Sopenharmony_ci 52862306a36Sopenharmony_cistatic struct spear_pingroup gpt_0_1_pingroup = { 52962306a36Sopenharmony_ci .name = "gpt_0_1_grp", 53062306a36Sopenharmony_ci .pins = gpt_0_1_pins, 53162306a36Sopenharmony_ci .npins = ARRAY_SIZE(gpt_0_1_pins), 53262306a36Sopenharmony_ci .modemuxs = gpt_0_1_modemux, 53362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(gpt_0_1_modemux), 53462306a36Sopenharmony_ci}; 53562306a36Sopenharmony_ci 53662306a36Sopenharmony_cistatic const char *const gpt_0_1_grps[] = { "gpt_0_1_grp" }; 53762306a36Sopenharmony_cistatic struct spear_function gpt_0_1_function = { 53862306a36Sopenharmony_ci .name = "gpt_0_1", 53962306a36Sopenharmony_ci .groups = gpt_0_1_grps, 54062306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(gpt_0_1_grps), 54162306a36Sopenharmony_ci}; 54262306a36Sopenharmony_ci 54362306a36Sopenharmony_ci/* pad multiplexing for pwm0 device */ 54462306a36Sopenharmony_cistatic const unsigned pwm0_pins[] = { 24 }; 54562306a36Sopenharmony_cistatic struct spear_muxreg pwm0_muxreg[] = { 54662306a36Sopenharmony_ci { 54762306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 54862306a36Sopenharmony_ci .mask = SSP0_CS1_MASK, 54962306a36Sopenharmony_ci .val = 0, 55062306a36Sopenharmony_ci }, { 55162306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 55262306a36Sopenharmony_ci .mask = PWM0_AND_SSP0_CS1_REG0_MASK, 55362306a36Sopenharmony_ci .val = PWM0_AND_SSP0_CS1_REG0_MASK, 55462306a36Sopenharmony_ci }, 55562306a36Sopenharmony_ci}; 55662306a36Sopenharmony_ci 55762306a36Sopenharmony_cistatic struct spear_modemux pwm0_modemux[] = { 55862306a36Sopenharmony_ci { 55962306a36Sopenharmony_ci .muxregs = pwm0_muxreg, 56062306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(pwm0_muxreg), 56162306a36Sopenharmony_ci }, 56262306a36Sopenharmony_ci}; 56362306a36Sopenharmony_ci 56462306a36Sopenharmony_cistatic struct spear_pingroup pwm0_pingroup = { 56562306a36Sopenharmony_ci .name = "pwm0_grp", 56662306a36Sopenharmony_ci .pins = pwm0_pins, 56762306a36Sopenharmony_ci .npins = ARRAY_SIZE(pwm0_pins), 56862306a36Sopenharmony_ci .modemuxs = pwm0_modemux, 56962306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(pwm0_modemux), 57062306a36Sopenharmony_ci}; 57162306a36Sopenharmony_ci 57262306a36Sopenharmony_ci/* pad multiplexing for pwm1 device */ 57362306a36Sopenharmony_cistatic const unsigned pwm1_pins[] = { 17 }; 57462306a36Sopenharmony_cistatic struct spear_muxreg pwm1_muxreg[] = { 57562306a36Sopenharmony_ci { 57662306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 57762306a36Sopenharmony_ci .mask = KBD_COL5_MASK, 57862306a36Sopenharmony_ci .val = 0, 57962306a36Sopenharmony_ci }, { 58062306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 58162306a36Sopenharmony_ci .mask = PWM1_AND_KBD_COL5_REG0_MASK, 58262306a36Sopenharmony_ci .val = PWM1_AND_KBD_COL5_REG0_MASK, 58362306a36Sopenharmony_ci }, 58462306a36Sopenharmony_ci}; 58562306a36Sopenharmony_ci 58662306a36Sopenharmony_cistatic struct spear_modemux pwm1_modemux[] = { 58762306a36Sopenharmony_ci { 58862306a36Sopenharmony_ci .muxregs = pwm1_muxreg, 58962306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(pwm1_muxreg), 59062306a36Sopenharmony_ci }, 59162306a36Sopenharmony_ci}; 59262306a36Sopenharmony_ci 59362306a36Sopenharmony_cistatic struct spear_pingroup pwm1_pingroup = { 59462306a36Sopenharmony_ci .name = "pwm1_grp", 59562306a36Sopenharmony_ci .pins = pwm1_pins, 59662306a36Sopenharmony_ci .npins = ARRAY_SIZE(pwm1_pins), 59762306a36Sopenharmony_ci .modemuxs = pwm1_modemux, 59862306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(pwm1_modemux), 59962306a36Sopenharmony_ci}; 60062306a36Sopenharmony_ci 60162306a36Sopenharmony_ci/* pad multiplexing for pwm2 device */ 60262306a36Sopenharmony_cistatic const unsigned pwm2_pins[] = { 21 }; 60362306a36Sopenharmony_cistatic struct spear_muxreg pwm2_muxreg[] = { 60462306a36Sopenharmony_ci { 60562306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 60662306a36Sopenharmony_ci .mask = GPT0_TMR0_CPT_MASK, 60762306a36Sopenharmony_ci .val = 0, 60862306a36Sopenharmony_ci }, { 60962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 61062306a36Sopenharmony_ci .mask = PWM2_AND_GPT0_TMR0_CPT_REG0_MASK, 61162306a36Sopenharmony_ci .val = PWM2_AND_GPT0_TMR0_CPT_REG0_MASK, 61262306a36Sopenharmony_ci }, 61362306a36Sopenharmony_ci}; 61462306a36Sopenharmony_ci 61562306a36Sopenharmony_cistatic struct spear_modemux pwm2_modemux[] = { 61662306a36Sopenharmony_ci { 61762306a36Sopenharmony_ci .muxregs = pwm2_muxreg, 61862306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(pwm2_muxreg), 61962306a36Sopenharmony_ci }, 62062306a36Sopenharmony_ci}; 62162306a36Sopenharmony_ci 62262306a36Sopenharmony_cistatic struct spear_pingroup pwm2_pingroup = { 62362306a36Sopenharmony_ci .name = "pwm2_grp", 62462306a36Sopenharmony_ci .pins = pwm2_pins, 62562306a36Sopenharmony_ci .npins = ARRAY_SIZE(pwm2_pins), 62662306a36Sopenharmony_ci .modemuxs = pwm2_modemux, 62762306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(pwm2_modemux), 62862306a36Sopenharmony_ci}; 62962306a36Sopenharmony_ci 63062306a36Sopenharmony_ci/* pad multiplexing for pwm3 device */ 63162306a36Sopenharmony_cistatic const unsigned pwm3_pins[] = { 22 }; 63262306a36Sopenharmony_cistatic struct spear_muxreg pwm3_muxreg[] = { 63362306a36Sopenharmony_ci { 63462306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 63562306a36Sopenharmony_ci .mask = GPT0_TMR1_CLK_MASK, 63662306a36Sopenharmony_ci .val = 0, 63762306a36Sopenharmony_ci }, { 63862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 63962306a36Sopenharmony_ci .mask = PWM3_AND_GPT0_TMR1_CLK_REG0_MASK, 64062306a36Sopenharmony_ci .val = PWM3_AND_GPT0_TMR1_CLK_REG0_MASK, 64162306a36Sopenharmony_ci }, 64262306a36Sopenharmony_ci}; 64362306a36Sopenharmony_ci 64462306a36Sopenharmony_cistatic struct spear_modemux pwm3_modemux[] = { 64562306a36Sopenharmony_ci { 64662306a36Sopenharmony_ci .muxregs = pwm3_muxreg, 64762306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(pwm3_muxreg), 64862306a36Sopenharmony_ci }, 64962306a36Sopenharmony_ci}; 65062306a36Sopenharmony_ci 65162306a36Sopenharmony_cistatic struct spear_pingroup pwm3_pingroup = { 65262306a36Sopenharmony_ci .name = "pwm3_grp", 65362306a36Sopenharmony_ci .pins = pwm3_pins, 65462306a36Sopenharmony_ci .npins = ARRAY_SIZE(pwm3_pins), 65562306a36Sopenharmony_ci .modemuxs = pwm3_modemux, 65662306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(pwm3_modemux), 65762306a36Sopenharmony_ci}; 65862306a36Sopenharmony_ci 65962306a36Sopenharmony_cistatic const char *const pwm_grps[] = { "pwm0_grp", "pwm1_grp", "pwm2_grp", 66062306a36Sopenharmony_ci "pwm3_grp" }; 66162306a36Sopenharmony_cistatic struct spear_function pwm_function = { 66262306a36Sopenharmony_ci .name = "pwm", 66362306a36Sopenharmony_ci .groups = pwm_grps, 66462306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(pwm_grps), 66562306a36Sopenharmony_ci}; 66662306a36Sopenharmony_ci 66762306a36Sopenharmony_ci/* pad multiplexing for vip_mux device */ 66862306a36Sopenharmony_cistatic const unsigned vip_mux_pins[] = { 35, 36, 37, 38, 40, 41, 42, 43 }; 66962306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_muxreg[] = { 67062306a36Sopenharmony_ci { 67162306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_2, 67262306a36Sopenharmony_ci .mask = VIP_REG1_MASK, 67362306a36Sopenharmony_ci .val = VIP_REG1_MASK, 67462306a36Sopenharmony_ci }, 67562306a36Sopenharmony_ci}; 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_cistatic struct spear_modemux vip_mux_modemux[] = { 67862306a36Sopenharmony_ci { 67962306a36Sopenharmony_ci .muxregs = vip_mux_muxreg, 68062306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(vip_mux_muxreg), 68162306a36Sopenharmony_ci }, 68262306a36Sopenharmony_ci}; 68362306a36Sopenharmony_ci 68462306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_pingroup = { 68562306a36Sopenharmony_ci .name = "vip_mux_grp", 68662306a36Sopenharmony_ci .pins = vip_mux_pins, 68762306a36Sopenharmony_ci .npins = ARRAY_SIZE(vip_mux_pins), 68862306a36Sopenharmony_ci .modemuxs = vip_mux_modemux, 68962306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(vip_mux_modemux), 69062306a36Sopenharmony_ci}; 69162306a36Sopenharmony_ci 69262306a36Sopenharmony_ci/* pad multiplexing for vip_mux_cam0 (disables cam0) device */ 69362306a36Sopenharmony_cistatic const unsigned vip_mux_cam0_pins[] = { 65, 66, 67, 68, 69, 70, 71, 72, 69462306a36Sopenharmony_ci 73, 74, 75 }; 69562306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_cam0_muxreg[] = { 69662306a36Sopenharmony_ci { 69762306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 69862306a36Sopenharmony_ci .mask = CAM0_MASK, 69962306a36Sopenharmony_ci .val = 0, 70062306a36Sopenharmony_ci }, { 70162306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 70262306a36Sopenharmony_ci .mask = VIP_AND_CAM0_REG2_MASK, 70362306a36Sopenharmony_ci .val = VIP_AND_CAM0_REG2_MASK, 70462306a36Sopenharmony_ci }, 70562306a36Sopenharmony_ci}; 70662306a36Sopenharmony_ci 70762306a36Sopenharmony_cistatic struct spear_modemux vip_mux_cam0_modemux[] = { 70862306a36Sopenharmony_ci { 70962306a36Sopenharmony_ci .muxregs = vip_mux_cam0_muxreg, 71062306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(vip_mux_cam0_muxreg), 71162306a36Sopenharmony_ci }, 71262306a36Sopenharmony_ci}; 71362306a36Sopenharmony_ci 71462306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_cam0_pingroup = { 71562306a36Sopenharmony_ci .name = "vip_mux_cam0_grp", 71662306a36Sopenharmony_ci .pins = vip_mux_cam0_pins, 71762306a36Sopenharmony_ci .npins = ARRAY_SIZE(vip_mux_cam0_pins), 71862306a36Sopenharmony_ci .modemuxs = vip_mux_cam0_modemux, 71962306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(vip_mux_cam0_modemux), 72062306a36Sopenharmony_ci}; 72162306a36Sopenharmony_ci 72262306a36Sopenharmony_ci/* pad multiplexing for vip_mux_cam1 (disables cam1) device */ 72362306a36Sopenharmony_cistatic const unsigned vip_mux_cam1_pins[] = { 54, 55, 56, 57, 58, 59, 60, 61, 72462306a36Sopenharmony_ci 62, 63, 64 }; 72562306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_cam1_muxreg[] = { 72662306a36Sopenharmony_ci { 72762306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 72862306a36Sopenharmony_ci .mask = CAM1_MASK, 72962306a36Sopenharmony_ci .val = 0, 73062306a36Sopenharmony_ci }, { 73162306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_2, 73262306a36Sopenharmony_ci .mask = VIP_AND_CAM1_REG1_MASK, 73362306a36Sopenharmony_ci .val = VIP_AND_CAM1_REG1_MASK, 73462306a36Sopenharmony_ci }, { 73562306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 73662306a36Sopenharmony_ci .mask = VIP_AND_CAM1_REG2_MASK, 73762306a36Sopenharmony_ci .val = VIP_AND_CAM1_REG2_MASK, 73862306a36Sopenharmony_ci }, 73962306a36Sopenharmony_ci}; 74062306a36Sopenharmony_ci 74162306a36Sopenharmony_cistatic struct spear_modemux vip_mux_cam1_modemux[] = { 74262306a36Sopenharmony_ci { 74362306a36Sopenharmony_ci .muxregs = vip_mux_cam1_muxreg, 74462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(vip_mux_cam1_muxreg), 74562306a36Sopenharmony_ci }, 74662306a36Sopenharmony_ci}; 74762306a36Sopenharmony_ci 74862306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_cam1_pingroup = { 74962306a36Sopenharmony_ci .name = "vip_mux_cam1_grp", 75062306a36Sopenharmony_ci .pins = vip_mux_cam1_pins, 75162306a36Sopenharmony_ci .npins = ARRAY_SIZE(vip_mux_cam1_pins), 75262306a36Sopenharmony_ci .modemuxs = vip_mux_cam1_modemux, 75362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(vip_mux_cam1_modemux), 75462306a36Sopenharmony_ci}; 75562306a36Sopenharmony_ci 75662306a36Sopenharmony_ci/* pad multiplexing for vip_mux_cam2 (disables cam2) device */ 75762306a36Sopenharmony_cistatic const unsigned vip_mux_cam2_pins[] = { 39, 44, 45, 46, 47, 48, 49, 50, 75862306a36Sopenharmony_ci 51, 52, 53 }; 75962306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_cam2_muxreg[] = { 76062306a36Sopenharmony_ci { 76162306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 76262306a36Sopenharmony_ci .mask = CAM2_MASK, 76362306a36Sopenharmony_ci .val = 0, 76462306a36Sopenharmony_ci }, { 76562306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_2, 76662306a36Sopenharmony_ci .mask = VIP_AND_CAM2_REG1_MASK, 76762306a36Sopenharmony_ci .val = VIP_AND_CAM2_REG1_MASK, 76862306a36Sopenharmony_ci }, 76962306a36Sopenharmony_ci}; 77062306a36Sopenharmony_ci 77162306a36Sopenharmony_cistatic struct spear_modemux vip_mux_cam2_modemux[] = { 77262306a36Sopenharmony_ci { 77362306a36Sopenharmony_ci .muxregs = vip_mux_cam2_muxreg, 77462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(vip_mux_cam2_muxreg), 77562306a36Sopenharmony_ci }, 77662306a36Sopenharmony_ci}; 77762306a36Sopenharmony_ci 77862306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_cam2_pingroup = { 77962306a36Sopenharmony_ci .name = "vip_mux_cam2_grp", 78062306a36Sopenharmony_ci .pins = vip_mux_cam2_pins, 78162306a36Sopenharmony_ci .npins = ARRAY_SIZE(vip_mux_cam2_pins), 78262306a36Sopenharmony_ci .modemuxs = vip_mux_cam2_modemux, 78362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(vip_mux_cam2_modemux), 78462306a36Sopenharmony_ci}; 78562306a36Sopenharmony_ci 78662306a36Sopenharmony_ci/* pad multiplexing for vip_mux_cam3 (disables cam3) device */ 78762306a36Sopenharmony_cistatic const unsigned vip_mux_cam3_pins[] = { 20, 25, 26, 27, 28, 29, 30, 31, 78862306a36Sopenharmony_ci 32, 33, 34 }; 78962306a36Sopenharmony_cistatic struct spear_muxreg vip_mux_cam3_muxreg[] = { 79062306a36Sopenharmony_ci { 79162306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 79262306a36Sopenharmony_ci .mask = CAM3_MASK, 79362306a36Sopenharmony_ci .val = 0, 79462306a36Sopenharmony_ci }, { 79562306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 79662306a36Sopenharmony_ci .mask = VIP_AND_CAM3_REG0_MASK, 79762306a36Sopenharmony_ci .val = VIP_AND_CAM3_REG0_MASK, 79862306a36Sopenharmony_ci }, { 79962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_2, 80062306a36Sopenharmony_ci .mask = VIP_AND_CAM3_REG1_MASK, 80162306a36Sopenharmony_ci .val = VIP_AND_CAM3_REG1_MASK, 80262306a36Sopenharmony_ci }, 80362306a36Sopenharmony_ci}; 80462306a36Sopenharmony_ci 80562306a36Sopenharmony_cistatic struct spear_modemux vip_mux_cam3_modemux[] = { 80662306a36Sopenharmony_ci { 80762306a36Sopenharmony_ci .muxregs = vip_mux_cam3_muxreg, 80862306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(vip_mux_cam3_muxreg), 80962306a36Sopenharmony_ci }, 81062306a36Sopenharmony_ci}; 81162306a36Sopenharmony_ci 81262306a36Sopenharmony_cistatic struct spear_pingroup vip_mux_cam3_pingroup = { 81362306a36Sopenharmony_ci .name = "vip_mux_cam3_grp", 81462306a36Sopenharmony_ci .pins = vip_mux_cam3_pins, 81562306a36Sopenharmony_ci .npins = ARRAY_SIZE(vip_mux_cam3_pins), 81662306a36Sopenharmony_ci .modemuxs = vip_mux_cam3_modemux, 81762306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(vip_mux_cam3_modemux), 81862306a36Sopenharmony_ci}; 81962306a36Sopenharmony_ci 82062306a36Sopenharmony_cistatic const char *const vip_grps[] = { "vip_mux_grp", "vip_mux_cam0_grp" , 82162306a36Sopenharmony_ci "vip_mux_cam1_grp" , "vip_mux_cam2_grp", "vip_mux_cam3_grp" }; 82262306a36Sopenharmony_cistatic struct spear_function vip_function = { 82362306a36Sopenharmony_ci .name = "vip", 82462306a36Sopenharmony_ci .groups = vip_grps, 82562306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(vip_grps), 82662306a36Sopenharmony_ci}; 82762306a36Sopenharmony_ci 82862306a36Sopenharmony_ci/* pad multiplexing for cam0 device */ 82962306a36Sopenharmony_cistatic const unsigned cam0_pins[] = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75 83062306a36Sopenharmony_ci}; 83162306a36Sopenharmony_cistatic struct spear_muxreg cam0_muxreg[] = { 83262306a36Sopenharmony_ci { 83362306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 83462306a36Sopenharmony_ci .mask = CAM0_MASK, 83562306a36Sopenharmony_ci .val = CAM0_MASK, 83662306a36Sopenharmony_ci }, { 83762306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 83862306a36Sopenharmony_ci .mask = VIP_AND_CAM0_REG2_MASK, 83962306a36Sopenharmony_ci .val = VIP_AND_CAM0_REG2_MASK, 84062306a36Sopenharmony_ci }, 84162306a36Sopenharmony_ci}; 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_cistatic struct spear_modemux cam0_modemux[] = { 84462306a36Sopenharmony_ci { 84562306a36Sopenharmony_ci .muxregs = cam0_muxreg, 84662306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(cam0_muxreg), 84762306a36Sopenharmony_ci }, 84862306a36Sopenharmony_ci}; 84962306a36Sopenharmony_ci 85062306a36Sopenharmony_cistatic struct spear_pingroup cam0_pingroup = { 85162306a36Sopenharmony_ci .name = "cam0_grp", 85262306a36Sopenharmony_ci .pins = cam0_pins, 85362306a36Sopenharmony_ci .npins = ARRAY_SIZE(cam0_pins), 85462306a36Sopenharmony_ci .modemuxs = cam0_modemux, 85562306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(cam0_modemux), 85662306a36Sopenharmony_ci}; 85762306a36Sopenharmony_ci 85862306a36Sopenharmony_cistatic const char *const cam0_grps[] = { "cam0_grp" }; 85962306a36Sopenharmony_cistatic struct spear_function cam0_function = { 86062306a36Sopenharmony_ci .name = "cam0", 86162306a36Sopenharmony_ci .groups = cam0_grps, 86262306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(cam0_grps), 86362306a36Sopenharmony_ci}; 86462306a36Sopenharmony_ci 86562306a36Sopenharmony_ci/* pad multiplexing for cam1 device */ 86662306a36Sopenharmony_cistatic const unsigned cam1_pins[] = { 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64 86762306a36Sopenharmony_ci}; 86862306a36Sopenharmony_cistatic struct spear_muxreg cam1_muxreg[] = { 86962306a36Sopenharmony_ci { 87062306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 87162306a36Sopenharmony_ci .mask = CAM1_MASK, 87262306a36Sopenharmony_ci .val = CAM1_MASK, 87362306a36Sopenharmony_ci }, { 87462306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_2, 87562306a36Sopenharmony_ci .mask = VIP_AND_CAM1_REG1_MASK, 87662306a36Sopenharmony_ci .val = VIP_AND_CAM1_REG1_MASK, 87762306a36Sopenharmony_ci }, { 87862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 87962306a36Sopenharmony_ci .mask = VIP_AND_CAM1_REG2_MASK, 88062306a36Sopenharmony_ci .val = VIP_AND_CAM1_REG2_MASK, 88162306a36Sopenharmony_ci }, 88262306a36Sopenharmony_ci}; 88362306a36Sopenharmony_ci 88462306a36Sopenharmony_cistatic struct spear_modemux cam1_modemux[] = { 88562306a36Sopenharmony_ci { 88662306a36Sopenharmony_ci .muxregs = cam1_muxreg, 88762306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(cam1_muxreg), 88862306a36Sopenharmony_ci }, 88962306a36Sopenharmony_ci}; 89062306a36Sopenharmony_ci 89162306a36Sopenharmony_cistatic struct spear_pingroup cam1_pingroup = { 89262306a36Sopenharmony_ci .name = "cam1_grp", 89362306a36Sopenharmony_ci .pins = cam1_pins, 89462306a36Sopenharmony_ci .npins = ARRAY_SIZE(cam1_pins), 89562306a36Sopenharmony_ci .modemuxs = cam1_modemux, 89662306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(cam1_modemux), 89762306a36Sopenharmony_ci}; 89862306a36Sopenharmony_ci 89962306a36Sopenharmony_cistatic const char *const cam1_grps[] = { "cam1_grp" }; 90062306a36Sopenharmony_cistatic struct spear_function cam1_function = { 90162306a36Sopenharmony_ci .name = "cam1", 90262306a36Sopenharmony_ci .groups = cam1_grps, 90362306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(cam1_grps), 90462306a36Sopenharmony_ci}; 90562306a36Sopenharmony_ci 90662306a36Sopenharmony_ci/* pad multiplexing for cam2 device */ 90762306a36Sopenharmony_cistatic const unsigned cam2_pins[] = { 39, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 90862306a36Sopenharmony_ci}; 90962306a36Sopenharmony_cistatic struct spear_muxreg cam2_muxreg[] = { 91062306a36Sopenharmony_ci { 91162306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 91262306a36Sopenharmony_ci .mask = CAM2_MASK, 91362306a36Sopenharmony_ci .val = CAM2_MASK, 91462306a36Sopenharmony_ci }, { 91562306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_2, 91662306a36Sopenharmony_ci .mask = VIP_AND_CAM2_REG1_MASK, 91762306a36Sopenharmony_ci .val = VIP_AND_CAM2_REG1_MASK, 91862306a36Sopenharmony_ci }, 91962306a36Sopenharmony_ci}; 92062306a36Sopenharmony_ci 92162306a36Sopenharmony_cistatic struct spear_modemux cam2_modemux[] = { 92262306a36Sopenharmony_ci { 92362306a36Sopenharmony_ci .muxregs = cam2_muxreg, 92462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(cam2_muxreg), 92562306a36Sopenharmony_ci }, 92662306a36Sopenharmony_ci}; 92762306a36Sopenharmony_ci 92862306a36Sopenharmony_cistatic struct spear_pingroup cam2_pingroup = { 92962306a36Sopenharmony_ci .name = "cam2_grp", 93062306a36Sopenharmony_ci .pins = cam2_pins, 93162306a36Sopenharmony_ci .npins = ARRAY_SIZE(cam2_pins), 93262306a36Sopenharmony_ci .modemuxs = cam2_modemux, 93362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(cam2_modemux), 93462306a36Sopenharmony_ci}; 93562306a36Sopenharmony_ci 93662306a36Sopenharmony_cistatic const char *const cam2_grps[] = { "cam2_grp" }; 93762306a36Sopenharmony_cistatic struct spear_function cam2_function = { 93862306a36Sopenharmony_ci .name = "cam2", 93962306a36Sopenharmony_ci .groups = cam2_grps, 94062306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(cam2_grps), 94162306a36Sopenharmony_ci}; 94262306a36Sopenharmony_ci 94362306a36Sopenharmony_ci/* pad multiplexing for cam3 device */ 94462306a36Sopenharmony_cistatic const unsigned cam3_pins[] = { 20, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34 94562306a36Sopenharmony_ci}; 94662306a36Sopenharmony_cistatic struct spear_muxreg cam3_muxreg[] = { 94762306a36Sopenharmony_ci { 94862306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 94962306a36Sopenharmony_ci .mask = CAM3_MASK, 95062306a36Sopenharmony_ci .val = CAM3_MASK, 95162306a36Sopenharmony_ci }, { 95262306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 95362306a36Sopenharmony_ci .mask = VIP_AND_CAM3_REG0_MASK, 95462306a36Sopenharmony_ci .val = VIP_AND_CAM3_REG0_MASK, 95562306a36Sopenharmony_ci }, { 95662306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_2, 95762306a36Sopenharmony_ci .mask = VIP_AND_CAM3_REG1_MASK, 95862306a36Sopenharmony_ci .val = VIP_AND_CAM3_REG1_MASK, 95962306a36Sopenharmony_ci }, 96062306a36Sopenharmony_ci}; 96162306a36Sopenharmony_ci 96262306a36Sopenharmony_cistatic struct spear_modemux cam3_modemux[] = { 96362306a36Sopenharmony_ci { 96462306a36Sopenharmony_ci .muxregs = cam3_muxreg, 96562306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(cam3_muxreg), 96662306a36Sopenharmony_ci }, 96762306a36Sopenharmony_ci}; 96862306a36Sopenharmony_ci 96962306a36Sopenharmony_cistatic struct spear_pingroup cam3_pingroup = { 97062306a36Sopenharmony_ci .name = "cam3_grp", 97162306a36Sopenharmony_ci .pins = cam3_pins, 97262306a36Sopenharmony_ci .npins = ARRAY_SIZE(cam3_pins), 97362306a36Sopenharmony_ci .modemuxs = cam3_modemux, 97462306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(cam3_modemux), 97562306a36Sopenharmony_ci}; 97662306a36Sopenharmony_ci 97762306a36Sopenharmony_cistatic const char *const cam3_grps[] = { "cam3_grp" }; 97862306a36Sopenharmony_cistatic struct spear_function cam3_function = { 97962306a36Sopenharmony_ci .name = "cam3", 98062306a36Sopenharmony_ci .groups = cam3_grps, 98162306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(cam3_grps), 98262306a36Sopenharmony_ci}; 98362306a36Sopenharmony_ci 98462306a36Sopenharmony_ci/* pad multiplexing for smi device */ 98562306a36Sopenharmony_cistatic const unsigned smi_pins[] = { 76, 77, 78, 79, 84 }; 98662306a36Sopenharmony_cistatic struct spear_muxreg smi_muxreg[] = { 98762306a36Sopenharmony_ci { 98862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 98962306a36Sopenharmony_ci .mask = SMI_REG2_MASK, 99062306a36Sopenharmony_ci .val = SMI_REG2_MASK, 99162306a36Sopenharmony_ci }, 99262306a36Sopenharmony_ci}; 99362306a36Sopenharmony_ci 99462306a36Sopenharmony_cistatic struct spear_modemux smi_modemux[] = { 99562306a36Sopenharmony_ci { 99662306a36Sopenharmony_ci .muxregs = smi_muxreg, 99762306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(smi_muxreg), 99862306a36Sopenharmony_ci }, 99962306a36Sopenharmony_ci}; 100062306a36Sopenharmony_ci 100162306a36Sopenharmony_cistatic struct spear_pingroup smi_pingroup = { 100262306a36Sopenharmony_ci .name = "smi_grp", 100362306a36Sopenharmony_ci .pins = smi_pins, 100462306a36Sopenharmony_ci .npins = ARRAY_SIZE(smi_pins), 100562306a36Sopenharmony_ci .modemuxs = smi_modemux, 100662306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(smi_modemux), 100762306a36Sopenharmony_ci}; 100862306a36Sopenharmony_ci 100962306a36Sopenharmony_cistatic const char *const smi_grps[] = { "smi_grp" }; 101062306a36Sopenharmony_cistatic struct spear_function smi_function = { 101162306a36Sopenharmony_ci .name = "smi", 101262306a36Sopenharmony_ci .groups = smi_grps, 101362306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(smi_grps), 101462306a36Sopenharmony_ci}; 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_ci/* pad multiplexing for ssp0 device */ 101762306a36Sopenharmony_cistatic const unsigned ssp0_pins[] = { 80, 81, 82, 83 }; 101862306a36Sopenharmony_cistatic struct spear_muxreg ssp0_muxreg[] = { 101962306a36Sopenharmony_ci { 102062306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 102162306a36Sopenharmony_ci .mask = SSP0_REG2_MASK, 102262306a36Sopenharmony_ci .val = SSP0_REG2_MASK, 102362306a36Sopenharmony_ci }, 102462306a36Sopenharmony_ci}; 102562306a36Sopenharmony_ci 102662306a36Sopenharmony_cistatic struct spear_modemux ssp0_modemux[] = { 102762306a36Sopenharmony_ci { 102862306a36Sopenharmony_ci .muxregs = ssp0_muxreg, 102962306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(ssp0_muxreg), 103062306a36Sopenharmony_ci }, 103162306a36Sopenharmony_ci}; 103262306a36Sopenharmony_ci 103362306a36Sopenharmony_cistatic struct spear_pingroup ssp0_pingroup = { 103462306a36Sopenharmony_ci .name = "ssp0_grp", 103562306a36Sopenharmony_ci .pins = ssp0_pins, 103662306a36Sopenharmony_ci .npins = ARRAY_SIZE(ssp0_pins), 103762306a36Sopenharmony_ci .modemuxs = ssp0_modemux, 103862306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(ssp0_modemux), 103962306a36Sopenharmony_ci}; 104062306a36Sopenharmony_ci 104162306a36Sopenharmony_ci/* pad multiplexing for ssp0_cs1 device */ 104262306a36Sopenharmony_cistatic const unsigned ssp0_cs1_pins[] = { 24 }; 104362306a36Sopenharmony_cistatic struct spear_muxreg ssp0_cs1_muxreg[] = { 104462306a36Sopenharmony_ci { 104562306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 104662306a36Sopenharmony_ci .mask = SSP0_CS1_MASK, 104762306a36Sopenharmony_ci .val = SSP0_CS1_MASK, 104862306a36Sopenharmony_ci }, { 104962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 105062306a36Sopenharmony_ci .mask = PWM0_AND_SSP0_CS1_REG0_MASK, 105162306a36Sopenharmony_ci .val = PWM0_AND_SSP0_CS1_REG0_MASK, 105262306a36Sopenharmony_ci }, 105362306a36Sopenharmony_ci}; 105462306a36Sopenharmony_ci 105562306a36Sopenharmony_cistatic struct spear_modemux ssp0_cs1_modemux[] = { 105662306a36Sopenharmony_ci { 105762306a36Sopenharmony_ci .muxregs = ssp0_cs1_muxreg, 105862306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(ssp0_cs1_muxreg), 105962306a36Sopenharmony_ci }, 106062306a36Sopenharmony_ci}; 106162306a36Sopenharmony_ci 106262306a36Sopenharmony_cistatic struct spear_pingroup ssp0_cs1_pingroup = { 106362306a36Sopenharmony_ci .name = "ssp0_cs1_grp", 106462306a36Sopenharmony_ci .pins = ssp0_cs1_pins, 106562306a36Sopenharmony_ci .npins = ARRAY_SIZE(ssp0_cs1_pins), 106662306a36Sopenharmony_ci .modemuxs = ssp0_cs1_modemux, 106762306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(ssp0_cs1_modemux), 106862306a36Sopenharmony_ci}; 106962306a36Sopenharmony_ci 107062306a36Sopenharmony_ci/* pad multiplexing for ssp0_cs2 device */ 107162306a36Sopenharmony_cistatic const unsigned ssp0_cs2_pins[] = { 85 }; 107262306a36Sopenharmony_cistatic struct spear_muxreg ssp0_cs2_muxreg[] = { 107362306a36Sopenharmony_ci { 107462306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 107562306a36Sopenharmony_ci .mask = SSP0_CS2_MASK, 107662306a36Sopenharmony_ci .val = SSP0_CS2_MASK, 107762306a36Sopenharmony_ci }, { 107862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 107962306a36Sopenharmony_ci .mask = TS_AND_SSP0_CS2_REG2_MASK, 108062306a36Sopenharmony_ci .val = TS_AND_SSP0_CS2_REG2_MASK, 108162306a36Sopenharmony_ci }, 108262306a36Sopenharmony_ci}; 108362306a36Sopenharmony_ci 108462306a36Sopenharmony_cistatic struct spear_modemux ssp0_cs2_modemux[] = { 108562306a36Sopenharmony_ci { 108662306a36Sopenharmony_ci .muxregs = ssp0_cs2_muxreg, 108762306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(ssp0_cs2_muxreg), 108862306a36Sopenharmony_ci }, 108962306a36Sopenharmony_ci}; 109062306a36Sopenharmony_ci 109162306a36Sopenharmony_cistatic struct spear_pingroup ssp0_cs2_pingroup = { 109262306a36Sopenharmony_ci .name = "ssp0_cs2_grp", 109362306a36Sopenharmony_ci .pins = ssp0_cs2_pins, 109462306a36Sopenharmony_ci .npins = ARRAY_SIZE(ssp0_cs2_pins), 109562306a36Sopenharmony_ci .modemuxs = ssp0_cs2_modemux, 109662306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(ssp0_cs2_modemux), 109762306a36Sopenharmony_ci}; 109862306a36Sopenharmony_ci 109962306a36Sopenharmony_ci/* pad multiplexing for ssp0_cs3 device */ 110062306a36Sopenharmony_cistatic const unsigned ssp0_cs3_pins[] = { 132 }; 110162306a36Sopenharmony_cistatic struct spear_muxreg ssp0_cs3_muxreg[] = { 110262306a36Sopenharmony_ci { 110362306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 110462306a36Sopenharmony_ci .mask = SSP0_CS3_REG4_MASK, 110562306a36Sopenharmony_ci .val = SSP0_CS3_REG4_MASK, 110662306a36Sopenharmony_ci }, 110762306a36Sopenharmony_ci}; 110862306a36Sopenharmony_ci 110962306a36Sopenharmony_cistatic struct spear_modemux ssp0_cs3_modemux[] = { 111062306a36Sopenharmony_ci { 111162306a36Sopenharmony_ci .muxregs = ssp0_cs3_muxreg, 111262306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(ssp0_cs3_muxreg), 111362306a36Sopenharmony_ci }, 111462306a36Sopenharmony_ci}; 111562306a36Sopenharmony_ci 111662306a36Sopenharmony_cistatic struct spear_pingroup ssp0_cs3_pingroup = { 111762306a36Sopenharmony_ci .name = "ssp0_cs3_grp", 111862306a36Sopenharmony_ci .pins = ssp0_cs3_pins, 111962306a36Sopenharmony_ci .npins = ARRAY_SIZE(ssp0_cs3_pins), 112062306a36Sopenharmony_ci .modemuxs = ssp0_cs3_modemux, 112162306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(ssp0_cs3_modemux), 112262306a36Sopenharmony_ci}; 112362306a36Sopenharmony_ci 112462306a36Sopenharmony_cistatic const char *const ssp0_grps[] = { "ssp0_grp", "ssp0_cs1_grp", 112562306a36Sopenharmony_ci "ssp0_cs2_grp", "ssp0_cs3_grp" }; 112662306a36Sopenharmony_cistatic struct spear_function ssp0_function = { 112762306a36Sopenharmony_ci .name = "ssp0", 112862306a36Sopenharmony_ci .groups = ssp0_grps, 112962306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(ssp0_grps), 113062306a36Sopenharmony_ci}; 113162306a36Sopenharmony_ci 113262306a36Sopenharmony_ci/* pad multiplexing for uart0 device */ 113362306a36Sopenharmony_cistatic const unsigned uart0_pins[] = { 86, 87 }; 113462306a36Sopenharmony_cistatic struct spear_muxreg uart0_muxreg[] = { 113562306a36Sopenharmony_ci { 113662306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 113762306a36Sopenharmony_ci .mask = UART0_REG2_MASK, 113862306a36Sopenharmony_ci .val = UART0_REG2_MASK, 113962306a36Sopenharmony_ci }, 114062306a36Sopenharmony_ci}; 114162306a36Sopenharmony_ci 114262306a36Sopenharmony_cistatic struct spear_modemux uart0_modemux[] = { 114362306a36Sopenharmony_ci { 114462306a36Sopenharmony_ci .muxregs = uart0_muxreg, 114562306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(uart0_muxreg), 114662306a36Sopenharmony_ci }, 114762306a36Sopenharmony_ci}; 114862306a36Sopenharmony_ci 114962306a36Sopenharmony_cistatic struct spear_pingroup uart0_pingroup = { 115062306a36Sopenharmony_ci .name = "uart0_grp", 115162306a36Sopenharmony_ci .pins = uart0_pins, 115262306a36Sopenharmony_ci .npins = ARRAY_SIZE(uart0_pins), 115362306a36Sopenharmony_ci .modemuxs = uart0_modemux, 115462306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(uart0_modemux), 115562306a36Sopenharmony_ci}; 115662306a36Sopenharmony_ci 115762306a36Sopenharmony_ci/* pad multiplexing for uart0_enh device */ 115862306a36Sopenharmony_cistatic const unsigned uart0_enh_pins[] = { 11, 12, 13, 14, 15, 16 }; 115962306a36Sopenharmony_cistatic struct spear_muxreg uart0_enh_muxreg[] = { 116062306a36Sopenharmony_ci { 116162306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 116262306a36Sopenharmony_ci .mask = GPT_MASK, 116362306a36Sopenharmony_ci .val = 0, 116462306a36Sopenharmony_ci }, { 116562306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 116662306a36Sopenharmony_ci .mask = UART0_ENH_AND_GPT_REG0_MASK, 116762306a36Sopenharmony_ci .val = UART0_ENH_AND_GPT_REG0_MASK, 116862306a36Sopenharmony_ci }, 116962306a36Sopenharmony_ci}; 117062306a36Sopenharmony_ci 117162306a36Sopenharmony_cistatic struct spear_modemux uart0_enh_modemux[] = { 117262306a36Sopenharmony_ci { 117362306a36Sopenharmony_ci .muxregs = uart0_enh_muxreg, 117462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(uart0_enh_muxreg), 117562306a36Sopenharmony_ci }, 117662306a36Sopenharmony_ci}; 117762306a36Sopenharmony_ci 117862306a36Sopenharmony_cistatic struct spear_pingroup uart0_enh_pingroup = { 117962306a36Sopenharmony_ci .name = "uart0_enh_grp", 118062306a36Sopenharmony_ci .pins = uart0_enh_pins, 118162306a36Sopenharmony_ci .npins = ARRAY_SIZE(uart0_enh_pins), 118262306a36Sopenharmony_ci .modemuxs = uart0_enh_modemux, 118362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(uart0_enh_modemux), 118462306a36Sopenharmony_ci}; 118562306a36Sopenharmony_ci 118662306a36Sopenharmony_cistatic const char *const uart0_grps[] = { "uart0_grp", "uart0_enh_grp" }; 118762306a36Sopenharmony_cistatic struct spear_function uart0_function = { 118862306a36Sopenharmony_ci .name = "uart0", 118962306a36Sopenharmony_ci .groups = uart0_grps, 119062306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(uart0_grps), 119162306a36Sopenharmony_ci}; 119262306a36Sopenharmony_ci 119362306a36Sopenharmony_ci/* pad multiplexing for uart1 device */ 119462306a36Sopenharmony_cistatic const unsigned uart1_pins[] = { 88, 89 }; 119562306a36Sopenharmony_cistatic struct spear_muxreg uart1_muxreg[] = { 119662306a36Sopenharmony_ci { 119762306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 119862306a36Sopenharmony_ci .mask = UART1_REG2_MASK, 119962306a36Sopenharmony_ci .val = UART1_REG2_MASK, 120062306a36Sopenharmony_ci }, 120162306a36Sopenharmony_ci}; 120262306a36Sopenharmony_ci 120362306a36Sopenharmony_cistatic struct spear_modemux uart1_modemux[] = { 120462306a36Sopenharmony_ci { 120562306a36Sopenharmony_ci .muxregs = uart1_muxreg, 120662306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(uart1_muxreg), 120762306a36Sopenharmony_ci }, 120862306a36Sopenharmony_ci}; 120962306a36Sopenharmony_ci 121062306a36Sopenharmony_cistatic struct spear_pingroup uart1_pingroup = { 121162306a36Sopenharmony_ci .name = "uart1_grp", 121262306a36Sopenharmony_ci .pins = uart1_pins, 121362306a36Sopenharmony_ci .npins = ARRAY_SIZE(uart1_pins), 121462306a36Sopenharmony_ci .modemuxs = uart1_modemux, 121562306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(uart1_modemux), 121662306a36Sopenharmony_ci}; 121762306a36Sopenharmony_ci 121862306a36Sopenharmony_cistatic const char *const uart1_grps[] = { "uart1_grp" }; 121962306a36Sopenharmony_cistatic struct spear_function uart1_function = { 122062306a36Sopenharmony_ci .name = "uart1", 122162306a36Sopenharmony_ci .groups = uart1_grps, 122262306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(uart1_grps), 122362306a36Sopenharmony_ci}; 122462306a36Sopenharmony_ci 122562306a36Sopenharmony_ci/* pad multiplexing for i2s_in device */ 122662306a36Sopenharmony_cistatic const unsigned i2s_in_pins[] = { 90, 91, 92, 93, 94, 99 }; 122762306a36Sopenharmony_cistatic struct spear_muxreg i2s_in_muxreg[] = { 122862306a36Sopenharmony_ci { 122962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_3, 123062306a36Sopenharmony_ci .mask = I2S_IN_REG2_MASK, 123162306a36Sopenharmony_ci .val = I2S_IN_REG2_MASK, 123262306a36Sopenharmony_ci }, { 123362306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_4, 123462306a36Sopenharmony_ci .mask = I2S_IN_REG3_MASK, 123562306a36Sopenharmony_ci .val = I2S_IN_REG3_MASK, 123662306a36Sopenharmony_ci }, 123762306a36Sopenharmony_ci}; 123862306a36Sopenharmony_ci 123962306a36Sopenharmony_cistatic struct spear_modemux i2s_in_modemux[] = { 124062306a36Sopenharmony_ci { 124162306a36Sopenharmony_ci .muxregs = i2s_in_muxreg, 124262306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(i2s_in_muxreg), 124362306a36Sopenharmony_ci }, 124462306a36Sopenharmony_ci}; 124562306a36Sopenharmony_ci 124662306a36Sopenharmony_cistatic struct spear_pingroup i2s_in_pingroup = { 124762306a36Sopenharmony_ci .name = "i2s_in_grp", 124862306a36Sopenharmony_ci .pins = i2s_in_pins, 124962306a36Sopenharmony_ci .npins = ARRAY_SIZE(i2s_in_pins), 125062306a36Sopenharmony_ci .modemuxs = i2s_in_modemux, 125162306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(i2s_in_modemux), 125262306a36Sopenharmony_ci}; 125362306a36Sopenharmony_ci 125462306a36Sopenharmony_ci/* pad multiplexing for i2s_out device */ 125562306a36Sopenharmony_cistatic const unsigned i2s_out_pins[] = { 95, 96, 97, 98, 100, 101, 102, 103 }; 125662306a36Sopenharmony_cistatic struct spear_muxreg i2s_out_muxreg[] = { 125762306a36Sopenharmony_ci { 125862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_4, 125962306a36Sopenharmony_ci .mask = I2S_OUT_REG3_MASK, 126062306a36Sopenharmony_ci .val = I2S_OUT_REG3_MASK, 126162306a36Sopenharmony_ci }, 126262306a36Sopenharmony_ci}; 126362306a36Sopenharmony_ci 126462306a36Sopenharmony_cistatic struct spear_modemux i2s_out_modemux[] = { 126562306a36Sopenharmony_ci { 126662306a36Sopenharmony_ci .muxregs = i2s_out_muxreg, 126762306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(i2s_out_muxreg), 126862306a36Sopenharmony_ci }, 126962306a36Sopenharmony_ci}; 127062306a36Sopenharmony_ci 127162306a36Sopenharmony_cistatic struct spear_pingroup i2s_out_pingroup = { 127262306a36Sopenharmony_ci .name = "i2s_out_grp", 127362306a36Sopenharmony_ci .pins = i2s_out_pins, 127462306a36Sopenharmony_ci .npins = ARRAY_SIZE(i2s_out_pins), 127562306a36Sopenharmony_ci .modemuxs = i2s_out_modemux, 127662306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(i2s_out_modemux), 127762306a36Sopenharmony_ci}; 127862306a36Sopenharmony_ci 127962306a36Sopenharmony_cistatic const char *const i2s_grps[] = { "i2s_in_grp", "i2s_out_grp" }; 128062306a36Sopenharmony_cistatic struct spear_function i2s_function = { 128162306a36Sopenharmony_ci .name = "i2s", 128262306a36Sopenharmony_ci .groups = i2s_grps, 128362306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(i2s_grps), 128462306a36Sopenharmony_ci}; 128562306a36Sopenharmony_ci 128662306a36Sopenharmony_ci/* pad multiplexing for gmac device */ 128762306a36Sopenharmony_cistatic const unsigned gmac_pins[] = { 104, 105, 106, 107, 108, 109, 110, 111, 128862306a36Sopenharmony_ci 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 128962306a36Sopenharmony_ci 126, 127, 128, 129, 130, 131 }; 129062306a36Sopenharmony_ci#define GMAC_MUXREG \ 129162306a36Sopenharmony_ci { \ 129262306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_4, \ 129362306a36Sopenharmony_ci .mask = GMAC_REG3_MASK, \ 129462306a36Sopenharmony_ci .val = GMAC_REG3_MASK, \ 129562306a36Sopenharmony_ci }, { \ 129662306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, \ 129762306a36Sopenharmony_ci .mask = GMAC_REG4_MASK, \ 129862306a36Sopenharmony_ci .val = GMAC_REG4_MASK, \ 129962306a36Sopenharmony_ci } 130062306a36Sopenharmony_ci 130162306a36Sopenharmony_ci/* pad multiplexing for gmii device */ 130262306a36Sopenharmony_cistatic struct spear_muxreg gmii_muxreg[] = { 130362306a36Sopenharmony_ci GMAC_MUXREG, 130462306a36Sopenharmony_ci { 130562306a36Sopenharmony_ci .reg = GMAC_CLK_CFG, 130662306a36Sopenharmony_ci .mask = GMAC_PHY_IF_SEL_MASK, 130762306a36Sopenharmony_ci .val = GMAC_PHY_IF_GMII_VAL, 130862306a36Sopenharmony_ci }, 130962306a36Sopenharmony_ci}; 131062306a36Sopenharmony_ci 131162306a36Sopenharmony_cistatic struct spear_modemux gmii_modemux[] = { 131262306a36Sopenharmony_ci { 131362306a36Sopenharmony_ci .muxregs = gmii_muxreg, 131462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(gmii_muxreg), 131562306a36Sopenharmony_ci }, 131662306a36Sopenharmony_ci}; 131762306a36Sopenharmony_ci 131862306a36Sopenharmony_cistatic struct spear_pingroup gmii_pingroup = { 131962306a36Sopenharmony_ci .name = "gmii_grp", 132062306a36Sopenharmony_ci .pins = gmac_pins, 132162306a36Sopenharmony_ci .npins = ARRAY_SIZE(gmac_pins), 132262306a36Sopenharmony_ci .modemuxs = gmii_modemux, 132362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(gmii_modemux), 132462306a36Sopenharmony_ci}; 132562306a36Sopenharmony_ci 132662306a36Sopenharmony_ci/* pad multiplexing for rgmii device */ 132762306a36Sopenharmony_cistatic struct spear_muxreg rgmii_muxreg[] = { 132862306a36Sopenharmony_ci GMAC_MUXREG, 132962306a36Sopenharmony_ci { 133062306a36Sopenharmony_ci .reg = GMAC_CLK_CFG, 133162306a36Sopenharmony_ci .mask = GMAC_PHY_IF_SEL_MASK, 133262306a36Sopenharmony_ci .val = GMAC_PHY_IF_RGMII_VAL, 133362306a36Sopenharmony_ci }, 133462306a36Sopenharmony_ci}; 133562306a36Sopenharmony_ci 133662306a36Sopenharmony_cistatic struct spear_modemux rgmii_modemux[] = { 133762306a36Sopenharmony_ci { 133862306a36Sopenharmony_ci .muxregs = rgmii_muxreg, 133962306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(rgmii_muxreg), 134062306a36Sopenharmony_ci }, 134162306a36Sopenharmony_ci}; 134262306a36Sopenharmony_ci 134362306a36Sopenharmony_cistatic struct spear_pingroup rgmii_pingroup = { 134462306a36Sopenharmony_ci .name = "rgmii_grp", 134562306a36Sopenharmony_ci .pins = gmac_pins, 134662306a36Sopenharmony_ci .npins = ARRAY_SIZE(gmac_pins), 134762306a36Sopenharmony_ci .modemuxs = rgmii_modemux, 134862306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(rgmii_modemux), 134962306a36Sopenharmony_ci}; 135062306a36Sopenharmony_ci 135162306a36Sopenharmony_ci/* pad multiplexing for rmii device */ 135262306a36Sopenharmony_cistatic struct spear_muxreg rmii_muxreg[] = { 135362306a36Sopenharmony_ci GMAC_MUXREG, 135462306a36Sopenharmony_ci { 135562306a36Sopenharmony_ci .reg = GMAC_CLK_CFG, 135662306a36Sopenharmony_ci .mask = GMAC_PHY_IF_SEL_MASK, 135762306a36Sopenharmony_ci .val = GMAC_PHY_IF_RMII_VAL, 135862306a36Sopenharmony_ci }, 135962306a36Sopenharmony_ci}; 136062306a36Sopenharmony_ci 136162306a36Sopenharmony_cistatic struct spear_modemux rmii_modemux[] = { 136262306a36Sopenharmony_ci { 136362306a36Sopenharmony_ci .muxregs = rmii_muxreg, 136462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(rmii_muxreg), 136562306a36Sopenharmony_ci }, 136662306a36Sopenharmony_ci}; 136762306a36Sopenharmony_ci 136862306a36Sopenharmony_cistatic struct spear_pingroup rmii_pingroup = { 136962306a36Sopenharmony_ci .name = "rmii_grp", 137062306a36Sopenharmony_ci .pins = gmac_pins, 137162306a36Sopenharmony_ci .npins = ARRAY_SIZE(gmac_pins), 137262306a36Sopenharmony_ci .modemuxs = rmii_modemux, 137362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(rmii_modemux), 137462306a36Sopenharmony_ci}; 137562306a36Sopenharmony_ci 137662306a36Sopenharmony_ci/* pad multiplexing for sgmii device */ 137762306a36Sopenharmony_cistatic struct spear_muxreg sgmii_muxreg[] = { 137862306a36Sopenharmony_ci GMAC_MUXREG, 137962306a36Sopenharmony_ci { 138062306a36Sopenharmony_ci .reg = GMAC_CLK_CFG, 138162306a36Sopenharmony_ci .mask = GMAC_PHY_IF_SEL_MASK, 138262306a36Sopenharmony_ci .val = GMAC_PHY_IF_SGMII_VAL, 138362306a36Sopenharmony_ci }, 138462306a36Sopenharmony_ci}; 138562306a36Sopenharmony_ci 138662306a36Sopenharmony_cistatic struct spear_modemux sgmii_modemux[] = { 138762306a36Sopenharmony_ci { 138862306a36Sopenharmony_ci .muxregs = sgmii_muxreg, 138962306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(sgmii_muxreg), 139062306a36Sopenharmony_ci }, 139162306a36Sopenharmony_ci}; 139262306a36Sopenharmony_ci 139362306a36Sopenharmony_cistatic struct spear_pingroup sgmii_pingroup = { 139462306a36Sopenharmony_ci .name = "sgmii_grp", 139562306a36Sopenharmony_ci .pins = gmac_pins, 139662306a36Sopenharmony_ci .npins = ARRAY_SIZE(gmac_pins), 139762306a36Sopenharmony_ci .modemuxs = sgmii_modemux, 139862306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(sgmii_modemux), 139962306a36Sopenharmony_ci}; 140062306a36Sopenharmony_ci 140162306a36Sopenharmony_cistatic const char *const gmac_grps[] = { "gmii_grp", "rgmii_grp", "rmii_grp", 140262306a36Sopenharmony_ci "sgmii_grp" }; 140362306a36Sopenharmony_cistatic struct spear_function gmac_function = { 140462306a36Sopenharmony_ci .name = "gmac", 140562306a36Sopenharmony_ci .groups = gmac_grps, 140662306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(gmac_grps), 140762306a36Sopenharmony_ci}; 140862306a36Sopenharmony_ci 140962306a36Sopenharmony_ci/* pad multiplexing for i2c0 device */ 141062306a36Sopenharmony_cistatic const unsigned i2c0_pins[] = { 133, 134 }; 141162306a36Sopenharmony_cistatic struct spear_muxreg i2c0_muxreg[] = { 141262306a36Sopenharmony_ci { 141362306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 141462306a36Sopenharmony_ci .mask = I2C0_REG4_MASK, 141562306a36Sopenharmony_ci .val = I2C0_REG4_MASK, 141662306a36Sopenharmony_ci }, 141762306a36Sopenharmony_ci}; 141862306a36Sopenharmony_ci 141962306a36Sopenharmony_cistatic struct spear_modemux i2c0_modemux[] = { 142062306a36Sopenharmony_ci { 142162306a36Sopenharmony_ci .muxregs = i2c0_muxreg, 142262306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(i2c0_muxreg), 142362306a36Sopenharmony_ci }, 142462306a36Sopenharmony_ci}; 142562306a36Sopenharmony_ci 142662306a36Sopenharmony_cistatic struct spear_pingroup i2c0_pingroup = { 142762306a36Sopenharmony_ci .name = "i2c0_grp", 142862306a36Sopenharmony_ci .pins = i2c0_pins, 142962306a36Sopenharmony_ci .npins = ARRAY_SIZE(i2c0_pins), 143062306a36Sopenharmony_ci .modemuxs = i2c0_modemux, 143162306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(i2c0_modemux), 143262306a36Sopenharmony_ci}; 143362306a36Sopenharmony_ci 143462306a36Sopenharmony_cistatic const char *const i2c0_grps[] = { "i2c0_grp" }; 143562306a36Sopenharmony_cistatic struct spear_function i2c0_function = { 143662306a36Sopenharmony_ci .name = "i2c0", 143762306a36Sopenharmony_ci .groups = i2c0_grps, 143862306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(i2c0_grps), 143962306a36Sopenharmony_ci}; 144062306a36Sopenharmony_ci 144162306a36Sopenharmony_ci/* pad multiplexing for i2c1 device */ 144262306a36Sopenharmony_cistatic const unsigned i2c1_pins[] = { 18, 23 }; 144362306a36Sopenharmony_cistatic struct spear_muxreg i2c1_muxreg[] = { 144462306a36Sopenharmony_ci { 144562306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_1, 144662306a36Sopenharmony_ci .mask = I2C1_REG0_MASK, 144762306a36Sopenharmony_ci .val = I2C1_REG0_MASK, 144862306a36Sopenharmony_ci }, 144962306a36Sopenharmony_ci}; 145062306a36Sopenharmony_ci 145162306a36Sopenharmony_cistatic struct spear_modemux i2c1_modemux[] = { 145262306a36Sopenharmony_ci { 145362306a36Sopenharmony_ci .muxregs = i2c1_muxreg, 145462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(i2c1_muxreg), 145562306a36Sopenharmony_ci }, 145662306a36Sopenharmony_ci}; 145762306a36Sopenharmony_ci 145862306a36Sopenharmony_cistatic struct spear_pingroup i2c1_pingroup = { 145962306a36Sopenharmony_ci .name = "i2c1_grp", 146062306a36Sopenharmony_ci .pins = i2c1_pins, 146162306a36Sopenharmony_ci .npins = ARRAY_SIZE(i2c1_pins), 146262306a36Sopenharmony_ci .modemuxs = i2c1_modemux, 146362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(i2c1_modemux), 146462306a36Sopenharmony_ci}; 146562306a36Sopenharmony_ci 146662306a36Sopenharmony_cistatic const char *const i2c1_grps[] = { "i2c1_grp" }; 146762306a36Sopenharmony_cistatic struct spear_function i2c1_function = { 146862306a36Sopenharmony_ci .name = "i2c1", 146962306a36Sopenharmony_ci .groups = i2c1_grps, 147062306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(i2c1_grps), 147162306a36Sopenharmony_ci}; 147262306a36Sopenharmony_ci 147362306a36Sopenharmony_ci/* pad multiplexing for cec0 device */ 147462306a36Sopenharmony_cistatic const unsigned cec0_pins[] = { 135 }; 147562306a36Sopenharmony_cistatic struct spear_muxreg cec0_muxreg[] = { 147662306a36Sopenharmony_ci { 147762306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 147862306a36Sopenharmony_ci .mask = CEC0_REG4_MASK, 147962306a36Sopenharmony_ci .val = CEC0_REG4_MASK, 148062306a36Sopenharmony_ci }, 148162306a36Sopenharmony_ci}; 148262306a36Sopenharmony_ci 148362306a36Sopenharmony_cistatic struct spear_modemux cec0_modemux[] = { 148462306a36Sopenharmony_ci { 148562306a36Sopenharmony_ci .muxregs = cec0_muxreg, 148662306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(cec0_muxreg), 148762306a36Sopenharmony_ci }, 148862306a36Sopenharmony_ci}; 148962306a36Sopenharmony_ci 149062306a36Sopenharmony_cistatic struct spear_pingroup cec0_pingroup = { 149162306a36Sopenharmony_ci .name = "cec0_grp", 149262306a36Sopenharmony_ci .pins = cec0_pins, 149362306a36Sopenharmony_ci .npins = ARRAY_SIZE(cec0_pins), 149462306a36Sopenharmony_ci .modemuxs = cec0_modemux, 149562306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(cec0_modemux), 149662306a36Sopenharmony_ci}; 149762306a36Sopenharmony_ci 149862306a36Sopenharmony_cistatic const char *const cec0_grps[] = { "cec0_grp" }; 149962306a36Sopenharmony_cistatic struct spear_function cec0_function = { 150062306a36Sopenharmony_ci .name = "cec0", 150162306a36Sopenharmony_ci .groups = cec0_grps, 150262306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(cec0_grps), 150362306a36Sopenharmony_ci}; 150462306a36Sopenharmony_ci 150562306a36Sopenharmony_ci/* pad multiplexing for cec1 device */ 150662306a36Sopenharmony_cistatic const unsigned cec1_pins[] = { 136 }; 150762306a36Sopenharmony_cistatic struct spear_muxreg cec1_muxreg[] = { 150862306a36Sopenharmony_ci { 150962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 151062306a36Sopenharmony_ci .mask = CEC1_REG4_MASK, 151162306a36Sopenharmony_ci .val = CEC1_REG4_MASK, 151262306a36Sopenharmony_ci }, 151362306a36Sopenharmony_ci}; 151462306a36Sopenharmony_ci 151562306a36Sopenharmony_cistatic struct spear_modemux cec1_modemux[] = { 151662306a36Sopenharmony_ci { 151762306a36Sopenharmony_ci .muxregs = cec1_muxreg, 151862306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(cec1_muxreg), 151962306a36Sopenharmony_ci }, 152062306a36Sopenharmony_ci}; 152162306a36Sopenharmony_ci 152262306a36Sopenharmony_cistatic struct spear_pingroup cec1_pingroup = { 152362306a36Sopenharmony_ci .name = "cec1_grp", 152462306a36Sopenharmony_ci .pins = cec1_pins, 152562306a36Sopenharmony_ci .npins = ARRAY_SIZE(cec1_pins), 152662306a36Sopenharmony_ci .modemuxs = cec1_modemux, 152762306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(cec1_modemux), 152862306a36Sopenharmony_ci}; 152962306a36Sopenharmony_ci 153062306a36Sopenharmony_cistatic const char *const cec1_grps[] = { "cec1_grp" }; 153162306a36Sopenharmony_cistatic struct spear_function cec1_function = { 153262306a36Sopenharmony_ci .name = "cec1", 153362306a36Sopenharmony_ci .groups = cec1_grps, 153462306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(cec1_grps), 153562306a36Sopenharmony_ci}; 153662306a36Sopenharmony_ci 153762306a36Sopenharmony_ci/* pad multiplexing for mcif devices */ 153862306a36Sopenharmony_cistatic const unsigned mcif_pins[] = { 193, 194, 195, 196, 197, 198, 199, 200, 153962306a36Sopenharmony_ci 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 154062306a36Sopenharmony_ci 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 154162306a36Sopenharmony_ci 229, 230, 231, 232, 237 }; 154262306a36Sopenharmony_ci#define MCIF_MUXREG \ 154362306a36Sopenharmony_ci { \ 154462306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, \ 154562306a36Sopenharmony_ci .mask = MCIF_MASK, \ 154662306a36Sopenharmony_ci .val = MCIF_MASK, \ 154762306a36Sopenharmony_ci }, { \ 154862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_7, \ 154962306a36Sopenharmony_ci .mask = FSMC_PNOR_AND_MCIF_REG6_MASK | MCIF_REG6_MASK, \ 155062306a36Sopenharmony_ci .val = FSMC_PNOR_AND_MCIF_REG6_MASK | MCIF_REG6_MASK, \ 155162306a36Sopenharmony_ci }, { \ 155262306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_8, \ 155362306a36Sopenharmony_ci .mask = MCIF_REG7_MASK, \ 155462306a36Sopenharmony_ci .val = MCIF_REG7_MASK, \ 155562306a36Sopenharmony_ci } 155662306a36Sopenharmony_ci 155762306a36Sopenharmony_ci/* Pad multiplexing for sdhci device */ 155862306a36Sopenharmony_cistatic struct spear_muxreg sdhci_muxreg[] = { 155962306a36Sopenharmony_ci MCIF_MUXREG, 156062306a36Sopenharmony_ci { 156162306a36Sopenharmony_ci .reg = PERIP_CFG, 156262306a36Sopenharmony_ci .mask = MCIF_SEL_MASK, 156362306a36Sopenharmony_ci .val = MCIF_SEL_SD, 156462306a36Sopenharmony_ci }, 156562306a36Sopenharmony_ci}; 156662306a36Sopenharmony_ci 156762306a36Sopenharmony_cistatic struct spear_modemux sdhci_modemux[] = { 156862306a36Sopenharmony_ci { 156962306a36Sopenharmony_ci .muxregs = sdhci_muxreg, 157062306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(sdhci_muxreg), 157162306a36Sopenharmony_ci }, 157262306a36Sopenharmony_ci}; 157362306a36Sopenharmony_ci 157462306a36Sopenharmony_cistatic struct spear_pingroup sdhci_pingroup = { 157562306a36Sopenharmony_ci .name = "sdhci_grp", 157662306a36Sopenharmony_ci .pins = mcif_pins, 157762306a36Sopenharmony_ci .npins = ARRAY_SIZE(mcif_pins), 157862306a36Sopenharmony_ci .modemuxs = sdhci_modemux, 157962306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(sdhci_modemux), 158062306a36Sopenharmony_ci}; 158162306a36Sopenharmony_ci 158262306a36Sopenharmony_cistatic const char *const sdhci_grps[] = { "sdhci_grp" }; 158362306a36Sopenharmony_cistatic struct spear_function sdhci_function = { 158462306a36Sopenharmony_ci .name = "sdhci", 158562306a36Sopenharmony_ci .groups = sdhci_grps, 158662306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(sdhci_grps), 158762306a36Sopenharmony_ci}; 158862306a36Sopenharmony_ci 158962306a36Sopenharmony_ci/* Pad multiplexing for cf device */ 159062306a36Sopenharmony_cistatic struct spear_muxreg cf_muxreg[] = { 159162306a36Sopenharmony_ci MCIF_MUXREG, 159262306a36Sopenharmony_ci { 159362306a36Sopenharmony_ci .reg = PERIP_CFG, 159462306a36Sopenharmony_ci .mask = MCIF_SEL_MASK, 159562306a36Sopenharmony_ci .val = MCIF_SEL_CF, 159662306a36Sopenharmony_ci }, 159762306a36Sopenharmony_ci}; 159862306a36Sopenharmony_ci 159962306a36Sopenharmony_cistatic struct spear_modemux cf_modemux[] = { 160062306a36Sopenharmony_ci { 160162306a36Sopenharmony_ci .muxregs = cf_muxreg, 160262306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(cf_muxreg), 160362306a36Sopenharmony_ci }, 160462306a36Sopenharmony_ci}; 160562306a36Sopenharmony_ci 160662306a36Sopenharmony_cistatic struct spear_pingroup cf_pingroup = { 160762306a36Sopenharmony_ci .name = "cf_grp", 160862306a36Sopenharmony_ci .pins = mcif_pins, 160962306a36Sopenharmony_ci .npins = ARRAY_SIZE(mcif_pins), 161062306a36Sopenharmony_ci .modemuxs = cf_modemux, 161162306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(cf_modemux), 161262306a36Sopenharmony_ci}; 161362306a36Sopenharmony_ci 161462306a36Sopenharmony_cistatic const char *const cf_grps[] = { "cf_grp" }; 161562306a36Sopenharmony_cistatic struct spear_function cf_function = { 161662306a36Sopenharmony_ci .name = "cf", 161762306a36Sopenharmony_ci .groups = cf_grps, 161862306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(cf_grps), 161962306a36Sopenharmony_ci}; 162062306a36Sopenharmony_ci 162162306a36Sopenharmony_ci/* Pad multiplexing for xd device */ 162262306a36Sopenharmony_cistatic struct spear_muxreg xd_muxreg[] = { 162362306a36Sopenharmony_ci MCIF_MUXREG, 162462306a36Sopenharmony_ci { 162562306a36Sopenharmony_ci .reg = PERIP_CFG, 162662306a36Sopenharmony_ci .mask = MCIF_SEL_MASK, 162762306a36Sopenharmony_ci .val = MCIF_SEL_XD, 162862306a36Sopenharmony_ci }, 162962306a36Sopenharmony_ci}; 163062306a36Sopenharmony_ci 163162306a36Sopenharmony_cistatic struct spear_modemux xd_modemux[] = { 163262306a36Sopenharmony_ci { 163362306a36Sopenharmony_ci .muxregs = xd_muxreg, 163462306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(xd_muxreg), 163562306a36Sopenharmony_ci }, 163662306a36Sopenharmony_ci}; 163762306a36Sopenharmony_ci 163862306a36Sopenharmony_cistatic struct spear_pingroup xd_pingroup = { 163962306a36Sopenharmony_ci .name = "xd_grp", 164062306a36Sopenharmony_ci .pins = mcif_pins, 164162306a36Sopenharmony_ci .npins = ARRAY_SIZE(mcif_pins), 164262306a36Sopenharmony_ci .modemuxs = xd_modemux, 164362306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(xd_modemux), 164462306a36Sopenharmony_ci}; 164562306a36Sopenharmony_ci 164662306a36Sopenharmony_cistatic const char *const xd_grps[] = { "xd_grp" }; 164762306a36Sopenharmony_cistatic struct spear_function xd_function = { 164862306a36Sopenharmony_ci .name = "xd", 164962306a36Sopenharmony_ci .groups = xd_grps, 165062306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(xd_grps), 165162306a36Sopenharmony_ci}; 165262306a36Sopenharmony_ci 165362306a36Sopenharmony_ci/* pad multiplexing for clcd device */ 165462306a36Sopenharmony_cistatic const unsigned clcd_pins[] = { 138, 139, 140, 141, 142, 143, 144, 145, 165562306a36Sopenharmony_ci 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 165662306a36Sopenharmony_ci 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 165762306a36Sopenharmony_ci 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 165862306a36Sopenharmony_ci 188, 189, 190, 191 }; 165962306a36Sopenharmony_cistatic struct spear_muxreg clcd_muxreg[] = { 166062306a36Sopenharmony_ci { 166162306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 166262306a36Sopenharmony_ci .mask = ARM_TRACE_MASK | MIPHY_DBG_MASK, 166362306a36Sopenharmony_ci .val = 0, 166462306a36Sopenharmony_ci }, { 166562306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 166662306a36Sopenharmony_ci .mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK, 166762306a36Sopenharmony_ci .val = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK, 166862306a36Sopenharmony_ci }, { 166962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_6, 167062306a36Sopenharmony_ci .mask = CLCD_AND_ARM_TRACE_REG5_MASK, 167162306a36Sopenharmony_ci .val = CLCD_AND_ARM_TRACE_REG5_MASK, 167262306a36Sopenharmony_ci }, { 167362306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_7, 167462306a36Sopenharmony_ci .mask = CLCD_AND_ARM_TRACE_REG6_MASK, 167562306a36Sopenharmony_ci .val = CLCD_AND_ARM_TRACE_REG6_MASK, 167662306a36Sopenharmony_ci }, 167762306a36Sopenharmony_ci}; 167862306a36Sopenharmony_ci 167962306a36Sopenharmony_cistatic struct spear_modemux clcd_modemux[] = { 168062306a36Sopenharmony_ci { 168162306a36Sopenharmony_ci .muxregs = clcd_muxreg, 168262306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(clcd_muxreg), 168362306a36Sopenharmony_ci }, 168462306a36Sopenharmony_ci}; 168562306a36Sopenharmony_ci 168662306a36Sopenharmony_cistatic struct spear_pingroup clcd_pingroup = { 168762306a36Sopenharmony_ci .name = "clcd_grp", 168862306a36Sopenharmony_ci .pins = clcd_pins, 168962306a36Sopenharmony_ci .npins = ARRAY_SIZE(clcd_pins), 169062306a36Sopenharmony_ci .modemuxs = clcd_modemux, 169162306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(clcd_modemux), 169262306a36Sopenharmony_ci}; 169362306a36Sopenharmony_ci 169462306a36Sopenharmony_ci/* Disable cld runtime to save panel damage */ 169562306a36Sopenharmony_cistatic struct spear_muxreg clcd_sleep_muxreg[] = { 169662306a36Sopenharmony_ci { 169762306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 169862306a36Sopenharmony_ci .mask = ARM_TRACE_MASK | MIPHY_DBG_MASK, 169962306a36Sopenharmony_ci .val = 0, 170062306a36Sopenharmony_ci }, { 170162306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 170262306a36Sopenharmony_ci .mask = CLCD_REG4_MASK | CLCD_AND_ARM_TRACE_REG4_MASK, 170362306a36Sopenharmony_ci .val = 0x0, 170462306a36Sopenharmony_ci }, { 170562306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_6, 170662306a36Sopenharmony_ci .mask = CLCD_AND_ARM_TRACE_REG5_MASK, 170762306a36Sopenharmony_ci .val = 0x0, 170862306a36Sopenharmony_ci }, { 170962306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_7, 171062306a36Sopenharmony_ci .mask = CLCD_AND_ARM_TRACE_REG6_MASK, 171162306a36Sopenharmony_ci .val = 0x0, 171262306a36Sopenharmony_ci }, 171362306a36Sopenharmony_ci}; 171462306a36Sopenharmony_ci 171562306a36Sopenharmony_cistatic struct spear_modemux clcd_sleep_modemux[] = { 171662306a36Sopenharmony_ci { 171762306a36Sopenharmony_ci .muxregs = clcd_sleep_muxreg, 171862306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(clcd_sleep_muxreg), 171962306a36Sopenharmony_ci }, 172062306a36Sopenharmony_ci}; 172162306a36Sopenharmony_ci 172262306a36Sopenharmony_cistatic struct spear_pingroup clcd_sleep_pingroup = { 172362306a36Sopenharmony_ci .name = "clcd_sleep_grp", 172462306a36Sopenharmony_ci .pins = clcd_pins, 172562306a36Sopenharmony_ci .npins = ARRAY_SIZE(clcd_pins), 172662306a36Sopenharmony_ci .modemuxs = clcd_sleep_modemux, 172762306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(clcd_sleep_modemux), 172862306a36Sopenharmony_ci}; 172962306a36Sopenharmony_ci 173062306a36Sopenharmony_cistatic const char *const clcd_grps[] = { "clcd_grp", "clcd_sleep_grp" }; 173162306a36Sopenharmony_cistatic struct spear_function clcd_function = { 173262306a36Sopenharmony_ci .name = "clcd", 173362306a36Sopenharmony_ci .groups = clcd_grps, 173462306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(clcd_grps), 173562306a36Sopenharmony_ci}; 173662306a36Sopenharmony_ci 173762306a36Sopenharmony_ci/* pad multiplexing for arm_trace device */ 173862306a36Sopenharmony_cistatic const unsigned arm_trace_pins[] = { 158, 159, 160, 161, 162, 163, 164, 173962306a36Sopenharmony_ci 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 174062306a36Sopenharmony_ci 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 174162306a36Sopenharmony_ci 193, 194, 195, 196, 197, 198, 199, 200 }; 174262306a36Sopenharmony_cistatic struct spear_muxreg arm_trace_muxreg[] = { 174362306a36Sopenharmony_ci { 174462306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 174562306a36Sopenharmony_ci .mask = ARM_TRACE_MASK, 174662306a36Sopenharmony_ci .val = ARM_TRACE_MASK, 174762306a36Sopenharmony_ci }, { 174862306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 174962306a36Sopenharmony_ci .mask = CLCD_AND_ARM_TRACE_REG4_MASK, 175062306a36Sopenharmony_ci .val = CLCD_AND_ARM_TRACE_REG4_MASK, 175162306a36Sopenharmony_ci }, { 175262306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_6, 175362306a36Sopenharmony_ci .mask = CLCD_AND_ARM_TRACE_REG5_MASK, 175462306a36Sopenharmony_ci .val = CLCD_AND_ARM_TRACE_REG5_MASK, 175562306a36Sopenharmony_ci }, { 175662306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_7, 175762306a36Sopenharmony_ci .mask = CLCD_AND_ARM_TRACE_REG6_MASK, 175862306a36Sopenharmony_ci .val = CLCD_AND_ARM_TRACE_REG6_MASK, 175962306a36Sopenharmony_ci }, 176062306a36Sopenharmony_ci}; 176162306a36Sopenharmony_ci 176262306a36Sopenharmony_cistatic struct spear_modemux arm_trace_modemux[] = { 176362306a36Sopenharmony_ci { 176462306a36Sopenharmony_ci .muxregs = arm_trace_muxreg, 176562306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(arm_trace_muxreg), 176662306a36Sopenharmony_ci }, 176762306a36Sopenharmony_ci}; 176862306a36Sopenharmony_ci 176962306a36Sopenharmony_cistatic struct spear_pingroup arm_trace_pingroup = { 177062306a36Sopenharmony_ci .name = "arm_trace_grp", 177162306a36Sopenharmony_ci .pins = arm_trace_pins, 177262306a36Sopenharmony_ci .npins = ARRAY_SIZE(arm_trace_pins), 177362306a36Sopenharmony_ci .modemuxs = arm_trace_modemux, 177462306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(arm_trace_modemux), 177562306a36Sopenharmony_ci}; 177662306a36Sopenharmony_ci 177762306a36Sopenharmony_cistatic const char *const arm_trace_grps[] = { "arm_trace_grp" }; 177862306a36Sopenharmony_cistatic struct spear_function arm_trace_function = { 177962306a36Sopenharmony_ci .name = "arm_trace", 178062306a36Sopenharmony_ci .groups = arm_trace_grps, 178162306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(arm_trace_grps), 178262306a36Sopenharmony_ci}; 178362306a36Sopenharmony_ci 178462306a36Sopenharmony_ci/* pad multiplexing for miphy_dbg device */ 178562306a36Sopenharmony_cistatic const unsigned miphy_dbg_pins[] = { 96, 97, 98, 99, 100, 101, 102, 103, 178662306a36Sopenharmony_ci 132, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 178762306a36Sopenharmony_ci 148, 149, 150, 151, 152, 153, 154, 155, 156, 157 }; 178862306a36Sopenharmony_cistatic struct spear_muxreg miphy_dbg_muxreg[] = { 178962306a36Sopenharmony_ci { 179062306a36Sopenharmony_ci .reg = PAD_SHARED_IP_EN_1, 179162306a36Sopenharmony_ci .mask = MIPHY_DBG_MASK, 179262306a36Sopenharmony_ci .val = MIPHY_DBG_MASK, 179362306a36Sopenharmony_ci }, { 179462306a36Sopenharmony_ci .reg = PAD_FUNCTION_EN_5, 179562306a36Sopenharmony_ci .mask = DEVS_GRP_AND_MIPHY_DBG_REG4_MASK, 179662306a36Sopenharmony_ci .val = DEVS_GRP_AND_MIPHY_DBG_REG4_MASK, 179762306a36Sopenharmony_ci }, 179862306a36Sopenharmony_ci}; 179962306a36Sopenharmony_ci 180062306a36Sopenharmony_cistatic struct spear_modemux miphy_dbg_modemux[] = { 180162306a36Sopenharmony_ci { 180262306a36Sopenharmony_ci .muxregs = miphy_dbg_muxreg, 180362306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(miphy_dbg_muxreg), 180462306a36Sopenharmony_ci }, 180562306a36Sopenharmony_ci}; 180662306a36Sopenharmony_ci 180762306a36Sopenharmony_cistatic struct spear_pingroup miphy_dbg_pingroup = { 180862306a36Sopenharmony_ci .name = "miphy_dbg_grp", 180962306a36Sopenharmony_ci .pins = miphy_dbg_pins, 181062306a36Sopenharmony_ci .npins = ARRAY_SIZE(miphy_dbg_pins), 181162306a36Sopenharmony_ci .modemuxs = miphy_dbg_modemux, 181262306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(miphy_dbg_modemux), 181362306a36Sopenharmony_ci}; 181462306a36Sopenharmony_ci 181562306a36Sopenharmony_cistatic const char *const miphy_dbg_grps[] = { "miphy_dbg_grp" }; 181662306a36Sopenharmony_cistatic struct spear_function miphy_dbg_function = { 181762306a36Sopenharmony_ci .name = "miphy_dbg", 181862306a36Sopenharmony_ci .groups = miphy_dbg_grps, 181962306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(miphy_dbg_grps), 182062306a36Sopenharmony_ci}; 182162306a36Sopenharmony_ci 182262306a36Sopenharmony_ci/* pad multiplexing for pcie device */ 182362306a36Sopenharmony_cistatic const unsigned pcie_pins[] = { 250 }; 182462306a36Sopenharmony_cistatic struct spear_muxreg pcie_muxreg[] = { 182562306a36Sopenharmony_ci { 182662306a36Sopenharmony_ci .reg = PCIE_SATA_CFG, 182762306a36Sopenharmony_ci .mask = SATA_PCIE_CFG_MASK, 182862306a36Sopenharmony_ci .val = PCIE_CFG_VAL, 182962306a36Sopenharmony_ci }, 183062306a36Sopenharmony_ci}; 183162306a36Sopenharmony_ci 183262306a36Sopenharmony_cistatic struct spear_modemux pcie_modemux[] = { 183362306a36Sopenharmony_ci { 183462306a36Sopenharmony_ci .muxregs = pcie_muxreg, 183562306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(pcie_muxreg), 183662306a36Sopenharmony_ci }, 183762306a36Sopenharmony_ci}; 183862306a36Sopenharmony_ci 183962306a36Sopenharmony_cistatic struct spear_pingroup pcie_pingroup = { 184062306a36Sopenharmony_ci .name = "pcie_grp", 184162306a36Sopenharmony_ci .pins = pcie_pins, 184262306a36Sopenharmony_ci .npins = ARRAY_SIZE(pcie_pins), 184362306a36Sopenharmony_ci .modemuxs = pcie_modemux, 184462306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(pcie_modemux), 184562306a36Sopenharmony_ci}; 184662306a36Sopenharmony_ci 184762306a36Sopenharmony_cistatic const char *const pcie_grps[] = { "pcie_grp" }; 184862306a36Sopenharmony_cistatic struct spear_function pcie_function = { 184962306a36Sopenharmony_ci .name = "pcie", 185062306a36Sopenharmony_ci .groups = pcie_grps, 185162306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(pcie_grps), 185262306a36Sopenharmony_ci}; 185362306a36Sopenharmony_ci 185462306a36Sopenharmony_ci/* pad multiplexing for sata device */ 185562306a36Sopenharmony_cistatic const unsigned sata_pins[] = { 250 }; 185662306a36Sopenharmony_cistatic struct spear_muxreg sata_muxreg[] = { 185762306a36Sopenharmony_ci { 185862306a36Sopenharmony_ci .reg = PCIE_SATA_CFG, 185962306a36Sopenharmony_ci .mask = SATA_PCIE_CFG_MASK, 186062306a36Sopenharmony_ci .val = SATA_CFG_VAL, 186162306a36Sopenharmony_ci }, 186262306a36Sopenharmony_ci}; 186362306a36Sopenharmony_ci 186462306a36Sopenharmony_cistatic struct spear_modemux sata_modemux[] = { 186562306a36Sopenharmony_ci { 186662306a36Sopenharmony_ci .muxregs = sata_muxreg, 186762306a36Sopenharmony_ci .nmuxregs = ARRAY_SIZE(sata_muxreg), 186862306a36Sopenharmony_ci }, 186962306a36Sopenharmony_ci}; 187062306a36Sopenharmony_ci 187162306a36Sopenharmony_cistatic struct spear_pingroup sata_pingroup = { 187262306a36Sopenharmony_ci .name = "sata_grp", 187362306a36Sopenharmony_ci .pins = sata_pins, 187462306a36Sopenharmony_ci .npins = ARRAY_SIZE(sata_pins), 187562306a36Sopenharmony_ci .modemuxs = sata_modemux, 187662306a36Sopenharmony_ci .nmodemuxs = ARRAY_SIZE(sata_modemux), 187762306a36Sopenharmony_ci}; 187862306a36Sopenharmony_ci 187962306a36Sopenharmony_cistatic const char *const sata_grps[] = { "sata_grp" }; 188062306a36Sopenharmony_cistatic struct spear_function sata_function = { 188162306a36Sopenharmony_ci .name = "sata", 188262306a36Sopenharmony_ci .groups = sata_grps, 188362306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(sata_grps), 188462306a36Sopenharmony_ci}; 188562306a36Sopenharmony_ci 188662306a36Sopenharmony_ci/* pingroups */ 188762306a36Sopenharmony_cistatic struct spear_pingroup *spear1340_pingroups[] = { 188862306a36Sopenharmony_ci &pads_as_gpio_pingroup, 188962306a36Sopenharmony_ci &fsmc_8bit_pingroup, 189062306a36Sopenharmony_ci &fsmc_16bit_pingroup, 189162306a36Sopenharmony_ci &fsmc_pnor_pingroup, 189262306a36Sopenharmony_ci &keyboard_row_col_pingroup, 189362306a36Sopenharmony_ci &keyboard_col5_pingroup, 189462306a36Sopenharmony_ci &spdif_in_pingroup, 189562306a36Sopenharmony_ci &spdif_out_pingroup, 189662306a36Sopenharmony_ci &gpt_0_1_pingroup, 189762306a36Sopenharmony_ci &pwm0_pingroup, 189862306a36Sopenharmony_ci &pwm1_pingroup, 189962306a36Sopenharmony_ci &pwm2_pingroup, 190062306a36Sopenharmony_ci &pwm3_pingroup, 190162306a36Sopenharmony_ci &vip_mux_pingroup, 190262306a36Sopenharmony_ci &vip_mux_cam0_pingroup, 190362306a36Sopenharmony_ci &vip_mux_cam1_pingroup, 190462306a36Sopenharmony_ci &vip_mux_cam2_pingroup, 190562306a36Sopenharmony_ci &vip_mux_cam3_pingroup, 190662306a36Sopenharmony_ci &cam0_pingroup, 190762306a36Sopenharmony_ci &cam1_pingroup, 190862306a36Sopenharmony_ci &cam2_pingroup, 190962306a36Sopenharmony_ci &cam3_pingroup, 191062306a36Sopenharmony_ci &smi_pingroup, 191162306a36Sopenharmony_ci &ssp0_pingroup, 191262306a36Sopenharmony_ci &ssp0_cs1_pingroup, 191362306a36Sopenharmony_ci &ssp0_cs2_pingroup, 191462306a36Sopenharmony_ci &ssp0_cs3_pingroup, 191562306a36Sopenharmony_ci &uart0_pingroup, 191662306a36Sopenharmony_ci &uart0_enh_pingroup, 191762306a36Sopenharmony_ci &uart1_pingroup, 191862306a36Sopenharmony_ci &i2s_in_pingroup, 191962306a36Sopenharmony_ci &i2s_out_pingroup, 192062306a36Sopenharmony_ci &gmii_pingroup, 192162306a36Sopenharmony_ci &rgmii_pingroup, 192262306a36Sopenharmony_ci &rmii_pingroup, 192362306a36Sopenharmony_ci &sgmii_pingroup, 192462306a36Sopenharmony_ci &i2c0_pingroup, 192562306a36Sopenharmony_ci &i2c1_pingroup, 192662306a36Sopenharmony_ci &cec0_pingroup, 192762306a36Sopenharmony_ci &cec1_pingroup, 192862306a36Sopenharmony_ci &sdhci_pingroup, 192962306a36Sopenharmony_ci &cf_pingroup, 193062306a36Sopenharmony_ci &xd_pingroup, 193162306a36Sopenharmony_ci &clcd_sleep_pingroup, 193262306a36Sopenharmony_ci &clcd_pingroup, 193362306a36Sopenharmony_ci &arm_trace_pingroup, 193462306a36Sopenharmony_ci &miphy_dbg_pingroup, 193562306a36Sopenharmony_ci &pcie_pingroup, 193662306a36Sopenharmony_ci &sata_pingroup, 193762306a36Sopenharmony_ci}; 193862306a36Sopenharmony_ci 193962306a36Sopenharmony_ci/* functions */ 194062306a36Sopenharmony_cistatic struct spear_function *spear1340_functions[] = { 194162306a36Sopenharmony_ci &pads_as_gpio_function, 194262306a36Sopenharmony_ci &fsmc_function, 194362306a36Sopenharmony_ci &keyboard_function, 194462306a36Sopenharmony_ci &spdif_in_function, 194562306a36Sopenharmony_ci &spdif_out_function, 194662306a36Sopenharmony_ci &gpt_0_1_function, 194762306a36Sopenharmony_ci &pwm_function, 194862306a36Sopenharmony_ci &vip_function, 194962306a36Sopenharmony_ci &cam0_function, 195062306a36Sopenharmony_ci &cam1_function, 195162306a36Sopenharmony_ci &cam2_function, 195262306a36Sopenharmony_ci &cam3_function, 195362306a36Sopenharmony_ci &smi_function, 195462306a36Sopenharmony_ci &ssp0_function, 195562306a36Sopenharmony_ci &uart0_function, 195662306a36Sopenharmony_ci &uart1_function, 195762306a36Sopenharmony_ci &i2s_function, 195862306a36Sopenharmony_ci &gmac_function, 195962306a36Sopenharmony_ci &i2c0_function, 196062306a36Sopenharmony_ci &i2c1_function, 196162306a36Sopenharmony_ci &cec0_function, 196262306a36Sopenharmony_ci &cec1_function, 196362306a36Sopenharmony_ci &sdhci_function, 196462306a36Sopenharmony_ci &cf_function, 196562306a36Sopenharmony_ci &xd_function, 196662306a36Sopenharmony_ci &clcd_function, 196762306a36Sopenharmony_ci &arm_trace_function, 196862306a36Sopenharmony_ci &miphy_dbg_function, 196962306a36Sopenharmony_ci &pcie_function, 197062306a36Sopenharmony_ci &sata_function, 197162306a36Sopenharmony_ci}; 197262306a36Sopenharmony_ci 197362306a36Sopenharmony_cistatic void gpio_request_endisable(struct spear_pmx *pmx, int pin, 197462306a36Sopenharmony_ci bool enable) 197562306a36Sopenharmony_ci{ 197662306a36Sopenharmony_ci unsigned int regoffset, regindex, bitoffset; 197762306a36Sopenharmony_ci unsigned int val; 197862306a36Sopenharmony_ci 197962306a36Sopenharmony_ci /* pin++ as gpio configuration starts from 2nd bit of base register */ 198062306a36Sopenharmony_ci pin++; 198162306a36Sopenharmony_ci 198262306a36Sopenharmony_ci regindex = pin / 32; 198362306a36Sopenharmony_ci bitoffset = pin % 32; 198462306a36Sopenharmony_ci 198562306a36Sopenharmony_ci if (regindex <= 3) 198662306a36Sopenharmony_ci regoffset = PAD_FUNCTION_EN_1 + regindex * sizeof(int *); 198762306a36Sopenharmony_ci else 198862306a36Sopenharmony_ci regoffset = PAD_FUNCTION_EN_5 + (regindex - 4) * sizeof(int *); 198962306a36Sopenharmony_ci 199062306a36Sopenharmony_ci val = pmx_readl(pmx, regoffset); 199162306a36Sopenharmony_ci if (enable) 199262306a36Sopenharmony_ci val &= ~(0x1 << bitoffset); 199362306a36Sopenharmony_ci else 199462306a36Sopenharmony_ci val |= 0x1 << bitoffset; 199562306a36Sopenharmony_ci 199662306a36Sopenharmony_ci pmx_writel(pmx, val, regoffset); 199762306a36Sopenharmony_ci} 199862306a36Sopenharmony_ci 199962306a36Sopenharmony_cistatic struct spear_pinctrl_machdata spear1340_machdata = { 200062306a36Sopenharmony_ci .pins = spear1340_pins, 200162306a36Sopenharmony_ci .npins = ARRAY_SIZE(spear1340_pins), 200262306a36Sopenharmony_ci .groups = spear1340_pingroups, 200362306a36Sopenharmony_ci .ngroups = ARRAY_SIZE(spear1340_pingroups), 200462306a36Sopenharmony_ci .functions = spear1340_functions, 200562306a36Sopenharmony_ci .nfunctions = ARRAY_SIZE(spear1340_functions), 200662306a36Sopenharmony_ci .gpio_request_endisable = gpio_request_endisable, 200762306a36Sopenharmony_ci .modes_supported = false, 200862306a36Sopenharmony_ci}; 200962306a36Sopenharmony_ci 201062306a36Sopenharmony_cistatic const struct of_device_id spear1340_pinctrl_of_match[] = { 201162306a36Sopenharmony_ci { 201262306a36Sopenharmony_ci .compatible = "st,spear1340-pinmux", 201362306a36Sopenharmony_ci }, 201462306a36Sopenharmony_ci {}, 201562306a36Sopenharmony_ci}; 201662306a36Sopenharmony_ci 201762306a36Sopenharmony_cistatic int spear1340_pinctrl_probe(struct platform_device *pdev) 201862306a36Sopenharmony_ci{ 201962306a36Sopenharmony_ci return spear_pinctrl_probe(pdev, &spear1340_machdata); 202062306a36Sopenharmony_ci} 202162306a36Sopenharmony_ci 202262306a36Sopenharmony_cistatic struct platform_driver spear1340_pinctrl_driver = { 202362306a36Sopenharmony_ci .driver = { 202462306a36Sopenharmony_ci .name = DRIVER_NAME, 202562306a36Sopenharmony_ci .of_match_table = spear1340_pinctrl_of_match, 202662306a36Sopenharmony_ci }, 202762306a36Sopenharmony_ci .probe = spear1340_pinctrl_probe, 202862306a36Sopenharmony_ci}; 202962306a36Sopenharmony_ci 203062306a36Sopenharmony_cistatic int __init spear1340_pinctrl_init(void) 203162306a36Sopenharmony_ci{ 203262306a36Sopenharmony_ci return platform_driver_register(&spear1340_pinctrl_driver); 203362306a36Sopenharmony_ci} 203462306a36Sopenharmony_ciarch_initcall(spear1340_pinctrl_init); 2035