Skip to content

Commit

Permalink
Initialize GPIOs from static config table
Browse files Browse the repository at this point in the history
Signed-off-by: Tim Crawford <[email protected]>
  • Loading branch information
crawfxrd committed Jul 5, 2024
1 parent 1e02be1 commit f40f3e6
Show file tree
Hide file tree
Showing 35 changed files with 3,750 additions and 6,168 deletions.
282 changes: 108 additions & 174 deletions src/board/system76/addw1/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,111 @@ struct Gpio __code WLAN_EN = GPIO(J, 2);
struct Gpio __code WLAN_PWR_EN = GPIO(B, 0);
// uncrustify:on

struct reg_init {
volatile uint8_t __xdata *reg;
uint8_t data;
};

static const struct reg_init __code gpio_ctrl_init[] = {
{ &GPCRA0, GPIO_ALT }, // EC_PWM_LEDKB_P
{ &GPCRA1, GPIO_ALT }, // KBC_BEEP
{ &GPCRA2, GPIO_ALT }, // CPU_FAN
{ &GPCRA3, GPIO_OUT | GPIO_UP }, // SYS_FAN TODO
{ &GPCRA4, GPIO_ALT }, // VGA_FAN
{ &GPCRA5, GPIO_ALT }, // EC_PWM_LEDKB_R
{ &GPCRA6, GPIO_ALT }, // EC_PWM_LEDKB_G
{ &GPCRA7, GPIO_ALT }, // EC_PWM_LEDKB_B

{ &GPCRB0, GPIO_OUT | GPIO_UP }, // WLAN_PWR_EN
{ &GPCRB1, GPIO_OUT | GPIO_UP }, // H_PROCHOT_EC
{ &GPCRB2, GPIO_IN | GPIO_UP }, // LAN_WAKEUP#
{ &GPCRB3, GPIO_ALT }, // SMC_BAT
{ &GPCRB4, GPIO_ALT }, // SMD_BAT
{ &GPCRB5, GPIO_OUT | GPIO_UP }, // SUSBC_EN#
{ &GPCRB6, GPIO_IN | GPIO_UP }, // AC_IN#
{ &GPCRB7, GPIO_IN | GPIO_UP }, // PERKB-DET#

{ &GPCRC0, GPIO_IN }, // ALL_SYS_PWRGD
{ &GPCRC1, GPIO_OUT }, // SMC_VGA_THERM
{ &GPCRC2, GPIO_OUT }, // SMD_VGA_THERM
{ &GPCRC3, GPIO_ALT | GPIO_UP }, // KB-SO16
{ &GPCRC4, GPIO_IN | GPIO_UP }, // CNVI_DET#_EC
{ &GPCRC5, GPIO_ALT | GPIO_UP }, // KB-SO17
{ &GPCRC6, GPIO_OUT }, // PM_PWROK
{ &GPCRC7, GPIO_OUT | GPIO_UP }, // LED_ACIN

{ &GPCRD0, GPIO_IN | GPIO_UP }, // PWR_SW#
{ &GPCRD1, GPIO_IN | GPIO_UP }, // LID_SW#
{ &GPCRD2, GPIO_ALT }, // BUF_PLT_RST#
{ &GPCRD3, GPIO_IN }, // SMI#
{ &GPCRD4, GPIO_IN }, // SCI#
{ &GPCRD5, GPIO_OUT | GPIO_UP }, // PWR_BTN#
{ &GPCRD6, GPIO_ALT }, // CPU_FANSEN
{ &GPCRD7, GPIO_ALT }, // ALL_FANSEN

{ &GPCRE0, GPIO_OUT | GPIO_UP }, // SWI#
{ &GPCRE1, GPIO_IN }, // OVERT#
{ &GPCRE2, GPIO_IN | GPIO_UP }, // RGBKB-DET#
{ &GPCRE3, GPIO_IN }, // DGPU_PWR_EN
{ &GPCRE4, GPIO_OUT | GPIO_DOWN }, // DD_ON
{ &GPCRE5, GPIO_OUT }, // EC_RSMRST#
{ &GPCRE6, GPIO_OUT | GPIO_UP }, // SB_KBCRST#
{ &GPCRE7, GPIO_OUT | GPIO_UP }, // AC_PRESENT

{ &GPCRF0, GPIO_IN }, // 80CLK
{ &GPCRF1, GPIO_OUT | GPIO_UP }, // USB_CHARGE_EN
{ &GPCRF2, GPIO_IN | GPIO_UP }, // 3IN1
{ &GPCRF3, GPIO_OUT | GPIO_UP }, // BT_EN
{ &GPCRF4, GPIO_ALT }, // TP_CLK
{ &GPCRF5, GPIO_ALT }, // TP_DATA
{ &GPCRF6, GPIO_ALT }, // H_PECI
{ &GPCRF7, GPIO_OUT | GPIO_UP }, // USB_PWR_EN#

{ &GPCRG0, GPIO_OUT | GPIO_UP }, // CCD_EN
{ &GPCRG1, GPIO_IN }, // GC6_FB_EN_PCH
{ &GPCRG2, GPIO_OUT }, // AUTO_LOAD
{ &GPCRG3, GPIO_ALT }, // ALSPI_CE#
{ &GPCRG4, GPIO_ALT }, // ALSPI_MSI
{ &GPCRG5, GPIO_ALT }, // ALSPI_MSO
{ &GPCRG6, GPIO_OUT | GPIO_UP }, // AIRPLAN_LED#
{ &GPCRG7, GPIO_ALT }, // ALSPI_SCLK

{ &GPCRH0, GPIO_IN }, // ECCLKRUN#
{ &GPCRH1, GPIO_IN }, // SUSC#_PCH
{ &GPCRH2, GPIO_OUT | GPIO_UP }, // BKL_EN
{ &GPCRH3, GPIO_OUT | GPIO_UP }, // LED_BAT_CHG
{ &GPCRH4, GPIO_OUT | GPIO_UP }, // LED_BAT_FULL
{ &GPCRH5, GPIO_OUT | GPIO_UP }, // LED_PWR
{ &GPCRH6, GPIO_IN }, // SUSB#_PCH
{ &GPCRH7, GPIO_IN }, // TODO

{ &GPCRI0, GPIO_ALT }, // BAT_DET
{ &GPCRI1, GPIO_ALT }, // BAT_VOLT
{ &GPCRI2, GPIO_OUT }, // ME_WE
{ &GPCRI3, GPIO_ALT }, // THERM_VOLT
{ &GPCRI4, GPIO_ALT }, // TOTAL_CUR
{ &GPCRI5, GPIO_IN }, // MPS_ID
{ &GPCRI6, GPIO_OUT }, // FANSEN_SEL (L:VGA H:SYS)
{ &GPCRI7, GPIO_IN }, // MODEL_ID

{ &GPCRJ0, GPIO_OUT }, // SLP_SUS_EC#
{ &GPCRJ1, GPIO_OUT }, // KBC_MUTE#
{ &GPCRJ2, GPIO_OUT | GPIO_UP }, // WLAN_EN
{ &GPCRJ3, GPIO_OUT | GPIO_UP }, // LED_SCROLL#
{ &GPCRJ4, GPIO_OUT | GPIO_UP }, // LED_NUM#
{ &GPCRJ5, GPIO_OUT | GPIO_UP }, // LED_CAP#
{ &GPCRJ6, GPIO_OUT | GPIO_UP }, // POWER_IC_EN
{ &GPCRJ7, GPIO_OUT }, // VBATT_BOOST#

{ &GPCRM0, GPIO_ALT }, // LPC_AD0
{ &GPCRM1, GPIO_ALT }, // LPC_AD1
{ &GPCRM2, GPIO_ALT }, // LPC_AD2
{ &GPCRM3, GPIO_ALT }, // LPC_AD3
{ &GPCRM4, GPIO_ALT }, // PCLK_KBC
{ &GPCRM5, GPIO_ALT }, // LPC_FRAME#
{ &GPCRM6, GPIO_ALT }, // SERIRQ
};

