blob: 0cb2a9455b6c4ea7e340fefc9bb7f45d23b9627f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
/* Copyright 2021 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef __CROS_EC_DPS__H
#define __CROS_EC_DPS__H
#include <stdbool.h>
#include "common.h"
/* Dynamic PDO Selection config. */
struct dps_config_t {
/* (0, 100) coeff for transition to a lower power PDO*/
uint32_t k_less_pwr;
/* (0, 100) coeff for transition to a higher power PDO*/
uint32_t k_more_pwr;
/* Number for how many the same consecutive sample to transist */
uint32_t k_sample;
/* Number for moving average window for the power and the current. */
uint32_t k_window;
/* Power stabilized time after a new contract in us */
uint32_t t_stable;
/* Next power evaluation time interval in us */
uint32_t t_check;
/*
* If the current voltage is more efficient than the previous voltage
*
* @param curr_mv: current PDO voltage
* @param prev_mv: previous PDO voltage
* @param batt_mv: battery desired voltage
* @param batt_mw: current battery power
* @param input_mw: current adapter input power
* @return true is curr_mv is more efficient otherwise false
*/
bool (*is_more_efficient)(int curr_mv, int prev_mv, int batt_mv,
int batt_mw, int input_mw);
};
/*
* Get voltage in the current system load
*
* @return a voltage(mV) that the adapter supports to charge at the given port.
*/
int dps_get_dynamic_voltage(void);
/*
* Get DPS charge port
*
* @return the DPS charge port, or CHARGE_PORT_NONE if unavailable.
*/
int dps_get_charge_port(void);
/*
* Check if DPS is enabled.
*
* @return true if enabled, false otherwise.
*/
bool dps_is_enabled(void);
/*
* Update DPS stablized timeout
*
* This is called at the exit of PE_SNK_TRANSITION_SINK
*
* @param port: the port for timer reset.
*/
void dps_update_stabilized_time(int port);
#ifdef TEST_BUILD
__test_only void dps_enable(bool en);
__test_only int dps_init(void);
__test_only struct dps_config_t *dps_get_config(void);
__test_only bool dps_is_fake_enabled(void);
__test_only int dps_get_fake_mv(void);
__test_only int dps_get_fake_ma(void);
__test_only int *dps_get_debug_level(void);
#endif
#endif /* __CROS_EC_DPS__H */
|