Skip to content

Commit c0b661b

Browse files
LeoCX-Tsaikiram9
authored andcommitted
fwk: set charge limit control and percentage control to common
all project use same code common it for future project TEST=zmake build marigold pass BRANCH=marigold Signed-off-by: LeoCX_Tsai <LeoCX_Tsai@compal.com>
1 parent 5424fdc commit c0b661b

5 files changed

Lines changed: 113 additions & 261 deletions

File tree

zephyr/program/framework/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_TOUCHPAD_CUSTOMIZED
3838
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_CHARGE_MANAGER
3939
"src/battery_extender.c")
4040

41+
zephyr_library_sources_ifdef(CONFIG_PLATFORM_EC_CHARGE_MANAGER
42+
"src/charge_limit_control.c")
43+
4144
if(DEFINED CONFIG_BOARD_LOTUS)
4245
project(lotus)
4346
cros_ec_library_include_directories_ifdef(CONFIG_BOARD_LOTUS include)

zephyr/program/framework/azalea/src/battery.c

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#define CACHE_INVALIDATION_TIME_US (3 * SECOND)
2525

2626
static enum battery_present batt_pres_prev = BP_NOT_SURE;
27-
static uint8_t charging_maximum_level = EC_CHARGE_LIMIT_RESTORE;
2827
static int old_btp;
2928

3029
enum battery_present battery_is_present(void)
@@ -58,50 +57,6 @@ uint32_t get_system_percentage(void)
5857
return 1000 * memmap_cap / (memmap_lfcc + 1);
5958
}
6059

61-
static void battery_percentage_control(void)
62-
{
63-
enum ec_charge_control_mode new_mode;
64-
static int in_percentage_control;
65-
uint32_t batt_os_percentage = get_system_percentage();
66-
int rv;
67-
68-
/**
69-
* If the host command EC_CMD_CHARGE_CONTROL set control mode to CHARGE_CONTROL_DISCHARGE
70-
* or CHARGE_CONTROL_IDLE, ignore the battery_percentage_control();
71-
*/
72-
if (!in_percentage_control && get_chg_ctrl_mode() != CHARGE_CONTROL_NORMAL)
73-
return;
74-
75-
if (charging_maximum_level == EC_CHARGE_LIMIT_RESTORE)
76-
system_get_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, &charging_maximum_level);
77-
78-
if (charging_maximum_level & CHG_LIMIT_OVERRIDE) {
79-
new_mode = CHARGE_CONTROL_NORMAL;
80-
if (batt_os_percentage == 1000)
81-
charging_maximum_level = charging_maximum_level | 0x64;
82-
} else if (charging_maximum_level < 20)
83-
new_mode = CHARGE_CONTROL_NORMAL;
84-
else if (batt_os_percentage > charging_maximum_level * 10) {
85-
new_mode = CHARGE_CONTROL_DISCHARGE;
86-
in_percentage_control = 1;
87-
} else if (batt_os_percentage == charging_maximum_level * 10) {
88-
new_mode = CHARGE_CONTROL_IDLE;
89-
in_percentage_control = 1;
90-
} else {
91-
new_mode = CHARGE_CONTROL_NORMAL;
92-
in_percentage_control = 0;
93-
}
94-
95-
set_chg_ctrl_mode(new_mode);
96-
#ifdef CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC
97-
rv = charger_discharge_on_ac(new_mode == CHARGE_CONTROL_DISCHARGE);
98-
#endif
99-
if (rv != EC_SUCCESS)
100-
CPRINTS("Failed to discharge.");
101-
}
102-
DECLARE_HOOK(HOOK_AC_CHANGE, battery_percentage_control, HOOK_PRIO_DEFAULT);
103-
DECLARE_HOOK(HOOK_BATTERY_SOC_CHANGE, battery_percentage_control, HOOK_PRIO_DEFAULT);
104-
10560
enum battery_present board_batt_is_present(void)
10661
{
10762
/*
@@ -304,41 +259,3 @@ __override void board_battery_compensate_params(struct batt_params *batt)
304259
/* override the display charge value for Windows system */
305260
batt->display_charge = get_system_percentage();
306261
}
307-
308-
/*****************************************************************************/
309-
/* Host command */
310-
311-
static enum ec_status cmd_charging_limit_control(struct host_cmd_handler_args *args)
312-
{
313-
314-
const struct ec_params_ec_chg_limit_control *p = args->params;
315-
struct ec_response_chg_limit_control *r = args->response;
316-
317-
if (p->modes & CHG_LIMIT_DISABLE) {
318-
charging_maximum_level = 0;
319-
system_set_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, 0);
320-
}
321-
322-
if (p->modes & CHG_LIMIT_SET_LIMIT) {
323-
if (p->max_percentage < 20)
324-
return EC_RES_ERROR;
325-
326-
charging_maximum_level = p->max_percentage;
327-
system_set_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, charging_maximum_level);
328-
}
329-
330-
if (p->modes & CHG_LIMIT_OVERRIDE)
331-
charging_maximum_level = charging_maximum_level | CHG_LIMIT_OVERRIDE;
332-
333-
if (p->modes & CHG_LIMIT_GET_LIMIT) {
334-
system_get_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, &charging_maximum_level);
335-
r->max_percentage = charging_maximum_level;
336-
args->response_size = sizeof(*r);
337-
}
338-
339-
battery_percentage_control();
340-
341-
return EC_RES_SUCCESS;
342-
}
343-
DECLARE_HOST_COMMAND(EC_CMD_CHARGE_LIMIT_CONTROL, cmd_charging_limit_control,
344-
EC_VER_MASK(0));

