diff --git a/src/board/system76/galp3-c/acpi.c b/src/board/system76/galp3-c/acpi.c index 299878c..b8df06d 100644 --- a/src/board/system76/galp3-c/acpi.c +++ b/src/board/system76/galp3-c/acpi.c @@ -7,6 +7,8 @@ extern bool lid_wake; +extern uint8_t sci_extra; + uint8_t fcmd = 0; uint8_t fdat = 0; uint8_t fbuf[4] = { 0, 0, 0, 0 }; @@ -80,6 +82,8 @@ uint8_t acpi_read(uint8_t addr) { ACPI_16(0x2E, battery_remaining_capacity); ACPI_16(0x32, battery_voltage); + ACPI_8(0xCC, sci_extra); + // Airplane mode LED case 0xD9: if (!gpio_get(&LED_AIRPLANE_N)) { diff --git a/src/board/system76/galp3-c/include/board/keymap.h b/src/board/system76/galp3-c/include/board/keymap.h index e24dce1..3bd63e4 100644 --- a/src/board/system76/galp3-c/include/board/keymap.h +++ b/src/board/system76/galp3-c/include/board/keymap.h @@ -3,6 +3,12 @@ #include +// Extra SCI layer for keyboard backlight control +#define KT_SCI_EXTRA (0x4000) + +#define SCI_EXTRA (0x50) +#define SCI_EXTRA_KBD_BKL (0x8A) + #define ___ 0 // Conversion of physical layout to keyboard matrix diff --git a/src/board/system76/galp3-c/kbscan.c b/src/board/system76/galp3-c/kbscan.c index 48892fc..2ff0a99 100644 --- a/src/board/system76/galp3-c/kbscan.c +++ b/src/board/system76/galp3-c/kbscan.c @@ -10,6 +10,8 @@ bool kbscan_enabled = false; +uint8_t sci_extra = 0; + void kbscan_init(void) { KSOCTRL = 0x05; KSICTRLR = 0x04; @@ -98,6 +100,15 @@ void kbscan_event(void) { if (new_b) layer = 1; else layer = 0; break; + case (KT_SCI_EXTRA): + if (new_b) { + uint8_t sci = SCI_EXTRA; + sci_extra = (uint8_t)(key & 0xFF); + if (!pmc_sci(&PMC_1, sci)) { + // In the case of ignored SCI, reset bit + new &= ~(1 << j); + } + } case (KT_SCI): if (new_b) { uint8_t sci = (uint8_t)(key & 0xFF); diff --git a/src/board/system76/galp3-c/keymap/default.c b/src/board/system76/galp3-c/keymap/default.c index d7c48fa..9c7da5b 100644 --- a/src/board/system76/galp3-c/keymap/default.c +++ b/src/board/system76/galp3-c/keymap/default.c @@ -12,7 +12,7 @@ LAYOUT( K_LEFT_CTRL, KT_FN, K_LEFT_SUPER, K_LEFT_ALT, K_SPACE, K_RIGHT_ALT, K_APP, K_RIGHT_CTRL, K_LEFT, K_DOWN, K_RIGHT ), LAYOUT( - K_ESC, K_TOUCHPAD, K_F2, K_MUTE, K_F4, K_VOLUME_DOWN, K_VOLUME_UP, K_F7, KT_SCI | SCI_BRIGHTNESS_DOWN, KT_SCI | SCI_BRIGHTNESS_UP, K_F10, KT_SCI | SCI_AIRPLANE_MODE, KT_SCI | SCI_SUSPEND, 0 /*prtsc*/, 0 /*pause*/, K_INSERT, K_DEL, + K_ESC, K_TOUCHPAD, K_F2, K_MUTE, KT_SCI_EXTRA | SCI_EXTRA_KBD_BKL, K_VOLUME_DOWN, K_VOLUME_UP, K_F7, KT_SCI | SCI_BRIGHTNESS_DOWN, KT_SCI | SCI_BRIGHTNESS_UP, K_F10, KT_SCI | SCI_AIRPLANE_MODE, KT_SCI | SCI_SUSPEND, 0 /*prtsc*/, 0 /*pause*/, K_INSERT, K_DEL, K_PLAY_PAUSE, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0, K_MINUS, K_EQUALS, K_BKSP, K_HOME, K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_U, K_I, K_O, K_P, K_BRACE_OPEN, K_BRACE_CLOSE, K_BACKSLASH, K_PGUP, K_CAPS, K_A, K_S, K_D, K_F, K_G, K_H, K_J, K_K, K_L, K_SEMICOLON, K_QUOTE, K_ENTER, K_PGDN, diff --git a/src/board/system76/galp3-c/keymap/jeremy.c b/src/board/system76/galp3-c/keymap/jeremy.c index 8401fb0..bbc6618 100644 --- a/src/board/system76/galp3-c/keymap/jeremy.c +++ b/src/board/system76/galp3-c/keymap/jeremy.c @@ -12,7 +12,7 @@ LAYOUT( K_LEFT_CTRL, KT_FN, K_LEFT_ALT, K_LEFT_SUPER, K_SPACE, KT_FN, K_RIGHT_ALT, K_RIGHT_CTRL, K_LEFT, K_DOWN, K_RIGHT ), LAYOUT( - K_ESC, K_TOUCHPAD, K_F2, K_MUTE, K_F4, K_VOLUME_DOWN, K_VOLUME_UP, K_F7, KT_SCI | SCI_BRIGHTNESS_DOWN, KT_SCI | SCI_BRIGHTNESS_UP, K_F10, KT_SCI | SCI_AIRPLANE_MODE, KT_SCI | SCI_SUSPEND, 0 /*prtsc*/, 0 /*pause*/, K_INSERT, K_DEL, + K_ESC, K_TOUCHPAD, K_F2, K_MUTE, KT_SCI_EXTRA | SCI_EXTRA_KBD_BKL, K_VOLUME_DOWN, K_VOLUME_UP, K_F7, KT_SCI | SCI_BRIGHTNESS_DOWN, KT_SCI | SCI_BRIGHTNESS_UP, K_F10, KT_SCI | SCI_AIRPLANE_MODE, KT_SCI | SCI_SUSPEND, 0 /*prtsc*/, 0 /*pause*/, K_INSERT, K_DEL, K_PLAY_PAUSE, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0, K_MINUS, K_EQUALS, K_BKSP, K_HOME, K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_PGUP, K_HOME, K_PGDN, K_P, K_BRACE_OPEN, K_BRACE_CLOSE, K_BACKSLASH, K_PGUP, KT_FN, K_A, K_S, K_D, K_F, K_G, K_LEFT, K_DOWN, K_UP, K_RIGHT, K_BKSP, K_DEL, K_ENTER, K_PGDN,