Implement airplane mode LED
This commit is contained in:
		| @@ -57,6 +57,13 @@ uint8_t acpi_read(uint8_t addr) { | ||||
|         ACPI_16(0x2E, battery_remaining_capacity); | ||||
|         ACPI_16(0x32, battery_voltage); | ||||
|  | ||||
|         // Airplane mode LED | ||||
|         case 0xD9: | ||||
|             if (!gpio_get(&LED_AIRPLANE_N)) { | ||||
|                 data |= (1 << 6); | ||||
|             } | ||||
|             break; | ||||
|  | ||||
|         // Set size of flash (from old firmware) | ||||
|         ACPI_8 (0xE5, 0x80); | ||||
|     } | ||||
| @@ -74,5 +81,10 @@ void acpi_write(uint8_t addr, uint8_t data) { | ||||
|         case 0x03: | ||||
|             lid_wake = (bool)(data & (1 << 2)); | ||||
|             break; | ||||
|  | ||||
|         // Airplane mode LED | ||||
|         case 0xD9: | ||||
|             gpio_set(&LED_AIRPLANE_N, !(bool)(data & (1 << 6))); | ||||
|             break; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -12,6 +12,7 @@ struct Gpio __code DD_ON =          GPIO(E, 4); | ||||
| struct Gpio __code EC_EN =          GPIO(E, 1); | ||||
| struct Gpio __code EC_RSMRST_N =    GPIO(E, 5); | ||||
| struct Gpio __code LED_ACIN =       GPIO(C, 7); | ||||
| struct Gpio __code LED_AIRPLANE_N = GPIO(G, 6); | ||||
| struct Gpio __code LED_BAT_CHG =    GPIO(A, 5); | ||||
| struct Gpio __code LED_BAT_FULL =   GPIO(A, 6); | ||||
| struct Gpio __code LED_PWR =        GPIO(A, 7); | ||||
| @@ -48,7 +49,7 @@ void gpio_init() { | ||||
|     GPDRD = (1 << 5) | (1 << 4) | (1 << 3); | ||||
|     GPDRE = 0; | ||||
|     GPDRF = 0xC0; // (1 << 7) | (1 << 6) | ||||
|     GPDRG = 0; | ||||
|     GPDRG = (1 << 6); | ||||
|     GPDRH = 0; | ||||
|     GPDRI = 0; | ||||
|     GPDRJ = 0; | ||||
|   | ||||
| @@ -23,6 +23,7 @@ extern struct Gpio __code DD_ON; | ||||
| extern struct Gpio __code EC_EN; | ||||
| extern struct Gpio __code EC_RSMRST_N; | ||||
| extern struct Gpio __code LED_ACIN; | ||||
| extern struct Gpio __code LED_AIRPLANE_N; | ||||
| extern struct Gpio __code LED_BAT_CHG; | ||||
| extern struct Gpio __code LED_BAT_FULL; | ||||
| extern struct Gpio __code LED_PWR; | ||||
|   | ||||
| @@ -113,17 +113,11 @@ void lid_event(void) { | ||||
|     last = new; | ||||
| } | ||||
|  | ||||
| struct Gpio __code LED_SSD_N = GPIO(G, 6); | ||||
| struct Gpio __code LED_AIRPLANE_N = GPIO(G, 6); | ||||
|  | ||||
| void main(void) { | ||||
|     init(); | ||||
|  | ||||
|     INFO("\n"); | ||||
|  | ||||
|     // Set the battery full LED (to know our firmware is loading) | ||||
|     gpio_set(&LED_BAT_CHG, true); | ||||
|  | ||||
| #if GPIO_DEBUG | ||||
|     gpio_debug(); | ||||
| #endif | ||||
| @@ -145,8 +139,6 @@ void main(void) { | ||||
|     gpio_set(&SMI_N, true); | ||||
|     gpio_set(&SWI_N, true); | ||||
|  | ||||
|     // Set the battery full LED (to know our firmware is loaded) | ||||
|     gpio_set(&LED_BAT_FULL, true); | ||||
|     INFO("Hello from System76 EC for %s!\n", xstr(__BOARD__)); | ||||
|  | ||||
|     for(main_cycle = 0; ; main_cycle++) { | ||||
|   | ||||
| @@ -57,6 +57,13 @@ uint8_t acpi_read(uint8_t addr) { | ||||
|         ACPI_16(0x2E, battery_remaining_capacity); | ||||
|         ACPI_16(0x32, battery_voltage); | ||||
|  | ||||
|         // Airplane mode LED | ||||
|         case 0xD9: | ||||
|             if (!gpio_get(&LED_AIRPLANE_N)) { | ||||
|                 data |= (1 << 6); | ||||
|             } | ||||
|             break; | ||||
|  | ||||
|         // Set size of flash (from old firmware) | ||||
|         ACPI_8 (0xE5, 0x80); | ||||
|     } | ||||
| @@ -74,5 +81,10 @@ void acpi_write(uint8_t addr, uint8_t data) { | ||||
|         case 0x03: | ||||
|             lid_wake = (bool)(data & (1 << 2)); | ||||
|             break; | ||||
|  | ||||
|         // Airplane mode LED | ||||
|         case 0xD9: | ||||
|             gpio_set(&LED_AIRPLANE_N, !(bool)(data & (1 << 6))); | ||||
|             break; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -12,6 +12,7 @@ struct Gpio __code DD_ON =          GPIO(E, 4); | ||||
| struct Gpio __code EC_EN =          GPIO(E, 1); | ||||
| struct Gpio __code EC_RSMRST_N =    GPIO(E, 5); | ||||
| struct Gpio __code LED_ACIN =       GPIO(C, 7); | ||||
| struct Gpio __code LED_AIRPLANE_N = GPIO(G, 6); | ||||
| struct Gpio __code LED_BAT_CHG =    GPIO(A, 5); | ||||
| struct Gpio __code LED_BAT_FULL =   GPIO(A, 6); | ||||
| struct Gpio __code LED_PWR =        GPIO(A, 7); | ||||
| @@ -48,7 +49,7 @@ void gpio_init() { | ||||
|     GPDRD = (1 << 5) | (1 << 4) | (1 << 3); | ||||
|     GPDRE = 0; | ||||
|     GPDRF = 0xC0; // (1 << 7) | (1 << 6) | ||||
|     GPDRG = 0; | ||||
|     GPDRG = (1 << 6); | ||||
|     GPDRH = 0; | ||||
|     GPDRI = 0; | ||||
|     GPDRJ = 0; | ||||
|   | ||||
| @@ -23,6 +23,7 @@ extern struct Gpio __code DD_ON; | ||||
| extern struct Gpio __code EC_EN; | ||||
| extern struct Gpio __code EC_RSMRST_N; | ||||
| extern struct Gpio __code LED_ACIN; | ||||
| extern struct Gpio __code LED_AIRPLANE_N; | ||||
| extern struct Gpio __code LED_BAT_CHG; | ||||
| extern struct Gpio __code LED_BAT_FULL; | ||||
| extern struct Gpio __code LED_PWR; | ||||
|   | ||||
| @@ -113,17 +113,11 @@ void lid_event(void) { | ||||
|     last = new; | ||||
| } | ||||
|  | ||||
| struct Gpio __code LED_SSD_N = GPIO(G, 6); | ||||
| struct Gpio __code LED_AIRPLANE_N = GPIO(G, 6); | ||||
|  | ||||
| void main(void) { | ||||
|     init(); | ||||
|  | ||||
|     INFO("\n"); | ||||
|  | ||||
|     // Set the battery full LED (to know our firmware is loading) | ||||
|     gpio_set(&LED_BAT_CHG, true); | ||||
|  | ||||
| #if GPIO_DEBUG | ||||
|     gpio_debug(); | ||||
| #endif | ||||
| @@ -145,8 +139,6 @@ void main(void) { | ||||
|     gpio_set(&SMI_N, true); | ||||
|     gpio_set(&SWI_N, true); | ||||
|  | ||||
|     // Set the battery full LED (to know our firmware is loaded) | ||||
|     gpio_set(&LED_BAT_FULL, true); | ||||
|     INFO("Hello from System76 EC for %s!\n", xstr(__BOARD__)); | ||||
|  | ||||
|     for(main_cycle = 0; ; main_cycle++) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user