summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2018-09-14 10:47:53 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-09-20 21:29:59 -0700
commit69246cf51011ca951e5c405f5a4d2ee4448eb66c (patch)
treed99ec6c42874d825f705bcd3ba3c7a709c103232 /driver
parentd5b9b8c12570a57def102d0039f0aef379582fb0 (diff)
downloadchrome-ec-69246cf51011ca951e5c405f5a4d2ee4448eb66c.tar.gz
chgmgr: Allow charge_manager_update_charge to accept NULL
Currently, charge_manager_update_charge does not handle NULL pointer for struct charge_port_info any differently. It's not sanity-checked either (thus memory access violation can occur). This patch will make charge_manager_update_charge accept NULL pointer and set available current and voltage to zero. This also helps callers' intentions be clear because callers can explicitly specify NULL (instead of passing a pointer to chg = {0}, which is initialized somewhere else). Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> BUG=none BRANCH=none TEST=buildall Change-Id: I518662ab6a3a07f93da5d34cf62a6f856884f67d Reviewed-on: https://chromium-review.googlesource.com/1226125 Commit-Ready: Daisuke Nojiri <dnojiri@chromium.org> Tested-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Diffstat (limited to 'driver')
-rw-r--r--driver/bc12/bq24392.c3
-rw-r--r--driver/bc12/pi3usb9281.c42
-rw-r--r--driver/charger/bd9995x.c4
-rw-r--r--driver/charger/rt946x.c13
4 files changed, 23 insertions, 39 deletions
diff --git a/driver/bc12/bq24392.c b/driver/bc12/bq24392.c
index 3092f9f794..b74781f221 100644
--- a/driver/bc12/bq24392.c
+++ b/driver/bc12/bq24392.c
@@ -107,13 +107,12 @@ static void bc12_detect(const int port)
static void power_down_ic(const int port)
{
const struct bq24392_config_t * const cfg = &bq24392_config[port];
- struct charge_port_info no_chg = { 0 };
/* Turn off the IC. */
activate_chip_enable(cfg, 0);
/* Let charge manager know there's no more charge available. */
- charge_manager_update_charge(CHARGE_SUPPLIER_OTHER, port, &no_chg);
+ charge_manager_update_charge(CHARGE_SUPPLIER_OTHER, port, NULL);
}
/**
diff --git a/driver/bc12/pi3usb9281.c b/driver/bc12/pi3usb9281.c
index 9bdf875468..f1bd3ce8d4 100644
--- a/driver/bc12/pi3usb9281.c
+++ b/driver/bc12/pi3usb9281.c
@@ -289,7 +289,6 @@ void usb_charger_set_switches(int port, enum usb_switch setting)
static void bc12_detect(int port)
{
int device_type, charger_status;
- struct charge_port_info charge = {0};
int type;
if (usb_charger_port_is_sourcing_vbus(port)) {
@@ -351,6 +350,7 @@ static void bc12_detect(int port)
/* Attachment: decode + update available charge */
if (device_type || PI3USB9281_CHG_STATUS_ANY(charger_status)) {
+ struct charge_port_info chg;
if (PI3USB9281_CHG_STATUS_ANY(charger_status))
type = CHARGE_SUPPLIER_PROPRIETARY;
else if (device_type & PI3USB9281_TYPE_CDP)
@@ -362,31 +362,21 @@ static void bc12_detect(int port)
else
type = CHARGE_SUPPLIER_OTHER;
- charge.voltage = USB_CHARGER_VOLTAGE_MV;
- charge.current = pi3usb9281_get_ilim(device_type,
- charger_status);
- charge_manager_update_charge(type, port, &charge);
- } else { /* Detachment */
- charge_manager_update_charge(
- CHARGE_SUPPLIER_PROPRIETARY,
- port,
- &charge);
- charge_manager_update_charge(
- CHARGE_SUPPLIER_BC12_CDP,
- port,
- &charge);
- charge_manager_update_charge(
- CHARGE_SUPPLIER_BC12_DCP,
- port,
- &charge);
- charge_manager_update_charge(
- CHARGE_SUPPLIER_BC12_SDP,
- port,
- &charge);
- charge_manager_update_charge(
- CHARGE_SUPPLIER_OTHER,
- port,
- &charge);
+ chg.voltage = USB_CHARGER_VOLTAGE_MV;
+ chg.current = pi3usb9281_get_ilim(device_type, charger_status);
+ charge_manager_update_charge(type, port, &chg);
+ } else {
+ /* Detachment */
+ charge_manager_update_charge(CHARGE_SUPPLIER_PROPRIETARY,
+ port, NULL);
+ charge_manager_update_charge(CHARGE_SUPPLIER_BC12_CDP,
+ port, NULL);
+ charge_manager_update_charge(CHARGE_SUPPLIER_BC12_DCP,
+ port, NULL);
+ charge_manager_update_charge(CHARGE_SUPPLIER_BC12_SDP,
+ port, NULL);
+ charge_manager_update_charge(CHARGE_SUPPLIER_OTHER,
+ port, NULL);
}
}
diff --git a/driver/charger/bd9995x.c b/driver/charger/bd9995x.c
index 5423099e52..9ab69a7c38 100644
--- a/driver/charger/bd9995x.c
+++ b/driver/charger/bd9995x.c
@@ -438,10 +438,8 @@ static int bd9995x_bc12_check_type(int port)
static void bd9995x_bc12_detach(int port, int type)
{
- struct charge_port_info charge = {0};
-
/* Update charge manager */
- charge_manager_update_charge(type, port, &charge);
+ charge_manager_update_charge(type, port, NULL);
/* Disable charging trigger by BC1.2 detection */
bd9995x_bc12_enable_charging(port, 0);
diff --git a/driver/charger/rt946x.c b/driver/charger/rt946x.c
index 757d5a3c0d..9bb1a6cfd7 100644
--- a/driver/charger/rt946x.c
+++ b/driver/charger/rt946x.c
@@ -903,10 +903,11 @@ void rt946x_interrupt(enum gpio_signal signal)
void usb_charger_task(void *u)
{
- struct charge_port_info charge;
+ struct charge_port_info chg;
int bc12_type = CHARGE_SUPPLIER_NONE;
int reg = 0;
+ chg.voltage = USB_CHARGER_VOLTAGE_MV;
while (1) {
rt946x_read8(RT946X_REG_DPDMIRQ, &reg);
@@ -914,20 +915,16 @@ void usb_charger_task(void *u)
if (reg & RT946X_MASK_DPDMIRQ_ATTACH) {
bc12_type = rt946x_get_bc12_device_type();
if (bc12_type != CHARGE_SUPPLIER_NONE) {
- charge.voltage = USB_CHARGER_VOLTAGE_MV;
- charge.current =
- rt946x_get_bc12_ilim(bc12_type);
+ chg.current = rt946x_get_bc12_ilim(bc12_type);
charge_manager_update_charge(bc12_type,
- 0, &charge);
+ 0, &chg);
rt946x_enable_bc12_detection(0);
}
}
/* VBUS detach event */
if (reg & RT946X_MASK_DPDMIRQ_DETACH) {
- charge.current = 0;
- charge.voltage = 0;
- charge_manager_update_charge(bc12_type, 0, &charge);
+ charge_manager_update_charge(bc12_type, 0, NULL);
rt946x_enable_bc12_detection(1);
}