Skip to content

Commit 57a23ea

Browse files
authored
Merge pull request #363 from FrameworkComputer/fp_led_control
[modify] add fp breath brightness control
2 parents e8116c7 + 36965f9 commit 57a23ea

1 file changed

Lines changed: 46 additions & 10 deletions

File tree

board/hx20/led.c

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,17 @@
2828
#define LED_ON_TICKS 5
2929

3030
/* at 8-bit mode one cycle = 8ms */
31-
#define BREATH_ON_LENGTH 62
31+
#define BREATH_ON_LENGTH_HIGH 62
32+
#define BREATH_ON_LENGTH_MID 72
33+
#define BREATH_ON_LENGTH_LOW 90
3234
#define BREATH_OFF_LENGTH 200
3335

3436
#define FP_LED_HIGH 55
3537
#define FP_LED_MEDIUM 40
3638
#define FP_LED_LOW 15
3739

40+
#define FP_BREATH_LOW 20
41+
3842
const enum ec_led_id supported_led_ids[] = {
3943
EC_LED_ID_LEFT_LED,
4044
EC_LED_ID_RIGHT_LED,
@@ -44,6 +48,7 @@ const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
4448

4549
int power_button_enable = 0;
4650
static uint8_t led_level;
51+
int breath_led_length;
4752

4853
struct pwm_led led_color_map[EC_LED_COLOR_COUNT] = {
4954
/* Red, Green, Blue */
@@ -67,7 +72,7 @@ struct pwm_led pwr_led_color_map[EC_LED_COLOR_COUNT] = {
6772

6873
struct pwm_led breath_led_color_map[EC_LED_COLOR_COUNT] = {
6974
/* White, Green, Red */
70-
[EC_LED_COLOR_WHITE] = { 50, 0, 0 },
75+
[EC_LED_COLOR_WHITE] = { FP_LED_HIGH, 0, 0 },
7176
};
7277

7378
struct pwm_led pwm_leds[CONFIG_LED_PWM_COUNT] = {
@@ -120,7 +125,7 @@ void set_pwr_led_color(enum pwm_led_id id, int color)
120125
led->set_duty(led->ch2, duty.ch2);
121126
}
122127

123-
void enable_pwr_breath(enum pwm_led_id id, int color, uint8_t enable)
128+
void enable_pwr_breath(enum pwm_led_id id, int color, int breath_length, uint8_t enable)
124129
{
125130
struct pwm_led duty = { 0 };
126131
const struct pwm_led *led = &pwm_leds[id];
@@ -136,11 +141,11 @@ void enable_pwr_breath(enum pwm_led_id id, int color, uint8_t enable)
136141
}
137142

138143
if (led->ch0 != (enum pwm_channel)PWM_LED_NO_CHANNEL)
139-
bbled_enable(led->ch0, duty.ch0, BREATH_ON_LENGTH, BREATH_OFF_LENGTH, enable);
144+
bbled_enable(led->ch0, duty.ch0, breath_length, BREATH_OFF_LENGTH, enable);
140145
if (led->ch1 != (enum pwm_channel)PWM_LED_NO_CHANNEL)
141-
bbled_enable(led->ch1, duty.ch1, BREATH_ON_LENGTH, BREATH_OFF_LENGTH, enable);
146+
bbled_enable(led->ch1, duty.ch1, breath_length, BREATH_OFF_LENGTH, enable);
142147
if (led->ch2 != (enum pwm_channel)PWM_LED_NO_CHANNEL)
143-
bbled_enable(led->ch2, duty.ch2, BREATH_ON_LENGTH, BREATH_OFF_LENGTH, enable);
148+
bbled_enable(led->ch2, duty.ch2, breath_length, BREATH_OFF_LENGTH, enable);
144149
}
145150

146151
void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
@@ -282,14 +287,14 @@ static void led_set_power(void)
282287
/* don't light up when at lid close */
283288
if (!lid_is_open()) {
284289
set_pwr_led_color(PWM_LED2, -1);
285-
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, 0);
290+
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, breath_led_length, 0);
286291
return;
287292
}
288293

