Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/board/system76/addw1/board.mk
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ EC=it8587e
KEYMAP?=default
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c

# Set keyboard LED mechanism
KBLED=rgb_pwm

# Set discrete GPU I2C bus
CFLAGS+=-DI2C_DGPU=I2C_1

Expand Down
3 changes: 3 additions & 0 deletions src/board/system76/addw2/board.mk
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ EC=it5570e
KEYMAP?=default
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c

# Set keyboard LED mechanism
KBLED=rgb_pwm

# Set discrete GPU I2C bus
CFLAGS+=-DI2C_DGPU=I2C_1

Expand Down
36 changes: 0 additions & 36 deletions src/board/system76/addw2/kbled.c

This file was deleted.

3 changes: 3 additions & 0 deletions src/board/system76/bonw14/board.mk
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ EC=it5570e
KEYMAP?=default
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c

# Set keyboard LED mechanism
KBLED=bonw14

# Set discrete GPU I2C bus
CFLAGS+=-DI2C_DGPU=I2C_1

Expand Down
4 changes: 4 additions & 0 deletions src/board/system76/common/common.mk
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ CFLAGS+=-I$(SYSTEM76_COMMON_DIR)/include
CHARGER?=bq24780s
SRC+=$(SYSTEM76_COMMON_DIR)/charger/$(CHARGER).c

# Add kbled
KBLED?=none
SRC+=$(SYSTEM76_COMMON_DIR)/kbled/$(KBLED).c

# Add scratch ROM
include $(SYSTEM76_COMMON_DIR)/scratch/scratch.mk

Expand Down
2 changes: 2 additions & 0 deletions src/board/system76/common/include/board/kbled.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
void kbled_init(void);
void kbled_reset(void);
uint8_t kbled_get(void);
uint8_t kbled_max(void);
void kbled_set(uint8_t level);
uint32_t kbled_get_color(void);
void kbled_set_color(uint32_t color);

// Provided by common code
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,13 @@ void kbled_reset(void) {
kbled_set(0x00);
}

uint8_t kbled_get(void) {
return 0;
}
// Keep the following functions for compatibility - they are set via USB HID
uint8_t kbled_get(void) { /*Always off*/ return 0; }

void kbled_set(uint8_t level) {
// Keep function for compatibility - this is set via USB HID
level = level;
}
uint8_t kbled_max(void) { /*Always off*/ return 0; }

void kbled_set_color(uint32_t color) {
// Keep function for compatibility - this is set via USB HID
color = color;
}
void kbled_set(uint8_t level) { /*Fix unused variable*/ level = level; }

uint32_t kbled_get_color(void) { /*Always black*/ return 0; }

void kbled_set_color(uint32_t color) { /*Fix unused variable*/ color = color; }
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,31 @@ uint8_t kbled_get(void) {
return level;
}

uint8_t kbled_max(void) {
return 255;
}

void kbled_set(uint8_t level) {
kbled_i2c_set(0x12, &level, 1);
}

uint32_t kbled_get_color(void) {
// Get blue component from channel 0
uint8_t value;
kbled_i2c_get(0x02, &value, 1);
uint32_t color = (uint32_t)value;

// Get green component from channel 3
kbled_i2c_get(0x05, &value, 1);
color |= ((uint32_t)value) << 8;

// Get red component from channel 6
kbled_i2c_get(0x08, &value, 1);
color |= ((uint32_t)value) << 16;

return color;
}

