From d9019079422de1f1b16b11fb5ff60c7e3b931814 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 5 Apr 2020 08:47:24 -0600 Subject: [PATCH] Sync changed between system76 boards --- src/board/system76/darp5/power.c | 15 +++++++++---- src/board/system76/galp3-c/kbled.c | 15 +++++++------ src/board/system76/galp3-c/power.c | 15 +++++++++---- src/board/system76/lemp9/kbled.c | 15 +++++++------ src/board/system76/lemp9/kbscan.c | 34 +++++++++++++++--------------- 5 files changed, 57 insertions(+), 37 deletions(-) diff --git a/src/board/system76/darp5/power.c b/src/board/system76/darp5/power.c index 683db64..0b36c78 100644 --- a/src/board/system76/darp5/power.c +++ b/src/board/system76/darp5/power.c @@ -402,14 +402,14 @@ void power_event(void) { } } + static uint32_t last_time = 0; + uint32_t time = time_get(); if (power_state == POWER_STATE_S0) { // CPU on, green light gpio_set(&LED_PWR, true); gpio_set(&LED_ACIN, false); } else if (power_state == POWER_STATE_S3 || power_state == POWER_STATE_DS3) { // Suspended, flashing green light - static uint32_t last_time = 0; - uint32_t time = time_get(); if ( (time < last_time) // overflow || @@ -424,9 +424,16 @@ void power_event(void) { gpio_set(&LED_PWR, false); gpio_set(&LED_ACIN, true); } else { - // CPU off and AC adapter unplugged, no light + // CPU off and AC adapter unplugged, flashing orange light gpio_set(&LED_PWR, false); - gpio_set(&LED_ACIN, false); + if ( + (time < last_time) // overflow + || + (time >= (last_time + 1000)) // timeout + ) { + gpio_set(&LED_ACIN, !gpio_get(&LED_ACIN)); + last_time = time; + } } #endif // DEEP_SX } diff --git a/src/board/system76/galp3-c/kbled.c b/src/board/system76/galp3-c/kbled.c index 0583a3f..b22d9be 100644 --- a/src/board/system76/galp3-c/kbled.c +++ b/src/board/system76/galp3-c/kbled.c @@ -2,6 +2,9 @@ #include #include +#define KBLED_DAC 5 +#define KBLED_DACDAT DACDAT5 + static uint8_t __code levels[] = { 0x00, 0x80, @@ -12,15 +15,15 @@ static uint8_t __code levels[] = { }; void kbled_init(void) { - // Enable DAC5, used for KBLIGHT_ADJ - DACPDREG &= ~(1 << 5); - // Set DAC5 to 0V - DACDAT5 = 0; + // Enable DAC used for KBLIGHT_ADJ + DACPDREG &= ~(1 << KBLED_DAC); + // Set DAC to 0V + KBLED_DACDAT = 0; } uint8_t kbled_get(void) { uint8_t level; - uint8_t raw = DACDAT5; + uint8_t raw = KBLED_DACDAT; for (level = 0; level < ARRAY_SIZE(levels); level++) { if (raw <= levels[level]) { return level; @@ -34,5 +37,5 @@ void kbled_set(uint8_t level) { if (level < ARRAY_SIZE(levels)) { raw = levels[level]; } - DACDAT5 = raw; + KBLED_DACDAT = raw; } diff --git a/src/board/system76/galp3-c/power.c b/src/board/system76/galp3-c/power.c index 0440459..03855bf 100644 --- a/src/board/system76/galp3-c/power.c +++ b/src/board/system76/galp3-c/power.c @@ -399,14 +399,14 @@ void power_event(void) { } } + static uint32_t last_time = 0; + uint32_t time = time_get(); if (power_state == POWER_STATE_S0) { // CPU on, green light gpio_set(&LED_PWR, true); gpio_set(&LED_ACIN, false); } else if (power_state == POWER_STATE_S3 || power_state == POWER_STATE_DS3) { // Suspended, flashing green light - static uint32_t last_time = 0; - uint32_t time = time_get(); if ( (time < last_time) // overflow || @@ -421,9 +421,16 @@ void power_event(void) { gpio_set(&LED_PWR, false); gpio_set(&LED_ACIN, true); } else { - // CPU off and AC adapter unplugged, no light + // CPU off and AC adapter unplugged, flashing orange light gpio_set(&LED_PWR, false); - gpio_set(&LED_ACIN, false); + if ( + (time < last_time) // overflow + || + (time >= (last_time + 1000)) // timeout + ) { + gpio_set(&LED_ACIN, !gpio_get(&LED_ACIN)); + last_time = time; + } } #endif // DEEP_SX } diff --git a/src/board/system76/lemp9/kbled.c b/src/board/system76/lemp9/kbled.c index 17fff1b..beba37a 100644 --- a/src/board/system76/lemp9/kbled.c +++ b/src/board/system76/lemp9/kbled.c @@ -2,6 +2,9 @@ #include #include +#define KBLED_DAC 2 +#define KBLED_DACDAT DACDAT2 + static uint8_t __code levels[] = { 0x00, 0x80, @@ -12,15 +15,15 @@ static uint8_t __code levels[] = { }; void kbled_init(void) { - // Enable DAC2, used for KBLIGHT_ADJ - DACPDREG &= ~(1 << 2); - // Set DAC2 to 0V - DACDAT2 = 0; + // Enable DAC used for KBLIGHT_ADJ + DACPDREG &= ~(1 << KBLED_DAC); + // Set DAC to 0V + KBLED_DACDAT = 0; } uint8_t kbled_get(void) { uint8_t level; - uint8_t raw = DACDAT2; + uint8_t raw = KBLED_DACDAT; for (level = 0; level < ARRAY_SIZE(levels); level++) { if (raw <= levels[level]) { return level; @@ -34,5 +37,5 @@ void kbled_set(uint8_t level) { if (level < ARRAY_SIZE(levels)) { raw = levels[level]; } - DACDAT2 = raw; + KBLED_DACDAT = raw; } diff --git a/src/board/system76/lemp9/kbscan.c b/src/board/system76/lemp9/kbscan.c index a148aa0..048796e 100644 --- a/src/board/system76/lemp9/kbscan.c +++ b/src/board/system76/lemp9/kbscan.c @@ -33,25 +33,25 @@ void kbscan_init(void) { #define DEBOUNCE_DELAY 20 static uint8_t kbscan_get_row(int i) { - // Set current line as output - if (i < 8) { - KSOLGOEN = 1 << i; - KSOHGOEN = 0; - } else if (i < 16) { - KSOLGOEN = 0; - KSOHGOEN = 1 << (i - 8); - } else if (i == 16) { - KSOLGOEN = 0; - KSOHGOEN = 0; - } else if (i == 17) { - KSOLGOEN = 0; - KSOHGOEN = 0; - } + // Set current line as output + if (i < 8) { + KSOLGOEN = 1 << i; + KSOHGOEN = 0; + } else if (i < 16) { + KSOLGOEN = 0; + KSOHGOEN = 1 << (i - 8); + } else if (i == 16) { + KSOLGOEN = 0; + KSOHGOEN = 0; + } else if (i == 17) { + KSOLGOEN = 0; + KSOHGOEN = 0; + } - // TODO: figure out optimal delay - delay_ticks(10); + // TODO: figure out optimal delay + delay_ticks(10); - return ~KSI; + return ~KSI; } static inline bool popcount_more_than_one(uint8_t rowdata) {