diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2022-04-07 23:06:11 +0000 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-04-12 19:40:10 +0000 |
commit | 36e6bbfe34443a3100e07db8479195cd9baa6d39 (patch) | |
tree | 9d738b71d07c037ab0ff2fda144f6e0756111087 | |
parent | ddfb436d7199bd186c2f806da5e83b1bf439672f (diff) | |
download | chrome-ec-36e6bbfe34443a3100e07db8479195cd9baa6d39.tar.gz |
RGBKBD: Separate init and enable
Currently, enable is included in init. This patch separates them so that
an RGB unit can be enabled or disabled separately.
BUG=b:228525798,b:226215987
BRANCH=None
TEST=Taniks
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Change-Id: I6f4d3b64f35f0cd30b6b58944d377932bbf5ef2e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3582324
Reviewed-by: Parth Malkan <parthmalkan@google.com>
-rw-r--r-- | common/rgb_keyboard.c | 79 | ||||
-rw-r--r-- | driver/led/aw20198.c | 5 | ||||
-rw-r--r-- | driver/led/is31fl3743b.c | 5 | ||||
-rw-r--r-- | include/ec_commands.h | 2 |
4 files changed, 74 insertions, 17 deletions
diff --git a/common/rgb_keyboard.c b/common/rgb_keyboard.c index 29f5563463..f581d5ae1a 100644 --- a/common/rgb_keyboard.c +++ b/common/rgb_keyboard.c @@ -235,6 +235,75 @@ void rgbkbd_init_lookup_table(void) __overridable void board_enable_rgb_keyboard(bool enable) {} +static int rgbkbd_init(void) +{ + int rv = EC_SUCCESS; + int e, i; + bool updated = false; + + for (i = 0; i < rgbkbd_count; i++) { + struct rgbkbd *ctx = &rgbkbds[i]; + + if (ctx->state >= RGBKBD_STATE_INITIALIZED) + continue; + + e = ctx->cfg->drv->init(ctx); + if (e) { + CPRINTS("Failed to init GRID%d (%d)", i, e); + rv = e; + continue; + } + + ctx->state = RGBKBD_STATE_INITIALIZED; + updated = true; + + e = ctx->cfg->drv->set_scale(ctx, 0, 0x80, get_grid_size(ctx)); + if (e) { + CPRINTS("Failed to set scale of GRID%d (%d)", i, e); + rv = e; + } + } + + if (updated) + CPRINTS("Initialized (%d)", rv); + + /* Return EC_SUCCESS or the last error. */ + return rv; +} + +static int rgbkbd_enable(int enable) +{ + int rv = EC_SUCCESS; + int e, i; + bool updated = false; + + for (i = 0; i < rgbkbd_count; i++) { + struct rgbkbd *ctx = &rgbkbds[i]; + + if (ctx->state >= RGBKBD_STATE_ENABLED && enable) + continue; + + e = ctx->cfg->drv->enable(ctx, enable); + if (e) { + CPRINTS("Failed to %s GRID%d (%d)", + enable ? "enable" : "disable", i, e); + rv = e; + continue; + } + + ctx->state = enable ? + RGBKBD_STATE_ENABLED : RGBKBD_STATE_DISABLED; + updated = true; + } + + if (updated) + CPRINTS("%s (%d)", enable ? "Enabled" : "Disabled", rv); + + /* Return EC_SUCCESS or the last error. */ + return rv; +} + + void rgbkbd_task(void *u) { uint32_t event; @@ -243,17 +312,13 @@ void rgbkbd_task(void *u) board_enable_rgb_keyboard(true); rgbkbd_init_lookup_table(); - + rgbkbd_init(); + rgbkbd_enable(1); for (i = 0; i < rgbkbd_count; i++) { struct rgbkbd *ctx = &rgbkbds[i]; - rv = ctx->cfg->drv->init(ctx); - if (rv) - CPRINTS("Failed to init GRID%d (%d)", i, rv); rv = ctx->cfg->drv->set_gcc(ctx, 0x80); - rv |= ctx->cfg->drv->set_scale(ctx, 0, 0x80, - get_grid_size(ctx)); if (rv) - CPRINTS("Failed to set GCC or scale (%d)", rv); + CPRINTS("Failed to set GCC (%d)", rv); } while (1) { diff --git a/driver/led/aw20198.c b/driver/led/aw20198.c index 5537556ffa..1c6bc4933c 100644 --- a/driver/led/aw20198.c +++ b/driver/led/aw20198.c @@ -143,11 +143,6 @@ static int aw20198_init(struct rgbkbd *ctx) rv = aw20198_reset(ctx); msleep(3); - rv |= aw20198_enable(ctx, true); - if (rv) { - CPRINTS("Failed to enable or reset (%d)", rv); - return rv; - } /* Read chip ID, assuming page is still 0. */ rv = aw20198_read(ctx, AW20198_REG_RSTN, &id); diff --git a/driver/led/is31fl3743b.c b/driver/led/is31fl3743b.c index f1a8833318..5539eee9b0 100644 --- a/driver/led/is31fl3743b.c +++ b/driver/led/is31fl3743b.c @@ -164,11 +164,6 @@ static int is31fl3743b_init(struct rgbkbd *ctx) rv = is31fl3743b_reset(ctx); msleep(3); - rv |= is31fl3743b_enable(ctx, true); - if (rv) { - CPRINTS("Failed to enable or reset (%d)", rv); - return rv; - } if (IS_ENABLED(CONFIG_RGB_KEYBOARD_DEBUG)) { uint8_t val; diff --git a/include/ec_commands.h b/include/ec_commands.h index df5fee3250..1aff487bbe 100644 --- a/include/ec_commands.h +++ b/include/ec_commands.h @@ -7094,6 +7094,8 @@ enum rgbkbd_state { RGBKBD_STATE_RESET = 0, /* RGB keyboard is initialized but not enabled. */ RGBKBD_STATE_INITIALIZED, + /* RGB keyboard is disabled. */ + RGBKBD_STATE_DISABLED, /* RGB keyboard is enabled and ready to receive a command. */ RGBKBD_STATE_ENABLED, |