void gpio_init(void) {
// Enable LPC reset on GPD2
GCR = 0x04;
Expand All @@ -66,178 +171,7 @@ void gpio_init(void) {
GPDRJ = BIT(5) | BIT(4) | BIT(3) | BIT(1);

// Set GPIO control
// EC_PWM_LEDKB_P
GPCRA0 = GPIO_ALT;
// KBC_BEEP
GPCRA1 = GPIO_ALT;
// CPU_FAN
GPCRA2 = GPIO_ALT;
// SYS_FAN TODO
GPCRA3 = GPIO_OUT | GPIO_UP;
// VGA_FAN
GPCRA4 = GPIO_ALT;
// EC_PWM_LEDKB_R
GPCRA5 = GPIO_ALT;
// EC_PWM_LEDKB_G
GPCRA6 = GPIO_ALT;
// EC_PWM_LEDKB_B
GPCRA7 = GPIO_ALT;
// WLAN_PWR_EN
GPCRB0 = GPIO_OUT | GPIO_UP;
// H_PROCHOT_EC
GPCRB1 = GPIO_OUT | GPIO_UP;
// LAN_WAKEUP#
GPCRB2 = GPIO_IN | GPIO_UP;
// SMC_BAT
GPCRB3 = GPIO_ALT;
// SMD_BAT
GPCRB4 = GPIO_ALT;
// SUSBC_EN#
GPCRB5 = GPIO_OUT | GPIO_UP;
// AC_IN#
GPCRB6 = GPIO_IN | GPIO_UP;
// PERKB-DET#
GPCRB7 = GPIO_IN | GPIO_UP;
// ALL_SYS_PWRGD
GPCRC0 = GPIO_IN;
// SMC_VGA_THERM
GPCRC1 = GPIO_OUT;
// SMD_VGA_THERM
GPCRC2 = GPIO_OUT;
// KB-SO16
GPCRC3 = GPIO_ALT | GPIO_UP;
// CNVI_DET#_EC
GPCRC4 = GPIO_IN | GPIO_UP;
// KB-SO17
GPCRC5 = GPIO_ALT | GPIO_UP;
// PM_PWROK
GPCRC6 = GPIO_OUT;
// LED_ACIN
GPCRC7 = GPIO_OUT | GPIO_UP;
// PWR_SW#
GPCRD0 = GPIO_IN | GPIO_UP;
// LID_SW#
GPCRD1 = GPIO_IN | GPIO_UP;
// BUF_PLT_RST#
GPCRD2 = GPIO_ALT;
// SMI#
GPCRD3 = GPIO_IN;
// SCI#
GPCRD4 = GPIO_IN;
// PWR_BTN#
GPCRD5 = GPIO_OUT | GPIO_UP;
// CPU_FANSEN
GPCRD6 = GPIO_ALT;
// ALL_FANSEN
GPCRD7 = GPIO_ALT;
// SWI#
GPCRE0 = GPIO_OUT | GPIO_UP;
// OVERT#
GPCRE1 = GPIO_IN;
// RGBKB-DET#
GPCRE2 = GPIO_IN | GPIO_UP;
// DGPU_PWR_EN
GPCRE3 = GPIO_IN;
// DD_ON
GPCRE4 = GPIO_OUT | GPIO_DOWN;
// EC_RSMRST#
GPCRE5 = GPIO_OUT;
// SB_KBCRST#
GPCRE6 = GPIO_OUT | GPIO_UP;
// AC_PRESENT
GPCRE7 = GPIO_OUT | GPIO_UP;
// 80CLK
GPCRF0 = GPIO_IN;
// USB_CHARGE_EN
GPCRF1 = GPIO_OUT | GPIO_UP;
// 3IN1
GPCRF2 = GPIO_IN | GPIO_UP;
// BT_EN
GPCRF3 = GPIO_OUT | GPIO_UP;
// TP_CLK
GPCRF4 = GPIO_ALT;
// TP_DATA
GPCRF5 = GPIO_ALT;
// H_PECI
GPCRF6 = GPIO_ALT;
// USB_PWR_EN#
GPCRF7 = GPIO_OUT | GPIO_UP;
// CCD_EN
GPCRG0 = GPIO_OUT | GPIO_UP;
// GC6_FB_EN_PCH
GPCRG1 = GPIO_IN;
// AUTO_LOAD
GPCRG2 = GPIO_OUT;
// ALSPI_CE#
GPCRG3 = GPIO_ALT;
// ALSPI_MSI
GPCRG4 = GPIO_ALT;
// ALSPI_MSO
GPCRG5 = GPIO_ALT;
// AIRPLAN_LED#
GPCRG6 = GPIO_OUT | GPIO_UP;
// ALSPI_SCLK
GPCRG7 = GPIO_ALT;
// ECCLKRUN#
GPCRH0 = GPIO_IN;
// SUSC#_PCH
GPCRH1 = GPIO_IN;
// BKL_EN
GPCRH2 = GPIO_OUT | GPIO_UP;
// LED_BAT_CHG
GPCRH3 = GPIO_OUT | GPIO_UP;
// LED_BAT_FULL
GPCRH4 = GPIO_OUT | GPIO_UP;
// LED_PWR
GPCRH5 = GPIO_OUT | GPIO_UP;
// SUSB#_PCH
GPCRH6 = GPIO_IN;
// TODO
GPCRH7 = GPIO_IN;
// BAT_DET
GPCRI0 = GPIO_ALT;
// BAT_VOLT
GPCRI1 = GPIO_ALT;
// ME_WE
GPCRI2 = GPIO_OUT;
// THERM_VOLT
GPCRI3 = GPIO_ALT;
// TOTAL_CUR
GPCRI4 = GPIO_ALT;
// MPS_ID
GPCRI5 = GPIO_IN;
// FANSEN_SEL (L:VGA H:SYS)
GPCRI6 = GPIO_OUT;
// MODEL_ID
GPCRI7 = GPIO_IN;
// SLP_SUS_EC#
GPCRJ0 = GPIO_OUT;
// KBC_MUTE#
GPCRJ1 = GPIO_OUT;
// WLAN_EN
GPCRJ2 = GPIO_OUT | GPIO_UP;
// LED_SCROLL#
GPCRJ3 = GPIO_OUT | GPIO_UP;
// LED_NUM#
GPCRJ4 = GPIO_OUT | GPIO_UP;
// LED_CAP#
GPCRJ5 = GPIO_OUT | GPIO_UP;
// POWER_IC_EN
GPCRJ6 = GPIO_OUT | GPIO_UP;
// VBATT_BOOST#
GPCRJ7 = GPIO_OUT;
// LPC_AD0
GPCRM0 = GPIO_ALT;
// LPC_AD1
GPCRM1 = GPIO_ALT;
// LPC_AD2
GPCRM2 = GPIO_ALT;
// LPC_AD3
GPCRM3 = GPIO_ALT;
// PCLK_KBC
GPCRM4 = GPIO_ALT;
// LPC_FRAME#
GPCRM5 = GPIO_ALT;
// SERIRQ
GPCRM6 = GPIO_ALT;
for (uint8_t i = 0; i < ARRAY_SIZE(gpio_ctrl_init); i++) {
*gpio_ctrl_init[i].reg = gpio_ctrl_init[i].data;
}
}
Loading

0 comments on commit f40f3e6

Please sign in to comment.