Sync changed between system76 boards

This commit is contained in:
Jeremy Soller 2020-04-05 08:47:24 -06:00
parent 825677bfb5
commit d901907942
No known key found for this signature in database
GPG Key ID: E988B49EE78A7FB1
5 changed files with 57 additions and 37 deletions

View File

@ -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) { if (power_state == POWER_STATE_S0) {
// CPU on, green light // CPU on, green light
gpio_set(&LED_PWR, true); gpio_set(&LED_PWR, true);
gpio_set(&LED_ACIN, false); gpio_set(&LED_ACIN, false);
} else if (power_state == POWER_STATE_S3 || power_state == POWER_STATE_DS3) { } else if (power_state == POWER_STATE_S3 || power_state == POWER_STATE_DS3) {
// Suspended, flashing green light // Suspended, flashing green light
static uint32_t last_time = 0;
uint32_t time = time_get();
if ( if (
(time < last_time) // overflow (time < last_time) // overflow
|| ||
@ -424,9 +424,16 @@ void power_event(void) {
gpio_set(&LED_PWR, false); gpio_set(&LED_PWR, false);
gpio_set(&LED_ACIN, true); gpio_set(&LED_ACIN, true);
} else { } 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_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 #endif // DEEP_SX
} }

View File

@ -2,6 +2,9 @@
#include <common/macro.h> #include <common/macro.h>
#include <ec/dac.h> #include <ec/dac.h>
#define KBLED_DAC 5
#define KBLED_DACDAT DACDAT5
static uint8_t __code levels[] = { static uint8_t __code levels[] = {
0x00, 0x00,
0x80, 0x80,
@ -12,15 +15,15 @@ static uint8_t __code levels[] = {
}; };
void kbled_init(void) { void kbled_init(void) {
// Enable DAC5, used for KBLIGHT_ADJ // Enable DAC used for KBLIGHT_ADJ
DACPDREG &= ~(1 << 5); DACPDREG &= ~(1 << KBLED_DAC);
// Set DAC5 to 0V // Set DAC to 0V
DACDAT5 = 0; KBLED_DACDAT = 0;
} }
uint8_t kbled_get(void) { uint8_t kbled_get(void) {
uint8_t level; uint8_t level;
uint8_t raw = DACDAT5; uint8_t raw = KBLED_DACDAT;
for (level = 0; level < ARRAY_SIZE(levels); level++) { for (level = 0; level < ARRAY_SIZE(levels); level++) {
if (raw <= levels[level]) { if (raw <= levels[level]) {
return level; return level;
@ -34,5 +37,5 @@ void kbled_set(uint8_t level) {
if (level < ARRAY_SIZE(levels)) { if (level < ARRAY_SIZE(levels)) {
raw = levels[level]; raw = levels[level];
} }
DACDAT5 = raw; KBLED_DACDAT = raw;
} }

View File

@ -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) { if (power_state == POWER_STATE_S0) {
// CPU on, green light // CPU on, green light
gpio_set(&LED_PWR, true); gpio_set(&LED_PWR, true);
gpio_set(&LED_ACIN, false); gpio_set(&LED_ACIN, false);
} else if (power_state == POWER_STATE_S3 || power_state == POWER_STATE_DS3) { } else if (power_state == POWER_STATE_S3 || power_state == POWER_STATE_DS3) {
// Suspended, flashing green light // Suspended, flashing green light
static uint32_t last_time = 0;
uint32_t time = time_get();
if ( if (
(time < last_time) // overflow (time < last_time) // overflow
|| ||
@ -421,9 +421,16 @@ void power_event(void) {
gpio_set(&LED_PWR, false); gpio_set(&LED_PWR, false);
gpio_set(&LED_ACIN, true); gpio_set(&LED_ACIN, true);
} else { } 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_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 #endif // DEEP_SX
} }

View File

@ -2,6 +2,9 @@
#include <common/macro.h> #include <common/macro.h>
#include <ec/dac.h> #include <ec/dac.h>
#define KBLED_DAC 2
#define KBLED_DACDAT DACDAT2
static uint8_t __code levels[] = { static uint8_t __code levels[] = {
0x00, 0x00,
0x80, 0x80,
@ -12,15 +15,15 @@ static uint8_t __code levels[] = {
}; };
void kbled_init(void) { void kbled_init(void) {
// Enable DAC2, used for KBLIGHT_ADJ // Enable DAC used for KBLIGHT_ADJ
DACPDREG &= ~(1 << 2); DACPDREG &= ~(1 << KBLED_DAC);
// Set DAC2 to 0V // Set DAC to 0V
DACDAT2 = 0; KBLED_DACDAT = 0;
} }
uint8_t kbled_get(void) { uint8_t kbled_get(void) {
uint8_t level; uint8_t level;
uint8_t raw = DACDAT2; uint8_t raw = KBLED_DACDAT;
for (level = 0; level < ARRAY_SIZE(levels); level++) { for (level = 0; level < ARRAY_SIZE(levels); level++) {
if (raw <= levels[level]) { if (raw <= levels[level]) {
return level; return level;
@ -34,5 +37,5 @@ void kbled_set(uint8_t level) {
if (level < ARRAY_SIZE(levels)) { if (level < ARRAY_SIZE(levels)) {
raw = levels[level]; raw = levels[level];
} }
DACDAT2 = raw; KBLED_DACDAT = raw;
} }

View File

@ -33,25 +33,25 @@ void kbscan_init(void) {
#define DEBOUNCE_DELAY 20 #define DEBOUNCE_DELAY 20
static uint8_t kbscan_get_row(int i) { static uint8_t kbscan_get_row(int i) {
// Set current line as output // Set current line as output
if (i < 8) { if (i < 8) {
KSOLGOEN = 1 << i; KSOLGOEN = 1 << i;
KSOHGOEN = 0; KSOHGOEN = 0;
} else if (i < 16) { } else if (i < 16) {
KSOLGOEN = 0; KSOLGOEN = 0;
KSOHGOEN = 1 << (i - 8); KSOHGOEN = 1 << (i - 8);
} else if (i == 16) { } else if (i == 16) {
KSOLGOEN = 0; KSOLGOEN = 0;
KSOHGOEN = 0; KSOHGOEN = 0;
} else if (i == 17) { } else if (i == 17) {
KSOLGOEN = 0; KSOLGOEN = 0;
KSOHGOEN = 0; KSOHGOEN = 0;
} }
// TODO: figure out optimal delay // TODO: figure out optimal delay
delay_ticks(10); delay_ticks(10);
return ~KSI; return ~KSI;
} }
static inline bool popcount_more_than_one(uint8_t rowdata) { static inline bool popcount_more_than_one(uint8_t rowdata) {