summaryrefslogtreecommitdiff
path: root/baseboard
diff options
context:
space:
mode:
authorDevin Lu <devin.lu@quantatw.com>2019-04-08 14:27:40 +0800
committerchrome-bot <chrome-bot@chromium.org>2019-04-20 03:58:23 -0700
commite4c9dbe8bd1d659fe2a0637069744c6150561cf8 (patch)
tree885e90755399d418ca7693c48d5fe8edaeafc5b5 /baseboard
parentd8fb8d23c9ae774bce3f345c882c880e25d1790c (diff)
downloadchrome-ec-e4c9dbe8bd1d659fe2a0637069744c6150561cf8.tar.gz
common: led_onoff_states: move forward baseboard led_state to common code
Now we have led_onoff_states instead of led_state of baseboard, to avoid duplicate file so move forward to common code. BUG=b:126460269 BRANCH=none TEST=make buildall -j, make sure led behavior on meep intended as well. Change-Id: I3adf20ebf2efd2f02b1ae101faf1c36f2f5ed454 Signed-off-by: Devin Lu <Devin.Lu@quantatw.com> Reviewed-on: https://chromium-review.googlesource.com/1556869 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Reviewed-by: Marco Chen <marcochen@chromium.org> Reviewed-by: Paul Fagerburg <pfagerburg@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'baseboard')
-rw-r--r--baseboard/octopus/baseboard.h1
-rw-r--r--baseboard/octopus/build.mk1
-rw-r--r--baseboard/octopus/led_states.c222
-rw-r--r--baseboard/octopus/led_states.h95
4 files changed, 1 insertions, 318 deletions
diff --git a/baseboard/octopus/baseboard.h b/baseboard/octopus/baseboard.h
index cb923fb385..977416f0d2 100644
--- a/baseboard/octopus/baseboard.h
+++ b/baseboard/octopus/baseboard.h
@@ -90,6 +90,7 @@
#define CONFIG_LOW_POWER_IDLE
#define CONFIG_DPTF
#define CONFIG_BOARD_HAS_RTC_RESET
+#define CONFIG_LED_ONOFF_STATES
/* Port80 -- allow larger buffer for port80 messages */
#undef CONFIG_PORT80_HISTORY_LEN
diff --git a/baseboard/octopus/build.mk b/baseboard/octopus/build.mk
index ccce76a0a6..efb37acb04 100644
--- a/baseboard/octopus/build.mk
+++ b/baseboard/octopus/build.mk
@@ -7,7 +7,6 @@
#
baseboard-y=baseboard.o
-baseboard-$(CONFIG_LED_COMMON)+=led_states.o
baseboard-$(CONFIG_USB_POWER_DELIVERY)+=usb_pd_policy.o
baseboard-$(VARIANT_OCTOPUS_EC_NPCX796FB)+=variant_ec_npcx796fb.o
baseboard-$(VARIANT_OCTOPUS_EC_ITE8320)+=variant_ec_ite8320.o
diff --git a/baseboard/octopus/led_states.c b/baseboard/octopus/led_states.c
deleted file mode 100644
index 4836a1c18a..0000000000
--- a/baseboard/octopus/led_states.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/* Copyright 2018 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 and battery LED state control for octopus boards
- */
-
-#include "battery.h"
-#include "charge_state.h"
-#include "chipset.h"
-#include "console.h"
-#include "ec_commands.h"
-#include "extpower.h"
-#include "hooks.h"
-#include "led_common.h"
-#include "led_states.h"
-
-#define CPRINTS(format, args...) cprints(CC_GPIO, format, ## args)
-
-static enum led_states led_get_state(void)
-{
- int charge_lvl;
- enum led_states new_state = LED_NUM_STATES;
-
- switch (charge_get_state()) {
- case PWR_STATE_CHARGE:
- /* Get percent charge */
- charge_lvl = charge_get_percent();
- /* Determine which charge state to use */
- if (charge_lvl < led_charge_lvl_1)
- new_state = STATE_CHARGING_LVL_1;
- else if (charge_lvl < led_charge_lvl_2)
- new_state = STATE_CHARGING_LVL_2;
- else
- if (chipset_in_state(CHIPSET_STATE_ANY_OFF))
- new_state = STATE_CHARGING_FULL_S5;
- else
- new_state = STATE_CHARGING_FULL_CHARGE;
- break;
- case PWR_STATE_DISCHARGE_FULL:
- if (extpower_is_present()) {
- if (chipset_in_state(CHIPSET_STATE_ANY_OFF))
- new_state = STATE_CHARGING_FULL_S5;
- else
- new_state = STATE_CHARGING_FULL_CHARGE;
- break;
- }
- /* Intentional fall-through */
- case PWR_STATE_DISCHARGE /* and PWR_STATE_DISCHARGE_FULL */:
- if (chipset_in_state(CHIPSET_STATE_ON)) {
-#ifdef OCTOPUS_BATT_FUEL_LOW_LED
- if (charge_get_percent() <
- OCTOPUS_BATT_FUEL_LOW_LED)
- new_state = STATE_DISCHARGE_S0_BAT_LOW;
- else
-#endif
- new_state = STATE_DISCHARGE_S0;
- }
- else if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND))
- new_state = STATE_DISCHARGE_S3;
- else
- new_state = STATE_DISCHARGE_S5;
- break;
- case PWR_STATE_ERROR:
- new_state = STATE_BATTERY_ERROR;
- break;
- case PWR_STATE_CHARGE_NEAR_FULL:
- if (chipset_in_state(CHIPSET_STATE_ANY_OFF))
- new_state = STATE_CHARGING_FULL_S5;
- else
- new_state = STATE_CHARGING_FULL_CHARGE;
- break;
- case PWR_STATE_IDLE: /* External power connected in IDLE */
- if (charge_get_flags() & CHARGE_FLAG_FORCE_IDLE)
- new_state = STATE_FACTORY_TEST;
- else
- new_state = STATE_DISCHARGE_S0;
- break;
- default:
- /* Other states don't alter LED behavior */
- break;
- }
-
- return new_state;
-}
-
-static void led_update_battery(void)
-{
- static uint8_t ticks, period;
- static int led_state = LED_NUM_STATES;
- int phase;
- enum led_states desired_state = led_get_state();
-
- /*
- * We always need to check the current state since the value could
- * have been manually overwritten. If we're in a new valid state,
- * update our ticks and period info. If our new state isn't defined,
- * continue using the previous one.
- */
- if (desired_state != led_state && desired_state < LED_NUM_STATES) {
- /*
- * Allow optional CHARGING_FULL_S5 state to fall back to
- * FULL_CHARGE if not defined.
- */
- if (desired_state == STATE_CHARGING_FULL_S5 &&
- led_bat_state_table[desired_state][LED_PHASE_0].time == 0)
- desired_state = STATE_CHARGING_FULL_CHARGE;
-
- /* State is changing */
- led_state = desired_state;
- /* Reset ticks and period when state changes */
- ticks = 0;
-
- period = led_bat_state_table[led_state][LED_PHASE_0].time +
- led_bat_state_table[led_state][LED_PHASE_1].time;
-
- }
-
- /* If this state is undefined, turn the LED off */
- if (period == 0) {
- CPRINTS("Undefined LED behavior for battery state %d,"
- "turning off LED", led_state);
- led_set_color_battery(LED_OFF);
- return;
- }
-
- /*
- * Determine which phase of the state table to use. The phase is
- * determined if it falls within first phase time duration.
- */
- phase = ticks < led_bat_state_table[led_state][LED_PHASE_0].time ?
- 0 : 1;
- ticks = (ticks + 1) % period;
-
- /* Set the color for the given state and phase */
- led_set_color_battery(led_bat_state_table[led_state][phase].color);
-}
-
-#ifdef OCTOPUS_POWER_LED
-static enum pwr_led_states pwr_led_get_state(void)
-{
- if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND)) {
- if (extpower_is_present())
- return PWR_LED_STATE_SUSPEND_AC;
- else
- return PWR_LED_STATE_SUSPEND_NO_AC;
- } else if (chipset_in_state(CHIPSET_STATE_ANY_OFF)) {
- return PWR_LED_STATE_OFF;
- } else if (chipset_in_state(CHIPSET_STATE_ON)) {
- return PWR_LED_STATE_ON;
- }
-
- return PWR_LED_NUM_STATES;
-}
-
-static void led_update_power(void)
-{
- static uint8_t ticks, period;
- static enum pwr_led_states led_state = PWR_LED_NUM_STATES;
- int phase;
- enum pwr_led_states desired_state = pwr_led_get_state();
-
- /*
- * If we're in a new valid state, update our ticks and period info.
- * Otherwise, continue to use old state
- */
- if (desired_state != led_state && desired_state < PWR_LED_NUM_STATES) {
- /* State is changing */
- led_state = desired_state;
- /* Reset ticks and period when state changes */
- ticks = 0;
-
- period = led_pwr_state_table[led_state][LED_PHASE_0].time +
- led_pwr_state_table[led_state][LED_PHASE_1].time;
-
- }
-
- /* If this state is undefined, turn the LED off */
- if (period == 0) {
- CPRINTS("Undefined LED behavior for power state %d,"
- "turning off LED", led_state);
- led_set_color_power(LED_OFF);
- return;
- }
-
- /*
- * Determine which phase of the state table to use. The phase is
- * determined if it falls within first phase time duration.
- */
- phase = ticks < led_pwr_state_table[led_state][LED_PHASE_0].time ?
- 0 : 1;
- ticks = (ticks + 1) % period;
-
- /* Set the color for the given state and phase */
- led_set_color_power(led_pwr_state_table[led_state][phase].color);
-
-}
-#endif
-
-static void led_init(void)
-{
- /* If battery LED is enabled, set it to "off" to start with */
- if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED))
- led_set_color_battery(LED_OFF);
-}
-DECLARE_HOOK(HOOK_INIT, led_init, HOOK_PRIO_DEFAULT);
-
-/* Called by hook task every hook tick (200 msec) */
-static void led_update(void)
-{
- /*
- * If battery LED is enabled, set its state based on our power and
- * charge
- */
- if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED))
- led_update_battery();
-#ifdef OCTOPUS_POWER_LED
- if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED))
- led_update_power();
-#endif
-}
-DECLARE_HOOK(HOOK_TICK, led_update, HOOK_PRIO_DEFAULT);
diff --git a/baseboard/octopus/led_states.h b/baseboard/octopus/led_states.h
deleted file mode 100644
index 72e8b37f73..0000000000
--- a/baseboard/octopus/led_states.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright 2018 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.
- *
- * Common functions for stateful LEDs (charger and power)
- */
-
-#ifndef __CROS_EC_BASEBOARD_LED_H
-#define __CROS_EC_BASEBOARD_LED_H
-
-#include "ec_commands.h"
-
-#define LED_INDEFINITE UINT8_MAX
-#define LED_ONE_SEC (1000 / HOOK_TICK_INTERVAL_MS)
-#define LED_OFF EC_LED_COLOR_COUNT
-
-/*
- * All LED states should have one phase defined,
- * and an additional phase can be defined for blinking
- */
-enum led_phase {
- LED_PHASE_0,
- LED_PHASE_1,
- LED_NUM_PHASES
-};
-
-/*
- * STATE_CHARGING_LVL_1 is when 0 <= charge_percentage < led_charge_level_1
- * STATE_CHARGING_LVL_2 is when led_charge_level_1 <= charge_percentage < led_charge_level_2
- * STATE_CHARGING_FULL_CHARGE is when led_charge_level_2 <= charge_percentage < 100
- *
- * STATE_CHARGING_FULL_S5 is optional and state machine will fall back to
- * FULL_CHARGE if not defined
- */
-enum led_states {
- STATE_CHARGING_LVL_1,
- STATE_CHARGING_LVL_2,
- STATE_CHARGING_FULL_CHARGE,
- STATE_CHARGING_FULL_S5,
- STATE_DISCHARGE_S0,
- STATE_DISCHARGE_S0_BAT_LOW,
- STATE_DISCHARGE_S3,
- STATE_DISCHARGE_S5,
- STATE_BATTERY_ERROR,
- STATE_FACTORY_TEST,
- LED_NUM_STATES
-};
-
-struct led_descriptor {
- enum ec_led_colors color;
- uint8_t time;
-};
-
-
-/* Charging LED state table - defined in board's led.c */
-extern struct led_descriptor
- led_bat_state_table[LED_NUM_STATES][LED_NUM_PHASES];
-
-/* Charging LED state level 1 - defined in board's led.c */
-extern const int led_charge_lvl_1;
-
-/* Charging LED state level 2 - defined in board's led.c */
-extern const int led_charge_lvl_2;
-
-#ifdef OCTOPUS_POWER_LED
-enum pwr_led_states {
- PWR_LED_STATE_ON,
- PWR_LED_STATE_SUSPEND_AC,
- PWR_LED_STATE_SUSPEND_NO_AC,
- PWR_LED_STATE_OFF,
- PWR_LED_NUM_STATES
-};
-
-/* Power LED state table - defined in board's led.c */
-extern const struct led_descriptor
- led_pwr_state_table[PWR_LED_NUM_STATES][LED_NUM_PHASES];
-
-#endif
-
-/**
- * Set battery LED color - defined in board's led.c
- *
- * @param color Color to set on battery LED
- *
- */
-void led_set_color_battery(enum ec_led_colors color);
-
-#ifdef OCTOPUS_POWER_LED
-/**
- * Set power LED color - defined in board's led.c
- */
-void led_set_color_power(enum ec_led_colors color);
-#endif
-
-#endif /* __CROS_EC_BASEBOARD_LED_H */