@@ -44,198 +44,128 @@ struct Gpio __code WLAN_EN = GPIO(J, 2);
4444struct Gpio __code WLAN_PWR_EN = GPIO (B , 0 );
4545// uncrustify:on
4646
47+ struct reg_init {
48+ volatile uint8_t __xdata * reg ;
49+ uint8_t data ;
50+ };
51+
52+ static const struct reg_init __code gpio_cfg_init [] = {
53+ // General control
54+ { & GCR , 0x04 }, // Enable LPC reset on GPD2
55+
56+ // Port data
57+ { & GPDRA , BIT (3 ) }, // SYS_FAN
58+ { & GPDRB , 0 },
59+ { & GPDRC , 0 },
60+ { & GPDRD , BIT (5 ) | BIT (4 ) | BIT (3 ) }, // PWR_BTN#, SCI#, SMI#
61+ { & GPDRE , 0 },
62+ { & GPDRF , BIT (6 ) }, // H_PECI
63+ { & GPDRG , BIT (6 ) }, // AIRPLAN_LED#
64+ { & GPDRH , 0 },
65+ { & GPDRI , 0 },
66+ { & GPDRJ , BIT (5 ) | BIT (4 ) | BIT (3 ) | BIT (1 ) }, // LED_CAP#, LED_NUM#, LED_SCROLL#, KBC_MUTE#
67+
68+ // Port control
69+ { & GPCRA0 , GPIO_ALT }, // EC_PWM_LEDKB_P
70+ { & GPCRA1 , GPIO_ALT }, // KBC_BEEP
71+ { & GPCRA2 , GPIO_ALT }, // CPU_FAN
72+ { & GPCRA3 , GPIO_OUT | GPIO_UP }, // TODO: SYS_FAN
73+ { & GPCRA4 , GPIO_ALT }, // VGA_FAN
74+ { & GPCRA5 , GPIO_ALT }, // EC_PWM_LEDKB_R
75+ { & GPCRA6 , GPIO_ALT }, // EC_PWM_LEDKB_G
76+ { & GPCRA7 , GPIO_ALT }, // EC_PWM_LEDKB_B
77+
78+ { & GPCRB0 , GPIO_OUT | GPIO_UP }, // WLAN_PWR_EN
79+ { & GPCRB1 , GPIO_OUT | GPIO_UP }, // H_PROCHOT_EC
80+ { & GPCRB2 , GPIO_IN | GPIO_UP }, // LAN_WAKEUP#
81+ { & GPCRB3 , GPIO_ALT }, // SMC_BAT
82+ { & GPCRB4 , GPIO_ALT }, // SMD_BAT
83+ { & GPCRB5 , GPIO_OUT | GPIO_UP }, // SUSBC_EN#
84+ { & GPCRB6 , GPIO_IN | GPIO_UP }, // AC_IN#
85+ { & GPCRB7 , GPIO_IN | GPIO_UP }, // PERKB-DET#
86+
87+ { & GPCRC0 , GPIO_IN }, // ALL_SYS_PWRGD
88+ { & GPCRC1 , GPIO_OUT }, // SMC_VGA_THERM
89+ { & GPCRC2 , GPIO_OUT }, // SMD_VGA_THERM
90+ { & GPCRC3 , GPIO_ALT | GPIO_UP }, // KB-SO16
91+ { & GPCRC4 , GPIO_IN | GPIO_UP }, // CNVI_DET#_EC
92+ { & GPCRC5 , GPIO_ALT | GPIO_UP }, // KB-SO17
93+ { & GPCRC6 , GPIO_OUT }, // PM_PWROK
94+ { & GPCRC7 , GPIO_OUT | GPIO_UP }, // LED_ACIN
95+
96+ { & GPCRD0 , GPIO_IN | GPIO_UP }, // PWR_SW#
97+ { & GPCRD1 , GPIO_IN | GPIO_UP }, // LID_SW#
98+ { & GPCRD2 , GPIO_ALT }, // BUF_PLT_RST#
99+ { & GPCRD3 , GPIO_IN }, // SMI#
100+ { & GPCRD4 , GPIO_IN }, // SCI#
101+ { & GPCRD5 , GPIO_OUT | GPIO_UP }, // PWR_BTN#
102+ { & GPCRD6 , GPIO_ALT }, // CPU_FANSEN
103+ { & GPCRD7 , GPIO_ALT }, // ALL_FANSEN
104+
105+ { & GPCRE0 , GPIO_OUT | GPIO_UP }, // SWI#
106+ { & GPCRE1 , GPIO_IN }, // OVERT#
107+ { & GPCRE2 , GPIO_IN | GPIO_UP }, // RGBKB-DET#
108+ { & GPCRE3 , GPIO_IN }, // DGPU_PWR_EN
109+ { & GPCRE4 , GPIO_OUT | GPIO_DOWN }, // DD_ON
110+ { & GPCRE5 , GPIO_OUT }, // EC_RSMRST#
111+ { & GPCRE6 , GPIO_OUT | GPIO_UP }, // SB_KBCRST#
112+ { & GPCRE7 , GPIO_OUT | GPIO_UP }, // AC_PRESENT
113+
114+ { & GPCRF0 , GPIO_IN }, // 80CLK
115+ { & GPCRF1 , GPIO_OUT | GPIO_UP }, // USB_CHARGE_EN
116+ { & GPCRF2 , GPIO_IN | GPIO_UP }, // 3IN1
117+ { & GPCRF3 , GPIO_OUT | GPIO_UP }, // BT_EN
118+ { & GPCRF4 , GPIO_ALT }, // TP_CLK
119+ { & GPCRF5 , GPIO_ALT }, // TP_DATA
120+ { & GPCRF6 , GPIO_ALT }, // H_PECI
121+ { & GPCRF7 , GPIO_OUT | GPIO_UP }, // USB_PWR_EN#
122+
123+ { & GPCRG0 , GPIO_OUT | GPIO_UP }, // CCD_EN
124+ { & GPCRG1 , GPIO_IN }, // GC6_FB_EN_PCH
125+ { & GPCRG2 , GPIO_OUT }, // AUTO_LOAD
126+ { & GPCRG3 , GPIO_ALT }, // ALSPI_CE#
127+ { & GPCRG4 , GPIO_ALT }, // ALSPI_MSI
128+ { & GPCRG5 , GPIO_ALT }, // ALSPI_MSO
129+ { & GPCRG6 , GPIO_OUT | GPIO_UP }, // AIRPLAN_LED#
130+ { & GPCRG7 , GPIO_ALT }, // ALSPI_SCLK
131+
132+ { & GPCRH0 , GPIO_IN }, // ECCLKRUN#
133+ { & GPCRH1 , GPIO_IN }, // SUSC#_PCH
134+ { & GPCRH2 , GPIO_OUT | GPIO_UP }, // BKL_EN
135+ { & GPCRH3 , GPIO_OUT | GPIO_UP }, // LED_BAT_CHG
136+ { & GPCRH4 , GPIO_OUT | GPIO_UP }, // LED_BAT_FULL
137+ { & GPCRH5 , GPIO_OUT | GPIO_UP }, // LED_PWR
138+ { & GPCRH6 , GPIO_IN }, // SUSB#_PCH
139+
140+ { & GPCRI0 , GPIO_ALT }, // BAT_DET
141+ { & GPCRI1 , GPIO_ALT }, // BAT_VOLT
142+ { & GPCRI2 , GPIO_OUT }, // ME_WE
143+ { & GPCRI3 , GPIO_ALT }, // THERM_VOLT
144+ { & GPCRI4 , GPIO_ALT }, // TOTAL_CUR
145+ { & GPCRI5 , GPIO_IN }, // MPS_ID
146+ { & GPCRI6 , GPIO_OUT }, // FANSEN_SEL (L:VGA H:SYS)
147+ { & GPCRI7 , GPIO_IN }, // MODEL_ID
148+
149+ { & GPCRJ0 , GPIO_OUT }, // SLP_SUS_EC#
150+ { & GPCRJ1 , GPIO_OUT }, // KBC_MUTE#
151+ { & GPCRJ2 , GPIO_OUT | GPIO_UP }, // WLAN_EN
152+ { & GPCRJ3 , GPIO_OUT | GPIO_UP }, // LED_SCROLL#
153+ { & GPCRJ4 , GPIO_OUT | GPIO_UP }, // LED_NUM#
154+ { & GPCRJ5 , GPIO_OUT | GPIO_UP }, // LED_CAP#
155+ { & GPCRJ6 , GPIO_OUT | GPIO_UP }, // POWER_IC_EN
156+ { & GPCRJ7 , GPIO_OUT }, // VBATT_BOOST#
157+
158+ { & GPCRM0 , GPIO_ALT }, // LPC_AD0
159+ { & GPCRM1 , GPIO_ALT }, // LPC_AD1
160+ { & GPCRM2 , GPIO_ALT }, // LPC_AD2
161+ { & GPCRM3 , GPIO_ALT }, // LPC_AD3
162+ { & GPCRM4 , GPIO_ALT }, // PCLK_KBC
163+ { & GPCRM5 , GPIO_ALT }, // LPC_FRAME#
164+ { & GPCRM6 , GPIO_ALT }, // SERIRQ
165+ };
166+
47167void gpio_init (void ) {
48- // Enable LPC reset on GPD2
49- GCR = 0x04 ;
50-
51- // Set GPIO data
52- // SYS_FAN
53- GPDRA = BIT (3 );
54- GPDRB = 0x00 ;
55- GPDRC = 0x00 ;
56- // PWR_BTN#, SCI#, SMI#
57- GPDRD = BIT (5 ) | BIT (4 ) | BIT (3 );
58- GPDRE = 0x00 ;
59- // H_PECI
60- GPDRF = BIT (6 );
61- // AIRPLAN_LED#
62- GPDRG = BIT (6 );
63- GPDRH = 0x00 ;
64- GPDRI = 0x00 ;
65- // LED_CAP#, LED_NUM#, LED_SCROLL#, KBC_MUTE#
66- GPDRJ = BIT (5 ) | BIT (4 ) | BIT (3 ) | BIT (1 );
67-
68- // Set GPIO control
69- // EC_PWM_LEDKB_P
70- GPCRA0 = GPIO_ALT ;
71- // KBC_BEEP
72- GPCRA1 = GPIO_ALT ;
73- // CPU_FAN
74- GPCRA2 = GPIO_ALT ;
75- // SYS_FAN TODO
76- GPCRA3 = GPIO_OUT | GPIO_UP ;
77- // VGA_FAN
78- GPCRA4 = GPIO_ALT ;
79- // EC_PWM_LEDKB_R
80- GPCRA5 = GPIO_ALT ;
81- // EC_PWM_LEDKB_G
82- GPCRA6 = GPIO_ALT ;
83- // EC_PWM_LEDKB_B
84- GPCRA7 = GPIO_ALT ;
85- // WLAN_PWR_EN
86- GPCRB0 = GPIO_OUT | GPIO_UP ;
87- // H_PROCHOT_EC
88- GPCRB1 = GPIO_OUT | GPIO_UP ;
89- // LAN_WAKEUP#
90- GPCRB2 = GPIO_IN | GPIO_UP ;
91- // SMC_BAT
92- GPCRB3 = GPIO_ALT ;
93- // SMD_BAT
94- GPCRB4 = GPIO_ALT ;
95- // SUSBC_EN#
96- GPCRB5 = GPIO_OUT | GPIO_UP ;
97- // AC_IN#
98- GPCRB6 = GPIO_IN | GPIO_UP ;
99- // PERKB-DET#
100- GPCRB7 = GPIO_IN | GPIO_UP ;
101- // ALL_SYS_PWRGD
102- GPCRC0 = GPIO_IN ;
103- // SMC_VGA_THERM
104- GPCRC1 = GPIO_OUT ;
105- // SMD_VGA_THERM
106- GPCRC2 = GPIO_OUT ;
107- // KB-SO16
108- GPCRC3 = GPIO_ALT | GPIO_UP ;
109- // CNVI_DET#_EC
110- GPCRC4 = GPIO_IN | GPIO_UP ;
111- // KB-SO17
112- GPCRC5 = GPIO_ALT | GPIO_UP ;
113- // PM_PWROK
114- GPCRC6 = GPIO_OUT ;
115- // LED_ACIN
116- GPCRC7 = GPIO_OUT | GPIO_UP ;
117- // PWR_SW#
118- GPCRD0 = GPIO_IN | GPIO_UP ;
119- // LID_SW#
120- GPCRD1 = GPIO_IN | GPIO_UP ;
121- // BUF_PLT_RST#
122- GPCRD2 = GPIO_ALT ;
123- // SMI#
124- GPCRD3 = GPIO_IN ;
125- // SCI#
126- GPCRD4 = GPIO_IN ;
127- // PWR_BTN#
128- GPCRD5 = GPIO_OUT | GPIO_UP ;
129- // CPU_FANSEN
130- GPCRD6 = GPIO_ALT ;
131- // ALL_FANSEN
132- GPCRD7 = GPIO_ALT ;
133- // SWI#
134- GPCRE0 = GPIO_OUT | GPIO_UP ;
135- // OVERT#
136- GPCRE1 = GPIO_IN ;
137- // RGBKB-DET#
138- GPCRE2 = GPIO_IN | GPIO_UP ;
139- // DGPU_PWR_EN
140- GPCRE3 = GPIO_IN ;
141- // DD_ON
142- GPCRE4 = GPIO_OUT | GPIO_DOWN ;
143- // EC_RSMRST#
144- GPCRE5 = GPIO_OUT ;
145- // SB_KBCRST#
146- GPCRE6 = GPIO_OUT | GPIO_UP ;
147- // AC_PRESENT
148- GPCRE7 = GPIO_OUT | GPIO_UP ;
149- // 80CLK
150- GPCRF0 = GPIO_IN ;
151- // USB_CHARGE_EN
152- GPCRF1 = GPIO_OUT | GPIO_UP ;
153- // 3IN1
154- GPCRF2 = GPIO_IN | GPIO_UP ;
155- // BT_EN
156- GPCRF3 = GPIO_OUT | GPIO_UP ;
157- // TP_CLK
158- GPCRF4 = GPIO_ALT ;
159- // TP_DATA
160- GPCRF5 = GPIO_ALT ;
161- // H_PECI
162- GPCRF6 = GPIO_ALT ;
163- // USB_PWR_EN#
164- GPCRF7 = GPIO_OUT | GPIO_UP ;
165- // CCD_EN
166- GPCRG0 = GPIO_OUT | GPIO_UP ;
167- // GC6_FB_EN_PCH
168- GPCRG1 = GPIO_IN ;
169- // AUTO_LOAD
170- GPCRG2 = GPIO_OUT ;
171- // ALSPI_CE#
172- GPCRG3 = GPIO_ALT ;
173- // ALSPI_MSI
174- GPCRG4 = GPIO_ALT ;
175- // ALSPI_MSO
176- GPCRG5 = GPIO_ALT ;
177- // AIRPLAN_LED#
178- GPCRG6 = GPIO_OUT | GPIO_UP ;
179- // ALSPI_SCLK
180- GPCRG7 = GPIO_ALT ;
181- // ECCLKRUN#
182- GPCRH0 = GPIO_IN ;
183- // SUSC#_PCH
184- GPCRH1 = GPIO_IN ;
185- // BKL_EN
186- GPCRH2 = GPIO_OUT | GPIO_UP ;
187- // LED_BAT_CHG
188- GPCRH3 = GPIO_OUT | GPIO_UP ;
189- // LED_BAT_FULL
190- GPCRH4 = GPIO_OUT | GPIO_UP ;
191- // LED_PWR
192- GPCRH5 = GPIO_OUT | GPIO_UP ;
193- // SUSB#_PCH
194- GPCRH6 = GPIO_IN ;
195- // BAT_DET
196- GPCRI0 = GPIO_ALT ;
197- // BAT_VOLT
198- GPCRI1 = GPIO_ALT ;
199- // ME_WE
200- GPCRI2 = GPIO_OUT ;
201- // THERM_VOLT
202- GPCRI3 = GPIO_ALT ;
203- // TOTAL_CUR
204- GPCRI4 = GPIO_ALT ;
205- // MPS_ID
206- GPCRI5 = GPIO_IN ;
207- // FANSEN_SEL (L:VGA H:SYS)
208- GPCRI6 = GPIO_OUT ;
209- // MODEL_ID
210- GPCRI7 = GPIO_IN ;
211- // SLP_SUS_EC#
212- GPCRJ0 = GPIO_OUT ;
213- // KBC_MUTE#
214- GPCRJ1 = GPIO_OUT ;
215- // WLAN_EN
216- GPCRJ2 = GPIO_OUT | GPIO_UP ;
217- // LED_SCROLL#
218- GPCRJ3 = GPIO_OUT | GPIO_UP ;
219- // LED_NUM#
220- GPCRJ4 = GPIO_OUT | GPIO_UP ;
221- // LED_CAP#
222- GPCRJ5 = GPIO_OUT | GPIO_UP ;
223- // POWER_IC_EN
224- GPCRJ6 = GPIO_OUT | GPIO_UP ;
225- // VBATT_BOOST#
226- GPCRJ7 = GPIO_OUT ;
227- // LPC_AD0
228- GPCRM0 = GPIO_ALT ;
229- // LPC_AD1
230- GPCRM1 = GPIO_ALT ;
231- // LPC_AD2
232- GPCRM2 = GPIO_ALT ;
233- // LPC_AD3
234- GPCRM3 = GPIO_ALT ;
235- // PCLK_KBC
236- GPCRM4 = GPIO_ALT ;
237- // LPC_FRAME#
238- GPCRM5 = GPIO_ALT ;
239- // SERIRQ
240- GPCRM6 = GPIO_ALT ;
168+ for (uint8_t i = 0 ; i < ARRAY_SIZE (gpio_cfg_init ); i ++ ) {
169+ * gpio_cfg_init [i ].reg = gpio_cfg_init [i ].data ;
170+ }
241171}
0 commit comments