15
15
#include "common.h"
16
16
#include "console.h"
17
17
#include "ec_commands.h"
18
- #include "ec_ec_comm_client.h"
19
- #include "ec_ec_comm_server.h"
20
18
#include "extpower.h"
21
19
#include "gpio.h"
22
20
#include "hooks.h"
@@ -205,7 +203,11 @@ static void problem(enum problem_type p, int v)
205
203
problems_exist = 1 ;
206
204
}
207
205
208
- #ifdef CONFIG_EC_EC_COMM_BATTERY_MASTER
206
+
207
+ enum ec_charge_control_mode get_chg_ctrl_mode (void )
208
+ {
209
+ return chg_ctl_mode ;
210
+ }
209
211
static int battery_sustainer_set (int8_t lower , int8_t upper )
210
212
{
211
213
if (lower == -1 || upper == -1 ) {
@@ -238,7 +240,7 @@ static bool battery_sustainer_enabled(void)
238
240
return sustain_soc .lower != -1 && sustain_soc .upper != -1 ;
239
241
}
240
242
241
- #ifdef CONFIG_EC_EC_COMM_BATTERY_CLIENT
243
+ #ifdef CONFIG_EC_EC_COMM_BATTERY_MASTER
242
244
/*
243
245
* Parameters for dual-battery policy.
244
246
* TODO(b:71881017): This should be made configurable by AP in the future.
@@ -1130,6 +1132,9 @@ static void dump_charge_state(void)
1130
1132
#define DUMP_CHG (FLD , FMT ) ccprintf("\t" #FLD " = " FMT "\n", curr.chg. FLD)
1131
1133
#define DUMP_BATT (FLD , FMT ) ccprintf("\t" #FLD " = " FMT "\n", curr.batt. FLD)
1132
1134
#define DUMP_OCPC (FLD , FMT ) ccprintf("\t" #FLD " = " FMT "\n", curr.ocpc. FLD)
1135
+
1136
+ enum ec_charge_control_mode cmode = get_chg_ctrl_mode ();
1137
+
1133
1138
ccprintf ("state = %s\n" , state_list [curr .state ]);
1134
1139
DUMP (ac , "%d" );
1135
1140
DUMP (batt_is_charging , "%d" );
@@ -1185,8 +1190,8 @@ static void dump_charge_state(void)
1185
1190
DUMP (input_voltage , "%dmV" );
1186
1191
#endif
1187
1192
ccprintf ("chg_ctl_mode = %s (%d)\n" ,
1188
- chg_ctl_mode < CHARGE_CONTROL_COUNT
1189
- ? mode_text [ chg_ctl_mode ] : "UNDEF" , chg_ctl_mode );
1193
+ cmode < CHARGE_CONTROL_COUNT ? mode_text [ cmode ] : "UNDEF" ,
1194
+ cmode );
1190
1195
ccprintf ("manual_voltage = %d\n" , manual_voltage );
1191
1196
ccprintf ("manual_current = %d\n" , manual_current );
1192
1197
ccprintf ("user_current_limit = %dmA\n" , user_current_limit );
@@ -1204,6 +1209,7 @@ static void dump_charge_state(void)
1204
1209
static void show_charging_progress (void )
1205
1210
{
1206
1211
int rv = 0 , minutes , to_full , chgnum = 0 ;
1212
+ int dsoc ;
1207
1213
1208
1214
#ifdef CONFIG_BATTERY_SMART
1209
1215
/*
@@ -1237,19 +1243,17 @@ static void show_charging_progress(void)
1237
1243
}
1238
1244
#endif
1239
1245
1246
+ dsoc = charge_get_display_charge ();
1240
1247
if (rv )
1241
1248
CPRINTS ("Battery %d%% (Display %d.%d %%) / ??h:?? %s%s" ,
1242
1249
curr .batt .state_of_charge ,
1243
- curr .batt .display_charge / 10 ,
1244
- curr .batt .display_charge % 10 ,
1250
+ dsoc / 10 , dsoc % 10 ,
1245
1251
to_full ? "to full" : "to empty" ,
1246
1252
is_full ? ", not accepting current" : "" );
1247
1253
else
1248
1254
CPRINTS ("Battery %d%% (Display %d.%d %%) / %dh:%d %s%s" ,
1249
1255
curr .batt .state_of_charge ,
1250
- curr .batt .display_charge / 10 ,
1251
- curr .batt .display_charge % 10 ,
1252
- minutes / 60 , minutes % 60 ,
1256
+ dsoc / 10 , dsoc % 10 , minutes / 60 , minutes % 60 ,
1253
1257
to_full ? "to full" : "to empty" ,
1254
1258
is_full ? ", not accepting current" : "" );
1255
1259
@@ -1675,7 +1679,7 @@ static int battery_outside_charging_temperature(void)
1675
1679
1676
1680
static void sustain_battery_soc (void )
1677
1681
{
1678
- enum ec_charge_control_mode mode = chg_ctl_mode ;
1682
+ enum ec_charge_control_mode mode = get_chg_ctrl_mode () ;
1679
1683
int soc ;
1680
1684
int rv ;
1681
1685
@@ -1686,7 +1690,7 @@ static void sustain_battery_soc(void)
1686
1690
1687
1691
soc = charge_get_display_charge () / 10 ;
1688
1692
1689
- switch (chg_ctl_mode ) {
1693
+ switch (mode ) {
1690
1694
case CHARGE_CONTROL_NORMAL :
1691
1695
/* Going up */
1692
1696
if (sustain_soc .upper < soc )
@@ -1707,7 +1711,7 @@ static void sustain_battery_soc(void)
1707
1711
return ;
1708
1712
}
1709
1713
1710
- if (mode == chg_ctl_mode )
1714
+ if (mode == get_chg_ctrl_mode () )
1711
1715
return ;
1712
1716
1713
1717
rv = set_chg_ctrl_mode (mode );
@@ -1994,7 +1998,7 @@ void charger_task(void *u)
1994
1998
/* Okay, we're on AC and we should have a battery. */
1995
1999
1996
2000
/* Used for factory tests. */
1997
- if (chg_ctl_mode != CHARGE_CONTROL_NORMAL ) {
2001
+ if (get_chg_ctrl_mode () != CHARGE_CONTROL_NORMAL ) {
1998
2002
set_charge_state (ST_IDLE );
1999
2003
goto wait_for_it ;
2000
2004
}
@@ -2090,7 +2094,7 @@ void charger_task(void *u)
2090
2094
2091
2095
wait_for_it :
2092
2096
#ifdef CONFIG_CHARGER_PROFILE_OVERRIDE
2093
- if (chg_ctl_mode == CHARGE_CONTROL_NORMAL ) {
2097
+ if (get_chg_ctrl_mode () == CHARGE_CONTROL_NORMAL ) {
2094
2098
sleep_usec = charger_profile_override (& curr );
2095
2099
if (sleep_usec < 0 )
2096
2100
problem (PR_CUSTOM , sleep_usec );
@@ -2148,7 +2152,7 @@ void charger_task(void *u)
2148
2152
#endif
2149
2153
(is_full != prev_full ) ||
2150
2154
(curr .state != prev_state ) ||
2151
- (curr . batt . display_charge != prev_disp_charge )) {
2155
+ (charge_get_display_charge () != prev_disp_charge )) {
2152
2156
sustain_battery_soc ();
2153
2157
show_charging_progress ();
2154
2158
prev_charge = curr .batt .state_of_charge ;
@@ -2489,7 +2493,7 @@ uint32_t charge_get_flags(void)
2489
2493
{
2490
2494
uint32_t flags = 0 ;
2491
2495
2492
- if (chg_ctl_mode != CHARGE_CONTROL_NORMAL )
2496
+ if (get_chg_ctrl_mode () != CHARGE_CONTROL_NORMAL )
2493
2497
flags |= CHARGE_FLAG_FORCE_IDLE ;
2494
2498
if (curr .ac )
2495
2499
flags |= CHARGE_FLAG_EXTERNAL_POWER ;
@@ -2510,7 +2514,7 @@ int charge_get_percent(void)
2510
2514
return is_full ? 100 : curr .batt .state_of_charge ;
2511
2515
}
2512
2516
2513
- int charge_get_display_charge (void )
2517
+ test_mockable int charge_get_display_charge (void )
2514
2518
{
2515
2519
return curr .batt .display_charge ;
2516
2520
}
@@ -2709,7 +2713,7 @@ charge_command_charge_control(struct host_cmd_handler_args *args)
2709
2713
2710
2714
if (args -> version >= 2 ) {
2711
2715
if (p -> cmd == EC_CHARGE_CONTROL_CMD_SET ) {
2712
- if (chg_ctl_mode == CHARGE_CONTROL_NORMAL ) {
2716
+ if (get_chg_ctrl_mode () == CHARGE_CONTROL_NORMAL ) {
2713
2717
rv = battery_sustainer_set (
2714
2718
p -> sustain_soc .lower ,
2715
2719
p -> sustain_soc .upper );
@@ -2721,7 +2725,7 @@ charge_command_charge_control(struct host_cmd_handler_args *args)
2721
2725
battery_sustainer_disable ();
2722
2726
}
2723
2727
} else if (p -> cmd == EC_CHARGE_CONTROL_CMD_GET ) {
2724
- r -> mode = chg_ctl_mode ;
2728
+ r -> mode = get_chg_ctrl_mode () ;
2725
2729
r -> sustain_soc .lower = sustain_soc .lower ;
2726
2730
r -> sustain_soc .upper = sustain_soc .upper ;
2727
2731
args -> response_size = sizeof (* r );
@@ -2735,22 +2739,6 @@ charge_command_charge_control(struct host_cmd_handler_args *args)
2735
2739
if (rv != EC_SUCCESS )
2736
2740
return EC_RES_ERROR ;
2737
2741
2738
- if (args -> version >= 2 ) {
2739
- /*
2740
- * If charge mode is explicitly set (e.g. DISCHARGE), make sure
2741
- * sustain charge is disabled. To go back to normal mode (and
2742
- * disable sustain charge), set mode=NORMAL, lower=-1, upper=-1.
2743
- */
2744
- if (chg_ctl_mode == CHARGE_CONTROL_NORMAL ) {
2745
- rv = sustain_soc_set (p -> sustain_charge .lower ,
2746
- p -> sustain_charge .upper );
2747
- if (rv )
2748
- return EC_RES_INVALID_PARAM ;
2749
- } else {
2750
- sustain_soc_disable ();
2751
- }
2752
- }
2753
-
2754
2742
#ifdef CONFIG_CHARGER_DISCHARGE_ON_AC
2755
2743
#ifdef CONFIG_CHARGER_DISCHARGE_ON_AC_CUSTOM
2756
2744
rv = board_discharge_on_ac (p -> mode == CHARGE_CONTROL_DISCHARGE );
@@ -3072,7 +3060,7 @@ int charge_get_charge_state_debug(int param, uint32_t *value)
3072
3060
{
3073
3061
switch (param ) {
3074
3062
case CS_PARAM_DEBUG_CTL_MODE :
3075
- * value = chg_ctl_mode ;
3063
+ * value = get_chg_ctrl_mode () ;
3076
3064
break ;
3077
3065
case CS_PARAM_DEBUG_MANUAL_CURRENT :
3078
3066
* value = manual_current ;
0 commit comments