Skip to content

Commit c80e8c1

Browse files
committed
[modify] add fp breath brightness control
Signed-off-by: Leo_Tsai <LeoCX_Tsai@compal.com>
1 parent 054bdb6 commit c80e8c1

1 file changed

Lines changed: 41 additions & 9 deletions

File tree

board/hx20/led.c

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
4444

4545
int power_button_enable = 0;
4646
static uint8_t led_level;
47+
int breath_led_length;
4748

4849
struct pwm_led led_color_map[EC_LED_COLOR_COUNT] = {
4950
/* Red, Green, Blue */
@@ -67,7 +68,7 @@ struct pwm_led pwr_led_color_map[EC_LED_COLOR_COUNT] = {
6768

6869
struct pwm_led breath_led_color_map[EC_LED_COLOR_COUNT] = {
6970
/* White, Green, Red */
70-
[EC_LED_COLOR_WHITE] = { 50, 0, 0 },
71+
[EC_LED_COLOR_WHITE] = { FP_LED_HIGH, 0, 0 },
7172
};
7273

7374
struct pwm_led pwm_leds[CONFIG_LED_PWM_COUNT] = {
@@ -120,7 +121,7 @@ void set_pwr_led_color(enum pwm_led_id id, int color)
120121
led->set_duty(led->ch2, duty.ch2);
121122
}
122123

123-
void enable_pwr_breath(enum pwm_led_id id, int color, uint8_t enable)
124+
void enable_pwr_breath(enum pwm_led_id id, int color, int breath_length, uint8_t enable)
124125
{
125126
struct pwm_led duty = { 0 };
126127
const struct pwm_led *led = &pwm_leds[id];
@@ -136,11 +137,11 @@ void enable_pwr_breath(enum pwm_led_id id, int color, uint8_t enable)
136137
}
137138

138139
if (led->ch0 != (enum pwm_channel)PWM_LED_NO_CHANNEL)
139-
bbled_enable(led->ch0, duty.ch0, BREATH_ON_LENGTH, BREATH_OFF_LENGTH, enable);
140+
bbled_enable(led->ch0, duty.ch0, breath_length, BREATH_OFF_LENGTH, enable);
140141
if (led->ch1 != (enum pwm_channel)PWM_LED_NO_CHANNEL)
141-
bbled_enable(led->ch1, duty.ch1, BREATH_ON_LENGTH, BREATH_OFF_LENGTH, enable);
142+
bbled_enable(led->ch1, duty.ch1, breath_length, BREATH_OFF_LENGTH, enable);
142143
if (led->ch2 != (enum pwm_channel)PWM_LED_NO_CHANNEL)
143-
bbled_enable(led->ch2, duty.ch2, BREATH_ON_LENGTH, BREATH_OFF_LENGTH, enable);
144+
bbled_enable(led->ch2, duty.ch2, breath_length, BREATH_OFF_LENGTH, enable);
144145
}
145146

146147
void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
@@ -282,14 +283,14 @@ static void led_set_power(void)
282283
/* don't light up when at lid close */
283284
if (!lid_is_open()) {
284285
set_pwr_led_color(PWM_LED2, -1);
285-
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, 0);
286+
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, breath_led_length, 0);
286287
return;
287288
}
288289

289290
if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND))
290-
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, 1);
291+
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, breath_led_length, 1);
291292
else
292-
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, 0);
293+
enable_pwr_breath(PWM_LED2, EC_LED_COLOR_WHITE, breath_led_length, 0);
293294

294295
if (chipset_in_state(CHIPSET_STATE_ON) | power_button_enable) {
295296
if (charge_prevent_power_on(0))
@@ -321,6 +322,7 @@ static void led_tick(void)
321322
static void led_configure(void)
322323
{
323324
int i;
325+
uint8_t breath_led_level = FP_LED_HIGH;
324326

325327
/*Initialize PWM channels*/
326328
for (i = 0; i < PWM_CH_COUNT; i++) {
@@ -329,8 +331,29 @@ static void led_configure(void)
329331

330332
system_get_bbram(STSTEM_BBRAM_IDX_FP_LED_LEVEL, &led_level);
331333

332-
if (led_level)
334+
335+
if (led_level) {
336+
switch (led_level) {
337+
case FP_LED_BRIGHTNESS_HIGH:
338+
breath_led_level = FP_LED_HIGH;
339+
breath_led_length = BREATH_ON_LENGTH;
340+
break;
341+
case FP_LED_BRIGHTNESS_MEDIUM:
342+
breath_led_level = FP_LED_MEDIUM;
343+
breath_led_length = 72;
344+
break;
345+
case FP_LED_BRIGHTNESS_LOW:
346+
breath_led_level = 20;
347+
breath_led_length = 90;
348+
break;
349+
default:
350+
break;
351+
}
352+
breath_led_color_map[EC_LED_COLOR_WHITE].ch0 = breath_led_level;
333353
pwr_led_color_map[EC_LED_COLOR_WHITE].ch0 = led_level;
354+
} else
355+
breath_led_length = BREATH_ON_LENGTH;
356+
334357

335358
led_tick();
336359
}
@@ -348,6 +371,7 @@ static enum ec_status fp_led_level_control(struct host_cmd_handler_args *args)
348371
{
349372
const struct ec_params_fp_led_control *p = args->params;
350373
struct ec_response_fp_led_level *r = args->response;
374+
uint8_t breath_led_level;
351375

352376
if (p->get_led_level) {
353377
system_get_bbram(STSTEM_BBRAM_IDX_FP_LED_LEVEL, &r->level);
@@ -358,19 +382,27 @@ static enum ec_status fp_led_level_control(struct host_cmd_handler_args *args)
358382
switch (p->set_led_level) {
359383
case FP_LED_BRIGHTNESS_HIGH:
360384
led_level = FP_LED_HIGH;
385+
breath_led_level = FP_LED_HIGH;
386+
breath_led_length = BREATH_ON_LENGTH;
361387
break;
362388
case FP_LED_BRIGHTNESS_MEDIUM:
363389
led_level = FP_LED_MEDIUM;
390+
breath_led_level = FP_LED_MEDIUM;
391+
breath_led_length = 72;
364392
break;
365393
case FP_LED_BRIGHTNESS_LOW:
366394
led_level = FP_LED_LOW;
395+
breath_led_level = 20;
396+
breath_led_length = 90;
367397
break;
368398
default:
369399
return EC_RES_INVALID_PARAM;
370400
break;
371401
}
372402

373403
system_set_bbram(STSTEM_BBRAM_IDX_FP_LED_LEVEL, led_level);
404+
405+
breath_led_color_map[EC_LED_COLOR_WHITE].ch0 = breath_led_level;
374406
pwr_led_color_map[EC_LED_COLOR_WHITE].ch0 = led_level;
375407

376408
return EC_RES_SUCCESS;

0 commit comments

Comments
 (0)