summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Bettis <jbettis@google.com>2021-10-27 13:23:00 -0600
committerCommit Bot <commit-bot@chromium.org>2021-11-03 20:08:20 +0000
commit0b202341702f75303238b8972f4c5decc0ae30e4 (patch)
treeccd0c5b1076863b01eb60c9ee66f2e03812cfa59
parentfd1ac67b8cbaf12b245c4eb0e9544705cb5d3a65 (diff)
downloadchrome-ec-0b202341702f75303238b8972f4c5decc0ae30e4.tar.gz
ec: Implement keyboard backlight get enabled
Prior to crrev/c/1051027, the EC_CMD_PWM_GET_KEYBOARD_BACKLIGHT host cmd returned an enabled flag, which the FAFT test firmware_ECLidSwitch depends on. That test, however, was broken, and wasn't actually running the kb backlight portion of the test on any models, so no one ever noticed that the HC and the kblight ec console commands don't return the enabled status. Add a get_enabled function to the kblight driver struct, and add an implementation for each existing driver. BRANCH=None BUG=b:194908032 TEST=CP'd to leona branch, build EC, flash board kblight 100 ; lidclose ; kblight ; lidopen ; kblight Verified the cmd returned enabled: 1 when lights were on Change-Id: Ia6ab025901869933cf70bb49f3bf2def2987b7b3 Signed-off-by: Jeremy Bettis <jbettis@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3248888 Tested-by: Jeremy Bettis <jbettis@chromium.org> Auto-Submit: Jeremy Bettis <jbettis@chromium.org> Commit-Queue: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r--common/keyboard_backlight.c17
-rw-r--r--common/pwm_kblight.c6
-rw-r--r--driver/ioexpander/it8801.c6
-rw-r--r--driver/led/lm3509.c12
-rw-r--r--include/keyboard_backlight.h6
5 files changed, 45 insertions, 2 deletions
diff --git a/common/keyboard_backlight.c b/common/keyboard_backlight.c
index d3d9fbe6d3..3c90b96cc5 100644
--- a/common/keyboard_backlight.c
+++ b/common/keyboard_backlight.c
@@ -65,6 +65,18 @@ int kblight_enable(int enable)
return kblight.drv->enable(enable);
}
+int kblight_get_enabled(void)
+{
+#ifdef GPIO_EN_KEYBOARD_BACKLIGHT
+ if (!gpio_get_level(GPIO_EN_KEYBOARD_BACKLIGHT))
+ return 0;
+#endif
+ if (kblight.drv && kblight.drv->get_enabled)
+ return kblight.drv->get_enabled();
+ return -1;
+}
+
+
int kblight_register(const struct kblight_drv *drv)
{
kblight.drv = drv;
@@ -125,7 +137,8 @@ static int cc_kblight(int argc, char **argv)
if (kblight_enable(i > 0))
return EC_ERROR_PARAM1;
}
- ccprintf("Keyboard backlight: %d%%\n", kblight_get());
+ ccprintf("Keyboard backlight: %d%% enabled: %d\n",
+ kblight_get(), kblight_get_enabled());
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(kblight, cc_kblight,
@@ -138,7 +151,7 @@ hc_get_keyboard_backlight(struct host_cmd_handler_args *args)
struct ec_response_pwm_get_keyboard_backlight *r = args->response;
r->percent = kblight_get();
- r->enabled = 1; /* Deprecated */
+ r->enabled = kblight_get_enabled();
args->response_size = sizeof(*r);
return EC_RES_SUCCESS;
diff --git a/common/pwm_kblight.c b/common/pwm_kblight.c
index 4967d36df5..3389023ea3 100644
--- a/common/pwm_kblight.c
+++ b/common/pwm_kblight.c
@@ -38,9 +38,15 @@ static int kblight_pwm_enable(int enable)
return EC_SUCCESS;
}
+static int kblight_pwm_get_enabled(void)
+{
+ return pwm_get_enabled(kblight_pwm_ch);
+}
+
const struct kblight_drv kblight_pwm = {
.init = kblight_pwm_init,
.set = kblight_pwm_set,
.get = kblight_pwm_get,
.enable = kblight_pwm_enable,
+ .get_enabled = kblight_pwm_get_enabled,
};
diff --git a/driver/ioexpander/it8801.c b/driver/ioexpander/it8801.c
index 96070074fb..b7f6d41774 100644
--- a/driver/ioexpander/it8801.c
+++ b/driver/ioexpander/it8801.c
@@ -655,6 +655,11 @@ static int it8801_kblight_enable(int enable)
return EC_SUCCESS;
}
+static int it8801_kblight_get_enabled(void)
+{
+ return it8801_pwm_get_enabled(it8801_kblight_pwm_ch);
+}
+
static int it8801_kblight_set_brightness(int percent)
{
it8801_pwm_set_duty(it8801_kblight_pwm_ch, percent);
@@ -678,6 +683,7 @@ const struct kblight_drv kblight_it8801 = {
.set = it8801_kblight_set_brightness,
.get = it8801_kblight_get_brightness,
.enable = it8801_kblight_enable,
+ .get_enabled = it8801_kblight_get_enabled,
};
#endif
#endif /* CONFIG_IO_EXPANDER_IT8801_PWM */
diff --git a/driver/led/lm3509.c b/driver/led/lm3509.c
index 7c20c43ac2..fbd783a42e 100644
--- a/driver/led/lm3509.c
+++ b/driver/led/lm3509.c
@@ -54,6 +54,17 @@ static int lm3509_power(int enable)
return lm3509_write(LM3509_REG_GP, enable ? 0x7 : 0);
}
+static int lm3509_get_power(void)
+{
+ int rv, val;
+
+ rv = lm3509_read(LM3509_REG_GP, &val);
+ if (rv)
+ return -1;
+ /* Bit 0: Enable MAIN. Bit 1: Enable SUB/FB */
+ return (val & 0x3) == 0x3 ? 1 : 0;
+}
+
static int lm3509_set_brightness(int percent)
{
/* We don't need to read/mask/write BMAIN because bit6 and 7 are non
@@ -82,4 +93,5 @@ const struct kblight_drv kblight_lm3509 = {
.set = lm3509_set_brightness,
.get = lm3509_get_brightness,
.enable = lm3509_power,
+ .get_enabled = lm3509_get_power,
};
diff --git a/include/keyboard_backlight.h b/include/keyboard_backlight.h
index e0a1f4d30e..96bf69aaae 100644
--- a/include/keyboard_backlight.h
+++ b/include/keyboard_backlight.h
@@ -43,6 +43,12 @@ struct kblight_drv {
* @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);
};
/**