Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'sunxi-clk-for-3.12' of https://github.com/mripard/linux into clk-next-sunxi

Allwinner clock changes for 3.12

These patches mostly do some cleanup to introduce the basic gated clocks for
the Allwinner A10s, A20 and A31 SoCs.

Conflicts:
drivers/clk/sunxi/clk-sunxi.c

+462 -38
+12
Documentation/devicetree/bindings/clock/sunxi.txt
··· 8 8 - compatible : shall be one of the following: 9 9 "allwinner,sun4i-osc-clk" - for a gatable oscillator 10 10 "allwinner,sun4i-pll1-clk" - for the main PLL clock 11 + "allwinner,sun6i-a31-pll1-clk" - for the main PLL clock on A31 11 12 "allwinner,sun4i-cpu-clk" - for the CPU multiplexer clock 12 13 "allwinner,sun4i-axi-clk" - for the AXI clock 13 14 "allwinner,sun4i-axi-gates-clk" - for the AXI gates 14 15 "allwinner,sun4i-ahb-clk" - for the AHB clock 15 16 "allwinner,sun4i-ahb-gates-clk" - for the AHB gates on A10 16 17 "allwinner,sun5i-a13-ahb-gates-clk" - for the AHB gates on A13 18 + "allwinner,sun5i-a10s-ahb-gates-clk" - for the AHB gates on A10s 19 + "allwinner,sun7i-a20-ahb-gates-clk" - for the AHB gates on A20 20 + "allwinner,sun6i-a31-ahb1-mux-clk" - for the AHB1 multiplexer on A31 21 + "allwinner,sun6i-a31-ahb1-gates-clk" - for the AHB1 gates on A31 17 22 "allwinner,sun4i-apb0-clk" - for the APB0 clock 18 23 "allwinner,sun4i-apb0-gates-clk" - for the APB0 gates on A10 19 24 "allwinner,sun5i-a13-apb0-gates-clk" - for the APB0 gates on A13 25 + "allwinner,sun5i-a10s-apb0-gates-clk" - for the APB0 gates on A10s 26 + "allwinner,sun7i-a20-apb0-gates-clk" - for the APB0 gates on A20 20 27 "allwinner,sun4i-apb1-clk" - for the APB1 clock 21 28 "allwinner,sun4i-apb1-mux-clk" - for the APB1 clock muxing 22 29 "allwinner,sun4i-apb1-gates-clk" - for the APB1 gates on A10 23 30 "allwinner,sun5i-a13-apb1-gates-clk" - for the APB1 gates on A13 31 + "allwinner,sun5i-a10s-apb1-gates-clk" - for the APB1 gates on A10s 32 + "allwinner,sun6i-a31-apb1-gates-clk" - for the APB1 gates on A31 33 + "allwinner,sun7i-a20-apb1-gates-clk" - for the APB1 gates on A20 34 + "allwinner,sun6i-a31-apb2-div-clk" - for the APB2 gates on A31 35 + "allwinner,sun6i-a31-apb2-gates-clk" - for the APB2 gates on A31 24 36 25 37 Required properties for all clocks: 26 38 - reg : shall be the control register address for the clock.
+75
Documentation/devicetree/bindings/clock/sunxi/sun5i-a10s-gates.txt
··· 1 + Gate clock outputs 2 + ------------------ 3 + 4 + * AXI gates ("allwinner,sun4i-axi-gates-clk") 5 + 6 + DRAM 0 7 + 8 + * AHB gates ("allwinner,sun5i-a10s-ahb-gates-clk") 9 + 10 + USB0 0 11 + EHCI0 1 12 + OHCI0 2 13 + 14 + SS 5 15 + DMA 6 16 + BIST 7 17 + MMC0 8 18 + MMC1 9 19 + MMC2 10 20 + 21 + NAND 13 22 + SDRAM 14 23 + 24 + EMAC 17 25 + TS 18 26 + 27 + SPI0 20 28 + SPI1 21 29 + SPI2 22 30 + 31 + GPS 26 32 + 33 + HSTIMER 28 34 + 35 + VE 32 36 + 37 + TVE 34 38 + 39 + LCD 36 40 + 41 + CSI 40 42 + 43 + HDMI 43 44 + DE_BE 44 45 + 46 + DE_FE 46 47 + 48 + IEP 51 49 + MALI400 52 50 + 51 + * APB0 gates ("allwinner,sun5i-a10s-apb0-gates-clk") 52 + 53 + CODEC 0 54 + 55 + IIS 3 56 + 57 + PIO 5 58 + IR 6 59 + 60 + KEYPAD 10 61 + 62 + * APB1 gates ("allwinner,sun5i-a10s-apb1-gates-clk") 63 + 64 + I2C0 0 65 + I2C1 1 66 + I2C2 2 67 + 68 + UART0 16 69 + UART1 17 70 + UART2 18 71 + UART3 19 72 + 73 + Notation: 74 + [*]: The datasheet didn't mention these, but they are present on AW code 75 + [**]: The datasheet had this marked as "NC" but they are used on AW code
+83
Documentation/devicetree/bindings/clock/sunxi/sun6i-a31-gates.txt
··· 1 + Gate clock outputs 2 + ------------------ 3 + 4 + * AHB1 gates ("allwinner,sun6i-a31-ahb1-gates-clk") 5 + 6 + MIPI DSI 1 7 + 8 + SS 5 9 + DMA 6 10 + 11 + MMC0 8 12 + MMC1 9 13 + MMC2 10 14 + MMC3 11 15 + 16 + NAND1 12 17 + NAND0 13 18 + SDRAM 14 19 + 20 + GMAC 17 21 + TS 18 22 + HSTIMER 19 23 + SPI0 20 24 + SPI1 21 25 + SPI2 22 26 + SPI3 23 27 + USB_OTG 24 28 + 29 + EHCI0 26 30 + EHCI1 27 31 + 32 + OHCI0 29 33 + OHCI1 30 34 + OHCI2 31 35 + VE 32 36 + 37 + LCD0 36 38 + LCD1 37 39 + 40 + CSI 40 41 + 42 + HDMI 43 43 + DE_BE0 44 44 + DE_BE1 45 45 + DE_FE1 46 46 + DE_FE1 47 47 + 48 + MP 50 49 + 50 + GPU 52 51 + 52 + DEU0 55 53 + DEU1 56 54 + DRC0 57 55 + DRC1 58 56 + 57 + * APB1 gates ("allwinner,sun6i-a31-apb1-gates-clk") 58 + 59 + CODEC 0 60 + 61 + DIGITAL MIC 4 62 + PIO 5 63 + 64 + DAUDIO0 12 65 + DAUDIO1 13 66 + 67 + * APB2 gates ("allwinner,sun6i-a31-apb2-gates-clk") 68 + 69 + I2C0 0 70 + I2C1 1 71 + I2C2 2 72 + I2C3 3 73 + 74 + UART0 16 75 + UART1 17 76 + UART2 18 77 + UART3 19 78 + UART4 20 79 + UART5 21 80 + 81 + Notation: 82 + [*]: The datasheet didn't mention these, but they are present on AW code 83 + [**]: The datasheet had this marked as "NC" but they are used on AW code
+98
Documentation/devicetree/bindings/clock/sunxi/sun7i-a20-gates.txt
··· 1 + Gate clock outputs 2 + ------------------ 3 + 4 + * AXI gates ("allwinner,sun4i-axi-gates-clk") 5 + 6 + DRAM 0 7 + 8 + * AHB gates ("allwinner,sun7i-a20-ahb-gates-clk") 9 + 10 + USB0 0 11 + EHCI0 1 12 + OHCI0 2 13 + EHCI1 3 14 + OHCI1 4 15 + SS 5 16 + DMA 6 17 + BIST 7 18 + MMC0 8 19 + MMC1 9 20 + MMC2 10 21 + MMC3 11 22 + MS 12 23 + NAND 13 24 + SDRAM 14 25 + 26 + ACE 16 27 + EMAC 17 28 + TS 18 29 + 30 + SPI0 20 31 + SPI1 21 32 + SPI2 22 33 + SPI3 23 34 + 35 + SATA 25 36 + 37 + HSTIMER 28 38 + 39 + VE 32 40 + TVD 33 41 + TVE0 34 42 + TVE1 35 43 + LCD0 36 44 + LCD1 37 45 + 46 + CSI0 40 47 + CSI1 41 48 + 49 + HDMI1 42 50 + HDMI0 43 51 + DE_BE0 44 52 + DE_BE1 45 53 + DE_FE1 46 54 + DE_FE1 47 55 + 56 + GMAC 49 57 + MP 50 58 + 59 + MALI400 52 60 + 61 + * APB0 gates ("allwinner,sun7i-a20-apb0-gates-clk") 62 + 63 + CODEC 0 64 + SPDIF 1 65 + AC97 2 66 + IIS0 3 67 + IIS1 4 68 + PIO 5 69 + IR0 6 70 + IR1 7 71 + IIS2 8 72 + 73 + KEYPAD 10 74 + 75 + * APB1 gates ("allwinner,sun7i-a20-apb1-gates-clk") 76 + 77 + I2C0 0 78 + I2C1 1 79 + I2C2 2 80 + I2C3 3 81 + CAN 4 82 + SCR 5 83 + PS20 6 84 + PS21 7 85 + 86 + I2C4 15 87 + UART0 16 88 + UART1 17 89 + UART2 18 90 + UART3 19 91 + UART4 20 92 + UART5 21 93 + UART6 22 94 + UART7 23 95 + 96 + Notation: 97 + [*]: The datasheet didn't mention these, but they are present on AW code 98 + [**]: The datasheet had this marked as "NC" but they are used on AW code
+194 -38
drivers/clk/sunxi/clk-sunxi.c
··· 25 25 static DEFINE_SPINLOCK(clk_lock); 26 26 27 27 /** 28 - * sunxi_osc_clk_setup() - Setup function for gatable oscillator 28 + * sun4i_osc_clk_setup() - Setup function for gatable oscillator 29 29 */ 30 30 31 31 #define SUNXI_OSC24M_GATE 0 32 32 33 - static void __init sunxi_osc_clk_setup(struct device_node *node) 33 + static void __init sun4i_osc_clk_setup(struct device_node *node) 34 34 { 35 35 struct clk *clk; 36 36 struct clk_fixed_rate *fixed; ··· 69 69 clk_register_clkdev(clk, clk_name, NULL); 70 70 } 71 71 } 72 - CLK_OF_DECLARE(sunxi_osc, "allwinner,sun4i-osc-clk", sunxi_osc_clk_setup); 72 + CLK_OF_DECLARE(sun4i_osc, "allwinner,sun4i-osc-clk", sun4i_osc_clk_setup); 73 73 74 74 75 75 76 76 /** 77 - * sunxi_get_pll1_factors() - calculates n, k, m, p factors for PLL1 77 + * sun4i_get_pll1_factors() - calculates n, k, m, p factors for PLL1 78 78 * PLL1 rate is calculated as follows 79 79 * rate = (parent_rate * n * (k + 1) >> p) / (m + 1); 80 80 * parent_rate is always 24Mhz 81 81 */ 82 82 83 - static void sunxi_get_pll1_factors(u32 *freq, u32 parent_rate, 83 + static void sun4i_get_pll1_factors(u32 *freq, u32 parent_rate, 84 84 u8 *n, u8 *k, u8 *m, u8 *p) 85 85 { 86 86 u8 div; ··· 125 125 *n = div / 4; 126 126 } 127 127 128 + /** 129 + * sun6i_a31_get_pll1_factors() - calculates n, k and m factors for PLL1 130 + * PLL1 rate is calculated as follows 131 + * rate = parent_rate * (n + 1) * (k + 1) / (m + 1); 132 + * parent_rate should always be 24MHz 133 + */ 134 + static void sun6i_a31_get_pll1_factors(u32 *freq, u32 parent_rate, 135 + u8 *n, u8 *k, u8 *m, u8 *p) 136 + { 137 + /* 138 + * We can operate only on MHz, this will make our life easier 139 + * later. 140 + */ 141 + u32 freq_mhz = *freq / 1000000; 142 + u32 parent_freq_mhz = parent_rate / 1000000; 128 143 144 + /* 145 + * Round down the frequency to the closest multiple of either 146 + * 6 or 16 147 + */ 148 + u32 round_freq_6 = round_down(freq_mhz, 6); 149 + u32 round_freq_16 = round_down(freq_mhz, 16); 150 + 151 + if (round_freq_6 > round_freq_16) 152 + freq_mhz = round_freq_6; 153 + else 154 + freq_mhz = round_freq_16; 155 + 156 + *freq = freq_mhz * 1000000; 157 + 158 + /* 159 + * If the factors pointer are null, we were just called to 160 + * round down the frequency. 161 + * Exit. 162 + */ 163 + if (n == NULL) 164 + return; 165 + 166 + /* If the frequency is a multiple of 32 MHz, k is always 3 */ 167 + if (!(freq_mhz % 32)) 168 + *k = 3; 169 + /* If the frequency is a multiple of 9 MHz, k is always 2 */ 170 + else if (!(freq_mhz % 9)) 171 + *k = 2; 172 + /* If the frequency is a multiple of 8 MHz, k is always 1 */ 173 + else if (!(freq_mhz % 8)) 174 + *k = 1; 175 + /* Otherwise, we don't use the k factor */ 176 + else 177 + *k = 0; 178 + 179 + /* 180 + * If the frequency is a multiple of 2 but not a multiple of 181 + * 3, m is 3. This is the first time we use 6 here, yet we 182 + * will use it on several other places. 183 + * We use this number because it's the lowest frequency we can 184 + * generate (with n = 0, k = 0, m = 3), so every other frequency 185 + * somehow relates to this frequency. 186 + */ 187 + if ((freq_mhz % 6) == 2 || (freq_mhz % 6) == 4) 188 + *m = 2; 189 + /* 190 + * If the frequency is a multiple of 6MHz, but the factor is 191 + * odd, m will be 3 192 + */ 193 + else if ((freq_mhz / 6) & 1) 194 + *m = 3; 195 + /* Otherwise, we end up with m = 1 */ 196 + else 197 + *m = 1; 198 + 199 + /* Calculate n thanks to the above factors we already got */ 200 + *n = freq_mhz * (*m + 1) / ((*k + 1) * parent_freq_mhz) - 1; 201 + 202 + /* 203 + * If n end up being outbound, and that we can still decrease 204 + * m, do it. 205 + */ 206 + if ((*n + 1) > 31 && (*m + 1) > 1) { 207 + *n = (*n + 1) / 2 - 1; 208 + *m = (*m + 1) / 2 - 1; 209 + } 210 + } 129 211 130 212 /** 131 - * sunxi_get_apb1_factors() - calculates m, p factors for APB1 213 + * sun4i_get_apb1_factors() - calculates m, p factors for APB1 132 214 * APB1 rate is calculated as follows 133 215 * rate = (parent_rate >> p) / (m + 1); 134 216 */ 135 217 136 - static void sunxi_get_apb1_factors(u32 *freq, u32 parent_rate, 218 + static void sun4i_get_apb1_factors(u32 *freq, u32 parent_rate, 137 219 u8 *n, u8 *k, u8 *m, u8 *p) 138 220 { 139 221 u8 calcm, calcp; ··· 261 179 void (*getter) (u32 *rate, u32 parent_rate, u8 *n, u8 *k, u8 *m, u8 *p); 262 180 }; 263 181 264 - static struct clk_factors_config pll1_config = { 182 + static struct clk_factors_config sun4i_pll1_config = { 265 183 .nshift = 8, 266 184 .nwidth = 5, 267 185 .kshift = 4, ··· 272 190 .pwidth = 2, 273 191 }; 274 192 275 - static struct clk_factors_config apb1_config = { 193 + static struct clk_factors_config sun6i_a31_pll1_config = { 194 + .nshift = 8, 195 + .nwidth = 5, 196 + .kshift = 4, 197 + .kwidth = 2, 198 + .mshift = 0, 199 + .mwidth = 2, 200 + }; 201 + 202 + static struct clk_factors_config sun4i_apb1_config = { 276 203 .mshift = 0, 277 204 .mwidth = 5, 278 205 .pshift = 16, 279 206 .pwidth = 2, 280 207 }; 281 208 282 - static const __initconst struct factors_data pll1_data = { 283 - .table = &pll1_config, 284 - .getter = sunxi_get_pll1_factors, 209 + static const __initconst struct factors_data sun4i_pll1_data = { 210 + .table = &sun4i_pll1_config, 211 + .getter = sun4i_get_pll1_factors, 285 212 }; 286 213 287 - static const __initconst struct factors_data apb1_data = { 288 - .table = &apb1_config, 289 - .getter = sunxi_get_apb1_factors, 214 + static const __initconst struct factors_data sun6i_a31_pll1_data = { 215 + .table = &sun6i_a31_pll1_config, 216 + .getter = sun6i_a31_get_pll1_factors, 217 + }; 218 + 219 + static const __initconst struct factors_data sun4i_apb1_data = { 220 + .table = &sun4i_apb1_config, 221 + .getter = sun4i_get_apb1_factors, 290 222 }; 291 223 292 224 static void __init sunxi_factors_clk_setup(struct device_node *node, ··· 336 240 u8 shift; 337 241 }; 338 242 339 - static const __initconst struct mux_data cpu_mux_data = { 243 + static const __initconst struct mux_data sun4i_cpu_mux_data = { 340 244 .shift = 16, 341 245 }; 342 246 343 - static const __initconst struct mux_data apb1_mux_data = { 247 + static const __initconst struct mux_data sun6i_a31_ahb1_mux_data = { 248 + .shift = 12, 249 + }; 250 + 251 + static const __initconst struct mux_data sun4i_apb1_mux_data = { 344 252 .shift = 24, 345 253 }; 346 254 ··· 379 279 * sunxi_divider_clk_setup() - Setup function for simple divider clocks 380 280 */ 381 281 382 - #define SUNXI_DIVISOR_WIDTH 2 383 - 384 282 struct div_data { 385 - u8 shift; 386 - u8 pow; 283 + u8 shift; 284 + u8 pow; 285 + u8 width; 387 286 }; 388 287 389 - static const __initconst struct div_data axi_data = { 390 - .shift = 0, 391 - .pow = 0, 288 + static const __initconst struct div_data sun4i_axi_data = { 289 + .shift = 0, 290 + .pow = 0, 291 + .width = 2, 392 292 }; 393 293 394 - static const __initconst struct div_data ahb_data = { 395 - .shift = 4, 396 - .pow = 1, 294 + static const __initconst struct div_data sun4i_ahb_data = { 295 + .shift = 4, 296 + .pow = 1, 297 + .width = 2, 397 298 }; 398 299 399 - static const __initconst struct div_data apb0_data = { 400 - .shift = 8, 401 - .pow = 1, 300 + static const __initconst struct div_data sun4i_apb0_data = { 301 + .shift = 8, 302 + .pow = 1, 303 + .width = 2, 304 + }; 305 + 306 + static const __initconst struct div_data sun6i_a31_apb2_div_data = { 307 + .shift = 0, 308 + .pow = 0, 309 + .width = 4, 402 310 }; 403 311 404 312 static void __init sunxi_divider_clk_setup(struct device_node *node, ··· 422 314 clk_parent = of_clk_get_parent_name(node, 0); 423 315 424 316 clk = clk_register_divider(NULL, clk_name, clk_parent, 0, 425 - reg, data->shift, SUNXI_DIVISOR_WIDTH, 317 + reg, data->shift, data->width, 426 318 data->pow ? CLK_DIVIDER_POWER_OF_TWO : 0, 427 319 &clk_lock); 428 320 if (clk) { ··· 451 343 .mask = {0x7F77FFF, 0x14FB3F}, 452 344 }; 453 345 346 + static const __initconst struct gates_data sun5i_a10s_ahb_gates_data = { 347 + .mask = {0x147667e7, 0x185915}, 348 + }; 349 + 454 350 static const __initconst struct gates_data sun5i_a13_ahb_gates_data = { 455 351 .mask = {0x107067e7, 0x185111}, 352 + }; 353 + 354 + static const __initconst struct gates_data sun6i_a31_ahb1_gates_data = { 355 + .mask = {0xEDFE7F62, 0x794F931}, 356 + }; 357 + 358 + static const __initconst struct gates_data sun7i_a20_ahb_gates_data = { 359 + .mask = { 0x12f77fff, 0x16ff3f }, 456 360 }; 457 361 458 362 static const __initconst struct gates_data sun4i_apb0_gates_data = { 459 363 .mask = {0x4EF}, 460 364 }; 461 365 366 + static const __initconst struct gates_data sun5i_a10s_apb0_gates_data = { 367 + .mask = {0x469}, 368 + }; 369 + 462 370 static const __initconst struct gates_data sun5i_a13_apb0_gates_data = { 463 371 .mask = {0x61}, 372 + }; 373 + 374 + static const __initconst struct gates_data sun7i_a20_apb0_gates_data = { 375 + .mask = { 0x4ff }, 464 376 }; 465 377 466 378 static const __initconst struct gates_data sun4i_apb1_gates_data = { 467 379 .mask = {0xFF00F7}, 468 380 }; 469 381 382 + static const __initconst struct gates_data sun5i_a10s_apb1_gates_data = { 383 + .mask = {0xf0007}, 384 + }; 385 + 470 386 static const __initconst struct gates_data sun5i_a13_apb1_gates_data = { 471 387 .mask = {0xa0007}, 388 + }; 389 + 390 + static const __initconst struct gates_data sun6i_a31_apb1_gates_data = { 391 + .mask = {0x3031}, 392 + }; 393 + 394 + static const __initconst struct gates_data sun6i_a31_apb2_gates_data = { 395 + .mask = {0x3F000F}, 396 + }; 397 + 398 + static const __initconst struct gates_data sun7i_a20_apb1_gates_data = { 399 + .mask = { 0xff80ff }, 472 400 }; 473 401 474 402 static void __init sunxi_gates_clk_setup(struct device_node *node, ··· 558 414 559 415 /* Matches for factors clocks */ 560 416 static const __initconst struct of_device_id clk_factors_match[] = { 561 - {.compatible = "allwinner,sun4i-pll1-clk", .data = &pll1_data,}, 562 - {.compatible = "allwinner,sun4i-apb1-clk", .data = &apb1_data,}, 417 + {.compatible = "allwinner,sun4i-pll1-clk", .data = &sun4i_pll1_data,}, 418 + {.compatible = "allwinner,sun6i-a31-pll1-clk", .data = &sun6i_a31_pll1_data,}, 419 + {.compatible = "allwinner,sun4i-apb1-clk", .data = &sun4i_apb1_data,}, 563 420 {} 564 421 }; 565 422 566 423 /* Matches for divider clocks */ 567 424 static const __initconst struct of_device_id clk_div_match[] = { 568 - {.compatible = "allwinner,sun4i-axi-clk", .data = &axi_data,}, 569 - {.compatible = "allwinner,sun4i-ahb-clk", .data = &ahb_data,}, 570 - {.compatible = "allwinner,sun4i-apb0-clk", .data = &apb0_data,}, 425 + {.compatible = "allwinner,sun4i-axi-clk", .data = &sun4i_axi_data,}, 426 + {.compatible = "allwinner,sun4i-ahb-clk", .data = &sun4i_ahb_data,}, 427 + {.compatible = "allwinner,sun4i-apb0-clk", .data = &sun4i_apb0_data,}, 428 + {.compatible = "allwinner,sun6i-a31-apb2-div-clk", .data = &sun6i_a31_apb2_div_data,}, 571 429 {} 572 430 }; 573 431 574 432 /* Matches for mux clocks */ 575 433 static const __initconst struct of_device_id clk_mux_match[] = { 576 - {.compatible = "allwinner,sun4i-cpu-clk", .data = &cpu_mux_data,}, 577 - {.compatible = "allwinner,sun4i-apb1-mux-clk", .data = &apb1_mux_data,}, 434 + {.compatible = "allwinner,sun4i-cpu-clk", .data = &sun4i_cpu_mux_data,}, 435 + {.compatible = "allwinner,sun4i-apb1-mux-clk", .data = &sun4i_apb1_mux_data,}, 436 + {.compatible = "allwinner,sun6i-a31-ahb1-mux-clk", .data = &sun6i_a31_ahb1_mux_data,}, 578 437 {} 579 438 }; 580 439 ··· 585 438 static const __initconst struct of_device_id clk_gates_match[] = { 586 439 {.compatible = "allwinner,sun4i-axi-gates-clk", .data = &sun4i_axi_gates_data,}, 587 440 {.compatible = "allwinner,sun4i-ahb-gates-clk", .data = &sun4i_ahb_gates_data,}, 441 + {.compatible = "allwinner,sun5i-a10s-ahb-gates-clk", .data = &sun5i_a10s_ahb_gates_data,}, 588 442 {.compatible = "allwinner,sun5i-a13-ahb-gates-clk", .data = &sun5i_a13_ahb_gates_data,}, 443 + {.compatible = "allwinner,sun6i-a31-ahb1-gates-clk", .data = &sun6i_a31_ahb1_gates_data,}, 444 + {.compatible = "allwinner,sun7i-a20-ahb-gates-clk", .data = &sun7i_a20_ahb_gates_data,}, 589 445 {.compatible = "allwinner,sun4i-apb0-gates-clk", .data = &sun4i_apb0_gates_data,}, 446 + {.compatible = "allwinner,sun5i-a10s-apb0-gates-clk", .data = &sun5i_a10s_apb0_gates_data,}, 590 447 {.compatible = "allwinner,sun5i-a13-apb0-gates-clk", .data = &sun5i_a13_apb0_gates_data,}, 448 + {.compatible = "allwinner,sun7i-a20-apb0-gates-clk", .data = &sun7i_a20_apb0_gates_data,}, 591 449 {.compatible = "allwinner,sun4i-apb1-gates-clk", .data = &sun4i_apb1_gates_data,}, 450 + {.compatible = "allwinner,sun5i-a10s-apb1-gates-clk", .data = &sun5i_a10s_apb1_gates_data,}, 592 451 {.compatible = "allwinner,sun5i-a13-apb1-gates-clk", .data = &sun5i_a13_apb1_gates_data,}, 452 + {.compatible = "allwinner,sun6i-a31-apb1-gates-clk", .data = &sun6i_a31_apb1_gates_data,}, 453 + {.compatible = "allwinner,sun7i-a20-apb1-gates-clk", .data = &sun7i_a20_apb1_gates_data,}, 454 + {.compatible = "allwinner,sun6i-a31-apb2-gates-clk", .data = &sun6i_a31_apb2_gates_data,}, 593 455 {} 594 456 }; 595 457