Skip to content

Commit ce8aa47

Browse files
committed
Initialize GPIOs from static config table
Signed-off-by: Tim Crawford <[email protected]>
1 parent 85da2d2 commit ce8aa47

File tree

35 files changed

+4525
-7414
lines changed

35 files changed

+4525
-7414
lines changed

src/board/system76/addw1/gpio.c

Lines changed: 123 additions & 193 deletions
Original file line numberDiff line numberDiff line change
@@ -44,198 +44,128 @@ struct Gpio __code WLAN_EN = GPIO(J, 2);
4444
struct 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+
47167
void 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

Comments
 (0)