Implement keyboard backlight on darp5/6
This commit is contained in:
parent
7a30eadebe
commit
11c15c2291
@ -1,6 +1,7 @@
|
||||
#include <board/acpi.h>
|
||||
#include <board/battery.h>
|
||||
#include <board/gpio.h>
|
||||
#include <board/kbled.h>
|
||||
#include <board/lid.h>
|
||||
#include <board/peci.h>
|
||||
#include <common/debug.h>
|
||||
@ -14,7 +15,25 @@ static uint8_t fdat = 0;
|
||||
static uint8_t fbuf[4] = { 0, 0, 0, 0 };
|
||||
|
||||
void fcommand(void) {
|
||||
// TODO
|
||||
switch (fcmd) {
|
||||
// Keyboard backlight
|
||||
case 0xCA:
|
||||
switch (fdat) {
|
||||
// Set LED color
|
||||
case 0x03:
|
||||
kbled_set_color(
|
||||
((uint32_t)fbuf[0]) |
|
||||
((uint32_t)fbuf[1] << 16) |
|
||||
((uint32_t)fbuf[2] << 8)
|
||||
);
|
||||
break;
|
||||
// Set LED brightness
|
||||
case 0x06:
|
||||
kbled_set(fbuf[0]);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t acpi_read(uint8_t addr) {
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include <arch/delay.h>
|
||||
#include <board/kbled.h>
|
||||
#include <common/macro.h>
|
||||
#include <ec/i2c.h>
|
||||
@ -5,72 +6,57 @@
|
||||
#define kbled_i2c_get(A, D, L) i2c_get(&I2C_KBLED, 0x68, A, D, L)
|
||||
#define kbled_i2c_set(A, D, L) i2c_set(&I2C_KBLED, 0x68, A, D, L)
|
||||
|
||||
static uint8_t __code levels[] = {
|
||||
0x00,
|
||||
0x80,
|
||||
0x90,
|
||||
0xA8,
|
||||
0xC0,
|
||||
0xFF
|
||||
};
|
||||
|
||||
void kbled_init(void) {
|
||||
i2c_reset(&I2C_KBLED, true);
|
||||
}
|
||||
|
||||
void kbled_reset(void) {
|
||||
kbled_set(0xFF);
|
||||
// Switch from sleep mode to normal mode
|
||||
uint8_t value = 0x01;
|
||||
kbled_i2c_set(0x00, &value, 1);
|
||||
|
||||
// Wait for normal mode
|
||||
delay_ms(1);
|
||||
|
||||
// Set brightness and color
|
||||
kbled_set_color(0xFFFFFF);
|
||||
kbled_set(0x00);
|
||||
|
||||
// Enable output of channel 0 - 8
|
||||
uint8_t value = 0xFF;
|
||||
value = 0xFF;
|
||||
kbled_i2c_set(0x14, &value, 1);
|
||||
value = 0xFF;
|
||||
kbled_i2c_set(0x15, &value, 1);
|
||||
value = 0x03;
|
||||
kbled_i2c_set(0x16, &value, 1);
|
||||
|
||||
// Exit sleep mode
|
||||
value = 0;
|
||||
kbled_i2c_set(0x00, &value, 1);
|
||||
}
|
||||
|
||||
uint8_t kbled_get(void) {
|
||||
uint8_t level;
|
||||
uint8_t raw = 0;
|
||||
kbled_i2c_get(0x12, &raw, 1);
|
||||
for (level = 0; level < ARRAY_SIZE(levels); level++) {
|
||||
if (raw <= levels[level]) {
|
||||
return level;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
kbled_i2c_get(0x12, &level, 1);
|
||||
return level;
|
||||
}
|
||||
|
||||
void kbled_set(uint8_t level) {
|
||||
uint8_t raw = 0;
|
||||
if (level < ARRAY_SIZE(levels)) {
|
||||
raw = levels[level];
|
||||
}
|
||||
kbled_i2c_set(0x12, &raw, 1);
|
||||
kbled_i2c_set(0x12, &level, 1);
|
||||
}
|
||||
|
||||
void kbled_set_color(uint32_t color) {
|
||||
// Set channel 0 - 2 to blue component
|
||||
uint8_t b = (uint8_t)(color);
|
||||
kbled_i2c_set(0x02, &b, 1);
|
||||
kbled_i2c_set(0x03, &b, 1);
|
||||
kbled_i2c_set(0x04, &b, 1);
|
||||
uint8_t value = (uint8_t)(color);
|
||||
kbled_i2c_set(0x02, &value, 1);
|
||||
kbled_i2c_set(0x03, &value, 1);
|
||||
kbled_i2c_set(0x04, &value, 1);
|
||||
|
||||
// Set channel 3 - 5 to green component
|
||||
uint8_t g = (uint8_t)(color >> 8);
|
||||
kbled_i2c_set(0x05, &g, 1);
|
||||
kbled_i2c_set(0x06, &g, 1);
|
||||
kbled_i2c_set(0x07, &g, 1);
|
||||
value = (uint8_t)(color >> 8);
|
||||
kbled_i2c_set(0x05, &value, 1);
|
||||
kbled_i2c_set(0x06, &value, 1);
|
||||
kbled_i2c_set(0x07, &value, 1);
|
||||
|
||||
// Set channel 6 - 8 to red component
|
||||
uint8_t r = (uint8_t)(color >> 16);
|
||||
kbled_i2c_set(0x08, &r, 1);
|
||||
kbled_i2c_set(0x09, &r, 1);
|
||||
kbled_i2c_set(0x0A, &r, 1);
|
||||
value = (uint8_t)(color >> 16);
|
||||
kbled_i2c_set(0x08, &value, 1);
|
||||
kbled_i2c_set(0x09, &value, 1);
|
||||
kbled_i2c_set(0x0A, &value, 1);
|
||||
}
|
||||
|
@ -13,8 +13,8 @@ LAYOUT(
|
||||
),
|
||||
LAYOUT(
|
||||
K_ESC, K_TOUCHPAD, KT_SCI | SCI_DISPLAY_TOGGLE, K_MUTE, K_F4, K_VOLUME_DOWN, K_VOLUME_UP, K_DISPLAY_MODE, KT_SCI | SCI_BRIGHTNESS_DOWN, KT_SCI | SCI_BRIGHTNESS_UP, KT_SCI | SCI_CAMERA_TOGGLE, KT_SCI | SCI_AIRPLANE_MODE, KT_SCI | SCI_SUSPEND, K_PRINT_SCREEN, K_INSERT, K_DEL, K_HOME, K_END, K_PGUP, K_PGDN,
|
||||
K_PLAY_PAUSE, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0, K_MINUS, K_EQUALS, K_BKSP, K_NUM_LOCK, K_NUM_SLASH, K_NUM_ASTERISK, K_NUM_MINUS,
|
||||
K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_U, K_I, K_O, K_P, K_BRACE_OPEN, K_BRACE_CLOSE, K_BACKSLASH, K_NUM_7, K_NUM_8, K_NUM_9, K_NUM_PLUS,
|
||||
K_PLAY_PAUSE, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0, K_MINUS, K_EQUALS, K_BKSP, K_NUM_LOCK, KT_SCI_EXTRA | SCI_EXTRA_KBD_COLOR, KT_SCI_EXTRA | SCI_EXTRA_KBD_TOGGLE, KT_SCI_EXTRA | SCI_EXTRA_KBD_DOWN,
|
||||
K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_U, K_I, K_O, K_P, K_BRACE_OPEN, K_BRACE_CLOSE, K_BACKSLASH, K_NUM_7, K_NUM_8, K_NUM_9, KT_SCI_EXTRA | SCI_EXTRA_KBD_UP,
|
||||
K_CAPS, K_A, K_S, K_D, K_F, K_G, K_H, K_J, K_K, K_L, K_SEMICOLON, K_QUOTE, K_ENTER, K_NUM_4, K_NUM_5, K_NUM_6,
|
||||
K_LEFT_SHIFT, K_Z, K_X, K_C, K_V, K_B, K_N, K_M, K_COMMA, K_PERIOD, K_SLASH, K_RIGHT_SHIFT, K_UP, K_NUM_1, K_NUM_2, K_NUM_3, K_NUM_ENTER,
|
||||
K_LEFT_CTRL, KT_FN, K_LEFT_SUPER, K_LEFT_ALT, K_SPACE, K_RIGHT_ALT, K_APP, K_RIGHT_CTRL, K_LEFT, K_DOWN, K_RIGHT, K_NUM_0, K_NUM_PERIOD
|
||||
|
@ -13,8 +13,8 @@ LAYOUT(
|
||||
),
|
||||
LAYOUT(
|
||||
K_ESC, K_TOUCHPAD, KT_SCI | SCI_DISPLAY_TOGGLE, K_MUTE, K_F4, K_VOLUME_DOWN, K_VOLUME_UP, K_DISPLAY_MODE, KT_SCI | SCI_BRIGHTNESS_DOWN, KT_SCI | SCI_BRIGHTNESS_UP, KT_SCI | SCI_CAMERA_TOGGLE, KT_SCI | SCI_AIRPLANE_MODE, KT_SCI | SCI_SUSPEND, K_PRINT_SCREEN, K_INSERT, K_DEL, K_HOME, K_END, K_PGUP, K_PGDN,
|
||||
K_PLAY_PAUSE, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0, K_MINUS, K_EQUALS, K_DEL, K_NUM_LOCK, K_NUM_SLASH, K_NUM_ASTERISK, K_NUM_MINUS,
|
||||
K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_PGUP, K_HOME, K_PGDN, K_P, K_BRACE_OPEN, K_BRACE_CLOSE, K_BACKSLASH, K_NUM_7, K_NUM_8, K_NUM_9, K_NUM_PLUS,
|
||||
K_PLAY_PAUSE, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_0, K_MINUS, K_EQUALS, K_DEL, K_NUM_LOCK, KT_SCI_EXTRA | SCI_EXTRA_KBD_COLOR, KT_SCI_EXTRA | SCI_EXTRA_KBD_TOGGLE, KT_SCI_EXTRA | SCI_EXTRA_KBD_DOWN,
|
||||
K_TAB, K_Q, K_W, K_E, K_R, K_T, K_Y, K_PGUP, K_HOME, K_PGDN, K_P, K_BRACE_OPEN, K_BRACE_CLOSE, K_BACKSLASH, K_NUM_7, K_NUM_8, K_NUM_9, KT_SCI_EXTRA | SCI_EXTRA_KBD_UP,
|
||||
KT_FN, K_A, K_S, K_D, K_F, K_G, K_LEFT, K_DOWN, K_UP, K_RIGHT, K_BKSP, K_DEL, K_ENTER, K_NUM_4, K_NUM_5, K_NUM_6,
|
||||
K_LEFT_SHIFT, K_Z, K_X, K_C, K_V, K_B, K_END, K_M, K_COMMA, K_PERIOD, K_SLASH, K_RIGHT_SHIFT, K_UP, K_NUM_1, K_NUM_2, K_NUM_3, K_NUM_ENTER,
|
||||
K_LEFT_CTRL, KT_FN, K_LEFT_ALT, K_LEFT_SUPER, K_ESC, KT_FN, K_RIGHT_ALT, K_RIGHT_CTRL, K_LEFT, K_DOWN, K_RIGHT, K_NUM_0, K_NUM_PERIOD
|
||||
|
@ -37,7 +37,11 @@ uint16_t keymap_translate(uint16_t key);
|
||||
// Extra SCI layer for keyboard backlight control
|
||||
#define KT_SCI_EXTRA (0x8000)
|
||||
|
||||
#define SCI_EXTRA_KBD_COLOR (0x80)
|
||||
#define SCI_EXTRA_KBD_DOWN (0x81)
|
||||
#define SCI_EXTRA_KBD_UP (0x82)
|
||||
#define SCI_EXTRA_KBD_BKL (0x8A)
|
||||
#define SCI_EXTRA_KBD_TOGGLE (0x9F)
|
||||
|
||||
// See http://www.techtoys.com.hk/Downloads/Download/Microchip/PS2_driver/ScanCode.pdf
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user