diff options
author | Tom Hughes <tomhughes@chromium.org> | 2022-09-21 14:08:36 -0700 |
---|---|---|
committer | Tom Hughes <tomhughes@chromium.org> | 2022-09-22 12:59:38 -0700 |
commit | c453fd704268ef72de871b0c5ac7a989de662334 (patch) | |
tree | fcf6ce5810f9ff9e3c8cce434812dd75492269ed /driver/charger/bd9995x.c | |
parent | 6c1587ca70f558b4f96b3f0b18ad8b027d3ba99d (diff) | |
parent | 28712dae9d7ed1e694f7622cc083afa71090d4d5 (diff) | |
download | chrome-ec-c453fd704268ef72de871b0c5ac7a989de662334.tar.gz |
Merge remote-tracking branch cros/main into firmware-fpmcu-dartmonkey-releasefirmware-fpmcu-dartmonkey-release
Generated by: ./util/update_release_branch.py --board dartmonkey --relevant_paths_file
./util/fingerprint-relevant-paths.txt firmware-fpmcu-dartmonkey-release
Relevant changes:
git log --oneline 6c1587ca70..28712dae9d -- board/nocturne_fp
board/dartmonkey common/fpsensor docs/fingerprint driver/fingerprint
util/getversion.sh
ded9307b79 util/getversion.sh: Fix version when not in a git repo
956055e692 board: change Google USB vendor info
71b2ef709d Update license boilerplate text in source code files
33e11afda0 Revert "fpsensor: Build fpsensor source file with C++"
c8d0360723 fpsensor: Build fpsensor source file with C++
bc113abd53 fpsensor: Fix g++ compiler error
150a58a0dc fpsensor: Fix fp_set_sensor_mode return type
b33b5ce85b fpsensor: Remove nested designators for C++ compatibility
2e864b2539 tree-wide: const-ify argv for console commands
56d8b360f9 test: Add test for get ikm failure when seed not set
3a3d6c3690 test: Add test for fpsensor trivial key failure
233e6bbd08 fpsensor_crypto: Abstract calls to hmac_SHA256
0a041b285b docs/fingerprint: Typo correction
c03fab67e2 docs/fingerprint: Fix the path of fputils.py
0b5d4baf5a util/getversion.sh: Fix empty file list handling
6e128fe760 FPMCU dev board environment with Satlab
3eb29b6aa5 builtin: Move ssize_t to sys/types.h
345d62ebd1 docs/fingerprint: Update power numbers for latest dartmonkey release
c25ffdb316 common: Conditionally support printf %l and %i modifiers
9a3c514b45 test: Add a test to check if the debugger is connected
54e603413f Move standard library tests to their own file
43fa6b4bf8 docs/fingerprint: Update power numbers for latest bloonchipper release
25536f9a84 driver/fingerprint/fpc/bep/fpc_sensor_spi.c: Format with clang-format
4face99efd driver/fingerprint/fpc/libfp/fpc_sensor_pal.h: Format with clang-format
738de2b575 trng: Rename rand to trng_rand
14b8270edd docs/fingerprint: Update dragonclaw power numbers
0b268f93d1 driver/fingerprint/fpc/libfp/fpc_private.c: Format with clang-format
f80da163f2 driver/fingerprint/fpc/libfp/fpc_private.h: Format with clang-format
a0751778f4 board/nocturne_fp/ro_workarounds.c: Format with clang-format
5e9c85c9b1 driver/fingerprint/fpc/libfp/fpc_sensor_pal.c: Format with clang-format
c1f9dd3cf8 driver/fingerprint/fpc/libfp/fpc_bio_algorithm.h: Format with clang-format
eb1e1bed8d driver/fingerprint/fpc/libfp/fpc1145_private.h: Format with clang-format
6e7b611821 driver/fingerprint/fpc/bep/fpc_bio_algorithm.h: Format with clang-format
e0589cd5e2 driver/fingerprint/fpc/bep/fpc1035_private.h: Format with clang-format
58f0246dbe board/nocturne_fp/board_ro.c: Format with clang-format
7905e556a0 common/fpsensor/fpsensor_crypto.c: Format with clang-format
21289d170c driver/fingerprint/fpc/bep/fpc1025_private.h: Format with clang-format
98a20f937e common/fpsensor/fpsensor_state.c: Format with clang-format
a2d255d8af common/fpsensor/fpsensor.c: Format with clang-format
84e53a65da board/nocturne_fp/board.h: Format with clang-format
73055eeb3f driver/fingerprint/fpc/bep/fpc_private.c: Format with clang-format
0f7b5cb509 common/fpsensor/fpsensor_private.h: Format with clang-format
1ceade6e65 driver/fingerprint/fpc/bep/fpc_private.h: Format with clang-format
dca9d74321 Revert "trng: Rename rand to trng_rand"
a6b0b3554f trng: Rename rand to trng_rand
28d0b75b70 third_party/boringssl: Remove unused header
BRANCH=None
BUG=b:244387210 b:242720240 b:215613183 b:242720910 b:236386294
BUG=b:234181908 b:244781166 b:234781655 b:234143158 b:234181908
BUG=b:237344361 b:236025198 b:234181908 b:180945056 chromium:1098010
BUG=b:246424843 b:234181908 b:131913998
TEST=`make -j buildall`
TEST=./util/run_device_tests.py --board dartmonkey
Test "aes": PASSED
Test "cec": PASSED
Test "cortexm_fpu": PASSED
Test "crc": PASSED
Test "flash_physical": PASSED
Test "flash_write_protect": PASSED
Test "fpsensor_hw": PASSED
Test "fpsensor_spi_ro": PASSED
Test "fpsensor_spi_rw": PASSED
Test "fpsensor_uart_ro": PASSED
Test "fpsensor_uart_rw": PASSED
Test "mpu_ro": PASSED
Test "mpu_rw": PASSED
Test "mutex": PASSED
Test "pingpong": PASSED
Test "printf": PASSED
Test "queue": PASSED
Test "rollback_region0": PASSED
Test "rollback_region1": PASSED
Test "rollback_entropy": PASSED
Test "rtc": PASSED
Test "sha256": PASSED
Test "sha256_unrolled": PASSED
Test "static_if": PASSED
Test "stdlib": PASSED
Test "system_is_locked_wp_on": PASSED
Test "system_is_locked_wp_off": PASSED
Test "timer_dos": PASSED
Test "utils": PASSED
Test "utils_str": PASSED
Test "panic_data_dartmonkey_v2.0.2887": PASSED
Test "panic_data_nocturne_fp_v2.2.64": PASSED
Test "panic_data_nami_fp_v2.2.144": PASSED
Force-Relevant-Builds: all
Signed-off-by: Tom Hughes <tomhughes@chromium.org>
Change-Id: I2c312583a709fedae8fe11d92c22328c3b634bc7
Diffstat (limited to 'driver/charger/bd9995x.c')
-rw-r--r-- | driver/charger/bd9995x.c | 388 |
1 files changed, 198 insertions, 190 deletions
diff --git a/driver/charger/bd9995x.c b/driver/charger/bd9995x.c index 8fee94ad7b..a6303d41b4 100644 --- a/driver/charger/bd9995x.c +++ b/driver/charger/bd9995x.c @@ -1,4 +1,4 @@ -/* Copyright 2016 The Chromium OS Authors. All rights reserved. +/* Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -15,13 +15,14 @@ #include "ec_commands.h" #include "hooks.h" #include "i2c.h" +#include "panic.h" #include "task.h" #include "time.h" #include "util.h" #include "usb_charge.h" #include "usb_pd.h" -#define OTPROM_LOAD_WAIT_RETRY 3 +#define OTPROM_LOAD_WAIT_RETRY 3 #define BD9995X_CHARGE_PORT_COUNT 2 @@ -29,11 +30,11 @@ * BC1.2 detection starts 100ms after VBUS/VCC attach and typically * completes 312ms after VBUS/VCC attach. */ -#define BC12_DETECT_US (312*MSEC) +#define BC12_DETECT_US (312 * MSEC) #define BD9995X_VSYS_PRECHARGE_OFFSET_MV 200 /* Console output macros */ -#define CPRINTS(format, args...) cprints(CC_CHARGER, format, ## args) +#define CPRINTS(format, args...) cprints(CC_CHARGER, format, ##args) #ifdef CONFIG_BD9995X_DELAY_INPUT_PORT_SELECT /* @@ -44,18 +45,18 @@ #define VBUS_DELTA 1000 /* VBUS is debounced if it's stable for this length of time */ -#define VBUS_MSEC (100*MSEC) +#define VBUS_MSEC (100 * MSEC) /* VBUS debouncing sample interval */ -#define VBUS_CHECK_MSEC (10*MSEC) +#define VBUS_CHECK_MSEC (10 * MSEC) /* Time to wait before VBUS debouncing begins */ -#define STABLE_TIMEOUT (500*MSEC) +#define STABLE_TIMEOUT (500 * MSEC) /* Maximum time to wait until VBUS is debounced */ -#define DEBOUNCE_TIMEOUT (500*MSEC) +#define DEBOUNCE_TIMEOUT (500 * MSEC) -enum vstate {START, STABLE, DEBOUNCE}; +enum vstate { START, STABLE, DEBOUNCE }; static enum vstate vbus_state; static int vbus_voltage; @@ -67,29 +68,29 @@ static int select_input_port_update; #endif /* Charger parameters */ -#define CHARGER_NAME BD9995X_CHARGER_NAME -#define CHARGE_V_MAX 19200 -#define CHARGE_V_MIN 3072 -#define CHARGE_V_STEP 16 -#define CHARGE_I_MAX 16320 -#define CHARGE_I_MIN 128 -#define CHARGE_I_OFF 0 -#define CHARGE_I_STEP 64 -#define INPUT_I_MAX 16352 -#define INPUT_I_MIN 512 -#define INPUT_I_STEP 32 +#define CHARGER_NAME BD9995X_CHARGER_NAME +#define CHARGE_V_MAX 19200 +#define CHARGE_V_MIN 3072 +#define CHARGE_V_STEP 16 +#define CHARGE_I_MAX 16320 +#define CHARGE_I_MIN 128 +#define CHARGE_I_OFF 0 +#define CHARGE_I_STEP 64 +#define INPUT_I_MAX 16352 +#define INPUT_I_MIN 512 +#define INPUT_I_STEP 32 /* Charger parameters */ static const struct charger_info bd9995x_charger_info = { - .name = CHARGER_NAME, - .voltage_max = CHARGE_V_MAX, - .voltage_min = CHARGE_V_MIN, + .name = CHARGER_NAME, + .voltage_max = CHARGE_V_MAX, + .voltage_min = CHARGE_V_MIN, .voltage_step = CHARGE_V_STEP, - .current_max = CHARGE_I_MAX, - .current_min = CHARGE_I_MIN, + .current_max = CHARGE_I_MAX, + .current_min = CHARGE_I_MIN, .current_step = CHARGE_I_STEP, - .input_current_max = INPUT_I_MAX, - .input_current_min = INPUT_I_MIN, + .input_current_max = INPUT_I_MAX, + .input_current_min = INPUT_I_MIN, .input_current_step = INPUT_I_STEP, }; @@ -164,8 +165,7 @@ static inline enum ec_error_list ch_raw_read16(int chgnum, int cmd, int *param, } rv = i2c_read16(chg_chips[chgnum].i2c_port, - chg_chips[chgnum].i2c_addr_flags, - cmd, param); + chg_chips[chgnum].i2c_addr_flags, cmd, param); bd9995x_read_cleanup: mutex_unlock(&bd9995x_map_mutex); @@ -193,8 +193,7 @@ static inline enum ec_error_list ch_raw_write16(int chgnum, int cmd, int param, } rv = i2c_write16(chg_chips[chgnum].i2c_port, - chg_chips[chgnum].i2c_addr_flags, - cmd, param); + chg_chips[chgnum].i2c_addr_flags, cmd, param); bd9995x_write_cleanup: mutex_unlock(&bd9995x_map_mutex); @@ -206,12 +205,11 @@ bd9995x_write_cleanup: static int bd9995x_set_vfastchg(int chgnum, int voltage) { - int rv; /* Fast Charge Voltage Regulation Settings for fast charging. */ rv = ch_raw_write16(chgnum, BD9995X_CMD_VFASTCHG_REG_SET1, - voltage & 0x7FF0, BD9995X_EXTENDED_COMMAND); + voltage & 0x7FF0, BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -221,12 +219,12 @@ static int bd9995x_set_vfastchg(int chgnum, int voltage) * to same voltage. */ rv = ch_raw_write16(chgnum, BD9995X_CMD_VFASTCHG_REG_SET2, - voltage & 0x7FF0, BD9995X_EXTENDED_COMMAND); + voltage & 0x7FF0, BD9995X_EXTENDED_COMMAND); if (rv) return rv; rv = ch_raw_write16(chgnum, BD9995X_CMD_VFASTCHG_REG_SET3, - voltage & 0x7FF0, BD9995X_EXTENDED_COMMAND); + voltage & 0x7FF0, BD9995X_EXTENDED_COMMAND); #endif return rv; @@ -246,7 +244,7 @@ static int bd9995x_is_discharging_on_ac(int chgnum) int reg; if (ch_raw_read16(chgnum, BD9995X_CMD_CHGOP_SET2, ®, - BD9995X_EXTENDED_COMMAND)) + BD9995X_EXTENDED_COMMAND)) return 0; return !!(reg & BD9995X_CMD_CHGOP_SET2_BATT_LEARN); @@ -292,8 +290,9 @@ static int bd9995x_charger_enable(int chgnum, int enable) * Set VSYSREG_SET > VBAT so that the charger is in Pre-Charge * state when not charging or discharging. */ - rv = bd9995x_set_vsysreg(chgnum, bi->voltage_max + - BD9995X_VSYS_PRECHARGE_OFFSET_MV); + rv = bd9995x_set_vsysreg( + chgnum, + bi->voltage_max + BD9995X_VSYS_PRECHARGE_OFFSET_MV); /* * Allow charger in pre-charge state for 50ms before disabling @@ -306,7 +305,7 @@ static int bd9995x_charger_enable(int chgnum, int enable) return rv; rv = ch_raw_read16(chgnum, BD9995X_CMD_CHGOP_SET2, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -316,7 +315,7 @@ static int bd9995x_charger_enable(int chgnum, int enable) reg &= ~BD9995X_CMD_CHGOP_SET2_CHG_EN; return ch_raw_write16(chgnum, BD9995X_CMD_CHGOP_SET2, reg, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); } static int bd9995x_por_reset(int chgnum) @@ -326,9 +325,9 @@ static int bd9995x_por_reset(int chgnum) int i; rv = ch_raw_write16(chgnum, BD9995X_CMD_SYSTEM_CTRL_SET, - BD9995X_CMD_SYSTEM_CTRL_SET_OTPLD | - BD9995X_CMD_SYSTEM_CTRL_SET_ALLRST, - BD9995X_EXTENDED_COMMAND); + BD9995X_CMD_SYSTEM_CTRL_SET_OTPLD | + BD9995X_CMD_SYSTEM_CTRL_SET_ALLRST, + BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -336,10 +335,10 @@ static int bd9995x_por_reset(int chgnum) for (i = 0; i < OTPROM_LOAD_WAIT_RETRY; i++) { msleep(10); rv = ch_raw_read16(chgnum, BD9995X_CMD_SYSTEM_STATUS, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (!rv && (reg & BD9995X_CMD_SYSTEM_STATUS_OTPLD_STATE) && - (reg & BD9995X_CMD_SYSTEM_STATUS_ALLRST_STATE)) + (reg & BD9995X_CMD_SYSTEM_STATUS_ALLRST_STATE)) break; } @@ -349,7 +348,7 @@ static int bd9995x_por_reset(int chgnum) return EC_ERROR_TIMEOUT; return ch_raw_write16(chgnum, BD9995X_CMD_SYSTEM_CTRL_SET, 0, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); } static int bd9995x_reset_to_zero(int chgnum) @@ -366,7 +365,7 @@ static int bd9995x_reset_to_zero(int chgnum) static int bd9995x_get_charger_op_status(int chgnum, int *status) { return ch_raw_read16(chgnum, BD9995X_CMD_CHGOP_STATUS, status, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); } #ifdef HAS_TASK_USB_CHG @@ -379,10 +378,11 @@ static int bd9995x_get_bc12_device_type(int chgnum, int port) int rv; int reg; - rv = ch_raw_read16(chgnum, (port == BD9995X_CHARGE_PORT_VBUS) ? - BD9995X_CMD_VBUS_UCD_STATUS : - BD9995X_CMD_VCC_UCD_STATUS, - ®, BD9995X_EXTENDED_COMMAND); + rv = ch_raw_read16(chgnum, + (port == BD9995X_CHARGE_PORT_VBUS) ? + BD9995X_CMD_VBUS_UCD_STATUS : + BD9995X_CMD_VCC_UCD_STATUS, + ®, BD9995X_EXTENDED_COMMAND); if (rv) return CHARGE_SUPPLIER_NONE; @@ -415,7 +415,8 @@ static int bd9995x_update_ucd_set_reg(int chgnum, int port, uint16_t mask, int rv; int reg; int port_reg = (port == BD9995X_CHARGE_PORT_VBUS) ? - BD9995X_CMD_VBUS_UCD_SET : BD9995X_CMD_VCC_UCD_SET; + BD9995X_CMD_VBUS_UCD_SET : + BD9995X_CMD_VCC_UCD_SET; mutex_lock(&ucd_set_mutex[port]); rv = ch_raw_read16(chgnum, port_reg, ®, BD9995X_EXTENDED_COMMAND); @@ -484,32 +485,33 @@ static int bd9995x_enable_vbus_detect_interrupts(int chgnum, int port, /* 1st Level Interrupt Setting */ rv = ch_raw_read16(chgnum, BD9995X_CMD_INT0_SET, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; mask_val = ((port == BD9995X_CHARGE_PORT_VBUS) ? - BD9995X_CMD_INT0_SET_INT1_EN : - BD9995X_CMD_INT0_SET_INT2_EN) | - BD9995X_CMD_INT0_SET_INT0_EN; + BD9995X_CMD_INT0_SET_INT1_EN : + BD9995X_CMD_INT0_SET_INT2_EN) | + BD9995X_CMD_INT0_SET_INT0_EN; if (enable) reg |= mask_val; else reg &= ~mask_val; rv = ch_raw_write16(chgnum, BD9995X_CMD_INT0_SET, reg, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; /* 2nd Level Interrupt Setting */ - port_reg = (port == BD9995X_CHARGE_PORT_VBUS) ? - BD9995X_CMD_INT1_SET : BD9995X_CMD_INT2_SET; + port_reg = (port == BD9995X_CHARGE_PORT_VBUS) ? BD9995X_CMD_INT1_SET : + BD9995X_CMD_INT2_SET; rv = ch_raw_read16(chgnum, port_reg, ®, BD9995X_EXTENDED_COMMAND); if (rv) return rv; - /* Enable threshold interrupts if we need to control discharge */ + /* Enable threshold interrupts if we need to control discharge + */ #ifdef CONFIG_USB_PD_DISCHARGE mask_val = BD9995X_CMD_INT_VBUS_DET | BD9995X_CMD_INT_VBUS_TH; #else @@ -531,7 +533,8 @@ static int bd9995x_get_interrupts(int chgnum, int port) int port_reg; port_reg = (port == BD9995X_CHARGE_PORT_VBUS) ? - BD9995X_CMD_INT1_STATUS : BD9995X_CMD_INT2_STATUS; + BD9995X_CMD_INT1_STATUS : + BD9995X_CMD_INT2_STATUS; rv = ch_raw_read16(chgnum, port_reg, ®, BD9995X_EXTENDED_COMMAND); @@ -553,8 +556,8 @@ static int bd9995x_bc12_detect(int chgnum, int port, int enable) { return bd9995x_update_ucd_set_reg(chgnum, port, BD9995X_CMD_UCD_SET_BCSRETRY | - BD9995X_CMD_UCD_SET_USBDETEN | - BD9995X_CMD_UCD_SET_USB_SW_EN, + BD9995X_CMD_UCD_SET_USBDETEN | + BD9995X_CMD_UCD_SET_USB_SW_EN, enable); } @@ -626,12 +629,12 @@ static enum ec_error_list bd9995x_set_input_current_limit(int chgnum, input_current = bd9995x_charger_info.input_current_min; rv = ch_raw_write16(chgnum, BD9995X_CMD_IBUS_LIM_SET, input_current, - BD9995X_BAT_CHG_COMMAND); + BD9995X_BAT_CHG_COMMAND); if (rv) return rv; return ch_raw_write16(chgnum, BD9995X_CMD_ICC_LIM_SET, input_current, - BD9995X_BAT_CHG_COMMAND); + BD9995X_BAT_CHG_COMMAND); } static enum ec_error_list bd9995x_get_input_current_limit(int chgnum, @@ -658,12 +661,12 @@ static enum ec_error_list bd9995x_get_option(int chgnum, int *option) int reg; rv = ch_raw_read16(chgnum, BD9995X_CMD_CHGOP_SET1, option, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; rv = ch_raw_read16(chgnum, BD9995X_CMD_CHGOP_SET2, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -677,7 +680,7 @@ static enum ec_error_list bd9995x_set_option(int chgnum, int option) int rv; rv = ch_raw_write16(chgnum, BD9995X_CMD_CHGOP_SET1, option & 0xFFFF, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -704,7 +707,7 @@ static enum ec_error_list bd9995x_get_status(int chgnum, int *status) /* charger enable/inhibit */ rv = ch_raw_read16(chgnum, BD9995X_CMD_CHGOP_SET2, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -713,15 +716,15 @@ static enum ec_error_list bd9995x_get_status(int chgnum, int *status) /* charger alarm enable/inhibit */ rv = ch_raw_read16(chgnum, BD9995X_CMD_PROCHOT_CTRL_SET, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; if (!(reg & (BD9995X_CMD_PROCHOT_CTRL_SET_PROCHOT_EN4 | - BD9995X_CMD_PROCHOT_CTRL_SET_PROCHOT_EN3 | - BD9995X_CMD_PROCHOT_CTRL_SET_PROCHOT_EN2 | - BD9995X_CMD_PROCHOT_CTRL_SET_PROCHOT_EN1 | - BD9995X_CMD_PROCHOT_CTRL_SET_PROCHOT_EN0))) + BD9995X_CMD_PROCHOT_CTRL_SET_PROCHOT_EN3 | + BD9995X_CMD_PROCHOT_CTRL_SET_PROCHOT_EN2 | + BD9995X_CMD_PROCHOT_CTRL_SET_PROCHOT_EN1 | + BD9995X_CMD_PROCHOT_CTRL_SET_PROCHOT_EN0))) *status |= CHARGER_ALARM_INHIBITED; rv = bd9995x_get_charger_op_status(chgnum, ®); @@ -788,7 +791,7 @@ static enum ec_error_list bd9995x_set_mode(int chgnum, int mode) static enum ec_error_list bd9995x_get_current(int chgnum, int *current) { return ch_raw_read16(chgnum, BD9995X_CMD_CHG_CURRENT, current, - BD9995X_BAT_CHG_COMMAND); + BD9995X_BAT_CHG_COMMAND); } static enum ec_error_list bd9995x_set_current(int chgnum, int current) @@ -824,7 +827,7 @@ static enum ec_error_list bd9995x_set_current(int chgnum, int current) return rv; rv = ch_raw_write16(chgnum, BD9995X_CMD_CHG_CURRENT, current, - BD9995X_BAT_CHG_COMMAND); + BD9995X_BAT_CHG_COMMAND); if (rv) return rv; @@ -869,7 +872,7 @@ static enum ec_error_list bd9995x_get_voltage(int chgnum, int *voltage) } return ch_raw_read16(chgnum, BD9995X_CMD_CHG_VOLTAGE, voltage, - BD9995X_BAT_CHG_COMMAND); + BD9995X_BAT_CHG_COMMAND); } static enum ec_error_list bd9995x_set_voltage(int chgnum, int voltage) @@ -880,11 +883,9 @@ static enum ec_error_list bd9995x_set_voltage(int chgnum, int voltage) * Regulate the system voltage to battery max if the battery * is not present or the battery is discharging on AC. */ - if (voltage == 0 || - bd9995x_is_discharging_on_ac(chgnum) || - battery_is_present() != BP_YES || - battery_is_cut_off() || - voltage > battery_voltage_max) + if (voltage == 0 || bd9995x_is_discharging_on_ac(chgnum) || + battery_is_present() != BP_YES || battery_is_cut_off() || + voltage > battery_voltage_max) voltage = battery_voltage_max; /* Charge voltage step 16 mV */ @@ -921,8 +922,7 @@ static void bd9995x_battery_charging_profile_settings(int chgnum) BD9995X_EXTENDED_COMMAND); /* Re-charge Battery Voltage Setting */ - ch_raw_write16(chgnum, BD9995X_CMD_VRECHG_SET, - bi->voltage_max & 0x7FF0, + ch_raw_write16(chgnum, BD9995X_CMD_VRECHG_SET, bi->voltage_max & 0x7FF0, BD9995X_EXTENDED_COMMAND); /* Set battery OVP to 500 + maximum battery voltage */ @@ -972,8 +972,9 @@ static void bd9995x_init(void) * that the charger is in Pre-Charge state and that the input current * disable setting below will be active. */ - bd9995x_set_vsysreg(CHARGER_SOLO, battery_get_info()->voltage_max + - BD9995X_VSYS_PRECHARGE_OFFSET_MV); + bd9995x_set_vsysreg(CHARGER_SOLO, + battery_get_info()->voltage_max + + BD9995X_VSYS_PRECHARGE_OFFSET_MV); /* Enable BC1.2 USB charging and DC/DC converter @ 1200KHz */ if (ch_raw_read16(CHARGER_SOLO, BD9995X_CMD_CHGOP_SET2, ®, @@ -1060,7 +1061,7 @@ static enum ec_error_list bd9995x_discharge_on_ac(int chgnum, int enable) int reg; rv = ch_raw_read16(chgnum, BD9995X_CMD_CHGOP_SET2, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -1072,13 +1073,13 @@ static enum ec_error_list bd9995x_discharge_on_ac(int chgnum, int enable) */ if (enable) reg |= BD9995X_CMD_CHGOP_SET2_BATT_LEARN | - BD9995X_CMD_CHGOP_SET2_USB_SUS; + BD9995X_CMD_CHGOP_SET2_USB_SUS; else reg &= ~(BD9995X_CMD_CHGOP_SET2_BATT_LEARN | - BD9995X_CMD_CHGOP_SET2_USB_SUS); + BD9995X_CMD_CHGOP_SET2_USB_SUS); return ch_raw_write16(chgnum, BD9995X_CMD_CHGOP_SET2, reg, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); } static enum ec_error_list bd9995x_get_vbus_voltage(int chgnum, int port, @@ -1143,7 +1144,7 @@ int bd9995x_select_input_port(enum bd9995x_charge_port port, int select) } else if (port == BD9995X_CHARGE_PORT_BOTH) { /* Enable both the ports for PG3 */ reg |= BD9995X_CMD_VIN_CTRL_SET_VBUS_EN | - BD9995X_CMD_VIN_CTRL_SET_VCC_EN; + BD9995X_CMD_VIN_CTRL_SET_VCC_EN; } else { /* Invalid charge port */ panic("Invalid charge port"); @@ -1161,7 +1162,7 @@ int bd9995x_select_input_port(enum bd9995x_charge_port port, int select) } rv = ch_raw_write16(CHARGER_SOLO, BD9995X_CMD_VIN_CTRL_SET, reg, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); select_input_port_exit: mutex_unlock(&bd9995x_vin_mutex); return rv; @@ -1192,8 +1193,8 @@ static int bd9995x_vbus_debounce(int chgnum, enum bd9995x_charge_port port) int vbus_reg; int voltage; - vbus_reg = (port == BD9995X_CHARGE_PORT_VBUS) ? - BD9995X_CMD_VBUS_VAL : BD9995X_CMD_VCC_VAL; + vbus_reg = (port == BD9995X_CHARGE_PORT_VBUS) ? BD9995X_CMD_VBUS_VAL : + BD9995X_CMD_VCC_VAL; if (ch_raw_read16(chgnum, vbus_reg, &voltage, BD9995X_EXTENDED_COMMAND)) voltage = 0; @@ -1209,14 +1210,13 @@ static int bd9995x_vbus_debounce(int chgnum, enum bd9995x_charge_port port) } #endif - #ifdef CONFIG_CHARGER_BATTERY_TSENSE int bd9995x_get_battery_temp(int *temp_ptr) { int rv; rv = ch_raw_read16(CHARGER_SOLO, BD9995X_CMD_THERM_VAL, temp_ptr, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -1237,7 +1237,7 @@ int bd9995x_get_battery_voltage(void) int vbat_val, rv; rv = ch_raw_read16(CHARGER_SOLO, BD9995X_CMD_VBAT_VAL, &vbat_val, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); return rv ? 0 : vbat_val; } @@ -1255,15 +1255,15 @@ int bd9995x_bc12_enable_charging(int port, int enable) * for USB-C. */ rv = ch_raw_read16(CHARGER_SOLO, BD9995X_CMD_CHGOP_SET1, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; mask_val = (BD9995X_CMD_CHGOP_SET1_SDP_CHG_TRIG_EN | - BD9995X_CMD_CHGOP_SET1_SDP_CHG_TRIG | - ((port == BD9995X_CHARGE_PORT_VBUS) ? - BD9995X_CMD_CHGOP_SET1_VBUS_BC_DISEN : - BD9995X_CMD_CHGOP_SET1_VCC_BC_DISEN)); + BD9995X_CMD_CHGOP_SET1_SDP_CHG_TRIG | + ((port == BD9995X_CHARGE_PORT_VBUS) ? + BD9995X_CMD_CHGOP_SET1_VBUS_BC_DISEN : + BD9995X_CMD_CHGOP_SET1_VCC_BC_DISEN)); if (enable) reg &= ~mask_val; @@ -1271,7 +1271,7 @@ int bd9995x_bc12_enable_charging(int port, int enable) reg |= mask_val; return ch_raw_write16(CHARGER_SOLO, BD9995X_CMD_CHGOP_SET1, reg, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); } static void bd9995x_set_switches(int port, enum usb_switch setting) @@ -1283,17 +1283,18 @@ static void bd9995x_set_switches(int port, enum usb_switch setting) if (setting != USB_SWITCH_RESTORE) usb_switch_state[port] = setting; - /* ensure we disable power saving when we are using DP/DN */ + /* ensure we disable power saving when we are using DP/DN */ #ifdef CONFIG_BD9995X_POWER_SAVE_MODE bd9995x_set_power_save_mode( (usb_switch_state[0] == USB_SWITCH_DISCONNECT && - usb_switch_state[1] == USB_SWITCH_DISCONNECT) - ? CONFIG_BD9995X_POWER_SAVE_MODE : BD9995X_PWR_SAVE_OFF); + usb_switch_state[1] == USB_SWITCH_DISCONNECT) ? + CONFIG_BD9995X_POWER_SAVE_MODE : + BD9995X_PWR_SAVE_OFF); #endif - bd9995x_update_ucd_set_reg(CHARGER_SOLO, port, - BD9995X_CMD_UCD_SET_USB_SW, - usb_switch_state[port] == USB_SWITCH_CONNECT); + bd9995x_update_ucd_set_reg( + CHARGER_SOLO, port, BD9995X_CMD_UCD_SET_USB_SW, + usb_switch_state[port] == USB_SWITCH_CONNECT); } void bd9995x_vbus_interrupt(enum gpio_signal signal) @@ -1337,8 +1338,11 @@ static void bd9995x_usb_charger_task_init(const int unused) * provided, then disable wait for this port. */ bc12_det_mark[port] = - usb_charger_process(CHARGER_SOLO, port) - ? get_time().val + BC12_DETECT_US : 0; + usb_charger_process(CHARGER_SOLO, + port) ? + get_time().val + + BC12_DETECT_US : + 0; changed = 1; } #ifdef CONFIG_USB_PD_DISCHARGE @@ -1346,21 +1350,22 @@ static void bd9995x_usb_charger_task_init(const int unused) !initialized) { /* Get VBUS voltage */ vbus_reg = (port == BD9995X_CHARGE_PORT_VBUS) ? - BD9995X_CMD_VBUS_VAL : - BD9995X_CMD_VCC_VAL; + BD9995X_CMD_VBUS_VAL : + BD9995X_CMD_VCC_VAL; if (ch_raw_read16(CHARGER_SOLO, vbus_reg, &voltage, BD9995X_EXTENDED_COMMAND)) voltage = 0; /* Set discharge accordingly */ - pd_set_vbus_discharge(port, + pd_set_vbus_discharge( + port, voltage < BD9995X_VBUS_DISCHARGE_TH); changed = 1; } #endif - if (bc12_det_mark[port] && (get_time().val > - bc12_det_mark[port])) { + if (bc12_det_mark[port] && + (get_time().val > bc12_det_mark[port])) { /* * bc12_type result should be available. If not * available still, then function will return @@ -1371,7 +1376,8 @@ static void bd9995x_usb_charger_task_init(const int unused) bc12_det_mark[port] = bd9995x_bc12_check_type(CHARGER_SOLO, port) ? - get_time().val + 100 * MSEC : 0; + get_time().val + 100 * MSEC : + 0; /* Reset BC1.2 regs to skip auto-detection. */ bd9995x_bc12_detect(CHARGER_SOLO, port, 0); } @@ -1386,8 +1392,8 @@ static void bd9995x_usb_charger_task_init(const int unused) if (bc12_det_mark[port]) { int bc12_wait_usec; - bc12_wait_usec = bc12_det_mark[port] - - get_time().val; + bc12_wait_usec = + bc12_det_mark[port] - get_time().val; if ((sleep_usec < 0) || (sleep_usec > bc12_wait_usec)) sleep_usec = bc12_wait_usec; @@ -1396,40 +1402,43 @@ static void bd9995x_usb_charger_task_init(const int unused) initialized = 1; #ifdef CONFIG_BD9995X_DELAY_INPUT_PORT_SELECT -/* - * When a charge port is selected and VBUS is 5V, the inrush current on some - * devices causes VBUS to droop, which could signal a sink disconnection. - * - * To mitigate the problem, charge port selection is delayed until VBUS - * is stable or one second has passed. Hopefully PD has negotiated a VBUS - * voltage of at least 9V before the one second timeout. - */ - if (select_input_port_update) { - sleep_usec = VBUS_CHECK_MSEC; - changed = 0; - - switch (vbus_state) { - case START: - vbus_timeout = get_time().val + STABLE_TIMEOUT; - vbus_state = STABLE; - break; - case STABLE: - if (get_time().val > vbus_timeout) { - vbus_state = DEBOUNCE; - vbus_timeout = get_time().val + - DEBOUNCE_TIMEOUT; - } - break; - case DEBOUNCE: - if (bd9995x_vbus_debounce(CHARGER_SOLO, port_update) || - get_time().val > vbus_timeout) { - select_input_port_update = 0; - bd9995x_select_input_port_private( + /* + * When a charge port is selected and VBUS is 5V, the inrush + * current on some devices causes VBUS to droop, which could + * signal a sink disconnection. + * + * To mitigate the problem, charge port selection is delayed + * until VBUS is stable or one second has passed. Hopefully PD + * has negotiated a VBUS voltage of at least 9V before the one + * second timeout. + */ + if (select_input_port_update) { + sleep_usec = VBUS_CHECK_MSEC; + changed = 0; + + switch (vbus_state) { + case START: + vbus_timeout = get_time().val + STABLE_TIMEOUT; + vbus_state = STABLE; + break; + case STABLE: + if (get_time().val > vbus_timeout) { + vbus_state = DEBOUNCE; + vbus_timeout = get_time().val + + DEBOUNCE_TIMEOUT; + } + break; + case DEBOUNCE: + if (bd9995x_vbus_debounce(CHARGER_SOLO, + port_update) || + get_time().val > vbus_timeout) { + select_input_port_update = 0; + bd9995x_select_input_port_private( port_update, select_update); + } + break; } - break; } - } #endif /* @@ -1445,7 +1454,6 @@ static void bd9995x_usb_charger_task_init(const int unused) } #endif /* HAS_TASK_USB_CHG */ - /*** Console commands ***/ #ifdef CONFIG_CMD_CHARGER_DUMP static int read_bat(int chgnum, uint8_t cmd) @@ -1472,8 +1480,8 @@ static void console_bd9995x_dump_regs(int chgnum) /* Battery group registers */ for (i = 0; i < ARRAY_SIZE(regs); ++i) - ccprintf("BAT REG %4x: %4x\n", regs[i], read_bat(CHARGER_SOLO, - regs[i])); + ccprintf("BAT REG %4x: %4x\n", regs[i], + read_bat(CHARGER_SOLO, regs[i])); /* Extended group registers */ for (i = 0; i < 0x7f; ++i) { @@ -1484,7 +1492,7 @@ static void console_bd9995x_dump_regs(int chgnum) #endif /* CONFIG_CMD_CHARGER_DUMP */ #ifdef CONFIG_CMD_CHARGER -static int console_command_bd9995x(int argc, char **argv) +static int console_command_bd9995x(int argc, const char **argv) { int rv, reg, data, val; char rw, *e; @@ -1538,7 +1546,7 @@ static int bd9995x_psys_charger_adc(int chgnum) for (i = 0; i < BD9995X_PMON_IOUT_ADC_READ_COUNT; i++) { if (ch_raw_read16(chgnum, BD9995X_CMD_PMON_DACIN_VAL, ®, - BD9995X_EXTENDED_COMMAND)) + BD9995X_EXTENDED_COMMAND)) return 0; /* Conversion Interval is 200us */ @@ -1550,8 +1558,8 @@ static int bd9995x_psys_charger_adc(int chgnum) * Calculate power in mW * PSYS = VACP×IACP+VBAT×IBAT = IPMON / GPMON */ - return (int) ((ipmon * 1000) / (BIT(BD9995X_PSYS_GAIN_SELECT) * - BD9995X_PMON_IOUT_ADC_READ_COUNT)); + return (int)((ipmon * 1000) / (BIT(BD9995X_PSYS_GAIN_SELECT) * + BD9995X_PMON_IOUT_ADC_READ_COUNT)); } static int bd9995x_enable_psys(int chgnum) @@ -1560,7 +1568,7 @@ static int bd9995x_enable_psys(int chgnum) int reg; rv = ch_raw_read16(chgnum, BD9995X_CMD_PMON_IOUT_CTRL_SET, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -1571,7 +1579,7 @@ static int bd9995x_enable_psys(int chgnum) BD9995X_PSYS_GAIN_SELECT); return ch_raw_write16(chgnum, BD9995X_CMD_PMON_IOUT_CTRL_SET, reg, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); } /** @@ -1582,7 +1590,7 @@ static int bd9995x_enable_psys(int chgnum) * update "psys" console command to use charger_get_system_power and move it * to some common code. */ -static int console_command_psys(int argc, char **argv) +static int console_command_psys(int argc, const char **argv) { int rv; @@ -1591,12 +1599,11 @@ static int console_command_psys(int argc, char **argv) return rv; CPRINTS("PSYS from chg_adc: %d mW", - bd9995x_psys_charger_adc(CHARGER_SOLO)); + bd9995x_psys_charger_adc(CHARGER_SOLO)); return EC_SUCCESS; } -DECLARE_CONSOLE_COMMAND(psys, console_command_psys, - NULL, +DECLARE_CONSOLE_COMMAND(psys, console_command_psys, NULL, "Get the system power in mW"); #endif /* CONFIG_CHARGER_PSYS_READ */ @@ -1609,7 +1616,7 @@ static int bd9995x_amon_bmon_chg_adc(int chgnum) for (i = 0; i < BD9995X_PMON_IOUT_ADC_READ_COUNT; i++) { ch_raw_read16(chgnum, BD9995X_CMD_IOUT_DACIN_VAL, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); iout += reg; /* Conversion Interval is 200us */ @@ -1625,7 +1632,7 @@ static int bd9995x_amon_bmon_chg_adc(int chgnum) * VIADP = GIADP * (VACP- VACN) = GIADP * IADP / IADP_RES */ return (iout * (5 << BD9995X_IOUT_GAIN_SELECT)) / - (10 * BD9995X_PMON_IOUT_ADC_READ_COUNT); + (10 * BD9995X_PMON_IOUT_ADC_READ_COUNT); } static int bd9995x_amon_bmon(int chgnum, int amon_bmon) @@ -1636,7 +1643,7 @@ static int bd9995x_amon_bmon(int chgnum, int amon_bmon) int sns_res; rv = ch_raw_read16(chgnum, BD9995X_CMD_PMON_IOUT_CTRL_SET, ®, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; @@ -1655,16 +1662,14 @@ static int bd9995x_amon_bmon(int chgnum, int amon_bmon) } rv = ch_raw_write16(chgnum, BD9995X_CMD_PMON_IOUT_CTRL_SET, reg, - BD9995X_EXTENDED_COMMAND); + BD9995X_EXTENDED_COMMAND); if (rv) return rv; imon = bd9995x_amon_bmon_chg_adc(chgnum); - CPRINTS("%cMON from chg_adc: %d uV, %d mA]", - amon_bmon ? 'A' : 'B', - imon * sns_res, - imon); + CPRINTS("%cMON from chg_adc: %d uV, %d mA]", amon_bmon ? 'A' : 'B', + imon * sns_res, imon); return EC_SUCCESS; } @@ -1672,7 +1677,7 @@ static int bd9995x_amon_bmon(int chgnum, int amon_bmon) /** * Get charger AMON and BMON current. */ -static int console_command_amon_bmon(int argc, char **argv) +static int console_command_amon_bmon(int argc, const char **argv) { int rv = EC_ERROR_PARAM1; @@ -1686,8 +1691,7 @@ static int console_command_amon_bmon(int argc, char **argv) return rv; } -DECLARE_CONSOLE_COMMAND(amonbmon, console_command_amon_bmon, - "amonbmon [a|b]", +DECLARE_CONSOLE_COMMAND(amonbmon, console_command_amon_bmon, "amonbmon [a|b]", "Get charger AMON/BMON voltage diff, current"); #endif /* CONFIG_CMD_CHARGER_ADC_AMON_BMON */ @@ -1741,28 +1745,32 @@ const struct charger_drv bd9995x_drv = { /* provide a default bc12_ports[] for backward compatibility */ struct bc12_config bc12_ports[BD9995X_CHARGE_PORT_COUNT] = { { - .drv = &(const struct bc12_drv) { - .usb_charger_task_init = bd9995x_usb_charger_task_init, - /* events handled in init */ - .usb_charger_task_event = NULL, - .set_switches = bd9995x_set_switches, + .drv = + &(const struct bc12_drv){ + .usb_charger_task_init = + bd9995x_usb_charger_task_init, + /* events handled in init */ + .usb_charger_task_event = NULL, + .set_switches = bd9995x_set_switches, #if defined(CONFIG_CHARGE_RAMP_SW) - .ramp_allowed = bd9995x_ramp_allowed, - .ramp_max = bd9995x_ramp_max, + .ramp_allowed = bd9995x_ramp_allowed, + .ramp_max = bd9995x_ramp_max, #endif /* CONFIG_CHARGE_RAMP_SW */ - }, + }, }, { - .drv = &(const struct bc12_drv) { - /* bd9995x uses a single task thread for both ports */ - .usb_charger_task_init = NULL, - .usb_charger_task_event = NULL, - .set_switches = bd9995x_set_switches, + .drv = + &(const struct bc12_drv){ + /* bd9995x uses a single task thread for both + ports */ + .usb_charger_task_init = NULL, + .usb_charger_task_event = NULL, + .set_switches = bd9995x_set_switches, #if defined(CONFIG_CHARGE_RAMP_SW) - .ramp_allowed = bd9995x_ramp_allowed, - .ramp_max = bd9995x_ramp_max, + .ramp_allowed = bd9995x_ramp_allowed, + .ramp_max = bd9995x_ramp_max, #endif /* CONFIG_CHARGE_RAMP_SW */ - }, + }, }, }; BUILD_ASSERT(ARRAY_SIZE(bc12_ports) == CHARGE_PORT_COUNT); |