diff options
Diffstat (limited to 'chip/lm4/pwm_kblight.c')
-rw-r--r-- | chip/lm4/pwm_kblight.c | 79 |
1 files changed, 15 insertions, 64 deletions
diff --git a/chip/lm4/pwm_kblight.c b/chip/lm4/pwm_kblight.c index 25ad3dc45b..f76f0399e1 100644 --- a/chip/lm4/pwm_kblight.c +++ b/chip/lm4/pwm_kblight.c @@ -31,35 +31,6 @@ struct pwm_kbd_state { uint8_t pad0, pad1; /* Pad to multiple of 4 bytes. */ }; -void pwm_enable_keyboard_backlight(int enable) -{ - if (enable) - LM4_FAN_FANCTL |= (1 << FAN_CH_KBLIGHT); - else - LM4_FAN_FANCTL &= ~(1 << FAN_CH_KBLIGHT); -} - -int pwm_get_keyboard_backlight_enabled(void) -{ - return (LM4_FAN_FANCTL & (1 << FAN_CH_KBLIGHT)) ? 1 : 0; -} - -int pwm_get_keyboard_backlight(void) -{ - return ((LM4_FAN_FANCMD(FAN_CH_KBLIGHT) >> 16) * 100 + - MAX_PWM / 2) / MAX_PWM; -} - -void pwm_set_keyboard_backlight(int percent) -{ - if (percent < 0) - percent = 0; - else if (percent > 100) - percent = 100; - - LM4_FAN_FANCMD(FAN_CH_KBLIGHT) = ((percent * MAX_PWM + 50) / 100) << 16; -} - /*****************************************************************************/ /* Console commands */ @@ -70,10 +41,10 @@ static int command_kblight(int argc, char **argv) int i = strtoi(argv[1], &e, 0); if (*e) return EC_ERROR_PARAM1; - pwm_set_keyboard_backlight(i); + pwm_set_duty(PWM_CH_KBLIGHT, i); } - ccprintf("Keyboard backlight: %d%%\n", pwm_get_keyboard_backlight()); + ccprintf("Keyboard backlight: %d%%\n", pwm_get_duty(PWM_CH_KBLIGHT)); return EC_SUCCESS; } DECLARE_CONSOLE_COMMAND(kblight, command_kblight, @@ -88,8 +59,8 @@ int pwm_command_get_keyboard_backlight(struct host_cmd_handler_args *args) { struct ec_response_pwm_get_keyboard_backlight *r = args->response; - r->percent = pwm_get_keyboard_backlight(); - r->enabled = pwm_get_keyboard_backlight_enabled(); + r->percent = pwm_get_duty(PWM_CH_KBLIGHT); + r->enabled = pwm_get_enabled(PWM_CH_KBLIGHT); args->response_size = sizeof(*r); return EC_RES_SUCCESS; @@ -102,7 +73,7 @@ int pwm_command_set_keyboard_backlight(struct host_cmd_handler_args *args) { const struct ec_params_pwm_set_keyboard_backlight *p = args->params; - pwm_set_keyboard_backlight(p->percent); + pwm_set_duty(PWM_CH_KBLIGHT, p->percent); return EC_RES_SUCCESS; } @@ -118,39 +89,19 @@ static void pwm_kblight_init(void) const struct pwm_kbd_state *prev; int version, size; - /* Enable the fan module and delay a few clocks */ - LM4_SYSTEM_RCGCFAN = 1; - clock_wait_cycles(3); - - /* Configure GPIOs */ + /* Configure GPIO */ gpio_config_module(MODULE_PWM_KBLIGHT, 1); - /* Disable all fans */ - LM4_FAN_FANCTL = 0; - - /* - * Configure keyboard backlight: - * 0x0000 = bit 15 = auto-restart - * 0x0000 = bit 14 = slow acceleration - * 0x0000 = bits 13:11 = no hysteresis - * 0x0000 = bits 10:8 = start period (2<<0) edges - * 0x0000 = bits 7:6 = no fast start - * 0x0000 = bits 5:4 = average 4 edges when calculating RPM - * 0x0000 = bits 3:2 = 4 pulses per revolution - * 0x0001 = bit 0 = manual control - */ - LM4_FAN_FANCH(FAN_CH_KBLIGHT) = 0x0001; - prev = (const struct pwm_kbd_state *) system_get_jump_tag(PWMKBD_SYSJUMP_TAG, &version, &size); if (prev && version == PWM_HOOK_VERSION && size == sizeof(*prev)) { /* Restore previous state. */ - pwm_enable_keyboard_backlight(prev->kblight_en); - pwm_set_keyboard_backlight(prev->kblight_percent); + pwm_enable(PWM_CH_KBLIGHT, prev->kblight_en); + pwm_set_duty(PWM_CH_KBLIGHT, prev->kblight_percent); } else { /* Enable keyboard backlight control, turned down */ - pwm_set_keyboard_backlight(0); - pwm_enable_keyboard_backlight(1); + pwm_set_duty(PWM_CH_KBLIGHT, 0); + pwm_enable(PWM_CH_KBLIGHT, 1); } } DECLARE_HOOK(HOOK_INIT, pwm_kblight_init, HOOK_PRIO_DEFAULT); @@ -159,8 +110,8 @@ static void pwm_kblight_preserve_state(void) { struct pwm_kbd_state state; - state.kblight_en = pwm_get_keyboard_backlight_enabled(); - state.kblight_percent = pwm_get_keyboard_backlight(); + state.kblight_en = pwm_get_enabled(PWM_CH_KBLIGHT); + state.kblight_percent = pwm_get_duty(PWM_CH_KBLIGHT); system_add_jump_tag(PWMKBD_SYSJUMP_TAG, PWM_HOOK_VERSION, sizeof(state), &state); @@ -169,18 +120,18 @@ DECLARE_HOOK(HOOK_SYSJUMP, pwm_kblight_preserve_state, HOOK_PRIO_DEFAULT); static void pwm_kblight_suspend(void) { - pwm_set_keyboard_backlight(0); + pwm_set_duty(PWM_CH_KBLIGHT, 0); } DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, pwm_kblight_suspend, HOOK_PRIO_DEFAULT); static void pwm_kblight_shutdown(void) { - pwm_set_keyboard_backlight(0); + pwm_set_duty(PWM_CH_KBLIGHT, 0); } DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, pwm_kblight_shutdown, HOOK_PRIO_DEFAULT); static void pwm_kblight_lid_change(void) { - pwm_enable_keyboard_backlight(lid_is_open()); + pwm_enable(PWM_CH_KBLIGHT, lid_is_open()); } DECLARE_HOOK(HOOK_LID_CHANGE, pwm_kblight_lid_change, HOOK_PRIO_DEFAULT); |