From 9a7e779999089f905c7b8f85188a210bb6d51ad6 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 29 Jan 2020 14:53:28 -0700 Subject: [PATCH] Sync kbled with galp3-c --- src/board/system76/galp3-c/acpi.c | 12 +++---- .../system76/galp3-c/include/board/kbled.h | 9 ++++++ src/board/system76/galp3-c/kbled.c | 31 +++++++++++++++++++ src/board/system76/galp3-c/kbscan.c | 9 ++++++ src/board/system76/lemp9/kbled.c | 6 ++-- 5 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 src/board/system76/galp3-c/include/board/kbled.h create mode 100644 src/board/system76/galp3-c/kbled.c diff --git a/src/board/system76/galp3-c/acpi.c b/src/board/system76/galp3-c/acpi.c index b8df06d..62b9799 100644 --- a/src/board/system76/galp3-c/acpi.c +++ b/src/board/system76/galp3-c/acpi.c @@ -1,7 +1,7 @@ #include #include -#include #include +#include #include #include @@ -9,9 +9,9 @@ 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 }; +static uint8_t fcmd = 0; +static uint8_t fdat = 0; +static uint8_t fbuf[4] = { 0, 0, 0, 0 }; void fcommand(void) { switch (fcmd) { @@ -20,11 +20,11 @@ void fcommand(void) { switch (fdat) { // Set white LED brightness case 0x00: - DACDAT5 = fbuf[0]; + kbled_set(fbuf[0]); break; // Get white LED brightness case 0x01: - fbuf[0] = DACDAT5; + fbuf[0] = kbled_get(); break; } break; diff --git a/src/board/system76/galp3-c/include/board/kbled.h b/src/board/system76/galp3-c/include/board/kbled.h new file mode 100644 index 0000000..84db299 --- /dev/null +++ b/src/board/system76/galp3-c/include/board/kbled.h @@ -0,0 +1,9 @@ +#ifndef _BOARD_KBLED_H +#define _BOARD_KBLED_H + +#include + +uint8_t kbled_get(void); +void kbled_set(uint8_t level); + +#endif // _BOARD_KBLED_H diff --git a/src/board/system76/galp3-c/kbled.c b/src/board/system76/galp3-c/kbled.c new file mode 100644 index 0000000..40d7371 --- /dev/null +++ b/src/board/system76/galp3-c/kbled.c @@ -0,0 +1,31 @@ +#include +#include +#include + +static uint8_t __code levels[] = { + 0, + 48, + 72, + 96, + 192, + 255 +}; + +uint8_t kbled_get(void) { + uint8_t level; + uint8_t raw = DACDAT5; + for (level = 0; level < ARRAY_SIZE(levels); level++) { + if (raw <= levels[level]) { + return level; + } + } + return 0; +} + +void kbled_set(uint8_t level) { + uint8_t raw = 0; + if (level < ARRAY_SIZE(levels)) { + raw = levels[level]; + } + DACDAT5 = raw; +} diff --git a/src/board/system76/galp3-c/kbscan.c b/src/board/system76/galp3-c/kbscan.c index 6df78d4..c67a806 100644 --- a/src/board/system76/galp3-c/kbscan.c +++ b/src/board/system76/galp3-c/kbscan.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -104,6 +105,14 @@ void kbscan_event(void) { if (new_b) { uint8_t sci = SCI_EXTRA; sci_extra = (uint8_t)(key & 0xFF); + + // HACK FOR HARDWARE HOTKEYS + switch (sci_extra) { + case SCI_EXTRA_KBD_BKL: + kbled_set(kbled_get() + 1); + break; + } + if (!pmc_sci(&PMC_1, sci)) { // In the case of ignored SCI, reset bit new &= ~(1 << j); diff --git a/src/board/system76/lemp9/kbled.c b/src/board/system76/lemp9/kbled.c index b96a635..cf46939 100644 --- a/src/board/system76/lemp9/kbled.c +++ b/src/board/system76/lemp9/kbled.c @@ -23,9 +23,9 @@ uint8_t kbled_get(void) { } void kbled_set(uint8_t level) { + uint8_t raw = 0; if (level < ARRAY_SIZE(levels)) { - DACDAT2 = levels[level]; - } else { - DACDAT2 = 0; + raw = levels[level]; } + DACDAT2 = raw; }