void kbled_set_color(uint32_t color) {
// Set channel 0 - 2 to blue component
uint8_t value = (uint8_t)(color);
Expand Down
17 changes: 17 additions & 0 deletions src/board/system76/common/kbled/none.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: GPL-3.0-only

#include <board/kbled.h>

void kbled_init(void) {}

void kbled_reset(void) {}

uint8_t kbled_get(void) { /*Always off*/ return 0; }

uint8_t kbled_max(void) { /*Always off*/ return 0; }

void kbled_set(uint8_t level) { /*Fix unused variable*/ level = level; }

uint32_t kbled_get_color(void) { /*Always black*/ return 0; }

void kbled_set_color(uint32_t color) { /*Fix unused variable*/ color = color; }
Original file line number Diff line number Diff line change
Expand Up @@ -39,24 +39,45 @@ uint8_t kbled_get(void) {
return level;
}

uint8_t kbled_max(void) {
return 255;
}

void kbled_set(uint8_t level) {
kbled_i2c_set(0x12, &level, 1);
}

uint32_t kbled_get_color(void) {
// Get blue component
uint8_t value;
kbled_i2c_get(0x02, &value, 1);
uint32_t color = (uint32_t)value;

// Get green component
kbled_i2c_get(0x03, &value, 1);
color |= ((uint32_t)value) << 8;

// Get red component
kbled_i2c_get(0x04, &value, 1);
color |= ((uint32_t)value) << 16;

return color;
}

void kbled_set_color(uint32_t color) {
// Set blue component
uint8_t value = (uint8_t)(color);
kbled_i2c_set(0x02, &value, 1);
kbled_i2c_set(0x05, &value, 1);
kbled_i2c_set(0x08, &value, 1);

// Set red component
// Set green component
value = (uint8_t)(color >> 8);
kbled_i2c_set(0x03, &value, 1);
kbled_i2c_set(0x06, &value, 1);
kbled_i2c_set(0x09, &value, 1);

// Set green component
// Set red component
value = (uint8_t)(color >> 16);
kbled_i2c_set(0x04, &value, 1);
kbled_i2c_set(0x07, &value, 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,28 @@ uint8_t kbled_get(void) {
return DCR0;
}

uint8_t kbled_max(void) {
return 255;
}

void kbled_set(uint8_t level) {
// Set PWM for power
DCR0 = level;
}

uint32_t kbled_get_color(void) {
// Get PWM of blue component
uint32_t color = (uint32_t)DCR7;

// Get PWM of green component
color |= ((uint32_t)DCR6) << 8;

// Get PWM of red component
color |= ((uint32_t)DCR5) << 16;

return color;
}

void kbled_set_color(uint32_t color) {
// Set PWM for blue component
DCR7 = (uint8_t)(color);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
#include <common/macro.h>
#include <ec/dac.h>

#define KBLED_DAC 2
#define KBLED_DACDAT DACDAT2
#if !defined(KBLED_DAC)
#error "KBLED_DAC must be defined"
#endif

#define KBLED_DACDAT xconcat(DACDAT, KBLED_DAC)

static uint8_t __code levels[] = {
0x00,
Expand Down Expand Up @@ -37,6 +40,10 @@ uint8_t kbled_get(void) {
return 0;
}

uint8_t kbled_max(void) {
return ARRAY_SIZE(levels) - 1;
}

void kbled_set(uint8_t level) {
uint8_t raw = 0;
if (level < ARRAY_SIZE(levels)) {
Expand All @@ -45,4 +52,6 @@ void kbled_set(uint8_t level) {
KBLED_DACDAT = raw;
}

uint32_t kbled_get_color(void) { /* Always white */ return 0xFFFFFF; }

void kbled_set_color(uint32_t color) { /*Fix unused variable*/ color = color; }
61 changes: 61 additions & 0 deletions src/board/system76/common/smfi.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

#ifndef __SCRATCH__
#include <board/scratch.h>
#include <board/kbled.h>
#include <board/keymap.h>
#endif
#include <board/smfi.h>
Expand Down Expand Up @@ -183,6 +184,54 @@ static enum Result cmd_keymap_set(void) {
return RES_ERR;
}
}

static enum Result cmd_led_get_value(void) {
uint8_t index = smfi_cmd[SMFI_CMD_DATA];
if (index == CMD_LED_INDEX_ALL) {
smfi_cmd[SMFI_CMD_DATA + 1] = kbled_get();
smfi_cmd[SMFI_CMD_DATA + 2] = kbled_max();
return RES_OK;
} else {
return RES_ERR;
}
}

static enum Result cmd_led_set_value(void) {
uint8_t index = smfi_cmd[SMFI_CMD_DATA];
if (index == CMD_LED_INDEX_ALL) {
kbled_set(smfi_cmd[SMFI_CMD_DATA + 1]);
return RES_OK;
} else {
return RES_ERR;
}
}

static enum Result cmd_led_get_color(void) {
uint8_t index = smfi_cmd[SMFI_CMD_DATA];
if (index == CMD_LED_INDEX_ALL) {
uint32_t color = kbled_get_color();
smfi_cmd[SMFI_CMD_DATA + 1] = (uint8_t)(color >> 16);
smfi_cmd[SMFI_CMD_DATA + 2] = (uint8_t)(color >> 8);
smfi_cmd[SMFI_CMD_DATA + 3] = (uint8_t)(color >> 0);
return RES_OK;
} else {
return RES_ERR;
}
}

static enum Result cmd_led_set_color(void) {
uint8_t index = smfi_cmd[SMFI_CMD_DATA];
if (index == CMD_LED_INDEX_ALL) {
kbled_set_color(
(((uint32_t)smfi_cmd[SMFI_CMD_DATA + 1]) << 16) |
(((uint32_t)smfi_cmd[SMFI_CMD_DATA + 2]) << 8) |
(((uint32_t)smfi_cmd[SMFI_CMD_DATA + 3]) << 0)
);
return RES_OK;
} else {
return RES_ERR;
}
}
#endif // !defined(__SCRATCH__)

#if defined(__SCRATCH__)
Expand Down Expand Up @@ -296,6 +345,18 @@ void smfi_event(void) {
case CMD_KEYMAP_SET:
smfi_cmd[SMFI_CMD_RES] = cmd_keymap_set();
break;
case CMD_LED_GET_VALUE:
smfi_cmd[SMFI_CMD_RES] = cmd_led_get_value();
break;
case CMD_LED_SET_VALUE:
smfi_cmd[SMFI_CMD_RES] = cmd_led_set_value();
break;
case CMD_LED_GET_COLOR:
smfi_cmd[SMFI_CMD_RES] = cmd_led_get_color();
break;
case CMD_LED_SET_COLOR:
smfi_cmd[SMFI_CMD_RES] = cmd_led_set_color();
break;
#endif // !defined(__SCRATCH__)
case CMD_SPI:
smfi_cmd[SMFI_CMD_RES] = cmd_spi();
Expand Down
7 changes: 4 additions & 3 deletions src/board/system76/darp5/board.mk
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ EC=it8587e
KEYMAP?=default
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c

# Set keyboard LED mechanism
KBLED=darp5
CFLAGS+=-DI2C_KBLED=I2C_1

# Set battery I2C bus
CFLAGS+=-DI2C_SMBUS=I2C_0

# Set keyboard LED I2C bus
CFLAGS+=-DI2C_KBLED=I2C_1

# Set touchpad PS2 bus
CFLAGS+=-DPS2_TOUCHPAD=PS2_3

Expand Down
3 changes: 3 additions & 0 deletions src/board/system76/darp7/board.mk
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ CFLAGS+=-DEC_ESPI=1
KEYMAP?=default
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c

# Set keyboard LED mechanism
KBLED=rgb_pwm

# Set battery I2C bus
CFLAGS+=-DI2C_SMBUS=I2C_4

Expand Down
Loading