// SPDX-License-Identifier: GPL-3.0-only #include #include // clang-format off struct Gpio __code ACIN_N = GPIO(B, 0); struct Gpio __code AC_PRESENT = GPIO(E, 1); struct Gpio __code AC_V1_EC = GPIO(J, 7); struct Gpio __code AC_V2_EC = GPIO(F, 1); struct Gpio __code ALL_SYS_PWRGD = GPIO(C, 0); struct Gpio __code BKL_EN = GPIO(H, 2); struct Gpio __code BT_EN = GPIO(H, 7); struct Gpio __code BUF_PLT_RST_N = GPIO(D, 2); struct Gpio __code CCD_EN = GPIO(D, 1); struct Gpio __code DD_ON = GPIO(E, 4); struct Gpio __code DGPU_PWR_EN = GPIO(A, 0); struct Gpio __code EC_EN = GPIO(B, 6); struct Gpio __code EC_RSMRST_N = GPIO(E, 5); struct Gpio __code GC6_FB_EN = GPIO(H, 3); struct Gpio __code LAN_WAKEUP_N = GPIO(B, 2); // renamed to LAN_WAKE# struct Gpio __code LED_ACIN = GPIO(C, 7); struct Gpio __code LED_BAT_CHG = GPIO(H, 5); struct Gpio __code LED_BAT_FULL = GPIO(J, 0); struct Gpio __code LED_PWR = GPIO(D, 0); struct Gpio __code LID_SW_N = GPIO(B, 1); struct Gpio __code PM_PWROK = GPIO(C, 6); struct Gpio __code PWR_BTN_N = GPIO(D, 5); struct Gpio __code PWR_SW_N = GPIO(B, 3); struct Gpio __code SB_KBCRST_N = GPIO(E, 6); struct Gpio __code SCI_N = GPIO(D, 3); // TODO - SLP_SUS_N - does it work? struct Gpio __code SMI_N = GPIO(D, 4); struct Gpio __code SUSB_N_PCH = GPIO(H, 6); struct Gpio __code SUSC_N_PCH = GPIO(H, 1); struct Gpio __code SWI_N = GPIO(B, 5); struct Gpio __code USB_PWR_EN_N = GPIO(F, 7); // renamed to USBVCC_ON# struct Gpio __code VA_EC_EN = GPIO(J, 4); // renamed to SLP_SUS# struct Gpio __code WLAN_EN = GPIO(G, 1); struct Gpio __code WLAN_PWR_EN = GPIO(A, 3); struct Gpio __code XLP_OUT = GPIO(B, 4); // renamed to EN_3V // clang-format on void gpio_init() { // PWRSW WDT 2 Enable 2 GCR9 = BIT(5); // PWRSW WDT 2 Enable 1 GCR8 = BIT(4); // Enable LPC reset on GPD2 GCR = 0x04; // Enable SMBus channel 4 GCR15 = BIT(4); // Set GPF2 and GPF3 to 3.3V GCR20 = 0; // Set GPIO data GPDRA = 0xA1; GPDRB = 0x18; GPDRC = 0x00; GPDRD = 0x38; GPDRE = 0x00; GPDRF = 0xC0; GPDRG = 0x00; GPDRH = 0x00; GPDRI = 0x00; GPDRJ = 0x02; // Set GPIO control // DGPU_PWR_EN GPCRA0 = GPIO_OUT; // KBC_BEEP GPCRA1 = GPIO_ALT; // CPU_FAN_PWM GPCRA2 = GPIO_ALT; // WLAN_PWR_EN GPCRA3 = GPIO_OUT | GPIO_UP; // VGA_FAN_PWM GPCRA4 = GPIO_ALT; // EC_LAN_EN GPCRA5 = GPIO_OUT; // TBTA_I2C_IRQ2Z - TODO GPCRA6 = GPIO_OUT | GPIO_UP; // CPU_ID_EC - TODO GPCRA7 = GPIO_OUT; // AC_IN# GPCRB0 = GPIO_IN | GPIO_UP; // LID_SW# GPCRB1 = GPIO_IN | GPIO_UP; // LAN_WAKE# GPCRB2 = GPIO_IN | GPIO_UP; // PWR_SW# GPCRB3 = GPIO_IN; // EN_3V GPCRB4 = GPIO_OUT; // SWI# GPCRB5 = GPIO_OUT | GPIO_UP; // EC_EN GPCRB6 = GPIO_OUT | GPIO_UP; // NO PIN GPCRB7 = GPIO_IN; // ALL_SYS_PWRGD GPCRC0 = GPIO_IN; // KBC_SMBus_CLK1 GPCRC1 = GPIO_ALT; // KBC_SMBus_DAT1 GPCRC2 = GPIO_ALT; // KB-SO16 GPCRC3 = GPIO_IN; // CNVI_DET# GPCRC4 = GPIO_IN | GPIO_UP; // KB-SO17 GPCRC5 = GPIO_IN; // PM_PWROK GPCRC6 = GPIO_OUT; // LED_ACIN GPCRC7 = GPIO_OUT | GPIO_UP; // LED_PWR GPCRD0 = GPIO_OUT | GPIO_UP; // CCD_EN GPCRD1 = GPIO_OUT | GPIO_UP; // BUF_PLT_RST# GPCRD2 = GPIO_ALT; // KBC_SCI# GPCRD3 = GPIO_IN; // SMI# GPCRD4 = GPIO_IN; // PWR_BTN# GPCRD5 = GPIO_OUT | GPIO_UP; // CPU_FANSEN GPCRD6 = GPIO_ALT; // VGA_FANSEN GPCRD7 = GPIO_ALT; // SMC_BAT GPCRE0 = GPIO_ALT; // AC_PRESENT GPCRE1 = GPIO_OUT | GPIO_UP; // GPU_PWR_EN# and TBTA_HRESET - TODO GPCRE2 = GPIO_IN; // USB_CHARGE_EN GPCRE3 = GPIO_OUT | GPIO_UP; // DD_ON GPCRE4 = GPIO_OUT | GPIO_DOWN; // EC_RSMRST# GPCRE5 = GPIO_OUT; // SB_KBCRST# GPCRE6 = GPIO_OUT; // SMD_BAT GPCRE7 = GPIO_ALT; // 80CLK GPCRF0 = GPIO_IN; // AC_V2_EC GPCRF1 = GPIO_IN; // 3IN1 GPCRF2 = GPIO_IN | GPIO_UP; // VGA_THROTTLE GPCRF3 = GPIO_OUT; // TP_CLK GPCRF4 = GPIO_ALT; // TP_DATA GPCRF5 = GPIO_ALT; // H_PECI GPCRF6 = GPIO_ALT; // USBVCC_ON# GPCRF7 = GPIO_OUT | GPIO_UP; // EAPD_MODE GPCRG0 = GPIO_IN; // WLAN_EN GPCRG1 = GPIO_OUT | GPIO_UP; // 100K pull-up to VDD3 GPCRG2 = GPIO_OUT; // ALSPI_CE# GPCRG3 = GPIO_ALT; // ALSPI_MSI GPCRG4 = GPIO_ALT; // ALSPI_MSO GPCRG5 = GPIO_ALT; // H_PROCHOT_EC GPCRG6 = GPIO_OUT | GPIO_UP; // ALSPI_SCLK GPCRG7 = GPIO_ALT; // PM_CLKRUN# GPCRH0 = GPIO_ALT; // SUSC#_PCH GPCRH1 = GPIO_IN; // BKL_EN GPCRH2 = GPIO_OUT | GPIO_UP; // GC6_FB_EN GPCRH3 = GPIO_IN; // TH_OVERT#1 GPCRH4 = GPIO_IN; // LED_BAT_CHG GPCRH5 = GPIO_OUT | GPIO_UP; // SUSB#_PCH GPCRH6 = GPIO_IN; // BT_EN and VGA_GATE_CTRL - TODO GPCRH7 = GPIO_OUT; // BAT_DET GPCRI0 = GPIO_ALT; // BAT_VOLT GPCRI1 = GPIO_ALT; // ECPIN68 - TODO GPCRI2 = GPIO_OUT; // THERM_VOLT GPCRI3 = GPIO_ALT; // TOTAL_CUR GPCRI4 = GPIO_ALT; // CABLE_DET and PCH_SLP_SUS# - TODO GPCRI5 = GPIO_IN; // FAN_CLEAN GPCRI6 = GPIO_OUT; // MODEL_ID GPCRI7 = GPIO_IN; // LED_BAT_FULL GPCRJ0 = GPIO_OUT | GPIO_UP; // KBC_MUTE# GPCRJ1 = GPIO_OUT; // ECPIN78 - TODO GPCRJ2 = GPIO_IN; // PERKB-DET# GPCRJ3 = GPIO_IN | GPIO_UP; // SLP_SUS# GPCRJ4 = GPIO_OUT; // BATT_BOOST# GPCRJ5 = GPIO_OUT; // EC_GPIO GPCRJ6 = GPIO_OUT; // AC_V1_EC GPCRJ7 = GPIO_IN; // 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; }