summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2015-09-09 15:04:39 -0700
committerchrome-bot <chrome-bot@chromium.org>2015-09-10 12:35:37 -0700
commit8900884cad3b34d4716c7ed262d60f8a8547b63b (patch)
tree643e9e42a19480d3cfb7c1a1618e85ba4d1f789b
parentb0c82fb8a8ae50a500c0d41552ac07d90c72c4ad (diff)
downloadchrome-ec-8900884cad3b34d4716c7ed262d60f8a8547b63b.tar.gz
als: Disable task when host is not running
If the ALS is not enabled in S3/S5 states then it will generate errors when trying to read so should be gated. This could be done with a check for chipset_state or adding a new CONFIG_ALS_POWER_GPIO to check. However the ALS is also not needed when the host is in S3/S5 yet the task continues to run in the background every 1 second. This commit adds a new task enable/disable hook to disable the task when the system is suspended and enable the task when it is resumed. In order to fit this new task in glados the als console command is guarded by a new config option. Since this is not a very frequently used/needed console command it is disabled by default. And finally the kunimitsu and strago boards try to enable ALS but they never actually enabled the ALS task so this new code was failing to build because TASK_ID_ALS did not exist. Also samus was enabling it but as TASK_NOTEST so tests will fail, though they are disabled globally on samus. BUG=chrome-os-partner:43493 BRANCH=none TEST=enable ALS on glados and successfully build and use it, also successfully build EC and tests for kunimitsu, strago, and samus which are the other boards that use the ALS task. Change-Id: I192940d7f306a1663c7cb789c313151bbb5f2b90 Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/298156 Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--board/kunimitsu/ec.tasklist1
-rw-r--r--board/samus/ec.tasklist2
-rw-r--r--board/strago/ec.tasklist1
-rw-r--r--common/als.c29
-rw-r--r--include/config.h1
5 files changed, 31 insertions, 3 deletions
diff --git a/board/kunimitsu/ec.tasklist b/board/kunimitsu/ec.tasklist
index 175351e326..beeba5c264 100644
--- a/board/kunimitsu/ec.tasklist
+++ b/board/kunimitsu/ec.tasklist
@@ -18,6 +18,7 @@
*/
#define CONFIG_TASK_LIST \
TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \
+ TASK_ALWAYS(ALS, als_task, NULL, TASK_STACK_SIZE) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, TASK_STACK_SIZE) \
TASK_ALWAYS(USB_CHG_P1, usb_charger_task, NULL, TASK_STACK_SIZE) \
TASK_ALWAYS(CHARGER, charger_task, NULL, LARGER_TASK_STACK_SIZE) \
diff --git a/board/samus/ec.tasklist b/board/samus/ec.tasklist
index 8dd915028a..3013bacf53 100644
--- a/board/samus/ec.tasklist
+++ b/board/samus/ec.tasklist
@@ -18,7 +18,7 @@
*/
#define CONFIG_TASK_LIST \
TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \
- TASK_NOTEST(ALS, als_task, NULL, TASK_STACK_SIZE) \
+ TASK_ALWAYS(ALS, als_task, NULL, TASK_STACK_SIZE) \
TASK_NOTEST(LIGHTBAR, lightbar_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(CHARGER, charger_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(EXTPOWER, extpower_task, NULL, TASK_STACK_SIZE) \
diff --git a/board/strago/ec.tasklist b/board/strago/ec.tasklist
index c2bb27f0c6..2e75973b9b 100644
--- a/board/strago/ec.tasklist
+++ b/board/strago/ec.tasklist
@@ -18,6 +18,7 @@
*/
#define CONFIG_TASK_LIST \
TASK_ALWAYS(HOOKS, hook_task, NULL, TASK_STACK_SIZE) \
+ TASK_ALWAYS(ALS, als_task, NULL, TASK_STACK_SIZE) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, TASK_STACK_SIZE) \
TASK_ALWAYS(CHARGER, charger_task, NULL, TASK_STACK_SIZE) \
TASK_NOTEST(MOTIONSENSE, motion_sense_task, NULL, LARGER_TASK_STACK_SIZE) \
diff --git a/common/als.c b/common/als.c
index fac97e9944..17bff66961 100644
--- a/common/als.c
+++ b/common/als.c
@@ -10,11 +10,16 @@
#include "als.h"
#include "common.h"
#include "console.h"
+#include "hooks.h"
#include "host_command.h"
#include "task.h"
#include "timer.h"
#include "util.h"
+#define ALS_POLL_PERIOD SECOND
+
+static int task_timeout = -1;
+
int als_read(enum als_id id, int *lux)
{
int af = als[id].attenuation_factor;
@@ -28,18 +33,37 @@ void als_task(void)
uint16_t als_data;
while (1) {
+ task_wait_event(task_timeout);
+
+ /* If task was disabled while waiting do not read from ALS */
+ if (task_timeout < 0)
+ continue;
+
for (i = 0; i < EC_ALS_ENTRIES && i < ALS_COUNT; i++) {
als_data = als_read(i, &val) == EC_SUCCESS ? val : 0;
mapped[i] = als_data;
}
-
- task_wait_event(SECOND);
}
}
+static void als_task_enable(void)
+{
+ task_timeout = ALS_POLL_PERIOD;
+ task_wake(TASK_ID_ALS);
+}
+
+static void als_task_disable(void)
+{
+ task_timeout = -1;
+}
+
+DECLARE_HOOK(HOOK_CHIPSET_RESUME, als_task_enable, HOOK_PRIO_DEFAULT);
+DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, als_task_disable, HOOK_PRIO_DEFAULT);
+
/*****************************************************************************/
/* Console commands */
+#ifdef CONFIG_CMD_ALS
static int command_als(int argc, char **argv)
{
int i, rv, val;
@@ -62,3 +86,4 @@ DECLARE_CONSOLE_COMMAND(als, command_als,
NULL,
"Print ALS values",
NULL);
+#endif
diff --git a/include/config.h b/include/config.h
index 06337cc634..d0fdbc03a1 100644
--- a/include/config.h
+++ b/include/config.h
@@ -444,6 +444,7 @@
#undef CONFIG_CMD_ACCELS
#undef CONFIG_CMD_ACCEL_INFO
+#undef CONFIG_CMD_ALS
#undef CONFIG_CMD_BATDEBUG
#define CONFIG_CMD_CHARGER
#undef CONFIG_CMD_CHGRAMP