Skip to content

Commit d62372b

Browse files
committed
Add lemp14-b
Signed-off-by: Tim Crawford <tcrawford@system76.com>
1 parent b1253f2 commit d62372b

5 files changed

Lines changed: 305 additions & 3 deletions

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# SPDX-License-Identifier: GPL-3.0-only
2+
3+
# Variant with:
4+
# - 16" display
5+
# - 18x8 keyboard matrix
6+
# - KBLED using PWM interface
7+
8+
board-y += board.c
9+
board-y += gpio.c
10+
11+
EC = ite
12+
CONFIG_EC_ITE_IT5570E = y
13+
CONFIG_EC_FLASH_SIZE_256K = y
14+
15+
# Intel-based host
16+
CONFIG_PLATFORM_INTEL = y
17+
CONFIG_BUS_ESPI = y
18+
CONFIG_PECI_OVER_ESPI = y
19+
20+
# Enable firmware security
21+
CONFIG_SECURITY = y
22+
23+
# Keyboard configuration
24+
KEYBOARD = 18H9LHA05
25+
KEYMAP = darp10
26+
CONFIG_HAVE_KBLED = y
27+
CONFIG_KBLED = rgb_pwm
28+
29+
# Set touchpad PS2 bus
30+
CONFIG_PS2_TOUCHPAD = PS2_3
31+
32+
# Set smart charger parameters
33+
CONFIG_CHARGER = oz26786
34+
CONFIG_I2C_SMBUS = I2C_4
35+
CONFIG_CHARGER_ADAPTER_RSENSE = 5
36+
CONFIG_CHARGER_BATTERY_RSENSE = 10
37+
CONFIG_CHARGER_CHARGE_CURRENT = 1536
38+
CONFIG_CHARGER_CHARGE_VOLTAGE = 17600
39+
CONFIG_CHARGER_INPUT_CURRENT = 3420
40+
41+
# Set CPU power limits in watts
42+
CONFIG_POWER_LIMIT_AC = 65
43+
CONFIG_POWER_LIMIT_DC = 45
44+
45+
# Fan configs
46+
CONFIG_FAN1_PWM = DCR2
47+
CONFIG_FAN1_POINTS = " \
48+
FAN_POINT(70, 40), \
49+
FAN_POINT(75, 50), \
50+
FAN_POINT(80, 60), \
51+
FAN_POINT(85, 65), \
52+
FAN_POINT(90, 65), \
53+
"
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// SPDX-License-Identifier: GPL-3.0-only
2+
3+
#include <app/board.h>
4+
#include <app/battery.h>
5+
#include <app/espi.h>
6+
#include <board/gpio.h>
7+
#include <ec/ec.h>
8+
9+
void board_init(void) {
10+
espi_init();
11+
12+
// Make sure charger is in off state, also enables PSYS
13+
battery_charger_disable();
14+
15+
// Allow backlight to be turned on
16+
gpio_set(&BKL_EN, true);
17+
// Enable camera
18+
gpio_set(&CCD_EN, true);
19+
}
20+
21+
void board_event(void) {
22+
espi_event();
23+
24+
ec_read_post_codes();
25+
}

