diff --git a/src/board/system76/darp5/pmc.c b/src/board/system76/darp5/pmc.c index 9ab446b..0db98f8 100644 --- a/src/board/system76/darp5/pmc.c +++ b/src/board/system76/darp5/pmc.c @@ -58,18 +58,8 @@ void pmc_event(struct Pmc * pmc) { static uint8_t state_data = 0; uint8_t sts = pmc_status(pmc); - if (!(sts & PMC_STS_OBF)) { - switch (state) { - case PMC_STATE_WRITE: - DEBUG("pmc write: %02X\n", state_data); - state = PMC_STATE_DEFAULT; - pmc_write(pmc, state_data); - // Send SCI for OBF=1 - pmc_sci_interrupt(); - break; - } - } - + + // Read command/data if available if (sts & PMC_STS_IBF) { uint8_t data = pmc_read(pmc); if (sts & PMC_STS_CMD) { @@ -146,4 +136,17 @@ void pmc_event(struct Pmc * pmc) { } } } + + // Write data if possible + if (!(sts & PMC_STS_OBF)) { + switch (state) { + case PMC_STATE_WRITE: + DEBUG("pmc write: %02X\n", state_data); + state = PMC_STATE_DEFAULT; + pmc_write(pmc, state_data); + // Send SCI for OBF=1 + pmc_sci_interrupt(); + break; + } + } } diff --git a/src/board/system76/galp3-c/pmc.c b/src/board/system76/galp3-c/pmc.c index 9ab446b..0db98f8 100644 --- a/src/board/system76/galp3-c/pmc.c +++ b/src/board/system76/galp3-c/pmc.c @@ -58,18 +58,8 @@ void pmc_event(struct Pmc * pmc) { static uint8_t state_data = 0; uint8_t sts = pmc_status(pmc); - if (!(sts & PMC_STS_OBF)) { - switch (state) { - case PMC_STATE_WRITE: - DEBUG("pmc write: %02X\n", state_data); - state = PMC_STATE_DEFAULT; - pmc_write(pmc, state_data); - // Send SCI for OBF=1 - pmc_sci_interrupt(); - break; - } - } - + + // Read command/data if available if (sts & PMC_STS_IBF) { uint8_t data = pmc_read(pmc); if (sts & PMC_STS_CMD) { @@ -146,4 +136,17 @@ void pmc_event(struct Pmc * pmc) { } } } + + // Write data if possible + if (!(sts & PMC_STS_OBF)) { + switch (state) { + case PMC_STATE_WRITE: + DEBUG("pmc write: %02X\n", state_data); + state = PMC_STATE_DEFAULT; + pmc_write(pmc, state_data); + // Send SCI for OBF=1 + pmc_sci_interrupt(); + break; + } + } } diff --git a/src/board/system76/lemp9/pmc.c b/src/board/system76/lemp9/pmc.c index 9ab446b..0db98f8 100644 --- a/src/board/system76/lemp9/pmc.c +++ b/src/board/system76/lemp9/pmc.c @@ -58,18 +58,8 @@ void pmc_event(struct Pmc * pmc) { static uint8_t state_data = 0; uint8_t sts = pmc_status(pmc); - if (!(sts & PMC_STS_OBF)) { - switch (state) { - case PMC_STATE_WRITE: - DEBUG("pmc write: %02X\n", state_data); - state = PMC_STATE_DEFAULT; - pmc_write(pmc, state_data); - // Send SCI for OBF=1 - pmc_sci_interrupt(); - break; - } - } - + + // Read command/data if available if (sts & PMC_STS_IBF) { uint8_t data = pmc_read(pmc); if (sts & PMC_STS_CMD) { @@ -146,4 +136,17 @@ void pmc_event(struct Pmc * pmc) { } } } + + // Write data if possible + if (!(sts & PMC_STS_OBF)) { + switch (state) { + case PMC_STATE_WRITE: + DEBUG("pmc write: %02X\n", state_data); + state = PMC_STATE_DEFAULT; + pmc_write(pmc, state_data); + // Send SCI for OBF=1 + pmc_sci_interrupt(); + break; + } + } }