diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2018-09-14 10:47:53 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-09-20 21:29:59 -0700 |
commit | 69246cf51011ca951e5c405f5a4d2ee4448eb66c (patch) | |
tree | d99ec6c42874d825f705bcd3ba3c7a709c103232 /driver | |
parent | d5b9b8c12570a57def102d0039f0aef379582fb0 (diff) | |
download | chrome-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.c | 3 | ||||
-rw-r--r-- | driver/bc12/pi3usb9281.c | 42 | ||||
-rw-r--r-- | driver/charger/bd9995x.c | 4 | ||||
-rw-r--r-- | driver/charger/rt946x.c | 13 |
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, ®); @@ -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); } |