summaryrefslogtreecommitdiff
path: root/test/powerdemo.c
diff options
context:
space:
mode:
authorJack Rosenthal <jrosenth@chromium.org>2021-11-04 12:11:58 -0600
committerCommit Bot <commit-bot@chromium.org>2021-11-05 04:22:34 +0000
commit252457d4b21f46889eebad61d4c0a65331919cec (patch)
tree01856c4d31d710b20e85a74c8d7b5836e35c3b98 /test/powerdemo.c
parent08f5a1e6fc2c9467230444ac9b582dcf4d9f0068 (diff)
downloadchrome-ec-stabilize-14388.61.B-ish.tar.gz
In the interest of making long-term branch maintenance incur as little technical debt on us as possible, we should not maintain any files on the branch we are not actually using. This has the added effect of making it extremely clear when merging CLs from the main branch when changes have the possibility to affect us. The follow-on CL adds a convenience script to actually pull updates from the main branch and generate a CL for the update. BUG=b:204206272 BRANCH=ish TEST=make BOARD=arcada_ish && make BOARD=drallion_ish Signed-off-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I17e4694c38219b5a0823e0a3e55a28d1348f4b18 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3262038 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Tom Hughes <tomhughes@chromium.org>
Diffstat (limited to 'test/powerdemo.c')
-rw-r--r--test/powerdemo.c181
1 files changed, 0 insertions, 181 deletions
diff --git a/test/powerdemo.c b/test/powerdemo.c
deleted file mode 100644
index e695bb8e5e..0000000000
--- a/test/powerdemo.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Copyright 2012 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/* Power state machine demo module for Chrome EC */
-
-#include "clock.h"
-#include "common.h"
-#include "powerdemo.h"
-#include "task.h"
-#include "timer.h"
-#include "registers.h"
-
-static volatile enum {
- POWER_STATE_IDLE = 0, /* Idle */
- POWER_STATE_DOWN1, /* Assert output for 1ms */
- POWER_STATE_UP1, /* Deassert output for 1ms */
- POWER_STATE_DOWN10, /* Assert output for 10ms */
- POWER_STATE_UP5, /* Deassert output for 5ms */
- POWER_STATE_DOWN15, /* Assert output for 15ms */
- POWER_STATE_WAIT, /* Wait for button to be released */
- POWER_STATE_DOWN2 /* Assert output for 2ms */
-} state = POWER_STATE_IDLE;
-
-
-/* Stops the timer. */
-static void __stop_timer(void)
-{
- /* Disable timer A */
- LM4_TIMER_CTL(7) &= ~0x01;
- /* Clear any pending interrupts */
- LM4_TIMER_ICR(7) = LM4_TIMER_RIS(7);
-}
-
-
-/* Starts the timer with the specified delay. If the timer is already
- * started, resets it. */
-static void __start_timer(int usec)
-{
- /* Stop the timer, if it was started */
- __stop_timer();
- /* Set the delay, counting function overhead */
- LM4_TIMER_TAILR(7) = usec;
- /* Start timer A */
- LM4_TIMER_CTL(7) |= 0x01;
-}
-
-
-static void __set_state(int new_state, int pin_value, int timeout)
-{
- LM4_GPIO_DATA(LM4_GPIO_D, 0x08) = (pin_value ? 0x08 : 0);
- if (timeout)
- __start_timer(timeout);
- else
- __stop_timer();
- state = new_state;
-}
-
-
-int power_demo_init(void)
-{
- volatile uint32_t scratch __attribute__((unused));
-
- /* Set up TIMER1 as our state timer */
- /* Enable TIMER1 clock */
- LM4_SYSTEM_RCGCWTIMER |= 0x02;
- /* wait 3 clock cycles before using the module */
- scratch = LM4_SYSTEM_RCGCWTIMER;
- /* Ensure timer is disabled : TAEN = TBEN = 0 */
- LM4_TIMER_CTL(7) &= ~0x101;
- /* 32-bit timer mode */
- LM4_TIMER_CFG(7) = 4;
- /* Set the prescaler to increment every microsecond */
- LM4_TIMER_TAPR(7) = clock_get_freq() / SECOND;
- /* One-shot, counting down */
- LM4_TIMER_TAMR(7) = 0x01;
- /* Set overflow interrupt */
- LM4_TIMER_IMR(7) = 0x1;
-
- /* Enable clock to GPIO module D */
- LM4_SYSTEM_RCGCGPIO |= 0x0008;
-
- /* Clear GPIOAFSEL and enable digital function for pins 0-3 */
- LM4_GPIO_AFSEL(LM4_GPIO_D) &= ~0x0f;
- LM4_GPIO_DEN(LM4_GPIO_D) |= 0x0f;
-
- /* Set pins 0-2 as input, pin 3 as output */
- LM4_GPIO_DIR(LM4_GPIO_D) = (LM4_GPIO_DIR(LM4_GPIO_D) & ~0x0f) | 0x08;
-
- /* Set pin 0 to edge-sensitive, both edges, pull-up */
- LM4_GPIO_IS(LM4_GPIO_D) &= ~0x01;
- LM4_GPIO_IBE(LM4_GPIO_D) |= 0x01;
- LM4_GPIO_PUR(LM4_GPIO_D) |= 0x01;
-
- /* Move to idle state */
- __set_state(POWER_STATE_IDLE, 1, 0);
-
- /* Enable interrupt on pin 0 */
- LM4_GPIO_IM(LM4_GPIO_D) |= 0x01;
-
- return EC_SUCCESS;
-}
-
-
-/* GPIO interrupt handler */
-static void __gpio_d_interrupt(void)
-{
- uint32_t mis = LM4_GPIO_MIS(LM4_GPIO_D);
-
- /* Clear the interrupt bits we're handling */
- LM4_GPIO_ICR(LM4_GPIO_D) = mis;
-
- /* Handle edges */
- if (mis & 0x01) {
- if (LM4_GPIO_DATA(LM4_GPIO_D, 0x01)) {
- if (state == POWER_STATE_WAIT)
- __set_state(POWER_STATE_DOWN2, 0, 2000 - 28);
- } else {
- if (state == POWER_STATE_IDLE)
- __set_state(POWER_STATE_DOWN1, 0, 1000 - 28);
- }
- }
-}
-
-DECLARE_IRQ(LM4_IRQ_GPIOD, __gpio_d_interrupt, 1);
-
-
-/* Timer interrupt handler */
-static void __timer_w1_interrupt(void)
-{
- uint32_t mis = LM4_TIMER_RIS(7);
- /* Clear the interrupt reasons we're handling */
- LM4_TIMER_ICR(7) = mis;
-
- /* Transition to next state */
- switch (state) {
- case POWER_STATE_IDLE:
- case POWER_STATE_WAIT:
- /* Ignore timer events when waiting for GPIO edges */
- break;
- case POWER_STATE_DOWN1:
- __set_state(POWER_STATE_UP1, 1, 1000 - 28);
- break;
- case POWER_STATE_UP1:
- __set_state(POWER_STATE_DOWN10, 0, 10000 - 228);
- break;
- case POWER_STATE_DOWN10:
- __set_state(POWER_STATE_UP5, 1, 5000 - 128);
- break;
- case POWER_STATE_UP5:
- __set_state(POWER_STATE_DOWN15, 0, 15000 - 328);
- break;
- case POWER_STATE_DOWN15:
- if (LM4_GPIO_DATA(LM4_GPIO_D, 0x01)) {
- /* Button has already been released; go straight to
- * idle */
- __set_state(POWER_STATE_IDLE, 1, 0);
- } else {
- /* Wait for button release */
- __set_state(POWER_STATE_WAIT, 1, 0);
- }
- break;
- case POWER_STATE_DOWN2:
- __set_state(POWER_STATE_IDLE, 1, 0);
- break;
- }
-}
-
-DECLARE_IRQ(LM4_IRQ_TIMERW1A, __timer_w1_interrupt, 1);
-
-int power_demo_task(void)
-{
- /* Initialize the peripherals */
- power_demo_init();
-
- /* suspend this task forever */
- task_wait_event(-1);
-
- return EC_SUCCESS;
-}