zephyr/program/framework/lotus/src/battery.c

Lines changed: 0 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#define CACHE_INVALIDATION_TIME_US (3 * SECOND)
3030

3131
static int battery_current_array[4];
32-
static uint8_t charging_maximum_level = EC_CHARGE_LIMIT_RESTORE;
3332
static int old_btp;
3433
static int power_on_check_batt;
3534

@@ -107,50 +106,6 @@ uint32_t get_system_percentage(void)
107106
return pre_os_percentage;
108107
}
109108

110-
static void battery_percentage_control(void)
111-
{
112-
enum ec_charge_control_mode new_mode;
113-
static int in_percentage_control;
114-
uint32_t batt_os_percentage = get_system_percentage();
115-
int rv;
116-
117-
/**
118-
* If the host command EC_CMD_CHARGE_CONTROL set control mode to CHARGE_CONTROL_DISCHARGE
119-
* or CHARGE_CONTROL_IDLE, ignore the battery_percentage_control();
120-
*/
121-
if (!in_percentage_control && get_chg_ctrl_mode() != CHARGE_CONTROL_NORMAL)
122-
return;
123-
124-
if (charging_maximum_level == EC_CHARGE_LIMIT_RESTORE)
125-
system_get_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, &charging_maximum_level);
126-
127-
if (charging_maximum_level & CHG_LIMIT_OVERRIDE) {
128-
new_mode = CHARGE_CONTROL_NORMAL;
129-
if (batt_os_percentage == 1000)
130-
charging_maximum_level = charging_maximum_level | 0x64;
131-
} else if (charging_maximum_level < 20)
132-
new_mode = CHARGE_CONTROL_NORMAL;
133-
else if (batt_os_percentage > charging_maximum_level * 10) {
134-
new_mode = CHARGE_CONTROL_DISCHARGE;
135-
in_percentage_control = 1;
136-
} else if (batt_os_percentage == charging_maximum_level * 10) {
137-
new_mode = CHARGE_CONTROL_IDLE;
138-
in_percentage_control = 1;
139-
} else {
140-
new_mode = CHARGE_CONTROL_NORMAL;
141-
in_percentage_control = 0;
142-
}
143-
144-
set_chg_ctrl_mode(new_mode);
145-
#ifdef CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC
146-
rv = charger_discharge_on_ac(new_mode == CHARGE_CONTROL_DISCHARGE);
147-
#endif
148-
if (rv != EC_SUCCESS)
149-
CPRINTS("Failed to discharge.");
150-
}
151-
DECLARE_HOOK(HOOK_AC_CHANGE, battery_percentage_control, HOOK_PRIO_DEFAULT);
152-
DECLARE_HOOK(HOOK_BATTERY_SOC_CHANGE, battery_percentage_control, HOOK_PRIO_DEFAULT);
153-
154109
int get_average_battery_current(void)
155110
{
156111
int idx;
@@ -396,53 +351,3 @@ __override int board_cut_off_battery(void)
396351

397352
return EC_RES_ERROR;
398353
}
399-
400-
/*****************************************************************************/
401-
/* Host command */
402-
403-
static enum ec_status cmd_charging_limit_control(struct host_cmd_handler_args *args)
404-
{
405-
406-
const struct ec_params_ec_chg_limit_control *p = args->params;
407-
struct ec_response_chg_limit_control *r = args->response;
408-
409-
if (p->modes & CHG_LIMIT_DISABLE) {
410-
charging_maximum_level = 0;
411-
system_set_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, 0);
412-
}
413-
414-
if (p->modes & CHG_LIMIT_SET_LIMIT) {
415-
if (p->max_percentage < 20)
416-
return EC_RES_ERROR;
417-
418-
charging_maximum_level = p->max_percentage;
419-
system_set_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, charging_maximum_level);
420-
}
421-
422-
if (p->modes & CHG_LIMIT_OVERRIDE)
423-
charging_maximum_level = charging_maximum_level | CHG_LIMIT_OVERRIDE;
424-
425-
if (p->modes & CHG_LIMIT_GET_LIMIT) {
426-
system_get_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, &charging_maximum_level);
427-
r->max_percentage = charging_maximum_level;
428-
args->response_size = sizeof(*r);
429-
}
430-
431-
battery_percentage_control();
432-
433-
return EC_RES_SUCCESS;
434-
}
435-
DECLARE_HOST_COMMAND(EC_CMD_CHARGE_LIMIT_CONTROL, cmd_charging_limit_control,
436-
EC_VER_MASK(0));
437-
438-
static enum ec_status cmd_get_cutoff_status(struct host_cmd_handler_args *args)
439-
{
440-
struct ec_response_get_cutoff_status *r = args->response;
441-
442-
r->status = battery_is_cut_off();
443-
args->response_size = sizeof(*r);
444-
445-
return EC_RES_SUCCESS;
446-
}
447-
DECLARE_HOST_COMMAND(EC_CMD_GET_CUTOFF_STATUS, cmd_get_cutoff_status,
448-
EC_VER_MASK(0));

