diff --git a/board/scarlet/battery.c b/board/scarlet/battery.c index 0e99f7bf6d..557e9213ed 100644 --- a/board/scarlet/battery.c +++ b/board/scarlet/battery.c @@ -47,8 +47,6 @@ int board_cut_off_battery(void) return rv ? EC_RES_ERROR : EC_RES_SUCCESS; } -static int battery_not_disconnected; - enum battery_disconnect_state battery_get_disconnect_state(void) { uint8_t data[6]; @@ -60,21 +58,20 @@ enum battery_disconnect_state battery_get_disconnect_state(void) * This assumes the battery will not go to disconnect state during * runtime. */ - if (battery_not_disconnected) + static int not_disconnected; + + if (not_disconnected) return BATTERY_NOT_DISCONNECTED; if (extpower_is_present()) { /* Check if battery charging + discharging is disabled. */ - rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_OPERATION_STATUS); + rv = sb_read_mfgacc(PARAM_OPERATION_STATUS, + SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data)); if (rv) return BATTERY_DISCONNECT_ERROR; - - rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR, - SB_ALT_MANUFACTURER_ACCESS, data, 6); - - if (rv || (~data[3] & (BATTERY_DISCHARGING_DISABLED | - BATTERY_CHARGING_DISABLED))) { - battery_not_disconnected = 1; + if (~data[3] & (BATTERY_DISCHARGING_DISABLED | + BATTERY_CHARGING_DISABLED)) { + not_disconnected = 1; return BATTERY_NOT_DISCONNECTED; } @@ -82,20 +79,15 @@ enum battery_disconnect_state battery_get_disconnect_state(void) * Battery is neither charging nor discharging. Verify that * we didn't enter this state due to a safety fault. */ - rv = sb_write(SB_MANUFACTURER_ACCESS, PARAM_SAFETY_STATUS); - if (rv) - return BATTERY_DISCONNECT_ERROR; - - rv = sb_read_string(I2C_PORT_BATTERY, BATTERY_ADDR, - SB_ALT_MANUFACTURER_ACCESS, data, 6); - + rv = sb_read_mfgacc(PARAM_SAFETY_STATUS, + SB_ALT_MANUFACTURER_ACCESS, data, sizeof(data)); if (rv || data[2] || data[3] || data[4] || data[5]) return BATTERY_DISCONNECT_ERROR; /* No safety fault, battery is disconnected */ return BATTERY_DISCONNECTED; } - battery_not_disconnected = 1; + not_disconnected = 1; return BATTERY_NOT_DISCONNECTED; } @@ -116,8 +108,7 @@ int charger_profile_override(struct charge_state_data *curr) curr->state = ST_IDLE; now_discharging = 0; /* Don't start charging if battery is nearly full */ - } else if ((curr->batt.status & STATUS_FULLY_CHARGED) && - battery_not_disconnected) { + } else if (curr->batt.status & STATUS_FULLY_CHARGED) { curr->requested_current = curr->requested_voltage = 0; curr->batt.flags &= ~BATT_FLAG_WANT_CHARGE; curr->state = ST_DISCHARGE; diff --git a/board/scarlet/board.c b/board/scarlet/board.c index 388a5b4a94..1ef6989768 100644 --- a/board/scarlet/board.c +++ b/board/scarlet/board.c @@ -18,7 +18,7 @@ #include "driver/accel_kionix.h" #include "driver/accel_kx022.h" #include "driver/accelgyro_bmi160.h" -#include "driver/charger/bd99955.h" +#include "driver/charger/bd9995x.h" #include "driver/tcpm/fusb302.h" #include "extpower.h" #include "gpio.h" @@ -178,7 +178,8 @@ uint16_t tcpc_get_alert_status(void) int board_set_active_charge_port(int charge_port) { - enum bd99955_charge_port bd99955_port; + enum bd9995x_charge_port bd9995x_port; + int bd9995x_port_select = 1; static int initialized; /* @@ -201,10 +202,11 @@ int board_set_active_charge_port(int charge_port) /* Don't charge from a source port */ if (board_vbus_source_enabled(charge_port)) return -1; - bd99955_port = BD99955_CHARGE_PORT_VBUS; + bd9995x_port = bd9995x_pd_port_to_chg_port(charge_port); break; case CHARGE_PORT_NONE: - bd99955_port = BD99955_CHARGE_PORT_NONE; + bd9995x_port_select = 0; + bd9995x_port = BD9995X_CHARGE_PORT_BOTH; break; default: panic("Invalid charge port\n"); @@ -212,10 +214,11 @@ int board_set_active_charge_port(int charge_port) } initialized = 1; - return bd99955_select_input_port(bd99955_port); + return bd9995x_select_input_port(bd9995x_port, bd9995x_port_select); } -void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma) +void board_set_charge_limit(int port, int supplier, int charge_ma, + int max_ma, int charge_mv) { /* * Ignore lower charge ceiling on PD transition if our battery is @@ -230,7 +233,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma) } charge_set_input_current_limit(MAX(charge_ma, - CONFIG_CHARGER_INPUT_CURRENT)); + CONFIG_CHARGER_INPUT_CURRENT), charge_mv); } int extpower_is_present(void) @@ -242,7 +245,7 @@ int extpower_is_present(void) if (board_vbus_source_enabled(0)) return 0; else - return bd99955_is_vbus_provided(BD99955_CHARGE_PORT_VBUS); + return bd9995x_is_vbus_provided(BD9995X_CHARGE_PORT_VBUS); } int pd_snk_is_vbus_provided(int port) @@ -250,7 +253,7 @@ int pd_snk_is_vbus_provided(int port) if (port) panic("Invalid charge port\n"); - return bd99955_is_vbus_provided(BD99955_CHARGE_PORT_VBUS); + return bd9995x_is_vbus_provided(BD9995X_CHARGE_PORT_VBUS); } static void board_spi_enable(void) @@ -403,6 +406,8 @@ int board_get_version(void) /* Mutexes */ static struct mutex g_base_mutex; +struct bmi160_drv_data_t g_bmi160_data; + /* Matrix to rotate accelerometer into standard reference frame */ const matrix_3x3_t base_standard_ref = { { FLOAT_TO_FP(-1), 0, 0}, @@ -416,6 +421,8 @@ const matrix_3x3_t lid_standard_ref = { { 0, 0, FLOAT_TO_FP(1)} }; +struct bmp280_drv_data_t bmp280_drv_data; + struct motion_sensor_t motion_sensors[] = { /* * Note: bmi160: supports accelerometer and gyro sensor diff --git a/board/scarlet/board.h b/board/scarlet/board.h index 8d39658ace..c955aff69c 100644 --- a/board/scarlet/board.h +++ b/board/scarlet/board.h @@ -140,9 +140,6 @@ #define PD_POWER_SUPPLY_TURN_OFF_DELAY 50000 /* us */ #define PD_VCONN_SWAP_DELAY 5000 /* us */ -/* start as a sink in case we have no other power supply/battery */ -#define PD_DEFAULT_STATE PD_STATE_SNK_DISCONNECTED - /* Optional features for test commands */ #define CONFIG_CMD_CHARGER_PSYS diff --git a/board/scarlet/gpio.inc b/board/scarlet/gpio.inc index 7f60a6713c..bfc07e0f0d 100644 --- a/board/scarlet/gpio.inc +++ b/board/scarlet/gpio.inc @@ -39,7 +39,7 @@ GPIO_INT(WARM_RESET_REQ, PIN(7, 3), GPIO_INT_RISING | GPIO_PULL_DOWN, GPIO_INT(AP_OVERTEMP, PIN(7, 4), GPIO_INT_RISING | GPIO_PULL_DOWN, overtemp_interrupt) GPIO_INT(CHARGER_INT_L, PIN(3, 3), GPIO_INT_FALLING | GPIO_PULL_UP, - bd99955_vbus_interrupt) + bd9995x_vbus_interrupt) GPIO_INT(BASE_SIXAXIS_INT_L,PIN(4, 0), GPIO_INT_FALLING | GPIO_SEL_1P8V, bmi160_interrupt) diff --git a/board/scarlet/usb_pd_policy.c b/board/scarlet/usb_pd_policy.c index 5b425dde6c..e1261ef39b 100644 --- a/board/scarlet/usb_pd_policy.c +++ b/board/scarlet/usb_pd_policy.c @@ -7,7 +7,7 @@ #include "charge_manager.h" #include "common.h" #include "console.h" -#include "driver/charger/bd99955.h" +#include "driver/charger/bd9995x.h" #include "gpio.h" #include "hooks.h" #include "host_command.h" @@ -81,8 +81,7 @@ static void board_vbus_update_source_current(int port) int pd_set_power_supply_ready(int port) { /* Ensure we're not charging from this port */ - if (charge_manager_get_active_charge_port() == port) - bd99955_select_input_port(BD99955_CHARGE_PORT_NONE); + bd9995x_select_input_port(bd9995x_pd_port_to_chg_port(port), 0); /* Ensure we advertise the proper available current quota */ charge_manager_source_port(port, 1);