Add debug levels
This commit is contained in:
		@@ -1,15 +1,18 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <board/acpi.h>
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
 | 
			
		||||
uint8_t acpi_read(uint8_t addr) {
 | 
			
		||||
    uint8_t data = 0;
 | 
			
		||||
    //TODO
 | 
			
		||||
    printf("acpi_read %02X = %02X\n", addr, data);
 | 
			
		||||
    DEBUG("acpi_read %02X = %02X\n", addr, data);
 | 
			
		||||
    switch (addr) {
 | 
			
		||||
        //TODO
 | 
			
		||||
    }
 | 
			
		||||
    return data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void acpi_write(uint8_t addr, uint8_t data) {
 | 
			
		||||
    //TODO
 | 
			
		||||
    printf("acpi_write %02X = %02X\n", addr, data);
 | 
			
		||||
    DEBUG("acpi_write %02X = %02X\n", addr, data);
 | 
			
		||||
    switch (addr) {
 | 
			
		||||
        //TODO
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
#include <common/i2c.h>
 | 
			
		||||
 | 
			
		||||
int smbus_read(uint8_t address, uint8_t command, uint16_t * data) {
 | 
			
		||||
@@ -46,22 +45,22 @@ void battery_debug(void) {
 | 
			
		||||
    int res = 0;
 | 
			
		||||
 | 
			
		||||
    #define command(N, A, V) { \
 | 
			
		||||
        printf(#N ": "); \
 | 
			
		||||
        DEBUG(#N ": "); \
 | 
			
		||||
        res = smbus_read(A, V, &data); \
 | 
			
		||||
        if (res < 0) { \
 | 
			
		||||
            printf("ERROR %04X\n", -res); \
 | 
			
		||||
            DEBUG("ERROR %04X\n", -res); \
 | 
			
		||||
        } else { \
 | 
			
		||||
            printf("%04X\n", data); \
 | 
			
		||||
            DEBUG("%04X\n", data); \
 | 
			
		||||
        } \
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    printf("Battery:\n");
 | 
			
		||||
    DEBUG("Battery:\n");
 | 
			
		||||
    command(Temperature, 0x0B, 0x08);
 | 
			
		||||
    command(Voltage, 0x0B, 0x09);
 | 
			
		||||
    command(Current, 0x0B, 0x0A);
 | 
			
		||||
    command(Charge, 0x0B, 0x0D);
 | 
			
		||||
 | 
			
		||||
    printf("Charger:\n");
 | 
			
		||||
    DEBUG("Charger:\n");
 | 
			
		||||
    command(ChargeOption0, 0x09, 0x12);
 | 
			
		||||
    command(ChargeOption1, 0x09, 0x3B);
 | 
			
		||||
    command(ChargeOption2, 0x09, 0x38);
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +1,4 @@
 | 
			
		||||
EC=it8587e
 | 
			
		||||
 | 
			
		||||
# Set debug level to debug
 | 
			
		||||
CFLAGS+=-DLEVEL=4
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <board/gpio.h>
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
 | 
			
		||||
void gpio_init() {
 | 
			
		||||
    // Enable LPC reset on GPD2
 | 
			
		||||
@@ -117,7 +116,7 @@ void gpio_debug_bank(
 | 
			
		||||
    volatile uint8_t * control
 | 
			
		||||
) {
 | 
			
		||||
    for(char i = 0; i < 8; i++) {
 | 
			
		||||
        printf(
 | 
			
		||||
        DEBUG(
 | 
			
		||||
            "%s%d:\n\tdata %d\n\tmirror %d\n\tpot %d\n\tcontrol %02X\n",
 | 
			
		||||
            bank,
 | 
			
		||||
            i,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,7 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <board/kbc.h>
 | 
			
		||||
#include <board/kbscan.h>
 | 
			
		||||
#include <board/keymap.h>
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
#include <ec/ps2.h>
 | 
			
		||||
 | 
			
		||||
void kbc_init(void) {
 | 
			
		||||
@@ -31,7 +30,7 @@ bool kbc_scancode(struct Kbc * kbc, uint16_t key, bool pressed) {
 | 
			
		||||
    if (!key) return true;
 | 
			
		||||
    switch (key & 0xFF00) {
 | 
			
		||||
        case K_E0:
 | 
			
		||||
            printf("  E0\n");
 | 
			
		||||
            DEBUG("  E0\n");
 | 
			
		||||
            if (!kbc_keyboard(kbc, 0xE0, KBC_TIMEOUT)) return false;
 | 
			
		||||
            key &= 0xFF;
 | 
			
		||||
            // Fall through
 | 
			
		||||
@@ -40,11 +39,11 @@ bool kbc_scancode(struct Kbc * kbc, uint16_t key, bool pressed) {
 | 
			
		||||
                if (kbc_translate) {
 | 
			
		||||
                    key |= 0x80;
 | 
			
		||||
                } else {
 | 
			
		||||
                    printf("  F0\n");
 | 
			
		||||
                    DEBUG("  F0\n");
 | 
			
		||||
                    if (!kbc_keyboard(kbc, 0xF0, KBC_TIMEOUT)) return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            printf("  %02X\n", key);
 | 
			
		||||
            DEBUG("  %02X\n", key);
 | 
			
		||||
            if (!kbc_keyboard(kbc, (uint8_t)key, KBC_TIMEOUT)) return false;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
@@ -70,12 +69,12 @@ void kbc_event(struct Kbc * kbc) {
 | 
			
		||||
    if (sts & KBC_STS_IBF) {
 | 
			
		||||
        uint8_t data = kbc_read(kbc);
 | 
			
		||||
        if (sts & KBC_STS_CMD) {
 | 
			
		||||
            printf("kbc cmd: %02X\n", data);
 | 
			
		||||
            DEBUG("kbc cmd: %02X\n", data);
 | 
			
		||||
 | 
			
		||||
            state = KBC_STATE_NORMAL;
 | 
			
		||||
            switch (data) {
 | 
			
		||||
            case 0x20:
 | 
			
		||||
                printf("  read configuration byte\n");
 | 
			
		||||
                DEBUG("  read configuration byte\n");
 | 
			
		||||
                uint8_t config = *kbc->control & 0x03;
 | 
			
		||||
                if (kbc_system) {
 | 
			
		||||
                    config |= (1 << 2);
 | 
			
		||||
@@ -92,81 +91,81 @@ void kbc_event(struct Kbc * kbc) {
 | 
			
		||||
                kbc_keyboard(kbc, config, KBC_TIMEOUT);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0x60:
 | 
			
		||||
                printf("  write configuration byte\n");
 | 
			
		||||
                DEBUG("  write configuration byte\n");
 | 
			
		||||
                state = KBC_STATE_WRITE_CONFIG;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xA7:
 | 
			
		||||
                printf("  disable second port\n");
 | 
			
		||||
                DEBUG("  disable second port\n");
 | 
			
		||||
                kbc_second = false;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xA8:
 | 
			
		||||
                printf("  enable second port\n");
 | 
			
		||||
                DEBUG("  enable second port\n");
 | 
			
		||||
                kbc_second = true;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xA9:
 | 
			
		||||
                printf("  test second port\n");
 | 
			
		||||
                DEBUG("  test second port\n");
 | 
			
		||||
                // TODO: communicate with touchpad?
 | 
			
		||||
                kbc_keyboard(kbc, 0x00, KBC_TIMEOUT);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xAA:
 | 
			
		||||
                printf("  test controller\n");
 | 
			
		||||
                DEBUG("  test controller\n");
 | 
			
		||||
                // Why not pass the test?
 | 
			
		||||
                kbc_keyboard(kbc, 0x55, KBC_TIMEOUT);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xAB:
 | 
			
		||||
                printf("  test first port\n");
 | 
			
		||||
                DEBUG("  test first port\n");
 | 
			
		||||
                // We _ARE_ the keyboard, so everything is good.
 | 
			
		||||
                kbc_keyboard(kbc, 0x00, KBC_TIMEOUT);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xAD:
 | 
			
		||||
                printf("  disable first port\n");
 | 
			
		||||
                DEBUG("  disable first port\n");
 | 
			
		||||
                kbc_first = false;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xAE:
 | 
			
		||||
                printf("  enable first port\n");
 | 
			
		||||
                DEBUG("  enable first port\n");
 | 
			
		||||
                kbc_first = true;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xD1:
 | 
			
		||||
                printf("  write port byte\n");
 | 
			
		||||
                DEBUG("  write port byte\n");
 | 
			
		||||
                state = KBC_STATE_WRITE_PORT;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xD2:
 | 
			
		||||
                printf("  write first port output\n");
 | 
			
		||||
                DEBUG("  write first port output\n");
 | 
			
		||||
                state = KBC_STATE_FIRST_PORT_OUTPUT;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xD3:
 | 
			
		||||
                printf("  write second port output\n");
 | 
			
		||||
                DEBUG("  write second port output\n");
 | 
			
		||||
                state = KBC_STATE_SECOND_PORT_OUTPUT;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0xD4:
 | 
			
		||||
                printf("  write second port input\n");
 | 
			
		||||
                DEBUG("  write second port input\n");
 | 
			
		||||
                state = KBC_STATE_SECOND_PORT_INPUT;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            printf("kbc data: %02X\n", data);
 | 
			
		||||
            DEBUG("kbc data: %02X\n", data);
 | 
			
		||||
 | 
			
		||||
            switch (state) {
 | 
			
		||||
                case KBC_STATE_NORMAL:
 | 
			
		||||
                    printf("  keyboard command\n");
 | 
			
		||||
                    DEBUG("  keyboard command\n");
 | 
			
		||||
                    switch (data) {
 | 
			
		||||
                        case 0xED:
 | 
			
		||||
                            printf("    set leds\n");
 | 
			
		||||
                            DEBUG("    set leds\n");
 | 
			
		||||
                            state = KBC_STATE_SET_LEDS;
 | 
			
		||||
                            kbc_keyboard(kbc, 0xFA, KBC_TIMEOUT);
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 0xEE:
 | 
			
		||||
                            printf("    echo\n");
 | 
			
		||||
                            DEBUG("    echo\n");
 | 
			
		||||
                            // Hey, this is easy. I like easy commands
 | 
			
		||||
                            kbc_keyboard(kbc, 0xEE, KBC_TIMEOUT);
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 0xF0:
 | 
			
		||||
                            printf("    get/set scancode\n");
 | 
			
		||||
                            DEBUG("    get/set scancode\n");
 | 
			
		||||
                            state = KBC_STATE_SCANCODE;
 | 
			
		||||
                            kbc_keyboard(kbc, 0xFA, KBC_TIMEOUT);
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 0xF2:
 | 
			
		||||
                            printf("    identify keyboard\n");
 | 
			
		||||
                            DEBUG("    identify keyboard\n");
 | 
			
		||||
                            if (kbc_keyboard(kbc, 0xFA, KBC_TIMEOUT)) {
 | 
			
		||||
                                if (kbc_keyboard(kbc, 0xAB, KBC_TIMEOUT)) {
 | 
			
		||||
                                    kbc_keyboard(kbc, 0x83, KBC_TIMEOUT);
 | 
			
		||||
@@ -174,17 +173,17 @@ void kbc_event(struct Kbc * kbc) {
 | 
			
		||||
                            }
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 0xF4:
 | 
			
		||||
                            printf("    enable scanning\n");
 | 
			
		||||
                            DEBUG("    enable scanning\n");
 | 
			
		||||
                            kbscan_enabled = true;
 | 
			
		||||
                            kbc_keyboard(kbc, 0xFA, KBC_TIMEOUT);
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 0xF5:
 | 
			
		||||
                            printf("    disable scanning\n");
 | 
			
		||||
                            DEBUG("    disable scanning\n");
 | 
			
		||||
                            kbscan_enabled = false;
 | 
			
		||||
                            kbc_keyboard(kbc, 0xFA, KBC_TIMEOUT);
 | 
			
		||||
                            break;
 | 
			
		||||
                        case 0xFF:
 | 
			
		||||
                            printf("    self test\n");
 | 
			
		||||
                            DEBUG("    self test\n");
 | 
			
		||||
                            if (kbc_keyboard(kbc, 0xFA, KBC_TIMEOUT)) {
 | 
			
		||||
                                // Yep, everything is still good, I promise
 | 
			
		||||
                                kbc_keyboard(kbc, 0xAA, KBC_TIMEOUT);
 | 
			
		||||
@@ -193,7 +192,7 @@ void kbc_event(struct Kbc * kbc) {
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                case KBC_STATE_WRITE_CONFIG:
 | 
			
		||||
                    printf("  write configuration byte\n");
 | 
			
		||||
                    DEBUG("  write configuration byte\n");
 | 
			
		||||
                    state = KBC_STATE_NORMAL;
 | 
			
		||||
                    uint8_t control = *kbc->control;
 | 
			
		||||
                    if (data & 1) {
 | 
			
		||||
@@ -213,36 +212,36 @@ void kbc_event(struct Kbc * kbc) {
 | 
			
		||||
                    *kbc->control = control;
 | 
			
		||||
                    break;
 | 
			
		||||
                case KBC_STATE_SET_LEDS:
 | 
			
		||||
                    printf("  set leds\n");
 | 
			
		||||
                    DEBUG("  set leds\n");
 | 
			
		||||
                    state = KBC_STATE_NORMAL;
 | 
			
		||||
                    kbc_keyboard(kbc, 0xFA, KBC_TIMEOUT);
 | 
			
		||||
                    break;
 | 
			
		||||
                case KBC_STATE_SCANCODE:
 | 
			
		||||
                    printf("  get/set scancode\n");
 | 
			
		||||
                    DEBUG("  get/set scancode\n");
 | 
			
		||||
                    state = KBC_STATE_NORMAL;
 | 
			
		||||
                    switch (data) {
 | 
			
		||||
                        case 0x02:
 | 
			
		||||
                            printf("    set scancode set 2\n");
 | 
			
		||||
                            DEBUG("    set scancode set 2\n");
 | 
			
		||||
                            break;
 | 
			
		||||
                    }
 | 
			
		||||
                    kbc_keyboard(kbc, 0xFA, KBC_TIMEOUT);
 | 
			
		||||
                    break;
 | 
			
		||||
                case KBC_STATE_WRITE_PORT:
 | 
			
		||||
                    printf("  write port byte\n");
 | 
			
		||||
                    DEBUG("  write port byte\n");
 | 
			
		||||
                    state = KBC_STATE_NORMAL;
 | 
			
		||||
                    break;
 | 
			
		||||
                case KBC_STATE_FIRST_PORT_OUTPUT:
 | 
			
		||||
                    printf("  write first port output\n");
 | 
			
		||||
                    DEBUG("  write first port output\n");
 | 
			
		||||
                    state = KBC_STATE_NORMAL;
 | 
			
		||||
                    kbc_keyboard(kbc, data, KBC_TIMEOUT);
 | 
			
		||||
                    break;
 | 
			
		||||
                case KBC_STATE_SECOND_PORT_OUTPUT:
 | 
			
		||||
                    printf("  write second port output\n");
 | 
			
		||||
                    DEBUG("  write second port output\n");
 | 
			
		||||
                    state = KBC_STATE_NORMAL;
 | 
			
		||||
                    kbc_mouse(kbc, data, KBC_TIMEOUT);
 | 
			
		||||
                    break;
 | 
			
		||||
                case KBC_STATE_SECOND_PORT_INPUT:
 | 
			
		||||
                    printf("  write second port input\n");
 | 
			
		||||
                    DEBUG("  write second port input\n");
 | 
			
		||||
                    state = KBC_STATE_NORMAL;
 | 
			
		||||
                    ps2_write(&PS2_3, &data, 1);
 | 
			
		||||
                    break;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,8 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <arch/delay.h>
 | 
			
		||||
#include <board/kbc.h>
 | 
			
		||||
#include <board/kbscan.h>
 | 
			
		||||
#include <board/keymap.h>
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
 | 
			
		||||
bool kbscan_enabled = false;
 | 
			
		||||
 | 
			
		||||
@@ -50,7 +49,7 @@ void kbscan_event(void) {
 | 
			
		||||
                bool last_b = last & (1 << j);
 | 
			
		||||
                if (new_b != last_b) {
 | 
			
		||||
                    uint16_t key = keymap(i, j, kbscan_layer);
 | 
			
		||||
                    printf("KB %d, %d, %d = 0x%04X, %d\n", i, j, kbscan_layer, key, new_b);
 | 
			
		||||
                    TRACE("KB %d, %d, %d = 0x%04X, %d\n", i, j, kbscan_layer, key, new_b);
 | 
			
		||||
                    if (kbscan_enabled && key) {
 | 
			
		||||
                        kbc_scancode(&KBC, key, new_b);
 | 
			
		||||
                    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <board/keymap.h>
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
 | 
			
		||||
uint16_t __code KEYMAP[KM_OUT][KM_IN][KM_LAY] = {
 | 
			
		||||
    {   //  0
 | 
			
		||||
@@ -282,7 +281,7 @@ uint16_t keymap_translate(uint16_t key) {
 | 
			
		||||
        case K_RIGHT: return (K_E0 | 0x4D);
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            printf("keymap_translate: unknown %02X\n", key);
 | 
			
		||||
            WARN("keymap_translate: unknown %02X\n", key);
 | 
			
		||||
            return 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,30 +12,31 @@
 | 
			
		||||
#include <board/ps2.h>
 | 
			
		||||
#include <board/pwm.h>
 | 
			
		||||
#include <board/smbus.h>
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
#include <common/macro.h>
 | 
			
		||||
 | 
			
		||||
void external_0(void) __interrupt(0) {
 | 
			
		||||
    printf("external_0\n");
 | 
			
		||||
    TRACE("external_0\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timer_0(void) __interrupt(1) {
 | 
			
		||||
    printf("timer_0\n");
 | 
			
		||||
    TRACE("timer_0\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void external_1(void) __interrupt(2) {
 | 
			
		||||
    printf("external_1\n");
 | 
			
		||||
    TRACE("external_1\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timer_1(void) __interrupt(3) {
 | 
			
		||||
    printf("timer_1\n");
 | 
			
		||||
    TRACE("timer_1\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void serial(void) __interrupt(4) {
 | 
			
		||||
    printf("serial\n");
 | 
			
		||||
    TRACE("serial\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void timer_2(void) __interrupt(5) {
 | 
			
		||||
    printf("timer_2\n");
 | 
			
		||||
    TRACE("timer_2\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void init(void) {
 | 
			
		||||
@@ -122,7 +123,7 @@ void peci_event(void) {
 | 
			
		||||
 | 
			
		||||
        if (duty != DCR2) {
 | 
			
		||||
            DCR2 = duty;
 | 
			
		||||
            printf("PECI offset=%d, temp=%d = %d\n", offset, temp, duty);
 | 
			
		||||
            DEBUG("PECI offset=%d, temp=%d = %d\n", offset, temp, duty);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        // Default to 50% if there is an error
 | 
			
		||||
@@ -143,12 +144,12 @@ void ac_adapter() {
 | 
			
		||||
 | 
			
		||||
    // If there has been a change, print
 | 
			
		||||
    if (new != last) {
 | 
			
		||||
        printf("Power adapter ");
 | 
			
		||||
        DEBUG("Power adapter ");
 | 
			
		||||
        if (new) {
 | 
			
		||||
            printf("unplugged\n");
 | 
			
		||||
            DEBUG("unplugged\n");
 | 
			
		||||
            battery_charger_disable();
 | 
			
		||||
        } else {
 | 
			
		||||
            printf("plugged in\n");
 | 
			
		||||
            DEBUG("plugged in\n");
 | 
			
		||||
            battery_charger_enable();
 | 
			
		||||
        }
 | 
			
		||||
        battery_debug();
 | 
			
		||||
@@ -178,7 +179,11 @@ void pnp_write(uint8_t reg, uint8_t data) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pnp_enable() {
 | 
			
		||||
    printf("Enable PNP devices\n");
 | 
			
		||||
    DEBUG("Enable PNP devices\n");
 | 
			
		||||
 | 
			
		||||
    // Enable PMC
 | 
			
		||||
    pnp_write(0x07, 0x11);
 | 
			
		||||
    pnp_write(0x30, 0x01);
 | 
			
		||||
 | 
			
		||||
    // Enable KBC keyboard
 | 
			
		||||
    pnp_write(0x07, 0x06);
 | 
			
		||||
@@ -223,65 +228,61 @@ void power_button() {
 | 
			
		||||
        // Ensure press is not spurious
 | 
			
		||||
        delay_ms(100);
 | 
			
		||||
        if (gpio_get(&PWR_SW_N) != new) {
 | 
			
		||||
            printf("Spurious press\n");
 | 
			
		||||
            DEBUG("Spurious press\n");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        printf("Power switch press\n");
 | 
			
		||||
        DEBUG("Power switch press\n");
 | 
			
		||||
 | 
			
		||||
        power = !power;
 | 
			
		||||
 | 
			
		||||
        if (power) {
 | 
			
		||||
            printf("Enabling S5 power\n");
 | 
			
		||||
            DEBUG("Enabling S5 power\n");
 | 
			
		||||
 | 
			
		||||
            // We assume that VCCRTC has already been stable, RTCRST# is
 | 
			
		||||
            // already set, and VCCDSW_3P3 is stable
 | 
			
		||||
 | 
			
		||||
            // Enable battery charger - also provides correct power levels for
 | 
			
		||||
            // system boot sourced from the AC adapter
 | 
			
		||||
            // battery_charger_enable();
 | 
			
		||||
 | 
			
		||||
            // Make sure VCCDSW is stable for at least 10 ms (tPCH02)
 | 
			
		||||
            delay_ms(10 + 5);
 | 
			
		||||
 | 
			
		||||
            // Assert DSW_PWROK
 | 
			
		||||
            printf("PCH_DPWROK_EC: %d\n", power);
 | 
			
		||||
            TRACE("PCH_DPWROK_EC: %d\n", power);
 | 
			
		||||
            gpio_set(&PCH_DPWROK_EC, power);
 | 
			
		||||
 | 
			
		||||
            // Wait for SLP_SUS# (tPCH32)
 | 
			
		||||
            delay_ms(95);
 | 
			
		||||
            for (;;) {
 | 
			
		||||
                bool value = gpio_get(&SLP_SUS_N);
 | 
			
		||||
                printf("SLP_SUS_N: %d\n", value);
 | 
			
		||||
                TRACE("SLP_SUS_N: %d\n", value);
 | 
			
		||||
                if (value) break;
 | 
			
		||||
                delay_ms(1);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Enable VCCPRIM_* planes - must be enabled prior to USB power
 | 
			
		||||
            // in order to avoid leakage
 | 
			
		||||
            printf("VA_EC_EN: %d\n", power);
 | 
			
		||||
            TRACE("VA_EC_EN: %d\n", power);
 | 
			
		||||
            gpio_set(&VA_EC_EN, power);
 | 
			
		||||
 | 
			
		||||
            // Make sure VCCPRIM_* is stable for at least 10 ms (tPCH03)
 | 
			
		||||
            delay_ms(10 + 5);
 | 
			
		||||
 | 
			
		||||
            // Enable VDD5
 | 
			
		||||
            printf("DD_ON: %d\n", power);
 | 
			
		||||
            TRACE("DD_ON: %d\n", power);
 | 
			
		||||
            gpio_set(&DD_ON, power);
 | 
			
		||||
 | 
			
		||||
            // Assert RSMRST#
 | 
			
		||||
            printf("EC_RSMRST_N: %d\n", power);
 | 
			
		||||
            TRACE("EC_RSMRST_N: %d\n", power);
 | 
			
		||||
            gpio_set(&EC_RSMRST_N, power);
 | 
			
		||||
 | 
			
		||||
            // Allow processor to control SUSB# and SUSC#
 | 
			
		||||
            printf("EC_EN: %d\n", power);
 | 
			
		||||
            TRACE("EC_EN: %d\n", power);
 | 
			
		||||
            gpio_set(&EC_EN, power);
 | 
			
		||||
 | 
			
		||||
            // Assert SUS_ACK#
 | 
			
		||||
            printf("SUS_PWR_ACK: %d\n", power);
 | 
			
		||||
            TRACE("SUS_PWR_ACK: %d\n", power);
 | 
			
		||||
            gpio_set(&SUS_PWR_ACK, power);
 | 
			
		||||
 | 
			
		||||
            // printf("VR_ON: %d\n", power);
 | 
			
		||||
            // DEBUG("VR_ON: %d\n", power);
 | 
			
		||||
            // gpio_set(&VR_ON, power);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -291,35 +292,35 @@ void power_button() {
 | 
			
		||||
 | 
			
		||||
    if (!new && last) {
 | 
			
		||||
        if (power) {
 | 
			
		||||
            printf("Enabling S0 power\n");
 | 
			
		||||
            DEBUG("Enabling S0 power\n");
 | 
			
		||||
 | 
			
		||||
            // Wait for ALL_SYS_PWRGD
 | 
			
		||||
            for (;;) {
 | 
			
		||||
                bool value = gpio_get(&ALL_SYS_PWRGD);
 | 
			
		||||
                printf("ALL_SYS_PWRGD: %d\n", value);
 | 
			
		||||
                TRACE("ALL_SYS_PWRGD: %d\n", value);
 | 
			
		||||
                if (value) break;
 | 
			
		||||
                delay_ms(1);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Assert VR_ON
 | 
			
		||||
            printf("VR_ON: %d\n", power);
 | 
			
		||||
            TRACE("VR_ON: %d\n", power);
 | 
			
		||||
            gpio_set(&VR_ON, power);
 | 
			
		||||
 | 
			
		||||
            // Assert PM_PWEROK, PCH_PWROK will be asserted when H_VR_READY is
 | 
			
		||||
            printf("PM_PWROK: %d\n", power);
 | 
			
		||||
            TRACE("PM_PWROK: %d\n", power);
 | 
			
		||||
            gpio_set(&PM_PWROK, power);
 | 
			
		||||
 | 
			
		||||
            // OEM defined delay from ALL_SYS_PWRGD to SYS_PWROK - TODO
 | 
			
		||||
            delay_ms(10);
 | 
			
		||||
 | 
			
		||||
            // Assert PCH_PWEROK_EC, SYS_PWEROK will be asserted
 | 
			
		||||
            printf("PCH_PWROK_EC: %d\n", power);
 | 
			
		||||
            TRACE("PCH_PWROK_EC: %d\n", power);
 | 
			
		||||
            gpio_set(&PCH_PWROK_EC, power);
 | 
			
		||||
 | 
			
		||||
            // Wait for PLT_RST#
 | 
			
		||||
            for (;;) {
 | 
			
		||||
                bool value = gpio_get(&BUF_PLT_RST_N);
 | 
			
		||||
                printf("BUF_PLT_RST_N: %d\n", value);
 | 
			
		||||
                TRACE("BUF_PLT_RST_N: %d\n", value);
 | 
			
		||||
                if (value) break;
 | 
			
		||||
                delay_ms(1);
 | 
			
		||||
            }
 | 
			
		||||
@@ -327,66 +328,61 @@ void power_button() {
 | 
			
		||||
            // enable pnp devices
 | 
			
		||||
            pnp_enable();
 | 
			
		||||
        } else {
 | 
			
		||||
            printf("Disabling power\n");
 | 
			
		||||
            DEBUG("Disabling power\n");
 | 
			
		||||
 | 
			
		||||
            // De-assert SUS_ACK#
 | 
			
		||||
            printf("SUS_PWR_ACK: %d\n", power);
 | 
			
		||||
            TRACE("SUS_PWR_ACK: %d\n", power);
 | 
			
		||||
            gpio_set(&SUS_PWR_ACK, power);
 | 
			
		||||
 | 
			
		||||
            // De-assert PCH_PWEROK_EC, SYS_PWEROK will be de-asserted
 | 
			
		||||
            printf("PCH_PWROK_EC: %d\n", power);
 | 
			
		||||
            TRACE("PCH_PWROK_EC: %d\n", power);
 | 
			
		||||
            gpio_set(&PCH_PWROK_EC, power);
 | 
			
		||||
 | 
			
		||||
            // De-assert PM_PWEROK, PCH_PWROK will be de-asserted
 | 
			
		||||
            printf("PM_PWROK: %d\n", power);
 | 
			
		||||
            TRACE("PM_PWROK: %d\n", power);
 | 
			
		||||
            gpio_set(&PM_PWROK, power);
 | 
			
		||||
 | 
			
		||||
            // De-assert VR_ON
 | 
			
		||||
            printf("VR_ON: %d\n", power);
 | 
			
		||||
            TRACE("VR_ON: %d\n", power);
 | 
			
		||||
            gpio_set(&VR_ON, power);
 | 
			
		||||
 | 
			
		||||
            // Block processor from controlling SUSB# and SUSC#
 | 
			
		||||
            printf("EC_EN: %d\n", power);
 | 
			
		||||
            TRACE("EC_EN: %d\n", power);
 | 
			
		||||
            gpio_set(&EC_EN, power);
 | 
			
		||||
 | 
			
		||||
            // De-assert RSMRST#
 | 
			
		||||
            printf("EC_RSMRST_N: %d\n", power);
 | 
			
		||||
            TRACE("EC_RSMRST_N: %d\n", power);
 | 
			
		||||
            gpio_set(&EC_RSMRST_N, power);
 | 
			
		||||
 | 
			
		||||
            // Disable VDD5
 | 
			
		||||
            printf("DD_ON: %d\n", power);
 | 
			
		||||
            TRACE("DD_ON: %d\n", power);
 | 
			
		||||
            gpio_set(&DD_ON, power);
 | 
			
		||||
 | 
			
		||||
            // Wait a minimum of 400 ns (tPCH12)
 | 
			
		||||
            delay_ms(1);
 | 
			
		||||
 | 
			
		||||
            // Disable VCCPRIM_* planes
 | 
			
		||||
            printf("VA_EC_EN: %d\n", power);
 | 
			
		||||
            TRACE("VA_EC_EN: %d\n", power);
 | 
			
		||||
            gpio_set(&VA_EC_EN, power);
 | 
			
		||||
 | 
			
		||||
            // De-assert DSW_PWROK
 | 
			
		||||
            printf("PCH_DPWROK_EC: %d\n", power);
 | 
			
		||||
            TRACE("PCH_DPWROK_EC: %d\n", power);
 | 
			
		||||
            gpio_set(&PCH_DPWROK_EC, power);
 | 
			
		||||
 | 
			
		||||
            // Wait a minimum of 400 ns (tPCH14)
 | 
			
		||||
            delay_ms(1);
 | 
			
		||||
 | 
			
		||||
            // Disable battery charger
 | 
			
		||||
            // battery_charger_disable();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        printf("LED_PWR: %d\n", power);
 | 
			
		||||
        TRACE("LED_PWR: %d\n", power);
 | 
			
		||||
        gpio_set(&LED_PWR, power);
 | 
			
		||||
    } else if (new && !last) {
 | 
			
		||||
        printf("Power switch release\n");
 | 
			
		||||
        DEBUG("Power switch release\n");
 | 
			
		||||
 | 
			
		||||
        printf("SUSWARN_N: %d\n", gpio_get(&SUSWARN_N));
 | 
			
		||||
        printf("SUSC_N_PCH: %d\n", gpio_get(&SUSC_N_PCH));
 | 
			
		||||
        printf("SUSB_N_PCH: %d\n", gpio_get(&SUSB_N_PCH));
 | 
			
		||||
        printf("ALL_SYS_PWRGD: %d\n", gpio_get(&ALL_SYS_PWRGD));
 | 
			
		||||
        printf("BUF_PLT_RST_N: %d\n", gpio_get(&BUF_PLT_RST_N));
 | 
			
		||||
 | 
			
		||||
        // battery_debug();
 | 
			
		||||
        TRACE("SUSWARN_N: %d\n", gpio_get(&SUSWARN_N));
 | 
			
		||||
        TRACE("SUSC_N_PCH: %d\n", gpio_get(&SUSC_N_PCH));
 | 
			
		||||
        TRACE("SUSB_N_PCH: %d\n", gpio_get(&SUSB_N_PCH));
 | 
			
		||||
        TRACE("ALL_SYS_PWRGD: %d\n", gpio_get(&ALL_SYS_PWRGD));
 | 
			
		||||
        TRACE("BUF_PLT_RST_N: %d\n", gpio_get(&BUF_PLT_RST_N));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    last = new;
 | 
			
		||||
@@ -403,7 +399,7 @@ void touchpad_event(struct Ps2 * ps2) {
 | 
			
		||||
    *(ps2->status) = status;
 | 
			
		||||
    if (status & (1 << 3)) {
 | 
			
		||||
        uint8_t data = *(ps2->data);
 | 
			
		||||
        //printf("touchpad: %02X\n", data);
 | 
			
		||||
        TRACE("touchpad: %02X\n", data);
 | 
			
		||||
        kbc_mouse(&KBC, data, 1000);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -414,7 +410,7 @@ struct Gpio __code LED_AIRPLANE_N = GPIO(G, 6);
 | 
			
		||||
void main(void) {
 | 
			
		||||
    init();
 | 
			
		||||
 | 
			
		||||
    printf("\n");
 | 
			
		||||
    INFO("\n");
 | 
			
		||||
 | 
			
		||||
    static struct Gpio __code LED_BAT_CHG =     GPIO(A, 5);
 | 
			
		||||
    static struct Gpio __code LED_BAT_FULL =    GPIO(A, 6);
 | 
			
		||||
@@ -450,13 +446,13 @@ void main(void) {
 | 
			
		||||
 | 
			
		||||
    // Set the battery full LED (to know our firmware is loaded)
 | 
			
		||||
    gpio_set(&LED_BAT_FULL, true);
 | 
			
		||||
    printf("Hello from System76 EC for %s!\n", xstr(__BOARD__));
 | 
			
		||||
    INFO("Hello from System76 EC for %s!\n", xstr(__BOARD__));
 | 
			
		||||
 | 
			
		||||
    for(;;) {
 | 
			
		||||
        peci_event();
 | 
			
		||||
        ac_adapter();
 | 
			
		||||
        power_button();
 | 
			
		||||
        kbscan_event();
 | 
			
		||||
        //kbscan_event();
 | 
			
		||||
        touchpad_event(&PS2_3);
 | 
			
		||||
        kbc_event(&KBC);
 | 
			
		||||
        pmc_event(&PMC_1);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								src/common/include/common/debug.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/common/include/common/debug.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
#ifndef _COMMON_DEBUG_H
 | 
			
		||||
#define _COMMON_DEBUG_H
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#define LEVEL_TRACE 5
 | 
			
		||||
#define LEVEL_DEBUG 4
 | 
			
		||||
#define LEVEL_INFO 3
 | 
			
		||||
#define LEVEL_WARN 2
 | 
			
		||||
#define LEVEL_ERROR 1
 | 
			
		||||
#define LEVEL_NONE 0
 | 
			
		||||
 | 
			
		||||
// This is the user-configurable log level
 | 
			
		||||
#ifndef LEVEL
 | 
			
		||||
    #define LEVEL LEVEL_INFO
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if LEVEL >= LEVEL_TRACE
 | 
			
		||||
    #define TRACE(...) printf(__VA_ARGS__)
 | 
			
		||||
#else
 | 
			
		||||
    #define TRACE(...)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if LEVEL >= LEVEL_DEBUG
 | 
			
		||||
    #define DEBUG(...) printf(__VA_ARGS__)
 | 
			
		||||
#else
 | 
			
		||||
    #define DEBUG(...)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if LEVEL >= LEVEL_INFO
 | 
			
		||||
    #define INFO(...) printf(__VA_ARGS__)
 | 
			
		||||
#else
 | 
			
		||||
    #define INFO(...)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if LEVEL >= LEVEL_WARN
 | 
			
		||||
    #define WARN(...) printf(__VA_ARGS__)
 | 
			
		||||
#else
 | 
			
		||||
    #define WARN(...)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if LEVEL >= LEVEL_ERROR
 | 
			
		||||
    #define ERROR(...) printf(__VA_ARGS__)
 | 
			
		||||
#else
 | 
			
		||||
    #define ERROR(...)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // _COMMON_DEBUG_H
 | 
			
		||||
@@ -1,6 +1,5 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
#include <board/acpi.h>
 | 
			
		||||
#include <common/debug.h>
 | 
			
		||||
#include <ec/pmc.h>
 | 
			
		||||
 | 
			
		||||
#define PMC(NUM) { \
 | 
			
		||||
@@ -52,7 +51,7 @@ void pmc_event(struct Pmc * pmc) {
 | 
			
		||||
    if (sts & PMC_STS_IBF) {
 | 
			
		||||
        uint8_t data = pmc_read(pmc);
 | 
			
		||||
        if (sts & PMC_STS_CMD) {
 | 
			
		||||
            printf("pmc cmd: %02X\n", data);
 | 
			
		||||
            DEBUG("pmc cmd: %02X\n", data);
 | 
			
		||||
 | 
			
		||||
            state = PMC_STATE_DEFAULT;
 | 
			
		||||
            switch (data) {
 | 
			
		||||
@@ -63,22 +62,22 @@ void pmc_event(struct Pmc * pmc) {
 | 
			
		||||
                state = PMC_STATE_ACPI_WRITE;
 | 
			
		||||
                break;
 | 
			
		||||
            case 0x82:
 | 
			
		||||
                printf("  burst enable\n");
 | 
			
		||||
                DEBUG("  burst enable\n");
 | 
			
		||||
                // TODO: figure out what burst is
 | 
			
		||||
                pmc_write(pmc, 0x90, PMC_TIMEOUT);
 | 
			
		||||
                break;
 | 
			
		||||
            case 0x83:
 | 
			
		||||
                printf("  burst disable\n");
 | 
			
		||||
                DEBUG("  burst disable\n");
 | 
			
		||||
                // TODO: figure out what burst is
 | 
			
		||||
                break;
 | 
			
		||||
            case 0x84:
 | 
			
		||||
                printf("  SCI queue\n");
 | 
			
		||||
                DEBUG("  SCI queue\n");
 | 
			
		||||
                // TODO: queue is always empty
 | 
			
		||||
                pmc_write(pmc, 0, PMC_TIMEOUT);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            printf("pmc data: %02X\n", data);
 | 
			
		||||
            DEBUG("pmc data: %02X\n", data);
 | 
			
		||||
 | 
			
		||||
            switch (state) {
 | 
			
		||||
            case PMC_STATE_ACPI_READ:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user