162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+ 262306a36Sopenharmony_ci// 362306a36Sopenharmony_ci// Exynos specific support for Samsung pinctrl/gpiolib driver with eint support. 462306a36Sopenharmony_ci// 562306a36Sopenharmony_ci// Copyright (c) 2012 Samsung Electronics Co., Ltd. 662306a36Sopenharmony_ci// http://www.samsung.com 762306a36Sopenharmony_ci// Copyright (c) 2012 Linaro Ltd 862306a36Sopenharmony_ci// http://www.linaro.org 962306a36Sopenharmony_ci// 1062306a36Sopenharmony_ci// Author: Thomas Abraham <thomas.ab@samsung.com> 1162306a36Sopenharmony_ci// 1262306a36Sopenharmony_ci// This file contains the Samsung Exynos specific information required by the 1362306a36Sopenharmony_ci// the Samsung pinctrl/gpiolib driver. It also includes the implementation of 1462306a36Sopenharmony_ci// external gpio and wakeup interrupt support. 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <linux/device.h> 1762306a36Sopenharmony_ci#include <linux/of_address.h> 1862306a36Sopenharmony_ci#include <linux/slab.h> 1962306a36Sopenharmony_ci#include <linux/err.h> 2062306a36Sopenharmony_ci#include <linux/soc/samsung/exynos-regs-pmu.h> 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#include "pinctrl-samsung.h" 2362306a36Sopenharmony_ci#include "pinctrl-exynos.h" 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistatic const struct samsung_pin_bank_type bank_type_off = { 2662306a36Sopenharmony_ci .fld_width = { 4, 1, 2, 2, 2, 2, }, 2762306a36Sopenharmony_ci .reg_offset = { 0x00, 0x04, 0x08, 0x0c, 0x10, 0x14, }, 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistatic const struct samsung_pin_bank_type bank_type_alive = { 3162306a36Sopenharmony_ci .fld_width = { 4, 1, 2, 2, }, 3262306a36Sopenharmony_ci .reg_offset = { 0x00, 0x04, 0x08, 0x0c, }, 3362306a36Sopenharmony_ci}; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/* Retention control for S5PV210 are located at the end of clock controller */ 3662306a36Sopenharmony_ci#define S5P_OTHERS 0xE000 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci#define S5P_OTHERS_RET_IO (1 << 31) 3962306a36Sopenharmony_ci#define S5P_OTHERS_RET_CF (1 << 30) 4062306a36Sopenharmony_ci#define S5P_OTHERS_RET_MMC (1 << 29) 4162306a36Sopenharmony_ci#define S5P_OTHERS_RET_UART (1 << 28) 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistatic void s5pv210_retention_disable(struct samsung_pinctrl_drv_data *drvdata) 4462306a36Sopenharmony_ci{ 4562306a36Sopenharmony_ci void __iomem *clk_base = (void __iomem *)drvdata->retention_ctrl->priv; 4662306a36Sopenharmony_ci u32 tmp; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci tmp = __raw_readl(clk_base + S5P_OTHERS); 4962306a36Sopenharmony_ci tmp |= (S5P_OTHERS_RET_IO | S5P_OTHERS_RET_CF | S5P_OTHERS_RET_MMC | 5062306a36Sopenharmony_ci S5P_OTHERS_RET_UART); 5162306a36Sopenharmony_ci __raw_writel(tmp, clk_base + S5P_OTHERS); 5262306a36Sopenharmony_ci} 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cistatic struct samsung_retention_ctrl * 5562306a36Sopenharmony_cis5pv210_retention_init(struct samsung_pinctrl_drv_data *drvdata, 5662306a36Sopenharmony_ci const struct samsung_retention_data *data) 5762306a36Sopenharmony_ci{ 5862306a36Sopenharmony_ci struct samsung_retention_ctrl *ctrl; 5962306a36Sopenharmony_ci struct device_node *np; 6062306a36Sopenharmony_ci void __iomem *clk_base; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci ctrl = devm_kzalloc(drvdata->dev, sizeof(*ctrl), GFP_KERNEL); 6362306a36Sopenharmony_ci if (!ctrl) 6462306a36Sopenharmony_ci return ERR_PTR(-ENOMEM); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci np = of_find_compatible_node(NULL, NULL, "samsung,s5pv210-clock"); 6762306a36Sopenharmony_ci if (!np) { 6862306a36Sopenharmony_ci pr_err("%s: failed to find clock controller DT node\n", 6962306a36Sopenharmony_ci __func__); 7062306a36Sopenharmony_ci return ERR_PTR(-ENODEV); 7162306a36Sopenharmony_ci } 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci clk_base = of_iomap(np, 0); 7462306a36Sopenharmony_ci of_node_put(np); 7562306a36Sopenharmony_ci if (!clk_base) { 7662306a36Sopenharmony_ci pr_err("%s: failed to map clock registers\n", __func__); 7762306a36Sopenharmony_ci return ERR_PTR(-EINVAL); 7862306a36Sopenharmony_ci } 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci ctrl->priv = (void __force *)clk_base; 8162306a36Sopenharmony_ci ctrl->disable = s5pv210_retention_disable; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci return ctrl; 8462306a36Sopenharmony_ci} 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cistatic const struct samsung_retention_data s5pv210_retention_data __initconst = { 8762306a36Sopenharmony_ci .init = s5pv210_retention_init, 8862306a36Sopenharmony_ci}; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci/* pin banks of s5pv210 pin-controller */ 9162306a36Sopenharmony_cistatic const struct samsung_pin_bank_data s5pv210_pin_bank[] __initconst = { 9262306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 9362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00), 9462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpa1", 0x04), 9562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08), 9662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c), 9762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10), 9862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14), 9962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x0c0, "gpd1", 0x18), 10062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpe0", 0x1c), 10162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x100, "gpe1", 0x20), 10262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpf0", 0x24), 10362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpf1", 0x28), 10462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpf2", 0x2c), 10562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x180, "gpf3", 0x30), 10662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x1a0, "gpg0", 0x34), 10762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x1c0, "gpg1", 0x38), 10862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x1e0, "gpg2", 0x3c), 10962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x200, "gpg3", 0x40), 11062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpj0", 0x44), 11162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x260, "gpj1", 0x48), 11262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x280, "gpj2", 0x4c), 11362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x2a0, "gpj3", 0x50), 11462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x2c0, "gpj4", 0x54), 11562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(7, 0x220, "gpi"), 11662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x2e0, "mp01"), 11762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(4, 0x300, "mp02"), 11862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x320, "mp03"), 11962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x340, "mp04"), 12062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x360, "mp05"), 12162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x380, "mp06"), 12262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x3a0, "mp07"), 12362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gph0", 0x00), 12462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gph1", 0x04), 12562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gph2", 0x08), 12662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gph3", 0x0c), 12762306a36Sopenharmony_ci}; 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_cistatic const struct samsung_pin_ctrl s5pv210_pin_ctrl[] __initconst = { 13062306a36Sopenharmony_ci { 13162306a36Sopenharmony_ci /* pin-controller instance 0 data */ 13262306a36Sopenharmony_ci .pin_banks = s5pv210_pin_bank, 13362306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(s5pv210_pin_bank), 13462306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 13562306a36Sopenharmony_ci .eint_wkup_init = exynos_eint_wkup_init, 13662306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 13762306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 13862306a36Sopenharmony_ci .retention_data = &s5pv210_retention_data, 13962306a36Sopenharmony_ci }, 14062306a36Sopenharmony_ci}; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ciconst struct samsung_pinctrl_of_match_data s5pv210_of_data __initconst = { 14362306a36Sopenharmony_ci .ctrl = s5pv210_pin_ctrl, 14462306a36Sopenharmony_ci .num_ctrl = ARRAY_SIZE(s5pv210_pin_ctrl), 14562306a36Sopenharmony_ci}; 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci/* Pad retention control code for accessing PMU regmap */ 14862306a36Sopenharmony_cistatic atomic_t exynos_shared_retention_refcnt; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci/* pin banks of exynos3250 pin-controller 0 */ 15162306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos3250_pin_banks0[] __initconst = { 15262306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 15362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00), 15462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04), 15562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08), 15662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c), 15762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10), 15862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0a0, "gpd0", 0x14), 15962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0c0, "gpd1", 0x18), 16062306a36Sopenharmony_ci}; 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci/* pin banks of exynos3250 pin-controller 1 */ 16362306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos3250_pin_banks1[] __initconst = { 16462306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 16562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x120, "gpe0"), 16662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x140, "gpe1"), 16762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(3, 0x180, "gpe2"), 16862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpk0", 0x08), 16962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c), 17062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10), 17162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0c0, "gpl0", 0x18), 17262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x260, "gpm0", 0x24), 17362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x280, "gpm1", 0x28), 17462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x2a0, "gpm2", 0x2c), 17562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x2c0, "gpm3", 0x30), 17662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x2e0, "gpm4", 0x34), 17762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gpx0", 0x00), 17862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gpx1", 0x04), 17962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gpx2", 0x08), 18062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gpx3", 0x0c), 18162306a36Sopenharmony_ci}; 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci/* 18462306a36Sopenharmony_ci * PMU pad retention groups for Exynos3250 doesn't match pin banks, so handle 18562306a36Sopenharmony_ci * them all together 18662306a36Sopenharmony_ci */ 18762306a36Sopenharmony_cistatic const u32 exynos3250_retention_regs[] = { 18862306a36Sopenharmony_ci S5P_PAD_RET_MAUDIO_OPTION, 18962306a36Sopenharmony_ci S5P_PAD_RET_GPIO_OPTION, 19062306a36Sopenharmony_ci S5P_PAD_RET_UART_OPTION, 19162306a36Sopenharmony_ci S5P_PAD_RET_MMCA_OPTION, 19262306a36Sopenharmony_ci S5P_PAD_RET_MMCB_OPTION, 19362306a36Sopenharmony_ci S5P_PAD_RET_EBIA_OPTION, 19462306a36Sopenharmony_ci S5P_PAD_RET_EBIB_OPTION, 19562306a36Sopenharmony_ci S5P_PAD_RET_MMC2_OPTION, 19662306a36Sopenharmony_ci S5P_PAD_RET_SPI_OPTION, 19762306a36Sopenharmony_ci}; 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_cistatic const struct samsung_retention_data exynos3250_retention_data __initconst = { 20062306a36Sopenharmony_ci .regs = exynos3250_retention_regs, 20162306a36Sopenharmony_ci .nr_regs = ARRAY_SIZE(exynos3250_retention_regs), 20262306a36Sopenharmony_ci .value = EXYNOS_WAKEUP_FROM_LOWPWR, 20362306a36Sopenharmony_ci .refcnt = &exynos_shared_retention_refcnt, 20462306a36Sopenharmony_ci .init = exynos_retention_init, 20562306a36Sopenharmony_ci}; 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci/* 20862306a36Sopenharmony_ci * Samsung pinctrl driver data for Exynos3250 SoC. Exynos3250 SoC includes 20962306a36Sopenharmony_ci * two gpio/pin-mux/pinconfig controllers. 21062306a36Sopenharmony_ci */ 21162306a36Sopenharmony_cistatic const struct samsung_pin_ctrl exynos3250_pin_ctrl[] __initconst = { 21262306a36Sopenharmony_ci { 21362306a36Sopenharmony_ci /* pin-controller instance 0 data */ 21462306a36Sopenharmony_ci .pin_banks = exynos3250_pin_banks0, 21562306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos3250_pin_banks0), 21662306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 21762306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 21862306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 21962306a36Sopenharmony_ci .retention_data = &exynos3250_retention_data, 22062306a36Sopenharmony_ci }, { 22162306a36Sopenharmony_ci /* pin-controller instance 1 data */ 22262306a36Sopenharmony_ci .pin_banks = exynos3250_pin_banks1, 22362306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos3250_pin_banks1), 22462306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 22562306a36Sopenharmony_ci .eint_wkup_init = exynos_eint_wkup_init, 22662306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 22762306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 22862306a36Sopenharmony_ci .retention_data = &exynos3250_retention_data, 22962306a36Sopenharmony_ci }, 23062306a36Sopenharmony_ci}; 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ciconst struct samsung_pinctrl_of_match_data exynos3250_of_data __initconst = { 23362306a36Sopenharmony_ci .ctrl = exynos3250_pin_ctrl, 23462306a36Sopenharmony_ci .num_ctrl = ARRAY_SIZE(exynos3250_pin_ctrl), 23562306a36Sopenharmony_ci}; 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci/* pin banks of exynos4210 pin-controller 0 */ 23862306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos4210_pin_banks0[] __initconst = { 23962306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 24062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00), 24162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04), 24262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08), 24362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c), 24462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10), 24562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14), 24662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpd1", 0x18), 24762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x0E0, "gpe0", 0x1c), 24862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpe1", 0x20), 24962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x120, "gpe2", 0x24), 25062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x140, "gpe3", 0x28), 25162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x160, "gpe4", 0x2c), 25262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf0", 0x30), 25362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpf1", 0x34), 25462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x1C0, "gpf2", 0x38), 25562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf3", 0x3c), 25662306a36Sopenharmony_ci}; 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_ci/* pin banks of exynos4210 pin-controller 1 */ 25962306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos4210_pin_banks1[] __initconst = { 26062306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 26162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpj0", 0x00), 26262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x020, "gpj1", 0x04), 26362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpk0", 0x08), 26462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c), 26562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10), 26662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x0A0, "gpk3", 0x14), 26762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpl0", 0x18), 26862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(3, 0x0E0, "gpl1", 0x1c), 26962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpl2", 0x20), 27062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x120, "gpy0"), 27162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(4, 0x140, "gpy1"), 27262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x160, "gpy2"), 27362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy3"), 27462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x1A0, "gpy4"), 27562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x1C0, "gpy5"), 27662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x1E0, "gpy6"), 27762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00), 27862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04), 27962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08), 28062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c), 28162306a36Sopenharmony_ci}; 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ci/* pin banks of exynos4210 pin-controller 2 */ 28462306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos4210_pin_banks2[] __initconst = { 28562306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 28662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(7, 0x000, "gpz"), 28762306a36Sopenharmony_ci}; 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci/* PMU pad retention groups registers for Exynos4 (without audio) */ 29062306a36Sopenharmony_cistatic const u32 exynos4_retention_regs[] = { 29162306a36Sopenharmony_ci S5P_PAD_RET_GPIO_OPTION, 29262306a36Sopenharmony_ci S5P_PAD_RET_UART_OPTION, 29362306a36Sopenharmony_ci S5P_PAD_RET_MMCA_OPTION, 29462306a36Sopenharmony_ci S5P_PAD_RET_MMCB_OPTION, 29562306a36Sopenharmony_ci S5P_PAD_RET_EBIA_OPTION, 29662306a36Sopenharmony_ci S5P_PAD_RET_EBIB_OPTION, 29762306a36Sopenharmony_ci}; 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_cistatic const struct samsung_retention_data exynos4_retention_data __initconst = { 30062306a36Sopenharmony_ci .regs = exynos4_retention_regs, 30162306a36Sopenharmony_ci .nr_regs = ARRAY_SIZE(exynos4_retention_regs), 30262306a36Sopenharmony_ci .value = EXYNOS_WAKEUP_FROM_LOWPWR, 30362306a36Sopenharmony_ci .refcnt = &exynos_shared_retention_refcnt, 30462306a36Sopenharmony_ci .init = exynos_retention_init, 30562306a36Sopenharmony_ci}; 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ci/* PMU retention control for audio pins can be tied to audio pin bank */ 30862306a36Sopenharmony_cistatic const u32 exynos4_audio_retention_regs[] = { 30962306a36Sopenharmony_ci S5P_PAD_RET_MAUDIO_OPTION, 31062306a36Sopenharmony_ci}; 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_cistatic const struct samsung_retention_data exynos4_audio_retention_data __initconst = { 31362306a36Sopenharmony_ci .regs = exynos4_audio_retention_regs, 31462306a36Sopenharmony_ci .nr_regs = ARRAY_SIZE(exynos4_audio_retention_regs), 31562306a36Sopenharmony_ci .value = EXYNOS_WAKEUP_FROM_LOWPWR, 31662306a36Sopenharmony_ci .init = exynos_retention_init, 31762306a36Sopenharmony_ci}; 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_ci/* 32062306a36Sopenharmony_ci * Samsung pinctrl driver data for Exynos4210 SoC. Exynos4210 SoC includes 32162306a36Sopenharmony_ci * three gpio/pin-mux/pinconfig controllers. 32262306a36Sopenharmony_ci */ 32362306a36Sopenharmony_cistatic const struct samsung_pin_ctrl exynos4210_pin_ctrl[] __initconst = { 32462306a36Sopenharmony_ci { 32562306a36Sopenharmony_ci /* pin-controller instance 0 data */ 32662306a36Sopenharmony_ci .pin_banks = exynos4210_pin_banks0, 32762306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos4210_pin_banks0), 32862306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 32962306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 33062306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 33162306a36Sopenharmony_ci .retention_data = &exynos4_retention_data, 33262306a36Sopenharmony_ci }, { 33362306a36Sopenharmony_ci /* pin-controller instance 1 data */ 33462306a36Sopenharmony_ci .pin_banks = exynos4210_pin_banks1, 33562306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos4210_pin_banks1), 33662306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 33762306a36Sopenharmony_ci .eint_wkup_init = exynos_eint_wkup_init, 33862306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 33962306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 34062306a36Sopenharmony_ci .retention_data = &exynos4_retention_data, 34162306a36Sopenharmony_ci }, { 34262306a36Sopenharmony_ci /* pin-controller instance 2 data */ 34362306a36Sopenharmony_ci .pin_banks = exynos4210_pin_banks2, 34462306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos4210_pin_banks2), 34562306a36Sopenharmony_ci .retention_data = &exynos4_audio_retention_data, 34662306a36Sopenharmony_ci }, 34762306a36Sopenharmony_ci}; 34862306a36Sopenharmony_ci 34962306a36Sopenharmony_ciconst struct samsung_pinctrl_of_match_data exynos4210_of_data __initconst = { 35062306a36Sopenharmony_ci .ctrl = exynos4210_pin_ctrl, 35162306a36Sopenharmony_ci .num_ctrl = ARRAY_SIZE(exynos4210_pin_ctrl), 35262306a36Sopenharmony_ci}; 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci/* pin banks of exynos4x12 pin-controller 0 */ 35562306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos4x12_pin_banks0[] __initconst = { 35662306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 35762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00), 35862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04), 35962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpb", 0x08), 36062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpc0", 0x0c), 36162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpc1", 0x10), 36262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpd0", 0x14), 36362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpd1", 0x18), 36462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpf0", 0x30), 36562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpf1", 0x34), 36662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x1C0, "gpf2", 0x38), 36762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf3", 0x3c), 36862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpj0", 0x40), 36962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x260, "gpj1", 0x44), 37062306a36Sopenharmony_ci}; 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ci/* pin banks of exynos4x12 pin-controller 1 */ 37362306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos4x12_pin_banks1[] __initconst = { 37462306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 37562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpk0", 0x08), 37662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x060, "gpk1", 0x0c), 37762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x080, "gpk2", 0x10), 37862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x0A0, "gpk3", 0x14), 37962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x0C0, "gpl0", 0x18), 38062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x0E0, "gpl1", 0x1c), 38162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpl2", 0x20), 38262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x260, "gpm0", 0x24), 38362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x280, "gpm1", 0x28), 38462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x2A0, "gpm2", 0x2c), 38562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x2C0, "gpm3", 0x30), 38662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x2E0, "gpm4", 0x34), 38762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x120, "gpy0"), 38862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(4, 0x140, "gpy1"), 38962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x160, "gpy2"), 39062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy3"), 39162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x1A0, "gpy4"), 39262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x1C0, "gpy5"), 39362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x1E0, "gpy6"), 39462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00), 39562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04), 39662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08), 39762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c), 39862306a36Sopenharmony_ci}; 39962306a36Sopenharmony_ci 40062306a36Sopenharmony_ci/* pin banks of exynos4x12 pin-controller 2 */ 40162306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos4x12_pin_banks2[] __initconst = { 40262306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 40362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00), 40462306a36Sopenharmony_ci}; 40562306a36Sopenharmony_ci 40662306a36Sopenharmony_ci/* pin banks of exynos4x12 pin-controller 3 */ 40762306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos4x12_pin_banks3[] __initconst = { 40862306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 40962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00), 41062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04), 41162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpv2", 0x08), 41262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv3", 0x0c), 41362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpv4", 0x10), 41462306a36Sopenharmony_ci}; 41562306a36Sopenharmony_ci 41662306a36Sopenharmony_ci/* 41762306a36Sopenharmony_ci * Samsung pinctrl driver data for Exynos4x12 SoC. Exynos4x12 SoC includes 41862306a36Sopenharmony_ci * four gpio/pin-mux/pinconfig controllers. 41962306a36Sopenharmony_ci */ 42062306a36Sopenharmony_cistatic const struct samsung_pin_ctrl exynos4x12_pin_ctrl[] __initconst = { 42162306a36Sopenharmony_ci { 42262306a36Sopenharmony_ci /* pin-controller instance 0 data */ 42362306a36Sopenharmony_ci .pin_banks = exynos4x12_pin_banks0, 42462306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos4x12_pin_banks0), 42562306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 42662306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 42762306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 42862306a36Sopenharmony_ci .retention_data = &exynos4_retention_data, 42962306a36Sopenharmony_ci }, { 43062306a36Sopenharmony_ci /* pin-controller instance 1 data */ 43162306a36Sopenharmony_ci .pin_banks = exynos4x12_pin_banks1, 43262306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos4x12_pin_banks1), 43362306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 43462306a36Sopenharmony_ci .eint_wkup_init = exynos_eint_wkup_init, 43562306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 43662306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 43762306a36Sopenharmony_ci .retention_data = &exynos4_retention_data, 43862306a36Sopenharmony_ci }, { 43962306a36Sopenharmony_ci /* pin-controller instance 2 data */ 44062306a36Sopenharmony_ci .pin_banks = exynos4x12_pin_banks2, 44162306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos4x12_pin_banks2), 44262306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 44362306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 44462306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 44562306a36Sopenharmony_ci .retention_data = &exynos4_audio_retention_data, 44662306a36Sopenharmony_ci }, { 44762306a36Sopenharmony_ci /* pin-controller instance 3 data */ 44862306a36Sopenharmony_ci .pin_banks = exynos4x12_pin_banks3, 44962306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos4x12_pin_banks3), 45062306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 45162306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 45262306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 45362306a36Sopenharmony_ci }, 45462306a36Sopenharmony_ci}; 45562306a36Sopenharmony_ci 45662306a36Sopenharmony_ciconst struct samsung_pinctrl_of_match_data exynos4x12_of_data __initconst = { 45762306a36Sopenharmony_ci .ctrl = exynos4x12_pin_ctrl, 45862306a36Sopenharmony_ci .num_ctrl = ARRAY_SIZE(exynos4x12_pin_ctrl), 45962306a36Sopenharmony_ci}; 46062306a36Sopenharmony_ci 46162306a36Sopenharmony_ci/* pin banks of exynos5250 pin-controller 0 */ 46262306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5250_pin_banks0[] __initconst = { 46362306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 46462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00), 46562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04), 46662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08), 46762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c), 46862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10), 46962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14), 47062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpb3", 0x18), 47162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x0E0, "gpc0", 0x1c), 47262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x100, "gpc1", 0x20), 47362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x120, "gpc2", 0x24), 47462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpc3", 0x28), 47562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x160, "gpd0", 0x2c), 47662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpd1", 0x30), 47762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x2E0, "gpc4", 0x34), 47862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x1A0, "gpy0"), 47962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(4, 0x1C0, "gpy1"), 48062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x1E0, "gpy2"), 48162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x200, "gpy3"), 48262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x220, "gpy4"), 48362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x240, "gpy5"), 48462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x260, "gpy6"), 48562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00), 48662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04), 48762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08), 48862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c), 48962306a36Sopenharmony_ci}; 49062306a36Sopenharmony_ci 49162306a36Sopenharmony_ci/* pin banks of exynos5250 pin-controller 1 */ 49262306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5250_pin_banks1[] __initconst = { 49362306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 49462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpe0", 0x00), 49562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x020, "gpe1", 0x04), 49662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x040, "gpf0", 0x08), 49762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpf1", 0x0c), 49862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10), 49962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14), 50062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpg2", 0x18), 50162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0E0, "gph0", 0x1c), 50262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x100, "gph1", 0x20), 50362306a36Sopenharmony_ci}; 50462306a36Sopenharmony_ci 50562306a36Sopenharmony_ci/* pin banks of exynos5250 pin-controller 2 */ 50662306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5250_pin_banks2[] __initconst = { 50762306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 50862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00), 50962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04), 51062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv2", 0x08), 51162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpv3", 0x0c), 51262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpv4", 0x10), 51362306a36Sopenharmony_ci}; 51462306a36Sopenharmony_ci 51562306a36Sopenharmony_ci/* pin banks of exynos5250 pin-controller 3 */ 51662306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5250_pin_banks3[] __initconst = { 51762306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 51862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00), 51962306a36Sopenharmony_ci}; 52062306a36Sopenharmony_ci 52162306a36Sopenharmony_ci/* 52262306a36Sopenharmony_ci * Samsung pinctrl driver data for Exynos5250 SoC. Exynos5250 SoC includes 52362306a36Sopenharmony_ci * four gpio/pin-mux/pinconfig controllers. 52462306a36Sopenharmony_ci */ 52562306a36Sopenharmony_cistatic const struct samsung_pin_ctrl exynos5250_pin_ctrl[] __initconst = { 52662306a36Sopenharmony_ci { 52762306a36Sopenharmony_ci /* pin-controller instance 0 data */ 52862306a36Sopenharmony_ci .pin_banks = exynos5250_pin_banks0, 52962306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5250_pin_banks0), 53062306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 53162306a36Sopenharmony_ci .eint_wkup_init = exynos_eint_wkup_init, 53262306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 53362306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 53462306a36Sopenharmony_ci .retention_data = &exynos4_retention_data, 53562306a36Sopenharmony_ci }, { 53662306a36Sopenharmony_ci /* pin-controller instance 1 data */ 53762306a36Sopenharmony_ci .pin_banks = exynos5250_pin_banks1, 53862306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5250_pin_banks1), 53962306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 54062306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 54162306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 54262306a36Sopenharmony_ci .retention_data = &exynos4_retention_data, 54362306a36Sopenharmony_ci }, { 54462306a36Sopenharmony_ci /* pin-controller instance 2 data */ 54562306a36Sopenharmony_ci .pin_banks = exynos5250_pin_banks2, 54662306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5250_pin_banks2), 54762306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 54862306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 54962306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 55062306a36Sopenharmony_ci }, { 55162306a36Sopenharmony_ci /* pin-controller instance 3 data */ 55262306a36Sopenharmony_ci .pin_banks = exynos5250_pin_banks3, 55362306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5250_pin_banks3), 55462306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 55562306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 55662306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 55762306a36Sopenharmony_ci .retention_data = &exynos4_audio_retention_data, 55862306a36Sopenharmony_ci }, 55962306a36Sopenharmony_ci}; 56062306a36Sopenharmony_ci 56162306a36Sopenharmony_ciconst struct samsung_pinctrl_of_match_data exynos5250_of_data __initconst = { 56262306a36Sopenharmony_ci .ctrl = exynos5250_pin_ctrl, 56362306a36Sopenharmony_ci .num_ctrl = ARRAY_SIZE(exynos5250_pin_ctrl), 56462306a36Sopenharmony_ci}; 56562306a36Sopenharmony_ci 56662306a36Sopenharmony_ci/* pin banks of exynos5260 pin-controller 0 */ 56762306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5260_pin_banks0[] __initconst = { 56862306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 56962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x000, "gpa0", 0x00), 57062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x020, "gpa1", 0x04), 57162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08), 57262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c), 57362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpb1", 0x10), 57462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x0a0, "gpb2", 0x14), 57562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0c0, "gpb3", 0x18), 57662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0e0, "gpb4", 0x1c), 57762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x100, "gpb5", 0x20), 57862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x120, "gpd0", 0x24), 57962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpd1", 0x28), 58062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x160, "gpd2", 0x2c), 58162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpe0", 0x30), 58262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x1a0, "gpe1", 0x34), 58362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x1c0, "gpf0", 0x38), 58462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x1e0, "gpf1", 0x3c), 58562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x200, "gpk0", 0x40), 58662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc00, "gpx0", 0x00), 58762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc20, "gpx1", 0x04), 58862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc40, "gpx2", 0x08), 58962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xc60, "gpx3", 0x0c), 59062306a36Sopenharmony_ci}; 59162306a36Sopenharmony_ci 59262306a36Sopenharmony_ci/* pin banks of exynos5260 pin-controller 1 */ 59362306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5260_pin_banks1[] __initconst = { 59462306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 59562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpc0", 0x00), 59662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpc1", 0x04), 59762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpc2", 0x08), 59862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpc3", 0x0c), 59962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x080, "gpc4", 0x10), 60062306a36Sopenharmony_ci}; 60162306a36Sopenharmony_ci 60262306a36Sopenharmony_ci/* pin banks of exynos5260 pin-controller 2 */ 60362306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5260_pin_banks2[] __initconst = { 60462306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 60562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz0", 0x00), 60662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x020, "gpz1", 0x04), 60762306a36Sopenharmony_ci}; 60862306a36Sopenharmony_ci 60962306a36Sopenharmony_ci/* 61062306a36Sopenharmony_ci * Samsung pinctrl driver data for Exynos5260 SoC. Exynos5260 SoC includes 61162306a36Sopenharmony_ci * three gpio/pin-mux/pinconfig controllers. 61262306a36Sopenharmony_ci */ 61362306a36Sopenharmony_cistatic const struct samsung_pin_ctrl exynos5260_pin_ctrl[] __initconst = { 61462306a36Sopenharmony_ci { 61562306a36Sopenharmony_ci /* pin-controller instance 0 data */ 61662306a36Sopenharmony_ci .pin_banks = exynos5260_pin_banks0, 61762306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5260_pin_banks0), 61862306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 61962306a36Sopenharmony_ci .eint_wkup_init = exynos_eint_wkup_init, 62062306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 62162306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 62262306a36Sopenharmony_ci }, { 62362306a36Sopenharmony_ci /* pin-controller instance 1 data */ 62462306a36Sopenharmony_ci .pin_banks = exynos5260_pin_banks1, 62562306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5260_pin_banks1), 62662306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 62762306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 62862306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 62962306a36Sopenharmony_ci }, { 63062306a36Sopenharmony_ci /* pin-controller instance 2 data */ 63162306a36Sopenharmony_ci .pin_banks = exynos5260_pin_banks2, 63262306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5260_pin_banks2), 63362306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 63462306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 63562306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 63662306a36Sopenharmony_ci }, 63762306a36Sopenharmony_ci}; 63862306a36Sopenharmony_ci 63962306a36Sopenharmony_ciconst struct samsung_pinctrl_of_match_data exynos5260_of_data __initconst = { 64062306a36Sopenharmony_ci .ctrl = exynos5260_pin_ctrl, 64162306a36Sopenharmony_ci .num_ctrl = ARRAY_SIZE(exynos5260_pin_ctrl), 64262306a36Sopenharmony_ci}; 64362306a36Sopenharmony_ci 64462306a36Sopenharmony_ci/* pin banks of exynos5410 pin-controller 0 */ 64562306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5410_pin_banks0[] __initconst = { 64662306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 64762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00), 64862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04), 64962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08), 65062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c), 65162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10), 65262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14), 65362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0C0, "gpb3", 0x18), 65462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x0E0, "gpc0", 0x1c), 65562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x100, "gpc3", 0x20), 65662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x120, "gpc1", 0x24), 65762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x140, "gpc2", 0x28), 65862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x180, "gpd1", 0x2c), 65962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x1A0, "gpe0", 0x30), 66062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x1C0, "gpe1", 0x34), 66162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x1E0, "gpf0", 0x38), 66262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x200, "gpf1", 0x3c), 66362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x220, "gpg0", 0x40), 66462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x240, "gpg1", 0x44), 66562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x260, "gpg2", 0x48), 66662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x280, "gph0", 0x4c), 66762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x2A0, "gph1", 0x50), 66862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(2, 0x160, "gpm5"), 66962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x2C0, "gpm7"), 67062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x2E0, "gpy0"), 67162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(4, 0x300, "gpy1"), 67262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x320, "gpy2"), 67362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x340, "gpy3"), 67462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x360, "gpy4"), 67562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x380, "gpy5"), 67662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x3A0, "gpy6"), 67762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x3C0, "gpy7"), 67862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00), 67962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04), 68062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08), 68162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c), 68262306a36Sopenharmony_ci}; 68362306a36Sopenharmony_ci 68462306a36Sopenharmony_ci/* pin banks of exynos5410 pin-controller 1 */ 68562306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5410_pin_banks1[] __initconst = { 68662306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 68762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x000, "gpj0", 0x00), 68862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpj1", 0x04), 68962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpj2", 0x08), 69062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpj3", 0x0c), 69162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpj4", 0x10), 69262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpk0", 0x14), 69362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpk1", 0x18), 69462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0E0, "gpk2", 0x1c), 69562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x100, "gpk3", 0x20), 69662306a36Sopenharmony_ci}; 69762306a36Sopenharmony_ci 69862306a36Sopenharmony_ci/* pin banks of exynos5410 pin-controller 2 */ 69962306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5410_pin_banks2[] __initconst = { 70062306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 70162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpv0", 0x00), 70262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpv1", 0x04), 70362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpv2", 0x08), 70462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpv3", 0x0c), 70562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpv4", 0x10), 70662306a36Sopenharmony_ci}; 70762306a36Sopenharmony_ci 70862306a36Sopenharmony_ci/* pin banks of exynos5410 pin-controller 3 */ 70962306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5410_pin_banks3[] __initconst = { 71062306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 71162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00), 71262306a36Sopenharmony_ci}; 71362306a36Sopenharmony_ci 71462306a36Sopenharmony_ci/* 71562306a36Sopenharmony_ci * Samsung pinctrl driver data for Exynos5410 SoC. Exynos5410 SoC includes 71662306a36Sopenharmony_ci * four gpio/pin-mux/pinconfig controllers. 71762306a36Sopenharmony_ci */ 71862306a36Sopenharmony_cistatic const struct samsung_pin_ctrl exynos5410_pin_ctrl[] __initconst = { 71962306a36Sopenharmony_ci { 72062306a36Sopenharmony_ci /* pin-controller instance 0 data */ 72162306a36Sopenharmony_ci .pin_banks = exynos5410_pin_banks0, 72262306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5410_pin_banks0), 72362306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 72462306a36Sopenharmony_ci .eint_wkup_init = exynos_eint_wkup_init, 72562306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 72662306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 72762306a36Sopenharmony_ci }, { 72862306a36Sopenharmony_ci /* pin-controller instance 1 data */ 72962306a36Sopenharmony_ci .pin_banks = exynos5410_pin_banks1, 73062306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5410_pin_banks1), 73162306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 73262306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 73362306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 73462306a36Sopenharmony_ci }, { 73562306a36Sopenharmony_ci /* pin-controller instance 2 data */ 73662306a36Sopenharmony_ci .pin_banks = exynos5410_pin_banks2, 73762306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5410_pin_banks2), 73862306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 73962306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 74062306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 74162306a36Sopenharmony_ci }, { 74262306a36Sopenharmony_ci /* pin-controller instance 3 data */ 74362306a36Sopenharmony_ci .pin_banks = exynos5410_pin_banks3, 74462306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5410_pin_banks3), 74562306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 74662306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 74762306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 74862306a36Sopenharmony_ci }, 74962306a36Sopenharmony_ci}; 75062306a36Sopenharmony_ci 75162306a36Sopenharmony_ciconst struct samsung_pinctrl_of_match_data exynos5410_of_data __initconst = { 75262306a36Sopenharmony_ci .ctrl = exynos5410_pin_ctrl, 75362306a36Sopenharmony_ci .num_ctrl = ARRAY_SIZE(exynos5410_pin_ctrl), 75462306a36Sopenharmony_ci}; 75562306a36Sopenharmony_ci 75662306a36Sopenharmony_ci/* pin banks of exynos5420 pin-controller 0 */ 75762306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5420_pin_banks0[] __initconst = { 75862306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 75962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpy7", 0x00), 76062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC00, "gpx0", 0x00), 76162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC20, "gpx1", 0x04), 76262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC40, "gpx2", 0x08), 76362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTW(8, 0xC60, "gpx3", 0x0c), 76462306a36Sopenharmony_ci}; 76562306a36Sopenharmony_ci 76662306a36Sopenharmony_ci/* pin banks of exynos5420 pin-controller 1 */ 76762306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5420_pin_banks1[] __initconst = { 76862306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 76962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpc0", 0x00), 77062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x020, "gpc1", 0x04), 77162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x040, "gpc2", 0x08), 77262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x060, "gpc3", 0x0c), 77362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x080, "gpc4", 0x10), 77462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpd1", 0x14), 77562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x0C0, "gpy0"), 77662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(4, 0x0E0, "gpy1"), 77762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(6, 0x100, "gpy2"), 77862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x120, "gpy3"), 77962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x140, "gpy4"), 78062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x160, "gpy5"), 78162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTN(8, 0x180, "gpy6"), 78262306a36Sopenharmony_ci}; 78362306a36Sopenharmony_ci 78462306a36Sopenharmony_ci/* pin banks of exynos5420 pin-controller 2 */ 78562306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5420_pin_banks2[] __initconst = { 78662306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 78762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpe0", 0x00), 78862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x020, "gpe1", 0x04), 78962306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x040, "gpf0", 0x08), 79062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x060, "gpf1", 0x0c), 79162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x080, "gpg0", 0x10), 79262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0A0, "gpg1", 0x14), 79362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x0C0, "gpg2", 0x18), 79462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0E0, "gpj4", 0x1c), 79562306a36Sopenharmony_ci}; 79662306a36Sopenharmony_ci 79762306a36Sopenharmony_ci/* pin banks of exynos5420 pin-controller 3 */ 79862306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5420_pin_banks3[] __initconst = { 79962306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 80062306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x000, "gpa0", 0x00), 80162306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(6, 0x020, "gpa1", 0x04), 80262306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x040, "gpa2", 0x08), 80362306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x060, "gpb0", 0x0c), 80462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(5, 0x080, "gpb1", 0x10), 80562306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(4, 0x0A0, "gpb2", 0x14), 80662306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x0C0, "gpb3", 0x18), 80762306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(2, 0x0E0, "gpb4", 0x1c), 80862306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(8, 0x100, "gph0", 0x20), 80962306a36Sopenharmony_ci}; 81062306a36Sopenharmony_ci 81162306a36Sopenharmony_ci/* pin banks of exynos5420 pin-controller 4 */ 81262306a36Sopenharmony_cistatic const struct samsung_pin_bank_data exynos5420_pin_banks4[] __initconst = { 81362306a36Sopenharmony_ci /* Must start with EINTG banks, ordered by EINT group number. */ 81462306a36Sopenharmony_ci EXYNOS_PIN_BANK_EINTG(7, 0x000, "gpz", 0x00), 81562306a36Sopenharmony_ci}; 81662306a36Sopenharmony_ci 81762306a36Sopenharmony_ci/* PMU pad retention groups registers for Exynos5420 (without audio) */ 81862306a36Sopenharmony_cistatic const u32 exynos5420_retention_regs[] = { 81962306a36Sopenharmony_ci EXYNOS_PAD_RET_DRAM_OPTION, 82062306a36Sopenharmony_ci EXYNOS_PAD_RET_JTAG_OPTION, 82162306a36Sopenharmony_ci EXYNOS5420_PAD_RET_GPIO_OPTION, 82262306a36Sopenharmony_ci EXYNOS5420_PAD_RET_UART_OPTION, 82362306a36Sopenharmony_ci EXYNOS5420_PAD_RET_MMCA_OPTION, 82462306a36Sopenharmony_ci EXYNOS5420_PAD_RET_MMCB_OPTION, 82562306a36Sopenharmony_ci EXYNOS5420_PAD_RET_MMCC_OPTION, 82662306a36Sopenharmony_ci EXYNOS5420_PAD_RET_HSI_OPTION, 82762306a36Sopenharmony_ci EXYNOS_PAD_RET_EBIA_OPTION, 82862306a36Sopenharmony_ci EXYNOS_PAD_RET_EBIB_OPTION, 82962306a36Sopenharmony_ci EXYNOS5420_PAD_RET_SPI_OPTION, 83062306a36Sopenharmony_ci EXYNOS5420_PAD_RET_DRAM_COREBLK_OPTION, 83162306a36Sopenharmony_ci}; 83262306a36Sopenharmony_ci 83362306a36Sopenharmony_cistatic const struct samsung_retention_data exynos5420_retention_data __initconst = { 83462306a36Sopenharmony_ci .regs = exynos5420_retention_regs, 83562306a36Sopenharmony_ci .nr_regs = ARRAY_SIZE(exynos5420_retention_regs), 83662306a36Sopenharmony_ci .value = EXYNOS_WAKEUP_FROM_LOWPWR, 83762306a36Sopenharmony_ci .refcnt = &exynos_shared_retention_refcnt, 83862306a36Sopenharmony_ci .init = exynos_retention_init, 83962306a36Sopenharmony_ci}; 84062306a36Sopenharmony_ci 84162306a36Sopenharmony_ci/* 84262306a36Sopenharmony_ci * Samsung pinctrl driver data for Exynos5420 SoC. Exynos5420 SoC includes 84362306a36Sopenharmony_ci * four gpio/pin-mux/pinconfig controllers. 84462306a36Sopenharmony_ci */ 84562306a36Sopenharmony_cistatic const struct samsung_pin_ctrl exynos5420_pin_ctrl[] __initconst = { 84662306a36Sopenharmony_ci { 84762306a36Sopenharmony_ci /* pin-controller instance 0 data */ 84862306a36Sopenharmony_ci .pin_banks = exynos5420_pin_banks0, 84962306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5420_pin_banks0), 85062306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 85162306a36Sopenharmony_ci .eint_wkup_init = exynos_eint_wkup_init, 85262306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 85362306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 85462306a36Sopenharmony_ci .retention_data = &exynos5420_retention_data, 85562306a36Sopenharmony_ci }, { 85662306a36Sopenharmony_ci /* pin-controller instance 1 data */ 85762306a36Sopenharmony_ci .pin_banks = exynos5420_pin_banks1, 85862306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5420_pin_banks1), 85962306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 86062306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 86162306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 86262306a36Sopenharmony_ci .retention_data = &exynos5420_retention_data, 86362306a36Sopenharmony_ci }, { 86462306a36Sopenharmony_ci /* pin-controller instance 2 data */ 86562306a36Sopenharmony_ci .pin_banks = exynos5420_pin_banks2, 86662306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5420_pin_banks2), 86762306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 86862306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 86962306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 87062306a36Sopenharmony_ci .retention_data = &exynos5420_retention_data, 87162306a36Sopenharmony_ci }, { 87262306a36Sopenharmony_ci /* pin-controller instance 3 data */ 87362306a36Sopenharmony_ci .pin_banks = exynos5420_pin_banks3, 87462306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5420_pin_banks3), 87562306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 87662306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 87762306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 87862306a36Sopenharmony_ci .retention_data = &exynos5420_retention_data, 87962306a36Sopenharmony_ci }, { 88062306a36Sopenharmony_ci /* pin-controller instance 4 data */ 88162306a36Sopenharmony_ci .pin_banks = exynos5420_pin_banks4, 88262306a36Sopenharmony_ci .nr_banks = ARRAY_SIZE(exynos5420_pin_banks4), 88362306a36Sopenharmony_ci .eint_gpio_init = exynos_eint_gpio_init, 88462306a36Sopenharmony_ci .suspend = exynos_pinctrl_suspend, 88562306a36Sopenharmony_ci .resume = exynos_pinctrl_resume, 88662306a36Sopenharmony_ci .retention_data = &exynos4_audio_retention_data, 88762306a36Sopenharmony_ci }, 88862306a36Sopenharmony_ci}; 88962306a36Sopenharmony_ci 89062306a36Sopenharmony_ciconst struct samsung_pinctrl_of_match_data exynos5420_of_data __initconst = { 89162306a36Sopenharmony_ci .ctrl = exynos5420_pin_ctrl, 89262306a36Sopenharmony_ci .num_ctrl = ARRAY_SIZE(exynos5420_pin_ctrl), 89362306a36Sopenharmony_ci}; 894