summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2020-08-25 11:13:01 -0600
committerCommit Bot <commit-bot@chromium.org>2020-08-29 22:41:17 +0000
commitd32310fdb0935f9715f01d163444f479cbdf16c9 (patch)
tree0edc4fc0e0248e6980f527c22266db8f473525a2
parent9ead22ae18de72b17b5a3d86462b3da16fde1376 (diff)
downloadchrome-ec-d32310fdb0935f9715f01d163444f479cbdf16c9.tar.gz
Charger: Add chgnum parameter to OTG set functions
Add the charger number as an input for setting OTG output current and enabling it, both in the charger driver and in charge_set_output_current_limit(). Also add a clarifying note about the intent of CHARGER_SOLO. BRANCH=None BUG=b:147440290 TEST=make -j buildall Signed-off-by: Diana Z <dzigterman@chromium.org> Change-Id: I7656c19a87d8216f5efc72dcffa6d638064d3e2f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2376469 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2383895 Reviewed-by: Edward Hill <ecgh@chromium.org> Commit-Queue: Edward Hill <ecgh@chromium.org> Tested-by: Edward Hill <ecgh@chromium.org>
-rw-r--r--baseboard/kukui/usb_pd_policy.c8
-rw-r--r--board/scarlet/usb_pd_policy.c4
-rw-r--r--common/charge_state_v2.c10
-rw-r--r--common/charger.c7
-rw-r--r--common/ec_ec_comm_slave.c5
-rw-r--r--include/charge_state_v2.h3
-rw-r--r--include/charger.h12
7 files changed, 29 insertions, 20 deletions
diff --git a/baseboard/kukui/usb_pd_policy.c b/baseboard/kukui/usb_pd_policy.c
index d56a711dd6..b2ff65b849 100644
--- a/baseboard/kukui/usb_pd_policy.c
+++ b/baseboard/kukui/usb_pd_policy.c
@@ -57,9 +57,9 @@ int pd_set_power_supply_ready(int port)
#endif /* defined(CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT) */
if (IS_ENABLED(VARIANT_KUKUI_CHARGER_ISL9238))
- charge_set_output_current_limit(3300, 5000);
+ charge_set_output_current_limit(CHARGER_SOLO, 3300, 5000);
else
- charger_enable_otg_power(1);
+ charger_enable_otg_power(CHARGER_SOLO, 1);
gpio_set_level(GPIO_EN_USBC_CHARGE_L, 1);
gpio_set_level(GPIO_EN_PP5000_USBC, 1);
@@ -92,9 +92,9 @@ void pd_power_supply_reset(int port)
#endif /* defined(CONFIG_USB_PD_MAX_SINGLE_SOURCE_CURRENT) */
if (IS_ENABLED(VARIANT_KUKUI_CHARGER_ISL9238))
- charge_set_output_current_limit(0, 0);
+ charge_set_output_current_limit(CHARGER_SOLO, 0, 0);
else
- charger_enable_otg_power(0);
+ charger_enable_otg_power(CHARGER_SOLO, 0);
gpio_set_level(GPIO_EN_PP5000_USBC, 0);
diff --git a/board/scarlet/usb_pd_policy.c b/board/scarlet/usb_pd_policy.c
index a47c15ebdb..cba4540ecd 100644
--- a/board/scarlet/usb_pd_policy.c
+++ b/board/scarlet/usb_pd_policy.c
@@ -37,7 +37,7 @@ int pd_set_power_supply_ready(int port)
pd_set_vbus_discharge(port, 0);
/* Provide VBUS */
vbus_en = 1;
- charger_enable_otg_power(1);
+ charger_enable_otg_power(CHARGER_SOLO, 1);
/* notify host of power info change */
pd_send_host_event(PD_EVENT_POWER_CHANGE);
@@ -52,7 +52,7 @@ void pd_power_supply_reset(int port)
prev_en = vbus_en;
/* Disable VBUS */
vbus_en = 0;
- charger_enable_otg_power(0);
+ charger_enable_otg_power(CHARGER_SOLO, 0);
/* Enable discharge if we were previously sourcing 5V */
if (prev_en)
pd_set_vbus_discharge(port, 1);
diff --git a/common/charge_state_v2.c b/common/charge_state_v2.c
index 2796dd9804..d45df208e7 100644
--- a/common/charge_state_v2.c
+++ b/common/charge_state_v2.c
@@ -414,7 +414,7 @@ static void set_base_lid_current(int current_base, int allow_charge_base,
}
if (current_lid >= 0) {
- ret = charge_set_output_current_limit(0, 0);
+ ret = charge_set_output_current_limit(CHARGER_SOLO, 0, 0);
if (ret)
return;
ret = charger_set_input_current(chgnum, current_lid);
@@ -426,7 +426,7 @@ static void set_base_lid_current(int current_base, int allow_charge_base,
else
ret = charge_request(0, 0);
} else {
- ret = charge_set_output_current_limit(
+ ret = charge_set_output_current_limit(CHARGER_SOLO,
-current_lid, otg_voltage);
}
@@ -2390,18 +2390,18 @@ int charge_is_consuming_full_input_current(void)
}
#ifdef CONFIG_CHARGER_OTG
-int charge_set_output_current_limit(int ma, int mv)
+int charge_set_output_current_limit(int chgnum, int ma, int mv)
{
int ret;
int enable = ma > 0;
if (enable) {
- ret = charger_set_otg_current_voltage(ma, mv);
+ ret = charger_set_otg_current_voltage(chgnum, ma, mv);
if (ret != EC_SUCCESS)
return ret;
}
- ret = charger_enable_otg_power(enable);
+ ret = charger_enable_otg_power(chgnum, enable);
if (ret != EC_SUCCESS)
return ret;
diff --git a/common/charger.c b/common/charger.c
index eefdcb59cd..0b1741e592 100644
--- a/common/charger.c
+++ b/common/charger.c
@@ -316,9 +316,8 @@ enum ec_error_list charger_set_mode(int mode)
return rv;
}
-enum ec_error_list charger_enable_otg_power(int enabled)
+enum ec_error_list charger_enable_otg_power(int chgnum, int enabled)
{
- int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
@@ -332,10 +331,10 @@ enum ec_error_list charger_enable_otg_power(int enabled)
return rv;
}
-enum ec_error_list charger_set_otg_current_voltage(int output_current,
+enum ec_error_list charger_set_otg_current_voltage(int chgnum,
+ int output_current,
int output_voltage)
{
- int chgnum = 0;
int rv = EC_ERROR_UNIMPLEMENTED;
if ((chgnum < 0) || (chgnum >= board_get_charger_chip_count())) {
diff --git a/common/ec_ec_comm_slave.c b/common/ec_ec_comm_slave.c
index 339f0f0490..ae845d58bc 100644
--- a/common/ec_ec_comm_slave.c
+++ b/common/ec_ec_comm_slave.c
@@ -163,7 +163,7 @@ static void handle_cmd_charger_control(
}
if (params->max_current >= 0) {
- charge_set_output_current_limit(0, 0);
+ charge_set_output_current_limit(CHARGER_SOLO, 0, 0);
charge_set_input_current_limit(
MIN(MAX_CURRENT_MA, params->max_current), 0);
charging_allowed = params->allow_charging;
@@ -177,7 +177,8 @@ static void handle_cmd_charger_control(
/* Reset input current to minimum. */
charge_set_input_current_limit(CONFIG_CHARGER_INPUT_CURRENT, 0);
/* Setup and enable "OTG". */
- charge_set_output_current_limit(-params->max_current,
+ charge_set_output_current_limit(CHARGER_SOLO,
+ -params->max_current,
params->otg_voltage);
charging_allowed = 0;
}
diff --git a/include/charge_state_v2.h b/include/charge_state_v2.h
index f5408fa253..1cff136ee8 100644
--- a/include/charge_state_v2.h
+++ b/include/charge_state_v2.h
@@ -55,11 +55,12 @@ struct charge_state_data {
* Set the output current limit and voltage. This is used to provide power from
* the charger chip ("OTG" mode).
*
+ * @param chgnum Charger index to act upon
* @param ma Maximum current to provide in mA (0 to disable output).
* @param mv Voltage in mV (ignored if ma == 0).
* @return EC_SUCCESS or error
*/
-int charge_set_output_current_limit(int ma, int mv);
+int charge_set_output_current_limit(int chgnum, int ma, int mv);
/**
* Set the charge input current limit. This value is stored and sent every
diff --git a/include/charger.h b/include/charger.h
index 246edec1ab..f097f564a9 100644
--- a/include/charger.h
+++ b/include/charger.h
@@ -134,10 +134,17 @@ extern struct charger_config_t chg_chips[];
__override_proto uint8_t board_get_charger_chip_count(void);
#ifdef CONFIG_CHARGER_SINGLE_CHIP
+/*
+ * Note: CHARGER_SOLO should be used anywhere the charger index being called is
+ * only valid for a single-chip system. This will then generate build errors if
+ * the callsite is compliled for a multi-chip system, which needs to re-evaluate
+ * the charger index to act upon.
+ */
enum chg_id {
CHARGER_SOLO,
CHARGER_NUM,
};
+
#endif
/* Get the current charger_params. Failures are reported in .flags */
@@ -193,7 +200,7 @@ enum ec_error_list charger_set_mode(int mode);
* For chargers that are able to supply output power for OTG dongle, this
* function enables or disables power output.
*/
-enum ec_error_list charger_enable_otg_power(int enabled);
+enum ec_error_list charger_enable_otg_power(int chgnum, int enabled);
/**
* Sets OTG current limit and voltage (independent of whether OTG power is
@@ -211,7 +218,8 @@ enum ec_error_list charger_enable_otg_power(int enabled);
*
* @return EC_SUCCESS on success, an error otherwise.
*/
-enum ec_error_list charger_set_otg_current_voltage(int output_current,
+enum ec_error_list charger_set_otg_current_voltage(int chgnum,
+ int output_current,
int output_voltage);
/**