/* Copyright 2016 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. * * Charger profile override for fast charging */ #ifndef __CROS_EC_CHARGER_PROFILE_OVERRIDE_H #define __CROS_EC_CHARGER_PROFILE_OVERRIDE_H #include "charge_state_v2.h" #define TEMPC_TENTHS_OF_DEG(c) ((c) * 10) #define CHARGER_PROF_TEMP_C_LAST_RANGE 0xFFFF #define CHARGER_PROF_VOLTAGE_MV_LAST_RANGE 0xFFFF /* Charge profile override info */ struct fast_charge_profile { /* temperature in 10ths of a degree C */ const int temp_c; /* charge current for respective battery voltage ranges in mA. */ const int current_mA[CONFIG_CHARGER_PROFILE_VOLTAGE_RANGES]; }; /* Charge profile override parameters */ struct fast_charge_params { /* Total temperature ranges of the charge profile */ const int total_temp_ranges; /* Default temperature range of the charge profile */ const int default_temp_range_profile; /* * Battery voltage ranges in mV. * It is assumed that these values are added in ascending order in the * board battery file. */ const int voltage_mV[CONFIG_CHARGER_PROFILE_VOLTAGE_RANGES]; const struct fast_charge_profile *chg_profile_info; }; /** * Optional customization of charger profile override for fast charging. * * On input, the struct reflects the default behavior. The function can make * changes to the state, requested_voltage, or requested_current. * * @param curr Charge state machine data. * * @return * >0 Desired time in usec for this poll period. * 0 Use the default poll period (which varies with the state). * <0 An error occurred. The poll time will be shorter than usual. * Too many errors in a row may trigger some corrective action. */ int charger_profile_override(struct charge_state_data *curr); /** * Common code of charger profile override for fast charging. * * @param curr Charge state machine data. * @param fast_chg_params Fast charge profile parameters. * @param prev_chg_prof_info Previous charge profile info. * @param batt_vtg_max Maximum battery voltage. * * @return * >0 Desired time in usec for this poll period. * 0 Use the default poll period (which varies with the state). * <0 An error occurred. The poll time will be shorter than usual. * Too many errors in a row may trigger some corrective action. */ int charger_profile_override_common(struct charge_state_data *curr, const struct fast_charge_params *fast_chg_params, const struct fast_charge_profile **prev_chg_prof_info, int batt_vtg_max); /* * Access to custom profile params through host commands. * What this does is up to the implementation. */ enum ec_status charger_profile_override_get_param(uint32_t param, uint32_t *value); enum ec_status charger_profile_override_set_param(uint32_t param, uint32_t value); #endif /* __CROS_EC_CHARGER_PROFILE_OVERRIDE_H */