289294
if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND))
290-
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, 1);
295+
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, breath_led_length, 1);
291296
else
292-
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, 0);
297+
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, breath_led_length, 0);
293298

294299
if (chipset_in_state(CHIPSET_STATE_ON) | power_button_enable) {
295300
if (charge_prevent_power_on(0))
@@ -321,6 +326,7 @@ static void led_tick(void)
321326
static void led_configure(void)
322327
{
323328
int i;
329+
uint8_t breath_led_level = FP_LED_HIGH;
324330

325331
/*Initialize PWM channels*/
326332
for (i = 0; i < PWM_CH_COUNT; i++) {
@@ -329,8 +335,29 @@ static void led_configure(void)
329335

330336
system_get_bbram(STSTEM_BBRAM_IDX_FP_LED_LEVEL, &led_level);
331337

332-
if (led_level)
338+
339+
if (led_level) {
340+
switch (led_level) {
341+
case FP_LED_BRIGHTNESS_HIGH:
342+
breath_led_level = FP_LED_HIGH;
343+
breath_led_length = BREATH_ON_LENGTH_HIGH;
344+
break;
345+
case FP_LED_BRIGHTNESS_MEDIUM:
346+
breath_led_level = FP_LED_MEDIUM;
347+
breath_led_length = BREATH_ON_LENGTH_MID;
348+
break;
349+
case FP_LED_BRIGHTNESS_LOW:
350+
breath_led_level = FP_BREATH_LOW;
351+
breath_led_length = BREATH_ON_LENGTH_LOW;
352+
break;
353+
default:
354+
break;
355+
}
356+
breath_led_color_map[EC_LED_COLOR_WHITE].ch0 = breath_led_level;
333357
pwr_led_color_map[EC_LED_COLOR_WHITE].ch0 = led_level;
358+
} else
359+
breath_led_length = BREATH_ON_LENGTH_HIGH;
360+
334361

335362
led_tick();
336363
}
@@ -348,6 +375,7 @@ static enum ec_status fp_led_level_control(struct host_cmd_handler_args *args)
348375
{
349376
const struct ec_params_fp_led_control *p = args->params;
350377
struct ec_response_fp_led_level *r = args->response;
378+
uint8_t breath_led_level;
351379

352380
if (p->get_led_level) {
353381
system_get_bbram(STSTEM_BBRAM_IDX_FP_LED_LEVEL, &r->level);
@@ -358,19 +386,27 @@ static enum ec_status fp_led_level_control(struct host_cmd_handler_args *args)
358386
switch (p->set_led_level) {
359387
case FP_LED_BRIGHTNESS_HIGH:
360388
led_level = FP_LED_HIGH;
389+
breath_led_level = FP_LED_HIGH;
390+
breath_led_length = BREATH_ON_LENGTH_HIGH;
361391
break;
362392
case FP_LED_BRIGHTNESS_MEDIUM:
363393
led_level = FP_LED_MEDIUM;
394+
breath_led_level = FP_LED_MEDIUM;
395+
breath_led_length = BREATH_ON_LENGTH_MID;
364396
break;
365397
case FP_LED_BRIGHTNESS_LOW:
366398
led_level = FP_LED_LOW;
399+
breath_led_level = FP_BREATH_LOW;
400+
breath_led_length = BREATH_ON_LENGTH_LOW;
367401
break;
368402
default:
369403
return EC_RES_INVALID_PARAM;
370404
break;
371405
}
372406

373407
system_set_bbram(STSTEM_BBRAM_IDX_FP_LED_LEVEL, led_level);
408+
409+
breath_led_color_map[EC_LED_COLOR_WHITE].ch0 = breath_led_level;
374410
pwr_led_color_map[EC_LED_COLOR_WHITE].ch0 = led_level;
375411

376412
return EC_RES_SUCCESS;

0 commit comments

Comments
 (0)