1 1.2 msaitoh /* $NetBSD: rk3588_iomux.c,v 1.2 2024/02/07 04:20:27 msaitoh Exp $ */ 2 1.1 ryo 3 1.1 ryo /*- 4 1.2 msaitoh * Copyright (c) 2022 Ryo Shimizu 5 1.1 ryo * All rights reserved. 6 1.1 ryo * 7 1.1 ryo * Redistribution and use in source and binary forms, with or without 8 1.1 ryo * modification, are permitted provided that the following conditions 9 1.1 ryo * are met: 10 1.1 ryo * 1. Redistributions of source code must retain the above copyright 11 1.1 ryo * notice, this list of conditions and the following disclaimer. 12 1.1 ryo * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 ryo * notice, this list of conditions and the following disclaimer in the 14 1.1 ryo * documentation and/or other materials provided with the distribution. 15 1.1 ryo * 16 1.1 ryo * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 17 1.1 ryo * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 1.1 ryo * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 1.1 ryo * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 20 1.1 ryo * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 1.1 ryo * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 1.1 ryo * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 1.1 ryo * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 24 1.1 ryo * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 25 1.1 ryo * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 1.1 ryo * POSSIBILITY OF SUCH DAMAGE. 27 1.1 ryo */ 28 1.1 ryo 29 1.1 ryo #include <sys/cdefs.h> 30 1.2 msaitoh __KERNEL_RCSID(0, "$NetBSD: rk3588_iomux.c,v 1.2 2024/02/07 04:20:27 msaitoh Exp $"); 31 1.1 ryo 32 1.1 ryo #include <sys/param.h> 33 1.1 ryo #include <sys/device.h> 34 1.1 ryo 35 1.1 ryo #include <dev/fdt/fdtvar.h> 36 1.1 ryo #include <dev/fdt/syscon.h> 37 1.1 ryo 38 1.1 ryo /* #define RK3588_IOMUX_DEBUG */ 39 1.1 ryo 40 1.1 ryo struct rk3588_iomux_softc { 41 1.1 ryo device_t sc_dev; 42 1.1 ryo struct syscon *sc_grf; 43 1.1 ryo }; 44 1.1 ryo 45 1.1 ryo static int rk3588_iomux_match(device_t, cfdata_t, void *); 46 1.1 ryo static void rk3588_iomux_attach(device_t, device_t, void *); 47 1.1 ryo 48 1.1 ryo CFATTACH_DECL_NEW(rk3588_iomux, sizeof(struct rk3588_iomux_softc), 49 1.1 ryo rk3588_iomux_match, rk3588_iomux_attach, NULL, NULL); 50 1.1 ryo 51 1.1 ryo static const struct device_compatible_entry compat_data[] = { 52 1.1 ryo { .compat = "rockchip,rk3588-pinctrl" }, 53 1.1 ryo DEVICE_COMPAT_EOL 54 1.1 ryo }; 55 1.1 ryo 56 1.1 ryo /* GRF offsets */ 57 1.1 ryo #define RK3588_PMU1_IOC_REG 0x00000000 58 1.1 ryo #define RK3588_PMU2_IOC_REG 0x00004000 59 1.1 ryo #define RK3588_BUS_IOC_REG 0x00008000 60 1.1 ryo #define RK3588_VCCIO1_4_IOC_REG 0x00009000 61 1.1 ryo #define RK3588_VCCIO3_5_IOC_REG 0x0000a000 62 1.1 ryo #define RK3588_VCCIO2_IOC_REG 0x0000b000 63 1.1 ryo #define RK3588_VCCIO6_IOC_REG 0x0000c000 64 1.1 ryo #define RK3588_EMMC_IOC_REG 0x0000d000 65 1.1 ryo 66 1.1 ryo #define NBANKS 5 67 1.1 ryo #define NPINPERBANK 32 68 1.1 ryo #define NPINS (NBANKS * NPINPERBANK) 69 1.1 ryo 70 1.1 ryo #define PIN(bank, idx) (((bank) * NPINPERBANK) + (idx)) 71 1.1 ryo 72 1.1 ryo struct regmask { 73 1.1 ryo bus_size_t reg; 74 1.1 ryo uint32_t mask; 75 1.1 ryo }; 76 1.1 ryo 77 1.1 ryo struct regmaskreg { 78 1.1 ryo bus_size_t reg; 79 1.1 ryo uint32_t mask; 80 1.1 ryo bus_size_t reg0; 81 1.1 ryo }; 82 1.1 ryo 83 1.1 ryo static const struct regmask rk3588_drive_regmap[NBANKS * NPINPERBANK] = { 84 1.1 ryo /* GPIO0_A[0-7] */ 85 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0010, __BITS(3,0) }, 86 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0010, __BITS(7,4) }, 87 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0010, __BITS(11,8) }, 88 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0010, __BITS(15,12) }, 89 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0014, __BITS(3,0) }, 90 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0014, __BITS(7,4) }, 91 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0014, __BITS(11,8) }, 92 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0014, __BITS(15,12) }, 93 1.1 ryo /* GPIO0_B[0-7] */ 94 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0018, __BITS(3,0) }, 95 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0018, __BITS(7,4) }, 96 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0018, __BITS(11,8) }, 97 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0018, __BITS(15,12) }, 98 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0014, __BITS(3,0) }, 99 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0014, __BITS(7,4) }, 100 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0014, __BITS(11,8) }, 101 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0014, __BITS(15,12) }, 102 1.1 ryo /* GPIO0_C[0-7] */ 103 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0018, __BITS(3,0) }, 104 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0018, __BITS(7,4) }, 105 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0018, __BITS(11,8) }, 106 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0018, __BITS(15,12) }, 107 1.1 ryo { RK3588_PMU2_IOC_REG + 0x001c, __BITS(3,0) }, 108 1.1 ryo { RK3588_PMU2_IOC_REG + 0x001c, __BITS(7,4) }, 109 1.1 ryo { RK3588_PMU2_IOC_REG + 0x001c, __BITS(11,8) }, 110 1.1 ryo { RK3588_PMU2_IOC_REG + 0x001c, __BITS(15,12) }, 111 1.1 ryo /* GPIO0_D[0-7] */ 112 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0020, __BITS(3,0) }, 113 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0020, __BITS(7,4) }, 114 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0020, __BITS(11,8) }, 115 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0020, __BITS(15,12) }, 116 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0024, __BITS(3,0) }, 117 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0024, __BITS(7,4) }, 118 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0024, __BITS(11,8) }, 119 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0024, __BITS(15,12) }, 120 1.1 ryo 121 1.1 ryo /* GPIO1_A[0-7] */ 122 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0020, __BITS(3,0) }, 123 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0020, __BITS(7,4) }, 124 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0020, __BITS(11,8) }, 125 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0020, __BITS(15,12) }, 126 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0024, __BITS(3,0) }, 127 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0024, __BITS(7,4) }, 128 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0024, __BITS(11,8) }, 129 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0024, __BITS(15,12) }, 130 1.1 ryo /* GPIO1_B[0-7] */ 131 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0028, __BITS(3,0) }, 132 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0028, __BITS(7,4) }, 133 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0028, __BITS(11,8) }, 134 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0028, __BITS(15,12) }, 135 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x002c, __BITS(3,0) }, 136 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x002c, __BITS(7,4) }, 137 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x002c, __BITS(11,8) }, 138 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x002c, __BITS(15,12) }, 139 1.1 ryo /* GPIO1_C[0-7] */ 140 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0030, __BITS(3,0) }, 141 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0030, __BITS(7,4) }, 142 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0030, __BITS(11,8) }, 143 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0030, __BITS(15,12) }, 144 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0034, __BITS(3,0) }, 145 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0034, __BITS(7,4) }, 146 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0034, __BITS(11,8) }, 147 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0034, __BITS(15,12) }, 148 1.1 ryo /* GPIO1_D[0-7] */ 149 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0038, __BITS(3,0) }, 150 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0038, __BITS(7,4) }, 151 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0038, __BITS(11,8) }, 152 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0038, __BITS(15,12) }, 153 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x003c, __BITS(3,0) }, 154 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x003c, __BITS(7,4) }, 155 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x003c, __BITS(11,8) }, 156 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x003c, __BITS(15,12) }, 157 1.1 ryo 158 1.1 ryo /* GPIO2_A[0-7] */ 159 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0040, __BITS(3,0) }, 160 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0040, __BITS(7,4) }, 161 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0040, __BITS(11,8) }, 162 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0040, __BITS(15,12) }, 163 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0044, __BITS(3,0) }, 164 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0044, __BITS(7,4) }, 165 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0044, __BITS(11,8) }, 166 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0044, __BITS(15,12) }, 167 1.1 ryo /* GPIO2_B[0-7] */ 168 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0048, __BITS(3,0) }, 169 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0048, __BITS(7,4) }, 170 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0048, __BITS(11,8) }, 171 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0048, __BITS(15,12) }, 172 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x004c, __BITS(3,0) }, 173 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x004c, __BITS(7,4) }, 174 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x004c, __BITS(11,8) }, 175 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x004c, __BITS(15,12) }, 176 1.1 ryo /* GPIO2_C[0-7] */ 177 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0050, __BITS(3,0) }, 178 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0050, __BITS(7,4) }, 179 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0050, __BITS(11,8) }, 180 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0050, __BITS(15,12) }, 181 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0054, __BITS(3,0) }, 182 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0054, __BITS(7,4) }, 183 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0054, __BITS(11,8) }, 184 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0054, __BITS(15,12) }, 185 1.1 ryo /* GPIO2_D[0-7] */ 186 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0058, __BITS(3,0) }, 187 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0058, __BITS(7,4) }, 188 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0058, __BITS(11,8) }, 189 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0058, __BITS(15,12) }, 190 1.1 ryo { RK3588_EMMC_IOC_REG + 0x005c, __BITS(3,0) }, 191 1.1 ryo { RK3588_EMMC_IOC_REG + 0x005c, __BITS(7,4) }, 192 1.1 ryo { RK3588_EMMC_IOC_REG + 0x005c, __BITS(11,8) }, 193 1.1 ryo { RK3588_EMMC_IOC_REG + 0x005c, __BITS(15,12) }, 194 1.1 ryo 195 1.1 ryo /* GPIO3_A[0-7] */ 196 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0060, __BITS(3,0) }, 197 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0060, __BITS(7,4) }, 198 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0060, __BITS(11,8) }, 199 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0060, __BITS(15,12) }, 200 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0064, __BITS(3,0) }, 201 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0064, __BITS(7,4) }, 202 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0064, __BITS(11,8) }, 203 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0064, __BITS(15,12) }, 204 1.1 ryo /* GPIO3_B[0-7] */ 205 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0068, __BITS(3,0) }, 206 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0068, __BITS(7,4) }, 207 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0068, __BITS(11,8) }, 208 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0068, __BITS(15,12) }, 209 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x006c, __BITS(3,0) }, 210 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x006c, __BITS(7,4) }, 211 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x006c, __BITS(11,8) }, 212 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x006c, __BITS(15,12) }, 213 1.1 ryo /* GPIO3_C[0-7] */ 214 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0070, __BITS(3,0) }, 215 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0070, __BITS(7,4) }, 216 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0070, __BITS(11,8) }, 217 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0070, __BITS(15,12) }, 218 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0074, __BITS(3,0) }, 219 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0074, __BITS(7,4) }, 220 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0074, __BITS(11,8) }, 221 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0074, __BITS(15,12) }, 222 1.1 ryo /* GPIO3_D[0-7] */ 223 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0078, __BITS(3,0) }, 224 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0078, __BITS(7,4) }, 225 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0078, __BITS(11,8) }, 226 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0078, __BITS(15,12) }, 227 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x007c, __BITS(3,0) }, 228 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x007c, __BITS(7,4) }, 229 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x007c, __BITS(11,8) }, 230 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x007c, __BITS(15,12) }, 231 1.1 ryo 232 1.1 ryo /* GPIO4_A[0-7] */ 233 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0080, __BITS(3,0) }, 234 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0080, __BITS(7,4) }, 235 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0080, __BITS(11,8) }, 236 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0080, __BITS(15,12) }, 237 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0084, __BITS(3,0) }, 238 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0084, __BITS(7,4) }, 239 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0084, __BITS(11,8) }, 240 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0084, __BITS(15,12) }, 241 1.1 ryo /* GPIO4_B[0-7] */ 242 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0088, __BITS(3,0) }, 243 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0088, __BITS(7,4) }, 244 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0088, __BITS(11,8) }, 245 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0088, __BITS(15,12) }, 246 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x008c, __BITS(3,0) }, 247 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x008c, __BITS(7,4) }, 248 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x008c, __BITS(11,8) }, 249 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x008c, __BITS(15,12) }, 250 1.1 ryo /* GPIO4_C[0-7] */ 251 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0090, __BITS(3,0) }, 252 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0090, __BITS(7,4) }, 253 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0090, __BITS(11,8) }, 254 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0090, __BITS(15,12) }, 255 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0094, __BITS(3,0) }, 256 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0094, __BITS(7,4) }, 257 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0094, __BITS(11,8) }, 258 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0094, __BITS(15,12) }, 259 1.1 ryo /* GPIO4_D[0-7] */ 260 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x0098, __BITS(3,0) }, 261 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x0098, __BITS(7,4) }, 262 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x0098, __BITS(11,8) }, 263 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x0098, __BITS(15,12) }, 264 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x009c, __BITS(3,0) }, 265 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x009c, __BITS(7,4) }, 266 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x009c, __BITS(11,8) }, 267 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x009c, __BITS(15,12) } 268 1.1 ryo }; 269 1.1 ryo 270 1.1 ryo #define RK3588_GPIO_P_CTL_Z 0 271 1.1 ryo #define RK3588_GPIO_P_PULLDOWN 1 272 1.1 ryo #define RK3588_GPIO_P_DISABLE 2 273 1.1 ryo #define RK3588_GPIO_P_PULLUP 3 274 1.1 ryo 275 1.1 ryo static const struct regmask rk3588_pull_regmap[NBANKS * NPINPERBANK] = { 276 1.1 ryo /* GPIO0_A[0-7] */ 277 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0020, __BITS(1,0) }, 278 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0020, __BITS(3,2) }, 279 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0020, __BITS(5,4) }, 280 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0020, __BITS(7,6) }, 281 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0020, __BITS(9,8) }, 282 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0020, __BITS(11,10) }, 283 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0020, __BITS(13,12) }, 284 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0020, __BITS(15,14) }, 285 1.1 ryo /* GPIO0_B[0-7] */ 286 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0024, __BITS(1,0) }, 287 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0024, __BITS(3,2) }, 288 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0024, __BITS(5,4) }, 289 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0024, __BITS(7,6) }, 290 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0024, __BITS(9,8) }, 291 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0028, __BITS(11,10) }, 292 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0028, __BITS(13,12) }, 293 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0028, __BITS(15,14) }, 294 1.1 ryo /* GPIO0_C[0-7] */ 295 1.1 ryo { RK3588_PMU2_IOC_REG + 0x002c, __BITS(1,0) }, 296 1.1 ryo { RK3588_PMU2_IOC_REG + 0x002c, __BITS(3,2) }, 297 1.1 ryo { RK3588_PMU2_IOC_REG + 0x002c, __BITS(5,4) }, 298 1.1 ryo { RK3588_PMU2_IOC_REG + 0x002c, __BITS(7,6) }, 299 1.1 ryo { RK3588_PMU2_IOC_REG + 0x002c, __BITS(9,8) }, 300 1.1 ryo { RK3588_PMU2_IOC_REG + 0x002c, __BITS(11,10) }, 301 1.1 ryo { RK3588_PMU2_IOC_REG + 0x002c, __BITS(13,12) }, 302 1.1 ryo { RK3588_PMU2_IOC_REG + 0x002c, __BITS(15,14) }, 303 1.1 ryo /* GPIO0_D[0-7] */ 304 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0030, __BITS(1,0) }, 305 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0030, __BITS(3,2) }, 306 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0030, __BITS(5,4) }, 307 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0030, __BITS(7,6) }, 308 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0030, __BITS(9,8) }, 309 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0030, __BITS(11,10) }, 310 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0030, __BITS(13,12) }, 311 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0030, __BITS(15,14) }, 312 1.1 ryo 313 1.1 ryo /* GPIO1_A[0-7] */ 314 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0110, __BITS(1,0) }, 315 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0110, __BITS(3,2) }, 316 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0110, __BITS(5,4) }, 317 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0110, __BITS(7,6) }, 318 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0110, __BITS(9,8) }, 319 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0110, __BITS(11,10) }, 320 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0110, __BITS(13,12) }, 321 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0110, __BITS(15,14) }, 322 1.1 ryo /* GPIO1_B[0-7] */ 323 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0114, __BITS(1,0) }, 324 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0114, __BITS(3,2) }, 325 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0114, __BITS(5,4) }, 326 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0114, __BITS(7,6) }, 327 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0114, __BITS(9,8) }, 328 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0114, __BITS(11,10) }, 329 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0114, __BITS(13,12) }, 330 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0114, __BITS(15,14) }, 331 1.1 ryo /* GPIO1_C[0-7] */ 332 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0118, __BITS(1,0) }, 333 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0118, __BITS(3,2) }, 334 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0118, __BITS(5,4) }, 335 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0118, __BITS(7,6) }, 336 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0118, __BITS(9,8) }, 337 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0118, __BITS(11,10) }, 338 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0118, __BITS(13,12) }, 339 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0118, __BITS(15,14) }, 340 1.1 ryo /* GPIO1_D[0-7] */ 341 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x011c, __BITS(1,0) }, 342 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x011c, __BITS(3,2) }, 343 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x011c, __BITS(5,4) }, 344 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x011c, __BITS(7,6) }, 345 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x011c, __BITS(9,8) }, 346 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x011c, __BITS(11,10) }, 347 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x011c, __BITS(13,12) }, 348 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x011c, __BITS(15,14) }, 349 1.1 ryo 350 1.1 ryo /* GPIO2_A[0-7] */ 351 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0120, __BITS(1,0) }, 352 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0120, __BITS(3,2) }, 353 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0120, __BITS(5,4) }, 354 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0120, __BITS(7,6) }, 355 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0120, __BITS(9,8) }, 356 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0120, __BITS(11,10) }, 357 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0120, __BITS(13,12) }, 358 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0120, __BITS(15,14) }, 359 1.1 ryo /* GPIO2_B[0-7] */ 360 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0124, __BITS(1,0) }, 361 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0124, __BITS(3,2) }, 362 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0124, __BITS(5,4) }, 363 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0124, __BITS(7,6) }, 364 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0124, __BITS(9,8) }, 365 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0124, __BITS(11,10) }, 366 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0124, __BITS(13,12) }, 367 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0124, __BITS(15,14) }, 368 1.1 ryo /* GPIO2_C[0-7] */ 369 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0128, __BITS(1,0) }, 370 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0128, __BITS(3,2) }, 371 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0128, __BITS(5,4) }, 372 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0128, __BITS(7,6) }, 373 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0128, __BITS(9,8) }, 374 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0128, __BITS(11,10) }, 375 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0128, __BITS(13,12) }, 376 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0128, __BITS(15,14) }, 377 1.1 ryo /* GPIO2_D[0-7] */ 378 1.1 ryo { RK3588_EMMC_IOC_REG + 0x012c, __BITS(1,0) }, 379 1.1 ryo { RK3588_EMMC_IOC_REG + 0x012c, __BITS(3,2) }, 380 1.1 ryo { RK3588_EMMC_IOC_REG + 0x012c, __BITS(5,4) }, 381 1.1 ryo { RK3588_EMMC_IOC_REG + 0x012c, __BITS(7,6) }, 382 1.1 ryo { RK3588_EMMC_IOC_REG + 0x012c, __BITS(9,8) }, 383 1.1 ryo { RK3588_EMMC_IOC_REG + 0x012c, __BITS(11,10) }, 384 1.1 ryo { RK3588_EMMC_IOC_REG + 0x012c, __BITS(13,12) }, 385 1.1 ryo { RK3588_EMMC_IOC_REG + 0x012c, __BITS(15,14) }, 386 1.1 ryo 387 1.1 ryo /* GPIO3_A[0-7] */ 388 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0130, __BITS(1,0) }, 389 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0130, __BITS(3,2) }, 390 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0130, __BITS(5,4) }, 391 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0130, __BITS(7,6) }, 392 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0130, __BITS(9,8) }, 393 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0130, __BITS(11,10) }, 394 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0130, __BITS(13,12) }, 395 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0130, __BITS(15,14) }, 396 1.1 ryo /* GPIO3_B[0-7] */ 397 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0134, __BITS(1,0) }, 398 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0134, __BITS(3,2) }, 399 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0134, __BITS(5,4) }, 400 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0134, __BITS(7,6) }, 401 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0134, __BITS(9,8) }, 402 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0134, __BITS(11,10) }, 403 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0134, __BITS(13,12) }, 404 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0134, __BITS(15,14) }, 405 1.1 ryo /* GPIO3_C[0-7] */ 406 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0138, __BITS(1,0) }, 407 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0138, __BITS(3,2) }, 408 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0138, __BITS(5,4) }, 409 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0138, __BITS(7,6) }, 410 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0138, __BITS(9,8) }, 411 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0138, __BITS(11,10) }, 412 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0138, __BITS(13,12) }, 413 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0138, __BITS(15,14) }, 414 1.1 ryo /* GPIO3_D[0-7] */ 415 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x013c, __BITS(1,0) }, 416 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x013c, __BITS(3,2) }, 417 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x013c, __BITS(5,4) }, 418 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x013c, __BITS(7,6) }, 419 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x013c, __BITS(9,8) }, 420 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x013c, __BITS(11,10) }, 421 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x013c, __BITS(13,12) }, 422 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x013c, __BITS(15,14) }, 423 1.1 ryo 424 1.1 ryo /* GPIO4_A[0-7] */ 425 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0140, __BITS(1,0) }, 426 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0140, __BITS(3,2) }, 427 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0140, __BITS(5,4) }, 428 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0140, __BITS(7,6) }, 429 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0140, __BITS(9,8) }, 430 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0140, __BITS(11,10) }, 431 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0140, __BITS(13,12) }, 432 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0140, __BITS(15,14) }, 433 1.1 ryo /* GPIO4_B[0-7] */ 434 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0144, __BITS(1,0) }, 435 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0144, __BITS(3,2) }, 436 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0144, __BITS(5,4) }, 437 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0144, __BITS(7,6) }, 438 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0144, __BITS(9,8) }, 439 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0144, __BITS(11,10) }, 440 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0144, __BITS(13,12) }, 441 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0144, __BITS(15,14) }, 442 1.1 ryo /* GPIO4_C[0-7] */ 443 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0148, __BITS(1,0) }, 444 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0148, __BITS(3,2) }, 445 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0148, __BITS(5,4) }, 446 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0148, __BITS(7,6) }, 447 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0148, __BITS(9,8) }, 448 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0148, __BITS(11,10) }, 449 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0148, __BITS(13,12) }, 450 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0148, __BITS(15,14) }, 451 1.1 ryo /* GPIO4_D[0-7] */ 452 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x014c, __BITS(1,0) }, 453 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x014c, __BITS(3,2) }, 454 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x014c, __BITS(5,4) }, 455 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x014c, __BITS(7,6) }, 456 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x014c, __BITS(9,8) }, 457 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x014c, __BITS(11,10) }, 458 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x014c, __BITS(13,12) }, 459 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x014c, __BITS(15,14) } 460 1.1 ryo }; 461 1.1 ryo 462 1.1 ryo #if notyet 463 1.1 ryo static const struct regmask rk3588_schmitt_regmap[NBANKS * NPINPERBANK] = { 464 1.1 ryo /* GPIO0_A[0-7] */ 465 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0030, __BIT(0) }, 466 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0030, __BIT(1) }, 467 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0030, __BIT(2) }, 468 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0030, __BIT(3) }, 469 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0030, __BIT(4) }, 470 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0030, __BIT(5) }, 471 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0030, __BIT(6) }, 472 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0030, __BIT(7) }, 473 1.1 ryo /* GPIO0_B[0-7] */ 474 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0034, __BIT(0) }, 475 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0034, __BIT(1) }, 476 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0034, __BIT(2) }, 477 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0034, __BIT(3) }, 478 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0034, __BIT(4) }, 479 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0040, __BIT(5) }, 480 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0040, __BIT(6) }, 481 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0040, __BIT(7) }, 482 1.1 ryo /* GPIO0_C[0-7] */ 483 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0044, __BIT(0) }, 484 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0044, __BIT(1) }, 485 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0044, __BIT(2) }, 486 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0044, __BIT(3) }, 487 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0044, __BIT(4) }, 488 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0044, __BIT(5) }, 489 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0044, __BIT(6) }, 490 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0044, __BIT(7) }, 491 1.1 ryo /* GPIO0_D[0-7] */ 492 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0048, __BIT(0) }, 493 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0048, __BIT(1) }, 494 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0048, __BIT(2) }, 495 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0048, __BIT(3) }, 496 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0048, __BIT(4) }, 497 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0048, __BIT(5) }, 498 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0048, __BIT(6) }, 499 1.1 ryo { RK3588_PMU2_IOC_REG + 0x0048, __BIT(7) }, 500 1.1 ryo 501 1.1 ryo /* GPIO1_A[0-7] */ 502 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0210, __BIT(0) }, 503 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0210, __BIT(1) }, 504 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0210, __BIT(2) }, 505 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0210, __BIT(3) }, 506 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0210, __BIT(4) }, 507 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0210, __BIT(5) }, 508 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0210, __BIT(6) }, 509 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0210, __BIT(7) }, 510 1.1 ryo /* GPIO1_B[0-7] */ 511 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0214, __BIT(0) }, 512 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0214, __BIT(1) }, 513 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0214, __BIT(2) }, 514 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0214, __BIT(3) }, 515 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0214, __BIT(4) }, 516 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0214, __BIT(5) }, 517 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0214, __BIT(6) }, 518 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0214, __BIT(7) }, 519 1.1 ryo /* GPIO1_C[0-7] */ 520 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0218, __BIT(0) }, 521 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0218, __BIT(1) }, 522 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0218, __BIT(2) }, 523 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0218, __BIT(3) }, 524 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0218, __BIT(4) }, 525 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0218, __BIT(5) }, 526 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0218, __BIT(6) }, 527 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x0218, __BIT(7) }, 528 1.1 ryo /* GPIO1_D[0-7] */ 529 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x021c, __BIT(0) }, 530 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x021c, __BIT(1) }, 531 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x021c, __BIT(2) }, 532 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x021c, __BIT(3) }, 533 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x021c, __BIT(4) }, 534 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x021c, __BIT(5) }, 535 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x021c, __BIT(6) }, 536 1.1 ryo { RK3588_VCCIO1_4_IOC_REG + 0x021c, __BIT(7) }, 537 1.1 ryo 538 1.1 ryo /* GPIO2_A[0-7] */ 539 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0220, __BIT(0) }, 540 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0220, __BIT(1) }, 541 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0220, __BIT(2) }, 542 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0220, __BIT(3) }, 543 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0220, __BIT(4) }, 544 1.1 ryo { RK3588_EMMC_IOC_REG + 0x0220, __BIT(5) }, 545 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0220, __BIT(6) }, 546 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0220, __BIT(7) }, 547 1.1 ryo /* GPIO2_B[0-7] */ 548 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0224, __BIT(0) }, 549 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0224, __BIT(1) }, 550 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0224, __BIT(2) }, 551 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0224, __BIT(3) }, 552 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0224, __BIT(4) }, 553 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0224, __BIT(5) }, 554 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0224, __BIT(6) }, 555 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0224, __BIT(7) }, 556 1.1 ryo /* GPIO2_C[0-7] */ 557 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0228, __BIT(0) }, 558 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0228, __BIT(1) }, 559 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0228, __BIT(2) }, 560 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0228, __BIT(3) }, 561 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0228, __BIT(4) }, 562 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0228, __BIT(5) }, 563 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0228, __BIT(6) }, 564 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0228, __BIT(7) }, 565 1.1 ryo /* GPIO2_D[0-7] */ 566 1.1 ryo { RK3588_EMMC_IOC_REG + 0x022c, __BIT(0) }, 567 1.1 ryo { RK3588_EMMC_IOC_REG + 0x022c, __BIT(1) }, 568 1.1 ryo { RK3588_EMMC_IOC_REG + 0x022c, __BIT(2) }, 569 1.1 ryo { RK3588_EMMC_IOC_REG + 0x022c, __BIT(3) }, 570 1.1 ryo { RK3588_EMMC_IOC_REG + 0x022c, __BIT(4) }, 571 1.1 ryo { RK3588_EMMC_IOC_REG + 0x022c, __BIT(5) }, 572 1.1 ryo { RK3588_EMMC_IOC_REG + 0x022c, __BIT(6) }, 573 1.1 ryo { RK3588_EMMC_IOC_REG + 0x022c, __BIT(7) }, 574 1.1 ryo 575 1.1 ryo /* GPIO3_A[0-7] */ 576 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0230, __BIT(0) }, 577 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0230, __BIT(1) }, 578 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0230, __BIT(2) }, 579 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0230, __BIT(3) }, 580 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0230, __BIT(4) }, 581 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0230, __BIT(5) }, 582 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0230, __BIT(6) }, 583 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0230, __BIT(7) }, 584 1.1 ryo /* GPIO3_B[0-7] */ 585 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0234, __BIT(0) }, 586 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0234, __BIT(1) }, 587 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0234, __BIT(2) }, 588 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0234, __BIT(3) }, 589 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0234, __BIT(4) }, 590 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0234, __BIT(5) }, 591 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0234, __BIT(6) }, 592 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0234, __BIT(7) }, 593 1.1 ryo /* GPIO3_C[0-7] */ 594 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0238, __BIT(0) }, 595 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0238, __BIT(1) }, 596 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0238, __BIT(2) }, 597 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0238, __BIT(3) }, 598 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0238, __BIT(4) }, 599 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0238, __BIT(5) }, 600 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0238, __BIT(6) }, 601 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0238, __BIT(7) }, 602 1.1 ryo /* GPIO3_D[0-7] */ 603 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x023c, __BIT(0) }, 604 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x023c, __BIT(1) }, 605 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x023c, __BIT(2) }, 606 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x023c, __BIT(3) }, 607 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x023c, __BIT(4) }, 608 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x023c, __BIT(5) }, 609 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x023c, __BIT(6) }, 610 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x023c, __BIT(7) }, 611 1.1 ryo 612 1.1 ryo /* GPIO4_A[0-7] */ 613 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0240, __BIT(0) }, 614 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0240, __BIT(1) }, 615 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0240, __BIT(2) }, 616 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0240, __BIT(3) }, 617 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0240, __BIT(4) }, 618 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0240, __BIT(5) }, 619 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0240, __BIT(6) }, 620 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0240, __BIT(7) }, 621 1.1 ryo /* GPIO4_B[0-7] */ 622 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0244, __BIT(0) }, 623 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0244, __BIT(1) }, 624 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0244, __BIT(2) }, 625 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0244, __BIT(3) }, 626 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0244, __BIT(4) }, 627 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0244, __BIT(5) }, 628 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0244, __BIT(6) }, 629 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0244, __BIT(7) }, 630 1.1 ryo /* GPIO4_C[0-7] */ 631 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0248, __BIT(0) }, 632 1.1 ryo { RK3588_VCCIO6_IOC_REG + 0x0248, __BIT(1) }, 633 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0248, __BIT(2) }, 634 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0248, __BIT(3) }, 635 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0248, __BIT(4) }, 636 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0248, __BIT(5) }, 637 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0248, __BIT(6) }, 638 1.1 ryo { RK3588_VCCIO3_5_IOC_REG + 0x0248, __BIT(7) }, 639 1.1 ryo /* GPIO4_D[0-7] */ 640 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x024c, __BIT(0) }, 641 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x024c, __BIT(1) }, 642 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x024c, __BIT(2) }, 643 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x024c, __BIT(3) }, 644 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x024c, __BIT(4) }, 645 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x024c, __BIT(5) }, 646 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x024c, __BIT(6) }, 647 1.1 ryo { RK3588_VCCIO2_IOC_REG + 0x024c, __BIT(7) } 648 1.1 ryo }; 649 1.1 ryo #endif 650 1.1 ryo 651 1.1 ryo static const struct regmaskreg rk3588_iomux_regmap[NBANKS * NPINPERBANK] = { 652 1.1 ryo /* GPIO0_A[0-7] */ 653 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0000, __BITS(3,0) }, 654 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0000, __BITS(7,4) }, 655 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0000, __BITS(11,8) }, 656 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0000, __BITS(15,12) }, 657 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0004, __BITS(3,0) }, 658 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0004, __BITS(7,4) }, 659 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0004, __BITS(11,8) }, 660 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0004, __BITS(15,12) }, 661 1.1 ryo /* GPIO0_B[0-7] */ 662 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0008, __BITS(3,0) }, 663 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0008, __BITS(7,4) }, 664 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0008, __BITS(11,8) }, 665 1.1 ryo { RK3588_PMU1_IOC_REG + 0x0008, __BITS(15,12) }, 666 1.1 ryo { RK3588_BUS_IOC_REG + 0x000c, __BITS(3,0), RK3588_PMU2_IOC_REG + 0x0000 }, 667 1.1 ryo { RK3588_BUS_IOC_REG + 0x000c, __BITS(7,4), RK3588_PMU2_IOC_REG + 0x0000 }, 668 1.1 ryo { RK3588_BUS_IOC_REG + 0x000c, __BITS(11,8), RK3588_PMU2_IOC_REG + 0x0000 }, 669 1.1 ryo { RK3588_BUS_IOC_REG + 0x000c, __BITS(15,12), RK3588_PMU2_IOC_REG + 0x0000 }, 670 1.1 ryo /* GPIO0_C[0-7] */ 671 1.1 ryo { RK3588_BUS_IOC_REG + 0x0010, __BITS(3,0), RK3588_PMU2_IOC_REG + 0x0004 }, 672 1.1 ryo { RK3588_BUS_IOC_REG + 0x0010, __BITS(7,4), RK3588_PMU2_IOC_REG + 0x0004 }, 673 1.1 ryo { RK3588_BUS_IOC_REG + 0x0010, __BITS(11,8), RK3588_PMU2_IOC_REG + 0x0004 }, 674 1.1 ryo { RK3588_BUS_IOC_REG + 0x0010, __BITS(15,12), RK3588_PMU2_IOC_REG + 0x0004 }, 675 1.1 ryo { RK3588_BUS_IOC_REG + 0x0014, __BITS(3,0), RK3588_PMU2_IOC_REG + 0x0008 }, 676 1.1 ryo { RK3588_BUS_IOC_REG + 0x0014, __BITS(7,4), RK3588_PMU2_IOC_REG + 0x0008 }, 677 1.1 ryo { RK3588_BUS_IOC_REG + 0x0014, __BITS(11,8), RK3588_PMU2_IOC_REG + 0x0008 }, 678 1.1 ryo { RK3588_BUS_IOC_REG + 0x0014, __BITS(15,12), RK3588_PMU2_IOC_REG + 0x0008 }, 679 1.1 ryo /* GPIO0_D[0-7] */ 680 1.1 ryo { RK3588_BUS_IOC_REG + 0x0018, __BITS(3,0), RK3588_PMU2_IOC_REG + 0x000c }, 681 1.1 ryo { RK3588_BUS_IOC_REG + 0x0018, __BITS(7,4), RK3588_PMU2_IOC_REG + 0x000c }, 682 1.1 ryo { RK3588_BUS_IOC_REG + 0x0018, __BITS(11,8), RK3588_PMU2_IOC_REG + 0x000c }, 683 1.1 ryo { RK3588_BUS_IOC_REG + 0x0018, __BITS(15,12), RK3588_PMU2_IOC_REG + 0x000c }, 684 1.1 ryo { RK3588_BUS_IOC_REG + 0x001c, __BITS(3,0), RK3588_PMU2_IOC_REG + 0x0010 }, 685 1.1 ryo { RK3588_BUS_IOC_REG + 0x001c, __BITS(7,4), RK3588_PMU2_IOC_REG + 0x0010 }, 686 1.1 ryo { RK3588_BUS_IOC_REG + 0x001c, __BITS(11,8), RK3588_PMU2_IOC_REG + 0x0010 }, 687 1.1 ryo { RK3588_BUS_IOC_REG + 0x001c, __BITS(15,12), RK3588_PMU2_IOC_REG + 0x0010 }, 688 1.1 ryo 689 1.1 ryo /* GPIO1_A[0-7] */ 690 1.1 ryo { RK3588_BUS_IOC_REG + 0x0020, __BITS(3,0) }, 691 1.1 ryo { RK3588_BUS_IOC_REG + 0x0020, __BITS(7,4) }, 692 1.1 ryo { RK3588_BUS_IOC_REG + 0x0020, __BITS(11,8) }, 693 1.1 ryo { RK3588_BUS_IOC_REG + 0x0020, __BITS(15,12) }, 694 1.1 ryo { RK3588_BUS_IOC_REG + 0x0024, __BITS(3,0) }, 695 1.1 ryo { RK3588_BUS_IOC_REG + 0x0024, __BITS(7,4) }, 696 1.1 ryo { RK3588_BUS_IOC_REG + 0x0024, __BITS(11,8) }, 697 1.1 ryo { RK3588_BUS_IOC_REG + 0x0024, __BITS(15,12) }, 698 1.1 ryo /* GPIO1_B[0-7] */ 699 1.1 ryo { RK3588_BUS_IOC_REG + 0x0028, __BITS(3,0) }, 700 1.1 ryo { RK3588_BUS_IOC_REG + 0x0028, __BITS(7,4) }, 701 1.1 ryo { RK3588_BUS_IOC_REG + 0x0028, __BITS(11,8) }, 702 1.1 ryo { RK3588_BUS_IOC_REG + 0x0028, __BITS(15,12) }, 703 1.1 ryo { RK3588_BUS_IOC_REG + 0x002c, __BITS(3,0) }, 704 1.1 ryo { RK3588_BUS_IOC_REG + 0x002c, __BITS(7,4) }, 705 1.1 ryo { RK3588_BUS_IOC_REG + 0x002c, __BITS(11,8) }, 706 1.1 ryo { RK3588_BUS_IOC_REG + 0x002c, __BITS(15,12) }, 707 1.1 ryo /* GPIO1_C[0-7] */ 708 1.1 ryo { RK3588_BUS_IOC_REG + 0x0030, __BITS(3,0) }, 709 1.1 ryo { RK3588_BUS_IOC_REG + 0x0030, __BITS(7,4) }, 710 1.1 ryo { RK3588_BUS_IOC_REG + 0x0030, __BITS(11,8) }, 711 1.1 ryo { RK3588_BUS_IOC_REG + 0x0030, __BITS(15,12) }, 712 1.1 ryo { RK3588_BUS_IOC_REG + 0x0034, __BITS(3,0) }, 713 1.1 ryo { RK3588_BUS_IOC_REG + 0x0034, __BITS(7,4) }, 714 1.1 ryo { RK3588_BUS_IOC_REG + 0x0034, __BITS(11,8) }, 715 1.1 ryo { RK3588_BUS_IOC_REG + 0x0034, __BITS(15,12) }, 716 1.1 ryo /* GPIO1_D[0-7] */ 717 1.1 ryo { RK3588_BUS_IOC_REG + 0x0038, __BITS(3,0) }, 718 1.1 ryo { RK3588_BUS_IOC_REG + 0x0038, __BITS(7,4) }, 719 1.1 ryo { RK3588_BUS_IOC_REG + 0x0038, __BITS(11,8) }, 720 1.1 ryo { RK3588_BUS_IOC_REG + 0x0038, __BITS(15,12) }, 721 1.1 ryo { RK3588_BUS_IOC_REG + 0x003c, __BITS(3,0) }, 722 1.1 ryo { RK3588_BUS_IOC_REG + 0x003c, __BITS(7,4) }, 723 1.1 ryo { RK3588_BUS_IOC_REG + 0x003c, __BITS(11,8) }, 724 1.1 ryo { RK3588_BUS_IOC_REG + 0x003c, __BITS(15,12) }, 725 1.1 ryo 726 1.1 ryo /* GPIO2_A[0-7] */ 727 1.1 ryo { RK3588_BUS_IOC_REG + 0x0040, __BITS(3,0) }, 728 1.1 ryo { RK3588_BUS_IOC_REG + 0x0040, __BITS(7,4) }, 729 1.1 ryo { RK3588_BUS_IOC_REG + 0x0040, __BITS(11,8) }, 730 1.1 ryo { RK3588_BUS_IOC_REG + 0x0040, __BITS(15,12) }, 731 1.1 ryo { RK3588_BUS_IOC_REG + 0x0044, __BITS(3,0) }, 732 1.1 ryo { RK3588_BUS_IOC_REG + 0x0044, __BITS(7,4) }, 733 1.1 ryo { RK3588_BUS_IOC_REG + 0x0044, __BITS(11,8) }, 734 1.1 ryo { RK3588_BUS_IOC_REG + 0x0044, __BITS(15,12) }, 735 1.1 ryo /* GPIO2_B[0-7] */ 736 1.1 ryo { RK3588_BUS_IOC_REG + 0x0048, __BITS(3,0) }, 737 1.1 ryo { RK3588_BUS_IOC_REG + 0x0048, __BITS(7,4) }, 738 1.1 ryo { RK3588_BUS_IOC_REG + 0x0048, __BITS(11,8) }, 739 1.1 ryo { RK3588_BUS_IOC_REG + 0x0048, __BITS(15,12) }, 740 1.1 ryo { RK3588_BUS_IOC_REG + 0x004c, __BITS(3,0) }, 741 1.1 ryo { RK3588_BUS_IOC_REG + 0x004c, __BITS(7,4) }, 742 1.1 ryo { RK3588_BUS_IOC_REG + 0x004c, __BITS(11,8) }, 743 1.1 ryo { RK3588_BUS_IOC_REG + 0x004c, __BITS(15,12) }, 744 1.1 ryo /* GPIO2_C[0-7] */ 745 1.1 ryo { RK3588_BUS_IOC_REG + 0x0050, __BITS(3,0) }, 746 1.1 ryo { RK3588_BUS_IOC_REG + 0x0050, __BITS(7,4) }, 747 1.1 ryo { RK3588_BUS_IOC_REG + 0x0050, __BITS(11,8) }, 748 1.1 ryo { RK3588_BUS_IOC_REG + 0x0050, __BITS(15,12) }, 749 1.1 ryo { RK3588_BUS_IOC_REG + 0x0054, __BITS(3,0) }, 750 1.1 ryo { RK3588_BUS_IOC_REG + 0x0054, __BITS(7,4) }, 751 1.1 ryo { RK3588_BUS_IOC_REG + 0x0054, __BITS(11,8) }, 752 1.1 ryo { RK3588_BUS_IOC_REG + 0x0054, __BITS(15,12) }, 753 1.1 ryo /* GPIO2_D[0-7] */ 754 1.1 ryo { RK3588_BUS_IOC_REG + 0x0058, __BITS(3,0) }, 755 1.1 ryo { RK3588_BUS_IOC_REG + 0x0058, __BITS(7,4) }, 756 1.1 ryo { RK3588_BUS_IOC_REG + 0x0058, __BITS(11,8) }, 757 1.1 ryo { RK3588_BUS_IOC_REG + 0x0058, __BITS(15,12) }, 758 1.1 ryo { RK3588_BUS_IOC_REG + 0x005c, __BITS(3,0) }, 759 1.1 ryo { RK3588_BUS_IOC_REG + 0x005c, __BITS(7,4) }, 760 1.1 ryo { RK3588_BUS_IOC_REG + 0x005c, __BITS(11,8) }, 761 1.1 ryo { RK3588_BUS_IOC_REG + 0x005c, __BITS(15,12) }, 762 1.1 ryo 763 1.1 ryo /* GPIO3_A[0-7] */ 764 1.1 ryo { RK3588_BUS_IOC_REG + 0x0060, __BITS(3,0) }, 765 1.1 ryo { RK3588_BUS_IOC_REG + 0x0060, __BITS(7,4) }, 766 1.1 ryo { RK3588_BUS_IOC_REG + 0x0060, __BITS(11,8) }, 767 1.1 ryo { RK3588_BUS_IOC_REG + 0x0060, __BITS(15,12) }, 768 1.1 ryo { RK3588_BUS_IOC_REG + 0x0064, __BITS(3,0) }, 769 1.1 ryo { RK3588_BUS_IOC_REG + 0x0064, __BITS(7,4) }, 770 1.1 ryo { RK3588_BUS_IOC_REG + 0x0064, __BITS(11,8) }, 771 1.1 ryo { RK3588_BUS_IOC_REG + 0x0064, __BITS(15,12) }, 772 1.1 ryo /* GPIO3_B[0-7] */ 773 1.1 ryo { RK3588_BUS_IOC_REG + 0x0068, __BITS(3,0) }, 774 1.1 ryo { RK3588_BUS_IOC_REG + 0x0068, __BITS(7,4) }, 775 1.1 ryo { RK3588_BUS_IOC_REG + 0x0068, __BITS(11,8) }, 776 1.1 ryo { RK3588_BUS_IOC_REG + 0x0068, __BITS(15,12) }, 777 1.1 ryo { RK3588_BUS_IOC_REG + 0x006c, __BITS(3,0) }, 778 1.1 ryo { RK3588_BUS_IOC_REG + 0x006c, __BITS(7,4) }, 779 1.1 ryo { RK3588_BUS_IOC_REG + 0x006c, __BITS(11,8) }, 780 1.1 ryo { RK3588_BUS_IOC_REG + 0x006c, __BITS(15,12) }, 781 1.1 ryo /* GPIO3_C[0-7] */ 782 1.1 ryo { RK3588_BUS_IOC_REG + 0x0070, __BITS(3,0) }, 783 1.1 ryo { RK3588_BUS_IOC_REG + 0x0070, __BITS(7,4) }, 784 1.1 ryo { RK3588_BUS_IOC_REG + 0x0070, __BITS(11,8) }, 785 1.1 ryo { RK3588_BUS_IOC_REG + 0x0070, __BITS(15,12) }, 786 1.1 ryo { RK3588_BUS_IOC_REG + 0x0074, __BITS(3,0) }, 787 1.1 ryo { RK3588_BUS_IOC_REG + 0x0074, __BITS(7,4) }, 788 1.1 ryo { RK3588_BUS_IOC_REG + 0x0074, __BITS(11,8) }, 789 1.1 ryo { RK3588_BUS_IOC_REG + 0x0074, __BITS(15,12) }, 790 1.1 ryo /* GPIO3_D[0-7] */ 791 1.1 ryo { RK3588_BUS_IOC_REG + 0x0078, __BITS(3,0) }, 792 1.1 ryo { RK3588_BUS_IOC_REG + 0x0078, __BITS(7,4) }, 793 1.1 ryo { RK3588_BUS_IOC_REG + 0x0078, __BITS(11,8) }, 794 1.1 ryo { RK3588_BUS_IOC_REG + 0x0078, __BITS(15,12) }, 795 1.1 ryo { RK3588_BUS_IOC_REG + 0x007c, __BITS(3,0) }, 796 1.1 ryo { RK3588_BUS_IOC_REG + 0x007c, __BITS(7,4) }, 797 1.1 ryo { RK3588_BUS_IOC_REG + 0x007c, __BITS(11,8) }, 798 1.1 ryo { RK3588_BUS_IOC_REG + 0x007c, __BITS(15,12) }, 799 1.1 ryo 800 1.1 ryo /* GPIO4_A[0-7] */ 801 1.1 ryo { RK3588_BUS_IOC_REG + 0x0080, __BITS(3,0) }, 802 1.1 ryo { RK3588_BUS_IOC_REG + 0x0080, __BITS(7,4) }, 803 1.1 ryo { RK3588_BUS_IOC_REG + 0x0080, __BITS(11,8) }, 804 1.1 ryo { RK3588_BUS_IOC_REG + 0x0080, __BITS(15,12) }, 805 1.1 ryo { RK3588_BUS_IOC_REG + 0x0084, __BITS(3,0) }, 806 1.1 ryo { RK3588_BUS_IOC_REG + 0x0084, __BITS(7,4) }, 807 1.1 ryo { RK3588_BUS_IOC_REG + 0x0084, __BITS(11,8) }, 808 1.1 ryo { RK3588_BUS_IOC_REG + 0x0084, __BITS(15,12) }, 809 1.1 ryo /* GPIO4_B[0-7] */ 810 1.1 ryo { RK3588_BUS_IOC_REG + 0x0088, __BITS(3,0) }, 811 1.1 ryo { RK3588_BUS_IOC_REG + 0x0088, __BITS(7,4) }, 812 1.1 ryo { RK3588_BUS_IOC_REG + 0x0088, __BITS(11,8) }, 813 1.1 ryo { RK3588_BUS_IOC_REG + 0x0088, __BITS(15,12) }, 814 1.1 ryo { RK3588_BUS_IOC_REG + 0x008c, __BITS(3,0) }, 815 1.1 ryo { RK3588_BUS_IOC_REG + 0x008c, __BITS(7,4) }, 816 1.1 ryo { RK3588_BUS_IOC_REG + 0x008c, __BITS(11,8) }, 817 1.1 ryo { RK3588_BUS_IOC_REG + 0x008c, __BITS(15,12) }, 818 1.1 ryo /* GPIO4_C[0-7] */ 819 1.1 ryo { RK3588_BUS_IOC_REG + 0x0090, __BITS(3,0) }, 820 1.1 ryo { RK3588_BUS_IOC_REG + 0x0090, __BITS(7,4) }, 821 1.1 ryo { RK3588_BUS_IOC_REG + 0x0090, __BITS(11,8) }, 822 1.1 ryo { RK3588_BUS_IOC_REG + 0x0090, __BITS(15,12) }, 823 1.1 ryo { RK3588_BUS_IOC_REG + 0x0094, __BITS(3,0) }, 824 1.1 ryo { RK3588_BUS_IOC_REG + 0x0094, __BITS(7,4) }, 825 1.1 ryo { RK3588_BUS_IOC_REG + 0x0094, __BITS(11,8) }, 826 1.1 ryo { RK3588_BUS_IOC_REG + 0x0094, __BITS(15,12) }, 827 1.1 ryo /* GPIO4_D[0-7] */ 828 1.1 ryo { RK3588_BUS_IOC_REG + 0x0098, __BITS(3,0) }, 829 1.1 ryo { RK3588_BUS_IOC_REG + 0x0098, __BITS(7,4) }, 830 1.1 ryo { RK3588_BUS_IOC_REG + 0x0098, __BITS(11,8) }, 831 1.1 ryo { RK3588_BUS_IOC_REG + 0x0098, __BITS(15,12) }, 832 1.1 ryo { RK3588_BUS_IOC_REG + 0x009c, __BITS(3,0) }, 833 1.1 ryo { RK3588_BUS_IOC_REG + 0x009c, __BITS(7,4) }, 834 1.1 ryo { RK3588_BUS_IOC_REG + 0x009c, __BITS(11,8) }, 835 1.1 ryo { RK3588_BUS_IOC_REG + 0x009c, __BITS(15,12) } 836 1.1 ryo }; 837 1.1 ryo 838 1.1 ryo #ifdef RK3588_IOMUX_DEBUG 839 1.1 ryo static char * 840 1.1 ryo rk3588_iomux_pinname(int pin) 841 1.1 ryo { 842 1.1 ryo static char buf[16]; 843 1.1 ryo 844 1.1 ryo int bank = pin / 32; 845 1.1 ryo int group = (pin / 8) & 3; 846 1.1 ryo int idx = pin & 7; 847 1.1 ryo snprintf(buf, sizeof(buf), "%d=[%d-RK_P%c%d]", 848 1.1 ryo pin, bank, 'A' + group, idx); 849 1.1 ryo return buf; 850 1.1 ryo } 851 1.1 ryo #endif 852 1.1 ryo 853 1.1 ryo static void 854 1.1 ryo rk3588_iomux_set_bias(struct rk3588_iomux_softc *sc, int pin, int bias) 855 1.1 ryo { 856 1.1 ryo uint32_t val; 857 1.1 ryo 858 1.1 ryo switch (bias) { 859 1.1 ryo case 0: 860 1.1 ryo val = RK3588_GPIO_P_CTL_Z; 861 1.1 ryo break; 862 1.1 ryo case GPIO_PIN_PULLUP: 863 1.1 ryo val = RK3588_GPIO_P_PULLUP; 864 1.1 ryo break; 865 1.1 ryo case GPIO_PIN_PULLDOWN: 866 1.1 ryo val = RK3588_GPIO_P_PULLDOWN; 867 1.1 ryo break; 868 1.1 ryo default: 869 1.1 ryo return; 870 1.1 ryo } 871 1.1 ryo 872 1.1 ryo bus_size_t reg = rk3588_pull_regmap[pin].reg; 873 1.1 ryo uint32_t mask = rk3588_pull_regmap[pin].mask; 874 1.1 ryo val = (mask << 16) | __SHIFTIN(val, mask); 875 1.1 ryo 876 1.1 ryo syscon_write_4(sc->sc_grf, reg, val); 877 1.1 ryo 878 1.1 ryo #ifdef RK3588_IOMUX_DEBUG 879 1.1 ryo printf("%s: pin=%s bias %s (reg:%08lx -> %08x)\n", __func__, 880 1.1 ryo rk3588_iomux_pinname(pin), (bias == 0) ? "Z" : 881 1.1 ryo (bias == GPIO_PIN_PULLUP) ? "PULLUP" : "PULLDOWN", 882 1.1 ryo reg, val); 883 1.1 ryo #endif 884 1.1 ryo } 885 1.1 ryo 886 1.1 ryo static void 887 1.1 ryo rk3588_iomux_set_drive_strength(struct rk3588_iomux_softc *sc, int pin, int drv) 888 1.1 ryo { 889 1.1 ryo if (drv < 0 || drv > 15) 890 1.1 ryo return; 891 1.1 ryo 892 1.1 ryo /* Amperage (mA) corresponds directly to register values 0-15 */ 893 1.1 ryo bus_size_t reg = rk3588_drive_regmap[pin].reg; 894 1.1 ryo uint32_t mask = rk3588_drive_regmap[pin].mask; 895 1.1 ryo uint32_t val = (mask << 16) | __SHIFTIN(drv, mask); 896 1.1 ryo 897 1.1 ryo syscon_write_4(sc->sc_grf, reg, val); 898 1.1 ryo 899 1.1 ryo #ifdef RK3588_IOMUX_DEBUG 900 1.1 ryo printf("%s: pin=%s strength %d (reg:%08lx -> %08x)\n", __func__, 901 1.1 ryo rk3588_iomux_pinname(pin), drv, reg, val); 902 1.1 ryo #endif 903 1.1 ryo } 904 1.1 ryo 905 1.1 ryo static void 906 1.1 ryo rk3588_iomux_set_mux(struct rk3588_iomux_softc *sc, int pin, u_int mux) 907 1.1 ryo { 908 1.1 ryo bus_size_t reg = rk3588_iomux_regmap[pin].reg; 909 1.1 ryo bus_size_t reg0 = rk3588_iomux_regmap[pin].reg0; 910 1.1 ryo uint32_t mask = rk3588_iomux_regmap[pin].mask; 911 1.1 ryo uint32_t val; 912 1.1 ryo 913 1.1 ryo if (reg0 != 0) { 914 1.1 ryo val = (mask << 16) | __SHIFTIN(__BIT(3), mask); 915 1.1 ryo syscon_write_4(sc->sc_grf, reg0, val); 916 1.1 ryo } 917 1.1 ryo 918 1.1 ryo val = (mask << 16) | __SHIFTIN(mux, mask); 919 1.1 ryo syscon_write_4(sc->sc_grf, reg, val); 920 1.1 ryo 921 1.1 ryo #ifdef RK3588_IOMUX_DEBUG 922 1.1 ryo printf("%s: pin=%s mux %d (reg:%08lx -> %08x)\n", __func__, 923 1.1 ryo rk3588_iomux_pinname(pin), mux, reg, val); 924 1.1 ryo #endif 925 1.1 ryo } 926 1.1 ryo 927 1.1 ryo static void 928 1.1 ryo rk3588_iomux_set_direction(struct rk3588_iomux_softc *sc, int pin, int dir, 929 1.1 ryo int value) 930 1.1 ryo { 931 1.1 ryo /* XXX: notyet */ 932 1.1 ryo panic("%s:%d: pin=%d, dir=%d: not supported\n", __func__, __LINE__, pin, dir); 933 1.1 ryo 934 1.1 ryo #ifdef RK3588_IOMUX_DEBUG 935 1.1 ryo printf("%s: pin=%s dir %d, value %08x\n", __func__, 936 1.1 ryo rk3588_iomux_pinname(pin), dir, value); 937 1.1 ryo #endif 938 1.1 ryo } 939 1.1 ryo 940 1.1 ryo static int 941 1.1 ryo rk3588_iomux_config(struct rk3588_iomux_softc *sc, const int phandle, 942 1.1 ryo u_int bank, u_int idx, u_int mux) 943 1.1 ryo { 944 1.1 ryo const int pin = PIN(bank, idx); 945 1.1 ryo 946 1.1 ryo if (pin < 0 || pin >= NPINS) 947 1.1 ryo return EINVAL; 948 1.1 ryo 949 1.1 ryo int bias = fdtbus_pinctrl_parse_bias(phandle, NULL); 950 1.1 ryo if (bias != -1) 951 1.1 ryo rk3588_iomux_set_bias(sc, pin, bias); 952 1.1 ryo 953 1.1 ryo int drv = fdtbus_pinctrl_parse_drive_strength(phandle); 954 1.1 ryo if (drv != -1) 955 1.1 ryo rk3588_iomux_set_drive_strength(sc, pin, drv); 956 1.1 ryo 957 1.1 ryo int output_value; 958 1.1 ryo int dir = fdtbus_pinctrl_parse_input_output(phandle, &output_value); 959 1.1 ryo if (dir != -1) 960 1.1 ryo rk3588_iomux_set_direction(sc, pin, dir, output_value); 961 1.1 ryo 962 1.1 ryo rk3588_iomux_set_mux(sc, pin, mux); 963 1.1 ryo 964 1.1 ryo return 0; 965 1.1 ryo } 966 1.1 ryo 967 1.1 ryo static int 968 1.1 ryo rk3588_iomux_pinctrl_set_config(device_t dev, const void *data, size_t len) 969 1.1 ryo { 970 1.1 ryo struct rk3588_iomux_softc * const sc = device_private(dev); 971 1.1 ryo int pins_len = 0; 972 1.1 ryo 973 1.1 ryo if (len != 4) 974 1.1 ryo return -1; 975 1.1 ryo 976 1.1 ryo const int phandle = fdtbus_get_phandle_from_native(be32dec(data)); 977 1.1 ryo const u_int *pins = fdtbus_get_prop(phandle, "rockchip,pins", 978 1.1 ryo &pins_len); 979 1.1 ryo 980 1.1 ryo for (; pins_len >= 16; pins_len -= 16, pins += 4) { 981 1.1 ryo const u_int bank = be32toh(pins[0]); 982 1.1 ryo const u_int idx = be32toh(pins[1]); 983 1.1 ryo const u_int mux = be32toh(pins[2]); 984 1.1 ryo const int cfg = 985 1.1 ryo fdtbus_get_phandle_from_native(be32toh(pins[3])); 986 1.1 ryo 987 1.1 ryo syscon_lock(sc->sc_grf); 988 1.1 ryo rk3588_iomux_config(sc, cfg, bank, idx, mux); 989 1.1 ryo syscon_unlock(sc->sc_grf); 990 1.1 ryo } 991 1.1 ryo 992 1.1 ryo return 0; 993 1.1 ryo } 994 1.1 ryo 995 1.1 ryo static struct fdtbus_pinctrl_controller_func rk3588_iomux_pinctrl_funcs = { 996 1.1 ryo .set_config = rk3588_iomux_pinctrl_set_config 997 1.1 ryo }; 998 1.1 ryo 999 1.1 ryo static int 1000 1.1 ryo rk3588_iomux_match(device_t parent, cfdata_t cf, void *aux) 1001 1.1 ryo { 1002 1.1 ryo struct fdt_attach_args * const faa = aux; 1003 1.1 ryo return of_compatible_match(faa->faa_phandle, compat_data); 1004 1.1 ryo } 1005 1.1 ryo 1006 1.1 ryo static void 1007 1.1 ryo rk3588_iomux_attach(device_t parent, device_t self, void *aux) 1008 1.1 ryo { 1009 1.1 ryo struct rk3588_iomux_softc * const sc = device_private(self); 1010 1.1 ryo struct fdt_attach_args * const faa = aux; 1011 1.1 ryo const int phandle = faa->faa_phandle; 1012 1.1 ryo 1013 1.1 ryo sc->sc_dev = self; 1014 1.1 ryo sc->sc_grf = fdtbus_syscon_acquire(phandle, "rockchip,grf"); 1015 1.1 ryo if (sc->sc_grf == NULL) { 1016 1.1 ryo aprint_error(": couldn't acquire grf syscon\n"); 1017 1.1 ryo return; 1018 1.1 ryo } 1019 1.1 ryo 1020 1.1 ryo aprint_naive("\n"); 1021 1.1 ryo aprint_normal(": RK3588 IOMUX control\n"); 1022 1.1 ryo 1023 1.1 ryo for (int child = OF_child(phandle); child; child = OF_peer(child)) { 1024 1.1 ryo for (int sub = OF_child(child); sub; sub = OF_peer(sub)) { 1025 1.1 ryo if (!of_hasprop(sub, "rockchip,pins")) 1026 1.1 ryo continue; 1027 1.1 ryo fdtbus_register_pinctrl_config(self, sub, 1028 1.1 ryo &rk3588_iomux_pinctrl_funcs); 1029 1.1 ryo } 1030 1.1 ryo } 1031 1.1 ryo 1032 1.1 ryo for (int child = OF_child(phandle); child; child = OF_peer(child)) { 1033 1.1 ryo struct fdt_attach_args cfaa = *faa; 1034 1.1 ryo cfaa.faa_phandle = child; 1035 1.1 ryo cfaa.faa_name = fdtbus_get_string(child, "name"); 1036 1.1 ryo cfaa.faa_quiet = false; 1037 1.1 ryo 1038 1.1 ryo config_found(self, &cfaa, NULL, CFARGS_NONE); 1039 1.1 ryo } 1040 1.1 ryo } 1041