1af873fceSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2b5c23aa4SPaul Cercueil /*
3b5c23aa4SPaul Cercueil * Ingenic SoCs pinctrl driver
4b5c23aa4SPaul Cercueil *
5b5c23aa4SPaul Cercueil * Copyright (c) 2017 Paul Cercueil <paul@crapouillou.net>
64da56f9cSPaul Boddie * Copyright (c) 2017, 2019, 2020, 2023 Paul Boddie <paul@boddie.org.uk>
7424f3969S周琰杰 (Zhou Yanjie) * Copyright (c) 2019, 2020 周琰杰 (Zhou Yanjie) <zhouyanjie@wanyeetech.com>
8b5c23aa4SPaul Cercueil */
9b5c23aa4SPaul Cercueil
10b5c23aa4SPaul Cercueil #include <linux/compiler.h>
1128d6eeb4SLinus Walleij #include <linux/gpio/driver.h>
12b5c23aa4SPaul Cercueil #include <linux/interrupt.h>
13b5c23aa4SPaul Cercueil #include <linux/io.h>
140ab1438bSMasahiro Yamada #include <linux/kernel.h>
158c943137SAndy Shevchenko #include <linux/mod_devicetable.h>
168c943137SAndy Shevchenko #include <linux/of.h>
17b5c23aa4SPaul Cercueil #include <linux/platform_device.h>
188c943137SAndy Shevchenko #include <linux/property.h>
19b5c23aa4SPaul Cercueil #include <linux/regmap.h>
2071f5e7b3SAidan MacDonald #include <linux/seq_file.h>
21b5c23aa4SPaul Cercueil #include <linux/slab.h>
22b5c23aa4SPaul Cercueil
239b69b7d7SAndy Shevchenko #include <linux/pinctrl/consumer.h>
249b69b7d7SAndy Shevchenko #include <linux/pinctrl/pinconf-generic.h>
259b69b7d7SAndy Shevchenko #include <linux/pinctrl/pinconf.h>
269b69b7d7SAndy Shevchenko #include <linux/pinctrl/pinctrl.h>
279b69b7d7SAndy Shevchenko #include <linux/pinctrl/pinmux.h>
289b69b7d7SAndy Shevchenko
29b5c23aa4SPaul Cercueil #include "core.h"
30b5c23aa4SPaul Cercueil #include "pinconf.h"
31b5c23aa4SPaul Cercueil #include "pinmux.h"
32b5c23aa4SPaul Cercueil
33e72394e2SPaul Cercueil #define GPIO_PIN 0x00
34e72394e2SPaul Cercueil #define GPIO_MSK 0x20
35e72394e2SPaul Cercueil
36424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_DATA 0x00
37424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_GPDIR 0x04
38424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_GPPUR 0x0c
39424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_GPALR 0x10
40424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_GPAUR 0x14
41424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_GPIDLR 0x18
42424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_GPIDUR 0x1c
43424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_GPIER 0x20
44424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_GPIMR 0x24
45424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_GPIO_GPFR 0x28
46424f3969S周琰杰 (Zhou Yanjie)
47b5c23aa4SPaul Cercueil #define JZ4740_GPIO_DATA 0x10
48b5c23aa4SPaul Cercueil #define JZ4740_GPIO_PULL_DIS 0x30
49b5c23aa4SPaul Cercueil #define JZ4740_GPIO_FUNC 0x40
50b5c23aa4SPaul Cercueil #define JZ4740_GPIO_SELECT 0x50
51b5c23aa4SPaul Cercueil #define JZ4740_GPIO_DIR 0x60
52b5c23aa4SPaul Cercueil #define JZ4740_GPIO_TRIG 0x70
53b5c23aa4SPaul Cercueil #define JZ4740_GPIO_FLAG 0x80
54b5c23aa4SPaul Cercueil
55b4aa4876SPaul Cercueil #define JZ4770_GPIO_INT 0x10
56b4aa4876SPaul Cercueil #define JZ4770_GPIO_PAT1 0x30
57b4aa4876SPaul Cercueil #define JZ4770_GPIO_PAT0 0x40
58b4aa4876SPaul Cercueil #define JZ4770_GPIO_FLAG 0x50
59b4aa4876SPaul Cercueil #define JZ4770_GPIO_PEN 0x70
60b5c23aa4SPaul Cercueil
614da56f9cSPaul Boddie #define X1600_GPIO_PU 0x80
624da56f9cSPaul Boddie
63d7da2a1eS周琰杰 (Zhou Yanjie) #define X1830_GPIO_PEL 0x110
64d7da2a1eS周琰杰 (Zhou Yanjie) #define X1830_GPIO_PEH 0x120
65943e0da1S周琰杰 (Zhou Yanjie) #define X1830_GPIO_SR 0x150
66943e0da1S周琰杰 (Zhou Yanjie) #define X1830_GPIO_SMT 0x160
67943e0da1S周琰杰 (Zhou Yanjie)
68943e0da1S周琰杰 (Zhou Yanjie) #define X2000_GPIO_EDG 0x70
69943e0da1S周琰杰 (Zhou Yanjie) #define X2000_GPIO_PEPU 0x80
70943e0da1S周琰杰 (Zhou Yanjie) #define X2000_GPIO_PEPD 0x90
71943e0da1S周琰杰 (Zhou Yanjie) #define X2000_GPIO_SR 0xd0
72943e0da1S周琰杰 (Zhou Yanjie) #define X2000_GPIO_SMT 0xe0
73fe1ad5eeSZhou Yanjie
74b5c23aa4SPaul Cercueil #define REG_SET(x) ((x) + 0x4)
75b5c23aa4SPaul Cercueil #define REG_CLEAR(x) ((x) + 0x8)
76b5c23aa4SPaul Cercueil
77d7da2a1eS周琰杰 (Zhou Yanjie) #define REG_PZ_BASE(x) ((x) * 7)
78d7da2a1eS周琰杰 (Zhou Yanjie) #define REG_PZ_GID2LD(x) ((x) * 7 + 0xf0)
79d7da2a1eS周琰杰 (Zhou Yanjie)
80d7da2a1eS周琰杰 (Zhou Yanjie) #define GPIO_PULL_DIS 0
81d7da2a1eS周琰杰 (Zhou Yanjie) #define GPIO_PULL_UP 1
82d7da2a1eS周琰杰 (Zhou Yanjie) #define GPIO_PULL_DOWN 2
83d7da2a1eS周琰杰 (Zhou Yanjie)
84b5c23aa4SPaul Cercueil #define PINS_PER_GPIO_CHIP 32
85424f3969S周琰杰 (Zhou Yanjie) #define JZ4730_PINS_PER_PAIRED_REG 16
86b5c23aa4SPaul Cercueil
87b0f24e02SAndy Shevchenko #define INGENIC_PIN_GROUP_FUNCS(_name_, id, funcs) \
88863becffS周琰杰 (Zhou Yanjie) { \
8910ce59c6SAndy Shevchenko .grp = PINCTRL_PINGROUP(_name_, id##_pins, ARRAY_SIZE(id##_pins)), \
90b0f24e02SAndy Shevchenko .data = funcs, \
91863becffS周琰杰 (Zhou Yanjie) }
92863becffS周琰杰 (Zhou Yanjie)
93b0f24e02SAndy Shevchenko #define INGENIC_PIN_GROUP(_name_, id, func) \
94b0f24e02SAndy Shevchenko { \
9510ce59c6SAndy Shevchenko .grp = PINCTRL_PINGROUP(_name_, id##_pins, ARRAY_SIZE(id##_pins)), \
96b0f24e02SAndy Shevchenko .data = (void *)func, \
97b0f24e02SAndy Shevchenko }
98863becffS周琰杰 (Zhou Yanjie)
997f2a2af0SAndy Shevchenko #define INGENIC_PIN_FUNCTION(_name_, id) \
1007f2a2af0SAndy Shevchenko { \
101be9e92afSAndy Shevchenko .func = PINCTRL_PINFUNCTION(_name_, id##_groups, ARRAY_SIZE(id##_groups)), \
1027f2a2af0SAndy Shevchenko .data = NULL, \
1037f2a2af0SAndy Shevchenko }
1047f2a2af0SAndy Shevchenko
105b5c23aa4SPaul Cercueil enum jz_version {
106424f3969S周琰杰 (Zhou Yanjie) ID_JZ4730,
107b5c23aa4SPaul Cercueil ID_JZ4740,
108f2a96765SPaul Cercueil ID_JZ4725B,
109215c81a3S周琰杰 (Zhou Yanjie) ID_JZ4750,
110b582b5a4S周琰杰 (Zhou Yanjie) ID_JZ4755,
1110257595aSZhou Yanjie ID_JZ4760,
112b5c23aa4SPaul Cercueil ID_JZ4770,
1130c990740S周琰杰 (Zhou Yanjie) ID_JZ4775,
114b5c23aa4SPaul Cercueil ID_JZ4780,
115fe1ad5eeSZhou Yanjie ID_X1000,
1165d21595bSZhou Yanjie ID_X1500,
1174da56f9cSPaul Boddie ID_X1600,
118d7da2a1eS周琰杰 (Zhou Yanjie) ID_X1830,
119943e0da1S周琰杰 (Zhou Yanjie) ID_X2000,
1202a18211bS周琰杰 (Zhou Yanjie) ID_X2100,
121b5c23aa4SPaul Cercueil };
122b5c23aa4SPaul Cercueil
123b5c23aa4SPaul Cercueil struct ingenic_chip_info {
124b5c23aa4SPaul Cercueil unsigned int num_chips;
125f742e5ebS周琰杰 (Zhou Yanjie) unsigned int reg_offset;
126baf15647SPaul Cercueil enum jz_version version;
127b5c23aa4SPaul Cercueil
128b5c23aa4SPaul Cercueil const struct group_desc *groups;
129b5c23aa4SPaul Cercueil unsigned int num_groups;
130b5c23aa4SPaul Cercueil
131b5c23aa4SPaul Cercueil const struct function_desc *functions;
132b5c23aa4SPaul Cercueil unsigned int num_functions;
133b5c23aa4SPaul Cercueil
134b5c23aa4SPaul Cercueil const u32 *pull_ups, *pull_downs;
1359279c00fSAidan MacDonald
1369279c00fSAidan MacDonald const struct regmap_access_table *access_table;
137b5c23aa4SPaul Cercueil };
138b5c23aa4SPaul Cercueil
139b5c23aa4SPaul Cercueil struct ingenic_pinctrl {
140b5c23aa4SPaul Cercueil struct device *dev;
141b5c23aa4SPaul Cercueil struct regmap *map;
142b5c23aa4SPaul Cercueil struct pinctrl_dev *pctl;
143b5c23aa4SPaul Cercueil struct pinctrl_pin_desc *pdesc;
144b5c23aa4SPaul Cercueil
145b5c23aa4SPaul Cercueil const struct ingenic_chip_info *info;
14678329866SBartosz Golaszewski
14778329866SBartosz Golaszewski struct gpio_chip *gc;
148b5c23aa4SPaul Cercueil };
149b5c23aa4SPaul Cercueil
150e72394e2SPaul Cercueil struct ingenic_gpio_chip {
151e72394e2SPaul Cercueil struct ingenic_pinctrl *jzpc;
152e72394e2SPaul Cercueil struct gpio_chip gc;
153e72394e2SPaul Cercueil unsigned int irq, reg_base;
154e72394e2SPaul Cercueil };
155e72394e2SPaul Cercueil
1568d2d607cSPaul Cercueil static const unsigned long enabled_socs =
1578d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_JZ4730) << ID_JZ4730 |
1588d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_JZ4740) << ID_JZ4740 |
1598d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_JZ4725B) << ID_JZ4725B |
1608d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_JZ4750) << ID_JZ4750 |
1618d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_JZ4755) << ID_JZ4755 |
1628d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_JZ4760) << ID_JZ4760 |
1638d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_JZ4770) << ID_JZ4770 |
1648d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_JZ4775) << ID_JZ4775 |
1658d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_JZ4780) << ID_JZ4780 |
1668d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_X1000) << ID_X1000 |
1678d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_X1500) << ID_X1500 |
1684da56f9cSPaul Boddie IS_ENABLED(CONFIG_MACH_X1600) << ID_X1600 |
1698d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_X1830) << ID_X1830 |
1708d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_X2000) << ID_X2000 |
1718d2d607cSPaul Cercueil IS_ENABLED(CONFIG_MACH_X2100) << ID_X2100;
1728d2d607cSPaul Cercueil
1738d2d607cSPaul Cercueil static bool
is_soc_or_above(const struct ingenic_pinctrl * jzpc,enum jz_version version)1748d2d607cSPaul Cercueil is_soc_or_above(const struct ingenic_pinctrl *jzpc, enum jz_version version)
1758d2d607cSPaul Cercueil {
1768d2d607cSPaul Cercueil return (enabled_socs >> version) &&
1778d2d607cSPaul Cercueil (!(enabled_socs & GENMASK(version - 1, 0))
1788d2d607cSPaul Cercueil || jzpc->info->version >= version);
1798d2d607cSPaul Cercueil }
1808d2d607cSPaul Cercueil
181424f3969S周琰杰 (Zhou Yanjie) static const u32 jz4730_pull_ups[4] = {
182424f3969S周琰杰 (Zhou Yanjie) 0x3fa3320f, 0xf200ffff, 0xffffffff, 0xffffffff,
183424f3969S周琰杰 (Zhou Yanjie) };
184424f3969S周琰杰 (Zhou Yanjie)
185424f3969S周琰杰 (Zhou Yanjie) static const u32 jz4730_pull_downs[4] = {
186424f3969S周琰杰 (Zhou Yanjie) 0x00000df0, 0x0dff0000, 0x00000000, 0x00000000,
187424f3969S周琰杰 (Zhou Yanjie) };
188424f3969S周琰杰 (Zhou Yanjie)
189424f3969S周琰杰 (Zhou Yanjie) static int jz4730_mmc_1bit_pins[] = { 0x27, 0x26, 0x22, };
190424f3969S周琰杰 (Zhou Yanjie) static int jz4730_mmc_4bit_pins[] = { 0x23, 0x24, 0x25, };
191424f3969S周琰杰 (Zhou Yanjie) static int jz4730_uart0_data_pins[] = { 0x7e, 0x7f, };
192424f3969S周琰杰 (Zhou Yanjie) static int jz4730_uart1_data_pins[] = { 0x18, 0x19, };
193424f3969S周琰杰 (Zhou Yanjie) static int jz4730_uart2_data_pins[] = { 0x6f, 0x7d, };
194424f3969S周琰杰 (Zhou Yanjie) static int jz4730_uart3_data_pins[] = { 0x10, 0x15, };
195424f3969S周琰杰 (Zhou Yanjie) static int jz4730_uart3_hwflow_pins[] = { 0x11, 0x17, };
196424f3969S周琰杰 (Zhou Yanjie) static int jz4730_lcd_8bit_pins[] = {
197424f3969S周琰杰 (Zhou Yanjie) 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
198424f3969S周琰杰 (Zhou Yanjie) 0x3a, 0x39, 0x38,
199424f3969S周琰杰 (Zhou Yanjie) };
200424f3969S周琰杰 (Zhou Yanjie) static int jz4730_lcd_16bit_pins[] = {
201424f3969S周琰杰 (Zhou Yanjie) 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
202424f3969S周琰杰 (Zhou Yanjie) };
203424f3969S周琰杰 (Zhou Yanjie) static int jz4730_lcd_special_pins[] = { 0x3d, 0x3c, 0x3e, 0x3f, };
204424f3969S周琰杰 (Zhou Yanjie) static int jz4730_lcd_generic_pins[] = { 0x3b, };
205424f3969S周琰杰 (Zhou Yanjie) static int jz4730_nand_cs1_pins[] = { 0x53, };
206424f3969S周琰杰 (Zhou Yanjie) static int jz4730_nand_cs2_pins[] = { 0x54, };
207424f3969S周琰杰 (Zhou Yanjie) static int jz4730_nand_cs3_pins[] = { 0x55, };
208424f3969S周琰杰 (Zhou Yanjie) static int jz4730_nand_cs4_pins[] = { 0x56, };
209424f3969S周琰杰 (Zhou Yanjie) static int jz4730_nand_cs5_pins[] = { 0x57, };
210424f3969S周琰杰 (Zhou Yanjie) static int jz4730_pwm_pwm0_pins[] = { 0x5e, };
211424f3969S周琰杰 (Zhou Yanjie) static int jz4730_pwm_pwm1_pins[] = { 0x5f, };
212424f3969S周琰杰 (Zhou Yanjie)
2134b490ccbSH. Nikolaus Schaller static int jz4730_mii_pins[] = { 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
2144b490ccbSH. Nikolaus Schaller 0x77, 0x78, 0x19, 0x7a, 0x1b, 0x7c, };
2154b490ccbSH. Nikolaus Schaller
2168171e7b9SH. Nikolaus Schaller static int jz4730_i2s_mclk_pins[] = { 0x44, };
2178171e7b9SH. Nikolaus Schaller static int jz4730_i2s_acreset_pins[] = { 0x45, };
2188171e7b9SH. Nikolaus Schaller static int jz4730_i2s_data_pins[] = { 0x46, 0x47, };
2198171e7b9SH. Nikolaus Schaller static int jz4730_i2s_clock_pins[] = { 0x4d, 0x4e, };
2208171e7b9SH. Nikolaus Schaller
221424f3969S周琰杰 (Zhou Yanjie) static u8 jz4730_lcd_8bit_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, };
222424f3969S周琰杰 (Zhou Yanjie)
223424f3969S周琰杰 (Zhou Yanjie) static const struct group_desc jz4730_groups[] = {
224424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc-1bit", jz4730_mmc_1bit, 1),
225424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc-4bit", jz4730_mmc_4bit, 1),
226424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-data", jz4730_uart0_data, 1),
227424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart1-data", jz4730_uart1_data, 1),
228424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart2-data", jz4730_uart2_data, 1),
229424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-data", jz4730_uart3_data, 1),
230424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-hwflow", jz4730_uart3_hwflow, 1),
231424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("lcd-8bit", jz4730_lcd_8bit, jz4730_lcd_8bit_funcs),
232424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-16bit", jz4730_lcd_16bit, 1),
233424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-special", jz4730_lcd_special, 1),
234424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-generic", jz4730_lcd_generic, 1),
235424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs1", jz4730_nand_cs1, 1),
236424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs2", jz4730_nand_cs2, 1),
237424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs3", jz4730_nand_cs3, 1),
238424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs4", jz4730_nand_cs4, 1),
239424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs5", jz4730_nand_cs5, 1),
240424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm0", jz4730_pwm_pwm0, 1),
241424f3969S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm1", jz4730_pwm_pwm1, 1),
2424b490ccbSH. Nikolaus Schaller INGENIC_PIN_GROUP("mii", jz4730_mii, 1),
2438171e7b9SH. Nikolaus Schaller INGENIC_PIN_GROUP("i2s-mclk-out", jz4730_i2s_mclk, 1),
2448171e7b9SH. Nikolaus Schaller INGENIC_PIN_GROUP("i2s-acreset", jz4730_i2s_acreset, 1),
2458171e7b9SH. Nikolaus Schaller INGENIC_PIN_GROUP("i2s-data", jz4730_i2s_data, 1),
2468171e7b9SH. Nikolaus Schaller INGENIC_PIN_GROUP("i2s-master", jz4730_i2s_clock, 1),
2478171e7b9SH. Nikolaus Schaller INGENIC_PIN_GROUP("i2s-slave", jz4730_i2s_clock, 2),
248424f3969S周琰杰 (Zhou Yanjie) };
249424f3969S周琰杰 (Zhou Yanjie)
250424f3969S周琰杰 (Zhou Yanjie) static const char *jz4730_mmc_groups[] = { "mmc-1bit", "mmc-4bit", };
251424f3969S周琰杰 (Zhou Yanjie) static const char *jz4730_uart0_groups[] = { "uart0-data", };
252424f3969S周琰杰 (Zhou Yanjie) static const char *jz4730_uart1_groups[] = { "uart1-data", };
253424f3969S周琰杰 (Zhou Yanjie) static const char *jz4730_uart2_groups[] = { "uart2-data", };
254424f3969S周琰杰 (Zhou Yanjie) static const char *jz4730_uart3_groups[] = { "uart3-data", "uart3-hwflow", };
255424f3969S周琰杰 (Zhou Yanjie) static const char *jz4730_lcd_groups[] = {
256424f3969S周琰杰 (Zhou Yanjie) "lcd-8bit", "lcd-16bit", "lcd-special", "lcd-generic",
257424f3969S周琰杰 (Zhou Yanjie) };
258424f3969S周琰杰 (Zhou Yanjie) static const char *jz4730_nand_groups[] = {
259424f3969S周琰杰 (Zhou Yanjie) "nand-cs1", "nand-cs2", "nand-cs3", "nand-cs4", "nand-cs5",
260424f3969S周琰杰 (Zhou Yanjie) };
261424f3969S周琰杰 (Zhou Yanjie) static const char *jz4730_pwm0_groups[] = { "pwm0", };
262424f3969S周琰杰 (Zhou Yanjie) static const char *jz4730_pwm1_groups[] = { "pwm1", };
2634b490ccbSH. Nikolaus Schaller static const char *jz4730_mii_groups[] = { "mii", };
2648171e7b9SH. Nikolaus Schaller static const char *jz4730_i2s_groups[] = { "i2s-data", "i2s-master", "i2s-slave", };
265424f3969S周琰杰 (Zhou Yanjie)
266424f3969S周琰杰 (Zhou Yanjie) static const struct function_desc jz4730_functions[] = {
2677f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc", jz4730_mmc),
2687f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", jz4730_uart0),
2697f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", jz4730_uart1),
2707f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", jz4730_uart2),
2717f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart3", jz4730_uart3),
2727f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", jz4730_lcd),
2737f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nand", jz4730_nand),
2747f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", jz4730_pwm0),
2757f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", jz4730_pwm1),
2764b490ccbSH. Nikolaus Schaller INGENIC_PIN_FUNCTION("mii", jz4730_mii),
2778171e7b9SH. Nikolaus Schaller INGENIC_PIN_FUNCTION("i2s", jz4730_i2s),
278424f3969S周琰杰 (Zhou Yanjie) };
279424f3969S周琰杰 (Zhou Yanjie)
280424f3969S周琰杰 (Zhou Yanjie) static const struct ingenic_chip_info jz4730_chip_info = {
281424f3969S周琰杰 (Zhou Yanjie) .num_chips = 4,
282424f3969S周琰杰 (Zhou Yanjie) .reg_offset = 0x30,
283424f3969S周琰杰 (Zhou Yanjie) .version = ID_JZ4730,
284424f3969S周琰杰 (Zhou Yanjie) .groups = jz4730_groups,
285424f3969S周琰杰 (Zhou Yanjie) .num_groups = ARRAY_SIZE(jz4730_groups),
286424f3969S周琰杰 (Zhou Yanjie) .functions = jz4730_functions,
287424f3969S周琰杰 (Zhou Yanjie) .num_functions = ARRAY_SIZE(jz4730_functions),
288424f3969S周琰杰 (Zhou Yanjie) .pull_ups = jz4730_pull_ups,
289424f3969S周琰杰 (Zhou Yanjie) .pull_downs = jz4730_pull_downs,
290424f3969S周琰杰 (Zhou Yanjie) };
291424f3969S周琰杰 (Zhou Yanjie)
292b5c23aa4SPaul Cercueil static const u32 jz4740_pull_ups[4] = {
293b5c23aa4SPaul Cercueil 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
294b5c23aa4SPaul Cercueil };
295b5c23aa4SPaul Cercueil
296b5c23aa4SPaul Cercueil static const u32 jz4740_pull_downs[4] = {
297b5c23aa4SPaul Cercueil 0x00000000, 0x00000000, 0x00000000, 0x00000000,
298b5c23aa4SPaul Cercueil };
299b5c23aa4SPaul Cercueil
300b5c23aa4SPaul Cercueil static int jz4740_mmc_1bit_pins[] = { 0x69, 0x68, 0x6a, };
301b5c23aa4SPaul Cercueil static int jz4740_mmc_4bit_pins[] = { 0x6b, 0x6c, 0x6d, };
302b5c23aa4SPaul Cercueil static int jz4740_uart0_data_pins[] = { 0x7a, 0x79, };
303b5c23aa4SPaul Cercueil static int jz4740_uart0_hwflow_pins[] = { 0x7e, 0x7f, };
304b5c23aa4SPaul Cercueil static int jz4740_uart1_data_pins[] = { 0x7e, 0x7f, };
305b5c23aa4SPaul Cercueil static int jz4740_lcd_8bit_pins[] = {
3065e6332a7S周琰杰 (Zhou Yanjie) 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3075e6332a7S周琰杰 (Zhou Yanjie) 0x52, 0x53, 0x54,
308b5c23aa4SPaul Cercueil };
309b5c23aa4SPaul Cercueil static int jz4740_lcd_16bit_pins[] = {
3105e6332a7S周琰杰 (Zhou Yanjie) 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
311b5c23aa4SPaul Cercueil };
312b5c23aa4SPaul Cercueil static int jz4740_lcd_18bit_pins[] = { 0x50, 0x51, };
3135e6332a7S周琰杰 (Zhou Yanjie) static int jz4740_lcd_special_pins[] = { 0x31, 0x32, 0x56, 0x57, };
3145e6332a7S周琰杰 (Zhou Yanjie) static int jz4740_lcd_generic_pins[] = { 0x55, };
315b5c23aa4SPaul Cercueil static int jz4740_nand_cs1_pins[] = { 0x39, };
316b5c23aa4SPaul Cercueil static int jz4740_nand_cs2_pins[] = { 0x3a, };
317b5c23aa4SPaul Cercueil static int jz4740_nand_cs3_pins[] = { 0x3b, };
318b5c23aa4SPaul Cercueil static int jz4740_nand_cs4_pins[] = { 0x3c, };
319bcad94d7SPaul Cercueil static int jz4740_nand_fre_fwe_pins[] = { 0x5c, 0x5d, };
320b5c23aa4SPaul Cercueil static int jz4740_pwm_pwm0_pins[] = { 0x77, };
321b5c23aa4SPaul Cercueil static int jz4740_pwm_pwm1_pins[] = { 0x78, };
322b5c23aa4SPaul Cercueil static int jz4740_pwm_pwm2_pins[] = { 0x79, };
323b5c23aa4SPaul Cercueil static int jz4740_pwm_pwm3_pins[] = { 0x7a, };
324b5c23aa4SPaul Cercueil static int jz4740_pwm_pwm4_pins[] = { 0x7b, };
325b5c23aa4SPaul Cercueil static int jz4740_pwm_pwm5_pins[] = { 0x7c, };
326b5c23aa4SPaul Cercueil static int jz4740_pwm_pwm6_pins[] = { 0x7e, };
327b5c23aa4SPaul Cercueil static int jz4740_pwm_pwm7_pins[] = { 0x7f, };
328b5c23aa4SPaul Cercueil
329b5c23aa4SPaul Cercueil static const struct group_desc jz4740_groups[] = {
330bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc-1bit", jz4740_mmc_1bit, 0),
331bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc-4bit", jz4740_mmc_4bit, 0),
332bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-data", jz4740_uart0_data, 1),
333bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-hwflow", jz4740_uart0_hwflow, 1),
334bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-data", jz4740_uart1_data, 2),
335bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-8bit", jz4740_lcd_8bit, 0),
336bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-16bit", jz4740_lcd_16bit, 0),
337bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-18bit", jz4740_lcd_18bit, 0),
3385e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-special", jz4740_lcd_special, 0),
3395e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-generic", jz4740_lcd_generic, 0),
340bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-cs1", jz4740_nand_cs1, 0),
341bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-cs2", jz4740_nand_cs2, 0),
342bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-cs3", jz4740_nand_cs3, 0),
343bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-cs4", jz4740_nand_cs4, 0),
344bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-fre-fwe", jz4740_nand_fre_fwe, 0),
345bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm0", jz4740_pwm_pwm0, 0),
346bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm1", jz4740_pwm_pwm1, 0),
347bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm2", jz4740_pwm_pwm2, 0),
348bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm3", jz4740_pwm_pwm3, 0),
349bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm4", jz4740_pwm_pwm4, 0),
350bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm5", jz4740_pwm_pwm5, 0),
351bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm6", jz4740_pwm_pwm6, 0),
352bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm7", jz4740_pwm_pwm7, 0),
353b5c23aa4SPaul Cercueil };
354b5c23aa4SPaul Cercueil
355b5c23aa4SPaul Cercueil static const char *jz4740_mmc_groups[] = { "mmc-1bit", "mmc-4bit", };
356b5c23aa4SPaul Cercueil static const char *jz4740_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
357b5c23aa4SPaul Cercueil static const char *jz4740_uart1_groups[] = { "uart1-data", };
358b5c23aa4SPaul Cercueil static const char *jz4740_lcd_groups[] = {
3595e6332a7S周琰杰 (Zhou Yanjie) "lcd-8bit", "lcd-16bit", "lcd-18bit", "lcd-special", "lcd-generic",
360b5c23aa4SPaul Cercueil };
361b5c23aa4SPaul Cercueil static const char *jz4740_nand_groups[] = {
362bcad94d7SPaul Cercueil "nand-cs1", "nand-cs2", "nand-cs3", "nand-cs4", "nand-fre-fwe",
363b5c23aa4SPaul Cercueil };
364b5c23aa4SPaul Cercueil static const char *jz4740_pwm0_groups[] = { "pwm0", };
365b5c23aa4SPaul Cercueil static const char *jz4740_pwm1_groups[] = { "pwm1", };
366b5c23aa4SPaul Cercueil static const char *jz4740_pwm2_groups[] = { "pwm2", };
367b5c23aa4SPaul Cercueil static const char *jz4740_pwm3_groups[] = { "pwm3", };
368b5c23aa4SPaul Cercueil static const char *jz4740_pwm4_groups[] = { "pwm4", };
369b5c23aa4SPaul Cercueil static const char *jz4740_pwm5_groups[] = { "pwm5", };
370b5c23aa4SPaul Cercueil static const char *jz4740_pwm6_groups[] = { "pwm6", };
371b5c23aa4SPaul Cercueil static const char *jz4740_pwm7_groups[] = { "pwm7", };
372b5c23aa4SPaul Cercueil
373b5c23aa4SPaul Cercueil static const struct function_desc jz4740_functions[] = {
3747f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc", jz4740_mmc),
3757f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", jz4740_uart0),
3767f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", jz4740_uart1),
3777f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", jz4740_lcd),
3787f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nand", jz4740_nand),
3797f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", jz4740_pwm0),
3807f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", jz4740_pwm1),
3817f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", jz4740_pwm2),
3827f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", jz4740_pwm3),
3837f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", jz4740_pwm4),
3847f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", jz4740_pwm5),
3857f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm6", jz4740_pwm6),
3867f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm7", jz4740_pwm7),
387b5c23aa4SPaul Cercueil };
388b5c23aa4SPaul Cercueil
389b5c23aa4SPaul Cercueil static const struct ingenic_chip_info jz4740_chip_info = {
390b5c23aa4SPaul Cercueil .num_chips = 4,
391f742e5ebS周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
392baf15647SPaul Cercueil .version = ID_JZ4740,
393b5c23aa4SPaul Cercueil .groups = jz4740_groups,
394b5c23aa4SPaul Cercueil .num_groups = ARRAY_SIZE(jz4740_groups),
395b5c23aa4SPaul Cercueil .functions = jz4740_functions,
396b5c23aa4SPaul Cercueil .num_functions = ARRAY_SIZE(jz4740_functions),
397b5c23aa4SPaul Cercueil .pull_ups = jz4740_pull_ups,
398b5c23aa4SPaul Cercueil .pull_downs = jz4740_pull_downs,
399b5c23aa4SPaul Cercueil };
400b5c23aa4SPaul Cercueil
401f2a96765SPaul Cercueil static int jz4725b_mmc0_1bit_pins[] = { 0x48, 0x49, 0x5c, };
402f2a96765SPaul Cercueil static int jz4725b_mmc0_4bit_pins[] = { 0x5d, 0x5b, 0x56, };
403f2a96765SPaul Cercueil static int jz4725b_mmc1_1bit_pins[] = { 0x7a, 0x7b, 0x7c, };
404f2a96765SPaul Cercueil static int jz4725b_mmc1_4bit_pins[] = { 0x7d, 0x7e, 0x7f, };
405f2a96765SPaul Cercueil static int jz4725b_uart_data_pins[] = { 0x4c, 0x4d, };
4065e6332a7S周琰杰 (Zhou Yanjie) static int jz4725b_lcd_8bit_pins[] = {
4075e6332a7S周琰杰 (Zhou Yanjie) 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
4085e6332a7S周琰杰 (Zhou Yanjie) 0x72, 0x73, 0x74,
4095e6332a7S周琰杰 (Zhou Yanjie) };
4105e6332a7S周琰杰 (Zhou Yanjie) static int jz4725b_lcd_16bit_pins[] = {
4115e6332a7S周琰杰 (Zhou Yanjie) 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
4125e6332a7S周琰杰 (Zhou Yanjie) };
4135e6332a7S周琰杰 (Zhou Yanjie) static int jz4725b_lcd_18bit_pins[] = { 0x70, 0x71, };
4145e6332a7S周琰杰 (Zhou Yanjie) static int jz4725b_lcd_24bit_pins[] = { 0x76, 0x77, 0x78, 0x79, };
4155e6332a7S周琰杰 (Zhou Yanjie) static int jz4725b_lcd_special_pins[] = { 0x76, 0x77, 0x78, 0x79, };
4165e6332a7S周琰杰 (Zhou Yanjie) static int jz4725b_lcd_generic_pins[] = { 0x75, };
417f2a96765SPaul Cercueil static int jz4725b_nand_cs1_pins[] = { 0x55, };
418f2a96765SPaul Cercueil static int jz4725b_nand_cs2_pins[] = { 0x56, };
419f2a96765SPaul Cercueil static int jz4725b_nand_cs3_pins[] = { 0x57, };
420f2a96765SPaul Cercueil static int jz4725b_nand_cs4_pins[] = { 0x58, };
421f2a96765SPaul Cercueil static int jz4725b_nand_cle_ale_pins[] = { 0x48, 0x49 };
422f2a96765SPaul Cercueil static int jz4725b_nand_fre_fwe_pins[] = { 0x5c, 0x5d };
423f2a96765SPaul Cercueil static int jz4725b_pwm_pwm0_pins[] = { 0x4a, };
424f2a96765SPaul Cercueil static int jz4725b_pwm_pwm1_pins[] = { 0x4b, };
425f2a96765SPaul Cercueil static int jz4725b_pwm_pwm2_pins[] = { 0x4c, };
426f2a96765SPaul Cercueil static int jz4725b_pwm_pwm3_pins[] = { 0x4d, };
427f2a96765SPaul Cercueil static int jz4725b_pwm_pwm4_pins[] = { 0x4e, };
428f2a96765SPaul Cercueil static int jz4725b_pwm_pwm5_pins[] = { 0x4f, };
429f2a96765SPaul Cercueil
430bb42b593SPaul Cercueil static u8 jz4725b_mmc0_4bit_funcs[] = { 1, 0, 1, };
431f2a96765SPaul Cercueil
432f2a96765SPaul Cercueil static const struct group_desc jz4725b_groups[] = {
433bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-1bit", jz4725b_mmc0_1bit, 1),
434bb42b593SPaul Cercueil INGENIC_PIN_GROUP_FUNCS("mmc0-4bit", jz4725b_mmc0_4bit,
435bb42b593SPaul Cercueil jz4725b_mmc0_4bit_funcs),
436bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-1bit", jz4725b_mmc1_1bit, 0),
437bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-4bit", jz4725b_mmc1_4bit, 0),
438bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart-data", jz4725b_uart_data, 1),
4395e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-8bit", jz4725b_lcd_8bit, 0),
4405e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-16bit", jz4725b_lcd_16bit, 0),
4415e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-18bit", jz4725b_lcd_18bit, 0),
4425e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-24bit", jz4725b_lcd_24bit, 1),
4435e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-special", jz4725b_lcd_special, 0),
4445e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-generic", jz4725b_lcd_generic, 0),
445bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-cs1", jz4725b_nand_cs1, 0),
446bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-cs2", jz4725b_nand_cs2, 0),
447bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-cs3", jz4725b_nand_cs3, 0),
448bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-cs4", jz4725b_nand_cs4, 0),
449bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-cle-ale", jz4725b_nand_cle_ale, 0),
450bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nand-fre-fwe", jz4725b_nand_fre_fwe, 0),
451bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm0", jz4725b_pwm_pwm0, 0),
452bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm1", jz4725b_pwm_pwm1, 0),
453bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm2", jz4725b_pwm_pwm2, 0),
454bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm3", jz4725b_pwm_pwm3, 0),
455bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm4", jz4725b_pwm_pwm4, 0),
456bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm5", jz4725b_pwm_pwm5, 0),
457f2a96765SPaul Cercueil };
458f2a96765SPaul Cercueil
459f2a96765SPaul Cercueil static const char *jz4725b_mmc0_groups[] = { "mmc0-1bit", "mmc0-4bit", };
460f2a96765SPaul Cercueil static const char *jz4725b_mmc1_groups[] = { "mmc1-1bit", "mmc1-4bit", };
461f2a96765SPaul Cercueil static const char *jz4725b_uart_groups[] = { "uart-data", };
4625e6332a7S周琰杰 (Zhou Yanjie) static const char *jz4725b_lcd_groups[] = {
4635e6332a7S周琰杰 (Zhou Yanjie) "lcd-8bit", "lcd-16bit", "lcd-18bit", "lcd-24bit",
4645e6332a7S周琰杰 (Zhou Yanjie) "lcd-special", "lcd-generic",
4655e6332a7S周琰杰 (Zhou Yanjie) };
466f2a96765SPaul Cercueil static const char *jz4725b_nand_groups[] = {
467f2a96765SPaul Cercueil "nand-cs1", "nand-cs2", "nand-cs3", "nand-cs4",
468f2a96765SPaul Cercueil "nand-cle-ale", "nand-fre-fwe",
469f2a96765SPaul Cercueil };
470f2a96765SPaul Cercueil static const char *jz4725b_pwm0_groups[] = { "pwm0", };
471f2a96765SPaul Cercueil static const char *jz4725b_pwm1_groups[] = { "pwm1", };
472f2a96765SPaul Cercueil static const char *jz4725b_pwm2_groups[] = { "pwm2", };
473f2a96765SPaul Cercueil static const char *jz4725b_pwm3_groups[] = { "pwm3", };
474f2a96765SPaul Cercueil static const char *jz4725b_pwm4_groups[] = { "pwm4", };
475f2a96765SPaul Cercueil static const char *jz4725b_pwm5_groups[] = { "pwm5", };
476f2a96765SPaul Cercueil
477f2a96765SPaul Cercueil static const struct function_desc jz4725b_functions[] = {
4787f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", jz4725b_mmc0),
4797f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", jz4725b_mmc1),
4807f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart", jz4725b_uart),
4817f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nand", jz4725b_nand),
4827f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", jz4725b_pwm0),
4837f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", jz4725b_pwm1),
4847f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", jz4725b_pwm2),
4857f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", jz4725b_pwm3),
4867f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", jz4725b_pwm4),
4877f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", jz4725b_pwm5),
4887f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", jz4725b_lcd),
489f2a96765SPaul Cercueil };
490f2a96765SPaul Cercueil
491f2a96765SPaul Cercueil static const struct ingenic_chip_info jz4725b_chip_info = {
492f2a96765SPaul Cercueil .num_chips = 4,
493f742e5ebS周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
494baf15647SPaul Cercueil .version = ID_JZ4725B,
495f2a96765SPaul Cercueil .groups = jz4725b_groups,
496f2a96765SPaul Cercueil .num_groups = ARRAY_SIZE(jz4725b_groups),
497f2a96765SPaul Cercueil .functions = jz4725b_functions,
498f2a96765SPaul Cercueil .num_functions = ARRAY_SIZE(jz4725b_functions),
499f2a96765SPaul Cercueil .pull_ups = jz4740_pull_ups,
500f2a96765SPaul Cercueil .pull_downs = jz4740_pull_downs,
501f2a96765SPaul Cercueil };
502f2a96765SPaul Cercueil
503215c81a3S周琰杰 (Zhou Yanjie) static const u32 jz4750_pull_ups[6] = {
504215c81a3S周琰杰 (Zhou Yanjie) 0xffffffff, 0xffffffff, 0x3fffffff, 0x7fffffff, 0x1fff3fff, 0x00ffffff,
505215c81a3S周琰杰 (Zhou Yanjie) };
506215c81a3S周琰杰 (Zhou Yanjie)
507215c81a3S周琰杰 (Zhou Yanjie) static const u32 jz4750_pull_downs[6] = {
508215c81a3S周琰杰 (Zhou Yanjie) 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
509215c81a3S周琰杰 (Zhou Yanjie) };
510215c81a3S周琰杰 (Zhou Yanjie)
511215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_uart0_data_pins[] = { 0xa4, 0xa5, };
512215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_uart0_hwflow_pins[] = { 0xa6, 0xa7, };
513215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_uart1_data_pins[] = { 0x90, 0x91, };
514215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_uart1_hwflow_pins[] = { 0x92, 0x93, };
515215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_uart2_data_pins[] = { 0x9b, 0x9a, };
516215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_uart3_data_pins[] = { 0xb0, 0xb1, };
517215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_uart3_hwflow_pins[] = { 0xb2, 0xb3, };
518215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_mmc0_1bit_pins[] = { 0xa8, 0xa9, 0xa0, };
519215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_mmc0_4bit_pins[] = { 0xa1, 0xa2, 0xa3, };
520215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_mmc0_8bit_pins[] = { 0xa4, 0xa5, 0xa6, 0xa7, };
521215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_mmc1_1bit_pins[] = { 0xae, 0xaf, 0xaa, };
522215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_mmc1_4bit_pins[] = { 0xab, 0xac, 0xad, };
523215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_i2c_pins[] = { 0x8c, 0x8d, };
524215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_cim_pins[] = {
525215c81a3S周琰杰 (Zhou Yanjie) 0x89, 0x8b, 0x8a, 0x88,
526215c81a3S周琰杰 (Zhou Yanjie) 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
527215c81a3S周琰杰 (Zhou Yanjie) };
528215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_lcd_8bit_pins[] = {
529215c81a3S周琰杰 (Zhou Yanjie) 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
530215c81a3S周琰杰 (Zhou Yanjie) 0x72, 0x73, 0x74,
531215c81a3S周琰杰 (Zhou Yanjie) };
532215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_lcd_16bit_pins[] = {
533215c81a3S周琰杰 (Zhou Yanjie) 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
534215c81a3S周琰杰 (Zhou Yanjie) };
535215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_lcd_18bit_pins[] = { 0x70, 0x71, };
536215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_lcd_24bit_pins[] = { 0x76, 0x77, 0x78, 0x79, 0xb2, 0xb3, };
537215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_lcd_special_pins[] = { 0x76, 0x77, 0x78, 0x79, };
538215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_lcd_generic_pins[] = { 0x75, };
539215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_nand_cs1_pins[] = { 0x55, };
540215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_nand_cs2_pins[] = { 0x56, };
541215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_nand_cs3_pins[] = { 0x57, };
542215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_nand_cs4_pins[] = { 0x58, };
543215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_nand_fre_fwe_pins[] = { 0x5c, 0x5d, };
544215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_pwm_pwm0_pins[] = { 0x94, };
545215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_pwm_pwm1_pins[] = { 0x95, };
546215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_pwm_pwm2_pins[] = { 0x96, };
547215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_pwm_pwm3_pins[] = { 0x97, };
548215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_pwm_pwm4_pins[] = { 0x98, };
549215c81a3S周琰杰 (Zhou Yanjie) static int jz4750_pwm_pwm5_pins[] = { 0x99, };
550215c81a3S周琰杰 (Zhou Yanjie)
551215c81a3S周琰杰 (Zhou Yanjie) static const struct group_desc jz4750_groups[] = {
552215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-data", jz4750_uart0_data, 1),
553215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-hwflow", jz4750_uart0_hwflow, 1),
554215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart1-data", jz4750_uart1_data, 0),
555215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart1-hwflow", jz4750_uart1_hwflow, 0),
556215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart2-data", jz4750_uart2_data, 1),
557215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-data", jz4750_uart3_data, 0),
558215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-hwflow", jz4750_uart3_hwflow, 0),
559215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-1bit", jz4750_mmc0_1bit, 0),
560215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-4bit", jz4750_mmc0_4bit, 0),
561215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-8bit", jz4750_mmc0_8bit, 0),
562215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-1bit", jz4750_mmc1_1bit, 0),
563215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-4bit", jz4750_mmc1_4bit, 0),
564215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c-data", jz4750_i2c, 0),
565215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("cim-data", jz4750_cim, 0),
566215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-8bit", jz4750_lcd_8bit, 0),
567215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-16bit", jz4750_lcd_16bit, 0),
568215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-18bit", jz4750_lcd_18bit, 0),
569215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-24bit", jz4750_lcd_24bit, 1),
570215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-special", jz4750_lcd_special, 0),
571215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-generic", jz4750_lcd_generic, 0),
572215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs1", jz4750_nand_cs1, 0),
573215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs2", jz4750_nand_cs2, 0),
574215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs3", jz4750_nand_cs3, 0),
575215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs4", jz4750_nand_cs4, 0),
576215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-fre-fwe", jz4750_nand_fre_fwe, 0),
577215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm0", jz4750_pwm_pwm0, 0),
578215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm1", jz4750_pwm_pwm1, 0),
579215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm2", jz4750_pwm_pwm2, 0),
580215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm3", jz4750_pwm_pwm3, 0),
581215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm4", jz4750_pwm_pwm4, 0),
582215c81a3S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm5", jz4750_pwm_pwm5, 0),
583215c81a3S周琰杰 (Zhou Yanjie) };
584215c81a3S周琰杰 (Zhou Yanjie)
585215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
586215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_uart1_groups[] = { "uart1-data", "uart1-hwflow", };
587215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_uart2_groups[] = { "uart2-data", };
588215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_uart3_groups[] = { "uart3-data", "uart3-hwflow", };
589215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_mmc0_groups[] = {
590215c81a3S周琰杰 (Zhou Yanjie) "mmc0-1bit", "mmc0-4bit", "mmc0-8bit",
591215c81a3S周琰杰 (Zhou Yanjie) };
592215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_mmc1_groups[] = { "mmc0-1bit", "mmc0-4bit", };
593215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_i2c_groups[] = { "i2c-data", };
594215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_cim_groups[] = { "cim-data", };
595215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_lcd_groups[] = {
596215c81a3S周琰杰 (Zhou Yanjie) "lcd-8bit", "lcd-16bit", "lcd-18bit", "lcd-24bit",
597215c81a3S周琰杰 (Zhou Yanjie) "lcd-special", "lcd-generic",
598215c81a3S周琰杰 (Zhou Yanjie) };
599215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_nand_groups[] = {
600215c81a3S周琰杰 (Zhou Yanjie) "nand-cs1", "nand-cs2", "nand-cs3", "nand-cs4", "nand-fre-fwe",
601215c81a3S周琰杰 (Zhou Yanjie) };
602215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_pwm0_groups[] = { "pwm0", };
603215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_pwm1_groups[] = { "pwm1", };
604215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_pwm2_groups[] = { "pwm2", };
605215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_pwm3_groups[] = { "pwm3", };
606215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_pwm4_groups[] = { "pwm4", };
607215c81a3S周琰杰 (Zhou Yanjie) static const char *jz4750_pwm5_groups[] = { "pwm5", };
608215c81a3S周琰杰 (Zhou Yanjie)
609215c81a3S周琰杰 (Zhou Yanjie) static const struct function_desc jz4750_functions[] = {
6107f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", jz4750_uart0),
6117f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", jz4750_uart1),
6127f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", jz4750_uart2),
6137f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart3", jz4750_uart3),
6147f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", jz4750_mmc0),
6157f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", jz4750_mmc1),
6167f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c", jz4750_i2c),
6177f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", jz4750_cim),
6187f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", jz4750_lcd),
6197f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nand", jz4750_nand),
6207f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", jz4750_pwm0),
6217f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", jz4750_pwm1),
6227f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", jz4750_pwm2),
6237f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", jz4750_pwm3),
6247f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", jz4750_pwm4),
6257f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", jz4750_pwm5),
626215c81a3S周琰杰 (Zhou Yanjie) };
627215c81a3S周琰杰 (Zhou Yanjie)
628215c81a3S周琰杰 (Zhou Yanjie) static const struct ingenic_chip_info jz4750_chip_info = {
629215c81a3S周琰杰 (Zhou Yanjie) .num_chips = 6,
630215c81a3S周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
631215c81a3S周琰杰 (Zhou Yanjie) .version = ID_JZ4750,
632215c81a3S周琰杰 (Zhou Yanjie) .groups = jz4750_groups,
633215c81a3S周琰杰 (Zhou Yanjie) .num_groups = ARRAY_SIZE(jz4750_groups),
634215c81a3S周琰杰 (Zhou Yanjie) .functions = jz4750_functions,
635215c81a3S周琰杰 (Zhou Yanjie) .num_functions = ARRAY_SIZE(jz4750_functions),
636215c81a3S周琰杰 (Zhou Yanjie) .pull_ups = jz4750_pull_ups,
637215c81a3S周琰杰 (Zhou Yanjie) .pull_downs = jz4750_pull_downs,
638215c81a3S周琰杰 (Zhou Yanjie) };
639215c81a3S周琰杰 (Zhou Yanjie)
640b582b5a4S周琰杰 (Zhou Yanjie) static const u32 jz4755_pull_ups[6] = {
641b582b5a4S周琰杰 (Zhou Yanjie) 0xffffffff, 0xffffffff, 0x0fffffff, 0xffffffff, 0x33dc3fff, 0x0000fc00,
642b582b5a4S周琰杰 (Zhou Yanjie) };
643b582b5a4S周琰杰 (Zhou Yanjie)
644b582b5a4S周琰杰 (Zhou Yanjie) static const u32 jz4755_pull_downs[6] = {
645b582b5a4S周琰杰 (Zhou Yanjie) 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
646b582b5a4S周琰杰 (Zhou Yanjie) };
647b582b5a4S周琰杰 (Zhou Yanjie)
648b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_uart0_data_pins[] = { 0x7c, 0x7d, };
649b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_uart0_hwflow_pins[] = { 0x7e, 0x7f, };
650b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_uart1_data_pins[] = { 0x97, 0x99, };
651b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_uart2_data_pins[] = { 0x9f, };
652b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_dt_b_pins[] = { 0x3b, };
653b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_dt_f_pins[] = { 0xa1, };
654b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_dr_b_pins[] = { 0x3c, };
655b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_dr_f_pins[] = { 0xa2, };
656b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_clk_b_pins[] = { 0x3a, };
657b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_clk_f_pins[] = { 0xa0, };
658b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_gpc_b_pins[] = { 0x3e, };
659b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_gpc_f_pins[] = { 0xa4, };
660b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_ce0_b_pins[] = { 0x3d, };
661b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_ce0_f_pins[] = { 0xa3, };
662b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_ce1_b_pins[] = { 0x3f, };
663b638e0f1S周琰杰 (Zhou Yanjie) static int jz4755_ssi_ce1_f_pins[] = { 0xa5, };
664b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_mmc0_1bit_pins[] = { 0x2f, 0x50, 0x5c, };
665b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_mmc0_4bit_pins[] = { 0x5d, 0x5b, 0x51, };
666b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_mmc1_1bit_pins[] = { 0x3a, 0x3d, 0x3c, };
667b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_mmc1_4bit_pins[] = { 0x3b, 0x3e, 0x3f, };
668b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_i2c_pins[] = { 0x8c, 0x8d, };
669b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_cim_pins[] = {
670b582b5a4S周琰杰 (Zhou Yanjie) 0x89, 0x8b, 0x8a, 0x88,
671b582b5a4S周琰杰 (Zhou Yanjie) 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
672b582b5a4S周琰杰 (Zhou Yanjie) };
673b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_lcd_8bit_pins[] = {
674b582b5a4S周琰杰 (Zhou Yanjie) 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
675b582b5a4S周琰杰 (Zhou Yanjie) 0x72, 0x73, 0x74,
676b582b5a4S周琰杰 (Zhou Yanjie) };
677b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_lcd_16bit_pins[] = {
678b582b5a4S周琰杰 (Zhou Yanjie) 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
679b582b5a4S周琰杰 (Zhou Yanjie) };
680b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_lcd_18bit_pins[] = { 0x70, 0x71, };
681b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_lcd_24bit_pins[] = { 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, };
682b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_lcd_special_pins[] = { 0x76, 0x77, 0x78, 0x79, };
683b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_lcd_generic_pins[] = { 0x75, };
684b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_nand_cs1_pins[] = { 0x55, };
685b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_nand_cs2_pins[] = { 0x56, };
686b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_nand_cs3_pins[] = { 0x57, };
687b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_nand_cs4_pins[] = { 0x58, };
688b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_nand_fre_fwe_pins[] = { 0x5c, 0x5d, };
689b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_pwm_pwm0_pins[] = { 0x94, };
690b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_pwm_pwm1_pins[] = { 0xab, };
691b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_pwm_pwm2_pins[] = { 0x96, };
692b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_pwm_pwm3_pins[] = { 0x97, };
693b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_pwm_pwm4_pins[] = { 0x98, };
694b582b5a4S周琰杰 (Zhou Yanjie) static int jz4755_pwm_pwm5_pins[] = { 0x99, };
695b582b5a4S周琰杰 (Zhou Yanjie)
696b582b5a4S周琰杰 (Zhou Yanjie) static u8 jz4755_mmc0_1bit_funcs[] = { 2, 2, 1, };
697b582b5a4S周琰杰 (Zhou Yanjie) static u8 jz4755_mmc0_4bit_funcs[] = { 1, 0, 1, };
698b582b5a4S周琰杰 (Zhou Yanjie) static u8 jz4755_lcd_24bit_funcs[] = { 1, 1, 1, 1, 0, 0, };
699b582b5a4S周琰杰 (Zhou Yanjie)
700b582b5a4S周琰杰 (Zhou Yanjie) static const struct group_desc jz4755_groups[] = {
701b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-data", jz4755_uart0_data, 0),
702b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-hwflow", jz4755_uart0_hwflow, 0),
70317747577SSiarhei Volkau INGENIC_PIN_GROUP("uart1-data", jz4755_uart1_data, 1),
704b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart2-data", jz4755_uart2_data, 1),
705b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-dt-b", jz4755_ssi_dt_b, 0),
706b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-dt-f", jz4755_ssi_dt_f, 0),
707b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-dr-b", jz4755_ssi_dr_b, 0),
708b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-dr-f", jz4755_ssi_dr_f, 0),
709b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-clk-b", jz4755_ssi_clk_b, 0),
710b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-clk-f", jz4755_ssi_clk_f, 0),
711b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-gpc-b", jz4755_ssi_gpc_b, 0),
712b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-gpc-f", jz4755_ssi_gpc_f, 0),
713b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-ce0-b", jz4755_ssi_ce0_b, 0),
714b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-ce0-f", jz4755_ssi_ce0_f, 0),
715b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-ce1-b", jz4755_ssi_ce1_b, 0),
716b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-ce1-f", jz4755_ssi_ce1_f, 0),
717b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("mmc0-1bit", jz4755_mmc0_1bit,
718b582b5a4S周琰杰 (Zhou Yanjie) jz4755_mmc0_1bit_funcs),
719b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("mmc0-4bit", jz4755_mmc0_4bit,
720b582b5a4S周琰杰 (Zhou Yanjie) jz4755_mmc0_4bit_funcs),
721b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-1bit", jz4755_mmc1_1bit, 1),
722b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-4bit", jz4755_mmc1_4bit, 1),
723b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c-data", jz4755_i2c, 0),
724b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("cim-data", jz4755_cim, 0),
725b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-8bit", jz4755_lcd_8bit, 0),
726b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-16bit", jz4755_lcd_16bit, 0),
727b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-18bit", jz4755_lcd_18bit, 0),
728b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("lcd-24bit", jz4755_lcd_24bit,
729b582b5a4S周琰杰 (Zhou Yanjie) jz4755_lcd_24bit_funcs),
730b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-special", jz4755_lcd_special, 0),
731b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-generic", jz4755_lcd_generic, 0),
732b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs1", jz4755_nand_cs1, 0),
733b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs2", jz4755_nand_cs2, 0),
734b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs3", jz4755_nand_cs3, 0),
735b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-cs4", jz4755_nand_cs4, 0),
736b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nand-fre-fwe", jz4755_nand_fre_fwe, 0),
737b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm0", jz4755_pwm_pwm0, 0),
738b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm1", jz4755_pwm_pwm1, 1),
739b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm2", jz4755_pwm_pwm2, 0),
740b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm3", jz4755_pwm_pwm3, 0),
741b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm4", jz4755_pwm_pwm4, 0),
742b582b5a4S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm5", jz4755_pwm_pwm5, 0),
743b582b5a4S周琰杰 (Zhou Yanjie) };
744b582b5a4S周琰杰 (Zhou Yanjie)
745b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
746b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_uart1_groups[] = { "uart1-data", };
747b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_uart2_groups[] = { "uart2-data", };
748b638e0f1S周琰杰 (Zhou Yanjie) static const char *jz4755_ssi_groups[] = {
749b638e0f1S周琰杰 (Zhou Yanjie) "ssi-dt-b", "ssi-dt-f",
750b638e0f1S周琰杰 (Zhou Yanjie) "ssi-dr-b", "ssi-dr-f",
751b638e0f1S周琰杰 (Zhou Yanjie) "ssi-clk-b", "ssi-clk-f",
752b638e0f1S周琰杰 (Zhou Yanjie) "ssi-gpc-b", "ssi-gpc-f",
753b638e0f1S周琰杰 (Zhou Yanjie) "ssi-ce0-b", "ssi-ce0-f",
754b638e0f1S周琰杰 (Zhou Yanjie) "ssi-ce1-b", "ssi-ce1-f",
755b638e0f1S周琰杰 (Zhou Yanjie) };
756b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_mmc0_groups[] = { "mmc0-1bit", "mmc0-4bit", };
75717747577SSiarhei Volkau static const char *jz4755_mmc1_groups[] = { "mmc1-1bit", "mmc1-4bit", };
758b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_i2c_groups[] = { "i2c-data", };
759b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_cim_groups[] = { "cim-data", };
760b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_lcd_groups[] = {
761b582b5a4S周琰杰 (Zhou Yanjie) "lcd-8bit", "lcd-16bit", "lcd-18bit", "lcd-24bit",
762b582b5a4S周琰杰 (Zhou Yanjie) "lcd-special", "lcd-generic",
763b582b5a4S周琰杰 (Zhou Yanjie) };
764b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_nand_groups[] = {
765b582b5a4S周琰杰 (Zhou Yanjie) "nand-cs1", "nand-cs2", "nand-cs3", "nand-cs4", "nand-fre-fwe",
766b582b5a4S周琰杰 (Zhou Yanjie) };
767b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_pwm0_groups[] = { "pwm0", };
768b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_pwm1_groups[] = { "pwm1", };
769b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_pwm2_groups[] = { "pwm2", };
770b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_pwm3_groups[] = { "pwm3", };
771b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_pwm4_groups[] = { "pwm4", };
772b582b5a4S周琰杰 (Zhou Yanjie) static const char *jz4755_pwm5_groups[] = { "pwm5", };
773b582b5a4S周琰杰 (Zhou Yanjie)
774b582b5a4S周琰杰 (Zhou Yanjie) static const struct function_desc jz4755_functions[] = {
7757f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", jz4755_uart0),
7767f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", jz4755_uart1),
7777f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", jz4755_uart2),
7787f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi", jz4755_ssi),
7797f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", jz4755_mmc0),
7807f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", jz4755_mmc1),
7817f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c", jz4755_i2c),
7827f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", jz4755_cim),
7837f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", jz4755_lcd),
7847f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nand", jz4755_nand),
7857f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", jz4755_pwm0),
7867f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", jz4755_pwm1),
7877f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", jz4755_pwm2),
7887f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", jz4755_pwm3),
7897f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", jz4755_pwm4),
7907f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", jz4755_pwm5),
791b582b5a4S周琰杰 (Zhou Yanjie) };
792b582b5a4S周琰杰 (Zhou Yanjie)
793b582b5a4S周琰杰 (Zhou Yanjie) static const struct ingenic_chip_info jz4755_chip_info = {
794b582b5a4S周琰杰 (Zhou Yanjie) .num_chips = 6,
795b582b5a4S周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
796b582b5a4S周琰杰 (Zhou Yanjie) .version = ID_JZ4755,
797b582b5a4S周琰杰 (Zhou Yanjie) .groups = jz4755_groups,
798b582b5a4S周琰杰 (Zhou Yanjie) .num_groups = ARRAY_SIZE(jz4755_groups),
799b582b5a4S周琰杰 (Zhou Yanjie) .functions = jz4755_functions,
800b582b5a4S周琰杰 (Zhou Yanjie) .num_functions = ARRAY_SIZE(jz4755_functions),
801b582b5a4S周琰杰 (Zhou Yanjie) .pull_ups = jz4755_pull_ups,
802b582b5a4S周琰杰 (Zhou Yanjie) .pull_downs = jz4755_pull_downs,
803b582b5a4S周琰杰 (Zhou Yanjie) };
804b582b5a4S周琰杰 (Zhou Yanjie)
8050257595aSZhou Yanjie static const u32 jz4760_pull_ups[6] = {
806d5e93140SPaul Cercueil 0xffffffff, 0xfffcf3ff, 0xffffffff, 0xffffcfff, 0xfffffb7c, 0x0000000f,
8070257595aSZhou Yanjie };
8080257595aSZhou Yanjie
8090257595aSZhou Yanjie static const u32 jz4760_pull_downs[6] = {
8100257595aSZhou Yanjie 0x00000000, 0x00030c00, 0x00000000, 0x00003000, 0x00000483, 0x00000ff0,
8110257595aSZhou Yanjie };
8120257595aSZhou Yanjie
8130257595aSZhou Yanjie static int jz4760_uart0_data_pins[] = { 0xa0, 0xa3, };
8140257595aSZhou Yanjie static int jz4760_uart0_hwflow_pins[] = { 0xa1, 0xa2, };
8150257595aSZhou Yanjie static int jz4760_uart1_data_pins[] = { 0x7a, 0x7c, };
8160257595aSZhou Yanjie static int jz4760_uart1_hwflow_pins[] = { 0x7b, 0x7d, };
8170257595aSZhou Yanjie static int jz4760_uart2_data_pins[] = { 0x5c, 0x5e, };
8180257595aSZhou Yanjie static int jz4760_uart2_hwflow_pins[] = { 0x5d, 0x5f, };
8190257595aSZhou Yanjie static int jz4760_uart3_data_pins[] = { 0x6c, 0x85, };
8200257595aSZhou Yanjie static int jz4760_uart3_hwflow_pins[] = { 0x88, 0x89, };
821b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_dt_a_pins[] = { 0x15, };
822b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_dt_b_pins[] = { 0x35, };
823b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_dt_d_pins[] = { 0x75, };
824b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_dt_e_pins[] = { 0x91, };
825b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_dr_a_pins[] = { 0x14, };
826b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_dr_b_pins[] = { 0x34, };
827b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_dr_d_pins[] = { 0x74, };
828b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_dr_e_pins[] = { 0x8e, };
829b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_clk_a_pins[] = { 0x12, };
830b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_clk_b_pins[] = { 0x3c, };
831b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_clk_d_pins[] = { 0x78, };
832b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_clk_e_pins[] = { 0x8f, };
833b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_gpc_b_pins[] = { 0x3e, };
834b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_gpc_d_pins[] = { 0x76, };
835b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_gpc_e_pins[] = { 0x93, };
836b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_ce0_a_pins[] = { 0x13, };
837b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_ce0_b_pins[] = { 0x3d, };
838b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_ce0_d_pins[] = { 0x79, };
839b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_ce0_e_pins[] = { 0x90, };
840b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_ce1_b_pins[] = { 0x3f, };
841b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_ce1_d_pins[] = { 0x77, };
842b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi0_ce1_e_pins[] = { 0x92, };
843b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dt_b_9_pins[] = { 0x29, };
844b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dt_b_21_pins[] = { 0x35, };
845b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dt_d_12_pins[] = { 0x6c, };
846b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dt_d_21_pins[] = { 0x75, };
847b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dt_e_pins[] = { 0x91, };
848b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dt_f_pins[] = { 0xa3, };
849b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dr_b_6_pins[] = { 0x26, };
850b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dr_b_20_pins[] = { 0x34, };
851b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dr_d_13_pins[] = { 0x6d, };
852b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dr_d_20_pins[] = { 0x74, };
853b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dr_e_pins[] = { 0x8e, };
854b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_dr_f_pins[] = { 0xa0, };
855b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_clk_b_7_pins[] = { 0x27, };
856b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_clk_b_28_pins[] = { 0x3c, };
857b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_clk_d_pins[] = { 0x78, };
858b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_clk_e_7_pins[] = { 0x87, };
859b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_clk_e_15_pins[] = { 0x8f, };
860b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_clk_f_pins[] = { 0xa2, };
861b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_gpc_b_pins[] = { 0x3e, };
862b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_gpc_d_pins[] = { 0x76, };
863b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_gpc_e_pins[] = { 0x93, };
864b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_ce0_b_8_pins[] = { 0x28, };
865b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_ce0_b_29_pins[] = { 0x3d, };
866b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_ce0_d_pins[] = { 0x79, };
867b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_ce0_e_6_pins[] = { 0x86, };
868b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_ce0_e_16_pins[] = { 0x90, };
869b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_ce0_f_pins[] = { 0xa1, };
870b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_ce1_b_pins[] = { 0x3f, };
871b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_ce1_d_pins[] = { 0x77, };
872b638e0f1S周琰杰 (Zhou Yanjie) static int jz4760_ssi1_ce1_e_pins[] = { 0x92, };
8730257595aSZhou Yanjie static int jz4760_mmc0_1bit_a_pins[] = { 0x12, 0x13, 0x14, };
8740257595aSZhou Yanjie static int jz4760_mmc0_4bit_a_pins[] = { 0x15, 0x16, 0x17, };
8750257595aSZhou Yanjie static int jz4760_mmc0_1bit_e_pins[] = { 0x9c, 0x9d, 0x94, };
8760257595aSZhou Yanjie static int jz4760_mmc0_4bit_e_pins[] = { 0x95, 0x96, 0x97, };
8770257595aSZhou Yanjie static int jz4760_mmc0_8bit_e_pins[] = { 0x98, 0x99, 0x9a, 0x9b, };
8780257595aSZhou Yanjie static int jz4760_mmc1_1bit_d_pins[] = { 0x78, 0x79, 0x74, };
8790257595aSZhou Yanjie static int jz4760_mmc1_4bit_d_pins[] = { 0x75, 0x76, 0x77, };
8800257595aSZhou Yanjie static int jz4760_mmc1_1bit_e_pins[] = { 0x9c, 0x9d, 0x94, };
8810257595aSZhou Yanjie static int jz4760_mmc1_4bit_e_pins[] = { 0x95, 0x96, 0x97, };
8820257595aSZhou Yanjie static int jz4760_mmc1_8bit_e_pins[] = { 0x98, 0x99, 0x9a, 0x9b, };
8830257595aSZhou Yanjie static int jz4760_mmc2_1bit_b_pins[] = { 0x3c, 0x3d, 0x34, };
8840257595aSZhou Yanjie static int jz4760_mmc2_4bit_b_pins[] = { 0x35, 0x3e, 0x3f, };
8850257595aSZhou Yanjie static int jz4760_mmc2_1bit_e_pins[] = { 0x9c, 0x9d, 0x94, };
8860257595aSZhou Yanjie static int jz4760_mmc2_4bit_e_pins[] = { 0x95, 0x96, 0x97, };
8870257595aSZhou Yanjie static int jz4760_mmc2_8bit_e_pins[] = { 0x98, 0x99, 0x9a, 0x9b, };
8880257595aSZhou Yanjie static int jz4760_nemc_8bit_data_pins[] = {
8890257595aSZhou Yanjie 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
8900257595aSZhou Yanjie };
8910257595aSZhou Yanjie static int jz4760_nemc_16bit_data_pins[] = {
8920257595aSZhou Yanjie 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
8930257595aSZhou Yanjie };
8940257595aSZhou Yanjie static int jz4760_nemc_cle_ale_pins[] = { 0x20, 0x21, };
8950257595aSZhou Yanjie static int jz4760_nemc_addr_pins[] = { 0x22, 0x23, 0x24, 0x25, };
8960257595aSZhou Yanjie static int jz4760_nemc_rd_we_pins[] = { 0x10, 0x11, };
8970257595aSZhou Yanjie static int jz4760_nemc_frd_fwe_pins[] = { 0x12, 0x13, };
8980257595aSZhou Yanjie static int jz4760_nemc_wait_pins[] = { 0x1b, };
8990257595aSZhou Yanjie static int jz4760_nemc_cs1_pins[] = { 0x15, };
9000257595aSZhou Yanjie static int jz4760_nemc_cs2_pins[] = { 0x16, };
9010257595aSZhou Yanjie static int jz4760_nemc_cs3_pins[] = { 0x17, };
9020257595aSZhou Yanjie static int jz4760_nemc_cs4_pins[] = { 0x18, };
9030257595aSZhou Yanjie static int jz4760_nemc_cs5_pins[] = { 0x19, };
9040257595aSZhou Yanjie static int jz4760_nemc_cs6_pins[] = { 0x1a, };
9050257595aSZhou Yanjie static int jz4760_i2c0_pins[] = { 0x7e, 0x7f, };
9060257595aSZhou Yanjie static int jz4760_i2c1_pins[] = { 0x9e, 0x9f, };
9070257595aSZhou Yanjie static int jz4760_cim_pins[] = {
9080257595aSZhou Yanjie 0x26, 0x27, 0x28, 0x29,
9090257595aSZhou Yanjie 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
9100257595aSZhou Yanjie };
911dd1ccfd6SPaul Cercueil static int jz4760_lcd_8bit_pins[] = {
912dd1ccfd6SPaul Cercueil 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x4c,
913dd1ccfd6SPaul Cercueil 0x4d, 0x52, 0x53,
9140257595aSZhou Yanjie };
915dd1ccfd6SPaul Cercueil static int jz4760_lcd_16bit_pins[] = {
916dd1ccfd6SPaul Cercueil 0x4e, 0x4f, 0x50, 0x51, 0x56, 0x57, 0x58, 0x59,
917dd1ccfd6SPaul Cercueil };
918dd1ccfd6SPaul Cercueil static int jz4760_lcd_18bit_pins[] = {
919dd1ccfd6SPaul Cercueil 0x5a, 0x5b,
920dd1ccfd6SPaul Cercueil };
921dd1ccfd6SPaul Cercueil static int jz4760_lcd_24bit_pins[] = {
922dd1ccfd6SPaul Cercueil 0x40, 0x41, 0x4a, 0x4b, 0x54, 0x55,
923dd1ccfd6SPaul Cercueil };
9245e6332a7S周琰杰 (Zhou Yanjie) static int jz4760_lcd_special_pins[] = { 0x54, 0x4a, 0x41, 0x40, };
925dd1ccfd6SPaul Cercueil static int jz4760_lcd_generic_pins[] = { 0x49, };
9260257595aSZhou Yanjie static int jz4760_pwm_pwm0_pins[] = { 0x80, };
9270257595aSZhou Yanjie static int jz4760_pwm_pwm1_pins[] = { 0x81, };
9280257595aSZhou Yanjie static int jz4760_pwm_pwm2_pins[] = { 0x82, };
9290257595aSZhou Yanjie static int jz4760_pwm_pwm3_pins[] = { 0x83, };
9300257595aSZhou Yanjie static int jz4760_pwm_pwm4_pins[] = { 0x84, };
9310257595aSZhou Yanjie static int jz4760_pwm_pwm5_pins[] = { 0x85, };
9320257595aSZhou Yanjie static int jz4760_pwm_pwm6_pins[] = { 0x6a, };
9330257595aSZhou Yanjie static int jz4760_pwm_pwm7_pins[] = { 0x6b, };
934dd1ccfd6SPaul Cercueil static int jz4760_otg_pins[] = { 0x8a, };
9350257595aSZhou Yanjie
936bb42b593SPaul Cercueil static u8 jz4760_uart3_data_funcs[] = { 0, 1, };
937bb42b593SPaul Cercueil static u8 jz4760_mmc0_1bit_a_funcs[] = { 1, 1, 0, };
9380257595aSZhou Yanjie
9390257595aSZhou Yanjie static const struct group_desc jz4760_groups[] = {
940bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-data", jz4760_uart0_data, 0),
941bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-hwflow", jz4760_uart0_hwflow, 0),
942bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-data", jz4760_uart1_data, 0),
943bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-hwflow", jz4760_uart1_hwflow, 0),
944bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-data", jz4760_uart2_data, 0),
945bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-hwflow", jz4760_uart2_hwflow, 0),
946bb42b593SPaul Cercueil INGENIC_PIN_GROUP_FUNCS("uart3-data", jz4760_uart3_data,
947bb42b593SPaul Cercueil jz4760_uart3_data_funcs),
948bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart3-hwflow", jz4760_uart3_hwflow, 0),
949b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dt-a", jz4760_ssi0_dt_a, 2),
950b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dt-b", jz4760_ssi0_dt_b, 1),
951b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dt-d", jz4760_ssi0_dt_d, 1),
952b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dt-e", jz4760_ssi0_dt_e, 0),
953b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dr-a", jz4760_ssi0_dr_a, 1),
954b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dr-b", jz4760_ssi0_dr_b, 1),
955b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dr-d", jz4760_ssi0_dr_d, 1),
956b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dr-e", jz4760_ssi0_dr_e, 0),
957b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-clk-a", jz4760_ssi0_clk_a, 2),
958b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-clk-b", jz4760_ssi0_clk_b, 1),
959b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-clk-d", jz4760_ssi0_clk_d, 1),
960b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-clk-e", jz4760_ssi0_clk_e, 0),
961b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-gpc-b", jz4760_ssi0_gpc_b, 1),
962b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-gpc-d", jz4760_ssi0_gpc_d, 1),
963b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-gpc-e", jz4760_ssi0_gpc_e, 0),
964b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce0-a", jz4760_ssi0_ce0_a, 2),
965b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce0-b", jz4760_ssi0_ce0_b, 1),
966b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce0-d", jz4760_ssi0_ce0_d, 1),
967b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce0-e", jz4760_ssi0_ce0_e, 0),
968b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce1-b", jz4760_ssi0_ce1_b, 1),
969b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce1-d", jz4760_ssi0_ce1_d, 1),
970b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce1-e", jz4760_ssi0_ce1_e, 0),
971b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-b-9", jz4760_ssi1_dt_b_9, 2),
972b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-b-21", jz4760_ssi1_dt_b_21, 2),
973b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-d-12", jz4760_ssi1_dt_d_12, 2),
974b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-d-21", jz4760_ssi1_dt_d_21, 2),
975b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-e", jz4760_ssi1_dt_e, 1),
976b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-f", jz4760_ssi1_dt_f, 2),
977b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-b-6", jz4760_ssi1_dr_b_6, 2),
978b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-b-20", jz4760_ssi1_dr_b_20, 2),
979b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-d-13", jz4760_ssi1_dr_d_13, 2),
980b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-d-20", jz4760_ssi1_dr_d_20, 2),
981b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-e", jz4760_ssi1_dr_e, 1),
982b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-f", jz4760_ssi1_dr_f, 2),
983b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-b-7", jz4760_ssi1_clk_b_7, 2),
984b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-b-28", jz4760_ssi1_clk_b_28, 2),
985b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-d", jz4760_ssi1_clk_d, 2),
986b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-e-7", jz4760_ssi1_clk_e_7, 2),
987b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-e-15", jz4760_ssi1_clk_e_15, 1),
988b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-f", jz4760_ssi1_clk_f, 2),
989b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-gpc-b", jz4760_ssi1_gpc_b, 2),
990b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-gpc-d", jz4760_ssi1_gpc_d, 2),
991b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-gpc-e", jz4760_ssi1_gpc_e, 1),
992b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce0-b-8", jz4760_ssi1_ce0_b_8, 2),
993b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce0-b-29", jz4760_ssi1_ce0_b_29, 2),
994b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce0-d", jz4760_ssi1_ce0_d, 2),
995b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce0-e-6", jz4760_ssi1_ce0_e_6, 2),
996b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce0-e-16", jz4760_ssi1_ce0_e_16, 1),
997b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce0-f", jz4760_ssi1_ce0_f, 2),
998b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce1-b", jz4760_ssi1_ce1_b, 2),
999b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce1-d", jz4760_ssi1_ce1_d, 2),
1000b638e0f1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce1-e", jz4760_ssi1_ce1_e, 1),
1001bb42b593SPaul Cercueil INGENIC_PIN_GROUP_FUNCS("mmc0-1bit-a", jz4760_mmc0_1bit_a,
1002bb42b593SPaul Cercueil jz4760_mmc0_1bit_a_funcs),
1003bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-4bit-a", jz4760_mmc0_4bit_a, 1),
1004bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-1bit-e", jz4760_mmc0_1bit_e, 0),
1005bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-4bit-e", jz4760_mmc0_4bit_e, 0),
1006bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-8bit-e", jz4760_mmc0_8bit_e, 0),
1007bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-1bit-d", jz4760_mmc1_1bit_d, 0),
1008bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-4bit-d", jz4760_mmc1_4bit_d, 0),
1009bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-1bit-e", jz4760_mmc1_1bit_e, 1),
1010bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-4bit-e", jz4760_mmc1_4bit_e, 1),
1011bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-8bit-e", jz4760_mmc1_8bit_e, 1),
1012bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-1bit-b", jz4760_mmc2_1bit_b, 0),
1013bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-4bit-b", jz4760_mmc2_4bit_b, 0),
1014bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-1bit-e", jz4760_mmc2_1bit_e, 2),
1015bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-4bit-e", jz4760_mmc2_4bit_e, 2),
1016bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-8bit-e", jz4760_mmc2_8bit_e, 2),
1017bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-8bit-data", jz4760_nemc_8bit_data, 0),
1018bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-16bit-data", jz4760_nemc_16bit_data, 0),
1019bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cle-ale", jz4760_nemc_cle_ale, 0),
1020bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-addr", jz4760_nemc_addr, 0),
1021bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-rd-we", jz4760_nemc_rd_we, 0),
1022bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-frd-fwe", jz4760_nemc_frd_fwe, 0),
1023bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-wait", jz4760_nemc_wait, 0),
1024bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs1", jz4760_nemc_cs1, 0),
1025bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs2", jz4760_nemc_cs2, 0),
1026bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs3", jz4760_nemc_cs3, 0),
1027bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs4", jz4760_nemc_cs4, 0),
1028bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs5", jz4760_nemc_cs5, 0),
1029bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs6", jz4760_nemc_cs6, 0),
1030bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c0-data", jz4760_i2c0, 0),
1031bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c1-data", jz4760_i2c1, 0),
1032bb42b593SPaul Cercueil INGENIC_PIN_GROUP("cim-data", jz4760_cim, 0),
1033dd1ccfd6SPaul Cercueil INGENIC_PIN_GROUP("lcd-8bit", jz4760_lcd_8bit, 0),
1034dd1ccfd6SPaul Cercueil INGENIC_PIN_GROUP("lcd-16bit", jz4760_lcd_16bit, 0),
1035dd1ccfd6SPaul Cercueil INGENIC_PIN_GROUP("lcd-18bit", jz4760_lcd_18bit, 0),
1036bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-24bit", jz4760_lcd_24bit, 0),
1037dd1ccfd6SPaul Cercueil INGENIC_PIN_GROUP("lcd-special", jz4760_lcd_special, 1),
10385e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-generic", jz4760_lcd_generic, 0),
1039bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm0", jz4760_pwm_pwm0, 0),
1040bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm1", jz4760_pwm_pwm1, 0),
1041bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm2", jz4760_pwm_pwm2, 0),
1042bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm3", jz4760_pwm_pwm3, 0),
1043bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm4", jz4760_pwm_pwm4, 0),
1044bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm5", jz4760_pwm_pwm5, 0),
1045bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm6", jz4760_pwm_pwm6, 0),
1046bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm7", jz4760_pwm_pwm7, 0),
1047dd1ccfd6SPaul Cercueil INGENIC_PIN_GROUP("otg-vbus", jz4760_otg, 0),
10480257595aSZhou Yanjie };
10490257595aSZhou Yanjie
10500257595aSZhou Yanjie static const char *jz4760_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
10510257595aSZhou Yanjie static const char *jz4760_uart1_groups[] = { "uart1-data", "uart1-hwflow", };
10520257595aSZhou Yanjie static const char *jz4760_uart2_groups[] = { "uart2-data", "uart2-hwflow", };
10530257595aSZhou Yanjie static const char *jz4760_uart3_groups[] = { "uart3-data", "uart3-hwflow", };
1054b638e0f1S周琰杰 (Zhou Yanjie) static const char *jz4760_ssi0_groups[] = {
1055b638e0f1S周琰杰 (Zhou Yanjie) "ssi0-dt-a", "ssi0-dt-b", "ssi0-dt-d", "ssi0-dt-e",
1056b638e0f1S周琰杰 (Zhou Yanjie) "ssi0-dr-a", "ssi0-dr-b", "ssi0-dr-d", "ssi0-dr-e",
1057b638e0f1S周琰杰 (Zhou Yanjie) "ssi0-clk-a", "ssi0-clk-b", "ssi0-clk-d", "ssi0-clk-e",
1058b638e0f1S周琰杰 (Zhou Yanjie) "ssi0-gpc-b", "ssi0-gpc-d", "ssi0-gpc-e",
1059b638e0f1S周琰杰 (Zhou Yanjie) "ssi0-ce0-a", "ssi0-ce0-b", "ssi0-ce0-d", "ssi0-ce0-e",
1060b638e0f1S周琰杰 (Zhou Yanjie) "ssi0-ce1-b", "ssi0-ce1-d", "ssi0-ce1-e",
1061b638e0f1S周琰杰 (Zhou Yanjie) };
1062b638e0f1S周琰杰 (Zhou Yanjie) static const char *jz4760_ssi1_groups[] = {
1063b638e0f1S周琰杰 (Zhou Yanjie) "ssi1-dt-b-9", "ssi1-dt-b-21", "ssi1-dt-d-12", "ssi1-dt-d-21", "ssi1-dt-e", "ssi1-dt-f",
1064b638e0f1S周琰杰 (Zhou Yanjie) "ssi1-dr-b-6", "ssi1-dr-b-20", "ssi1-dr-d-13", "ssi1-dr-d-20", "ssi1-dr-e", "ssi1-dr-f",
1065b638e0f1S周琰杰 (Zhou Yanjie) "ssi1-clk-b-7", "ssi1-clk-b-28", "ssi1-clk-d", "ssi1-clk-e-7", "ssi1-clk-e-15", "ssi1-clk-f",
1066b638e0f1S周琰杰 (Zhou Yanjie) "ssi1-gpc-b", "ssi1-gpc-d", "ssi1-gpc-e",
1067b638e0f1S周琰杰 (Zhou Yanjie) "ssi1-ce0-b-8", "ssi1-ce0-b-29", "ssi1-ce0-d", "ssi1-ce0-e-6", "ssi1-ce0-e-16", "ssi1-ce0-f",
1068b638e0f1S周琰杰 (Zhou Yanjie) "ssi1-ce1-b", "ssi1-ce1-d", "ssi1-ce1-e",
1069b638e0f1S周琰杰 (Zhou Yanjie) };
10700257595aSZhou Yanjie static const char *jz4760_mmc0_groups[] = {
10710257595aSZhou Yanjie "mmc0-1bit-a", "mmc0-4bit-a",
10720257595aSZhou Yanjie "mmc0-1bit-e", "mmc0-4bit-e", "mmc0-8bit-e",
10730257595aSZhou Yanjie };
10740257595aSZhou Yanjie static const char *jz4760_mmc1_groups[] = {
10750257595aSZhou Yanjie "mmc1-1bit-d", "mmc1-4bit-d",
10760257595aSZhou Yanjie "mmc1-1bit-e", "mmc1-4bit-e", "mmc1-8bit-e",
10770257595aSZhou Yanjie };
10780257595aSZhou Yanjie static const char *jz4760_mmc2_groups[] = {
10790257595aSZhou Yanjie "mmc2-1bit-b", "mmc2-4bit-b",
10800257595aSZhou Yanjie "mmc2-1bit-e", "mmc2-4bit-e", "mmc2-8bit-e",
10810257595aSZhou Yanjie };
10820257595aSZhou Yanjie static const char *jz4760_nemc_groups[] = {
10830257595aSZhou Yanjie "nemc-8bit-data", "nemc-16bit-data", "nemc-cle-ale",
10840257595aSZhou Yanjie "nemc-addr", "nemc-rd-we", "nemc-frd-fwe", "nemc-wait",
10850257595aSZhou Yanjie };
10860257595aSZhou Yanjie static const char *jz4760_cs1_groups[] = { "nemc-cs1", };
10870257595aSZhou Yanjie static const char *jz4760_cs2_groups[] = { "nemc-cs2", };
10880257595aSZhou Yanjie static const char *jz4760_cs3_groups[] = { "nemc-cs3", };
10890257595aSZhou Yanjie static const char *jz4760_cs4_groups[] = { "nemc-cs4", };
10900257595aSZhou Yanjie static const char *jz4760_cs5_groups[] = { "nemc-cs5", };
10910257595aSZhou Yanjie static const char *jz4760_cs6_groups[] = { "nemc-cs6", };
10920257595aSZhou Yanjie static const char *jz4760_i2c0_groups[] = { "i2c0-data", };
10930257595aSZhou Yanjie static const char *jz4760_i2c1_groups[] = { "i2c1-data", };
10940257595aSZhou Yanjie static const char *jz4760_cim_groups[] = { "cim-data", };
1095dd1ccfd6SPaul Cercueil static const char *jz4760_lcd_groups[] = {
1096dd1ccfd6SPaul Cercueil "lcd-8bit", "lcd-16bit", "lcd-18bit", "lcd-24bit",
1097dd1ccfd6SPaul Cercueil "lcd-special", "lcd-generic",
1098dd1ccfd6SPaul Cercueil };
10990257595aSZhou Yanjie static const char *jz4760_pwm0_groups[] = { "pwm0", };
11000257595aSZhou Yanjie static const char *jz4760_pwm1_groups[] = { "pwm1", };
11010257595aSZhou Yanjie static const char *jz4760_pwm2_groups[] = { "pwm2", };
11020257595aSZhou Yanjie static const char *jz4760_pwm3_groups[] = { "pwm3", };
11030257595aSZhou Yanjie static const char *jz4760_pwm4_groups[] = { "pwm4", };
11040257595aSZhou Yanjie static const char *jz4760_pwm5_groups[] = { "pwm5", };
11050257595aSZhou Yanjie static const char *jz4760_pwm6_groups[] = { "pwm6", };
11060257595aSZhou Yanjie static const char *jz4760_pwm7_groups[] = { "pwm7", };
1107dd1ccfd6SPaul Cercueil static const char *jz4760_otg_groups[] = { "otg-vbus", };
11080257595aSZhou Yanjie
11090257595aSZhou Yanjie static const struct function_desc jz4760_functions[] = {
11107f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", jz4760_uart0),
11117f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", jz4760_uart1),
11127f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", jz4760_uart2),
11137f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart3", jz4760_uart3),
11147f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi0", jz4760_ssi0),
11157f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi1", jz4760_ssi1),
11167f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", jz4760_mmc0),
11177f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", jz4760_mmc1),
11187f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc2", jz4760_mmc2),
11197f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc", jz4760_nemc),
11207f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs1", jz4760_cs1),
11217f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs2", jz4760_cs2),
11227f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs3", jz4760_cs3),
11237f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs4", jz4760_cs4),
11247f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs5", jz4760_cs5),
11257f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs6", jz4760_cs6),
11267f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c0", jz4760_i2c0),
11277f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c1", jz4760_i2c1),
11287f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", jz4760_cim),
11297f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", jz4760_lcd),
11307f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", jz4760_pwm0),
11317f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", jz4760_pwm1),
11327f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", jz4760_pwm2),
11337f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", jz4760_pwm3),
11347f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", jz4760_pwm4),
11357f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", jz4760_pwm5),
11367f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm6", jz4760_pwm6),
11377f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm7", jz4760_pwm7),
11387f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("otg", jz4760_otg),
11390257595aSZhou Yanjie };
11400257595aSZhou Yanjie
11410257595aSZhou Yanjie static const struct ingenic_chip_info jz4760_chip_info = {
11420257595aSZhou Yanjie .num_chips = 6,
1143f742e5ebS周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
1144baf15647SPaul Cercueil .version = ID_JZ4760,
11450257595aSZhou Yanjie .groups = jz4760_groups,
11460257595aSZhou Yanjie .num_groups = ARRAY_SIZE(jz4760_groups),
11470257595aSZhou Yanjie .functions = jz4760_functions,
11480257595aSZhou Yanjie .num_functions = ARRAY_SIZE(jz4760_functions),
11490257595aSZhou Yanjie .pull_ups = jz4760_pull_ups,
11500257595aSZhou Yanjie .pull_downs = jz4760_pull_downs,
11510257595aSZhou Yanjie };
11520257595aSZhou Yanjie
1153b5c23aa4SPaul Cercueil static const u32 jz4770_pull_ups[6] = {
1154d5e93140SPaul Cercueil 0x3fffffff, 0xfff0f3fc, 0xffffffff, 0xffff4fff, 0xfffffb7c, 0x0024f00f,
1155b5c23aa4SPaul Cercueil };
1156b5c23aa4SPaul Cercueil
1157b5c23aa4SPaul Cercueil static const u32 jz4770_pull_downs[6] = {
1158d5e93140SPaul Cercueil 0x00000000, 0x000f0c03, 0x00000000, 0x0000b000, 0x00000483, 0x005b0ff0,
1159b5c23aa4SPaul Cercueil };
1160b5c23aa4SPaul Cercueil
1161b5c23aa4SPaul Cercueil static int jz4770_uart0_data_pins[] = { 0xa0, 0xa3, };
1162b5c23aa4SPaul Cercueil static int jz4770_uart0_hwflow_pins[] = { 0xa1, 0xa2, };
1163b5c23aa4SPaul Cercueil static int jz4770_uart1_data_pins[] = { 0x7a, 0x7c, };
1164b5c23aa4SPaul Cercueil static int jz4770_uart1_hwflow_pins[] = { 0x7b, 0x7d, };
1165ff656e47SZhou Yanjie static int jz4770_uart2_data_pins[] = { 0x5c, 0x5e, };
1166ff656e47SZhou Yanjie static int jz4770_uart2_hwflow_pins[] = { 0x5d, 0x5f, };
1167b5c23aa4SPaul Cercueil static int jz4770_uart3_data_pins[] = { 0x6c, 0x85, };
1168b5c23aa4SPaul Cercueil static int jz4770_uart3_hwflow_pins[] = { 0x88, 0x89, };
1169d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_dt_a_pins[] = { 0x15, };
1170d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_dt_b_pins[] = { 0x35, };
1171f83c2609SPaul Cercueil static int jz4770_ssi0_dt_d_pins[] = { 0x75, };
1172f83c2609SPaul Cercueil static int jz4770_ssi0_dt_e_pins[] = { 0x91, };
1173d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_dr_a_pins[] = { 0x14, };
1174d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_dr_b_pins[] = { 0x34, };
1175f83c2609SPaul Cercueil static int jz4770_ssi0_dr_d_pins[] = { 0x74, };
1176f83c2609SPaul Cercueil static int jz4770_ssi0_dr_e_pins[] = { 0x8e, };
1177d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_clk_a_pins[] = { 0x12, };
1178d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_clk_b_pins[] = { 0x3c, };
1179f83c2609SPaul Cercueil static int jz4770_ssi0_clk_d_pins[] = { 0x78, };
1180f83c2609SPaul Cercueil static int jz4770_ssi0_clk_e_pins[] = { 0x8f, };
1181d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_gpc_b_pins[] = { 0x3e, };
1182f83c2609SPaul Cercueil static int jz4770_ssi0_gpc_d_pins[] = { 0x76, };
1183f83c2609SPaul Cercueil static int jz4770_ssi0_gpc_e_pins[] = { 0x93, };
1184d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_ce0_a_pins[] = { 0x13, };
1185d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_ce0_b_pins[] = { 0x3d, };
1186f83c2609SPaul Cercueil static int jz4770_ssi0_ce0_d_pins[] = { 0x79, };
1187f83c2609SPaul Cercueil static int jz4770_ssi0_ce0_e_pins[] = { 0x90, };
1188d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi0_ce1_b_pins[] = { 0x3f, };
1189f83c2609SPaul Cercueil static int jz4770_ssi0_ce1_d_pins[] = { 0x77, };
1190f83c2609SPaul Cercueil static int jz4770_ssi0_ce1_e_pins[] = { 0x92, };
1191d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi1_dt_b_pins[] = { 0x35, };
1192f83c2609SPaul Cercueil static int jz4770_ssi1_dt_d_pins[] = { 0x75, };
1193f83c2609SPaul Cercueil static int jz4770_ssi1_dt_e_pins[] = { 0x91, };
1194d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi1_dr_b_pins[] = { 0x34, };
1195f83c2609SPaul Cercueil static int jz4770_ssi1_dr_d_pins[] = { 0x74, };
1196f83c2609SPaul Cercueil static int jz4770_ssi1_dr_e_pins[] = { 0x8e, };
1197d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi1_clk_b_pins[] = { 0x3c, };
1198f83c2609SPaul Cercueil static int jz4770_ssi1_clk_d_pins[] = { 0x78, };
1199f83c2609SPaul Cercueil static int jz4770_ssi1_clk_e_pins[] = { 0x8f, };
1200d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi1_gpc_b_pins[] = { 0x3e, };
1201f83c2609SPaul Cercueil static int jz4770_ssi1_gpc_d_pins[] = { 0x76, };
1202f83c2609SPaul Cercueil static int jz4770_ssi1_gpc_e_pins[] = { 0x93, };
1203d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi1_ce0_b_pins[] = { 0x3d, };
1204f83c2609SPaul Cercueil static int jz4770_ssi1_ce0_d_pins[] = { 0x79, };
1205f83c2609SPaul Cercueil static int jz4770_ssi1_ce0_e_pins[] = { 0x90, };
1206d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4770_ssi1_ce1_b_pins[] = { 0x3f, };
1207f83c2609SPaul Cercueil static int jz4770_ssi1_ce1_d_pins[] = { 0x77, };
1208f83c2609SPaul Cercueil static int jz4770_ssi1_ce1_e_pins[] = { 0x92, };
1209b5c23aa4SPaul Cercueil static int jz4770_mmc0_1bit_a_pins[] = { 0x12, 0x13, 0x14, };
1210ff656e47SZhou Yanjie static int jz4770_mmc0_4bit_a_pins[] = { 0x15, 0x16, 0x17, };
1211b5c23aa4SPaul Cercueil static int jz4770_mmc0_1bit_e_pins[] = { 0x9c, 0x9d, 0x94, };
1212ff656e47SZhou Yanjie static int jz4770_mmc0_4bit_e_pins[] = { 0x95, 0x96, 0x97, };
1213ff656e47SZhou Yanjie static int jz4770_mmc0_8bit_e_pins[] = { 0x98, 0x99, 0x9a, 0x9b, };
1214b5c23aa4SPaul Cercueil static int jz4770_mmc1_1bit_d_pins[] = { 0x78, 0x79, 0x74, };
1215ff656e47SZhou Yanjie static int jz4770_mmc1_4bit_d_pins[] = { 0x75, 0x76, 0x77, };
1216b5c23aa4SPaul Cercueil static int jz4770_mmc1_1bit_e_pins[] = { 0x9c, 0x9d, 0x94, };
1217ff656e47SZhou Yanjie static int jz4770_mmc1_4bit_e_pins[] = { 0x95, 0x96, 0x97, };
1218ff656e47SZhou Yanjie static int jz4770_mmc1_8bit_e_pins[] = { 0x98, 0x99, 0x9a, 0x9b, };
12195de1a73eSZhou Yanjie static int jz4770_mmc2_1bit_b_pins[] = { 0x3c, 0x3d, 0x34, };
12205de1a73eSZhou Yanjie static int jz4770_mmc2_4bit_b_pins[] = { 0x35, 0x3e, 0x3f, };
12215de1a73eSZhou Yanjie static int jz4770_mmc2_1bit_e_pins[] = { 0x9c, 0x9d, 0x94, };
12225de1a73eSZhou Yanjie static int jz4770_mmc2_4bit_e_pins[] = { 0x95, 0x96, 0x97, };
12235de1a73eSZhou Yanjie static int jz4770_mmc2_8bit_e_pins[] = { 0x98, 0x99, 0x9a, 0x9b, };
1224ff656e47SZhou Yanjie static int jz4770_nemc_8bit_data_pins[] = {
1225b5c23aa4SPaul Cercueil 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1226b5c23aa4SPaul Cercueil };
1227ff656e47SZhou Yanjie static int jz4770_nemc_16bit_data_pins[] = {
1228ff656e47SZhou Yanjie 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1229ff656e47SZhou Yanjie };
1230b5c23aa4SPaul Cercueil static int jz4770_nemc_cle_ale_pins[] = { 0x20, 0x21, };
1231b5c23aa4SPaul Cercueil static int jz4770_nemc_addr_pins[] = { 0x22, 0x23, 0x24, 0x25, };
1232b5c23aa4SPaul Cercueil static int jz4770_nemc_rd_we_pins[] = { 0x10, 0x11, };
1233b5c23aa4SPaul Cercueil static int jz4770_nemc_frd_fwe_pins[] = { 0x12, 0x13, };
12345de1a73eSZhou Yanjie static int jz4770_nemc_wait_pins[] = { 0x1b, };
1235b5c23aa4SPaul Cercueil static int jz4770_nemc_cs1_pins[] = { 0x15, };
1236b5c23aa4SPaul Cercueil static int jz4770_nemc_cs2_pins[] = { 0x16, };
1237b5c23aa4SPaul Cercueil static int jz4770_nemc_cs3_pins[] = { 0x17, };
1238b5c23aa4SPaul Cercueil static int jz4770_nemc_cs4_pins[] = { 0x18, };
1239b5c23aa4SPaul Cercueil static int jz4770_nemc_cs5_pins[] = { 0x19, };
1240b5c23aa4SPaul Cercueil static int jz4770_nemc_cs6_pins[] = { 0x1a, };
1241ff656e47SZhou Yanjie static int jz4770_i2c0_pins[] = { 0x7e, 0x7f, };
1242ff656e47SZhou Yanjie static int jz4770_i2c1_pins[] = { 0x9e, 0x9f, };
1243b5c23aa4SPaul Cercueil static int jz4770_i2c2_pins[] = { 0xb0, 0xb1, };
1244ff656e47SZhou Yanjie static int jz4770_cim_8bit_pins[] = {
1245ff656e47SZhou Yanjie 0x26, 0x27, 0x28, 0x29,
1246ff656e47SZhou Yanjie 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
1247b5c23aa4SPaul Cercueil };
1248ff656e47SZhou Yanjie static int jz4770_cim_12bit_pins[] = {
1249ff656e47SZhou Yanjie 0x32, 0x33, 0xb0, 0xb1,
1250ff656e47SZhou Yanjie };
1251016e054dSPaul Cercueil static int jz4770_lcd_8bit_pins[] = {
1252016e054dSPaul Cercueil 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x4c, 0x4d,
12535e6332a7S周琰杰 (Zhou Yanjie) 0x48, 0x52, 0x53,
12545e6332a7S周琰杰 (Zhou Yanjie) };
12555e6332a7S周琰杰 (Zhou Yanjie) static int jz4770_lcd_16bit_pins[] = {
12565e6332a7S周琰杰 (Zhou Yanjie) 0x4e, 0x4f, 0x50, 0x51, 0x56, 0x57, 0x58, 0x59,
12575e6332a7S周琰杰 (Zhou Yanjie) };
12585e6332a7S周琰杰 (Zhou Yanjie) static int jz4770_lcd_18bit_pins[] = {
12595e6332a7S周琰杰 (Zhou Yanjie) 0x5a, 0x5b,
1260016e054dSPaul Cercueil };
1261ff656e47SZhou Yanjie static int jz4770_lcd_24bit_pins[] = {
1262b5c23aa4SPaul Cercueil 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
1263b5c23aa4SPaul Cercueil 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
1264b5c23aa4SPaul Cercueil 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
1265ff656e47SZhou Yanjie 0x58, 0x59, 0x5a, 0x5b,
1266b5c23aa4SPaul Cercueil };
12675e6332a7S周琰杰 (Zhou Yanjie) static int jz4770_lcd_special_pins[] = { 0x54, 0x4a, 0x41, 0x40, };
12685e6332a7S周琰杰 (Zhou Yanjie) static int jz4770_lcd_generic_pins[] = { 0x49, };
1269b5c23aa4SPaul Cercueil static int jz4770_pwm_pwm0_pins[] = { 0x80, };
1270b5c23aa4SPaul Cercueil static int jz4770_pwm_pwm1_pins[] = { 0x81, };
1271b5c23aa4SPaul Cercueil static int jz4770_pwm_pwm2_pins[] = { 0x82, };
1272b5c23aa4SPaul Cercueil static int jz4770_pwm_pwm3_pins[] = { 0x83, };
1273b5c23aa4SPaul Cercueil static int jz4770_pwm_pwm4_pins[] = { 0x84, };
1274b5c23aa4SPaul Cercueil static int jz4770_pwm_pwm5_pins[] = { 0x85, };
1275b5c23aa4SPaul Cercueil static int jz4770_pwm_pwm6_pins[] = { 0x6a, };
1276b5c23aa4SPaul Cercueil static int jz4770_pwm_pwm7_pins[] = { 0x6b, };
12775de1a73eSZhou Yanjie static int jz4770_mac_rmii_pins[] = {
12785de1a73eSZhou Yanjie 0xa9, 0xab, 0xaa, 0xac, 0xa5, 0xa4, 0xad, 0xae, 0xa6, 0xa8,
12795de1a73eSZhou Yanjie };
128065afd976S周琰杰 (Zhou Yanjie) static int jz4770_mac_mii_pins[] = {
128165afd976S周琰杰 (Zhou Yanjie) 0x7b, 0x7a, 0x7d, 0x7c, 0xa7, 0x24, 0xaf,
128265afd976S周琰杰 (Zhou Yanjie) };
1283b5c23aa4SPaul Cercueil
1284b5c23aa4SPaul Cercueil static const struct group_desc jz4770_groups[] = {
1285bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-data", jz4770_uart0_data, 0),
1286bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-hwflow", jz4770_uart0_hwflow, 0),
1287bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-data", jz4770_uart1_data, 0),
1288bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-hwflow", jz4770_uart1_hwflow, 0),
1289bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-data", jz4770_uart2_data, 0),
1290bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-hwflow", jz4770_uart2_hwflow, 0),
1291bb42b593SPaul Cercueil INGENIC_PIN_GROUP_FUNCS("uart3-data", jz4770_uart3_data,
1292bb42b593SPaul Cercueil jz4760_uart3_data_funcs),
1293bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart3-hwflow", jz4770_uart3_hwflow, 0),
1294bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-a", jz4770_ssi0_dt_a, 2),
1295bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-b", jz4770_ssi0_dt_b, 1),
1296bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-d", jz4770_ssi0_dt_d, 1),
1297bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-e", jz4770_ssi0_dt_e, 0),
1298bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr-a", jz4770_ssi0_dr_a, 1),
1299bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr-b", jz4770_ssi0_dr_b, 1),
1300bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr-d", jz4770_ssi0_dr_d, 1),
1301bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr-e", jz4770_ssi0_dr_e, 0),
1302bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk-a", jz4770_ssi0_clk_a, 2),
1303bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk-b", jz4770_ssi0_clk_b, 1),
1304bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk-d", jz4770_ssi0_clk_d, 1),
1305bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk-e", jz4770_ssi0_clk_e, 0),
1306bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-gpc-b", jz4770_ssi0_gpc_b, 1),
1307bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-gpc-d", jz4770_ssi0_gpc_d, 1),
1308bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-gpc-e", jz4770_ssi0_gpc_e, 0),
1309bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0-a", jz4770_ssi0_ce0_a, 2),
1310bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0-b", jz4770_ssi0_ce0_b, 1),
1311bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0-d", jz4770_ssi0_ce0_d, 1),
1312bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0-e", jz4770_ssi0_ce0_e, 0),
1313bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce1-b", jz4770_ssi0_ce1_b, 1),
1314bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce1-d", jz4770_ssi0_ce1_d, 1),
1315bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce1-e", jz4770_ssi0_ce1_e, 0),
1316bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dt-b", jz4770_ssi1_dt_b, 2),
1317bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dt-d", jz4770_ssi1_dt_d, 2),
1318bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dt-e", jz4770_ssi1_dt_e, 1),
1319bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dr-b", jz4770_ssi1_dr_b, 2),
1320bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dr-d", jz4770_ssi1_dr_d, 2),
1321bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dr-e", jz4770_ssi1_dr_e, 1),
1322bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-clk-b", jz4770_ssi1_clk_b, 2),
1323bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-clk-d", jz4770_ssi1_clk_d, 2),
1324bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-clk-e", jz4770_ssi1_clk_e, 1),
1325bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-gpc-b", jz4770_ssi1_gpc_b, 2),
1326bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-gpc-d", jz4770_ssi1_gpc_d, 2),
1327bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-gpc-e", jz4770_ssi1_gpc_e, 1),
1328bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce0-b", jz4770_ssi1_ce0_b, 2),
1329bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce0-d", jz4770_ssi1_ce0_d, 2),
1330bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce0-e", jz4770_ssi1_ce0_e, 1),
1331bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce1-b", jz4770_ssi1_ce1_b, 2),
1332bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce1-d", jz4770_ssi1_ce1_d, 2),
1333bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce1-e", jz4770_ssi1_ce1_e, 1),
1334bb42b593SPaul Cercueil INGENIC_PIN_GROUP_FUNCS("mmc0-1bit-a", jz4770_mmc0_1bit_a,
1335bb42b593SPaul Cercueil jz4760_mmc0_1bit_a_funcs),
1336bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-4bit-a", jz4770_mmc0_4bit_a, 1),
1337bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-1bit-e", jz4770_mmc0_1bit_e, 0),
1338bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-4bit-e", jz4770_mmc0_4bit_e, 0),
1339bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-8bit-e", jz4770_mmc0_8bit_e, 0),
1340bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-1bit-d", jz4770_mmc1_1bit_d, 0),
1341bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-4bit-d", jz4770_mmc1_4bit_d, 0),
1342bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-1bit-e", jz4770_mmc1_1bit_e, 1),
1343bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-4bit-e", jz4770_mmc1_4bit_e, 1),
1344bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-8bit-e", jz4770_mmc1_8bit_e, 1),
1345bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-1bit-b", jz4770_mmc2_1bit_b, 0),
1346bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-4bit-b", jz4770_mmc2_4bit_b, 0),
1347bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-1bit-e", jz4770_mmc2_1bit_e, 2),
1348bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-4bit-e", jz4770_mmc2_4bit_e, 2),
1349bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-8bit-e", jz4770_mmc2_8bit_e, 2),
1350bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-8bit-data", jz4770_nemc_8bit_data, 0),
1351bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-16bit-data", jz4770_nemc_16bit_data, 0),
1352bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cle-ale", jz4770_nemc_cle_ale, 0),
1353bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-addr", jz4770_nemc_addr, 0),
1354bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-rd-we", jz4770_nemc_rd_we, 0),
1355bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-frd-fwe", jz4770_nemc_frd_fwe, 0),
1356bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-wait", jz4770_nemc_wait, 0),
1357bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs1", jz4770_nemc_cs1, 0),
1358bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs2", jz4770_nemc_cs2, 0),
1359bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs3", jz4770_nemc_cs3, 0),
1360bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs4", jz4770_nemc_cs4, 0),
1361bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs5", jz4770_nemc_cs5, 0),
1362bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs6", jz4770_nemc_cs6, 0),
1363bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c0-data", jz4770_i2c0, 0),
1364bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c1-data", jz4770_i2c1, 0),
1365bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c2-data", jz4770_i2c2, 2),
1366bb42b593SPaul Cercueil INGENIC_PIN_GROUP("cim-data-8bit", jz4770_cim_8bit, 0),
1367bb42b593SPaul Cercueil INGENIC_PIN_GROUP("cim-data-12bit", jz4770_cim_12bit, 0),
1368016e054dSPaul Cercueil INGENIC_PIN_GROUP("lcd-8bit", jz4770_lcd_8bit, 0),
13695e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-16bit", jz4770_lcd_16bit, 0),
13705e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-18bit", jz4770_lcd_18bit, 0),
1371bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-24bit", jz4770_lcd_24bit, 0),
13725e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-special", jz4770_lcd_special, 1),
13735e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-generic", jz4770_lcd_generic, 0),
1374bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm0", jz4770_pwm_pwm0, 0),
1375bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm1", jz4770_pwm_pwm1, 0),
1376bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm2", jz4770_pwm_pwm2, 0),
1377bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm3", jz4770_pwm_pwm3, 0),
1378bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm4", jz4770_pwm_pwm4, 0),
1379bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm5", jz4770_pwm_pwm5, 0),
1380bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm6", jz4770_pwm_pwm6, 0),
1381bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm7", jz4770_pwm_pwm7, 0),
1382bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mac-rmii", jz4770_mac_rmii, 0),
1383bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mac-mii", jz4770_mac_mii, 0),
1384dd1ccfd6SPaul Cercueil INGENIC_PIN_GROUP("otg-vbus", jz4760_otg, 0),
1385b5c23aa4SPaul Cercueil };
1386b5c23aa4SPaul Cercueil
1387b5c23aa4SPaul Cercueil static const char *jz4770_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
1388b5c23aa4SPaul Cercueil static const char *jz4770_uart1_groups[] = { "uart1-data", "uart1-hwflow", };
1389b5c23aa4SPaul Cercueil static const char *jz4770_uart2_groups[] = { "uart2-data", "uart2-hwflow", };
1390b5c23aa4SPaul Cercueil static const char *jz4770_uart3_groups[] = { "uart3-data", "uart3-hwflow", };
1391d3ef8c6bS周琰杰 (Zhou Yanjie) static const char *jz4770_ssi0_groups[] = {
1392d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-dt-a", "ssi0-dt-b", "ssi0-dt-d", "ssi0-dt-e",
1393d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-dr-a", "ssi0-dr-b", "ssi0-dr-d", "ssi0-dr-e",
1394d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-clk-a", "ssi0-clk-b", "ssi0-clk-d", "ssi0-clk-e",
1395d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-gpc-b", "ssi0-gpc-d", "ssi0-gpc-e",
1396d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-ce0-a", "ssi0-ce0-b", "ssi0-ce0-d", "ssi0-ce0-e",
1397d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-ce1-b", "ssi0-ce1-d", "ssi0-ce1-e",
1398d3ef8c6bS周琰杰 (Zhou Yanjie) };
1399d3ef8c6bS周琰杰 (Zhou Yanjie) static const char *jz4770_ssi1_groups[] = {
1400d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-dt-b", "ssi1-dt-d", "ssi1-dt-e",
1401d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-dr-b", "ssi1-dr-d", "ssi1-dr-e",
1402d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-clk-b", "ssi1-clk-d", "ssi1-clk-e",
1403d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-gpc-b", "ssi1-gpc-d", "ssi1-gpc-e",
1404d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-ce0-b", "ssi1-ce0-d", "ssi1-ce0-e",
1405d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-ce1-b", "ssi1-ce1-d", "ssi1-ce1-e",
1406d3ef8c6bS周琰杰 (Zhou Yanjie) };
1407b5c23aa4SPaul Cercueil static const char *jz4770_mmc0_groups[] = {
1408ff656e47SZhou Yanjie "mmc0-1bit-a", "mmc0-4bit-a",
1409ff656e47SZhou Yanjie "mmc0-1bit-e", "mmc0-4bit-e", "mmc0-8bit-e",
1410b5c23aa4SPaul Cercueil };
1411b5c23aa4SPaul Cercueil static const char *jz4770_mmc1_groups[] = {
1412ff656e47SZhou Yanjie "mmc1-1bit-d", "mmc1-4bit-d",
1413ff656e47SZhou Yanjie "mmc1-1bit-e", "mmc1-4bit-e", "mmc1-8bit-e",
1414b5c23aa4SPaul Cercueil };
14155de1a73eSZhou Yanjie static const char *jz4770_mmc2_groups[] = {
14165de1a73eSZhou Yanjie "mmc2-1bit-b", "mmc2-4bit-b",
14175de1a73eSZhou Yanjie "mmc2-1bit-e", "mmc2-4bit-e", "mmc2-8bit-e",
14185de1a73eSZhou Yanjie };
1419b5c23aa4SPaul Cercueil static const char *jz4770_nemc_groups[] = {
1420ff656e47SZhou Yanjie "nemc-8bit-data", "nemc-16bit-data", "nemc-cle-ale",
14215de1a73eSZhou Yanjie "nemc-addr", "nemc-rd-we", "nemc-frd-fwe", "nemc-wait",
1422b5c23aa4SPaul Cercueil };
1423b5c23aa4SPaul Cercueil static const char *jz4770_cs1_groups[] = { "nemc-cs1", };
1424ff656e47SZhou Yanjie static const char *jz4770_cs2_groups[] = { "nemc-cs2", };
1425ff656e47SZhou Yanjie static const char *jz4770_cs3_groups[] = { "nemc-cs3", };
1426ff656e47SZhou Yanjie static const char *jz4770_cs4_groups[] = { "nemc-cs4", };
1427ff656e47SZhou Yanjie static const char *jz4770_cs5_groups[] = { "nemc-cs5", };
1428b5c23aa4SPaul Cercueil static const char *jz4770_cs6_groups[] = { "nemc-cs6", };
1429b5c23aa4SPaul Cercueil static const char *jz4770_i2c0_groups[] = { "i2c0-data", };
1430b5c23aa4SPaul Cercueil static const char *jz4770_i2c1_groups[] = { "i2c1-data", };
1431b5c23aa4SPaul Cercueil static const char *jz4770_i2c2_groups[] = { "i2c2-data", };
1432ff656e47SZhou Yanjie static const char *jz4770_cim_groups[] = { "cim-data-8bit", "cim-data-12bit", };
1433016e054dSPaul Cercueil static const char *jz4770_lcd_groups[] = {
14345e6332a7S周琰杰 (Zhou Yanjie) "lcd-8bit", "lcd-16bit", "lcd-18bit", "lcd-24bit",
14355e6332a7S周琰杰 (Zhou Yanjie) "lcd-special", "lcd-generic",
1436016e054dSPaul Cercueil };
1437b5c23aa4SPaul Cercueil static const char *jz4770_pwm0_groups[] = { "pwm0", };
1438b5c23aa4SPaul Cercueil static const char *jz4770_pwm1_groups[] = { "pwm1", };
1439b5c23aa4SPaul Cercueil static const char *jz4770_pwm2_groups[] = { "pwm2", };
1440b5c23aa4SPaul Cercueil static const char *jz4770_pwm3_groups[] = { "pwm3", };
1441b5c23aa4SPaul Cercueil static const char *jz4770_pwm4_groups[] = { "pwm4", };
1442b5c23aa4SPaul Cercueil static const char *jz4770_pwm5_groups[] = { "pwm5", };
1443b5c23aa4SPaul Cercueil static const char *jz4770_pwm6_groups[] = { "pwm6", };
1444b5c23aa4SPaul Cercueil static const char *jz4770_pwm7_groups[] = { "pwm7", };
14455de1a73eSZhou Yanjie static const char *jz4770_mac_groups[] = { "mac-rmii", "mac-mii", };
1446b5c23aa4SPaul Cercueil
1447b5c23aa4SPaul Cercueil static const struct function_desc jz4770_functions[] = {
14487f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", jz4770_uart0),
14497f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", jz4770_uart1),
14507f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", jz4770_uart2),
14517f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart3", jz4770_uart3),
14527f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi0", jz4770_ssi0),
14537f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi1", jz4770_ssi1),
14547f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", jz4770_mmc0),
14557f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", jz4770_mmc1),
14567f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc2", jz4770_mmc2),
14577f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc", jz4770_nemc),
14587f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs1", jz4770_cs1),
14597f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs2", jz4770_cs2),
14607f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs3", jz4770_cs3),
14617f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs4", jz4770_cs4),
14627f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs5", jz4770_cs5),
14637f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs6", jz4770_cs6),
14647f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c0", jz4770_i2c0),
14657f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c1", jz4770_i2c1),
14667f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c2", jz4770_i2c2),
14677f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", jz4770_cim),
14687f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", jz4770_lcd),
14697f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", jz4770_pwm0),
14707f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", jz4770_pwm1),
14717f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", jz4770_pwm2),
14727f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", jz4770_pwm3),
14737f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", jz4770_pwm4),
14747f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", jz4770_pwm5),
14757f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm6", jz4770_pwm6),
14767f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm7", jz4770_pwm7),
14777f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mac", jz4770_mac),
14787f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("otg", jz4760_otg),
1479b5c23aa4SPaul Cercueil };
1480b5c23aa4SPaul Cercueil
1481b5c23aa4SPaul Cercueil static const struct ingenic_chip_info jz4770_chip_info = {
1482b5c23aa4SPaul Cercueil .num_chips = 6,
1483f742e5ebS周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
1484baf15647SPaul Cercueil .version = ID_JZ4770,
1485b5c23aa4SPaul Cercueil .groups = jz4770_groups,
1486b5c23aa4SPaul Cercueil .num_groups = ARRAY_SIZE(jz4770_groups),
1487b5c23aa4SPaul Cercueil .functions = jz4770_functions,
1488b5c23aa4SPaul Cercueil .num_functions = ARRAY_SIZE(jz4770_functions),
1489b5c23aa4SPaul Cercueil .pull_ups = jz4770_pull_ups,
1490b5c23aa4SPaul Cercueil .pull_downs = jz4770_pull_downs,
1491b5c23aa4SPaul Cercueil };
1492b5c23aa4SPaul Cercueil
14930c990740S周琰杰 (Zhou Yanjie) static const u32 jz4775_pull_ups[7] = {
14940c990740S周琰杰 (Zhou Yanjie) 0x28ff00ff, 0xf030f3fc, 0x0fffffff, 0xfffe4000, 0xf0f0000c, 0x0000f00f, 0x0000f3c0,
14950c990740S周琰杰 (Zhou Yanjie) };
14960c990740S周琰杰 (Zhou Yanjie)
14970c990740S周琰杰 (Zhou Yanjie) static const u32 jz4775_pull_downs[7] = {
14980c990740S周琰杰 (Zhou Yanjie) 0x00000000, 0x00030c03, 0x00000000, 0x00008000, 0x00000403, 0x00000ff0, 0x00030c00,
14990c990740S周琰杰 (Zhou Yanjie) };
15000c990740S周琰杰 (Zhou Yanjie)
15010c990740S周琰杰 (Zhou Yanjie) static int jz4775_uart0_data_pins[] = { 0xa0, 0xa3, };
15020c990740S周琰杰 (Zhou Yanjie) static int jz4775_uart0_hwflow_pins[] = { 0xa1, 0xa2, };
15030c990740S周琰杰 (Zhou Yanjie) static int jz4775_uart1_data_pins[] = { 0x7a, 0x7c, };
15040c990740S周琰杰 (Zhou Yanjie) static int jz4775_uart1_hwflow_pins[] = { 0x7b, 0x7d, };
15050c990740S周琰杰 (Zhou Yanjie) static int jz4775_uart2_data_c_pins[] = { 0x54, 0x4a, };
15060c990740S周琰杰 (Zhou Yanjie) static int jz4775_uart2_data_f_pins[] = { 0xa5, 0xa4, };
15070c990740S周琰杰 (Zhou Yanjie) static int jz4775_uart3_data_pins[] = { 0x1e, 0x1f, };
15080c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_dt_a_pins[] = { 0x13, };
15090c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_dt_d_pins[] = { 0x75, };
15100c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_dr_a_pins[] = { 0x14, };
15110c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_dr_d_pins[] = { 0x74, };
15120c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_clk_a_pins[] = { 0x12, };
15130c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_clk_d_pins[] = { 0x78, };
15140c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_gpc_pins[] = { 0x76, };
15150c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_ce0_a_pins[] = { 0x17, };
15160c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_ce0_d_pins[] = { 0x79, };
15170c990740S周琰杰 (Zhou Yanjie) static int jz4775_ssi_ce1_pins[] = { 0x77, };
15180c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc0_1bit_a_pins[] = { 0x12, 0x13, 0x14, };
15190c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc0_4bit_a_pins[] = { 0x15, 0x16, 0x17, };
15200c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc0_8bit_a_pins[] = { 0x04, 0x05, 0x06, 0x07, };
15210c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc0_1bit_e_pins[] = { 0x9c, 0x9d, 0x94, };
15220c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc0_4bit_e_pins[] = { 0x95, 0x96, 0x97, };
15230c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc1_1bit_d_pins[] = { 0x78, 0x79, 0x74, };
15240c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc1_4bit_d_pins[] = { 0x75, 0x76, 0x77, };
15250c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc1_1bit_e_pins[] = { 0x9c, 0x9d, 0x94, };
15260c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc1_4bit_e_pins[] = { 0x95, 0x96, 0x97, };
15270c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc2_1bit_b_pins[] = { 0x3c, 0x3d, 0x34, };
15280c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc2_4bit_b_pins[] = { 0x35, 0x3e, 0x3f, };
15290c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc2_1bit_e_pins[] = { 0x9c, 0x9d, 0x94, };
15300c990740S周琰杰 (Zhou Yanjie) static int jz4775_mmc2_4bit_e_pins[] = { 0x95, 0x96, 0x97, };
15310c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_8bit_data_pins[] = {
15320c990740S周琰杰 (Zhou Yanjie) 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
15330c990740S周琰杰 (Zhou Yanjie) };
15340c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_16bit_data_pins[] = {
15350c990740S周琰杰 (Zhou Yanjie) 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1,
15360c990740S周琰杰 (Zhou Yanjie) };
15370c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_cle_ale_pins[] = { 0x20, 0x21, };
15380c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_addr_pins[] = { 0x22, 0x23, 0x24, 0x25, };
15390c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_rd_we_pins[] = { 0x10, 0x11, };
15400c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_frd_fwe_pins[] = { 0x12, 0x13, };
15410c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_wait_pins[] = { 0x1b, };
15420c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_cs1_pins[] = { 0x15, };
15430c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_cs2_pins[] = { 0x16, };
15440c990740S周琰杰 (Zhou Yanjie) static int jz4775_nemc_cs3_pins[] = { 0x17, };
15450c990740S周琰杰 (Zhou Yanjie) static int jz4775_i2c0_pins[] = { 0x7e, 0x7f, };
15460c990740S周琰杰 (Zhou Yanjie) static int jz4775_i2c1_pins[] = { 0x9e, 0x9f, };
15470c990740S周琰杰 (Zhou Yanjie) static int jz4775_i2c2_pins[] = { 0x80, 0x83, };
15480c990740S周琰杰 (Zhou Yanjie) static int jz4775_i2s_data_tx_pins[] = { 0xa3, };
15490c990740S周琰杰 (Zhou Yanjie) static int jz4775_i2s_data_rx_pins[] = { 0xa2, };
15500c990740S周琰杰 (Zhou Yanjie) static int jz4775_i2s_clk_txrx_pins[] = { 0xa0, 0xa1, };
15510c990740S周琰杰 (Zhou Yanjie) static int jz4775_i2s_sysclk_pins[] = { 0x83, };
15520c990740S周琰杰 (Zhou Yanjie) static int jz4775_dmic_pins[] = { 0xaa, 0xab, };
15530c990740S周琰杰 (Zhou Yanjie) static int jz4775_cim_pins[] = {
15540c990740S周琰杰 (Zhou Yanjie) 0x26, 0x27, 0x28, 0x29,
15550c990740S周琰杰 (Zhou Yanjie) 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
15560c990740S周琰杰 (Zhou Yanjie) };
15570c990740S周琰杰 (Zhou Yanjie) static int jz4775_lcd_8bit_pins[] = {
15580c990740S周琰杰 (Zhou Yanjie) 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x4c, 0x4d,
15590c990740S周琰杰 (Zhou Yanjie) 0x48, 0x52, 0x53,
15600c990740S周琰杰 (Zhou Yanjie) };
15610c990740S周琰杰 (Zhou Yanjie) static int jz4775_lcd_16bit_pins[] = {
15620c990740S周琰杰 (Zhou Yanjie) 0x4e, 0x4f, 0x50, 0x51, 0x56, 0x57, 0x58, 0x59,
15630c990740S周琰杰 (Zhou Yanjie) };
15640c990740S周琰杰 (Zhou Yanjie) static int jz4775_lcd_18bit_pins[] = {
15650c990740S周琰杰 (Zhou Yanjie) 0x5a, 0x5b,
15660c990740S周琰杰 (Zhou Yanjie) };
15670c990740S周琰杰 (Zhou Yanjie) static int jz4775_lcd_24bit_pins[] = {
15680c990740S周琰杰 (Zhou Yanjie) 0x40, 0x41, 0x4a, 0x4b, 0x54, 0x55,
15690c990740S周琰杰 (Zhou Yanjie) };
15700c990740S周琰杰 (Zhou Yanjie) static int jz4775_lcd_special_pins[] = { 0x54, 0x4a, 0x41, 0x40, };
15710c990740S周琰杰 (Zhou Yanjie) static int jz4775_lcd_generic_pins[] = { 0x49, };
15720c990740S周琰杰 (Zhou Yanjie) static int jz4775_pwm_pwm0_pins[] = { 0x80, };
15730c990740S周琰杰 (Zhou Yanjie) static int jz4775_pwm_pwm1_pins[] = { 0x81, };
15740c990740S周琰杰 (Zhou Yanjie) static int jz4775_pwm_pwm2_pins[] = { 0x82, };
15750c990740S周琰杰 (Zhou Yanjie) static int jz4775_pwm_pwm3_pins[] = { 0x83, };
15760c990740S周琰杰 (Zhou Yanjie) static int jz4775_mac_rmii_pins[] = {
15770c990740S周琰杰 (Zhou Yanjie) 0xa9, 0xab, 0xaa, 0xac, 0xa5, 0xa4, 0xad, 0xae, 0xa6, 0xa8,
15780c990740S周琰杰 (Zhou Yanjie) };
15790c990740S周琰杰 (Zhou Yanjie) static int jz4775_mac_mii_pins[] = {
15800c990740S周琰杰 (Zhou Yanjie) 0x7b, 0x7a, 0x7d, 0x7c, 0xa7, 0x24, 0xaf,
15810c990740S周琰杰 (Zhou Yanjie) };
15820c990740S周琰杰 (Zhou Yanjie) static int jz4775_mac_rgmii_pins[] = {
15830c990740S周琰杰 (Zhou Yanjie) 0xa9, 0x7b, 0x7a, 0xab, 0xaa, 0xac, 0x7d, 0x7c, 0xa5, 0xa4,
15840c990740S周琰杰 (Zhou Yanjie) 0xad, 0xae, 0xa7, 0xa6,
15850c990740S周琰杰 (Zhou Yanjie) };
15860c990740S周琰杰 (Zhou Yanjie) static int jz4775_mac_gmii_pins[] = {
15870c990740S周琰杰 (Zhou Yanjie) 0x31, 0x30, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a,
15880c990740S周琰杰 (Zhou Yanjie) 0xa8, 0x28, 0x24, 0xaf,
15890c990740S周琰杰 (Zhou Yanjie) };
15900c990740S周琰杰 (Zhou Yanjie) static int jz4775_otg_pins[] = { 0x8a, };
15910c990740S周琰杰 (Zhou Yanjie)
15920c990740S周琰杰 (Zhou Yanjie) static u8 jz4775_uart3_data_funcs[] = { 0, 1, };
15930c990740S周琰杰 (Zhou Yanjie) static u8 jz4775_mac_mii_funcs[] = { 1, 1, 1, 1, 0, 1, 0, };
15940c990740S周琰杰 (Zhou Yanjie) static u8 jz4775_mac_rgmii_funcs[] = {
15950c990740S周琰杰 (Zhou Yanjie) 0, 1, 1, 0, 0, 0, 1, 1, 0, 0,
15960c990740S周琰杰 (Zhou Yanjie) 0, 0, 0, 0,
15970c990740S周琰杰 (Zhou Yanjie) };
15980c990740S周琰杰 (Zhou Yanjie) static u8 jz4775_mac_gmii_funcs[] = {
15990c990740S周琰杰 (Zhou Yanjie) 1, 1, 1, 1, 1, 1, 1, 1,
16000c990740S周琰杰 (Zhou Yanjie) 0, 1, 1, 0,
16010c990740S周琰杰 (Zhou Yanjie) };
16020c990740S周琰杰 (Zhou Yanjie)
16030c990740S周琰杰 (Zhou Yanjie) static const struct group_desc jz4775_groups[] = {
16040c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-data", jz4775_uart0_data, 0),
16050c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-hwflow", jz4775_uart0_hwflow, 0),
16060c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart1-data", jz4775_uart1_data, 0),
16070c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart1-hwflow", jz4775_uart1_hwflow, 0),
16080c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart2-data-c", jz4775_uart2_data_c, 2),
16090c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart2-data-f", jz4775_uart2_data_f, 1),
16100c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("uart3-data", jz4775_uart3_data,
16110c990740S周琰杰 (Zhou Yanjie) jz4775_uart3_data_funcs),
16120c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-dt-a", jz4775_ssi_dt_a, 2),
16130c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-dt-d", jz4775_ssi_dt_d, 1),
16140c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-dr-a", jz4775_ssi_dr_a, 2),
16150c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-dr-d", jz4775_ssi_dr_d, 1),
16160c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-clk-a", jz4775_ssi_clk_a, 2),
16170c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-clk-d", jz4775_ssi_clk_d, 1),
16180c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-gpc", jz4775_ssi_gpc, 1),
16190c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-ce0-a", jz4775_ssi_ce0_a, 2),
16200c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-ce0-d", jz4775_ssi_ce0_d, 1),
16210c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi-ce1", jz4775_ssi_ce1, 1),
16220c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-1bit-a", jz4775_mmc0_1bit_a, 1),
16230c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-4bit-a", jz4775_mmc0_4bit_a, 1),
16240c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-8bit-a", jz4775_mmc0_8bit_a, 1),
16250c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-1bit-e", jz4775_mmc0_1bit_e, 0),
16260c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-4bit-e", jz4775_mmc0_4bit_e, 0),
16270c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-1bit-d", jz4775_mmc1_1bit_d, 0),
16280c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-4bit-d", jz4775_mmc1_4bit_d, 0),
16290c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-1bit-e", jz4775_mmc1_1bit_e, 1),
16300c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-4bit-e", jz4775_mmc1_4bit_e, 1),
16310c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc2-1bit-b", jz4775_mmc2_1bit_b, 0),
16320c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc2-4bit-b", jz4775_mmc2_4bit_b, 0),
16330c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc2-1bit-e", jz4775_mmc2_1bit_e, 2),
16340c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc2-4bit-e", jz4775_mmc2_4bit_e, 2),
16350c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-8bit-data", jz4775_nemc_8bit_data, 0),
16360c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-16bit-data", jz4775_nemc_16bit_data, 1),
16370c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-cle-ale", jz4775_nemc_cle_ale, 0),
16380c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-addr", jz4775_nemc_addr, 0),
16390c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-rd-we", jz4775_nemc_rd_we, 0),
16400c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-frd-fwe", jz4775_nemc_frd_fwe, 0),
16410c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-wait", jz4775_nemc_wait, 0),
16420c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-cs1", jz4775_nemc_cs1, 0),
16430c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-cs2", jz4775_nemc_cs2, 0),
16440c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("nemc-cs3", jz4775_nemc_cs3, 0),
16450c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c0-data", jz4775_i2c0, 0),
16460c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c1-data", jz4775_i2c1, 0),
16470c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c2-data", jz4775_i2c2, 1),
16480c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s-data-tx", jz4775_i2s_data_tx, 1),
16490c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s-data-rx", jz4775_i2s_data_rx, 1),
16500c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s-clk-txrx", jz4775_i2s_clk_txrx, 1),
16510c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s-sysclk", jz4775_i2s_sysclk, 2),
16520c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic", jz4775_dmic, 1),
16530c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("cim-data", jz4775_cim, 0),
16540c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-8bit", jz4775_lcd_8bit, 0),
16550c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-16bit", jz4775_lcd_16bit, 0),
16560c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-18bit", jz4775_lcd_18bit, 0),
16570c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-24bit", jz4775_lcd_24bit, 0),
16580c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-generic", jz4775_lcd_generic, 0),
16590c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-special", jz4775_lcd_special, 1),
16600c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm0", jz4775_pwm_pwm0, 0),
16610c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm1", jz4775_pwm_pwm1, 0),
16620c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm2", jz4775_pwm_pwm2, 0),
16630c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm3", jz4775_pwm_pwm3, 0),
16640c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mac-rmii", jz4775_mac_rmii, 0),
16650c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("mac-mii", jz4775_mac_mii,
16660c990740S周琰杰 (Zhou Yanjie) jz4775_mac_mii_funcs),
16670c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("mac-rgmii", jz4775_mac_rgmii,
16680c990740S周琰杰 (Zhou Yanjie) jz4775_mac_rgmii_funcs),
16690c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("mac-gmii", jz4775_mac_gmii,
16700c990740S周琰杰 (Zhou Yanjie) jz4775_mac_gmii_funcs),
16710c990740S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("otg-vbus", jz4775_otg, 0),
16720c990740S周琰杰 (Zhou Yanjie) };
16730c990740S周琰杰 (Zhou Yanjie)
16740c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
16750c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_uart1_groups[] = { "uart1-data", "uart1-hwflow", };
16760c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_uart2_groups[] = { "uart2-data-c", "uart2-data-f", };
16770c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_uart3_groups[] = { "uart3-data", };
16780c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_ssi_groups[] = {
16790c990740S周琰杰 (Zhou Yanjie) "ssi-dt-a", "ssi-dt-d",
16800c990740S周琰杰 (Zhou Yanjie) "ssi-dr-a", "ssi-dr-d",
16810c990740S周琰杰 (Zhou Yanjie) "ssi-clk-a", "ssi-clk-d",
16820c990740S周琰杰 (Zhou Yanjie) "ssi-gpc",
16830c990740S周琰杰 (Zhou Yanjie) "ssi-ce0-a", "ssi-ce0-d",
16840c990740S周琰杰 (Zhou Yanjie) "ssi-ce1",
16850c990740S周琰杰 (Zhou Yanjie) };
16860c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_mmc0_groups[] = {
16870c990740S周琰杰 (Zhou Yanjie) "mmc0-1bit-a", "mmc0-4bit-a", "mmc0-8bit-a",
16880c990740S周琰杰 (Zhou Yanjie) "mmc0-1bit-e", "mmc0-4bit-e",
16890c990740S周琰杰 (Zhou Yanjie) };
16900c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_mmc1_groups[] = {
16910c990740S周琰杰 (Zhou Yanjie) "mmc1-1bit-d", "mmc1-4bit-d",
16920c990740S周琰杰 (Zhou Yanjie) "mmc1-1bit-e", "mmc1-4bit-e",
16930c990740S周琰杰 (Zhou Yanjie) };
16940c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_mmc2_groups[] = {
16950c990740S周琰杰 (Zhou Yanjie) "mmc2-1bit-b", "mmc2-4bit-b",
16960c990740S周琰杰 (Zhou Yanjie) "mmc2-1bit-e", "mmc2-4bit-e",
16970c990740S周琰杰 (Zhou Yanjie) };
16980c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_nemc_groups[] = {
16990c990740S周琰杰 (Zhou Yanjie) "nemc-8bit-data", "nemc-16bit-data", "nemc-cle-ale",
17000c990740S周琰杰 (Zhou Yanjie) "nemc-addr", "nemc-rd-we", "nemc-frd-fwe", "nemc-wait",
17010c990740S周琰杰 (Zhou Yanjie) };
17020c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_cs1_groups[] = { "nemc-cs1", };
17030c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_cs2_groups[] = { "nemc-cs2", };
17040c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_cs3_groups[] = { "nemc-cs3", };
17050c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_i2c0_groups[] = { "i2c0-data", };
17060c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_i2c1_groups[] = { "i2c1-data", };
17070c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_i2c2_groups[] = { "i2c2-data", };
17080c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_i2s_groups[] = {
17090c990740S周琰杰 (Zhou Yanjie) "i2s-data-tx", "i2s-data-rx", "i2s-clk-txrx", "i2s-sysclk",
17100c990740S周琰杰 (Zhou Yanjie) };
17110c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_dmic_groups[] = { "dmic", };
17120c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_cim_groups[] = { "cim-data", };
17130c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_lcd_groups[] = {
17140c990740S周琰杰 (Zhou Yanjie) "lcd-8bit", "lcd-16bit", "lcd-18bit", "lcd-24bit",
17150c990740S周琰杰 (Zhou Yanjie) "lcd-special", "lcd-generic",
17160c990740S周琰杰 (Zhou Yanjie) };
17170c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_pwm0_groups[] = { "pwm0", };
17180c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_pwm1_groups[] = { "pwm1", };
17190c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_pwm2_groups[] = { "pwm2", };
17200c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_pwm3_groups[] = { "pwm3", };
17210c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_mac_groups[] = {
17220c990740S周琰杰 (Zhou Yanjie) "mac-rmii", "mac-mii", "mac-rgmii", "mac-gmii",
17230c990740S周琰杰 (Zhou Yanjie) };
17240c990740S周琰杰 (Zhou Yanjie) static const char *jz4775_otg_groups[] = { "otg-vbus", };
17250c990740S周琰杰 (Zhou Yanjie)
17260c990740S周琰杰 (Zhou Yanjie) static const struct function_desc jz4775_functions[] = {
17277f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", jz4775_uart0),
17287f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", jz4775_uart1),
17297f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", jz4775_uart2),
17307f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart3", jz4775_uart3),
17317f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi", jz4775_ssi),
17327f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", jz4775_mmc0),
17337f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", jz4775_mmc1),
17347f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc2", jz4775_mmc2),
17357f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc", jz4775_nemc),
17367f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs1", jz4775_cs1),
17377f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs2", jz4775_cs2),
17387f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs3", jz4775_cs3),
17397f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c0", jz4775_i2c0),
17407f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c1", jz4775_i2c1),
17417f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c2", jz4775_i2c2),
17427f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s", jz4775_i2s),
17437f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("dmic", jz4775_dmic),
17447f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", jz4775_cim),
17457f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", jz4775_lcd),
17467f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", jz4775_pwm0),
17477f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", jz4775_pwm1),
17487f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", jz4775_pwm2),
17497f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", jz4775_pwm3),
17507f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mac", jz4775_mac),
17517f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("otg", jz4775_otg),
17520c990740S周琰杰 (Zhou Yanjie) };
17530c990740S周琰杰 (Zhou Yanjie)
17540c990740S周琰杰 (Zhou Yanjie) static const struct ingenic_chip_info jz4775_chip_info = {
17550c990740S周琰杰 (Zhou Yanjie) .num_chips = 7,
17560c990740S周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
17570c990740S周琰杰 (Zhou Yanjie) .version = ID_JZ4775,
17580c990740S周琰杰 (Zhou Yanjie) .groups = jz4775_groups,
17590c990740S周琰杰 (Zhou Yanjie) .num_groups = ARRAY_SIZE(jz4775_groups),
17600c990740S周琰杰 (Zhou Yanjie) .functions = jz4775_functions,
17610c990740S周琰杰 (Zhou Yanjie) .num_functions = ARRAY_SIZE(jz4775_functions),
17620c990740S周琰杰 (Zhou Yanjie) .pull_ups = jz4775_pull_ups,
17630c990740S周琰杰 (Zhou Yanjie) .pull_downs = jz4775_pull_downs,
17640c990740S周琰杰 (Zhou Yanjie) };
17650c990740S周琰杰 (Zhou Yanjie)
1766d9f5dc49S周琰杰 (Zhou Yanjie) static const u32 jz4780_pull_ups[6] = {
1767d9f5dc49S周琰杰 (Zhou Yanjie) 0x3fffffff, 0xfff0f3fc, 0x0fffffff, 0xffff4fff, 0xfffffb7c, 0x7fa7f00f,
1768d9f5dc49S周琰杰 (Zhou Yanjie) };
1769d9f5dc49S周琰杰 (Zhou Yanjie)
1770d9f5dc49S周琰杰 (Zhou Yanjie) static const u32 jz4780_pull_downs[6] = {
1771d9f5dc49S周琰杰 (Zhou Yanjie) 0x00000000, 0x000f0c03, 0x00000000, 0x0000b000, 0x00000483, 0x00580ff0,
1772d9f5dc49S周琰杰 (Zhou Yanjie) };
1773d9f5dc49S周琰杰 (Zhou Yanjie)
1774ff656e47SZhou Yanjie static int jz4780_uart2_data_pins[] = { 0x66, 0x67, };
1775ff656e47SZhou Yanjie static int jz4780_uart2_hwflow_pins[] = { 0x65, 0x64, };
1776ff656e47SZhou Yanjie static int jz4780_uart4_data_pins[] = { 0x54, 0x4a, };
1777d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_dt_a_19_pins[] = { 0x13, };
1778d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_dt_a_21_pins[] = { 0x15, };
1779d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_dt_a_28_pins[] = { 0x1c, };
1780d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_dt_b_pins[] = { 0x3d, };
1781f83c2609SPaul Cercueil static int jz4780_ssi0_dt_d_pins[] = { 0x79, };
1782d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_dr_a_20_pins[] = { 0x14, };
1783d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_dr_a_27_pins[] = { 0x1b, };
1784d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_dr_b_pins[] = { 0x34, };
1785f83c2609SPaul Cercueil static int jz4780_ssi0_dr_d_pins[] = { 0x74, };
1786d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_clk_a_pins[] = { 0x12, };
1787d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_clk_b_5_pins[] = { 0x25, };
1788d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_clk_b_28_pins[] = { 0x3c, };
1789f83c2609SPaul Cercueil static int jz4780_ssi0_clk_d_pins[] = { 0x78, };
1790d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_gpc_b_pins[] = { 0x3e, };
1791f83c2609SPaul Cercueil static int jz4780_ssi0_gpc_d_pins[] = { 0x76, };
1792d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_ce0_a_23_pins[] = { 0x17, };
1793d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_ce0_a_25_pins[] = { 0x19, };
1794d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_ce0_b_pins[] = { 0x3f, };
1795f83c2609SPaul Cercueil static int jz4780_ssi0_ce0_d_pins[] = { 0x77, };
1796d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi0_ce1_b_pins[] = { 0x35, };
1797f83c2609SPaul Cercueil static int jz4780_ssi0_ce1_d_pins[] = { 0x75, };
1798d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi1_dt_b_pins[] = { 0x3d, };
1799f83c2609SPaul Cercueil static int jz4780_ssi1_dt_d_pins[] = { 0x79, };
1800d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi1_dr_b_pins[] = { 0x34, };
1801f83c2609SPaul Cercueil static int jz4780_ssi1_dr_d_pins[] = { 0x74, };
1802d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi1_clk_b_pins[] = { 0x3c, };
1803f83c2609SPaul Cercueil static int jz4780_ssi1_clk_d_pins[] = { 0x78, };
1804d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi1_gpc_b_pins[] = { 0x3e, };
1805f83c2609SPaul Cercueil static int jz4780_ssi1_gpc_d_pins[] = { 0x76, };
1806d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi1_ce0_b_pins[] = { 0x3f, };
1807f83c2609SPaul Cercueil static int jz4780_ssi1_ce0_d_pins[] = { 0x77, };
1808d3ef8c6bS周琰杰 (Zhou Yanjie) static int jz4780_ssi1_ce1_b_pins[] = { 0x35, };
1809f83c2609SPaul Cercueil static int jz4780_ssi1_ce1_d_pins[] = { 0x75, };
1810ff656e47SZhou Yanjie static int jz4780_mmc0_8bit_a_pins[] = { 0x04, 0x05, 0x06, 0x07, 0x18, };
1811ff656e47SZhou Yanjie static int jz4780_i2c3_pins[] = { 0x6a, 0x6b, };
1812ff656e47SZhou Yanjie static int jz4780_i2c4_e_pins[] = { 0x8c, 0x8d, };
1813ff656e47SZhou Yanjie static int jz4780_i2c4_f_pins[] = { 0xb9, 0xb8, };
1814f4b5c348S周琰杰 (Zhou Yanjie) static int jz4780_i2s_data_tx_pins[] = { 0x87, };
1815f4b5c348S周琰杰 (Zhou Yanjie) static int jz4780_i2s_data_rx_pins[] = { 0x86, };
1816f4b5c348S周琰杰 (Zhou Yanjie) static int jz4780_i2s_clk_txrx_pins[] = { 0x6c, 0x6d, };
1817f4b5c348S周琰杰 (Zhou Yanjie) static int jz4780_i2s_clk_rx_pins[] = { 0x88, 0x89, };
1818f4b5c348S周琰杰 (Zhou Yanjie) static int jz4780_i2s_sysclk_pins[] = { 0x85, };
18196adf2c56S周琰杰 (Zhou Yanjie) static int jz4780_dmic_pins[] = { 0x32, 0x33, };
1820a0bb89e8SPaul Boddie static int jz4780_hdmi_ddc_pins[] = { 0xb9, 0xb8, };
1821ff656e47SZhou Yanjie
1822bb42b593SPaul Cercueil static u8 jz4780_i2s_clk_txrx_funcs[] = { 1, 0, };
1823ff656e47SZhou Yanjie
1824ff656e47SZhou Yanjie static const struct group_desc jz4780_groups[] = {
1825bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-data", jz4770_uart0_data, 0),
1826bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-hwflow", jz4770_uart0_hwflow, 0),
1827bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-data", jz4770_uart1_data, 0),
1828bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-hwflow", jz4770_uart1_hwflow, 0),
1829bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-data", jz4780_uart2_data, 1),
1830bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-hwflow", jz4780_uart2_hwflow, 1),
1831bb42b593SPaul Cercueil INGENIC_PIN_GROUP_FUNCS("uart3-data", jz4770_uart3_data,
1832bb42b593SPaul Cercueil jz4760_uart3_data_funcs),
1833bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart3-hwflow", jz4770_uart3_hwflow, 0),
1834bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart4-data", jz4780_uart4_data, 2),
1835bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-a-19", jz4780_ssi0_dt_a_19, 2),
1836bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-a-21", jz4780_ssi0_dt_a_21, 2),
1837bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-a-28", jz4780_ssi0_dt_a_28, 2),
1838bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-b", jz4780_ssi0_dt_b, 1),
1839bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-d", jz4780_ssi0_dt_d, 1),
1840bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt-e", jz4770_ssi0_dt_e, 0),
1841bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr-a-20", jz4780_ssi0_dr_a_20, 2),
1842bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr-a-27", jz4780_ssi0_dr_a_27, 2),
1843bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr-b", jz4780_ssi0_dr_b, 1),
1844bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr-d", jz4780_ssi0_dr_d, 1),
1845bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr-e", jz4770_ssi0_dr_e, 0),
1846bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk-a", jz4780_ssi0_clk_a, 2),
1847bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk-b-5", jz4780_ssi0_clk_b_5, 1),
1848bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk-b-28", jz4780_ssi0_clk_b_28, 1),
1849bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk-d", jz4780_ssi0_clk_d, 1),
1850bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk-e", jz4770_ssi0_clk_e, 0),
1851bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-gpc-b", jz4780_ssi0_gpc_b, 1),
1852bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-gpc-d", jz4780_ssi0_gpc_d, 1),
1853bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-gpc-e", jz4770_ssi0_gpc_e, 0),
1854bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0-a-23", jz4780_ssi0_ce0_a_23, 2),
1855bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0-a-25", jz4780_ssi0_ce0_a_25, 2),
1856bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0-b", jz4780_ssi0_ce0_b, 1),
1857bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0-d", jz4780_ssi0_ce0_d, 1),
1858bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0-e", jz4770_ssi0_ce0_e, 0),
1859bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce1-b", jz4780_ssi0_ce1_b, 1),
1860bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce1-d", jz4780_ssi0_ce1_d, 1),
1861bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce1-e", jz4770_ssi0_ce1_e, 0),
1862bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dt-b", jz4780_ssi1_dt_b, 2),
1863bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dt-d", jz4780_ssi1_dt_d, 2),
1864bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dt-e", jz4770_ssi1_dt_e, 1),
1865bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dr-b", jz4780_ssi1_dr_b, 2),
1866bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dr-d", jz4780_ssi1_dr_d, 2),
1867bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dr-e", jz4770_ssi1_dr_e, 1),
1868bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-clk-b", jz4780_ssi1_clk_b, 2),
1869bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-clk-d", jz4780_ssi1_clk_d, 2),
1870bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-clk-e", jz4770_ssi1_clk_e, 1),
1871bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-gpc-b", jz4780_ssi1_gpc_b, 2),
1872bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-gpc-d", jz4780_ssi1_gpc_d, 2),
1873bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-gpc-e", jz4770_ssi1_gpc_e, 1),
1874bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce0-b", jz4780_ssi1_ce0_b, 2),
1875bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce0-d", jz4780_ssi1_ce0_d, 2),
1876bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce0-e", jz4770_ssi1_ce0_e, 1),
1877bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce1-b", jz4780_ssi1_ce1_b, 2),
1878bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce1-d", jz4780_ssi1_ce1_d, 2),
1879bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce1-e", jz4770_ssi1_ce1_e, 1),
1880bb42b593SPaul Cercueil INGENIC_PIN_GROUP_FUNCS("mmc0-1bit-a", jz4770_mmc0_1bit_a,
1881bb42b593SPaul Cercueil jz4760_mmc0_1bit_a_funcs),
1882bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-4bit-a", jz4770_mmc0_4bit_a, 1),
1883bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-8bit-a", jz4780_mmc0_8bit_a, 1),
1884bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-1bit-e", jz4770_mmc0_1bit_e, 0),
1885bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-4bit-e", jz4770_mmc0_4bit_e, 0),
1886bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-1bit-d", jz4770_mmc1_1bit_d, 0),
1887bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-4bit-d", jz4770_mmc1_4bit_d, 0),
1888bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-1bit-e", jz4770_mmc1_1bit_e, 1),
1889bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-4bit-e", jz4770_mmc1_4bit_e, 1),
1890bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-1bit-b", jz4770_mmc2_1bit_b, 0),
1891bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-4bit-b", jz4770_mmc2_4bit_b, 0),
1892bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-1bit-e", jz4770_mmc2_1bit_e, 2),
1893bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc2-4bit-e", jz4770_mmc2_4bit_e, 2),
1894bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-data", jz4770_nemc_8bit_data, 0),
1895bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cle-ale", jz4770_nemc_cle_ale, 0),
1896bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-addr", jz4770_nemc_addr, 0),
1897bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-rd-we", jz4770_nemc_rd_we, 0),
1898bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-frd-fwe", jz4770_nemc_frd_fwe, 0),
1899bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-wait", jz4770_nemc_wait, 0),
1900bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs1", jz4770_nemc_cs1, 0),
1901bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs2", jz4770_nemc_cs2, 0),
1902bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs3", jz4770_nemc_cs3, 0),
1903bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs4", jz4770_nemc_cs4, 0),
1904bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs5", jz4770_nemc_cs5, 0),
1905bb42b593SPaul Cercueil INGENIC_PIN_GROUP("nemc-cs6", jz4770_nemc_cs6, 0),
1906bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c0-data", jz4770_i2c0, 0),
1907bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c1-data", jz4770_i2c1, 0),
1908bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c2-data", jz4770_i2c2, 2),
1909bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c3-data", jz4780_i2c3, 1),
1910bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c4-data-e", jz4780_i2c4_e, 1),
1911bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c4-data-f", jz4780_i2c4_f, 1),
1912bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-data-tx", jz4780_i2s_data_tx, 0),
1913bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-data-rx", jz4780_i2s_data_rx, 0),
1914bb42b593SPaul Cercueil INGENIC_PIN_GROUP_FUNCS("i2s-clk-txrx", jz4780_i2s_clk_txrx,
1915bb42b593SPaul Cercueil jz4780_i2s_clk_txrx_funcs),
1916bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-clk-rx", jz4780_i2s_clk_rx, 1),
1917bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-sysclk", jz4780_i2s_sysclk, 2),
19186adf2c56S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic", jz4780_dmic, 1),
1919bb42b593SPaul Cercueil INGENIC_PIN_GROUP("hdmi-ddc", jz4780_hdmi_ddc, 0),
1920bb42b593SPaul Cercueil INGENIC_PIN_GROUP("cim-data", jz4770_cim_8bit, 0),
1921bb42b593SPaul Cercueil INGENIC_PIN_GROUP("cim-data-12bit", jz4770_cim_12bit, 0),
19225e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-8bit", jz4770_lcd_8bit, 0),
19235e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-16bit", jz4770_lcd_16bit, 0),
19245e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-18bit", jz4770_lcd_18bit, 0),
1925bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-24bit", jz4770_lcd_24bit, 0),
19265e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-special", jz4770_lcd_special, 1),
19275e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-generic", jz4770_lcd_generic, 0),
1928bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm0", jz4770_pwm_pwm0, 0),
1929bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm1", jz4770_pwm_pwm1, 0),
1930bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm2", jz4770_pwm_pwm2, 0),
1931bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm3", jz4770_pwm_pwm3, 0),
1932bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm4", jz4770_pwm_pwm4, 0),
1933bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm5", jz4770_pwm_pwm5, 0),
1934bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm6", jz4770_pwm_pwm6, 0),
1935bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm7", jz4770_pwm_pwm7, 0),
1936ff656e47SZhou Yanjie };
1937ff656e47SZhou Yanjie
1938ff656e47SZhou Yanjie static const char *jz4780_uart2_groups[] = { "uart2-data", "uart2-hwflow", };
1939ff656e47SZhou Yanjie static const char *jz4780_uart4_groups[] = { "uart4-data", };
1940d3ef8c6bS周琰杰 (Zhou Yanjie) static const char *jz4780_ssi0_groups[] = {
1941d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-dt-a-19", "ssi0-dt-a-21", "ssi0-dt-a-28", "ssi0-dt-b", "ssi0-dt-d", "ssi0-dt-e",
1942d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-dr-a-20", "ssi0-dr-a-27", "ssi0-dr-b", "ssi0-dr-d", "ssi0-dr-e",
1943d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-clk-a", "ssi0-clk-b-5", "ssi0-clk-b-28", "ssi0-clk-d", "ssi0-clk-e",
1944d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-gpc-b", "ssi0-gpc-d", "ssi0-gpc-e",
1945d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-ce0-a-23", "ssi0-ce0-a-25", "ssi0-ce0-b", "ssi0-ce0-d", "ssi0-ce0-e",
1946d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi0-ce1-b", "ssi0-ce1-d", "ssi0-ce1-e",
1947d3ef8c6bS周琰杰 (Zhou Yanjie) };
1948d3ef8c6bS周琰杰 (Zhou Yanjie) static const char *jz4780_ssi1_groups[] = {
1949d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-dt-b", "ssi1-dt-d", "ssi1-dt-e",
1950d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-dr-b", "ssi1-dr-d", "ssi1-dr-e",
1951d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-clk-b", "ssi1-clk-d", "ssi1-clk-e",
1952d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-gpc-b", "ssi1-gpc-d", "ssi1-gpc-e",
1953d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-ce0-b", "ssi1-ce0-d", "ssi1-ce0-e",
1954d3ef8c6bS周琰杰 (Zhou Yanjie) "ssi1-ce1-b", "ssi1-ce1-d", "ssi1-ce1-e",
1955d3ef8c6bS周琰杰 (Zhou Yanjie) };
1956ff656e47SZhou Yanjie static const char *jz4780_mmc0_groups[] = {
1957ff656e47SZhou Yanjie "mmc0-1bit-a", "mmc0-4bit-a", "mmc0-8bit-a",
1958ff656e47SZhou Yanjie "mmc0-1bit-e", "mmc0-4bit-e",
1959ff656e47SZhou Yanjie };
1960ff656e47SZhou Yanjie static const char *jz4780_mmc1_groups[] = {
1961ff656e47SZhou Yanjie "mmc1-1bit-d", "mmc1-4bit-d", "mmc1-1bit-e", "mmc1-4bit-e",
1962ff656e47SZhou Yanjie };
19635de1a73eSZhou Yanjie static const char *jz4780_mmc2_groups[] = {
19645de1a73eSZhou Yanjie "mmc2-1bit-b", "mmc2-4bit-b", "mmc2-1bit-e", "mmc2-4bit-e",
19655de1a73eSZhou Yanjie };
1966ff656e47SZhou Yanjie static const char *jz4780_nemc_groups[] = {
1967ff656e47SZhou Yanjie "nemc-data", "nemc-cle-ale", "nemc-addr",
19685de1a73eSZhou Yanjie "nemc-rd-we", "nemc-frd-fwe", "nemc-wait",
1969ff656e47SZhou Yanjie };
1970ff656e47SZhou Yanjie static const char *jz4780_i2c3_groups[] = { "i2c3-data", };
1971ff656e47SZhou Yanjie static const char *jz4780_i2c4_groups[] = { "i2c4-data-e", "i2c4-data-f", };
1972f4b5c348S周琰杰 (Zhou Yanjie) static const char *jz4780_i2s_groups[] = {
1973f4b5c348S周琰杰 (Zhou Yanjie) "i2s-data-tx", "i2s-data-rx", "i2s-clk-txrx", "i2s-clk-rx", "i2s-sysclk",
1974f4b5c348S周琰杰 (Zhou Yanjie) };
19756adf2c56S周琰杰 (Zhou Yanjie) static const char *jz4780_dmic_groups[] = { "dmic", };
1976ff656e47SZhou Yanjie static const char *jz4780_cim_groups[] = { "cim-data", };
1977a0bb89e8SPaul Boddie static const char *jz4780_hdmi_ddc_groups[] = { "hdmi-ddc", };
1978ff656e47SZhou Yanjie
1979ff656e47SZhou Yanjie static const struct function_desc jz4780_functions[] = {
19807f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", jz4770_uart0),
19817f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", jz4770_uart1),
19827f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", jz4780_uart2),
19837f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart3", jz4770_uart3),
19847f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart4", jz4780_uart4),
19857f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi0", jz4780_ssi0),
19867f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi1", jz4780_ssi1),
19877f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", jz4780_mmc0),
19887f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", jz4780_mmc1),
19897f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc2", jz4780_mmc2),
19907f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc", jz4780_nemc),
19917f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs1", jz4770_cs1),
19927f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs2", jz4770_cs2),
19937f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs3", jz4770_cs3),
19947f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs4", jz4770_cs4),
19957f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs5", jz4770_cs5),
19967f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("nemc-cs6", jz4770_cs6),
19977f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c0", jz4770_i2c0),
19987f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c1", jz4770_i2c1),
19997f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c2", jz4770_i2c2),
20007f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c3", jz4780_i2c3),
20017f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c4", jz4780_i2c4),
20027f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s", jz4780_i2s),
20037f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("dmic", jz4780_dmic),
20047f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", jz4780_cim),
20057f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", jz4770_lcd),
20067f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", jz4770_pwm0),
20077f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", jz4770_pwm1),
20087f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", jz4770_pwm2),
20097f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", jz4770_pwm3),
20107f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", jz4770_pwm4),
20117f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", jz4770_pwm5),
20127f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm6", jz4770_pwm6),
20137f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm7", jz4770_pwm7),
20147f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("hdmi-ddc", jz4780_hdmi_ddc),
2015ff656e47SZhou Yanjie };
2016ff656e47SZhou Yanjie
2017ff656e47SZhou Yanjie static const struct ingenic_chip_info jz4780_chip_info = {
2018ff656e47SZhou Yanjie .num_chips = 6,
2019f742e5ebS周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
2020baf15647SPaul Cercueil .version = ID_JZ4780,
2021ff656e47SZhou Yanjie .groups = jz4780_groups,
2022ff656e47SZhou Yanjie .num_groups = ARRAY_SIZE(jz4780_groups),
2023ff656e47SZhou Yanjie .functions = jz4780_functions,
2024ff656e47SZhou Yanjie .num_functions = ARRAY_SIZE(jz4780_functions),
2025d9f5dc49S周琰杰 (Zhou Yanjie) .pull_ups = jz4780_pull_ups,
2026d9f5dc49S周琰杰 (Zhou Yanjie) .pull_downs = jz4780_pull_downs,
2027ff656e47SZhou Yanjie };
2028ff656e47SZhou Yanjie
2029fe1ad5eeSZhou Yanjie static const u32 x1000_pull_ups[4] = {
2030b4a9372aS周琰杰 (Zhou Yanjie) 0xffffffff, 0xfdffffff, 0x0dffffff, 0x0000003f,
2031fe1ad5eeSZhou Yanjie };
2032fe1ad5eeSZhou Yanjie
2033fe1ad5eeSZhou Yanjie static const u32 x1000_pull_downs[4] = {
2034fe1ad5eeSZhou Yanjie 0x00000000, 0x02000000, 0x02000000, 0x00000000,
2035fe1ad5eeSZhou Yanjie };
2036fe1ad5eeSZhou Yanjie
2037fe1ad5eeSZhou Yanjie static int x1000_uart0_data_pins[] = { 0x4a, 0x4b, };
2038fe1ad5eeSZhou Yanjie static int x1000_uart0_hwflow_pins[] = { 0x4c, 0x4d, };
2039fe1ad5eeSZhou Yanjie static int x1000_uart1_data_a_pins[] = { 0x04, 0x05, };
2040fe1ad5eeSZhou Yanjie static int x1000_uart1_data_d_pins[] = { 0x62, 0x63, };
2041b4a9372aS周琰杰 (Zhou Yanjie) static int x1000_uart1_hwflow_pins[] = { 0x64, 0x65, };
2042fe1ad5eeSZhou Yanjie static int x1000_uart2_data_a_pins[] = { 0x02, 0x03, };
2043fe1ad5eeSZhou Yanjie static int x1000_uart2_data_d_pins[] = { 0x65, 0x64, };
204428c1caafS周琰杰 (Zhou Yanjie) static int x1000_sfc_data_pins[] = { 0x1d, 0x1c, 0x1e, 0x1f, };
204528c1caafS周琰杰 (Zhou Yanjie) static int x1000_sfc_clk_pins[] = { 0x1a, };
204628c1caafS周琰杰 (Zhou Yanjie) static int x1000_sfc_ce_pins[] = { 0x1b, };
20473b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_dt_a_22_pins[] = { 0x16, };
20483b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_dt_a_29_pins[] = { 0x1d, };
20493b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_dt_d_pins[] = { 0x62, };
20503b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_dr_a_23_pins[] = { 0x17, };
20513b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_dr_a_28_pins[] = { 0x1c, };
20523b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_dr_d_pins[] = { 0x63, };
20533b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_clk_a_24_pins[] = { 0x18, };
20543b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_clk_a_26_pins[] = { 0x1a, };
20553b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_clk_d_pins[] = { 0x60, };
20563b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_gpc_a_20_pins[] = { 0x14, };
20573b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_gpc_a_31_pins[] = { 0x1f, };
20583b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_ce0_a_25_pins[] = { 0x19, };
20593b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_ce0_a_27_pins[] = { 0x1b, };
20603b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_ce0_d_pins[] = { 0x61, };
20613b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_ce1_a_21_pins[] = { 0x15, };
20623b31e9b0S周琰杰 (Zhou Yanjie) static int x1000_ssi_ce1_a_30_pins[] = { 0x1e, };
2063fe1ad5eeSZhou Yanjie static int x1000_mmc0_1bit_pins[] = { 0x18, 0x19, 0x17, };
2064fe1ad5eeSZhou Yanjie static int x1000_mmc0_4bit_pins[] = { 0x16, 0x15, 0x14, };
2065fe1ad5eeSZhou Yanjie static int x1000_mmc0_8bit_pins[] = { 0x13, 0x12, 0x11, 0x10, };
2066fe1ad5eeSZhou Yanjie static int x1000_mmc1_1bit_pins[] = { 0x40, 0x41, 0x42, };
2067fe1ad5eeSZhou Yanjie static int x1000_mmc1_4bit_pins[] = { 0x43, 0x44, 0x45, };
2068b4a9372aS周琰杰 (Zhou Yanjie) static int x1000_emc_8bit_data_pins[] = {
2069fe1ad5eeSZhou Yanjie 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2070fe1ad5eeSZhou Yanjie };
2071b4a9372aS周琰杰 (Zhou Yanjie) static int x1000_emc_16bit_data_pins[] = {
2072fe1ad5eeSZhou Yanjie 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2073fe1ad5eeSZhou Yanjie };
2074b4a9372aS周琰杰 (Zhou Yanjie) static int x1000_emc_addr_pins[] = {
2075fe1ad5eeSZhou Yanjie 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
2076fe1ad5eeSZhou Yanjie 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
2077fe1ad5eeSZhou Yanjie };
2078b4a9372aS周琰杰 (Zhou Yanjie) static int x1000_emc_rd_we_pins[] = { 0x30, 0x31, };
2079b4a9372aS周琰杰 (Zhou Yanjie) static int x1000_emc_wait_pins[] = { 0x34, };
2080b4a9372aS周琰杰 (Zhou Yanjie) static int x1000_emc_cs1_pins[] = { 0x32, };
2081b4a9372aS周琰杰 (Zhou Yanjie) static int x1000_emc_cs2_pins[] = { 0x33, };
2082fe1ad5eeSZhou Yanjie static int x1000_i2c0_pins[] = { 0x38, 0x37, };
2083fe1ad5eeSZhou Yanjie static int x1000_i2c1_a_pins[] = { 0x01, 0x00, };
2084fe1ad5eeSZhou Yanjie static int x1000_i2c1_c_pins[] = { 0x5b, 0x5a, };
2085fe1ad5eeSZhou Yanjie static int x1000_i2c2_pins[] = { 0x61, 0x60, };
2086f4b5c348S周琰杰 (Zhou Yanjie) static int x1000_i2s_data_tx_pins[] = { 0x24, };
2087f4b5c348S周琰杰 (Zhou Yanjie) static int x1000_i2s_data_rx_pins[] = { 0x23, };
2088f4b5c348S周琰杰 (Zhou Yanjie) static int x1000_i2s_clk_txrx_pins[] = { 0x21, 0x22, };
2089f4b5c348S周琰杰 (Zhou Yanjie) static int x1000_i2s_sysclk_pins[] = { 0x20, };
209028c1caafS周琰杰 (Zhou Yanjie) static int x1000_dmic_if0_pins[] = { 0x35, 0x36, };
209128c1caafS周琰杰 (Zhou Yanjie) static int x1000_dmic_if1_pins[] = { 0x25, };
2092fe1ad5eeSZhou Yanjie static int x1000_cim_pins[] = {
2093fe1ad5eeSZhou Yanjie 0x08, 0x09, 0x0a, 0x0b,
2094fe1ad5eeSZhou Yanjie 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c,
2095fe1ad5eeSZhou Yanjie };
2096fe1ad5eeSZhou Yanjie static int x1000_lcd_8bit_pins[] = {
2097fe1ad5eeSZhou Yanjie 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2098fe1ad5eeSZhou Yanjie 0x30, 0x31, 0x32, 0x33, 0x34,
2099fe1ad5eeSZhou Yanjie };
2100fe1ad5eeSZhou Yanjie static int x1000_lcd_16bit_pins[] = {
2101fe1ad5eeSZhou Yanjie 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
2102fe1ad5eeSZhou Yanjie };
2103fe1ad5eeSZhou Yanjie static int x1000_pwm_pwm0_pins[] = { 0x59, };
2104fe1ad5eeSZhou Yanjie static int x1000_pwm_pwm1_pins[] = { 0x5a, };
2105fe1ad5eeSZhou Yanjie static int x1000_pwm_pwm2_pins[] = { 0x5b, };
2106fe1ad5eeSZhou Yanjie static int x1000_pwm_pwm3_pins[] = { 0x26, };
2107fe1ad5eeSZhou Yanjie static int x1000_pwm_pwm4_pins[] = { 0x58, };
2108fe1ad5eeSZhou Yanjie static int x1000_mac_pins[] = {
2109fe1ad5eeSZhou Yanjie 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x26,
2110fe1ad5eeSZhou Yanjie };
2111fe1ad5eeSZhou Yanjie
2112fe1ad5eeSZhou Yanjie static const struct group_desc x1000_groups[] = {
2113bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-data", x1000_uart0_data, 0),
2114bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-hwflow", x1000_uart0_hwflow, 0),
2115bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-data-a", x1000_uart1_data_a, 2),
2116bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-data-d", x1000_uart1_data_d, 1),
2117bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-hwflow", x1000_uart1_hwflow, 1),
2118bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-data-a", x1000_uart2_data_a, 2),
2119bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-data-d", x1000_uart2_data_d, 0),
212028c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-data", x1000_sfc_data, 1),
212128c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-clk", x1000_sfc_clk, 1),
212228c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-ce", x1000_sfc_ce, 1),
2123bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-dt-a-22", x1000_ssi_dt_a_22, 2),
2124bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-dt-a-29", x1000_ssi_dt_a_29, 2),
2125bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-dt-d", x1000_ssi_dt_d, 0),
2126bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-dr-a-23", x1000_ssi_dr_a_23, 2),
2127bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-dr-a-28", x1000_ssi_dr_a_28, 2),
2128bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-dr-d", x1000_ssi_dr_d, 0),
2129bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-clk-a-24", x1000_ssi_clk_a_24, 2),
2130bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-clk-a-26", x1000_ssi_clk_a_26, 2),
2131bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-clk-d", x1000_ssi_clk_d, 0),
2132bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-gpc-a-20", x1000_ssi_gpc_a_20, 2),
2133bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-gpc-a-31", x1000_ssi_gpc_a_31, 2),
2134bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-ce0-a-25", x1000_ssi_ce0_a_25, 2),
2135bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-ce0-a-27", x1000_ssi_ce0_a_27, 2),
2136bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-ce0-d", x1000_ssi_ce0_d, 0),
2137bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-ce1-a-21", x1000_ssi_ce1_a_21, 2),
2138bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi-ce1-a-30", x1000_ssi_ce1_a_30, 2),
2139bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-1bit", x1000_mmc0_1bit, 1),
2140bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-4bit", x1000_mmc0_4bit, 1),
2141bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-8bit", x1000_mmc0_8bit, 1),
2142bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-1bit", x1000_mmc1_1bit, 0),
2143bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-4bit", x1000_mmc1_4bit, 0),
2144bb42b593SPaul Cercueil INGENIC_PIN_GROUP("emc-8bit-data", x1000_emc_8bit_data, 0),
2145bb42b593SPaul Cercueil INGENIC_PIN_GROUP("emc-16bit-data", x1000_emc_16bit_data, 0),
2146bb42b593SPaul Cercueil INGENIC_PIN_GROUP("emc-addr", x1000_emc_addr, 0),
2147bb42b593SPaul Cercueil INGENIC_PIN_GROUP("emc-rd-we", x1000_emc_rd_we, 0),
2148bb42b593SPaul Cercueil INGENIC_PIN_GROUP("emc-wait", x1000_emc_wait, 0),
2149bb42b593SPaul Cercueil INGENIC_PIN_GROUP("emc-cs1", x1000_emc_cs1, 0),
2150bb42b593SPaul Cercueil INGENIC_PIN_GROUP("emc-cs2", x1000_emc_cs2, 0),
2151bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c0-data", x1000_i2c0, 0),
2152bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c1-data-a", x1000_i2c1_a, 2),
2153bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c1-data-c", x1000_i2c1_c, 0),
2154bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c2-data", x1000_i2c2, 1),
2155bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-data-tx", x1000_i2s_data_tx, 1),
2156bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-data-rx", x1000_i2s_data_rx, 1),
2157bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-clk-txrx", x1000_i2s_clk_txrx, 1),
2158bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-sysclk", x1000_i2s_sysclk, 1),
215928c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if0", x1000_dmic_if0, 0),
216028c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if1", x1000_dmic_if1, 1),
2161bb42b593SPaul Cercueil INGENIC_PIN_GROUP("cim-data", x1000_cim, 2),
2162bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-8bit", x1000_lcd_8bit, 1),
2163bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-16bit", x1000_lcd_16bit, 1),
2164bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm0", x1000_pwm_pwm0, 0),
2165bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm1", x1000_pwm_pwm1, 1),
2166bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm2", x1000_pwm_pwm2, 1),
2167bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm3", x1000_pwm_pwm3, 2),
2168bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm4", x1000_pwm_pwm4, 0),
2169bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mac", x1000_mac, 1),
2170fe1ad5eeSZhou Yanjie };
2171fe1ad5eeSZhou Yanjie
2172fe1ad5eeSZhou Yanjie static const char *x1000_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
2173fe1ad5eeSZhou Yanjie static const char *x1000_uart1_groups[] = {
2174b4a9372aS周琰杰 (Zhou Yanjie) "uart1-data-a", "uart1-data-d", "uart1-hwflow",
2175fe1ad5eeSZhou Yanjie };
2176fe1ad5eeSZhou Yanjie static const char *x1000_uart2_groups[] = { "uart2-data-a", "uart2-data-d", };
217728c1caafS周琰杰 (Zhou Yanjie) static const char *x1000_sfc_groups[] = { "sfc-data", "sfc-clk", "sfc-ce", };
21783b31e9b0S周琰杰 (Zhou Yanjie) static const char *x1000_ssi_groups[] = {
21793b31e9b0S周琰杰 (Zhou Yanjie) "ssi-dt-a-22", "ssi-dt-a-29", "ssi-dt-d",
21803b31e9b0S周琰杰 (Zhou Yanjie) "ssi-dr-a-23", "ssi-dr-a-28", "ssi-dr-d",
21813b31e9b0S周琰杰 (Zhou Yanjie) "ssi-clk-a-24", "ssi-clk-a-26", "ssi-clk-d",
21823b31e9b0S周琰杰 (Zhou Yanjie) "ssi-gpc-a-20", "ssi-gpc-a-31",
21833b31e9b0S周琰杰 (Zhou Yanjie) "ssi-ce0-a-25", "ssi-ce0-a-27", "ssi-ce0-d",
21843b31e9b0S周琰杰 (Zhou Yanjie) "ssi-ce1-a-21", "ssi-ce1-a-30",
21853b31e9b0S周琰杰 (Zhou Yanjie) };
2186fe1ad5eeSZhou Yanjie static const char *x1000_mmc0_groups[] = {
2187fe1ad5eeSZhou Yanjie "mmc0-1bit", "mmc0-4bit", "mmc0-8bit",
2188fe1ad5eeSZhou Yanjie };
2189fe1ad5eeSZhou Yanjie static const char *x1000_mmc1_groups[] = {
2190b4a9372aS周琰杰 (Zhou Yanjie) "mmc1-1bit", "mmc1-4bit",
2191fe1ad5eeSZhou Yanjie };
2192b4a9372aS周琰杰 (Zhou Yanjie) static const char *x1000_emc_groups[] = {
2193b4a9372aS周琰杰 (Zhou Yanjie) "emc-8bit-data", "emc-16bit-data",
2194b4a9372aS周琰杰 (Zhou Yanjie) "emc-addr", "emc-rd-we", "emc-wait",
2195fe1ad5eeSZhou Yanjie };
2196b4a9372aS周琰杰 (Zhou Yanjie) static const char *x1000_cs1_groups[] = { "emc-cs1", };
2197b4a9372aS周琰杰 (Zhou Yanjie) static const char *x1000_cs2_groups[] = { "emc-cs2", };
2198fe1ad5eeSZhou Yanjie static const char *x1000_i2c0_groups[] = { "i2c0-data", };
2199fe1ad5eeSZhou Yanjie static const char *x1000_i2c1_groups[] = { "i2c1-data-a", "i2c1-data-c", };
2200fe1ad5eeSZhou Yanjie static const char *x1000_i2c2_groups[] = { "i2c2-data", };
2201f4b5c348S周琰杰 (Zhou Yanjie) static const char *x1000_i2s_groups[] = {
2202f4b5c348S周琰杰 (Zhou Yanjie) "i2s-data-tx", "i2s-data-rx", "i2s-clk-txrx", "i2s-sysclk",
2203f4b5c348S周琰杰 (Zhou Yanjie) };
220428c1caafS周琰杰 (Zhou Yanjie) static const char *x1000_dmic_groups[] = { "dmic-if0", "dmic-if1", };
2205fe1ad5eeSZhou Yanjie static const char *x1000_cim_groups[] = { "cim-data", };
22065e6332a7S周琰杰 (Zhou Yanjie) static const char *x1000_lcd_groups[] = { "lcd-8bit", "lcd-16bit", };
2207fe1ad5eeSZhou Yanjie static const char *x1000_pwm0_groups[] = { "pwm0", };
2208fe1ad5eeSZhou Yanjie static const char *x1000_pwm1_groups[] = { "pwm1", };
2209fe1ad5eeSZhou Yanjie static const char *x1000_pwm2_groups[] = { "pwm2", };
2210fe1ad5eeSZhou Yanjie static const char *x1000_pwm3_groups[] = { "pwm3", };
2211fe1ad5eeSZhou Yanjie static const char *x1000_pwm4_groups[] = { "pwm4", };
2212fe1ad5eeSZhou Yanjie static const char *x1000_mac_groups[] = { "mac", };
2213fe1ad5eeSZhou Yanjie
2214fe1ad5eeSZhou Yanjie static const struct function_desc x1000_functions[] = {
22157f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", x1000_uart0),
22167f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", x1000_uart1),
22177f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", x1000_uart2),
22187f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("sfc", x1000_sfc),
22197f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi", x1000_ssi),
22207f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", x1000_mmc0),
22217f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", x1000_mmc1),
22227f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("emc", x1000_emc),
22237f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("emc-cs1", x1000_cs1),
22247f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("emc-cs2", x1000_cs2),
22257f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c0", x1000_i2c0),
22267f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c1", x1000_i2c1),
22277f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c2", x1000_i2c2),
22287f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s", x1000_i2s),
22297f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("dmic", x1000_dmic),
22307f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", x1000_cim),
22317f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", x1000_lcd),
22327f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", x1000_pwm0),
22337f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", x1000_pwm1),
22347f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", x1000_pwm2),
22357f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", x1000_pwm3),
22367f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", x1000_pwm4),
22377f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mac", x1000_mac),
2238fe1ad5eeSZhou Yanjie };
2239fe1ad5eeSZhou Yanjie
22409279c00fSAidan MacDonald static const struct regmap_range x1000_access_ranges[] = {
22419279c00fSAidan MacDonald regmap_reg_range(0x000, 0x400 - 4),
22429279c00fSAidan MacDonald regmap_reg_range(0x700, 0x800 - 4),
22439279c00fSAidan MacDonald };
22449279c00fSAidan MacDonald
22459279c00fSAidan MacDonald /* shared with X1500 */
22469279c00fSAidan MacDonald static const struct regmap_access_table x1000_access_table = {
22479279c00fSAidan MacDonald .yes_ranges = x1000_access_ranges,
22489279c00fSAidan MacDonald .n_yes_ranges = ARRAY_SIZE(x1000_access_ranges),
22499279c00fSAidan MacDonald };
22509279c00fSAidan MacDonald
2251fe1ad5eeSZhou Yanjie static const struct ingenic_chip_info x1000_chip_info = {
2252fe1ad5eeSZhou Yanjie .num_chips = 4,
2253f742e5ebS周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
2254baf15647SPaul Cercueil .version = ID_X1000,
2255fe1ad5eeSZhou Yanjie .groups = x1000_groups,
2256fe1ad5eeSZhou Yanjie .num_groups = ARRAY_SIZE(x1000_groups),
2257fe1ad5eeSZhou Yanjie .functions = x1000_functions,
2258fe1ad5eeSZhou Yanjie .num_functions = ARRAY_SIZE(x1000_functions),
2259fe1ad5eeSZhou Yanjie .pull_ups = x1000_pull_ups,
2260fe1ad5eeSZhou Yanjie .pull_downs = x1000_pull_downs,
22619279c00fSAidan MacDonald .access_table = &x1000_access_table,
2262fe1ad5eeSZhou Yanjie };
2263fe1ad5eeSZhou Yanjie
22645d21595bSZhou Yanjie static int x1500_uart0_data_pins[] = { 0x4a, 0x4b, };
22655d21595bSZhou Yanjie static int x1500_uart0_hwflow_pins[] = { 0x4c, 0x4d, };
22665d21595bSZhou Yanjie static int x1500_uart1_data_a_pins[] = { 0x04, 0x05, };
22675d21595bSZhou Yanjie static int x1500_uart1_data_d_pins[] = { 0x62, 0x63, };
2268b4a9372aS周琰杰 (Zhou Yanjie) static int x1500_uart1_hwflow_pins[] = { 0x64, 0x65, };
22695d21595bSZhou Yanjie static int x1500_uart2_data_a_pins[] = { 0x02, 0x03, };
22705d21595bSZhou Yanjie static int x1500_uart2_data_d_pins[] = { 0x65, 0x64, };
2271b4a9372aS周琰杰 (Zhou Yanjie) static int x1500_mmc_1bit_pins[] = { 0x18, 0x19, 0x17, };
2272b4a9372aS周琰杰 (Zhou Yanjie) static int x1500_mmc_4bit_pins[] = { 0x16, 0x15, 0x14, };
22735d21595bSZhou Yanjie static int x1500_i2c0_pins[] = { 0x38, 0x37, };
22745d21595bSZhou Yanjie static int x1500_i2c1_a_pins[] = { 0x01, 0x00, };
22755d21595bSZhou Yanjie static int x1500_i2c1_c_pins[] = { 0x5b, 0x5a, };
22765d21595bSZhou Yanjie static int x1500_i2c2_pins[] = { 0x61, 0x60, };
2277f4b5c348S周琰杰 (Zhou Yanjie) static int x1500_i2s_data_tx_pins[] = { 0x24, };
2278f4b5c348S周琰杰 (Zhou Yanjie) static int x1500_i2s_data_rx_pins[] = { 0x23, };
2279f4b5c348S周琰杰 (Zhou Yanjie) static int x1500_i2s_clk_txrx_pins[] = { 0x21, 0x22, };
2280f4b5c348S周琰杰 (Zhou Yanjie) static int x1500_i2s_sysclk_pins[] = { 0x20, };
228128c1caafS周琰杰 (Zhou Yanjie) static int x1500_dmic_if0_pins[] = { 0x35, 0x36, };
228228c1caafS周琰杰 (Zhou Yanjie) static int x1500_dmic_if1_pins[] = { 0x25, };
22835d21595bSZhou Yanjie static int x1500_cim_pins[] = {
22845d21595bSZhou Yanjie 0x08, 0x09, 0x0a, 0x0b,
22855d21595bSZhou Yanjie 0x13, 0x12, 0x11, 0x10, 0x0f, 0x0e, 0x0d, 0x0c,
22865d21595bSZhou Yanjie };
22875d21595bSZhou Yanjie static int x1500_pwm_pwm0_pins[] = { 0x59, };
22885d21595bSZhou Yanjie static int x1500_pwm_pwm1_pins[] = { 0x5a, };
22895d21595bSZhou Yanjie static int x1500_pwm_pwm2_pins[] = { 0x5b, };
22905d21595bSZhou Yanjie static int x1500_pwm_pwm3_pins[] = { 0x26, };
22915d21595bSZhou Yanjie static int x1500_pwm_pwm4_pins[] = { 0x58, };
22925d21595bSZhou Yanjie
22935d21595bSZhou Yanjie static const struct group_desc x1500_groups[] = {
2294bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-data", x1500_uart0_data, 0),
2295bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-hwflow", x1500_uart0_hwflow, 0),
2296bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-data-a", x1500_uart1_data_a, 2),
2297bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-data-d", x1500_uart1_data_d, 1),
2298bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-hwflow", x1500_uart1_hwflow, 1),
2299bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-data-a", x1500_uart2_data_a, 2),
2300bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart2-data-d", x1500_uart2_data_d, 0),
230128c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-data", x1000_sfc_data, 1),
230228c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-clk", x1000_sfc_clk, 1),
230328c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-ce", x1000_sfc_ce, 1),
2304bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc-1bit", x1500_mmc_1bit, 1),
2305bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc-4bit", x1500_mmc_4bit, 1),
2306bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c0-data", x1500_i2c0, 0),
2307bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c1-data-a", x1500_i2c1_a, 2),
2308bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c1-data-c", x1500_i2c1_c, 0),
2309bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c2-data", x1500_i2c2, 1),
2310bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-data-tx", x1500_i2s_data_tx, 1),
2311bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-data-rx", x1500_i2s_data_rx, 1),
2312bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-clk-txrx", x1500_i2s_clk_txrx, 1),
2313bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-sysclk", x1500_i2s_sysclk, 1),
231428c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if0", x1500_dmic_if0, 0),
231528c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if1", x1500_dmic_if1, 1),
2316bb42b593SPaul Cercueil INGENIC_PIN_GROUP("cim-data", x1500_cim, 2),
2317bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm0", x1500_pwm_pwm0, 0),
2318bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm1", x1500_pwm_pwm1, 1),
2319bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm2", x1500_pwm_pwm2, 1),
2320bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm3", x1500_pwm_pwm3, 2),
2321bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm4", x1500_pwm_pwm4, 0),
23225d21595bSZhou Yanjie };
23235d21595bSZhou Yanjie
23245d21595bSZhou Yanjie static const char *x1500_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
23255d21595bSZhou Yanjie static const char *x1500_uart1_groups[] = {
2326b4a9372aS周琰杰 (Zhou Yanjie) "uart1-data-a", "uart1-data-d", "uart1-hwflow",
23275d21595bSZhou Yanjie };
23285d21595bSZhou Yanjie static const char *x1500_uart2_groups[] = { "uart2-data-a", "uart2-data-d", };
2329b4a9372aS周琰杰 (Zhou Yanjie) static const char *x1500_mmc_groups[] = { "mmc-1bit", "mmc-4bit", };
23305d21595bSZhou Yanjie static const char *x1500_i2c0_groups[] = { "i2c0-data", };
23315d21595bSZhou Yanjie static const char *x1500_i2c1_groups[] = { "i2c1-data-a", "i2c1-data-c", };
23325d21595bSZhou Yanjie static const char *x1500_i2c2_groups[] = { "i2c2-data", };
2333f4b5c348S周琰杰 (Zhou Yanjie) static const char *x1500_i2s_groups[] = {
2334f4b5c348S周琰杰 (Zhou Yanjie) "i2s-data-tx", "i2s-data-rx", "i2s-clk-txrx", "i2s-sysclk",
2335f4b5c348S周琰杰 (Zhou Yanjie) };
233628c1caafS周琰杰 (Zhou Yanjie) static const char *x1500_dmic_groups[] = { "dmic-if0", "dmic-if1", };
23375d21595bSZhou Yanjie static const char *x1500_cim_groups[] = { "cim-data", };
23385d21595bSZhou Yanjie static const char *x1500_pwm0_groups[] = { "pwm0", };
23395d21595bSZhou Yanjie static const char *x1500_pwm1_groups[] = { "pwm1", };
23405d21595bSZhou Yanjie static const char *x1500_pwm2_groups[] = { "pwm2", };
23415d21595bSZhou Yanjie static const char *x1500_pwm3_groups[] = { "pwm3", };
23425d21595bSZhou Yanjie static const char *x1500_pwm4_groups[] = { "pwm4", };
23435d21595bSZhou Yanjie
23445d21595bSZhou Yanjie static const struct function_desc x1500_functions[] = {
23457f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", x1500_uart0),
23467f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", x1500_uart1),
23477f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", x1500_uart2),
23487f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("sfc", x1000_sfc),
23497f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc", x1500_mmc),
23507f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c0", x1500_i2c0),
23517f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c1", x1500_i2c1),
23527f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c2", x1500_i2c2),
23537f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s", x1500_i2s),
23547f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("dmic", x1500_dmic),
23557f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", x1500_cim),
23567f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", x1500_pwm0),
23577f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", x1500_pwm1),
23587f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", x1500_pwm2),
23597f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", x1500_pwm3),
23607f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", x1500_pwm4),
23615d21595bSZhou Yanjie };
23625d21595bSZhou Yanjie
23635d21595bSZhou Yanjie static const struct ingenic_chip_info x1500_chip_info = {
23645d21595bSZhou Yanjie .num_chips = 4,
2365f742e5ebS周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
2366baf15647SPaul Cercueil .version = ID_X1500,
23675d21595bSZhou Yanjie .groups = x1500_groups,
23685d21595bSZhou Yanjie .num_groups = ARRAY_SIZE(x1500_groups),
23695d21595bSZhou Yanjie .functions = x1500_functions,
23705d21595bSZhou Yanjie .num_functions = ARRAY_SIZE(x1500_functions),
23715d21595bSZhou Yanjie .pull_ups = x1000_pull_ups,
23725d21595bSZhou Yanjie .pull_downs = x1000_pull_downs,
23739279c00fSAidan MacDonald .access_table = &x1000_access_table,
23745d21595bSZhou Yanjie };
23755d21595bSZhou Yanjie
23764da56f9cSPaul Boddie static const u32 x1600_pull_ups[4] = {
23774da56f9cSPaul Boddie 0xffffffff, 0xdffbf7bf, 0x987e0000, 0x0000003f,
23784da56f9cSPaul Boddie };
23794da56f9cSPaul Boddie
23804da56f9cSPaul Boddie static const u32 x1600_pull_downs[4] = {
23814da56f9cSPaul Boddie 0x00000000, 0x00000000, 0x07000007, 0x00000000,
23824da56f9cSPaul Boddie };
23834da56f9cSPaul Boddie
23844da56f9cSPaul Boddie static int x1600_uart0_data_pins[] = { 0x27, 0x28, };
23854da56f9cSPaul Boddie static int x1600_uart0_hwflow_pins[] = { 0x29, 0x2a, };
23864da56f9cSPaul Boddie static int x1600_uart1_data_pins[] = { 0x23, 0x22, };
23874da56f9cSPaul Boddie static int x1600_uart1_hwflow_pins[] = { 0x25, 0x24, };
23884da56f9cSPaul Boddie static int x1600_uart2_data_a_pins[] = { 0x1f, 0x1e, };
23894da56f9cSPaul Boddie static int x1600_uart2_data_b_pins[] = { 0x21, 0x20, };
23904da56f9cSPaul Boddie static int x1600_uart3_data_b_pins[] = { 0x25, 0x24, };
23914da56f9cSPaul Boddie static int x1600_uart3_data_d_pins[] = { 0x65, 0x64, };
23924da56f9cSPaul Boddie static int x1600_sfc_pins[] = { 0x53, 0x54, 0x55, 0x56, 0x51, 0x52, 0x24, };
23934da56f9cSPaul Boddie static int x1600_ssi_dt_a_pins[] = { 0x1e, };
23944da56f9cSPaul Boddie static int x1600_ssi_dt_b_pins[] = { 0x2d, };
23954da56f9cSPaul Boddie static int x1600_ssi_dr_a_pins[] = { 0x1d, };
23964da56f9cSPaul Boddie static int x1600_ssi_dr_b_pins[] = { 0x2e, };
23974da56f9cSPaul Boddie static int x1600_ssi_clk_a_pins[] = { 0x1f, };
23984da56f9cSPaul Boddie static int x1600_ssi_clk_b_pins[] = { 0x2c, };
23994da56f9cSPaul Boddie static int x1600_ssi_ce0_a_pins[] = { 0x1c, };
24004da56f9cSPaul Boddie static int x1600_ssi_ce0_b_pins[] = { 0x31, };
24014da56f9cSPaul Boddie static int x1600_ssi_ce1_a_pins[] = { 0x22, };
24024da56f9cSPaul Boddie static int x1600_ssi_ce1_b_pins[] = { 0x30, };
24034da56f9cSPaul Boddie static int x1600_mmc0_1bit_b_pins[] = { 0x2c, 0x2d, 0x2e, };
24044da56f9cSPaul Boddie static int x1600_mmc0_4bit_b_pins[] = { 0x2f, 0x30, 0x31, };
24054da56f9cSPaul Boddie static int x1600_mmc0_1bit_c_pins[] = { 0x51, 0x53, 0x54, };
24064da56f9cSPaul Boddie static int x1600_mmc0_4bit_c_pins[] = { 0x56, 0x55, 0x52, };
24074da56f9cSPaul Boddie static int x1600_mmc1_1bit_pins[] = { 0x60, 0x61, 0x62, };
24084da56f9cSPaul Boddie static int x1600_mmc1_4bit_pins[] = { 0x63, 0x64, 0x65, };
24094da56f9cSPaul Boddie static int x1600_i2c0_a_pins[] = { 0x1d, 0x1c, };
24104da56f9cSPaul Boddie static int x1600_i2c0_b_pins[] = { 0x3f, 0x3e, };
24114da56f9cSPaul Boddie static int x1600_i2c1_b_15_pins[] = { 0x30, 0x2f, };
24124da56f9cSPaul Boddie static int x1600_i2c1_b_19_pins[] = { 0x34, 0x33, };
24134da56f9cSPaul Boddie static int x1600_i2s_data_tx_pins[] = { 0x39, };
24144da56f9cSPaul Boddie static int x1600_i2s_data_rx_pins[] = { 0x35, };
24154da56f9cSPaul Boddie static int x1600_i2s_clk_rx_pins[] = { 0x37, 0x38, };
24164da56f9cSPaul Boddie static int x1600_i2s_clk_tx_pins[] = { 0x3b, 0x3c, };
24174da56f9cSPaul Boddie static int x1600_i2s_sysclk_pins[] = { 0x36, 0x3a, };
24184da56f9cSPaul Boddie
24194da56f9cSPaul Boddie static int x1600_cim_pins[] = {
24204da56f9cSPaul Boddie 0x14, 0x16, 0x15, 0x18, 0x13,
24214da56f9cSPaul Boddie 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
24224da56f9cSPaul Boddie };
24234da56f9cSPaul Boddie
24244da56f9cSPaul Boddie static int x1600_slcd_8bit_pins[] = {
24254da56f9cSPaul Boddie 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
24264da56f9cSPaul Boddie 0x17, 0x19, 0x1a, 0x1b,
24274da56f9cSPaul Boddie };
24284da56f9cSPaul Boddie
24294da56f9cSPaul Boddie static int x1600_slcd_16bit_pins[] = {
24304da56f9cSPaul Boddie 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
24314da56f9cSPaul Boddie };
24324da56f9cSPaul Boddie
24334da56f9cSPaul Boddie static int x1600_lcd_16bit_pins[] = {
24344da56f9cSPaul Boddie 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
24354da56f9cSPaul Boddie 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
24364da56f9cSPaul Boddie 0x18, 0x19, 0x1a, 0x1b,
24374da56f9cSPaul Boddie };
24384da56f9cSPaul Boddie
24394da56f9cSPaul Boddie static int x1600_lcd_18bit_pins[] = {
24404da56f9cSPaul Boddie 0x10, 0x11,
24414da56f9cSPaul Boddie };
24424da56f9cSPaul Boddie
24434da56f9cSPaul Boddie static int x1600_lcd_24bit_pins[] = {
24444da56f9cSPaul Boddie 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
24454da56f9cSPaul Boddie };
24464da56f9cSPaul Boddie
24474da56f9cSPaul Boddie static int x1600_pwm_pwm0_pins[] = { 0x40, };
24484da56f9cSPaul Boddie static int x1600_pwm_pwm1_pins[] = { 0x41, };
24494da56f9cSPaul Boddie static int x1600_pwm_pwm2_pins[] = { 0x42, };
24504da56f9cSPaul Boddie static int x1600_pwm_pwm3_pins[] = { 0x58, };
24514da56f9cSPaul Boddie static int x1600_pwm_pwm4_pins[] = { 0x59, };
24524da56f9cSPaul Boddie static int x1600_pwm_pwm5_b_pins[] = { 0x33, };
24534da56f9cSPaul Boddie static int x1600_pwm_pwm5_c_pins[] = { 0x5a, };
24544da56f9cSPaul Boddie static int x1600_pwm_pwm6_b9_pins[] = { 0x29, };
24554da56f9cSPaul Boddie static int x1600_pwm_pwm6_b20_pins[] = { 0x34, };
24564da56f9cSPaul Boddie static int x1600_pwm_pwm7_b10_pins[] = { 0x2a, };
24574da56f9cSPaul Boddie static int x1600_pwm_pwm7_b21_pins[] = { 0x35, };
24584da56f9cSPaul Boddie
24594da56f9cSPaul Boddie static int x1600_mac_pins[] = {
24604da56f9cSPaul Boddie 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c,
24614da56f9cSPaul Boddie };
24624da56f9cSPaul Boddie
24634da56f9cSPaul Boddie static int x1600_sfc_funcs[] = { 0, 0, 0, 0, 0, 0, 2, };
24644da56f9cSPaul Boddie
24654da56f9cSPaul Boddie static const struct group_desc x1600_groups[] = {
24664da56f9cSPaul Boddie INGENIC_PIN_GROUP("uart0-data", x1600_uart0_data, 0),
24674da56f9cSPaul Boddie INGENIC_PIN_GROUP("uart0-hwflow", x1600_uart0_hwflow, 0),
24684da56f9cSPaul Boddie INGENIC_PIN_GROUP("uart1-data", x1600_uart1_data, 1),
24694da56f9cSPaul Boddie INGENIC_PIN_GROUP("uart1-hwflow", x1600_uart1_hwflow, 1),
24704da56f9cSPaul Boddie INGENIC_PIN_GROUP("uart2-data-a", x1600_uart2_data_a, 2),
24714da56f9cSPaul Boddie INGENIC_PIN_GROUP("uart2-data-b", x1600_uart2_data_b, 1),
24724da56f9cSPaul Boddie INGENIC_PIN_GROUP("uart3-data-b", x1600_uart3_data_b, 0),
24734da56f9cSPaul Boddie INGENIC_PIN_GROUP("uart3-data-d", x1600_uart3_data_d, 2),
24744da56f9cSPaul Boddie INGENIC_PIN_GROUP_FUNCS("sfc", x1600_sfc, x1600_sfc_funcs),
24754da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-dt-a", x1600_ssi_dt_a, 0),
24764da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-dt-b", x1600_ssi_dt_b, 1),
24774da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-dr-a", x1600_ssi_dr_a, 0),
24784da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-dr-b", x1600_ssi_dr_b, 1),
24794da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-clk-a", x1600_ssi_clk_a, 0),
24804da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-clk-b", x1600_ssi_clk_b, 1),
24814da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-ce0-a", x1600_ssi_ce0_a, 0),
24824da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-ce0-b", x1600_ssi_ce0_b, 1),
24834da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-ce1-a", x1600_ssi_ce1_a, 2),
24844da56f9cSPaul Boddie INGENIC_PIN_GROUP("ssi-ce1-b", x1600_ssi_ce1_b, 1),
24854da56f9cSPaul Boddie INGENIC_PIN_GROUP("mmc0-1bit-b", x1600_mmc0_1bit_b, 0),
24864da56f9cSPaul Boddie INGENIC_PIN_GROUP("mmc0-4bit-b", x1600_mmc0_4bit_b, 0),
24874da56f9cSPaul Boddie INGENIC_PIN_GROUP("mmc0-1bit-c", x1600_mmc0_1bit_c, 1),
24884da56f9cSPaul Boddie INGENIC_PIN_GROUP("mmc0-4bit-c", x1600_mmc0_4bit_c, 1),
24894da56f9cSPaul Boddie INGENIC_PIN_GROUP("mmc1-1bit", x1600_mmc1_1bit, 0),
24904da56f9cSPaul Boddie INGENIC_PIN_GROUP("mmc1-4bit", x1600_mmc1_4bit, 0),
24914da56f9cSPaul Boddie INGENIC_PIN_GROUP("i2c0-data-a", x1600_i2c0_a, 2),
24924da56f9cSPaul Boddie INGENIC_PIN_GROUP("i2c0-data-b", x1600_i2c0_b, 0),
24934da56f9cSPaul Boddie INGENIC_PIN_GROUP("i2c1-data-b-15", x1600_i2c1_b_15, 2),
24944da56f9cSPaul Boddie INGENIC_PIN_GROUP("i2c1-data-b-19", x1600_i2c1_b_19, 0),
24954da56f9cSPaul Boddie INGENIC_PIN_GROUP("i2s-data-tx", x1600_i2s_data_tx, 0),
24964da56f9cSPaul Boddie INGENIC_PIN_GROUP("i2s-data-rx", x1600_i2s_data_rx, 0),
24974da56f9cSPaul Boddie INGENIC_PIN_GROUP("i2s-clk-rx", x1600_i2s_clk_rx, 0),
24984da56f9cSPaul Boddie INGENIC_PIN_GROUP("i2s-clk-tx", x1600_i2s_clk_tx, 0),
24994da56f9cSPaul Boddie INGENIC_PIN_GROUP("i2s-sysclk", x1600_i2s_sysclk, 0),
25004da56f9cSPaul Boddie INGENIC_PIN_GROUP("cim-data", x1600_cim, 2),
25014da56f9cSPaul Boddie INGENIC_PIN_GROUP("slcd-8bit", x1600_slcd_8bit, 1),
25024da56f9cSPaul Boddie INGENIC_PIN_GROUP("slcd-16bit", x1600_slcd_16bit, 1),
25034da56f9cSPaul Boddie INGENIC_PIN_GROUP("lcd-16bit", x1600_lcd_16bit, 0),
25044da56f9cSPaul Boddie INGENIC_PIN_GROUP("lcd-18bit", x1600_lcd_18bit, 0),
25054da56f9cSPaul Boddie INGENIC_PIN_GROUP("lcd-24bit", x1600_lcd_24bit, 0),
25064da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm0", x1600_pwm_pwm0, 0),
25074da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm1", x1600_pwm_pwm1, 0),
25084da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm2", x1600_pwm_pwm2, 0),
25094da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm3", x1600_pwm_pwm3, 1),
25104da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm4", x1600_pwm_pwm4, 1),
25114da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm5-b", x1600_pwm_pwm5_b, 2),
25124da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm5-c", x1600_pwm_pwm5_c, 1),
25134da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm6-b9", x1600_pwm_pwm6_b9, 1),
25144da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm6-b20", x1600_pwm_pwm6_b20, 2),
25154da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm7-b10", x1600_pwm_pwm7_b10, 1),
25164da56f9cSPaul Boddie INGENIC_PIN_GROUP("pwm7-b21", x1600_pwm_pwm7_b21, 2),
25174da56f9cSPaul Boddie INGENIC_PIN_GROUP("mac", x1600_mac, 1),
25184da56f9cSPaul Boddie };
25194da56f9cSPaul Boddie
25204da56f9cSPaul Boddie static const char * const x1600_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
25214da56f9cSPaul Boddie static const char * const x1600_uart1_groups[] = { "uart1-data", "uart1-hwflow", };
25224da56f9cSPaul Boddie static const char * const x1600_uart2_groups[] = { "uart2-data-a", "uart2-data-b", };
25234da56f9cSPaul Boddie static const char * const x1600_uart3_groups[] = { "uart3-data-b", "uart3-data-d", };
25244da56f9cSPaul Boddie
25254da56f9cSPaul Boddie static const char * const x1600_sfc_groups[] = { "sfc", };
25264da56f9cSPaul Boddie
25274da56f9cSPaul Boddie static const char * const x1600_ssi_groups[] = {
25284da56f9cSPaul Boddie "ssi-dt-a", "ssi-dt-b",
25294da56f9cSPaul Boddie "ssi-dr-a", "ssi-dr-b",
25304da56f9cSPaul Boddie "ssi-clk-a", "ssi-clk-b",
25314da56f9cSPaul Boddie "ssi-ce0-a", "ssi-ce0-b",
25324da56f9cSPaul Boddie "ssi-ce1-a", "ssi-ce1-b",
25334da56f9cSPaul Boddie };
25344da56f9cSPaul Boddie
25354da56f9cSPaul Boddie static const char * const x1600_mmc0_groups[] = { "mmc0-1bit-b", "mmc0-4bit-b",
25364da56f9cSPaul Boddie "mmc0-1bit-c", "mmc0-4bit-c",
25374da56f9cSPaul Boddie };
25384da56f9cSPaul Boddie
25394da56f9cSPaul Boddie static const char * const x1600_mmc1_groups[] = { "mmc1-1bit", "mmc1-4bit", };
25404da56f9cSPaul Boddie
25414da56f9cSPaul Boddie static const char * const x1600_i2c0_groups[] = { "i2c0-data-a", "i2c0-data-b", };
25424da56f9cSPaul Boddie static const char * const x1600_i2c1_groups[] = { "i2c1-data-b-15", "i2c1-data-b-19", };
25434da56f9cSPaul Boddie
25444da56f9cSPaul Boddie static const char * const x1600_i2s_groups[] = {
25454da56f9cSPaul Boddie "i2s-data-tx", "i2s-data-rx", "i2s-clk-rx", "i2s-clk-tx", "i2s-sysclk",
25464da56f9cSPaul Boddie };
25474da56f9cSPaul Boddie
25484da56f9cSPaul Boddie static const char * const x1600_cim_groups[] = { "cim-data", };
25494da56f9cSPaul Boddie
25504da56f9cSPaul Boddie static const char * const x1600_lcd_groups[] = { "slcd-8bit", "slcd-16bit",
25514da56f9cSPaul Boddie "lcd-16bit", "lcd-18bit", "lcd-24bit", "lcd-no-pins",
25524da56f9cSPaul Boddie };
25534da56f9cSPaul Boddie
25544da56f9cSPaul Boddie static const char * const x1600_pwm0_groups[] = { "pwm0", };
25554da56f9cSPaul Boddie static const char * const x1600_pwm1_groups[] = { "pwm1", };
25564da56f9cSPaul Boddie static const char * const x1600_pwm2_groups[] = { "pwm2", };
25574da56f9cSPaul Boddie static const char * const x1600_pwm3_groups[] = { "pwm3", };
25584da56f9cSPaul Boddie static const char * const x1600_pwm4_groups[] = { "pwm4", };
25594da56f9cSPaul Boddie static const char * const x1600_pwm5_groups[] = { "pwm5-b", "pwm5-c", };
25604da56f9cSPaul Boddie static const char * const x1600_pwm6_groups[] = { "pwm6-b9", "pwm6-b20", };
25614da56f9cSPaul Boddie static const char * const x1600_pwm7_groups[] = { "pwm7-b10", "pwm7-b21", };
25624da56f9cSPaul Boddie
25634da56f9cSPaul Boddie static const char * const x1600_mac_groups[] = { "mac", };
25644da56f9cSPaul Boddie
25654da56f9cSPaul Boddie static const struct function_desc x1600_functions[] = {
25664da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("uart0", x1600_uart0),
25674da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("uart1", x1600_uart1),
25684da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("uart2", x1600_uart2),
25694da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("uart3", x1600_uart3),
25704da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("sfc", x1600_sfc),
25714da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("ssi", x1600_ssi),
25724da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("mmc0", x1600_mmc0),
25734da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("mmc1", x1600_mmc1),
25744da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("i2c0", x1600_i2c0),
25754da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("i2c1", x1600_i2c1),
25764da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("i2s", x1600_i2s),
25774da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("cim", x1600_cim),
25784da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("lcd", x1600_lcd),
25794da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("pwm0", x1600_pwm0),
25804da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("pwm1", x1600_pwm1),
25814da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("pwm2", x1600_pwm2),
25824da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("pwm3", x1600_pwm3),
25834da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("pwm4", x1600_pwm4),
25844da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("pwm5", x1600_pwm5),
25854da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("pwm6", x1600_pwm6),
25864da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("pwm7", x1600_pwm7),
25874da56f9cSPaul Boddie INGENIC_PIN_FUNCTION("mac", x1600_mac),
25884da56f9cSPaul Boddie };
25894da56f9cSPaul Boddie
25904da56f9cSPaul Boddie static const struct ingenic_chip_info x1600_chip_info = {
25914da56f9cSPaul Boddie .num_chips = 4,
25924da56f9cSPaul Boddie .reg_offset = 0x100,
25934da56f9cSPaul Boddie .version = ID_X1600,
25944da56f9cSPaul Boddie .groups = x1600_groups,
25954da56f9cSPaul Boddie .num_groups = ARRAY_SIZE(x1600_groups),
25964da56f9cSPaul Boddie .functions = x1600_functions,
25974da56f9cSPaul Boddie .num_functions = ARRAY_SIZE(x1600_functions),
25984da56f9cSPaul Boddie .pull_ups = x1600_pull_ups,
25994da56f9cSPaul Boddie .pull_downs = x1600_pull_downs,
26004da56f9cSPaul Boddie .access_table = &x1000_access_table,
26014da56f9cSPaul Boddie };
26024da56f9cSPaul Boddie
2603d7da2a1eS周琰杰 (Zhou Yanjie) static const u32 x1830_pull_ups[4] = {
2604d7da2a1eS周琰杰 (Zhou Yanjie) 0x5fdfffc0, 0xffffefff, 0x1ffffbff, 0x0fcff3fc,
2605d7da2a1eS周琰杰 (Zhou Yanjie) };
2606d7da2a1eS周琰杰 (Zhou Yanjie)
2607d7da2a1eS周琰杰 (Zhou Yanjie) static const u32 x1830_pull_downs[4] = {
2608d7da2a1eS周琰杰 (Zhou Yanjie) 0x5fdfffc0, 0xffffefff, 0x1ffffbff, 0x0fcff3fc,
2609d7da2a1eS周琰杰 (Zhou Yanjie) };
2610d7da2a1eS周琰杰 (Zhou Yanjie)
2611d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_uart0_data_pins[] = { 0x33, 0x36, };
2612d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_uart0_hwflow_pins[] = { 0x34, 0x35, };
2613d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_uart1_data_pins[] = { 0x38, 0x37, };
261428c1caafS周琰杰 (Zhou Yanjie) static int x1830_sfc_data_pins[] = { 0x17, 0x18, 0x1a, 0x19, };
261528c1caafS周琰杰 (Zhou Yanjie) static int x1830_sfc_clk_pins[] = { 0x1b, };
261628c1caafS周琰杰 (Zhou Yanjie) static int x1830_sfc_ce_pins[] = { 0x1c, };
2617d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi0_dt_pins[] = { 0x4c, };
2618d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi0_dr_pins[] = { 0x4b, };
2619d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi0_clk_pins[] = { 0x4f, };
2620d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi0_gpc_pins[] = { 0x4d, };
2621d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi0_ce0_pins[] = { 0x50, };
2622d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi0_ce1_pins[] = { 0x4e, };
2623d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi1_dt_c_pins[] = { 0x53, };
2624d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi1_dt_d_pins[] = { 0x62, };
262511015196S周琰杰 (Zhou Yanjie) static int x1830_ssi1_dr_c_pins[] = { 0x54, };
2626d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi1_dr_d_pins[] = { 0x63, };
262711015196S周琰杰 (Zhou Yanjie) static int x1830_ssi1_clk_c_pins[] = { 0x57, };
2628d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi1_clk_d_pins[] = { 0x66, };
262911015196S周琰杰 (Zhou Yanjie) static int x1830_ssi1_gpc_c_pins[] = { 0x55, };
2630d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi1_gpc_d_pins[] = { 0x64, };
263111015196S周琰杰 (Zhou Yanjie) static int x1830_ssi1_ce0_c_pins[] = { 0x58, };
2632d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi1_ce0_d_pins[] = { 0x67, };
263311015196S周琰杰 (Zhou Yanjie) static int x1830_ssi1_ce1_c_pins[] = { 0x56, };
2634d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_ssi1_ce1_d_pins[] = { 0x65, };
2635d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_mmc0_1bit_pins[] = { 0x24, 0x25, 0x20, };
2636d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_mmc0_4bit_pins[] = { 0x21, 0x22, 0x23, };
2637d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_mmc1_1bit_pins[] = { 0x42, 0x43, 0x44, };
2638d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_mmc1_4bit_pins[] = { 0x45, 0x46, 0x47, };
2639d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_i2c0_pins[] = { 0x0c, 0x0d, };
2640d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_i2c1_pins[] = { 0x39, 0x3a, };
2641d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_i2c2_pins[] = { 0x5b, 0x5c, };
2642f4b5c348S周琰杰 (Zhou Yanjie) static int x1830_i2s_data_tx_pins[] = { 0x53, };
2643f4b5c348S周琰杰 (Zhou Yanjie) static int x1830_i2s_data_rx_pins[] = { 0x54, };
2644f4b5c348S周琰杰 (Zhou Yanjie) static int x1830_i2s_clk_txrx_pins[] = { 0x58, 0x52, };
2645f4b5c348S周琰杰 (Zhou Yanjie) static int x1830_i2s_clk_rx_pins[] = { 0x56, 0x55, };
2646f4b5c348S周琰杰 (Zhou Yanjie) static int x1830_i2s_sysclk_pins[] = { 0x57, };
264728c1caafS周琰杰 (Zhou Yanjie) static int x1830_dmic_if0_pins[] = { 0x48, 0x59, };
264828c1caafS周琰杰 (Zhou Yanjie) static int x1830_dmic_if1_pins[] = { 0x5a, };
26495e6332a7S周琰杰 (Zhou Yanjie) static int x1830_lcd_tft_8bit_pins[] = {
2650b2954743S周琰杰 (Zhou Yanjie) 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
26515e6332a7S周琰杰 (Zhou Yanjie) 0x68, 0x73, 0x72, 0x69,
26525e6332a7S周琰杰 (Zhou Yanjie) };
26535e6332a7S周琰杰 (Zhou Yanjie) static int x1830_lcd_tft_24bit_pins[] = {
26545e6332a7S周琰杰 (Zhou Yanjie) 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71,
26555e6332a7S周琰杰 (Zhou Yanjie) 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b,
2656b2954743S周琰杰 (Zhou Yanjie) };
2657b2954743S周琰杰 (Zhou Yanjie) static int x1830_lcd_slcd_8bit_pins[] = {
2658b2954743S周琰杰 (Zhou Yanjie) 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x6c, 0x6d,
2659b2954743S周琰杰 (Zhou Yanjie) 0x69, 0x72, 0x73, 0x7b, 0x7a,
2660b2954743S周琰杰 (Zhou Yanjie) };
2661b2954743S周琰杰 (Zhou Yanjie) static int x1830_lcd_slcd_16bit_pins[] = {
2662b2954743S周琰杰 (Zhou Yanjie) 0x6e, 0x6f, 0x70, 0x71, 0x76, 0x77, 0x78, 0x79,
2663b2954743S周琰杰 (Zhou Yanjie) };
2664d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm0_b_pins[] = { 0x31, };
2665d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm0_c_pins[] = { 0x4b, };
2666d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm1_b_pins[] = { 0x32, };
2667d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm1_c_pins[] = { 0x4c, };
2668d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm2_c_8_pins[] = { 0x48, };
2669d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm2_c_13_pins[] = { 0x4d, };
2670d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm3_c_9_pins[] = { 0x49, };
2671d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm3_c_14_pins[] = { 0x4e, };
2672d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm4_c_15_pins[] = { 0x4f, };
2673d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm4_c_25_pins[] = { 0x59, };
2674d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm5_c_16_pins[] = { 0x50, };
2675d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm5_c_26_pins[] = { 0x5a, };
2676d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm6_c_17_pins[] = { 0x51, };
2677d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm6_c_27_pins[] = { 0x5b, };
2678d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm7_c_18_pins[] = { 0x52, };
2679d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_pwm_pwm7_c_28_pins[] = { 0x5c, };
2680d7da2a1eS周琰杰 (Zhou Yanjie) static int x1830_mac_pins[] = {
2681d7da2a1eS周琰杰 (Zhou Yanjie) 0x29, 0x30, 0x2f, 0x28, 0x2e, 0x2d, 0x2a, 0x2b, 0x26, 0x27,
2682d7da2a1eS周琰杰 (Zhou Yanjie) };
2683d7da2a1eS周琰杰 (Zhou Yanjie)
2684d7da2a1eS周琰杰 (Zhou Yanjie) static const struct group_desc x1830_groups[] = {
2685bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-data", x1830_uart0_data, 0),
2686bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart0-hwflow", x1830_uart0_hwflow, 0),
2687bb42b593SPaul Cercueil INGENIC_PIN_GROUP("uart1-data", x1830_uart1_data, 0),
268828c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-data", x1830_sfc_data, 1),
268928c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-clk", x1830_sfc_clk, 1),
269028c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-ce", x1830_sfc_ce, 1),
2691bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dt", x1830_ssi0_dt, 0),
2692bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-dr", x1830_ssi0_dr, 0),
2693bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-clk", x1830_ssi0_clk, 0),
2694bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-gpc", x1830_ssi0_gpc, 0),
2695bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce0", x1830_ssi0_ce0, 0),
2696bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi0-ce1", x1830_ssi0_ce1, 0),
2697bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dt-c", x1830_ssi1_dt_c, 1),
2698bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dr-c", x1830_ssi1_dr_c, 1),
2699bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-clk-c", x1830_ssi1_clk_c, 1),
2700bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-gpc-c", x1830_ssi1_gpc_c, 1),
2701bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce0-c", x1830_ssi1_ce0_c, 1),
2702bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce1-c", x1830_ssi1_ce1_c, 1),
2703bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dt-d", x1830_ssi1_dt_d, 2),
2704bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-dr-d", x1830_ssi1_dr_d, 2),
2705bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-clk-d", x1830_ssi1_clk_d, 2),
2706bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-gpc-d", x1830_ssi1_gpc_d, 2),
2707bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce0-d", x1830_ssi1_ce0_d, 2),
2708bb42b593SPaul Cercueil INGENIC_PIN_GROUP("ssi1-ce1-d", x1830_ssi1_ce1_d, 2),
2709bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-1bit", x1830_mmc0_1bit, 0),
2710bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc0-4bit", x1830_mmc0_4bit, 0),
2711bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-1bit", x1830_mmc1_1bit, 0),
2712bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mmc1-4bit", x1830_mmc1_4bit, 0),
2713bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c0-data", x1830_i2c0, 1),
2714bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c1-data", x1830_i2c1, 0),
2715bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2c2-data", x1830_i2c2, 1),
2716bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-data-tx", x1830_i2s_data_tx, 0),
2717bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-data-rx", x1830_i2s_data_rx, 0),
2718bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-clk-txrx", x1830_i2s_clk_txrx, 0),
2719bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-clk-rx", x1830_i2s_clk_rx, 0),
2720bb42b593SPaul Cercueil INGENIC_PIN_GROUP("i2s-sysclk", x1830_i2s_sysclk, 0),
272128c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if0", x1830_dmic_if0, 2),
272228c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if1", x1830_dmic_if1, 2),
27235e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-8bit", x1830_lcd_tft_8bit, 0),
27245e6332a7S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-24bit", x1830_lcd_tft_24bit, 0),
2725bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-slcd-8bit", x1830_lcd_slcd_8bit, 1),
2726bb42b593SPaul Cercueil INGENIC_PIN_GROUP("lcd-slcd-16bit", x1830_lcd_slcd_16bit, 1),
2727bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm0-b", x1830_pwm_pwm0_b, 0),
2728bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm0-c", x1830_pwm_pwm0_c, 1),
2729bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm1-b", x1830_pwm_pwm1_b, 0),
2730bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm1-c", x1830_pwm_pwm1_c, 1),
2731bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm2-c-8", x1830_pwm_pwm2_c_8, 0),
2732bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm2-c-13", x1830_pwm_pwm2_c_13, 1),
2733bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm3-c-9", x1830_pwm_pwm3_c_9, 0),
2734bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm3-c-14", x1830_pwm_pwm3_c_14, 1),
2735bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm4-c-15", x1830_pwm_pwm4_c_15, 1),
2736bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm4-c-25", x1830_pwm_pwm4_c_25, 0),
2737bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm5-c-16", x1830_pwm_pwm5_c_16, 1),
2738bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm5-c-26", x1830_pwm_pwm5_c_26, 0),
2739bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm6-c-17", x1830_pwm_pwm6_c_17, 1),
2740bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm6-c-27", x1830_pwm_pwm6_c_27, 0),
2741bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm7-c-18", x1830_pwm_pwm7_c_18, 1),
2742bb42b593SPaul Cercueil INGENIC_PIN_GROUP("pwm7-c-28", x1830_pwm_pwm7_c_28, 0),
2743bb42b593SPaul Cercueil INGENIC_PIN_GROUP("mac", x1830_mac, 0),
2744d7da2a1eS周琰杰 (Zhou Yanjie) };
2745d7da2a1eS周琰杰 (Zhou Yanjie)
2746d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
2747d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_uart1_groups[] = { "uart1-data", };
274828c1caafS周琰杰 (Zhou Yanjie) static const char *x1830_sfc_groups[] = { "sfc-data", "sfc-clk", "sfc-ce", };
2749d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_ssi0_groups[] = {
2750d7da2a1eS周琰杰 (Zhou Yanjie) "ssi0-dt", "ssi0-dr", "ssi0-clk", "ssi0-gpc", "ssi0-ce0", "ssi0-ce1",
2751d7da2a1eS周琰杰 (Zhou Yanjie) };
2752d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_ssi1_groups[] = {
2753d7da2a1eS周琰杰 (Zhou Yanjie) "ssi1-dt-c", "ssi1-dt-d",
2754d7da2a1eS周琰杰 (Zhou Yanjie) "ssi1-dr-c", "ssi1-dr-d",
2755d7da2a1eS周琰杰 (Zhou Yanjie) "ssi1-clk-c", "ssi1-clk-d",
2756d7da2a1eS周琰杰 (Zhou Yanjie) "ssi1-gpc-c", "ssi1-gpc-d",
2757d7da2a1eS周琰杰 (Zhou Yanjie) "ssi1-ce0-c", "ssi1-ce0-d",
2758d7da2a1eS周琰杰 (Zhou Yanjie) "ssi1-ce1-c", "ssi1-ce1-d",
2759d7da2a1eS周琰杰 (Zhou Yanjie) };
2760d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_mmc0_groups[] = { "mmc0-1bit", "mmc0-4bit", };
2761d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_mmc1_groups[] = { "mmc1-1bit", "mmc1-4bit", };
2762d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_i2c0_groups[] = { "i2c0-data", };
2763d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_i2c1_groups[] = { "i2c1-data", };
2764d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_i2c2_groups[] = { "i2c2-data", };
2765f4b5c348S周琰杰 (Zhou Yanjie) static const char *x1830_i2s_groups[] = {
2766f4b5c348S周琰杰 (Zhou Yanjie) "i2s-data-tx", "i2s-data-rx", "i2s-clk-txrx", "i2s-clk-rx", "i2s-sysclk",
2767f4b5c348S周琰杰 (Zhou Yanjie) };
276828c1caafS周琰杰 (Zhou Yanjie) static const char *x1830_dmic_groups[] = { "dmic-if0", "dmic-if1", };
2769b2954743S周琰杰 (Zhou Yanjie) static const char *x1830_lcd_groups[] = {
27705e6332a7S周琰杰 (Zhou Yanjie) "lcd-tft-8bit", "lcd-tft-24bit", "lcd-slcd-8bit", "lcd-slcd-16bit",
2771b2954743S周琰杰 (Zhou Yanjie) };
2772d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_pwm0_groups[] = { "pwm0-b", "pwm0-c", };
2773d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_pwm1_groups[] = { "pwm1-b", "pwm1-c", };
2774d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_pwm2_groups[] = { "pwm2-c-8", "pwm2-c-13", };
2775d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_pwm3_groups[] = { "pwm3-c-9", "pwm3-c-14", };
2776d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_pwm4_groups[] = { "pwm4-c-15", "pwm4-c-25", };
2777d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_pwm5_groups[] = { "pwm5-c-16", "pwm5-c-26", };
2778d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_pwm6_groups[] = { "pwm6-c-17", "pwm6-c-27", };
2779d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_pwm7_groups[] = { "pwm7-c-18", "pwm7-c-28", };
2780d7da2a1eS周琰杰 (Zhou Yanjie) static const char *x1830_mac_groups[] = { "mac", };
2781d7da2a1eS周琰杰 (Zhou Yanjie)
2782d7da2a1eS周琰杰 (Zhou Yanjie) static const struct function_desc x1830_functions[] = {
27837f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", x1830_uart0),
27847f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", x1830_uart1),
27857f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("sfc", x1830_sfc),
27867f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi0", x1830_ssi0),
27877f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi1", x1830_ssi1),
27887f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", x1830_mmc0),
27897f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", x1830_mmc1),
27907f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c0", x1830_i2c0),
27917f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c1", x1830_i2c1),
27927f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c2", x1830_i2c2),
27937f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s", x1830_i2s),
27947f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("dmic", x1830_dmic),
27957f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", x1830_lcd),
27967f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", x1830_pwm0),
27977f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", x1830_pwm1),
27987f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", x1830_pwm2),
27997f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", x1830_pwm3),
28007f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", x1830_pwm4),
28017f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", x1830_pwm5),
28027f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm6", x1830_pwm6),
28037f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm7", x1830_pwm7),
28047f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mac", x1830_mac),
2805d7da2a1eS周琰杰 (Zhou Yanjie) };
2806d7da2a1eS周琰杰 (Zhou Yanjie)
28079279c00fSAidan MacDonald static const struct regmap_range x1830_access_ranges[] = {
28089279c00fSAidan MacDonald regmap_reg_range(0x0000, 0x4000 - 4),
28099279c00fSAidan MacDonald regmap_reg_range(0x7000, 0x8000 - 4),
28109279c00fSAidan MacDonald };
28119279c00fSAidan MacDonald
28129279c00fSAidan MacDonald static const struct regmap_access_table x1830_access_table = {
28139279c00fSAidan MacDonald .yes_ranges = x1830_access_ranges,
28149279c00fSAidan MacDonald .n_yes_ranges = ARRAY_SIZE(x1830_access_ranges),
28159279c00fSAidan MacDonald };
28169279c00fSAidan MacDonald
2817d7da2a1eS周琰杰 (Zhou Yanjie) static const struct ingenic_chip_info x1830_chip_info = {
2818d7da2a1eS周琰杰 (Zhou Yanjie) .num_chips = 4,
2819d7da2a1eS周琰杰 (Zhou Yanjie) .reg_offset = 0x1000,
2820baf15647SPaul Cercueil .version = ID_X1830,
2821d7da2a1eS周琰杰 (Zhou Yanjie) .groups = x1830_groups,
2822d7da2a1eS周琰杰 (Zhou Yanjie) .num_groups = ARRAY_SIZE(x1830_groups),
2823d7da2a1eS周琰杰 (Zhou Yanjie) .functions = x1830_functions,
2824d7da2a1eS周琰杰 (Zhou Yanjie) .num_functions = ARRAY_SIZE(x1830_functions),
2825d7da2a1eS周琰杰 (Zhou Yanjie) .pull_ups = x1830_pull_ups,
2826d7da2a1eS周琰杰 (Zhou Yanjie) .pull_downs = x1830_pull_downs,
28279279c00fSAidan MacDonald .access_table = &x1830_access_table,
2828d7da2a1eS周琰杰 (Zhou Yanjie) };
2829d7da2a1eS周琰杰 (Zhou Yanjie)
2830943e0da1S周琰杰 (Zhou Yanjie) static const u32 x2000_pull_ups[5] = {
2831943e0da1S周琰杰 (Zhou Yanjie) 0x0003ffff, 0xffffffff, 0x1ff0ffff, 0xc7fe3f3f, 0x8fff003f,
2832943e0da1S周琰杰 (Zhou Yanjie) };
2833943e0da1S周琰杰 (Zhou Yanjie)
2834943e0da1S周琰杰 (Zhou Yanjie) static const u32 x2000_pull_downs[5] = {
2835943e0da1S周琰杰 (Zhou Yanjie) 0x0003ffff, 0xffffffff, 0x1ff0ffff, 0x00000000, 0x8fff003f,
2836943e0da1S周琰杰 (Zhou Yanjie) };
2837943e0da1S周琰杰 (Zhou Yanjie)
2838943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart0_data_pins[] = { 0x77, 0x78, };
2839943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart0_hwflow_pins[] = { 0x79, 0x7a, };
2840943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart1_data_pins[] = { 0x57, 0x58, };
2841943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart1_hwflow_pins[] = { 0x55, 0x56, };
2842943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart2_data_pins[] = { 0x7e, 0x7f, };
2843943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart3_data_c_pins[] = { 0x59, 0x5a, };
2844943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart3_data_d_pins[] = { 0x62, 0x63, };
2845943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart3_hwflow_c_pins[] = { 0x5b, 0x5c, };
2846943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart3_hwflow_d_pins[] = { 0x60, 0x61, };
2847943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart4_data_a_pins[] = { 0x02, 0x03, };
2848943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart4_data_c_pins[] = { 0x4b, 0x4c, };
2849943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart4_hwflow_a_pins[] = { 0x00, 0x01, };
2850943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart4_hwflow_c_pins[] = { 0x49, 0x4a, };
2851943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart5_data_a_pins[] = { 0x04, 0x05, };
2852943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart5_data_c_pins[] = { 0x45, 0x46, };
2853943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart6_data_a_pins[] = { 0x06, 0x07, };
2854943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart6_data_c_pins[] = { 0x47, 0x48, };
2855943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart7_data_a_pins[] = { 0x08, 0x09, };
2856943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart7_data_c_pins[] = { 0x41, 0x42, };
2857943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart8_data_pins[] = { 0x3c, 0x3d, };
2858943e0da1S周琰杰 (Zhou Yanjie) static int x2000_uart9_data_pins[] = { 0x3e, 0x3f, };
285928c1caafS周琰杰 (Zhou Yanjie) static int x2000_sfc_data_if0_d_pins[] = { 0x73, 0x74, 0x75, 0x76, };
286028c1caafS周琰杰 (Zhou Yanjie) static int x2000_sfc_data_if0_e_pins[] = { 0x92, 0x93, 0x94, 0x95, };
286128c1caafS周琰杰 (Zhou Yanjie) static int x2000_sfc_data_if1_pins[] = { 0x77, 0x78, 0x79, 0x7a, };
286228c1caafS周琰杰 (Zhou Yanjie) static int x2000_sfc_clk_d_pins[] = { 0x71, };
286328c1caafS周琰杰 (Zhou Yanjie) static int x2000_sfc_clk_e_pins[] = { 0x90, };
286428c1caafS周琰杰 (Zhou Yanjie) static int x2000_sfc_ce_d_pins[] = { 0x72, };
286528c1caafS周琰杰 (Zhou Yanjie) static int x2000_sfc_ce_e_pins[] = { 0x91, };
2866943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi0_dt_b_pins[] = { 0x3e, };
2867943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi0_dt_d_pins[] = { 0x69, };
2868943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi0_dr_b_pins[] = { 0x3d, };
2869943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi0_dr_d_pins[] = { 0x6a, };
2870943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi0_clk_b_pins[] = { 0x3f, };
2871943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi0_clk_d_pins[] = { 0x68, };
287228c1caafS周琰杰 (Zhou Yanjie) static int x2000_ssi0_ce_b_pins[] = { 0x3c, };
287328c1caafS周琰杰 (Zhou Yanjie) static int x2000_ssi0_ce_d_pins[] = { 0x6d, };
2874943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi1_dt_c_pins[] = { 0x4b, };
2875943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi1_dt_d_pins[] = { 0x72, };
2876943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi1_dt_e_pins[] = { 0x91, };
2877943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi1_dr_c_pins[] = { 0x4a, };
2878943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi1_dr_d_pins[] = { 0x73, };
2879943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi1_dr_e_pins[] = { 0x92, };
2880943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi1_clk_c_pins[] = { 0x4c, };
2881943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi1_clk_d_pins[] = { 0x71, };
2882943e0da1S周琰杰 (Zhou Yanjie) static int x2000_ssi1_clk_e_pins[] = { 0x90, };
288328c1caafS周琰杰 (Zhou Yanjie) static int x2000_ssi1_ce_c_pins[] = { 0x49, };
288428c1caafS周琰杰 (Zhou Yanjie) static int x2000_ssi1_ce_d_pins[] = { 0x76, };
288528c1caafS周琰杰 (Zhou Yanjie) static int x2000_ssi1_ce_e_pins[] = { 0x95, };
2886943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mmc0_1bit_pins[] = { 0x71, 0x72, 0x73, };
2887943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mmc0_4bit_pins[] = { 0x74, 0x75, 0x75, };
2888943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mmc0_8bit_pins[] = { 0x77, 0x78, 0x79, 0x7a, };
2889943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mmc1_1bit_pins[] = { 0x68, 0x69, 0x6a, };
2890943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mmc1_4bit_pins[] = { 0x6b, 0x6c, 0x6d, };
2891943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mmc2_1bit_pins[] = { 0x80, 0x81, 0x82, };
2892943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mmc2_4bit_pins[] = { 0x83, 0x84, 0x85, };
2893943e0da1S周琰杰 (Zhou Yanjie) static int x2000_emc_8bit_data_pins[] = {
2894943e0da1S周琰杰 (Zhou Yanjie) 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2895943e0da1S周琰杰 (Zhou Yanjie) };
2896943e0da1S周琰杰 (Zhou Yanjie) static int x2000_emc_16bit_data_pins[] = {
2897943e0da1S周琰杰 (Zhou Yanjie) 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
2898943e0da1S周琰杰 (Zhou Yanjie) };
2899943e0da1S周琰杰 (Zhou Yanjie) static int x2000_emc_addr_pins[] = {
2900943e0da1S周琰杰 (Zhou Yanjie) 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
2901943e0da1S周琰杰 (Zhou Yanjie) 0x28, 0x29, 0x2a, 0x2b, 0x2c,
2902943e0da1S周琰杰 (Zhou Yanjie) };
2903943e0da1S周琰杰 (Zhou Yanjie) static int x2000_emc_rd_we_pins[] = { 0x2d, 0x2e, };
2904943e0da1S周琰杰 (Zhou Yanjie) static int x2000_emc_wait_pins[] = { 0x2f, };
2905943e0da1S周琰杰 (Zhou Yanjie) static int x2000_emc_cs1_pins[] = { 0x57, };
2906943e0da1S周琰杰 (Zhou Yanjie) static int x2000_emc_cs2_pins[] = { 0x58, };
2907943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c0_pins[] = { 0x4e, 0x4d, };
2908943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c1_c_pins[] = { 0x58, 0x57, };
2909943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c1_d_pins[] = { 0x6c, 0x6b, };
2910943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c2_b_pins[] = { 0x37, 0x36, };
2911943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c2_d_pins[] = { 0x75, 0x74, };
2912943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c2_e_pins[] = { 0x94, 0x93, };
2913943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c3_a_pins[] = { 0x11, 0x10, };
2914943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c3_d_pins[] = { 0x7f, 0x7e, };
2915943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c4_c_pins[] = { 0x5a, 0x59, };
2916943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c4_d_pins[] = { 0x61, 0x60, };
2917943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c5_c_pins[] = { 0x5c, 0x5b, };
2918943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2c5_d_pins[] = { 0x65, 0x64, };
2919943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s1_data_tx_pins[] = { 0x47, };
2920943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s1_data_rx_pins[] = { 0x44, };
2921943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s1_clk_tx_pins[] = { 0x45, 0x46, };
2922943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s1_clk_rx_pins[] = { 0x42, 0x43, };
2923943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s1_sysclk_tx_pins[] = { 0x48, };
2924943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s1_sysclk_rx_pins[] = { 0x41, };
2925943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s2_data_rx0_pins[] = { 0x0a, };
2926943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s2_data_rx1_pins[] = { 0x0b, };
2927943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s2_data_rx2_pins[] = { 0x0c, };
2928943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s2_data_rx3_pins[] = { 0x0d, };
2929943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s2_clk_rx_pins[] = { 0x11, 0x09, };
2930943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s2_sysclk_rx_pins[] = { 0x07, };
2931943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s3_data_tx0_pins[] = { 0x03, };
2932943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s3_data_tx1_pins[] = { 0x04, };
2933943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s3_data_tx2_pins[] = { 0x05, };
2934943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s3_data_tx3_pins[] = { 0x06, };
2935943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s3_clk_tx_pins[] = { 0x10, 0x02, };
2936943e0da1S周琰杰 (Zhou Yanjie) static int x2000_i2s3_sysclk_tx_pins[] = { 0x00, };
293728c1caafS周琰杰 (Zhou Yanjie) static int x2000_dmic_if0_pins[] = { 0x54, 0x55, };
293828c1caafS周琰杰 (Zhou Yanjie) static int x2000_dmic_if1_pins[] = { 0x56, };
293928c1caafS周琰杰 (Zhou Yanjie) static int x2000_dmic_if2_pins[] = { 0x57, };
294028c1caafS周琰杰 (Zhou Yanjie) static int x2000_dmic_if3_pins[] = { 0x58, };
2941943e0da1S周琰杰 (Zhou Yanjie) static int x2000_cim_8bit_pins[] = {
2942943e0da1S周琰杰 (Zhou Yanjie) 0x0e, 0x0c, 0x0d, 0x4f,
2943943e0da1S周琰杰 (Zhou Yanjie) 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
2944943e0da1S周琰杰 (Zhou Yanjie) };
2945943e0da1S周琰杰 (Zhou Yanjie) static int x2000_cim_12bit_pins[] = { 0x08, 0x09, 0x0a, 0x0b, };
2946943e0da1S周琰杰 (Zhou Yanjie) static int x2000_lcd_tft_8bit_pins[] = {
2947943e0da1S周琰杰 (Zhou Yanjie) 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
2948943e0da1S周琰杰 (Zhou Yanjie) 0x38, 0x3a, 0x39, 0x3b,
2949943e0da1S周琰杰 (Zhou Yanjie) };
2950943e0da1S周琰杰 (Zhou Yanjie) static int x2000_lcd_tft_16bit_pins[] = {
2951943e0da1S周琰杰 (Zhou Yanjie) 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
2952943e0da1S周琰杰 (Zhou Yanjie) };
2953943e0da1S周琰杰 (Zhou Yanjie) static int x2000_lcd_tft_18bit_pins[] = {
2954943e0da1S周琰杰 (Zhou Yanjie) 0x30, 0x31,
2955943e0da1S周琰杰 (Zhou Yanjie) };
2956943e0da1S周琰杰 (Zhou Yanjie) static int x2000_lcd_tft_24bit_pins[] = {
2957943e0da1S周琰杰 (Zhou Yanjie) 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
2958943e0da1S周琰杰 (Zhou Yanjie) };
2959943e0da1S周琰杰 (Zhou Yanjie) static int x2000_lcd_slcd_8bit_pins[] = {
2960943e0da1S周琰杰 (Zhou Yanjie) 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
2961943e0da1S周琰杰 (Zhou Yanjie) 0x3a, 0x38, 0x3b, 0x30, 0x39,
2962943e0da1S周琰杰 (Zhou Yanjie) };
2963943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm0_c_pins[] = { 0x40, };
2964943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm0_d_pins[] = { 0x7e, };
2965943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm1_c_pins[] = { 0x41, };
2966943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm1_d_pins[] = { 0x7f, };
2967943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm2_c_pins[] = { 0x42, };
2968943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm2_e_pins[] = { 0x80, };
2969943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm3_c_pins[] = { 0x43, };
2970943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm3_e_pins[] = { 0x81, };
2971943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm4_c_pins[] = { 0x44, };
2972943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm4_e_pins[] = { 0x82, };
2973943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm5_c_pins[] = { 0x45, };
2974943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm5_e_pins[] = { 0x83, };
2975943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm6_c_pins[] = { 0x46, };
2976943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm6_e_pins[] = { 0x84, };
2977943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm7_c_pins[] = { 0x47, };
2978943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm7_e_pins[] = { 0x85, };
2979943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm8_pins[] = { 0x48, };
2980943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm9_pins[] = { 0x49, };
2981943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm10_pins[] = { 0x4a, };
2982943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm11_pins[] = { 0x4b, };
2983943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm12_pins[] = { 0x4c, };
2984943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm13_pins[] = { 0x4d, };
2985943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm14_pins[] = { 0x4e, };
2986943e0da1S周琰杰 (Zhou Yanjie) static int x2000_pwm_pwm15_pins[] = { 0x4f, };
2987943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mac0_rmii_pins[] = {
2988943e0da1S周琰杰 (Zhou Yanjie) 0x4b, 0x47, 0x46, 0x4a, 0x43, 0x42, 0x4c, 0x4d, 0x4e, 0x41,
2989943e0da1S周琰杰 (Zhou Yanjie) };
2990943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mac0_rgmii_pins[] = {
2991943e0da1S周琰杰 (Zhou Yanjie) 0x4b, 0x49, 0x48, 0x47, 0x46, 0x4a, 0x45, 0x44, 0x43, 0x42,
2992943e0da1S周琰杰 (Zhou Yanjie) 0x4c, 0x4d, 0x4f, 0x4e, 0x41,
2993943e0da1S周琰杰 (Zhou Yanjie) };
2994943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mac1_rmii_pins[] = {
2995943e0da1S周琰杰 (Zhou Yanjie) 0x32, 0x2d, 0x2c, 0x31, 0x29, 0x28, 0x33, 0x34, 0x35, 0x37,
2996943e0da1S周琰杰 (Zhou Yanjie) };
2997943e0da1S周琰杰 (Zhou Yanjie) static int x2000_mac1_rgmii_pins[] = {
2998943e0da1S周琰杰 (Zhou Yanjie) 0x32, 0x2f, 0x2e, 0x2d, 0x2c, 0x31, 0x2b, 0x2a, 0x29, 0x28,
2999943e0da1S周琰杰 (Zhou Yanjie) 0x33, 0x34, 0x36, 0x35, 0x37,
3000943e0da1S周琰杰 (Zhou Yanjie) };
3001943e0da1S周琰杰 (Zhou Yanjie) static int x2000_otg_pins[] = { 0x96, };
3002943e0da1S周琰杰 (Zhou Yanjie)
3003943e0da1S周琰杰 (Zhou Yanjie) static u8 x2000_cim_8bit_funcs[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, };
3004943e0da1S周琰杰 (Zhou Yanjie)
3005943e0da1S周琰杰 (Zhou Yanjie) static const struct group_desc x2000_groups[] = {
3006943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-data", x2000_uart0_data, 2),
3007943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-hwflow", x2000_uart0_hwflow, 2),
3008943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart1-data", x2000_uart1_data, 1),
3009943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart1-hwflow", x2000_uart1_hwflow, 1),
3010943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart2-data", x2000_uart2_data, 0),
3011943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-data-c", x2000_uart3_data_c, 0),
3012943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-data-d", x2000_uart3_data_d, 1),
3013943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-hwflow-c", x2000_uart3_hwflow_c, 0),
3014943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-hwflow-d", x2000_uart3_hwflow_d, 1),
3015943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart4-data-a", x2000_uart4_data_a, 1),
3016943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart4-data-c", x2000_uart4_data_c, 3),
3017943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart4-hwflow-a", x2000_uart4_hwflow_a, 1),
3018943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart4-hwflow-c", x2000_uart4_hwflow_c, 3),
3019943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart5-data-a", x2000_uart5_data_a, 1),
3020943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart5-data-c", x2000_uart5_data_c, 3),
3021943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart6-data-a", x2000_uart6_data_a, 1),
3022943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart6-data-c", x2000_uart6_data_c, 3),
3023943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart7-data-a", x2000_uart7_data_a, 1),
3024943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart7-data-c", x2000_uart7_data_c, 3),
3025943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart8-data", x2000_uart8_data, 3),
3026943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart9-data", x2000_uart9_data, 3),
302728c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-data-if0-d", x2000_sfc_data_if0_d, 1),
302828c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-data-if0-e", x2000_sfc_data_if0_e, 0),
302928c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-data-if1", x2000_sfc_data_if1, 1),
303028c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-clk-d", x2000_sfc_clk_d, 1),
303128c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-clk-e", x2000_sfc_clk_e, 0),
303228c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-ce-d", x2000_sfc_ce_d, 1),
303328c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-ce-e", x2000_sfc_ce_e, 0),
3034943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dt-b", x2000_ssi0_dt_b, 1),
3035943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dt-d", x2000_ssi0_dt_d, 1),
3036943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dr-b", x2000_ssi0_dr_b, 1),
3037943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dr-d", x2000_ssi0_dr_d, 1),
3038943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-clk-b", x2000_ssi0_clk_b, 1),
3039943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-clk-d", x2000_ssi0_clk_d, 1),
304028c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce-b", x2000_ssi0_ce_b, 1),
304128c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce-d", x2000_ssi0_ce_d, 1),
3042943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-c", x2000_ssi1_dt_c, 2),
3043943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-d", x2000_ssi1_dt_d, 2),
3044943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-e", x2000_ssi1_dt_e, 1),
3045943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-c", x2000_ssi1_dr_c, 2),
3046943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-d", x2000_ssi1_dr_d, 2),
3047943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-e", x2000_ssi1_dr_e, 1),
3048943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-c", x2000_ssi1_clk_c, 2),
3049943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-d", x2000_ssi1_clk_d, 2),
3050943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-e", x2000_ssi1_clk_e, 1),
305128c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce-c", x2000_ssi1_ce_c, 2),
305228c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce-d", x2000_ssi1_ce_d, 2),
305328c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce-e", x2000_ssi1_ce_e, 1),
3054943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-1bit", x2000_mmc0_1bit, 0),
3055943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-4bit", x2000_mmc0_4bit, 0),
3056943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-8bit", x2000_mmc0_8bit, 0),
3057943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-1bit", x2000_mmc1_1bit, 0),
3058943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-4bit", x2000_mmc1_4bit, 0),
3059943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc2-1bit", x2000_mmc2_1bit, 0),
3060943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc2-4bit", x2000_mmc2_4bit, 0),
3061943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-8bit-data", x2000_emc_8bit_data, 0),
3062943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-16bit-data", x2000_emc_16bit_data, 0),
3063943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-addr", x2000_emc_addr, 0),
3064943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-rd-we", x2000_emc_rd_we, 0),
3065943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-wait", x2000_emc_wait, 0),
3066943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-cs1", x2000_emc_cs1, 3),
3067943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-cs2", x2000_emc_cs2, 3),
3068943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c0-data", x2000_i2c0, 3),
3069943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c1-data-c", x2000_i2c1_c, 2),
3070943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c1-data-d", x2000_i2c1_d, 1),
3071943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c2-data-b", x2000_i2c2_b, 2),
3072943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c2-data-d", x2000_i2c2_d, 2),
3073943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c2-data-e", x2000_i2c2_e, 1),
3074943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c3-data-a", x2000_i2c3_a, 0),
3075943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c3-data-d", x2000_i2c3_d, 1),
3076943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c4-data-c", x2000_i2c4_c, 1),
3077943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c4-data-d", x2000_i2c4_d, 2),
3078943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c5-data-c", x2000_i2c5_c, 1),
3079943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c5-data-d", x2000_i2c5_d, 1),
3080943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-data-tx", x2000_i2s1_data_tx, 2),
3081943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-data-rx", x2000_i2s1_data_rx, 2),
3082943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-clk-tx", x2000_i2s1_clk_tx, 2),
3083943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-clk-rx", x2000_i2s1_clk_rx, 2),
3084943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-sysclk-tx", x2000_i2s1_sysclk_tx, 2),
3085943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-sysclk-rx", x2000_i2s1_sysclk_rx, 2),
3086943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-data-rx0", x2000_i2s2_data_rx0, 2),
3087943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-data-rx1", x2000_i2s2_data_rx1, 2),
3088943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-data-rx2", x2000_i2s2_data_rx2, 2),
3089943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-data-rx3", x2000_i2s2_data_rx3, 2),
3090943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-clk-rx", x2000_i2s2_clk_rx, 2),
3091943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-sysclk-rx", x2000_i2s2_sysclk_rx, 2),
3092943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-data-tx0", x2000_i2s3_data_tx0, 2),
3093943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-data-tx1", x2000_i2s3_data_tx1, 2),
3094943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-data-tx2", x2000_i2s3_data_tx2, 2),
3095943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-data-tx3", x2000_i2s3_data_tx3, 2),
3096943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-clk-tx", x2000_i2s3_clk_tx, 2),
3097943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-sysclk-tx", x2000_i2s3_sysclk_tx, 2),
309828c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if0", x2000_dmic_if0, 0),
309928c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if1", x2000_dmic_if1, 0),
310028c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if2", x2000_dmic_if2, 0),
310128c1caafS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if3", x2000_dmic_if3, 0),
3102943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("cim-data-8bit", x2000_cim_8bit,
3103943e0da1S周琰杰 (Zhou Yanjie) x2000_cim_8bit_funcs),
3104943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("cim-data-12bit", x2000_cim_12bit, 0),
3105943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-8bit", x2000_lcd_tft_8bit, 1),
3106943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-16bit", x2000_lcd_tft_16bit, 1),
3107943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-18bit", x2000_lcd_tft_18bit, 1),
3108943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-24bit", x2000_lcd_tft_24bit, 1),
3109943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-slcd-8bit", x2000_lcd_slcd_8bit, 2),
3110943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-slcd-16bit", x2000_lcd_tft_16bit, 2),
3111943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm0-c", x2000_pwm_pwm0_c, 0),
3112943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm0-d", x2000_pwm_pwm0_d, 2),
3113943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm1-c", x2000_pwm_pwm1_c, 0),
3114943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm1-d", x2000_pwm_pwm1_d, 2),
3115943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm2-c", x2000_pwm_pwm2_c, 0),
3116943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm2-e", x2000_pwm_pwm2_e, 1),
3117943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm3-c", x2000_pwm_pwm3_c, 0),
3118943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm3-e", x2000_pwm_pwm3_e, 1),
3119943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm4-c", x2000_pwm_pwm4_c, 0),
3120943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm4-e", x2000_pwm_pwm4_e, 1),
3121943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm5-c", x2000_pwm_pwm5_c, 0),
3122943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm5-e", x2000_pwm_pwm5_e, 1),
3123943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm6-c", x2000_pwm_pwm6_c, 0),
3124943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm6-e", x2000_pwm_pwm6_e, 1),
3125943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm7-c", x2000_pwm_pwm7_c, 0),
3126943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm7-e", x2000_pwm_pwm7_e, 1),
3127943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm8", x2000_pwm_pwm8, 0),
3128943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm9", x2000_pwm_pwm9, 0),
3129943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm10", x2000_pwm_pwm10, 0),
3130943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm11", x2000_pwm_pwm11, 0),
3131943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm12", x2000_pwm_pwm12, 0),
3132943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm13", x2000_pwm_pwm13, 0),
3133943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm14", x2000_pwm_pwm14, 0),
3134943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm15", x2000_pwm_pwm15, 0),
3135943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mac0-rmii", x2000_mac0_rmii, 1),
3136943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mac0-rgmii", x2000_mac0_rgmii, 1),
3137943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mac1-rmii", x2000_mac1_rmii, 3),
3138943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mac1-rgmii", x2000_mac1_rgmii, 3),
3139943e0da1S周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("otg-vbus", x2000_otg, 0),
3140943e0da1S周琰杰 (Zhou Yanjie) };
3141943e0da1S周琰杰 (Zhou Yanjie)
3142943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart0_groups[] = { "uart0-data", "uart0-hwflow", };
3143943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart1_groups[] = { "uart1-data", "uart1-hwflow", };
3144943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart2_groups[] = { "uart2-data", };
3145943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart3_groups[] = {
3146943e0da1S周琰杰 (Zhou Yanjie) "uart3-data-c", "uart3-data-d", "uart3-hwflow-c", "uart3-hwflow-d",
3147943e0da1S周琰杰 (Zhou Yanjie) };
3148943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart4_groups[] = {
3149943e0da1S周琰杰 (Zhou Yanjie) "uart4-data-a", "uart4-data-c", "uart4-hwflow-a", "uart4-hwflow-c",
3150943e0da1S周琰杰 (Zhou Yanjie) };
3151943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart5_groups[] = { "uart5-data-a", "uart5-data-c", };
3152943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart6_groups[] = { "uart6-data-a", "uart6-data-c", };
3153943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart7_groups[] = { "uart7-data-a", "uart7-data-c", };
3154943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart8_groups[] = { "uart8-data", };
3155943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_uart9_groups[] = { "uart9-data", };
315628c1caafS周琰杰 (Zhou Yanjie) static const char *x2000_sfc_groups[] = {
315728c1caafS周琰杰 (Zhou Yanjie) "sfc-data-if0-d", "sfc-data-if0-e", "sfc-data-if1",
315828c1caafS周琰杰 (Zhou Yanjie) "sfc-clk-d", "sfc-clk-e", "sfc-ce-d", "sfc-ce-e",
315928c1caafS周琰杰 (Zhou Yanjie) };
3160943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_ssi0_groups[] = {
3161943e0da1S周琰杰 (Zhou Yanjie) "ssi0-dt-b", "ssi0-dt-d",
3162943e0da1S周琰杰 (Zhou Yanjie) "ssi0-dr-b", "ssi0-dr-d",
3163943e0da1S周琰杰 (Zhou Yanjie) "ssi0-clk-b", "ssi0-clk-d",
316428c1caafS周琰杰 (Zhou Yanjie) "ssi0-ce-b", "ssi0-ce-d",
3165943e0da1S周琰杰 (Zhou Yanjie) };
3166943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_ssi1_groups[] = {
3167943e0da1S周琰杰 (Zhou Yanjie) "ssi1-dt-c", "ssi1-dt-d", "ssi1-dt-e",
3168943e0da1S周琰杰 (Zhou Yanjie) "ssi1-dr-c", "ssi1-dr-d", "ssi1-dr-e",
3169943e0da1S周琰杰 (Zhou Yanjie) "ssi1-clk-c", "ssi1-clk-d", "ssi1-clk-e",
317028c1caafS周琰杰 (Zhou Yanjie) "ssi1-ce-c", "ssi1-ce-d", "ssi1-ce-e",
3171943e0da1S周琰杰 (Zhou Yanjie) };
3172943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_mmc0_groups[] = { "mmc0-1bit", "mmc0-4bit", "mmc0-8bit", };
3173943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_mmc1_groups[] = { "mmc1-1bit", "mmc1-4bit", };
3174943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_mmc2_groups[] = { "mmc2-1bit", "mmc2-4bit", };
3175943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_emc_groups[] = {
3176943e0da1S周琰杰 (Zhou Yanjie) "emc-8bit-data", "emc-16bit-data",
3177943e0da1S周琰杰 (Zhou Yanjie) "emc-addr", "emc-rd-we", "emc-wait",
3178943e0da1S周琰杰 (Zhou Yanjie) };
3179943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_cs1_groups[] = { "emc-cs1", };
3180943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_cs2_groups[] = { "emc-cs2", };
3181943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_i2c0_groups[] = { "i2c0-data", };
3182943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_i2c1_groups[] = { "i2c1-data-c", "i2c1-data-d", };
3183943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_i2c2_groups[] = { "i2c2-data-b", "i2c2-data-d", };
3184943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_i2c3_groups[] = { "i2c3-data-a", "i2c3-data-d", };
3185943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_i2c4_groups[] = { "i2c4-data-c", "i2c4-data-d", };
3186943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_i2c5_groups[] = { "i2c5-data-c", "i2c5-data-d", };
3187943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_i2s1_groups[] = {
3188943e0da1S周琰杰 (Zhou Yanjie) "i2s1-data-tx", "i2s1-data-rx",
3189943e0da1S周琰杰 (Zhou Yanjie) "i2s1-clk-tx", "i2s1-clk-rx",
3190943e0da1S周琰杰 (Zhou Yanjie) "i2s1-sysclk-tx", "i2s1-sysclk-rx",
3191943e0da1S周琰杰 (Zhou Yanjie) };
3192943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_i2s2_groups[] = {
3193943e0da1S周琰杰 (Zhou Yanjie) "i2s2-data-rx0", "i2s2-data-rx1", "i2s2-data-rx2", "i2s2-data-rx3",
3194943e0da1S周琰杰 (Zhou Yanjie) "i2s2-clk-rx", "i2s2-sysclk-rx",
3195943e0da1S周琰杰 (Zhou Yanjie) };
3196943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_i2s3_groups[] = {
3197943e0da1S周琰杰 (Zhou Yanjie) "i2s3-data-tx0", "i2s3-data-tx1", "i2s3-data-tx2", "i2s3-data-tx3",
3198943e0da1S周琰杰 (Zhou Yanjie) "i2s3-clk-tx", "i2s3-sysclk-tx",
3199943e0da1S周琰杰 (Zhou Yanjie) };
320028c1caafS周琰杰 (Zhou Yanjie) static const char *x2000_dmic_groups[] = {
320128c1caafS周琰杰 (Zhou Yanjie) "dmic-if0", "dmic-if1", "dmic-if2", "dmic-if3",
320228c1caafS周琰杰 (Zhou Yanjie) };
3203943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_cim_groups[] = { "cim-data-8bit", "cim-data-12bit", };
3204943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_lcd_groups[] = {
3205943e0da1S周琰杰 (Zhou Yanjie) "lcd-tft-8bit", "lcd-tft-16bit", "lcd-tft-18bit", "lcd-tft-24bit",
3206943e0da1S周琰杰 (Zhou Yanjie) "lcd-slcd-8bit", "lcd-slcd-16bit",
3207943e0da1S周琰杰 (Zhou Yanjie) };
3208943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm0_groups[] = { "pwm0-c", "pwm0-d", };
3209943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm1_groups[] = { "pwm1-c", "pwm1-d", };
3210943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm2_groups[] = { "pwm2-c", "pwm2-e", };
3211943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm3_groups[] = { "pwm3-c", "pwm3-r", };
3212943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm4_groups[] = { "pwm4-c", "pwm4-e", };
3213943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm5_groups[] = { "pwm5-c", "pwm5-e", };
3214943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm6_groups[] = { "pwm6-c", "pwm6-e", };
3215943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm7_groups[] = { "pwm7-c", "pwm7-e", };
3216943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm8_groups[] = { "pwm8", };
3217943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm9_groups[] = { "pwm9", };
3218943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm10_groups[] = { "pwm10", };
3219943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm11_groups[] = { "pwm11", };
3220943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm12_groups[] = { "pwm12", };
3221943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm13_groups[] = { "pwm13", };
3222943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm14_groups[] = { "pwm14", };
3223943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_pwm15_groups[] = { "pwm15", };
3224943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_mac0_groups[] = { "mac0-rmii", "mac0-rgmii", };
3225943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_mac1_groups[] = { "mac1-rmii", "mac1-rgmii", };
3226943e0da1S周琰杰 (Zhou Yanjie) static const char *x2000_otg_groups[] = { "otg-vbus", };
3227943e0da1S周琰杰 (Zhou Yanjie)
3228943e0da1S周琰杰 (Zhou Yanjie) static const struct function_desc x2000_functions[] = {
32297f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", x2000_uart0),
32307f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", x2000_uart1),
32317f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", x2000_uart2),
32327f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart3", x2000_uart3),
32337f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart4", x2000_uart4),
32347f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart5", x2000_uart5),
32357f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart6", x2000_uart6),
32367f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart7", x2000_uart7),
32377f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart8", x2000_uart8),
32387f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart9", x2000_uart9),
32397f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("sfc", x2000_sfc),
32407f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi0", x2000_ssi0),
32417f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi1", x2000_ssi1),
32427f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", x2000_mmc0),
32437f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", x2000_mmc1),
32447f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc2", x2000_mmc2),
32457f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("emc", x2000_emc),
32467f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("emc-cs1", x2000_cs1),
32477f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("emc-cs2", x2000_cs2),
32487f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c0", x2000_i2c0),
32497f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c1", x2000_i2c1),
32507f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c2", x2000_i2c2),
32517f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c3", x2000_i2c3),
32527f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c4", x2000_i2c4),
32537f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c5", x2000_i2c5),
32547f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s1", x2000_i2s1),
32557f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s2", x2000_i2s2),
32567f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s3", x2000_i2s3),
32577f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("dmic", x2000_dmic),
32587f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", x2000_cim),
32597f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", x2000_lcd),
32607f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", x2000_pwm0),
32617f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", x2000_pwm1),
32627f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", x2000_pwm2),
32637f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", x2000_pwm3),
32647f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", x2000_pwm4),
32657f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", x2000_pwm5),
32667f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm6", x2000_pwm6),
32677f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm7", x2000_pwm7),
32687f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm8", x2000_pwm8),
32697f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm9", x2000_pwm9),
32707f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm10", x2000_pwm10),
32717f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm11", x2000_pwm11),
32727f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm12", x2000_pwm12),
32737f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm13", x2000_pwm13),
32747f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm14", x2000_pwm14),
32757f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm15", x2000_pwm15),
32767f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mac0", x2000_mac0),
32777f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mac1", x2000_mac1),
32787f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("otg", x2000_otg),
3279943e0da1S周琰杰 (Zhou Yanjie) };
3280943e0da1S周琰杰 (Zhou Yanjie)
32819279c00fSAidan MacDonald static const struct regmap_range x2000_access_ranges[] = {
32829279c00fSAidan MacDonald regmap_reg_range(0x000, 0x500 - 4),
32839279c00fSAidan MacDonald regmap_reg_range(0x700, 0x800 - 4),
32849279c00fSAidan MacDonald };
32859279c00fSAidan MacDonald
32869279c00fSAidan MacDonald /* shared with X2100 */
32879279c00fSAidan MacDonald static const struct regmap_access_table x2000_access_table = {
32889279c00fSAidan MacDonald .yes_ranges = x2000_access_ranges,
32899279c00fSAidan MacDonald .n_yes_ranges = ARRAY_SIZE(x2000_access_ranges),
32909279c00fSAidan MacDonald };
32919279c00fSAidan MacDonald
3292943e0da1S周琰杰 (Zhou Yanjie) static const struct ingenic_chip_info x2000_chip_info = {
3293943e0da1S周琰杰 (Zhou Yanjie) .num_chips = 5,
3294943e0da1S周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
3295943e0da1S周琰杰 (Zhou Yanjie) .version = ID_X2000,
3296943e0da1S周琰杰 (Zhou Yanjie) .groups = x2000_groups,
3297943e0da1S周琰杰 (Zhou Yanjie) .num_groups = ARRAY_SIZE(x2000_groups),
3298943e0da1S周琰杰 (Zhou Yanjie) .functions = x2000_functions,
3299943e0da1S周琰杰 (Zhou Yanjie) .num_functions = ARRAY_SIZE(x2000_functions),
3300943e0da1S周琰杰 (Zhou Yanjie) .pull_ups = x2000_pull_ups,
3301943e0da1S周琰杰 (Zhou Yanjie) .pull_downs = x2000_pull_downs,
33029279c00fSAidan MacDonald .access_table = &x2000_access_table,
3303943e0da1S周琰杰 (Zhou Yanjie) };
3304943e0da1S周琰杰 (Zhou Yanjie)
33052a18211bS周琰杰 (Zhou Yanjie) static const u32 x2100_pull_ups[5] = {
33062a18211bS周琰杰 (Zhou Yanjie) 0x0003ffff, 0xffffffff, 0x1ff0ffff, 0xc7fe3f3f, 0x0fbf003f,
33072a18211bS周琰杰 (Zhou Yanjie) };
33082a18211bS周琰杰 (Zhou Yanjie)
33092a18211bS周琰杰 (Zhou Yanjie) static const u32 x2100_pull_downs[5] = {
33102a18211bS周琰杰 (Zhou Yanjie) 0x0003ffff, 0xffffffff, 0x1ff0ffff, 0x00000000, 0x0fbf003f,
33112a18211bS周琰杰 (Zhou Yanjie) };
33122a18211bS周琰杰 (Zhou Yanjie)
33132a18211bS周琰杰 (Zhou Yanjie) static int x2100_mac_pins[] = {
33142a18211bS周琰杰 (Zhou Yanjie) 0x4b, 0x47, 0x46, 0x4a, 0x43, 0x42, 0x4c, 0x4d, 0x4f, 0x41,
33152a18211bS周琰杰 (Zhou Yanjie) };
33162a18211bS周琰杰 (Zhou Yanjie)
33172a18211bS周琰杰 (Zhou Yanjie) static const struct group_desc x2100_groups[] = {
33182a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-data", x2000_uart0_data, 2),
33192a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart0-hwflow", x2000_uart0_hwflow, 2),
33202a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart1-data", x2000_uart1_data, 1),
33212a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart1-hwflow", x2000_uart1_hwflow, 1),
33222a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart2-data", x2000_uart2_data, 0),
33232a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-data-c", x2000_uart3_data_c, 0),
33242a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-data-d", x2000_uart3_data_d, 1),
33252a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-hwflow-c", x2000_uart3_hwflow_c, 0),
33262a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart3-hwflow-d", x2000_uart3_hwflow_d, 1),
33272a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart4-data-a", x2000_uart4_data_a, 1),
33282a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart4-data-c", x2000_uart4_data_c, 3),
33292a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart4-hwflow-a", x2000_uart4_hwflow_a, 1),
33302a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart4-hwflow-c", x2000_uart4_hwflow_c, 3),
33312a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart5-data-a", x2000_uart5_data_a, 1),
33322a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart5-data-c", x2000_uart5_data_c, 3),
33332a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart6-data-a", x2000_uart6_data_a, 1),
33342a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart6-data-c", x2000_uart6_data_c, 3),
33352a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart7-data-a", x2000_uart7_data_a, 1),
33362a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart7-data-c", x2000_uart7_data_c, 3),
33372a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart8-data", x2000_uart8_data, 3),
33382a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("uart9-data", x2000_uart9_data, 3),
33392a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-data-if0-d", x2000_sfc_data_if0_d, 1),
33402a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-data-if0-e", x2000_sfc_data_if0_e, 0),
33412a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-data-if1", x2000_sfc_data_if1, 1),
33422a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-clk-d", x2000_sfc_clk_d, 1),
33432a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-clk-e", x2000_sfc_clk_e, 0),
33442a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-ce-d", x2000_sfc_ce_d, 1),
33452a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("sfc-ce-e", x2000_sfc_ce_e, 0),
33462a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dt-b", x2000_ssi0_dt_b, 1),
33472a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dt-d", x2000_ssi0_dt_d, 1),
33482a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dr-b", x2000_ssi0_dr_b, 1),
33492a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-dr-d", x2000_ssi0_dr_d, 1),
33502a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-clk-b", x2000_ssi0_clk_b, 1),
33512a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-clk-d", x2000_ssi0_clk_d, 1),
33522a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce-b", x2000_ssi0_ce_b, 1),
33532a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi0-ce-d", x2000_ssi0_ce_d, 1),
33542a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-c", x2000_ssi1_dt_c, 2),
33552a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-d", x2000_ssi1_dt_d, 2),
33562a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dt-e", x2000_ssi1_dt_e, 1),
33572a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-c", x2000_ssi1_dr_c, 2),
33582a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-d", x2000_ssi1_dr_d, 2),
33592a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-dr-e", x2000_ssi1_dr_e, 1),
33602a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-c", x2000_ssi1_clk_c, 2),
33612a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-d", x2000_ssi1_clk_d, 2),
33622a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-clk-e", x2000_ssi1_clk_e, 1),
33632a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce-c", x2000_ssi1_ce_c, 2),
33642a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce-d", x2000_ssi1_ce_d, 2),
33652a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("ssi1-ce-e", x2000_ssi1_ce_e, 1),
33662a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-1bit", x2000_mmc0_1bit, 0),
33672a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-4bit", x2000_mmc0_4bit, 0),
33682a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc0-8bit", x2000_mmc0_8bit, 0),
33692a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-1bit", x2000_mmc1_1bit, 0),
33702a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc1-4bit", x2000_mmc1_4bit, 0),
33712a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc2-1bit", x2000_mmc2_1bit, 0),
33722a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mmc2-4bit", x2000_mmc2_4bit, 0),
33732a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-8bit-data", x2000_emc_8bit_data, 0),
33742a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-16bit-data", x2000_emc_16bit_data, 0),
33752a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-addr", x2000_emc_addr, 0),
33762a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-rd-we", x2000_emc_rd_we, 0),
33772a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-wait", x2000_emc_wait, 0),
33782a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-cs1", x2000_emc_cs1, 3),
33792a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("emc-cs2", x2000_emc_cs2, 3),
33802a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c0-data", x2000_i2c0, 3),
33812a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c1-data-c", x2000_i2c1_c, 2),
33822a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c1-data-d", x2000_i2c1_d, 1),
33832a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c2-data-b", x2000_i2c2_b, 2),
33842a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c2-data-d", x2000_i2c2_d, 2),
33852a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c2-data-e", x2000_i2c2_e, 1),
33862a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c3-data-a", x2000_i2c3_a, 0),
33872a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c3-data-d", x2000_i2c3_d, 1),
33882a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c4-data-c", x2000_i2c4_c, 1),
33892a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c4-data-d", x2000_i2c4_d, 2),
33902a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c5-data-c", x2000_i2c5_c, 1),
33912a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2c5-data-d", x2000_i2c5_d, 1),
33922a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-data-tx", x2000_i2s1_data_tx, 2),
33932a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-data-rx", x2000_i2s1_data_rx, 2),
33942a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-clk-tx", x2000_i2s1_clk_tx, 2),
33952a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-clk-rx", x2000_i2s1_clk_rx, 2),
33962a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-sysclk-tx", x2000_i2s1_sysclk_tx, 2),
33972a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s1-sysclk-rx", x2000_i2s1_sysclk_rx, 2),
33982a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-data-rx0", x2000_i2s2_data_rx0, 2),
33992a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-data-rx1", x2000_i2s2_data_rx1, 2),
34002a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-data-rx2", x2000_i2s2_data_rx2, 2),
34012a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-data-rx3", x2000_i2s2_data_rx3, 2),
34022a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-clk-rx", x2000_i2s2_clk_rx, 2),
34032a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s2-sysclk-rx", x2000_i2s2_sysclk_rx, 2),
34042a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-data-tx0", x2000_i2s3_data_tx0, 2),
34052a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-data-tx1", x2000_i2s3_data_tx1, 2),
34062a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-data-tx2", x2000_i2s3_data_tx2, 2),
34072a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-data-tx3", x2000_i2s3_data_tx3, 2),
34082a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-clk-tx", x2000_i2s3_clk_tx, 2),
34092a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("i2s3-sysclk-tx", x2000_i2s3_sysclk_tx, 2),
34102a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if0", x2000_dmic_if0, 0),
34112a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if1", x2000_dmic_if1, 0),
34122a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if2", x2000_dmic_if2, 0),
34132a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("dmic-if3", x2000_dmic_if3, 0),
34142a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP_FUNCS("cim-data-8bit", x2000_cim_8bit,
34152a18211bS周琰杰 (Zhou Yanjie) x2000_cim_8bit_funcs),
34162a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("cim-data-12bit", x2000_cim_12bit, 0),
34172a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-8bit", x2000_lcd_tft_8bit, 1),
34182a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-16bit", x2000_lcd_tft_16bit, 1),
34192a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-18bit", x2000_lcd_tft_18bit, 1),
34202a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-tft-24bit", x2000_lcd_tft_24bit, 1),
34212a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-slcd-8bit", x2000_lcd_slcd_8bit, 2),
34222a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("lcd-slcd-16bit", x2000_lcd_tft_16bit, 2),
34232a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm0-c", x2000_pwm_pwm0_c, 0),
34242a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm0-d", x2000_pwm_pwm0_d, 2),
34252a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm1-c", x2000_pwm_pwm1_c, 0),
34262a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm1-d", x2000_pwm_pwm1_d, 2),
34272a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm2-c", x2000_pwm_pwm2_c, 0),
34282a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm2-e", x2000_pwm_pwm2_e, 1),
34292a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm3-c", x2000_pwm_pwm3_c, 0),
34302a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm3-e", x2000_pwm_pwm3_e, 1),
34312a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm4-c", x2000_pwm_pwm4_c, 0),
34322a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm4-e", x2000_pwm_pwm4_e, 1),
34332a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm5-c", x2000_pwm_pwm5_c, 0),
34342a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm5-e", x2000_pwm_pwm5_e, 1),
34352a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm6-c", x2000_pwm_pwm6_c, 0),
34362a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm6-e", x2000_pwm_pwm6_e, 1),
34372a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm7-c", x2000_pwm_pwm7_c, 0),
34382a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm7-e", x2000_pwm_pwm7_e, 1),
34392a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm8", x2000_pwm_pwm8, 0),
34402a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm9", x2000_pwm_pwm9, 0),
34412a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm10", x2000_pwm_pwm10, 0),
34422a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm11", x2000_pwm_pwm11, 0),
34432a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm12", x2000_pwm_pwm12, 0),
34442a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm13", x2000_pwm_pwm13, 0),
34452a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm14", x2000_pwm_pwm14, 0),
34462a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("pwm15", x2000_pwm_pwm15, 0),
34472a18211bS周琰杰 (Zhou Yanjie) INGENIC_PIN_GROUP("mac", x2100_mac, 1),
34482a18211bS周琰杰 (Zhou Yanjie) };
34492a18211bS周琰杰 (Zhou Yanjie)
34502a18211bS周琰杰 (Zhou Yanjie) static const char *x2100_mac_groups[] = { "mac", };
34512a18211bS周琰杰 (Zhou Yanjie)
34522a18211bS周琰杰 (Zhou Yanjie) static const struct function_desc x2100_functions[] = {
34537f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart0", x2000_uart0),
34547f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart1", x2000_uart1),
34557f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart2", x2000_uart2),
34567f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart3", x2000_uart3),
34577f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart4", x2000_uart4),
34587f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart5", x2000_uart5),
34597f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart6", x2000_uart6),
34607f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart7", x2000_uart7),
34617f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart8", x2000_uart8),
34627f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("uart9", x2000_uart9),
34637f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("sfc", x2000_sfc),
34647f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi0", x2000_ssi0),
34657f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("ssi1", x2000_ssi1),
34667f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc0", x2000_mmc0),
34677f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc1", x2000_mmc1),
34687f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mmc2", x2000_mmc2),
34697f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("emc", x2000_emc),
34707f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("emc-cs1", x2000_cs1),
34717f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("emc-cs2", x2000_cs2),
34727f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c0", x2000_i2c0),
34737f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c1", x2000_i2c1),
34747f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c2", x2000_i2c2),
34757f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c3", x2000_i2c3),
34767f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c4", x2000_i2c4),
34777f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2c5", x2000_i2c5),
34787f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s1", x2000_i2s1),
34797f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s2", x2000_i2s2),
34807f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("i2s3", x2000_i2s3),
34817f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("dmic", x2000_dmic),
34827f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("cim", x2000_cim),
34837f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("lcd", x2000_lcd),
34847f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm0", x2000_pwm0),
34857f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm1", x2000_pwm1),
34867f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm2", x2000_pwm2),
34877f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm3", x2000_pwm3),
34887f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm4", x2000_pwm4),
34897f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm5", x2000_pwm5),
34907f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm6", x2000_pwm6),
34917f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm7", x2000_pwm7),
34927f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm8", x2000_pwm8),
34937f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm9", x2000_pwm9),
34947f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm10", x2000_pwm10),
34957f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm11", x2000_pwm11),
34967f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm12", x2000_pwm12),
34977f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm13", x2000_pwm13),
34987f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm14", x2000_pwm14),
34997f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("pwm15", x2000_pwm15),
35007f2a2af0SAndy Shevchenko INGENIC_PIN_FUNCTION("mac", x2100_mac),
35012a18211bS周琰杰 (Zhou Yanjie) };
35022a18211bS周琰杰 (Zhou Yanjie)
35032a18211bS周琰杰 (Zhou Yanjie) static const struct ingenic_chip_info x2100_chip_info = {
35042a18211bS周琰杰 (Zhou Yanjie) .num_chips = 5,
35052a18211bS周琰杰 (Zhou Yanjie) .reg_offset = 0x100,
35062a18211bS周琰杰 (Zhou Yanjie) .version = ID_X2100,
35072a18211bS周琰杰 (Zhou Yanjie) .groups = x2100_groups,
35082a18211bS周琰杰 (Zhou Yanjie) .num_groups = ARRAY_SIZE(x2100_groups),
35092a18211bS周琰杰 (Zhou Yanjie) .functions = x2100_functions,
35102a18211bS周琰杰 (Zhou Yanjie) .num_functions = ARRAY_SIZE(x2100_functions),
35112a18211bS周琰杰 (Zhou Yanjie) .pull_ups = x2100_pull_ups,
35122a18211bS周琰杰 (Zhou Yanjie) .pull_downs = x2100_pull_downs,
35139279c00fSAidan MacDonald .access_table = &x2000_access_table,
35142a18211bS周琰杰 (Zhou Yanjie) };
35152a18211bS周琰杰 (Zhou Yanjie)
ingenic_gpio_read_reg(struct ingenic_gpio_chip * jzgc,u8 reg)3516b71c1844SZhou Yanjie static u32 ingenic_gpio_read_reg(struct ingenic_gpio_chip *jzgc, u8 reg)
3517e72394e2SPaul Cercueil {
3518e72394e2SPaul Cercueil unsigned int val;
3519e72394e2SPaul Cercueil
3520e72394e2SPaul Cercueil regmap_read(jzgc->jzpc->map, jzgc->reg_base + reg, &val);
3521e72394e2SPaul Cercueil
3522e72394e2SPaul Cercueil return (u32) val;
3523e72394e2SPaul Cercueil }
3524e72394e2SPaul Cercueil
ingenic_gpio_set_bit(struct ingenic_gpio_chip * jzgc,u8 reg,u8 offset,bool set)3525b71c1844SZhou Yanjie static void ingenic_gpio_set_bit(struct ingenic_gpio_chip *jzgc,
3526e72394e2SPaul Cercueil u8 reg, u8 offset, bool set)
3527e72394e2SPaul Cercueil {
35288d2d607cSPaul Cercueil if (!is_soc_or_above(jzgc->jzpc, ID_JZ4740)) {
3529424f3969S周琰杰 (Zhou Yanjie) regmap_update_bits(jzgc->jzpc->map, jzgc->reg_base + reg,
3530424f3969S周琰杰 (Zhou Yanjie) BIT(offset), set ? BIT(offset) : 0);
3531424f3969S周琰杰 (Zhou Yanjie) return;
3532424f3969S周琰杰 (Zhou Yanjie) }
3533424f3969S周琰杰 (Zhou Yanjie)
3534e72394e2SPaul Cercueil if (set)
3535e72394e2SPaul Cercueil reg = REG_SET(reg);
3536e72394e2SPaul Cercueil else
3537e72394e2SPaul Cercueil reg = REG_CLEAR(reg);
3538e72394e2SPaul Cercueil
3539e72394e2SPaul Cercueil regmap_write(jzgc->jzpc->map, jzgc->reg_base + reg, BIT(offset));
3540e72394e2SPaul Cercueil }
3541e72394e2SPaul Cercueil
ingenic_gpio_shadow_set_bit(struct ingenic_gpio_chip * jzgc,u8 reg,u8 offset,bool set)3542fe1ad5eeSZhou Yanjie static void ingenic_gpio_shadow_set_bit(struct ingenic_gpio_chip *jzgc,
3543fe1ad5eeSZhou Yanjie u8 reg, u8 offset, bool set)
3544fe1ad5eeSZhou Yanjie {
3545fe1ad5eeSZhou Yanjie if (set)
3546fe1ad5eeSZhou Yanjie reg = REG_SET(reg);
3547fe1ad5eeSZhou Yanjie else
3548fe1ad5eeSZhou Yanjie reg = REG_CLEAR(reg);
3549fe1ad5eeSZhou Yanjie
3550d7da2a1eS周琰杰 (Zhou Yanjie) regmap_write(jzgc->jzpc->map, REG_PZ_BASE(
3551d7da2a1eS周琰杰 (Zhou Yanjie) jzgc->jzpc->info->reg_offset) + reg, BIT(offset));
3552fe1ad5eeSZhou Yanjie }
3553fe1ad5eeSZhou Yanjie
ingenic_gpio_shadow_set_bit_load(struct ingenic_gpio_chip * jzgc)3554fe1ad5eeSZhou Yanjie static void ingenic_gpio_shadow_set_bit_load(struct ingenic_gpio_chip *jzgc)
3555fe1ad5eeSZhou Yanjie {
3556d7da2a1eS周琰杰 (Zhou Yanjie) regmap_write(jzgc->jzpc->map, REG_PZ_GID2LD(
3557d7da2a1eS周琰杰 (Zhou Yanjie) jzgc->jzpc->info->reg_offset),
3558fe1ad5eeSZhou Yanjie jzgc->gc.base / PINS_PER_GPIO_CHIP);
3559fe1ad5eeSZhou Yanjie }
3560fe1ad5eeSZhou Yanjie
jz4730_gpio_set_bits(struct ingenic_gpio_chip * jzgc,u8 reg_upper,u8 reg_lower,u8 offset,u8 value)3561424f3969S周琰杰 (Zhou Yanjie) static void jz4730_gpio_set_bits(struct ingenic_gpio_chip *jzgc,
3562424f3969S周琰杰 (Zhou Yanjie) u8 reg_upper, u8 reg_lower, u8 offset, u8 value)
3563424f3969S周琰杰 (Zhou Yanjie) {
3564424f3969S周琰杰 (Zhou Yanjie) /*
3565424f3969S周琰杰 (Zhou Yanjie) * JZ4730 function and IRQ registers support two-bits-per-pin
3566424f3969S周琰杰 (Zhou Yanjie) * definitions, split into two groups of 16.
3567424f3969S周琰杰 (Zhou Yanjie) */
3568424f3969S周琰杰 (Zhou Yanjie) u8 reg = offset < JZ4730_PINS_PER_PAIRED_REG ? reg_lower : reg_upper;
3569424f3969S周琰杰 (Zhou Yanjie) unsigned int idx = offset % JZ4730_PINS_PER_PAIRED_REG;
3570424f3969S周琰杰 (Zhou Yanjie) unsigned int mask = GENMASK(1, 0) << idx * 2;
3571424f3969S周琰杰 (Zhou Yanjie)
3572424f3969S周琰杰 (Zhou Yanjie) regmap_update_bits(jzgc->jzpc->map, jzgc->reg_base + reg, mask, value << (idx * 2));
3573424f3969S周琰杰 (Zhou Yanjie) }
3574424f3969S周琰杰 (Zhou Yanjie)
ingenic_gpio_get_value(struct ingenic_gpio_chip * jzgc,u8 offset)3575e72394e2SPaul Cercueil static inline bool ingenic_gpio_get_value(struct ingenic_gpio_chip *jzgc,
3576e72394e2SPaul Cercueil u8 offset)
3577e72394e2SPaul Cercueil {
3578b71c1844SZhou Yanjie unsigned int val = ingenic_gpio_read_reg(jzgc, GPIO_PIN);
3579e72394e2SPaul Cercueil
3580e72394e2SPaul Cercueil return !!(val & BIT(offset));
3581e72394e2SPaul Cercueil }
3582e72394e2SPaul Cercueil
ingenic_gpio_set_value(struct ingenic_gpio_chip * jzgc,u8 offset,int value)3583e72394e2SPaul Cercueil static void ingenic_gpio_set_value(struct ingenic_gpio_chip *jzgc,
3584e72394e2SPaul Cercueil u8 offset, int value)
3585e72394e2SPaul Cercueil {
35868d2d607cSPaul Cercueil if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3587b4aa4876SPaul Cercueil ingenic_gpio_set_bit(jzgc, JZ4770_GPIO_PAT0, offset, !!value);
35888d2d607cSPaul Cercueil else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3589b71c1844SZhou Yanjie ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_DATA, offset, !!value);
3590424f3969S周琰杰 (Zhou Yanjie) else
3591424f3969S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_DATA, offset, !!value);
3592e72394e2SPaul Cercueil }
3593e72394e2SPaul Cercueil
irq_set_type(struct ingenic_gpio_chip * jzgc,u8 offset,unsigned int type)3594e72394e2SPaul Cercueil static void irq_set_type(struct ingenic_gpio_chip *jzgc,
3595e72394e2SPaul Cercueil u8 offset, unsigned int type)
3596e72394e2SPaul Cercueil {
3597e72394e2SPaul Cercueil u8 reg1, reg2;
3598943e0da1S周琰杰 (Zhou Yanjie) bool val1, val2, val3;
3599f831f93aSPaul Cercueil
3600f831f93aSPaul Cercueil switch (type) {
3601943e0da1S周琰杰 (Zhou Yanjie) case IRQ_TYPE_EDGE_BOTH:
3602943e0da1S周琰杰 (Zhou Yanjie) val1 = val2 = false;
3603943e0da1S周琰杰 (Zhou Yanjie) val3 = true;
3604943e0da1S周琰杰 (Zhou Yanjie) break;
3605f831f93aSPaul Cercueil case IRQ_TYPE_EDGE_RISING:
3606f831f93aSPaul Cercueil val1 = val2 = true;
3607943e0da1S周琰杰 (Zhou Yanjie) val3 = false;
3608f831f93aSPaul Cercueil break;
3609f831f93aSPaul Cercueil case IRQ_TYPE_EDGE_FALLING:
3610943e0da1S周琰杰 (Zhou Yanjie) val1 = val3 = false;
3611f831f93aSPaul Cercueil val2 = true;
3612f831f93aSPaul Cercueil break;
3613f831f93aSPaul Cercueil case IRQ_TYPE_LEVEL_HIGH:
3614f831f93aSPaul Cercueil val1 = true;
3615943e0da1S周琰杰 (Zhou Yanjie) val2 = val3 = false;
3616f831f93aSPaul Cercueil break;
3617f831f93aSPaul Cercueil case IRQ_TYPE_LEVEL_LOW:
3618f831f93aSPaul Cercueil default:
3619943e0da1S周琰杰 (Zhou Yanjie) val1 = val2 = val3 = false;
3620f831f93aSPaul Cercueil break;
3621f831f93aSPaul Cercueil }
3622e72394e2SPaul Cercueil
36238d2d607cSPaul Cercueil if (is_soc_or_above(jzgc->jzpc, ID_JZ4770)) {
3624b4aa4876SPaul Cercueil reg1 = JZ4770_GPIO_PAT1;
3625b4aa4876SPaul Cercueil reg2 = JZ4770_GPIO_PAT0;
36268d2d607cSPaul Cercueil } else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740)) {
3627e72394e2SPaul Cercueil reg1 = JZ4740_GPIO_TRIG;
3628e72394e2SPaul Cercueil reg2 = JZ4740_GPIO_DIR;
3629424f3969S周琰杰 (Zhou Yanjie) } else {
3630424f3969S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPDIR, offset, false);
3631424f3969S周琰杰 (Zhou Yanjie) jz4730_gpio_set_bits(jzgc, JZ4730_GPIO_GPIDUR,
3632424f3969S周琰杰 (Zhou Yanjie) JZ4730_GPIO_GPIDLR, offset, (val2 << 1) | val1);
3633424f3969S周琰杰 (Zhou Yanjie) return;
3634e72394e2SPaul Cercueil }
3635e72394e2SPaul Cercueil
36368d2d607cSPaul Cercueil if (is_soc_or_above(jzgc->jzpc, ID_X2000)) {
3637943e0da1S周琰杰 (Zhou Yanjie) ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, val1);
3638943e0da1S周琰杰 (Zhou Yanjie) ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, val2);
3639943e0da1S周琰杰 (Zhou Yanjie) ingenic_gpio_shadow_set_bit_load(jzgc);
3640943e0da1S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, X2000_GPIO_EDG, offset, val3);
36418d2d607cSPaul Cercueil } else if (is_soc_or_above(jzgc->jzpc, ID_X1000)) {
3642f831f93aSPaul Cercueil ingenic_gpio_shadow_set_bit(jzgc, reg2, offset, val1);
3643f831f93aSPaul Cercueil ingenic_gpio_shadow_set_bit(jzgc, reg1, offset, val2);
3644fe1ad5eeSZhou Yanjie ingenic_gpio_shadow_set_bit_load(jzgc);
3645fe1ad5eeSZhou Yanjie } else {
3646f831f93aSPaul Cercueil ingenic_gpio_set_bit(jzgc, reg2, offset, val1);
3647f831f93aSPaul Cercueil ingenic_gpio_set_bit(jzgc, reg1, offset, val2);
3648e72394e2SPaul Cercueil }
3649e72394e2SPaul Cercueil }
3650e72394e2SPaul Cercueil
ingenic_gpio_irq_mask(struct irq_data * irqd)3651e72394e2SPaul Cercueil static void ingenic_gpio_irq_mask(struct irq_data *irqd)
3652e72394e2SPaul Cercueil {
3653e72394e2SPaul Cercueil struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
3654e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
36554c76a7fcSAidan MacDonald irq_hw_number_t irq = irqd_to_hwirq(irqd);
3656e72394e2SPaul Cercueil
36578d2d607cSPaul Cercueil if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3658424f3969S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, GPIO_MSK, irq, true);
3659424f3969S周琰杰 (Zhou Yanjie) else
3660424f3969S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPIMR, irq, true);
3661e72394e2SPaul Cercueil }
3662e72394e2SPaul Cercueil
ingenic_gpio_irq_unmask(struct irq_data * irqd)3663e72394e2SPaul Cercueil static void ingenic_gpio_irq_unmask(struct irq_data *irqd)
3664e72394e2SPaul Cercueil {
3665e72394e2SPaul Cercueil struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
3666e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
36674c76a7fcSAidan MacDonald irq_hw_number_t irq = irqd_to_hwirq(irqd);
3668e72394e2SPaul Cercueil
36698d2d607cSPaul Cercueil if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3670424f3969S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, GPIO_MSK, irq, false);
3671424f3969S周琰杰 (Zhou Yanjie) else
3672424f3969S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPIMR, irq, false);
3673e72394e2SPaul Cercueil }
3674e72394e2SPaul Cercueil
ingenic_gpio_irq_enable(struct irq_data * irqd)3675e72394e2SPaul Cercueil static void ingenic_gpio_irq_enable(struct irq_data *irqd)
3676e72394e2SPaul Cercueil {
3677e72394e2SPaul Cercueil struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
3678e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
36794c76a7fcSAidan MacDonald irq_hw_number_t irq = irqd_to_hwirq(irqd);
3680e72394e2SPaul Cercueil
368171f5e7b3SAidan MacDonald gpiochip_enable_irq(gc, irq);
368271f5e7b3SAidan MacDonald
36838d2d607cSPaul Cercueil if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3684b4aa4876SPaul Cercueil ingenic_gpio_set_bit(jzgc, JZ4770_GPIO_INT, irq, true);
36858d2d607cSPaul Cercueil else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3686b71c1844SZhou Yanjie ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_SELECT, irq, true);
3687424f3969S周琰杰 (Zhou Yanjie) else
3688424f3969S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPIER, irq, true);
3689e72394e2SPaul Cercueil
3690e72394e2SPaul Cercueil ingenic_gpio_irq_unmask(irqd);
3691e72394e2SPaul Cercueil }
3692e72394e2SPaul Cercueil
ingenic_gpio_irq_disable(struct irq_data * irqd)3693e72394e2SPaul Cercueil static void ingenic_gpio_irq_disable(struct irq_data *irqd)
3694e72394e2SPaul Cercueil {
3695e72394e2SPaul Cercueil struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
3696e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
36974c76a7fcSAidan MacDonald irq_hw_number_t irq = irqd_to_hwirq(irqd);
3698e72394e2SPaul Cercueil
3699e72394e2SPaul Cercueil ingenic_gpio_irq_mask(irqd);
3700e72394e2SPaul Cercueil
37018d2d607cSPaul Cercueil if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3702b4aa4876SPaul Cercueil ingenic_gpio_set_bit(jzgc, JZ4770_GPIO_INT, irq, false);
37038d2d607cSPaul Cercueil else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3704b71c1844SZhou Yanjie ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_SELECT, irq, false);
3705424f3969S周琰杰 (Zhou Yanjie) else
3706424f3969S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPIER, irq, false);
370771f5e7b3SAidan MacDonald
370871f5e7b3SAidan MacDonald gpiochip_disable_irq(gc, irq);
3709e72394e2SPaul Cercueil }
3710e72394e2SPaul Cercueil
ingenic_gpio_irq_ack(struct irq_data * irqd)3711e72394e2SPaul Cercueil static void ingenic_gpio_irq_ack(struct irq_data *irqd)
3712e72394e2SPaul Cercueil {
3713e72394e2SPaul Cercueil struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
3714e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
37154c76a7fcSAidan MacDonald irq_hw_number_t irq = irqd_to_hwirq(irqd);
3716e72394e2SPaul Cercueil bool high;
3717e72394e2SPaul Cercueil
3718943e0da1S周琰杰 (Zhou Yanjie) if ((irqd_get_trigger_type(irqd) == IRQ_TYPE_EDGE_BOTH) &&
37198d2d607cSPaul Cercueil !is_soc_or_above(jzgc->jzpc, ID_X2000)) {
3720e72394e2SPaul Cercueil /*
3721e72394e2SPaul Cercueil * Switch to an interrupt for the opposite edge to the one that
3722e72394e2SPaul Cercueil * triggered the interrupt being ACKed.
3723e72394e2SPaul Cercueil */
3724e72394e2SPaul Cercueil high = ingenic_gpio_get_value(jzgc, irq);
3725e72394e2SPaul Cercueil if (high)
37261c95348bSPaul Cercueil irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_LOW);
3727e72394e2SPaul Cercueil else
37281c95348bSPaul Cercueil irq_set_type(jzgc, irq, IRQ_TYPE_LEVEL_HIGH);
3729e72394e2SPaul Cercueil }
3730e72394e2SPaul Cercueil
37318d2d607cSPaul Cercueil if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3732b4aa4876SPaul Cercueil ingenic_gpio_set_bit(jzgc, JZ4770_GPIO_FLAG, irq, false);
37338d2d607cSPaul Cercueil else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3734b71c1844SZhou Yanjie ingenic_gpio_set_bit(jzgc, JZ4740_GPIO_DATA, irq, true);
3735424f3969S周琰杰 (Zhou Yanjie) else
3736424f3969S周琰杰 (Zhou Yanjie) ingenic_gpio_set_bit(jzgc, JZ4730_GPIO_GPFR, irq, false);
3737e72394e2SPaul Cercueil }
3738e72394e2SPaul Cercueil
ingenic_gpio_irq_set_type(struct irq_data * irqd,unsigned int type)3739e72394e2SPaul Cercueil static int ingenic_gpio_irq_set_type(struct irq_data *irqd, unsigned int type)
3740e72394e2SPaul Cercueil {
3741e72394e2SPaul Cercueil struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
3742e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
37434c76a7fcSAidan MacDonald irq_hw_number_t irq = irqd_to_hwirq(irqd);
3744e72394e2SPaul Cercueil
3745e72394e2SPaul Cercueil switch (type) {
3746e72394e2SPaul Cercueil case IRQ_TYPE_EDGE_BOTH:
3747e72394e2SPaul Cercueil case IRQ_TYPE_EDGE_RISING:
3748e72394e2SPaul Cercueil case IRQ_TYPE_EDGE_FALLING:
3749e72394e2SPaul Cercueil irq_set_handler_locked(irqd, handle_edge_irq);
3750e72394e2SPaul Cercueil break;
3751e72394e2SPaul Cercueil case IRQ_TYPE_LEVEL_HIGH:
3752e72394e2SPaul Cercueil case IRQ_TYPE_LEVEL_LOW:
3753e72394e2SPaul Cercueil irq_set_handler_locked(irqd, handle_level_irq);
3754e72394e2SPaul Cercueil break;
3755e72394e2SPaul Cercueil default:
3756e72394e2SPaul Cercueil irq_set_handler_locked(irqd, handle_bad_irq);
3757e72394e2SPaul Cercueil }
3758e72394e2SPaul Cercueil
37598d2d607cSPaul Cercueil if ((type == IRQ_TYPE_EDGE_BOTH) && !is_soc_or_above(jzgc->jzpc, ID_X2000)) {
3760e72394e2SPaul Cercueil /*
3761e72394e2SPaul Cercueil * The hardware does not support interrupts on both edges. The
3762e72394e2SPaul Cercueil * best we can do is to set up a single-edge interrupt and then
3763e72394e2SPaul Cercueil * switch to the opposing edge when ACKing the interrupt.
3764e72394e2SPaul Cercueil */
37654c76a7fcSAidan MacDonald bool high = ingenic_gpio_get_value(jzgc, irq);
3766e72394e2SPaul Cercueil
37671c95348bSPaul Cercueil type = high ? IRQ_TYPE_LEVEL_LOW : IRQ_TYPE_LEVEL_HIGH;
3768e72394e2SPaul Cercueil }
3769e72394e2SPaul Cercueil
37704c76a7fcSAidan MacDonald irq_set_type(jzgc, irq, type);
3771e72394e2SPaul Cercueil return 0;
3772e72394e2SPaul Cercueil }
3773e72394e2SPaul Cercueil
ingenic_gpio_irq_set_wake(struct irq_data * irqd,unsigned int on)3774e72394e2SPaul Cercueil static int ingenic_gpio_irq_set_wake(struct irq_data *irqd, unsigned int on)
3775e72394e2SPaul Cercueil {
3776e72394e2SPaul Cercueil struct gpio_chip *gc = irq_data_get_irq_chip_data(irqd);
3777e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
3778e72394e2SPaul Cercueil
3779e72394e2SPaul Cercueil return irq_set_irq_wake(jzgc->irq, on);
3780e72394e2SPaul Cercueil }
3781e72394e2SPaul Cercueil
ingenic_gpio_irq_handler(struct irq_desc * desc)3782e72394e2SPaul Cercueil static void ingenic_gpio_irq_handler(struct irq_desc *desc)
3783e72394e2SPaul Cercueil {
3784e72394e2SPaul Cercueil struct gpio_chip *gc = irq_desc_get_handler_data(desc);
3785e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
3786e72394e2SPaul Cercueil struct irq_chip *irq_chip = irq_data_get_irq_chip(&desc->irq_data);
3787e72394e2SPaul Cercueil unsigned long flag, i;
3788e72394e2SPaul Cercueil
3789e72394e2SPaul Cercueil chained_irq_enter(irq_chip, desc);
3790e72394e2SPaul Cercueil
37918d2d607cSPaul Cercueil if (is_soc_or_above(jzgc->jzpc, ID_JZ4770))
3792b4aa4876SPaul Cercueil flag = ingenic_gpio_read_reg(jzgc, JZ4770_GPIO_FLAG);
37938d2d607cSPaul Cercueil else if (is_soc_or_above(jzgc->jzpc, ID_JZ4740))
3794b71c1844SZhou Yanjie flag = ingenic_gpio_read_reg(jzgc, JZ4740_GPIO_FLAG);
3795424f3969S周琰杰 (Zhou Yanjie) else
3796424f3969S周琰杰 (Zhou Yanjie) flag = ingenic_gpio_read_reg(jzgc, JZ4730_GPIO_GPFR);
3797e72394e2SPaul Cercueil
3798e72394e2SPaul Cercueil for_each_set_bit(i, &flag, 32)
3799a9cb09b7SMarc Zyngier generic_handle_domain_irq(gc->irq.domain, i);
3800e72394e2SPaul Cercueil chained_irq_exit(irq_chip, desc);
3801e72394e2SPaul Cercueil }
3802e72394e2SPaul Cercueil
ingenic_gpio_set(struct gpio_chip * gc,unsigned int offset,int value)3803eac1183aSBartosz Golaszewski static int ingenic_gpio_set(struct gpio_chip *gc, unsigned int offset,
3804eac1183aSBartosz Golaszewski int value)
3805e72394e2SPaul Cercueil {
3806e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
3807e72394e2SPaul Cercueil
3808e72394e2SPaul Cercueil ingenic_gpio_set_value(jzgc, offset, value);
3809eac1183aSBartosz Golaszewski
3810eac1183aSBartosz Golaszewski return 0;
3811e72394e2SPaul Cercueil }
3812e72394e2SPaul Cercueil
ingenic_gpio_get(struct gpio_chip * gc,unsigned int offset)3813e72394e2SPaul Cercueil static int ingenic_gpio_get(struct gpio_chip *gc, unsigned int offset)
3814e72394e2SPaul Cercueil {
3815e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
3816e72394e2SPaul Cercueil
3817e72394e2SPaul Cercueil return (int) ingenic_gpio_get_value(jzgc, offset);
3818e72394e2SPaul Cercueil }
3819e72394e2SPaul Cercueil
ingenic_gpio_direction_output(struct gpio_chip * gc,unsigned int offset,int value)3820e72394e2SPaul Cercueil static int ingenic_gpio_direction_output(struct gpio_chip *gc,
3821e72394e2SPaul Cercueil unsigned int offset, int value)
3822e72394e2SPaul Cercueil {
3823e72394e2SPaul Cercueil ingenic_gpio_set(gc, offset, value);
3824b679d6c0SBartosz Golaszewski return pinctrl_gpio_direction_output(gc, offset);
3825e72394e2SPaul Cercueil }
3826e72394e2SPaul Cercueil
ingenic_config_pin(struct ingenic_pinctrl * jzpc,unsigned int pin,unsigned int reg,bool set)3827b5c23aa4SPaul Cercueil static inline void ingenic_config_pin(struct ingenic_pinctrl *jzpc,
3828943e0da1S周琰杰 (Zhou Yanjie) unsigned int pin, unsigned int reg, bool set)
3829b5c23aa4SPaul Cercueil {
3830b5c23aa4SPaul Cercueil unsigned int idx = pin % PINS_PER_GPIO_CHIP;
3831b5c23aa4SPaul Cercueil unsigned int offt = pin / PINS_PER_GPIO_CHIP;
3832b5c23aa4SPaul Cercueil
3833424f3969S周琰杰 (Zhou Yanjie) if (set) {
38348d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_JZ4740))
3835f742e5ebS周琰杰 (Zhou Yanjie) regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
3836424f3969S周琰杰 (Zhou Yanjie) REG_SET(reg), BIT(idx));
3837424f3969S周琰杰 (Zhou Yanjie) else
3838424f3969S周琰杰 (Zhou Yanjie) regmap_set_bits(jzpc->map, offt * jzpc->info->reg_offset +
3839424f3969S周琰杰 (Zhou Yanjie) reg, BIT(idx));
3840424f3969S周琰杰 (Zhou Yanjie) } else {
38418d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_JZ4740))
3842424f3969S周琰杰 (Zhou Yanjie) regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
3843424f3969S周琰杰 (Zhou Yanjie) REG_CLEAR(reg), BIT(idx));
3844424f3969S周琰杰 (Zhou Yanjie) else
3845424f3969S周琰杰 (Zhou Yanjie) regmap_clear_bits(jzpc->map, offt * jzpc->info->reg_offset +
3846424f3969S周琰杰 (Zhou Yanjie) reg, BIT(idx));
3847424f3969S周琰杰 (Zhou Yanjie) }
3848b5c23aa4SPaul Cercueil }
3849b5c23aa4SPaul Cercueil
ingenic_shadow_config_pin(struct ingenic_pinctrl * jzpc,unsigned int pin,u8 reg,bool set)3850fe1ad5eeSZhou Yanjie static inline void ingenic_shadow_config_pin(struct ingenic_pinctrl *jzpc,
3851fe1ad5eeSZhou Yanjie unsigned int pin, u8 reg, bool set)
3852fe1ad5eeSZhou Yanjie {
3853fe1ad5eeSZhou Yanjie unsigned int idx = pin % PINS_PER_GPIO_CHIP;
3854fe1ad5eeSZhou Yanjie
3855f742e5ebS周琰杰 (Zhou Yanjie) regmap_write(jzpc->map, REG_PZ_BASE(jzpc->info->reg_offset) +
3856fe1ad5eeSZhou Yanjie (set ? REG_SET(reg) : REG_CLEAR(reg)), BIT(idx));
3857fe1ad5eeSZhou Yanjie }
3858fe1ad5eeSZhou Yanjie
ingenic_shadow_config_pin_load(struct ingenic_pinctrl * jzpc,unsigned int pin)3859fe1ad5eeSZhou Yanjie static inline void ingenic_shadow_config_pin_load(struct ingenic_pinctrl *jzpc,
3860fe1ad5eeSZhou Yanjie unsigned int pin)
3861fe1ad5eeSZhou Yanjie {
3862d7da2a1eS周琰杰 (Zhou Yanjie) regmap_write(jzpc->map, REG_PZ_GID2LD(jzpc->info->reg_offset),
3863d7da2a1eS周琰杰 (Zhou Yanjie) pin / PINS_PER_GPIO_CHIP);
3864fe1ad5eeSZhou Yanjie }
3865fe1ad5eeSZhou Yanjie
jz4730_config_pin_function(struct ingenic_pinctrl * jzpc,unsigned int pin,u8 reg_upper,u8 reg_lower,u8 value)3866424f3969S周琰杰 (Zhou Yanjie) static inline void jz4730_config_pin_function(struct ingenic_pinctrl *jzpc,
3867424f3969S周琰杰 (Zhou Yanjie) unsigned int pin, u8 reg_upper, u8 reg_lower, u8 value)
3868424f3969S周琰杰 (Zhou Yanjie) {
3869424f3969S周琰杰 (Zhou Yanjie) /*
3870424f3969S周琰杰 (Zhou Yanjie) * JZ4730 function and IRQ registers support two-bits-per-pin
3871424f3969S周琰杰 (Zhou Yanjie) * definitions, split into two groups of 16.
3872424f3969S周琰杰 (Zhou Yanjie) */
3873424f3969S周琰杰 (Zhou Yanjie) unsigned int idx = pin % JZ4730_PINS_PER_PAIRED_REG;
3874424f3969S周琰杰 (Zhou Yanjie) unsigned int mask = GENMASK(1, 0) << idx * 2;
3875424f3969S周琰杰 (Zhou Yanjie) unsigned int offt = pin / PINS_PER_GPIO_CHIP;
3876424f3969S周琰杰 (Zhou Yanjie) u8 reg = (pin % PINS_PER_GPIO_CHIP) < JZ4730_PINS_PER_PAIRED_REG ? reg_lower : reg_upper;
3877424f3969S周琰杰 (Zhou Yanjie)
3878424f3969S周琰杰 (Zhou Yanjie) regmap_update_bits(jzpc->map, offt * jzpc->info->reg_offset + reg,
3879424f3969S周琰杰 (Zhou Yanjie) mask, value << (idx * 2));
3880424f3969S周琰杰 (Zhou Yanjie) }
3881424f3969S周琰杰 (Zhou Yanjie)
ingenic_get_pin_config(struct ingenic_pinctrl * jzpc,unsigned int pin,unsigned int reg)3882b5c23aa4SPaul Cercueil static inline bool ingenic_get_pin_config(struct ingenic_pinctrl *jzpc,
3883943e0da1S周琰杰 (Zhou Yanjie) unsigned int pin, unsigned int reg)
3884b5c23aa4SPaul Cercueil {
3885b5c23aa4SPaul Cercueil unsigned int idx = pin % PINS_PER_GPIO_CHIP;
3886b5c23aa4SPaul Cercueil unsigned int offt = pin / PINS_PER_GPIO_CHIP;
3887b5c23aa4SPaul Cercueil unsigned int val;
3888b5c23aa4SPaul Cercueil
3889f742e5ebS周琰杰 (Zhou Yanjie) regmap_read(jzpc->map, offt * jzpc->info->reg_offset + reg, &val);
3890b5c23aa4SPaul Cercueil
3891b5c23aa4SPaul Cercueil return val & BIT(idx);
3892b5c23aa4SPaul Cercueil }
3893b5c23aa4SPaul Cercueil
ingenic_gpio_get_direction(struct gpio_chip * gc,unsigned int offset)3894ebd66514SPaul Cercueil static int ingenic_gpio_get_direction(struct gpio_chip *gc, unsigned int offset)
3895ebd66514SPaul Cercueil {
3896ebd66514SPaul Cercueil struct ingenic_gpio_chip *jzgc = gpiochip_get_data(gc);
3897ebd66514SPaul Cercueil struct ingenic_pinctrl *jzpc = jzgc->jzpc;
3898ebd66514SPaul Cercueil unsigned int pin = gc->base + offset;
3899ebd66514SPaul Cercueil
39008d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_JZ4770)) {
3901b4aa4876SPaul Cercueil if (ingenic_get_pin_config(jzpc, pin, JZ4770_GPIO_INT) ||
3902b4aa4876SPaul Cercueil ingenic_get_pin_config(jzpc, pin, JZ4770_GPIO_PAT1))
39033c827873SMatti Vaittinen return GPIO_LINE_DIRECTION_IN;
39043c827873SMatti Vaittinen return GPIO_LINE_DIRECTION_OUT;
39058d2d607cSPaul Cercueil } else if (!is_soc_or_above(jzpc, ID_JZ4740)) {
3906424f3969S周琰杰 (Zhou Yanjie) if (!ingenic_get_pin_config(jzpc, pin, JZ4730_GPIO_GPDIR))
3907424f3969S周琰杰 (Zhou Yanjie) return GPIO_LINE_DIRECTION_IN;
3908424f3969S周琰杰 (Zhou Yanjie) return GPIO_LINE_DIRECTION_OUT;
39093c827873SMatti Vaittinen }
3910ebd66514SPaul Cercueil
3911ebd66514SPaul Cercueil if (ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_SELECT))
39123c827873SMatti Vaittinen return GPIO_LINE_DIRECTION_IN;
3913ebd66514SPaul Cercueil
39143c827873SMatti Vaittinen if (ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_DIR))
39153c827873SMatti Vaittinen return GPIO_LINE_DIRECTION_OUT;
39163c827873SMatti Vaittinen
39173c827873SMatti Vaittinen return GPIO_LINE_DIRECTION_IN;
3918ebd66514SPaul Cercueil }
3919ebd66514SPaul Cercueil
39205bf7b849SJulia Lawall static const struct pinctrl_ops ingenic_pctlops = {
3921b5c23aa4SPaul Cercueil .get_groups_count = pinctrl_generic_get_group_count,
3922b5c23aa4SPaul Cercueil .get_group_name = pinctrl_generic_get_group_name,
3923b5c23aa4SPaul Cercueil .get_group_pins = pinctrl_generic_get_group_pins,
3924b5c23aa4SPaul Cercueil .dt_node_to_map = pinconf_generic_dt_node_to_map_all,
3925b5c23aa4SPaul Cercueil .dt_free_map = pinconf_generic_dt_free_map,
3926b5c23aa4SPaul Cercueil };
3927b5c23aa4SPaul Cercueil
ingenic_gpio_irq_request(struct irq_data * data)39289a0f1341SPaul Cercueil static int ingenic_gpio_irq_request(struct irq_data *data)
39299a0f1341SPaul Cercueil {
39309a0f1341SPaul Cercueil struct gpio_chip *gpio_chip = irq_data_get_irq_chip_data(data);
39314c76a7fcSAidan MacDonald irq_hw_number_t irq = irqd_to_hwirq(data);
39329a0f1341SPaul Cercueil int ret;
39339a0f1341SPaul Cercueil
393422c7203dSBartosz Golaszewski ret = pinctrl_gpio_direction_input(gpio_chip, irq);
39359a0f1341SPaul Cercueil if (ret)
39369a0f1341SPaul Cercueil return ret;
39379a0f1341SPaul Cercueil
39384c76a7fcSAidan MacDonald return gpiochip_reqres_irq(gpio_chip, irq);
39399a0f1341SPaul Cercueil }
39409a0f1341SPaul Cercueil
ingenic_gpio_irq_release(struct irq_data * data)39419a0f1341SPaul Cercueil static void ingenic_gpio_irq_release(struct irq_data *data)
39429a0f1341SPaul Cercueil {
39439a0f1341SPaul Cercueil struct gpio_chip *gpio_chip = irq_data_get_irq_chip_data(data);
39444c76a7fcSAidan MacDonald irq_hw_number_t irq = irqd_to_hwirq(data);
39459a0f1341SPaul Cercueil
39464c76a7fcSAidan MacDonald return gpiochip_relres_irq(gpio_chip, irq);
39479a0f1341SPaul Cercueil }
39489a0f1341SPaul Cercueil
ingenic_gpio_irq_print_chip(struct irq_data * data,struct seq_file * p)394971f5e7b3SAidan MacDonald static void ingenic_gpio_irq_print_chip(struct irq_data *data, struct seq_file *p)
395071f5e7b3SAidan MacDonald {
395171f5e7b3SAidan MacDonald struct gpio_chip *gpio_chip = irq_data_get_irq_chip_data(data);
395271f5e7b3SAidan MacDonald
3953efe479ccSGeert Uytterhoeven seq_puts(p, gpio_chip->label);
395471f5e7b3SAidan MacDonald }
395571f5e7b3SAidan MacDonald
395671f5e7b3SAidan MacDonald static const struct irq_chip ingenic_gpio_irqchip = {
395771f5e7b3SAidan MacDonald .irq_enable = ingenic_gpio_irq_enable,
395871f5e7b3SAidan MacDonald .irq_disable = ingenic_gpio_irq_disable,
395971f5e7b3SAidan MacDonald .irq_unmask = ingenic_gpio_irq_unmask,
396071f5e7b3SAidan MacDonald .irq_mask = ingenic_gpio_irq_mask,
396171f5e7b3SAidan MacDonald .irq_ack = ingenic_gpio_irq_ack,
396271f5e7b3SAidan MacDonald .irq_set_type = ingenic_gpio_irq_set_type,
396371f5e7b3SAidan MacDonald .irq_set_wake = ingenic_gpio_irq_set_wake,
396471f5e7b3SAidan MacDonald .irq_request_resources = ingenic_gpio_irq_request,
396571f5e7b3SAidan MacDonald .irq_release_resources = ingenic_gpio_irq_release,
396671f5e7b3SAidan MacDonald .irq_print_chip = ingenic_gpio_irq_print_chip,
396771f5e7b3SAidan MacDonald .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE,
396871f5e7b3SAidan MacDonald };
396971f5e7b3SAidan MacDonald
ingenic_pinmux_set_pin_fn(struct ingenic_pinctrl * jzpc,int pin,int func)3970b5c23aa4SPaul Cercueil static int ingenic_pinmux_set_pin_fn(struct ingenic_pinctrl *jzpc,
3971b5c23aa4SPaul Cercueil int pin, int func)
3972b5c23aa4SPaul Cercueil {
3973b5c23aa4SPaul Cercueil unsigned int idx = pin % PINS_PER_GPIO_CHIP;
3974b5c23aa4SPaul Cercueil unsigned int offt = pin / PINS_PER_GPIO_CHIP;
3975b5c23aa4SPaul Cercueil
3976b5c23aa4SPaul Cercueil dev_dbg(jzpc->dev, "set pin P%c%u to function %u\n",
3977b5c23aa4SPaul Cercueil 'A' + offt, idx, func);
3978b5c23aa4SPaul Cercueil
39798d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_X1000)) {
3980b4aa4876SPaul Cercueil ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_INT, false);
3981fe1ad5eeSZhou Yanjie ingenic_shadow_config_pin(jzpc, pin, GPIO_MSK, false);
3982b4aa4876SPaul Cercueil ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_PAT1, func & 0x2);
3983b4aa4876SPaul Cercueil ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_PAT0, func & 0x1);
3984fe1ad5eeSZhou Yanjie ingenic_shadow_config_pin_load(jzpc, pin);
39858d2d607cSPaul Cercueil } else if (is_soc_or_above(jzpc, ID_JZ4770)) {
3986b4aa4876SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4770_GPIO_INT, false);
3987e72394e2SPaul Cercueil ingenic_config_pin(jzpc, pin, GPIO_MSK, false);
3988b4aa4876SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PAT1, func & 0x2);
3989b4aa4876SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PAT0, func & 0x1);
39908d2d607cSPaul Cercueil } else if (is_soc_or_above(jzpc, ID_JZ4740)) {
3991b5c23aa4SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4740_GPIO_FUNC, true);
3992b5c23aa4SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4740_GPIO_TRIG, func & 0x2);
39939a85c09aSPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4740_GPIO_SELECT, func & 0x1);
3994424f3969S周琰杰 (Zhou Yanjie) } else {
3995424f3969S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, JZ4730_GPIO_GPIER, false);
3996424f3969S周琰杰 (Zhou Yanjie) jz4730_config_pin_function(jzpc, pin, JZ4730_GPIO_GPAUR, JZ4730_GPIO_GPALR, func);
3997b5c23aa4SPaul Cercueil }
3998b5c23aa4SPaul Cercueil
3999b5c23aa4SPaul Cercueil return 0;
4000b5c23aa4SPaul Cercueil }
4001b5c23aa4SPaul Cercueil
ingenic_pinmux_set_mux(struct pinctrl_dev * pctldev,unsigned int selector,unsigned int group)4002b5c23aa4SPaul Cercueil static int ingenic_pinmux_set_mux(struct pinctrl_dev *pctldev,
4003b5c23aa4SPaul Cercueil unsigned int selector, unsigned int group)
4004b5c23aa4SPaul Cercueil {
4005b5c23aa4SPaul Cercueil struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev);
4006b5c23aa4SPaul Cercueil struct function_desc *func;
4007b5c23aa4SPaul Cercueil struct group_desc *grp;
4008b5c23aa4SPaul Cercueil unsigned int i;
4009bb42b593SPaul Cercueil uintptr_t mode;
4010bb42b593SPaul Cercueil u8 *pin_modes;
4011b5c23aa4SPaul Cercueil
4012b5c23aa4SPaul Cercueil func = pinmux_generic_get_function(pctldev, selector);
4013b5c23aa4SPaul Cercueil if (!func)
4014b5c23aa4SPaul Cercueil return -EINVAL;
4015b5c23aa4SPaul Cercueil
4016b5c23aa4SPaul Cercueil grp = pinctrl_generic_get_group(pctldev, group);
4017b5c23aa4SPaul Cercueil if (!grp)
4018b5c23aa4SPaul Cercueil return -EINVAL;
4019b5c23aa4SPaul Cercueil
4020b5c23aa4SPaul Cercueil dev_dbg(pctldev->dev, "enable function %s group %s\n",
4021be9e92afSAndy Shevchenko func->func.name, grp->grp.name);
4022b5c23aa4SPaul Cercueil
4023bb42b593SPaul Cercueil mode = (uintptr_t)grp->data;
4024bb42b593SPaul Cercueil if (mode <= 3) {
402510ce59c6SAndy Shevchenko for (i = 0; i < grp->grp.npins; i++)
402610ce59c6SAndy Shevchenko ingenic_pinmux_set_pin_fn(jzpc, grp->grp.pins[i], mode);
4027bb42b593SPaul Cercueil } else {
4028bb42b593SPaul Cercueil pin_modes = grp->data;
4029b5c23aa4SPaul Cercueil
403010ce59c6SAndy Shevchenko for (i = 0; i < grp->grp.npins; i++)
403110ce59c6SAndy Shevchenko ingenic_pinmux_set_pin_fn(jzpc, grp->grp.pins[i], pin_modes[i]);
4032b5c23aa4SPaul Cercueil }
4033b5c23aa4SPaul Cercueil
4034b5c23aa4SPaul Cercueil return 0;
4035b5c23aa4SPaul Cercueil }
4036b5c23aa4SPaul Cercueil
ingenic_pinmux_gpio_set_direction(struct pinctrl_dev * pctldev,struct pinctrl_gpio_range * range,unsigned int pin,bool input)4037b5c23aa4SPaul Cercueil static int ingenic_pinmux_gpio_set_direction(struct pinctrl_dev *pctldev,
4038b5c23aa4SPaul Cercueil struct pinctrl_gpio_range *range,
4039b5c23aa4SPaul Cercueil unsigned int pin, bool input)
4040b5c23aa4SPaul Cercueil {
4041b5c23aa4SPaul Cercueil struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev);
4042b5c23aa4SPaul Cercueil unsigned int idx = pin % PINS_PER_GPIO_CHIP;
4043b5c23aa4SPaul Cercueil unsigned int offt = pin / PINS_PER_GPIO_CHIP;
4044b5c23aa4SPaul Cercueil
4045b5c23aa4SPaul Cercueil dev_dbg(pctldev->dev, "set pin P%c%u to %sput\n",
4046b5c23aa4SPaul Cercueil 'A' + offt, idx, input ? "in" : "out");
4047b5c23aa4SPaul Cercueil
40488d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_X1000)) {
4049b4aa4876SPaul Cercueil ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_INT, false);
4050fe1ad5eeSZhou Yanjie ingenic_shadow_config_pin(jzpc, pin, GPIO_MSK, true);
4051b4aa4876SPaul Cercueil ingenic_shadow_config_pin(jzpc, pin, JZ4770_GPIO_PAT1, input);
4052fe1ad5eeSZhou Yanjie ingenic_shadow_config_pin_load(jzpc, pin);
40538d2d607cSPaul Cercueil } else if (is_soc_or_above(jzpc, ID_JZ4770)) {
4054b4aa4876SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4770_GPIO_INT, false);
4055e72394e2SPaul Cercueil ingenic_config_pin(jzpc, pin, GPIO_MSK, true);
4056b4aa4876SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PAT1, input);
40578d2d607cSPaul Cercueil } else if (is_soc_or_above(jzpc, ID_JZ4740)) {
4058b5c23aa4SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4740_GPIO_SELECT, false);
40590084a786SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4740_GPIO_DIR, !input);
4060b5c23aa4SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4740_GPIO_FUNC, false);
4061424f3969S周琰杰 (Zhou Yanjie) } else {
4062424f3969S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, JZ4730_GPIO_GPIER, false);
4063424f3969S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, JZ4730_GPIO_GPDIR, !input);
4064424f3969S周琰杰 (Zhou Yanjie) jz4730_config_pin_function(jzpc, pin, JZ4730_GPIO_GPAUR, JZ4730_GPIO_GPALR, 0);
4065b5c23aa4SPaul Cercueil }
4066b5c23aa4SPaul Cercueil
4067b5c23aa4SPaul Cercueil return 0;
4068b5c23aa4SPaul Cercueil }
4069b5c23aa4SPaul Cercueil
40705bf7b849SJulia Lawall static const struct pinmux_ops ingenic_pmxops = {
4071b5c23aa4SPaul Cercueil .get_functions_count = pinmux_generic_get_function_count,
4072b5c23aa4SPaul Cercueil .get_function_name = pinmux_generic_get_function_name,
4073b5c23aa4SPaul Cercueil .get_function_groups = pinmux_generic_get_function_groups,
4074b5c23aa4SPaul Cercueil .set_mux = ingenic_pinmux_set_mux,
4075b5c23aa4SPaul Cercueil .gpio_set_direction = ingenic_pinmux_gpio_set_direction,
4076b5c23aa4SPaul Cercueil };
4077b5c23aa4SPaul Cercueil
ingenic_pinconf_get(struct pinctrl_dev * pctldev,unsigned int pin,unsigned long * config)4078b5c23aa4SPaul Cercueil static int ingenic_pinconf_get(struct pinctrl_dev *pctldev,
4079b5c23aa4SPaul Cercueil unsigned int pin, unsigned long *config)
4080b5c23aa4SPaul Cercueil {
4081b5c23aa4SPaul Cercueil struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev);
4082b5c23aa4SPaul Cercueil enum pin_config_param param = pinconf_to_config_param(*config);
4083b5c23aa4SPaul Cercueil unsigned int idx = pin % PINS_PER_GPIO_CHIP;
4084b5c23aa4SPaul Cercueil unsigned int offt = pin / PINS_PER_GPIO_CHIP;
4085943e0da1S周琰杰 (Zhou Yanjie) unsigned int arg = 1;
4086943e0da1S周琰杰 (Zhou Yanjie) unsigned int bias, reg;
40871d0bd580S周琰杰 (Zhou Yanjie) bool pull, pullup, pulldown;
4088b5c23aa4SPaul Cercueil
40898d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_X2000)) {
4090943e0da1S周琰杰 (Zhou Yanjie) pullup = ingenic_get_pin_config(jzpc, pin, X2000_GPIO_PEPU) &&
4091943e0da1S周琰杰 (Zhou Yanjie) !ingenic_get_pin_config(jzpc, pin, X2000_GPIO_PEPD) &&
4092943e0da1S周琰杰 (Zhou Yanjie) (jzpc->info->pull_ups[offt] & BIT(idx));
4093943e0da1S周琰杰 (Zhou Yanjie) pulldown = ingenic_get_pin_config(jzpc, pin, X2000_GPIO_PEPD) &&
4094943e0da1S周琰杰 (Zhou Yanjie) !ingenic_get_pin_config(jzpc, pin, X2000_GPIO_PEPU) &&
4095943e0da1S周琰杰 (Zhou Yanjie) (jzpc->info->pull_downs[offt] & BIT(idx));
4096943e0da1S周琰杰 (Zhou Yanjie)
40978d2d607cSPaul Cercueil } else if (is_soc_or_above(jzpc, ID_X1830)) {
40981d0bd580S周琰杰 (Zhou Yanjie) unsigned int half = PINS_PER_GPIO_CHIP / 2;
40991d0bd580S周琰杰 (Zhou Yanjie) unsigned int idxh = (pin % half) * 2;
41001d0bd580S周琰杰 (Zhou Yanjie)
41011d0bd580S周琰杰 (Zhou Yanjie) if (idx < half)
41021d0bd580S周琰杰 (Zhou Yanjie) regmap_read(jzpc->map, offt * jzpc->info->reg_offset +
41031d0bd580S周琰杰 (Zhou Yanjie) X1830_GPIO_PEL, &bias);
41041d0bd580S周琰杰 (Zhou Yanjie) else
41051d0bd580S周琰杰 (Zhou Yanjie) regmap_read(jzpc->map, offt * jzpc->info->reg_offset +
41061d0bd580S周琰杰 (Zhou Yanjie) X1830_GPIO_PEH, &bias);
41071d0bd580S周琰杰 (Zhou Yanjie)
41081d0bd580S周琰杰 (Zhou Yanjie) bias = (bias >> idxh) & (GPIO_PULL_UP | GPIO_PULL_DOWN);
41091d0bd580S周琰杰 (Zhou Yanjie)
41101d0bd580S周琰杰 (Zhou Yanjie) pullup = (bias == GPIO_PULL_UP) && (jzpc->info->pull_ups[offt] & BIT(idx));
41111d0bd580S周琰杰 (Zhou Yanjie) pulldown = (bias == GPIO_PULL_DOWN) && (jzpc->info->pull_downs[offt] & BIT(idx));
41121d0bd580S周琰杰 (Zhou Yanjie)
41131d0bd580S周琰杰 (Zhou Yanjie) } else {
41144da56f9cSPaul Boddie if (is_soc_or_above(jzpc, ID_X1600))
41154da56f9cSPaul Boddie pull = ingenic_get_pin_config(jzpc, pin, X1600_GPIO_PU);
41164da56f9cSPaul Boddie else if (is_soc_or_above(jzpc, ID_JZ4770))
4117b4aa4876SPaul Cercueil pull = !ingenic_get_pin_config(jzpc, pin, JZ4770_GPIO_PEN);
41188d2d607cSPaul Cercueil else if (is_soc_or_above(jzpc, ID_JZ4740))
4119b5c23aa4SPaul Cercueil pull = !ingenic_get_pin_config(jzpc, pin, JZ4740_GPIO_PULL_DIS);
4120424f3969S周琰杰 (Zhou Yanjie) else
4121424f3969S周琰杰 (Zhou Yanjie) pull = ingenic_get_pin_config(jzpc, pin, JZ4730_GPIO_GPPUR);
4122b5c23aa4SPaul Cercueil
41231d0bd580S周琰杰 (Zhou Yanjie) pullup = pull && (jzpc->info->pull_ups[offt] & BIT(idx));
41241d0bd580S周琰杰 (Zhou Yanjie) pulldown = pull && (jzpc->info->pull_downs[offt] & BIT(idx));
41251d0bd580S周琰杰 (Zhou Yanjie) }
41261d0bd580S周琰杰 (Zhou Yanjie)
4127b5c23aa4SPaul Cercueil switch (param) {
4128b5c23aa4SPaul Cercueil case PIN_CONFIG_BIAS_DISABLE:
41291d0bd580S周琰杰 (Zhou Yanjie) if (pullup || pulldown)
4130b5c23aa4SPaul Cercueil return -EINVAL;
4131943e0da1S周琰杰 (Zhou Yanjie)
4132b5c23aa4SPaul Cercueil break;
4133b5c23aa4SPaul Cercueil
4134b5c23aa4SPaul Cercueil case PIN_CONFIG_BIAS_PULL_UP:
41351d0bd580S周琰杰 (Zhou Yanjie) if (!pullup)
4136b5c23aa4SPaul Cercueil return -EINVAL;
4137943e0da1S周琰杰 (Zhou Yanjie)
4138b5c23aa4SPaul Cercueil break;
4139b5c23aa4SPaul Cercueil
4140b5c23aa4SPaul Cercueil case PIN_CONFIG_BIAS_PULL_DOWN:
41411d0bd580S周琰杰 (Zhou Yanjie) if (!pulldown)
4142b5c23aa4SPaul Cercueil return -EINVAL;
4143943e0da1S周琰杰 (Zhou Yanjie)
4144943e0da1S周琰杰 (Zhou Yanjie) break;
4145943e0da1S周琰杰 (Zhou Yanjie)
4146943e0da1S周琰杰 (Zhou Yanjie) case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
41478d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_X2000))
4148943e0da1S周琰杰 (Zhou Yanjie) reg = X2000_GPIO_SMT;
41498d2d607cSPaul Cercueil else if (is_soc_or_above(jzpc, ID_X1830))
4150943e0da1S周琰杰 (Zhou Yanjie) reg = X1830_GPIO_SMT;
4151943e0da1S周琰杰 (Zhou Yanjie) else
4152943e0da1S周琰杰 (Zhou Yanjie) return -EINVAL;
4153943e0da1S周琰杰 (Zhou Yanjie)
4154943e0da1S周琰杰 (Zhou Yanjie) arg = !!ingenic_get_pin_config(jzpc, pin, reg);
4155943e0da1S周琰杰 (Zhou Yanjie) break;
4156943e0da1S周琰杰 (Zhou Yanjie)
4157943e0da1S周琰杰 (Zhou Yanjie) case PIN_CONFIG_SLEW_RATE:
41588d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_X2000))
4159943e0da1S周琰杰 (Zhou Yanjie) reg = X2000_GPIO_SR;
41608d2d607cSPaul Cercueil else if (is_soc_or_above(jzpc, ID_X1830))
4161943e0da1S周琰杰 (Zhou Yanjie) reg = X1830_GPIO_SR;
4162943e0da1S周琰杰 (Zhou Yanjie) else
4163943e0da1S周琰杰 (Zhou Yanjie) return -EINVAL;
4164943e0da1S周琰杰 (Zhou Yanjie)
4165943e0da1S周琰杰 (Zhou Yanjie) arg = !!ingenic_get_pin_config(jzpc, pin, reg);
4166b5c23aa4SPaul Cercueil break;
4167b5c23aa4SPaul Cercueil
4168b5c23aa4SPaul Cercueil default:
4169b5c23aa4SPaul Cercueil return -ENOTSUPP;
4170b5c23aa4SPaul Cercueil }
4171b5c23aa4SPaul Cercueil
4172943e0da1S周琰杰 (Zhou Yanjie) *config = pinconf_to_config_packed(param, arg);
4173b5c23aa4SPaul Cercueil return 0;
4174b5c23aa4SPaul Cercueil }
4175b5c23aa4SPaul Cercueil
ingenic_set_bias(struct ingenic_pinctrl * jzpc,unsigned int pin,unsigned int bias)4176b5c23aa4SPaul Cercueil static void ingenic_set_bias(struct ingenic_pinctrl *jzpc,
4177d7da2a1eS周琰杰 (Zhou Yanjie) unsigned int pin, unsigned int bias)
4178b5c23aa4SPaul Cercueil {
41798d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_X2000)) {
4180943e0da1S周琰杰 (Zhou Yanjie) switch (bias) {
41817261851eSPaul Cercueil case GPIO_PULL_UP:
4182943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPD, false);
4183943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPU, true);
4184943e0da1S周琰杰 (Zhou Yanjie) break;
4185943e0da1S周琰杰 (Zhou Yanjie)
41867261851eSPaul Cercueil case GPIO_PULL_DOWN:
4187943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPU, false);
4188943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPD, true);
4189943e0da1S周琰杰 (Zhou Yanjie) break;
4190943e0da1S周琰杰 (Zhou Yanjie)
41917261851eSPaul Cercueil case GPIO_PULL_DIS:
4192943e0da1S周琰杰 (Zhou Yanjie) default:
4193943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPU, false);
4194943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X2000_GPIO_PEPD, false);
4195943e0da1S周琰杰 (Zhou Yanjie) }
4196943e0da1S周琰杰 (Zhou Yanjie)
41978d2d607cSPaul Cercueil } else if (is_soc_or_above(jzpc, ID_X1830)) {
4198d7da2a1eS周琰杰 (Zhou Yanjie) unsigned int idx = pin % PINS_PER_GPIO_CHIP;
4199d7da2a1eS周琰杰 (Zhou Yanjie) unsigned int half = PINS_PER_GPIO_CHIP / 2;
42001d0bd580S周琰杰 (Zhou Yanjie) unsigned int idxh = (pin % half) * 2;
4201d7da2a1eS周琰杰 (Zhou Yanjie) unsigned int offt = pin / PINS_PER_GPIO_CHIP;
4202d7da2a1eS周琰杰 (Zhou Yanjie)
4203d7da2a1eS周琰杰 (Zhou Yanjie) if (idx < half) {
4204d7da2a1eS周琰杰 (Zhou Yanjie) regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
4205d7da2a1eS周琰杰 (Zhou Yanjie) REG_CLEAR(X1830_GPIO_PEL), 3 << idxh);
4206d7da2a1eS周琰杰 (Zhou Yanjie) regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
4207d7da2a1eS周琰杰 (Zhou Yanjie) REG_SET(X1830_GPIO_PEL), bias << idxh);
4208d7da2a1eS周琰杰 (Zhou Yanjie) } else {
4209d7da2a1eS周琰杰 (Zhou Yanjie) regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
4210d7da2a1eS周琰杰 (Zhou Yanjie) REG_CLEAR(X1830_GPIO_PEH), 3 << idxh);
4211d7da2a1eS周琰杰 (Zhou Yanjie) regmap_write(jzpc->map, offt * jzpc->info->reg_offset +
4212d7da2a1eS周琰杰 (Zhou Yanjie) REG_SET(X1830_GPIO_PEH), bias << idxh);
4213d7da2a1eS周琰杰 (Zhou Yanjie) }
4214d7da2a1eS周琰杰 (Zhou Yanjie)
42154da56f9cSPaul Boddie } else if (is_soc_or_above(jzpc, ID_X1600)) {
42164da56f9cSPaul Boddie ingenic_config_pin(jzpc, pin, X1600_GPIO_PU, bias);
42178d2d607cSPaul Cercueil } else if (is_soc_or_above(jzpc, ID_JZ4770)) {
4218b4aa4876SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PEN, !bias);
42198d2d607cSPaul Cercueil } else if (is_soc_or_above(jzpc, ID_JZ4740)) {
4220d7da2a1eS周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, JZ4740_GPIO_PULL_DIS, !bias);
4221424f3969S周琰杰 (Zhou Yanjie) } else {
4222424f3969S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, JZ4730_GPIO_GPPUR, bias);
4223d7da2a1eS周琰杰 (Zhou Yanjie) }
4224b5c23aa4SPaul Cercueil }
4225b5c23aa4SPaul Cercueil
ingenic_set_schmitt_trigger(struct ingenic_pinctrl * jzpc,unsigned int pin,bool enable)4226943e0da1S周琰杰 (Zhou Yanjie) static void ingenic_set_schmitt_trigger(struct ingenic_pinctrl *jzpc,
4227943e0da1S周琰杰 (Zhou Yanjie) unsigned int pin, bool enable)
4228943e0da1S周琰杰 (Zhou Yanjie) {
42298d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_X2000))
4230943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X2000_GPIO_SMT, enable);
4231943e0da1S周琰杰 (Zhou Yanjie) else
4232943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X1830_GPIO_SMT, enable);
4233943e0da1S周琰杰 (Zhou Yanjie) }
4234943e0da1S周琰杰 (Zhou Yanjie)
ingenic_set_output_level(struct ingenic_pinctrl * jzpc,unsigned int pin,bool high)42357009d046SPaul Cercueil static void ingenic_set_output_level(struct ingenic_pinctrl *jzpc,
42367009d046SPaul Cercueil unsigned int pin, bool high)
42377009d046SPaul Cercueil {
42388d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_JZ4770))
4239b4aa4876SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4770_GPIO_PAT0, high);
42408d2d607cSPaul Cercueil else if (is_soc_or_above(jzpc, ID_JZ4740))
42417009d046SPaul Cercueil ingenic_config_pin(jzpc, pin, JZ4740_GPIO_DATA, high);
4242424f3969S周琰杰 (Zhou Yanjie) else
4243424f3969S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, JZ4730_GPIO_DATA, high);
42447009d046SPaul Cercueil }
42457009d046SPaul Cercueil
ingenic_set_slew_rate(struct ingenic_pinctrl * jzpc,unsigned int pin,unsigned int slew)4246943e0da1S周琰杰 (Zhou Yanjie) static void ingenic_set_slew_rate(struct ingenic_pinctrl *jzpc,
4247943e0da1S周琰杰 (Zhou Yanjie) unsigned int pin, unsigned int slew)
4248943e0da1S周琰杰 (Zhou Yanjie) {
42498d2d607cSPaul Cercueil if (is_soc_or_above(jzpc, ID_X2000))
4250943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X2000_GPIO_SR, slew);
4251943e0da1S周琰杰 (Zhou Yanjie) else
4252943e0da1S周琰杰 (Zhou Yanjie) ingenic_config_pin(jzpc, pin, X1830_GPIO_SR, slew);
4253943e0da1S周琰杰 (Zhou Yanjie) }
4254943e0da1S周琰杰 (Zhou Yanjie)
ingenic_pinconf_set(struct pinctrl_dev * pctldev,unsigned int pin,unsigned long * configs,unsigned int num_configs)4255b5c23aa4SPaul Cercueil static int ingenic_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
4256b5c23aa4SPaul Cercueil unsigned long *configs, unsigned int num_configs)
4257b5c23aa4SPaul Cercueil {
4258b5c23aa4SPaul Cercueil struct ingenic_pinctrl *jzpc = pinctrl_dev_get_drvdata(pctldev);
4259b5c23aa4SPaul Cercueil unsigned int idx = pin % PINS_PER_GPIO_CHIP;
4260b5c23aa4SPaul Cercueil unsigned int offt = pin / PINS_PER_GPIO_CHIP;
42617009d046SPaul Cercueil unsigned int cfg, arg;
42627009d046SPaul Cercueil int ret;
4263b5c23aa4SPaul Cercueil
4264b5c23aa4SPaul Cercueil for (cfg = 0; cfg < num_configs; cfg++) {
4265b5c23aa4SPaul Cercueil switch (pinconf_to_config_param(configs[cfg])) {
4266b5c23aa4SPaul Cercueil case PIN_CONFIG_BIAS_DISABLE:
4267b5c23aa4SPaul Cercueil case PIN_CONFIG_BIAS_PULL_UP:
4268b5c23aa4SPaul Cercueil case PIN_CONFIG_BIAS_PULL_DOWN:
4269943e0da1S周琰杰 (Zhou Yanjie) case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
42707009d046SPaul Cercueil case PIN_CONFIG_OUTPUT:
4271943e0da1S周琰杰 (Zhou Yanjie) case PIN_CONFIG_SLEW_RATE:
4272b5c23aa4SPaul Cercueil continue;
4273b5c23aa4SPaul Cercueil default:
4274b5c23aa4SPaul Cercueil return -ENOTSUPP;
4275b5c23aa4SPaul Cercueil }
4276b5c23aa4SPaul Cercueil }
4277b5c23aa4SPaul Cercueil
4278b5c23aa4SPaul Cercueil for (cfg = 0; cfg < num_configs; cfg++) {
42797009d046SPaul Cercueil arg = pinconf_to_config_argument(configs[cfg]);
42807009d046SPaul Cercueil
4281b5c23aa4SPaul Cercueil switch (pinconf_to_config_param(configs[cfg])) {
4282b5c23aa4SPaul Cercueil case PIN_CONFIG_BIAS_DISABLE:
4283b5c23aa4SPaul Cercueil dev_dbg(jzpc->dev, "disable pull-over for pin P%c%u\n",
4284b5c23aa4SPaul Cercueil 'A' + offt, idx);
4285d7da2a1eS周琰杰 (Zhou Yanjie) ingenic_set_bias(jzpc, pin, GPIO_PULL_DIS);
4286b5c23aa4SPaul Cercueil break;
4287b5c23aa4SPaul Cercueil
4288b5c23aa4SPaul Cercueil case PIN_CONFIG_BIAS_PULL_UP:
4289b5c23aa4SPaul Cercueil if (!(jzpc->info->pull_ups[offt] & BIT(idx)))
4290b5c23aa4SPaul Cercueil return -EINVAL;
4291b5c23aa4SPaul Cercueil dev_dbg(jzpc->dev, "set pull-up for pin P%c%u\n",
4292b5c23aa4SPaul Cercueil 'A' + offt, idx);
4293d7da2a1eS周琰杰 (Zhou Yanjie) ingenic_set_bias(jzpc, pin, GPIO_PULL_UP);
4294b5c23aa4SPaul Cercueil break;
4295b5c23aa4SPaul Cercueil
4296b5c23aa4SPaul Cercueil case PIN_CONFIG_BIAS_PULL_DOWN:
4297b5c23aa4SPaul Cercueil if (!(jzpc->info->pull_downs[offt] & BIT(idx)))
4298b5c23aa4SPaul Cercueil return -EINVAL;
4299b5c23aa4SPaul Cercueil dev_dbg(jzpc->dev, "set pull-down for pin P%c%u\n",
4300b5c23aa4SPaul Cercueil 'A' + offt, idx);
4301d7da2a1eS周琰杰 (Zhou Yanjie) ingenic_set_bias(jzpc, pin, GPIO_PULL_DOWN);
4302b5c23aa4SPaul Cercueil break;
4303b5c23aa4SPaul Cercueil
4304943e0da1S周琰杰 (Zhou Yanjie) case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
43058d2d607cSPaul Cercueil if (!is_soc_or_above(jzpc, ID_X1830))
4306943e0da1S周琰杰 (Zhou Yanjie) return -EINVAL;
4307943e0da1S周琰杰 (Zhou Yanjie)
4308943e0da1S周琰杰 (Zhou Yanjie) ingenic_set_schmitt_trigger(jzpc, pin, arg);
4309943e0da1S周琰杰 (Zhou Yanjie) break;
4310943e0da1S周琰杰 (Zhou Yanjie)
43117009d046SPaul Cercueil case PIN_CONFIG_OUTPUT:
4312b679d6c0SBartosz Golaszewski ret = pinctrl_gpio_direction_output(jzpc->gc,
431378329866SBartosz Golaszewski pin - jzpc->gc->base);
43147009d046SPaul Cercueil if (ret)
43157009d046SPaul Cercueil return ret;
43167009d046SPaul Cercueil
43177009d046SPaul Cercueil ingenic_set_output_level(jzpc, pin, arg);
43187009d046SPaul Cercueil break;
43197009d046SPaul Cercueil
4320943e0da1S周琰杰 (Zhou Yanjie) case PIN_CONFIG_SLEW_RATE:
43218d2d607cSPaul Cercueil if (!is_soc_or_above(jzpc, ID_X1830))
4322943e0da1S周琰杰 (Zhou Yanjie) return -EINVAL;
4323943e0da1S周琰杰 (Zhou Yanjie)
4324943e0da1S周琰杰 (Zhou Yanjie) ingenic_set_slew_rate(jzpc, pin, arg);
4325943e0da1S周琰杰 (Zhou Yanjie) break;
4326943e0da1S周琰杰 (Zhou Yanjie)
4327b5c23aa4SPaul Cercueil default:
4328d6d43a92SJosh Poimboeuf /* unreachable */
4329d6d43a92SJosh Poimboeuf break;
4330b5c23aa4SPaul Cercueil }
4331b5c23aa4SPaul Cercueil }
4332b5c23aa4SPaul Cercueil
4333b5c23aa4SPaul Cercueil return 0;
4334b5c23aa4SPaul Cercueil }
4335b5c23aa4SPaul Cercueil
ingenic_pinconf_group_get(struct pinctrl_dev * pctldev,unsigned int group,unsigned long * config)4336b5c23aa4SPaul Cercueil static int ingenic_pinconf_group_get(struct pinctrl_dev *pctldev,
4337b5c23aa4SPaul Cercueil unsigned int group, unsigned long *config)
4338b5c23aa4SPaul Cercueil {
4339b5c23aa4SPaul Cercueil const unsigned int *pins;
4340b5c23aa4SPaul Cercueil unsigned int i, npins, old = 0;
4341b5c23aa4SPaul Cercueil int ret;
4342b5c23aa4SPaul Cercueil
4343b5c23aa4SPaul Cercueil ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
4344b5c23aa4SPaul Cercueil if (ret)
4345b5c23aa4SPaul Cercueil return ret;
4346b5c23aa4SPaul Cercueil
4347b5c23aa4SPaul Cercueil for (i = 0; i < npins; i++) {
4348b5c23aa4SPaul Cercueil if (ingenic_pinconf_get(pctldev, pins[i], config))
4349b5c23aa4SPaul Cercueil return -ENOTSUPP;
4350b5c23aa4SPaul Cercueil
4351b5c23aa4SPaul Cercueil /* configs do not match between two pins */
4352b5c23aa4SPaul Cercueil if (i && (old != *config))
4353b5c23aa4SPaul Cercueil return -ENOTSUPP;
4354b5c23aa4SPaul Cercueil
4355b5c23aa4SPaul Cercueil old = *config;
4356b5c23aa4SPaul Cercueil }
4357b5c23aa4SPaul Cercueil
4358b5c23aa4SPaul Cercueil return 0;
4359b5c23aa4SPaul Cercueil }
4360b5c23aa4SPaul Cercueil
ingenic_pinconf_group_set(struct pinctrl_dev * pctldev,unsigned int group,unsigned long * configs,unsigned int num_configs)4361b5c23aa4SPaul Cercueil static int ingenic_pinconf_group_set(struct pinctrl_dev *pctldev,
4362b5c23aa4SPaul Cercueil unsigned int group, unsigned long *configs,
4363b5c23aa4SPaul Cercueil unsigned int num_configs)
4364b5c23aa4SPaul Cercueil {
4365b5c23aa4SPaul Cercueil const unsigned int *pins;
4366b5c23aa4SPaul Cercueil unsigned int i, npins;
4367b5c23aa4SPaul Cercueil int ret;
4368b5c23aa4SPaul Cercueil
4369b5c23aa4SPaul Cercueil ret = pinctrl_generic_get_group_pins(pctldev, group, &pins, &npins);
4370b5c23aa4SPaul Cercueil if (ret)
4371b5c23aa4SPaul Cercueil return ret;
4372b5c23aa4SPaul Cercueil
4373b5c23aa4SPaul Cercueil for (i = 0; i < npins; i++) {
4374b5c23aa4SPaul Cercueil ret = ingenic_pinconf_set(pctldev,
4375b5c23aa4SPaul Cercueil pins[i], configs, num_configs);
4376b5c23aa4SPaul Cercueil if (ret)
4377b5c23aa4SPaul Cercueil return ret;
4378b5c23aa4SPaul Cercueil }
4379b5c23aa4SPaul Cercueil
4380b5c23aa4SPaul Cercueil return 0;
4381b5c23aa4SPaul Cercueil }
4382b5c23aa4SPaul Cercueil
43835bf7b849SJulia Lawall static const struct pinconf_ops ingenic_confops = {
4384b5c23aa4SPaul Cercueil .is_generic = true,
4385b5c23aa4SPaul Cercueil .pin_config_get = ingenic_pinconf_get,
4386b5c23aa4SPaul Cercueil .pin_config_set = ingenic_pinconf_set,
4387b5c23aa4SPaul Cercueil .pin_config_group_get = ingenic_pinconf_group_get,
4388b5c23aa4SPaul Cercueil .pin_config_group_set = ingenic_pinconf_group_set,
4389b5c23aa4SPaul Cercueil };
4390b5c23aa4SPaul Cercueil
4391b5c23aa4SPaul Cercueil static const struct regmap_config ingenic_pinctrl_regmap_config = {
4392b5c23aa4SPaul Cercueil .reg_bits = 32,
4393b5c23aa4SPaul Cercueil .val_bits = 32,
4394b5c23aa4SPaul Cercueil .reg_stride = 4,
4395b5c23aa4SPaul Cercueil };
4396b5c23aa4SPaul Cercueil
439728c1caafS周琰杰 (Zhou Yanjie) static const struct of_device_id ingenic_gpio_of_matches[] __initconst = {
439828c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,jz4730-gpio" },
439928c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,jz4740-gpio" },
440028c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,jz4725b-gpio" },
440128c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,jz4750-gpio" },
440228c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,jz4755-gpio" },
440328c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,jz4760-gpio" },
440428c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,jz4770-gpio" },
440528c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,jz4775-gpio" },
440628c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,jz4780-gpio" },
440728c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,x1000-gpio" },
44084da56f9cSPaul Boddie { .compatible = "ingenic,x1600-gpio" },
440928c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,x1830-gpio" },
441028c1caafS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,x2000-gpio" },
44112a18211bS周琰杰 (Zhou Yanjie) { .compatible = "ingenic,x2100-gpio" },
4412e72394e2SPaul Cercueil {},
4413e72394e2SPaul Cercueil };
4414e72394e2SPaul Cercueil
ingenic_gpio_probe(struct ingenic_pinctrl * jzpc,struct fwnode_handle * fwnode)4415e72394e2SPaul Cercueil static int __init ingenic_gpio_probe(struct ingenic_pinctrl *jzpc,
44168c943137SAndy Shevchenko struct fwnode_handle *fwnode)
4417e72394e2SPaul Cercueil {
4418e72394e2SPaul Cercueil struct ingenic_gpio_chip *jzgc;
4419e72394e2SPaul Cercueil struct device *dev = jzpc->dev;
4420142b8767SLinus Walleij struct gpio_irq_chip *girq;
4421e72394e2SPaul Cercueil unsigned int bank;
4422e72394e2SPaul Cercueil int err;
4423e72394e2SPaul Cercueil
44248c943137SAndy Shevchenko err = fwnode_property_read_u32(fwnode, "reg", &bank);
4425e72394e2SPaul Cercueil if (err) {
4426e72394e2SPaul Cercueil dev_err(dev, "Cannot read \"reg\" property: %i\n", err);
4427e72394e2SPaul Cercueil return err;
4428e72394e2SPaul Cercueil }
4429e72394e2SPaul Cercueil
4430e72394e2SPaul Cercueil jzgc = devm_kzalloc(dev, sizeof(*jzgc), GFP_KERNEL);
4431e72394e2SPaul Cercueil if (!jzgc)
4432e72394e2SPaul Cercueil return -ENOMEM;
4433e72394e2SPaul Cercueil
443478329866SBartosz Golaszewski jzpc->gc = &jzgc->gc;
443578329866SBartosz Golaszewski
4436e72394e2SPaul Cercueil jzgc->jzpc = jzpc;
4437f742e5ebS周琰杰 (Zhou Yanjie) jzgc->reg_base = bank * jzpc->info->reg_offset;
4438e72394e2SPaul Cercueil
4439e72394e2SPaul Cercueil jzgc->gc.label = devm_kasprintf(dev, GFP_KERNEL, "GPIO%c", 'A' + bank);
4440e72394e2SPaul Cercueil if (!jzgc->gc.label)
4441e72394e2SPaul Cercueil return -ENOMEM;
4442e72394e2SPaul Cercueil
4443e72394e2SPaul Cercueil /* DO NOT EXPAND THIS: FOR BACKWARD GPIO NUMBERSPACE COMPATIBIBILITY
4444e72394e2SPaul Cercueil * ONLY: WORK TO TRANSITION CONSUMERS TO USE THE GPIO DESCRIPTOR API IN
4445e72394e2SPaul Cercueil * <linux/gpio/consumer.h> INSTEAD.
4446e72394e2SPaul Cercueil */
4447e72394e2SPaul Cercueil jzgc->gc.base = bank * 32;
4448e72394e2SPaul Cercueil
4449e72394e2SPaul Cercueil jzgc->gc.ngpio = 32;
4450e72394e2SPaul Cercueil jzgc->gc.parent = dev;
44518c943137SAndy Shevchenko jzgc->gc.fwnode = fwnode;
4452e72394e2SPaul Cercueil jzgc->gc.owner = THIS_MODULE;
4453e72394e2SPaul Cercueil
4454*d9d87d90SBartosz Golaszewski jzgc->gc.set = ingenic_gpio_set;
4455e72394e2SPaul Cercueil jzgc->gc.get = ingenic_gpio_get;
445622c7203dSBartosz Golaszewski jzgc->gc.direction_input = pinctrl_gpio_direction_input;
4457e72394e2SPaul Cercueil jzgc->gc.direction_output = ingenic_gpio_direction_output;
4458ebd66514SPaul Cercueil jzgc->gc.get_direction = ingenic_gpio_get_direction;
4459e72394e2SPaul Cercueil jzgc->gc.request = gpiochip_generic_request;
4460e72394e2SPaul Cercueil jzgc->gc.free = gpiochip_generic_free;
4461e72394e2SPaul Cercueil
44628c943137SAndy Shevchenko err = fwnode_irq_get(fwnode, 0);
44638c943137SAndy Shevchenko if (err < 0)
44648c943137SAndy Shevchenko return err;
44658c943137SAndy Shevchenko if (!err)
4466e72394e2SPaul Cercueil return -EINVAL;
44678c943137SAndy Shevchenko jzgc->irq = err;
4468e72394e2SPaul Cercueil
4469142b8767SLinus Walleij girq = &jzgc->gc.irq;
447071f5e7b3SAidan MacDonald gpio_irq_chip_set_chip(girq, &ingenic_gpio_irqchip);
4471142b8767SLinus Walleij girq->parent_handler = ingenic_gpio_irq_handler;
4472142b8767SLinus Walleij girq->num_parents = 1;
4473142b8767SLinus Walleij girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents),
4474142b8767SLinus Walleij GFP_KERNEL);
4475142b8767SLinus Walleij if (!girq->parents)
4476142b8767SLinus Walleij return -ENOMEM;
4477943e0da1S周琰杰 (Zhou Yanjie)
4478142b8767SLinus Walleij girq->parents[0] = jzgc->irq;
4479142b8767SLinus Walleij girq->default_type = IRQ_TYPE_NONE;
4480142b8767SLinus Walleij girq->handler = handle_level_irq;
4481142b8767SLinus Walleij
4482142b8767SLinus Walleij err = devm_gpiochip_add_data(dev, &jzgc->gc, jzgc);
4483e72394e2SPaul Cercueil if (err)
4484e72394e2SPaul Cercueil return err;
4485e72394e2SPaul Cercueil
4486e72394e2SPaul Cercueil return 0;
4487e72394e2SPaul Cercueil }
4488e72394e2SPaul Cercueil
ingenic_pinctrl_probe(struct platform_device * pdev)44894717b11fSPaul Cercueil static int __init ingenic_pinctrl_probe(struct platform_device *pdev)
4490b5c23aa4SPaul Cercueil {
4491b5c23aa4SPaul Cercueil struct device *dev = &pdev->dev;
4492b5c23aa4SPaul Cercueil struct ingenic_pinctrl *jzpc;
4493b5c23aa4SPaul Cercueil struct pinctrl_desc *pctl_desc;
4494b5c23aa4SPaul Cercueil void __iomem *base;
4495b5c23aa4SPaul Cercueil const struct ingenic_chip_info *chip_info;
44966626a76eSPaul Cercueil struct regmap_config regmap_config;
44978c943137SAndy Shevchenko struct fwnode_handle *fwnode;
4498b5c23aa4SPaul Cercueil unsigned int i;
4499b5c23aa4SPaul Cercueil int err;
4500b5c23aa4SPaul Cercueil
45018c943137SAndy Shevchenko chip_info = device_get_match_data(dev);
45029aa35178SPaul Cercueil if (!chip_info) {
45039aa35178SPaul Cercueil dev_err(dev, "Unsupported SoC\n");
45049aa35178SPaul Cercueil return -EINVAL;
45059aa35178SPaul Cercueil }
45069aa35178SPaul Cercueil
4507b5c23aa4SPaul Cercueil jzpc = devm_kzalloc(dev, sizeof(*jzpc), GFP_KERNEL);
4508b5c23aa4SPaul Cercueil if (!jzpc)
4509b5c23aa4SPaul Cercueil return -ENOMEM;
4510b5c23aa4SPaul Cercueil
451194f7a2cbSPaul Cercueil base = devm_platform_ioremap_resource(pdev, 0);
4512119fcf47SWei Yongjun if (IS_ERR(base))
4513b5c23aa4SPaul Cercueil return PTR_ERR(base);
4514b5c23aa4SPaul Cercueil
45156626a76eSPaul Cercueil regmap_config = ingenic_pinctrl_regmap_config;
45169279c00fSAidan MacDonald if (chip_info->access_table) {
45179279c00fSAidan MacDonald regmap_config.rd_table = chip_info->access_table;
45189279c00fSAidan MacDonald regmap_config.wr_table = chip_info->access_table;
45199279c00fSAidan MacDonald } else {
45209279c00fSAidan MacDonald regmap_config.max_register = chip_info->num_chips * chip_info->reg_offset - 4;
45219279c00fSAidan MacDonald }
45226626a76eSPaul Cercueil
45236626a76eSPaul Cercueil jzpc->map = devm_regmap_init_mmio(dev, base, ®map_config);
4524b5c23aa4SPaul Cercueil if (IS_ERR(jzpc->map)) {
4525b5c23aa4SPaul Cercueil dev_err(dev, "Failed to create regmap\n");
4526b5c23aa4SPaul Cercueil return PTR_ERR(jzpc->map);
4527b5c23aa4SPaul Cercueil }
4528b5c23aa4SPaul Cercueil
4529b5c23aa4SPaul Cercueil jzpc->dev = dev;
45309aa35178SPaul Cercueil jzpc->info = chip_info;
4531b5c23aa4SPaul Cercueil
4532b5c23aa4SPaul Cercueil pctl_desc = devm_kzalloc(&pdev->dev, sizeof(*pctl_desc), GFP_KERNEL);
4533b5c23aa4SPaul Cercueil if (!pctl_desc)
4534b5c23aa4SPaul Cercueil return -ENOMEM;
4535b5c23aa4SPaul Cercueil
4536b5c23aa4SPaul Cercueil /* fill in pinctrl_desc structure */
4537b5c23aa4SPaul Cercueil pctl_desc->name = dev_name(dev);
4538b5c23aa4SPaul Cercueil pctl_desc->owner = THIS_MODULE;
4539b5c23aa4SPaul Cercueil pctl_desc->pctlops = &ingenic_pctlops;
4540b5c23aa4SPaul Cercueil pctl_desc->pmxops = &ingenic_pmxops;
4541b5c23aa4SPaul Cercueil pctl_desc->confops = &ingenic_confops;
4542b5c23aa4SPaul Cercueil pctl_desc->npins = chip_info->num_chips * PINS_PER_GPIO_CHIP;
4543a86854d0SKees Cook pctl_desc->pins = jzpc->pdesc = devm_kcalloc(&pdev->dev,
4544a86854d0SKees Cook pctl_desc->npins, sizeof(*jzpc->pdesc), GFP_KERNEL);
4545b5c23aa4SPaul Cercueil if (!jzpc->pdesc)
4546b5c23aa4SPaul Cercueil return -ENOMEM;
4547b5c23aa4SPaul Cercueil
4548b5c23aa4SPaul Cercueil for (i = 0; i < pctl_desc->npins; i++) {
4549b5c23aa4SPaul Cercueil jzpc->pdesc[i].number = i;
4550b5c23aa4SPaul Cercueil jzpc->pdesc[i].name = kasprintf(GFP_KERNEL, "P%c%d",
4551b5c23aa4SPaul Cercueil 'A' + (i / PINS_PER_GPIO_CHIP),
4552b5c23aa4SPaul Cercueil i % PINS_PER_GPIO_CHIP);
4553b5c23aa4SPaul Cercueil }
4554b5c23aa4SPaul Cercueil
4555b5c23aa4SPaul Cercueil jzpc->pctl = devm_pinctrl_register(dev, pctl_desc, jzpc);
4556e7f4c4bfSDan Carpenter if (IS_ERR(jzpc->pctl)) {
4557b5c23aa4SPaul Cercueil dev_err(dev, "Failed to register pinctrl\n");
4558e7f4c4bfSDan Carpenter return PTR_ERR(jzpc->pctl);
4559b5c23aa4SPaul Cercueil }
4560b5c23aa4SPaul Cercueil
4561b5c23aa4SPaul Cercueil for (i = 0; i < chip_info->num_groups; i++) {
4562b5c23aa4SPaul Cercueil const struct group_desc *group = &chip_info->groups[i];
456310ce59c6SAndy Shevchenko const struct pingroup *grp = &group->grp;
4564b5c23aa4SPaul Cercueil
456510ce59c6SAndy Shevchenko err = pinctrl_generic_add_group(jzpc->pctl, grp->name, grp->pins, grp->npins,
456610ce59c6SAndy Shevchenko group->data);
4567823dd71fSPaul Burton if (err < 0) {
456810ce59c6SAndy Shevchenko dev_err(dev, "Failed to register group %s\n", grp->name);
4569b5c23aa4SPaul Cercueil return err;
4570b5c23aa4SPaul Cercueil }
4571b5c23aa4SPaul Cercueil }
4572b5c23aa4SPaul Cercueil
4573b5c23aa4SPaul Cercueil for (i = 0; i < chip_info->num_functions; i++) {
4574be9e92afSAndy Shevchenko const struct function_desc *function = &chip_info->functions[i];
4575be9e92afSAndy Shevchenko const struct pinfunction *func = &function->func;
4576b5c23aa4SPaul Cercueil
45770bbd90c2SBartosz Golaszewski err = pinmux_generic_add_pinfunction(jzpc->pctl, func,
4578be9e92afSAndy Shevchenko function->data);
4579823dd71fSPaul Burton if (err < 0) {
4580be9e92afSAndy Shevchenko dev_err(dev, "Failed to register function %s\n", func->name);
4581b5c23aa4SPaul Cercueil return err;
4582b5c23aa4SPaul Cercueil }
4583b5c23aa4SPaul Cercueil }
4584b5c23aa4SPaul Cercueil
4585b5c23aa4SPaul Cercueil dev_set_drvdata(dev, jzpc->map);
4586b5c23aa4SPaul Cercueil
45878c943137SAndy Shevchenko device_for_each_child_node(dev, fwnode) {
45888c943137SAndy Shevchenko if (of_match_node(ingenic_gpio_of_matches, to_of_node(fwnode))) {
45898c943137SAndy Shevchenko err = ingenic_gpio_probe(jzpc, fwnode);
4590d2cd54c2SYang Li if (err) {
45918c943137SAndy Shevchenko fwnode_handle_put(fwnode);
4592b5c23aa4SPaul Cercueil return err;
4593b5c23aa4SPaul Cercueil }
4594b5c23aa4SPaul Cercueil }
4595d2cd54c2SYang Li }
4596b5c23aa4SPaul Cercueil
4597b5c23aa4SPaul Cercueil return 0;
4598b5c23aa4SPaul Cercueil }
4599b5c23aa4SPaul Cercueil
46000ab1438bSMasahiro Yamada #define IF_ENABLED(cfg, ptr) PTR_IF(IS_ENABLED(cfg), (ptr))
46010ab1438bSMasahiro Yamada
460228c1caafS周琰杰 (Zhou Yanjie) static const struct of_device_id ingenic_pinctrl_of_matches[] = {
46039aa35178SPaul Cercueil {
4604424f3969S周琰杰 (Zhou Yanjie) .compatible = "ingenic,jz4730-pinctrl",
4605424f3969S周琰杰 (Zhou Yanjie) .data = IF_ENABLED(CONFIG_MACH_JZ4730, &jz4730_chip_info)
4606424f3969S周琰杰 (Zhou Yanjie) },
4607424f3969S周琰杰 (Zhou Yanjie) {
46089aa35178SPaul Cercueil .compatible = "ingenic,jz4740-pinctrl",
46099aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_JZ4740, &jz4740_chip_info)
46109aa35178SPaul Cercueil },
46119aa35178SPaul Cercueil {
46129aa35178SPaul Cercueil .compatible = "ingenic,jz4725b-pinctrl",
46139aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_JZ4725B, &jz4725b_chip_info)
46149aa35178SPaul Cercueil },
46159aa35178SPaul Cercueil {
4616215c81a3S周琰杰 (Zhou Yanjie) .compatible = "ingenic,jz4750-pinctrl",
4617215c81a3S周琰杰 (Zhou Yanjie) .data = IF_ENABLED(CONFIG_MACH_JZ4750, &jz4750_chip_info)
4618215c81a3S周琰杰 (Zhou Yanjie) },
4619b582b5a4S周琰杰 (Zhou Yanjie) {
4620b582b5a4S周琰杰 (Zhou Yanjie) .compatible = "ingenic,jz4755-pinctrl",
4621b582b5a4S周琰杰 (Zhou Yanjie) .data = IF_ENABLED(CONFIG_MACH_JZ4755, &jz4755_chip_info)
4622b582b5a4S周琰杰 (Zhou Yanjie) },
4623b582b5a4S周琰杰 (Zhou Yanjie) {
46249aa35178SPaul Cercueil .compatible = "ingenic,jz4760-pinctrl",
46259aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_JZ4760, &jz4760_chip_info)
46269aa35178SPaul Cercueil },
46279aa35178SPaul Cercueil {
46289aa35178SPaul Cercueil .compatible = "ingenic,jz4760b-pinctrl",
46299aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_JZ4760, &jz4760_chip_info)
46309aa35178SPaul Cercueil },
46319aa35178SPaul Cercueil {
46329aa35178SPaul Cercueil .compatible = "ingenic,jz4770-pinctrl",
46339aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_JZ4770, &jz4770_chip_info)
46349aa35178SPaul Cercueil },
46359aa35178SPaul Cercueil {
46360c990740S周琰杰 (Zhou Yanjie) .compatible = "ingenic,jz4775-pinctrl",
46370c990740S周琰杰 (Zhou Yanjie) .data = IF_ENABLED(CONFIG_MACH_JZ4775, &jz4775_chip_info)
46380c990740S周琰杰 (Zhou Yanjie) },
46390c990740S周琰杰 (Zhou Yanjie) {
46409aa35178SPaul Cercueil .compatible = "ingenic,jz4780-pinctrl",
46419aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_JZ4780, &jz4780_chip_info)
46429aa35178SPaul Cercueil },
46439aa35178SPaul Cercueil {
46449aa35178SPaul Cercueil .compatible = "ingenic,x1000-pinctrl",
46459aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_X1000, &x1000_chip_info)
46469aa35178SPaul Cercueil },
46479aa35178SPaul Cercueil {
46489aa35178SPaul Cercueil .compatible = "ingenic,x1000e-pinctrl",
46499aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_X1000, &x1000_chip_info)
46509aa35178SPaul Cercueil },
46519aa35178SPaul Cercueil {
46529aa35178SPaul Cercueil .compatible = "ingenic,x1500-pinctrl",
46539aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_X1500, &x1500_chip_info)
46549aa35178SPaul Cercueil },
46559aa35178SPaul Cercueil {
46564da56f9cSPaul Boddie .compatible = "ingenic,x1600-pinctrl",
46574da56f9cSPaul Boddie .data = IF_ENABLED(CONFIG_MACH_X1600, &x1600_chip_info)
46584da56f9cSPaul Boddie },
46594da56f9cSPaul Boddie {
46609aa35178SPaul Cercueil .compatible = "ingenic,x1830-pinctrl",
46619aa35178SPaul Cercueil .data = IF_ENABLED(CONFIG_MACH_X1830, &x1830_chip_info)
46629aa35178SPaul Cercueil },
4663943e0da1S周琰杰 (Zhou Yanjie) {
4664943e0da1S周琰杰 (Zhou Yanjie) .compatible = "ingenic,x2000-pinctrl",
4665943e0da1S周琰杰 (Zhou Yanjie) .data = IF_ENABLED(CONFIG_MACH_X2000, &x2000_chip_info)
4666943e0da1S周琰杰 (Zhou Yanjie) },
4667943e0da1S周琰杰 (Zhou Yanjie) {
4668943e0da1S周琰杰 (Zhou Yanjie) .compatible = "ingenic,x2000e-pinctrl",
4669943e0da1S周琰杰 (Zhou Yanjie) .data = IF_ENABLED(CONFIG_MACH_X2000, &x2000_chip_info)
4670943e0da1S周琰杰 (Zhou Yanjie) },
46712a18211bS周琰杰 (Zhou Yanjie) {
46722a18211bS周琰杰 (Zhou Yanjie) .compatible = "ingenic,x2100-pinctrl",
46732a18211bS周琰杰 (Zhou Yanjie) .data = IF_ENABLED(CONFIG_MACH_X2100, &x2100_chip_info)
46742a18211bS周琰杰 (Zhou Yanjie) },
46759aa35178SPaul Cercueil { /* sentinel */ },
4676baf15647SPaul Cercueil };
4677baf15647SPaul Cercueil
4678b5c23aa4SPaul Cercueil static struct platform_driver ingenic_pinctrl_driver = {
4679b5c23aa4SPaul Cercueil .driver = {
4680b5c23aa4SPaul Cercueil .name = "pinctrl-ingenic",
468128c1caafS周琰杰 (Zhou Yanjie) .of_match_table = ingenic_pinctrl_of_matches,
4682b5c23aa4SPaul Cercueil },
4683b5c23aa4SPaul Cercueil };
4684b5c23aa4SPaul Cercueil
ingenic_pinctrl_drv_register(void)4685b5c23aa4SPaul Cercueil static int __init ingenic_pinctrl_drv_register(void)
4686b5c23aa4SPaul Cercueil {
46874717b11fSPaul Cercueil return platform_driver_probe(&ingenic_pinctrl_driver,
46884717b11fSPaul Cercueil ingenic_pinctrl_probe);
4689b5c23aa4SPaul Cercueil }
4690556a36a7SPaul Cercueil subsys_initcall(ingenic_pinctrl_drv_register);
4691