summaryrefslogtreecommitdiff
path: root/include/charge_state.h
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2012-05-25 09:58:32 -0700
committerRandall Spangler <rspangler@chromium.org>2012-05-25 09:59:58 -0700
commit4f34d3f9ef0013e38e5488211758641628f919d5 (patch)
treec51ebcff416d4b19c5c42eff29a42db84d4ffb77 /include/charge_state.h
parent61902efd16095af85764bd4b2df51415df49ea55 (diff)
downloadchrome-ec-4f34d3f9ef0013e38e5488211758641628f919d5.tar.gz
Cleanup - includes go in include dir
Signed-off-by: Randall Spangler <rspangler@chromium.org> BUG=none TEST=if it builds, it works Change-Id: I2064f3eed4790051312a5a53ef742dcf79c4ee9d
Diffstat (limited to 'include/charge_state.h')
-rw-r--r--include/charge_state.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/include/charge_state.h b/include/charge_state.h
new file mode 100644
index 0000000000..672dab3e8b
--- /dev/null
+++ b/include/charge_state.h
@@ -0,0 +1,113 @@
+/* Copyright (c) 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.
+ *
+ */
+
+#include "timer.h"
+
+#ifndef __CROS_EC_CHARGE_STATE_H
+#define __CROS_EC_CHARGE_STATE_H
+
+/* Time constants */
+#define MSEC (1000ULL)
+#define SECOND (MSEC * 1000)
+#define MINUTE (SECOND * 60)
+#define HOUR (MINUTE * 60)
+
+/* Update period to prevent charger watchdog timeout */
+#define CHARGER_UPDATE_PERIOD (SECOND * 10)
+
+/* Power state task polling period in usec */
+#define POLL_PERIOD_LONG (MSEC * 500)
+#define POLL_PERIOD_CHARGE (MSEC * 250)
+#define POLL_PERIOD_SHORT (MSEC * 100)
+#define MIN_SLEEP_USEC (MSEC * 50)
+#define MAX_SLEEP_USEC SECOND
+
+/* Power state error flags */
+#define F_CHARGER_INIT (1 << 0) /* Charger initialization */
+#define F_CHARGER_VOLTAGE (1 << 1) /* Charger maximun output voltage */
+#define F_CHARGER_CURRENT (1 << 2) /* Charger maximum output current */
+#define F_BATTERY_VOLTAGE (1 << 3) /* Battery voltage */
+#define F_BATTERY_CURRENT (1 << 4) /* Battery charging current */
+#define F_DESIRED_VOLTAGE (1 << 5) /* Battery desired voltage */
+#define F_DESIRED_CURRENT (1 << 6) /* Battery desired current */
+#define F_BATTERY_TEMPERATURE (1 << 7) /* Battery temperature */
+#define F_BATTERY_MODE (1 << 8) /* Battery mode */
+#define F_BATTERY_CAPACITY (1 << 9) /* Battery capacity */
+#define F_BATTERY_STATE_OF_CHARGE (1 << 10) /* State of charge, percentage */
+
+#define F_BATTERY_MASK (F_BATTERY_VOLTAGE | F_BATTERY_CURRENT | \
+ F_DESIRED_VOLTAGE | F_DESIRED_CURRENT | \
+ F_BATTERY_TEMPERATURE | F_BATTERY_MODE | \
+ F_BATTERY_CAPACITY | F_BATTERY_STATE_OF_CHARGE)
+#define F_CHARGER_MASK (F_CHARGER_VOLTAGE | F_CHARGER_CURRENT | \
+ F_CHARGER_INIT)
+
+/* Power states */
+enum power_state {
+ PWR_STATE_UNCHANGE = 0,
+ PWR_STATE_INIT,
+ PWR_STATE_IDLE,
+ PWR_STATE_DISCHARGE,
+ PWR_STATE_CHARGE,
+ PWR_STATE_ERROR
+};
+
+/* Debugging constants, in the same order as enum power_state. This string
+ * table was moved here to sync with enum above.
+ */
+#define POWER_STATE_NAME_TABLE \
+ { \
+ "unchange", \
+ "init", \
+ "idle", \
+ "discharge", \
+ "charge", \
+ "error" \
+ }
+ /* End of POWER_STATE_NAME_TABLE macro */
+
+/* Power state data
+ * Status collection of charging state machine.
+ */
+struct power_state_data {
+ int ac;
+ int charging_voltage;
+ int charging_current;
+ struct batt_params batt;
+ enum power_state state;
+ uint32_t error;
+ timestamp_t ts;
+};
+
+/* State context
+ * The shared context for state handler. The context contains current and
+ * previous state.
+ */
+struct power_state_context {
+ struct power_state_data curr;
+ struct power_state_data prev;
+ uint32_t *memmap_batt_volt;
+ /* TODO(rong): check endianness of EC and memmap*/
+ uint32_t *memmap_batt_rate;
+ uint32_t *memmap_batt_cap;
+ uint8_t *memmap_batt_flags;
+ /* Charger and battery pack info */
+ const struct charger_info *charger;
+ const struct battery_info *battery;
+ /* Charger update timestamp */
+ timestamp_t charger_update_time;
+ timestamp_t trickle_charging_time;
+};
+
+/* Trickle charging state handler.
+ * Trickle charging state is sub-state of charging. Normal charging handler
+ * can not set battery input current cap to a very low value. This function
+ * uses charging voltage to control battery input current.
+ */
+enum power_state trickle_charge(struct power_state_context *ctx);
+
+#endif /* __CROS_EC_CHARGE_STATE_H */
+