src/board/system76/lemp14-b/gpio.c

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
// SPDX-License-Identifier: GPL-3.0-only
2+
3+
#include <board/gpio.h>
4+
#include <common/macro.h>
5+
6+
// uncrustify:off
7+
struct Gpio __code ACIN_N = GPIO(B, 0);
8+
struct Gpio __code AC_PRESENT = GPIO(A, 4);
9+
struct Gpio __code ALL_SYS_PWRGD = GPIO(C, 0);
10+
struct Gpio __code BKL_EN = GPIO(C, 7);
11+
struct Gpio __code BUF_PLT_RST_N = GPIO(D, 2); // renamed to ESPI_RESET#
12+
struct Gpio __code CCD_EN = GPIO(D, 1);
13+
struct Gpio __code CPU_C10_GATE_N = GPIO(F, 7);
14+
struct Gpio __code DD_ON = GPIO(E, 4);
15+
struct Gpio __code EC_EN = GPIO(B, 6); // renamed to SUSBC_EC#
16+
struct Gpio __code EC_RSMRST_N = GPIO(E, 5);
17+
struct Gpio __code LED_ACIN = GPIO(H, 2);
18+
struct Gpio __code LED_PWR = GPIO(D, 4);
19+
struct Gpio __code LID_SW_N = GPIO(B, 1);
20+
struct Gpio __code ME_WE = GPIO(D, 7);
21+
struct Gpio __code PCH_PWROK_EC = GPIO(F, 3);
22+
struct Gpio __code PD_EN = GPIO(D, 0); // renamed to PD_POWER_EN
23+
struct Gpio __code PM_PWROK = GPIO(H, 7); // renamed to EC_PWROK
24+
struct Gpio __code PWR_BTN_N = GPIO(D, 5);
25+
struct Gpio __code PWR_SW_N = GPIO(B, 3);
26+
struct Gpio __code RGBKB_DET_N = GPIO(I, 2);
27+
struct Gpio __code SLP_S0_N = GPIO(B, 5);
28+
struct Gpio __code SUSB_N_PCH = GPIO(H, 0);
29+
struct Gpio __code SUSC_N_PCH = GPIO(H, 1);
30+
struct Gpio __code VA_EC_EN = GPIO(J, 4);
31+
struct Gpio __code VCCST_EN = GPIO(D, 3);
32+
struct Gpio __code VCCST_EN_PG = GPIO(H, 6);
33+
struct Gpio __code WLAN_PWR_EN = GPIO(A, 3);
34+
struct Gpio __code XLP_OUT = GPIO(B, 4);
35+
// uncrustify:on
36+
37+
static const struct GpioInit __code gpio_cfg_init[] = {
38+
// General control
39+
{ &GCR, 0b10 << 1 }, // Enable LPC reset on GPD2
40+
{ &GCR2, 0 }, // Disable PECI
41+
{ &GCR6, 0 }, // Disable UARTs
42+
{ &GCR8, BIT(4) }, // PWRSW WDT 2 Enable 1
43+
{ &GCR9, BIT(5) }, // PWRSW WDT 2 Enable 2
44+
{ &GCR10, BIT(1) }, // PWRSW counter 12 seconds
45+
{ &GCR15, BIT(4) }, // Enable SMBus channel 4
46+
{ &GCR19, BIT(7) | BIT(0) }, // Set GPB5 and GPD2 to 1.8V
47+
{ &GCR20, BIT(7) }, // Set GPD3 to 1.8V, GPF2 and GPF3 to 3.3V
48+
{ &GCR21, BIT(6) | BIT(5) | BIT(2) | BIT(1) }, // Set GPF6, GPF7, GPH0, and GPH1 to 1.8V
49+
{ &GCR22, BIT(7) },
50+
{ &GCR23, BIT(0) }, // Set GPM6 power domain to VCC
51+
52+
//TODO: copied from lemp13-b, everything above is verified, everything below is not
53+
54+
// Port data
55+
{ &GPDRA, 0 },
56+
{ &GPDRB, BIT(4) }, // XLP_OUT
57+
{ &GPDRC, 0 },
58+
{ &GPDRD, BIT(5) }, // PWR_BTN#
59+
{ &GPDRE, BIT(3) }, // USB_PWR_EN
60+
{ &GPDRF, 0 },
61+
{ &GPDRG, BIT(6) }, // H_PROCHOT_EC
62+
{ &GPDRH, 0 },
63+
{ &GPDRI, 0 },
64+
{ &GPDRJ, BIT(1) }, // KBC_MUTE#
65+
{ &GPDRM, 0 },
66+
67+
// Port control
68+
{ &GPCRA0, GPIO_OUT }, // EC_PWM_LEDKB_P
69+
{ &GPCRA1, GPIO_IN }, // KBC_BEEP
70+
{ &GPCRA2, GPIO_ALT }, // CPU_FAN
71+
{ &GPCRA3, GPIO_OUT }, // WLAN_PWR_EN
72+
{ &GPCRA4, GPIO_OUT }, // AC_PRESENT_EC
73+
{ &GPCRA5, GPIO_ALT }, // EC_PWM_LEDKB_R
74+
{ &GPCRA6, GPIO_ALT }, // EC_PWM_LEDKB_G
75+
{ &GPCRA7, GPIO_IN }, // TBTA_VBUS_2_EN#
76+
77+
{ &GPCRB0, GPIO_IN | GPIO_UP }, // AC_IN#
78+
{ &GPCRB1, GPIO_IN | GPIO_UP }, // LID_SW#
79+
{ &GPCRB2, GPIO_IN }, // PCIE_WAKE#
80+
{ &GPCRB3, GPIO_IN }, // PWR_SW#
81+
{ &GPCRB4, GPIO_OUT }, // XLP_OUT
82+
{ &GPCRB5, GPIO_IN }, // SLP_S0#
83+
{ &GPCRB6, GPIO_OUT }, // SUSBC_EC#
84+
85+
{ &GPCRC0, GPIO_IN }, // ALL_SYS_PWRGD
86+
{ &GPCRC1, GPIO_ALT | GPIO_UP }, // SMB_CLK_EC
87+
{ &GPCRC2, GPIO_ALT | GPIO_UP }, // SMB_DATA_EC
88+
{ &GPCRC3, GPIO_ALT | GPIO_UP }, // KB-SO16
89+
{ &GPCRC4, GPIO_IN | GPIO_UP }, // CNVI_DET#
90+
{ &GPCRC5, GPIO_ALT | GPIO_UP }, // KB-SO17
91+
{ &GPCRC6, GPIO_IN }, // TMRI1-TEST
92+
{ &GPCRC7, GPIO_OUT }, // BKL_EN
93+
94+
{ &GPCRD0, GPIO_OUT }, // PD_POWER_EN
95+
{ &GPCRD1, GPIO_OUT }, // CCD_EN
96+
{ &GPCRD2, GPIO_ALT }, // ESPI_RESET#
97+
{ &GPCRD3, GPIO_IN }, // VCCST_EN
98+
{ &GPCRD4, GPIO_OUT }, // LED_PWR
99+
{ &GPCRD5, GPIO_OUT }, // EC_PWR_BTN#
100+
{ &GPCRD6, GPIO_ALT | GPIO_DOWN }, // CPU_FANSEN
101+
{ &GPCRD7, GPIO_OUT }, // EC_ME_WE
102+
103+
{ &GPCRE0, GPIO_ALT | GPIO_UP }, // SMC_BAT
104+
{ &GPCRE1, GPIO_IN }, // GPE1_TEST
105+
{ &GPCRE2, GPIO_IN }, // ACE_I2C_IRQ2Z
106+
{ &GPCRE3, GPIO_OUT }, // USB_PWR_EN
107+
{ &GPCRE4, GPIO_OUT }, // DD_ON
108+
{ &GPCRE5, GPIO_OUT }, // EC_RSMRST#
109+
{ &GPCRE6, GPIO_IN }, // JACK_IN#_EC
110+
{ &GPCRE7, GPIO_ALT | GPIO_UP }, // SMD_BAT
111+
112+
{ &GPCRF0, GPIO_OUT }, // 80CLK
113+
{ &GPCRF1, GPIO_OUT }, // USB_CHARGE_EN
114+
{ &GPCRF2, GPIO_OUT }, // 3IN1
115+
{ &GPCRF3, GPIO_OUT }, // PCH_PWROK_EC
116+
{ &GPCRF4, GPIO_ALT | GPIO_UP }, // TP_CLK
117+
{ &GPCRF5, GPIO_ALT | GPIO_UP }, // TP_DATA
118+
{ &GPCRF6, GPIO_IN }, // SLP_A#
119+
{ &GPCRF7, GPIO_IN }, // CPU_C10_GATE#
120+
121+
{ &GPCRG0, GPIO_IN }, // 10k pull-down
122+
{ &GPCRG1, GPIO_IN }, // WLAN_EN
123+
{ &GPCRG2, GPIO_IN }, // Pull up to VDD3
124+
{ &GPCRG3, GPIO_ALT }, // ALSPI_CE#
125+
{ &GPCRG4, GPIO_ALT }, // ALSPI_MSI
126+
{ &GPCRG5, GPIO_ALT }, // ALSPI_MSO
127+
{ &GPCRG6, GPIO_OUT }, // H_PROCHOT_EC
128+
{ &GPCRG7, GPIO_ALT }, // ALSPI_SCLK
129+
130+
{ &GPCRH0, GPIO_IN }, // SUSB#_PCH
131+
{ &GPCRH1, GPIO_IN }, // SUSC#_PCH
132+
{ &GPCRH2, GPIO_OUT }, // LED_ACIN
133+
{ &GPCRH3, GPIO_OUT }, // 3G_EN
134+
{ &GPCRH4, GPIO_OUT }, // 3G_PWR_EN
135+
{ &GPCRH5, GPIO_IN }, // TBTA_VBUS_1_EN#
136+
{ &GPCRH6, GPIO_OUT }, // VCCST_EN_PG
137+
{ &GPCRH7, GPIO_OUT }, // EC_PWROK
138+
139+
{ &GPCRI0, GPIO_ALT }, // BAT_DET
140+
{ &GPCRI1, GPIO_ALT }, // BAT_VOLT
141+
{ &GPCRI2, GPIO_IN | GPIO_UP }, // RGBKB-DET#
142+
{ &GPCRI3, GPIO_ALT }, // THERM_VOLT_CPU_1
143+
{ &GPCRI4, GPIO_ALT }, // TOTAL_CUR
144+
{ &GPCRI5, GPIO_OUT }, //TODO: LED_PWR_BTN
145+
{ &GPCRI6, GPIO_ALT }, // THERM_VOLT_CPU_2
146+
{ &GPCRI7, GPIO_IN }, // MODEL_ID
147+
148+
{ &GPCRJ0, GPIO_IN }, // SINK_CTRL_EC_1
149+
{ &GPCRJ1, GPIO_OUT }, // KBC_MUTE#
150+
{ &GPCRJ2, GPIO_ALT }, // KBLIGHT_ADJ
151+
{ &GPCRJ3, GPIO_IN }, // SINK_CTRL_EC_2
152+
{ &GPCRJ4, GPIO_OUT }, // VA_EC_EN
153+
{ &GPCRJ5, GPIO_IN }, // VBATT_BOOST#
154+
{ &GPCRJ6, GPIO_OUT }, // EC_GPIO
155+
{ &GPCRJ7, GPIO_IN | GPIO_UP }, // LEDKB_DET#
156+
157+
{ &GPCRM0, GPIO_ALT | GPIO_UP | GPIO_DOWN }, // ESPI_IO0_EC
158+
{ &GPCRM1, GPIO_ALT | GPIO_UP | GPIO_DOWN }, // ESPI_IO1_EC
159+
{ &GPCRM2, GPIO_ALT | GPIO_UP | GPIO_DOWN }, // ESPI_IO2_EC
160+
{ &GPCRM3, GPIO_ALT | GPIO_UP | GPIO_DOWN }, // ESPI_IO3_EC
161+
{ &GPCRM4, GPIO_ALT | GPIO_UP | GPIO_DOWN }, // ESPI_CLK_EC
162+
{ &GPCRM5, GPIO_ALT }, // ESPI_CS_EC#
163+
{ &GPCRM6, GPIO_IN | GPIO_UP | GPIO_DOWN }, // ESPI_ALRT0#
164+
};
165+
166+
void gpio_init(void) {
167+
for (uint8_t i = 0; i < ARRAY_SIZE(gpio_cfg_init); i++) {
168+
*gpio_cfg_init[i].reg = gpio_cfg_init[i].data;
169+
}
170+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// SPDX-License-Identifier: GPL-3.0-only
2+
3+
#ifndef _BOARD_GPIO_H
4+
#define _BOARD_GPIO_H
5+
6+
#include <ec/gpio.h>
7+
8+
void gpio_init(void);
9+
10+
extern struct Gpio __code ACIN_N;
11+
extern struct Gpio __code AC_PRESENT;
12+
extern struct Gpio __code ALL_SYS_PWRGD;
13+
extern struct Gpio __code BKL_EN;
14+
#define HAVE_BT_EN 0
15+
extern struct Gpio __code BUF_PLT_RST_N;
16+
extern struct Gpio __code CCD_EN;
17+
extern struct Gpio __code CPU_C10_GATE_N;
18+
extern struct Gpio __code DD_ON;
19+
extern struct Gpio __code EC_EN;
20+
extern struct Gpio __code EC_RSMRST_N;
21+
#define HAVE_LAN_WAKEUP_N 0
22+
extern struct Gpio __code LED_ACIN;
23+
#define HAVE_LED_AIRPLANE_N 0
24+
#define HAVE_LED_BAT_CHG 0
25+
#define HAVE_LED_BAT_FULL 0
26+
extern struct Gpio __code LED_PWR;
27+
extern struct Gpio __code LID_SW_N;
28+
extern struct Gpio __code ME_WE;
29+
#define HAVE_PCH_DPWROK_EC 0
30+
extern struct Gpio __code PCH_PWROK_EC;
31+
#define HAVE_PD_EN 1
32+
extern struct Gpio __code PD_EN;
33+
extern struct Gpio __code PM_PWROK;
34+
extern struct Gpio __code PWR_BTN_N;
35+
extern struct Gpio __code PWR_SW_N;
36+
extern struct Gpio __code RGBKB_DET_N;
37+
extern struct Gpio __code SLP_S0_N;
38+
#define HAVE_SLP_SUS_N 0
39+
extern struct Gpio __code SUSB_N_PCH;
40+
extern struct Gpio __code SUSC_N_PCH;
41+
#define HAVE_SUSWARN_N 0
42+
#define HAVE_SUS_PWR_ACK 0
43+
extern struct Gpio __code VA_EC_EN;
44+
#define HAVE_VCCST_EN 1
45+
extern struct Gpio __code VCCST_EN;
46+
extern struct Gpio __code VCCST_EN_PG;
47+
#define HAVE_WLAN_EN 0
48+
extern struct Gpio __code WLAN_PWR_EN;
49+
extern struct Gpio __code XLP_OUT;
50+
51+
#endif // _BOARD_GPIO_H

src/board/system76/lemp14/Makefile.mk

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# SPDX-License-Identifier: GPL-3.0-only
22

3+
# Variant with:
4+
# - 14" display
5+
# - 16x8 keyboard matrix
6+
# - KBLED using DAC interface
7+
38
board-y += board.c
49
board-y += gpio.c
510

@@ -15,11 +20,9 @@ CONFIG_PECI_OVER_ESPI = y
1520
# Enable firmware security
1621
CONFIG_SECURITY = y
1722

18-
# Include keyboard
23+
# Keyboard configuration
1924
KEYBOARD = 14in_83
2025
KEYMAP = darp10-b
21-
22-
# Set keyboard LED mechanism
2326
CONFIG_HAVE_KBLED = y
2427
CONFIG_KBLED = white_dac
2528
CONFIG_KBLED_DAC = 2

0 commit comments

Comments
 (0)