zephyr/program/framework/marigold/src/battery.c

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#define CACHE_INVALIDATION_TIME_US (3 * SECOND)
2525

2626
static enum battery_present batt_pres_prev = BP_NOT_SURE;
27-
static uint8_t charging_maximum_level = EC_CHARGE_LIMIT_RESTORE;
2827

2928
enum battery_trip_point_state_t {
3029
BATTERY_TRIP_POINT_DISCHARGE = BIT(0),
@@ -71,50 +70,6 @@ uint32_t get_system_percentage(void)
7170
return pre_os_percentage;
7271
}
7372

74-
static void battery_percentage_control(void)
75-
{
76-
enum ec_charge_control_mode new_mode;
77-
static int in_percentage_control;
78-
uint32_t batt_os_percentage = get_system_percentage();
79-
int rv;
80-
81-
/**
82-
* If the host command EC_CMD_CHARGE_CONTROL set control mode to CHARGE_CONTROL_DISCHARGE
83-
* or CHARGE_CONTROL_IDLE, ignore the battery_percentage_control();
84-
*/
85-
if (!in_percentage_control && get_chg_ctrl_mode() != CHARGE_CONTROL_NORMAL)
86-
return;
87-
88-
if (charging_maximum_level == EC_CHARGE_LIMIT_RESTORE)
89-
system_get_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, &charging_maximum_level);
90-
91-
if (charging_maximum_level & CHG_LIMIT_OVERRIDE) {
92-
new_mode = CHARGE_CONTROL_NORMAL;
93-
if (batt_os_percentage == 1000)
94-
charging_maximum_level = charging_maximum_level | 0x64;
95-
} else if (charging_maximum_level < 20)
96-
new_mode = CHARGE_CONTROL_NORMAL;
97-
else if (batt_os_percentage > charging_maximum_level * 10) {
98-
new_mode = CHARGE_CONTROL_DISCHARGE;
99-
in_percentage_control = 1;
100-
} else if (batt_os_percentage == charging_maximum_level * 10) {
101-
new_mode = CHARGE_CONTROL_IDLE;
102-
in_percentage_control = 1;
103-
} else {
104-
new_mode = CHARGE_CONTROL_NORMAL;
105-
in_percentage_control = 0;
106-
}
107-
108-
set_chg_ctrl_mode(new_mode);
109-
#ifdef CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC
110-
rv = charger_discharge_on_ac(new_mode == CHARGE_CONTROL_DISCHARGE);
111-
#endif
112-
if (rv != EC_SUCCESS)
113-
CPRINTS("Failed to discharge.");
114-
}
115-
DECLARE_HOOK(HOOK_AC_CHANGE, battery_percentage_control, HOOK_PRIO_DEFAULT);
116-
DECLARE_HOOK(HOOK_BATTERY_SOC_CHANGE, battery_percentage_control, HOOK_PRIO_DEFAULT);
117-
11873
enum battery_present board_batt_is_present(void)
11974
{
12075
/*
@@ -370,41 +325,3 @@ __override void board_battery_compensate_params(struct batt_params *batt)
370325
/* override the display charge value for Windows system */
371326
batt->display_charge = get_system_percentage();
372327
}
373-
374-
/*****************************************************************************/
375-
/* Host command */
376-
377-
static enum ec_status cmd_charging_limit_control(struct host_cmd_handler_args *args)
378-
{
379-
380-
const struct ec_params_ec_chg_limit_control *p = args->params;
381-
struct ec_response_chg_limit_control *r = args->response;
382-
383-
if (p->modes & CHG_LIMIT_DISABLE) {
384-
charging_maximum_level = 0;
385-
system_set_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, 0);
386-
}
387-
388-
if (p->modes & CHG_LIMIT_SET_LIMIT) {
389-
if (p->max_percentage < 20)
390-
return EC_RES_ERROR;
391-
392-
charging_maximum_level = p->max_percentage;
393-
system_set_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, charging_maximum_level);
394-
}
395-
396-
if (p->modes & CHG_LIMIT_OVERRIDE)
397-
charging_maximum_level = charging_maximum_level | CHG_LIMIT_OVERRIDE;
398-
399-
if (p->modes & CHG_LIMIT_GET_LIMIT) {
400-
system_get_bbram(SYSTEM_BBRAM_IDX_CHARGE_LIMIT_MAX, &charging_maximum_level);
401-
r->max_percentage = charging_maximum_level;
402-
args->response_size = sizeof(*r);
403-
}
404-
405-
battery_percentage_control();
406-
407-
return EC_RES_SUCCESS;
408-
}
409-
DECLARE_HOST_COMMAND(EC_CMD_CHARGE_LIMIT_CONTROL, cmd_charging_limit_control,
410-
EC_VER_MASK(0));

0 commit comments

Comments
 (0)