blob: 929dbfa90e27f7a3b65cd89bc537fce98be57d4d [file] [log] [blame]
/* Copyright 2018 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef __CROS_EC_KEYBOARD_BACKLIGHT_H
#define __CROS_EC_KEYBOARD_BACKLIGHT_H
/**
* If GPIO_EN_KEYBOARD_BACKLIGHT is defined, this GPIO will be set when
* the the keyboard backlight is enabled or disabled. This GPIO is used
* to enable or disable the power to the keyboard backlight circuitry.
* GPIO_EN_KEYBOARD_BACKLIGHT must be active high.
*/
struct kblight_conf {
const struct kblight_drv *drv;
};
struct kblight_drv {
/**
* Initialize the keyboard backlight controller
* @return EC_SUCCESS or EC_ERROR_*
*/
int (*init)(void);
/**
* Set the brightness
* @param percent
* @return EC_SUCCESS or EC_ERROR_*
*/
int (*set)(int percent);
/**
* Enable or disable keyboard backlight
* @param enable: 1=Enable, 0=Disable.
* @return EC_SUCCESS or EC_ERROR_*
*/
int (*enable)(int enable);
/**
* Get the enabled state.
* @return 1=Enable, 0=Disable, -1=Failed to read enabled state.
*/
int (*get_enabled)(void);
};
/**
* Initialize keyboard backlight per board
*/
__override_proto void board_kblight_init(void);
/**
* Shutdown keyboard backlight
*/
__override_proto void board_kblight_shutdown(void);
/**
* Set keyboard backlight brightness
*
* @param percent Brightness in percentage
* @return EC_SUCCESS or EC_ERROR_*
*/
int kblight_set(int percent);
/**
* Get keyboard backlight brightness
*
* @return Brightness in percentage
*/
int kblight_get(void);
/**
* Enable or disable keyboard backlight
*
* @param enable: 1=Enable, 0=Disable.
* @return EC_SUCCESS or EC_ERROR_*
*/
int kblight_enable(int enable);
/**
* Register keyboard backlight controller
*
* @param drv: Driver of keyboard backlight controller
* @return EC_SUCCESS or EC_ERROR_*
*/
int kblight_register(const struct kblight_drv *drv);
extern const struct kblight_drv kblight_pwm;
#ifdef TEST_BUILD
/**
* @brief Get internal backlight enabled state. The value reported by
* kblight_get_enabled() can be outdated due to a deferred function call
* being required to update it. Using this function in tests improves
* reliability and reduces the need to sleep.
*
* @return uint8_t 0 if disabled, 1 otherwise.
*/
uint8_t kblight_get_current_enable(void);
#endif /* TEST_BUILD */
#endif /* __CROS_EC_KEYBOARD_BACKLIGHT_H */