mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-27 18:25:05 +00:00
Add support for two new configs to specify critical energy battery percentage and critical external charger power. When we are under both thresholds, set the LIMIT_POWER charger parameter to inform the AP that it should conserve power to avoid brownout, and consider jumping to EC RW to negotiate PD. In addition, modify the existing CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON to allow power-up regardless of power level if a 15W+ charger is attached, since there is a reasonable chance it may speak PD and provide sufficient power to boot the AP. BUG=chromium:537269 TEST=Manual on Glados. Set CHG_MW thresh to 20000, BAT_PCT to 50. Verify that LIMIT_POWER charger param is set until Zinger negotiates to 20V. Also veify that system can boot with Donette. BRANCH=None Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: Ic963c82fea4ad10e8a5d7e476c5ce3e5ae525dad Reviewed-on: https://chromium-review.googlesource.com/306774 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Alec Berg <alecaberg@chromium.org>
97 lines
2.6 KiB
C
97 lines
2.6 KiB
C
/* Copyright (c) 2014 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.
|
|
*/
|
|
|
|
#ifndef __CROS_EC_CHARGE_MANAGER_H
|
|
#define __CROS_EC_CHARGE_MANAGER_H
|
|
|
|
#include "common.h"
|
|
|
|
/* Charge port that indicates no active port */
|
|
#define CHARGE_SUPPLIER_NONE -1
|
|
#define CHARGE_PORT_NONE -1
|
|
#define CHARGE_CEIL_NONE -1
|
|
|
|
/* Initial charge state */
|
|
#define CHARGE_CURRENT_UNINITIALIZED -1
|
|
#define CHARGE_VOLTAGE_UNINITIALIZED -1
|
|
|
|
/* Commonly-used charge suppliers listed in no particular order */
|
|
enum charge_supplier {
|
|
CHARGE_SUPPLIER_PD,
|
|
CHARGE_SUPPLIER_TYPEC,
|
|
CHARGE_SUPPLIER_BC12_DCP,
|
|
CHARGE_SUPPLIER_BC12_CDP,
|
|
CHARGE_SUPPLIER_BC12_SDP,
|
|
CHARGE_SUPPLIER_PROPRIETARY,
|
|
CHARGE_SUPPLIER_OTHER,
|
|
CHARGE_SUPPLIER_VBUS,
|
|
CHARGE_SUPPLIER_COUNT
|
|
};
|
|
|
|
/* Charge tasks report available current and voltage */
|
|
struct charge_port_info {
|
|
int current;
|
|
int voltage;
|
|
};
|
|
|
|
/* Called by charging tasks to update their available charge */
|
|
void charge_manager_update_charge(int supplier,
|
|
int port,
|
|
struct charge_port_info *charge);
|
|
|
|
/* Partner port dualrole capabilities */
|
|
enum dualrole_capabilities {
|
|
CAP_UNKNOWN,
|
|
CAP_DUALROLE,
|
|
CAP_DEDICATED,
|
|
};
|
|
|
|
/* Called by charging tasks to indicate partner dualrole capability change */
|
|
void charge_manager_update_dualrole(int port, enum dualrole_capabilities cap);
|
|
|
|
/*
|
|
* Charge ceiling can be set independently by different tasks / functions,
|
|
* for different purposes.
|
|
*/
|
|
enum ceil_requestor {
|
|
/* Set by PD task, during negotiation */
|
|
CEIL_REQUESTOR_PD,
|
|
/* Set by host commands */
|
|
CEIL_REQUESTOR_HOST,
|
|
/* Number of ceiling groups */
|
|
CEIL_REQUESTOR_COUNT,
|
|
};
|
|
|
|
/* Update charge ceiling for a given port / requestor */
|
|
void charge_manager_set_ceil(int port, enum ceil_requestor requestor, int ceil);
|
|
|
|
/* Select an 'override port', which is always the preferred charge port */
|
|
int charge_manager_set_override(int port);
|
|
int charge_manager_get_override(void);
|
|
|
|
/* Returns the current active charge port, as determined by charge manager */
|
|
int charge_manager_get_active_charge_port(void);
|
|
|
|
/* Return the power limit (uW) set by charge manager. */
|
|
int charge_manager_get_power_limit_uw(void);
|
|
|
|
#ifdef CONFIG_USB_PD_LOGGING
|
|
/* Save power state log entry for the given port */
|
|
void charge_manager_save_log(int port);
|
|
#endif
|
|
|
|
/* Board-level callback functions */
|
|
|
|
/*
|
|
* Set the active charge port. Returns EC_SUCCESS if the charge port is
|
|
* accepted, returns ec_error_list status otherwise.
|
|
*/
|
|
int board_set_active_charge_port(int charge_port);
|
|
|
|
/* Set the charge current limit. */
|
|
void board_set_charge_limit(int charge_ma);
|
|
|
|
#endif /* __CROS_EC_CHARGE_MANAGER_H */
|