1 /*
2  * SPDX-FileCopyrightText: 2018-2022 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include "soc/gpio_periph.h"
8 #include "esp_attr.h"
9 
10 const uint32_t GPIO_PIN_MUX_REG[] = {
11     IO_MUX_GPIO0_REG,
12     IO_MUX_GPIO1_REG,
13     IO_MUX_GPIO2_REG,
14     IO_MUX_GPIO3_REG,
15     IO_MUX_GPIO4_REG,
16     IO_MUX_GPIO5_REG,
17     IO_MUX_GPIO6_REG,
18     IO_MUX_GPIO7_REG,
19     IO_MUX_GPIO8_REG,
20     IO_MUX_GPIO9_REG,
21     IO_MUX_GPIO10_REG,
22     IO_MUX_GPIO11_REG,
23     IO_MUX_GPIO12_REG,
24     IO_MUX_GPIO13_REG,
25     IO_MUX_GPIO14_REG,
26     IO_MUX_GPIO15_REG,
27     IO_MUX_GPIO16_REG,
28     IO_MUX_GPIO17_REG,
29     IO_MUX_GPIO18_REG,
30     IO_MUX_GPIO19_REG,
31     IO_MUX_GPIO20_REG, // This corresponding pin is only available on ESP32-PICO-V3 chip package
32     IO_MUX_GPIO21_REG,
33     IO_MUX_GPIO22_REG,
34     IO_MUX_GPIO23_REG,
35     0,
36     IO_MUX_GPIO25_REG,
37     IO_MUX_GPIO26_REG,
38     IO_MUX_GPIO27_REG,
39     0,
40     0,
41     0,
42     0,
43     IO_MUX_GPIO32_REG,
44     IO_MUX_GPIO33_REG,
45     IO_MUX_GPIO34_REG,
46     IO_MUX_GPIO35_REG,
47     IO_MUX_GPIO36_REG,
48     IO_MUX_GPIO37_REG,
49     IO_MUX_GPIO38_REG,
50     IO_MUX_GPIO39_REG,
51 };
52 
53 DRAM_ATTR const uint8_t GPIO_PIN_MUX_REG_OFFSET[] = {
54     0x44,
55     0x88,
56     0x40,
57     0x84,
58     0x48,
59     0x6c,
60     0x60,
61     0x64,
62     0x68,
63     0x54,
64     0x58,
65     0x5c,
66     0x34,
67     0x38,
68     0x30,
69     0x3c,
70     0x4c,
71     0x50,
72     0x70,
73     0x74,
74     0x78,
75     0x7c,
76     0x80,
77     0x8c,
78     0xFF, // 24
79     0x24,
80     0x28,
81     0x2c,
82     0xFF, // 28
83     0xFF, // 29
84     0xFF, // 30
85     0xFF, // 31
86     0x1c,
87     0x20,
88     0x14,
89     0x18,
90     0x04,
91     0x08,
92     0x0c,
93     0x10,
94 };
95 
96 _Static_assert(sizeof(GPIO_PIN_MUX_REG) == SOC_GPIO_PIN_COUNT * sizeof(uint32_t), "Invalid size of GPIO_PIN_MUX_REG");
97 
98 const uint32_t GPIO_HOLD_MASK[] = {
99     0,
100     BIT(1),
101     0,
102     BIT(0),
103     0,
104     BIT(8),
105     BIT(2),
106     BIT(3),
107     BIT(4),
108     BIT(5),
109     BIT(6),
110     BIT(7),
111     0,
112     0,
113     0,
114     0,
115     BIT(9),
116     BIT(10),
117     BIT(11),
118     BIT(12),
119     0,
120     BIT(14),
121     BIT(15),
122     BIT(16),
123     0,
124     0,
125     0,
126     0,
127     0,
128     0,
129     0,
130     0,
131     0,
132     0,
133     0,
134     0,
135     0,
136     0,
137     0,
138     0,
139 };
140 
141 _Static_assert(sizeof(GPIO_HOLD_MASK) == SOC_GPIO_PIN_COUNT * sizeof(uint32_t), "Invalid size of GPIO_HOLD_MASK");
142