diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2021-06-24 17:50:06 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-06-25 16:36:34 +0000 |
commit | fd38239b6c540e8d666d0a0099a3d79e6c238c30 (patch) | |
tree | b3405e24856e3911537b4a1c2e55e5588af99e7a | |
parent | 7aa6adaf53f99f3b3d03fbd935c930ce3f46cc66 (diff) | |
download | chrome-ec-fd38239b6c540e8d666d0a0099a3d79e6c238c30.tar.gz |
flapjack: Remove flapjack
Flapjack is no longer developed.
BUG=None
BRANCH=None
TEST=buildall
Change-Id: I8cf06ff4f60302987f1d85e8abd090774e02a6ee
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2986846
-rw-r--r-- | board/flapjack/battery.c | 468 | ||||
-rw-r--r-- | board/flapjack/board.c | 639 | ||||
-rw-r--r-- | board/flapjack/board.h | 350 | ||||
-rw-r--r-- | board/flapjack/build.mk | 21 | ||||
-rw-r--r-- | board/flapjack/ec.tasklist | 21 | ||||
l--------- | board/flapjack/emmc.c | 1 | ||||
-rw-r--r-- | board/flapjack/gpio.inc | 107 | ||||
-rw-r--r-- | board/flapjack/led.c | 182 | ||||
-rw-r--r-- | board/flapjack/usb_pd_policy.c | 155 | ||||
-rw-r--r-- | board/flapjack/vif_override.xml | 3 |
10 files changed, 0 insertions, 1947 deletions
diff --git a/board/flapjack/battery.c b/board/flapjack/battery.c deleted file mode 100644 index 981edea013..0000000000 --- a/board/flapjack/battery.c +++ /dev/null @@ -1,468 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - * - * Battery pack vendor provided charging profile - */ - -#include "battery.h" -#include "battery_smart.h" -#include "charge_state.h" -#include "console.h" -#include "driver/battery/max17055.h" -#include "driver/charger/rt946x.h" -#include "driver/tcpm/mt6370.h" -#include "ec_commands.h" -#include "extpower.h" -#include "gpio.h" -#include "hooks.h" -#include "i2c.h" -#include "usb_pd.h" -#include "util.h" -#include "board.h" -#include "adc.h" -#include "adc_chip.h" -#include "math_util.h" -#include "p9221.h" - -#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) -#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) - -#define BAT_LEVEL_PD_LIMIT 85 - -#define BATTERY_ATL_CHARGE_MIN_TEMP 0 -#define BATTERY_ATL_CHARGE_MAX_TEMP 60 - -#define BATTERY_SUNWODA_CHARGE_MIN_TEMP 0 -#define BATTERY_SUNWODA_CHARGE_MAX_TEMP 60 - -static const uint16_t full_model_ocv_table[][MAX17055_OCV_TABLE_SIZE] = { - [BATTERY_C18_ATL] = { - 0x8fc0, 0xb6c0, 0xb910, 0xbb30, 0xbcb0, 0xbdd0, 0xbef0, 0xc050, - 0xc1a0, 0xc460, 0xc750, 0xca40, 0xcd10, 0xd070, 0xd560, 0xda20, - 0x0060, 0x0f20, 0x0f40, 0x16c0, 0x17f0, 0x15c0, 0x1050, 0x10e0, - 0x09f0, 0x0850, 0x0730, 0x07a0, 0x0730, 0x0700, 0x0710, 0x0710, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, - }, - [BATTERY_C19_ATL] = { - 0xa260, 0xb5d0, 0xb840, 0xb940, 0xbbb0, 0xbcb0, 0xbdb0, 0xbf80, - 0xc0a0, 0xc1e0, 0xc520, 0xc840, 0xcdb0, 0xd150, 0xd590, 0xd9e0, - 0x0030, 0x0cd0, 0x1100, 0x0f30, 0x19e0, 0x19f0, 0x14f0, 0x1160, - 0x0dc0, 0x0980, 0x0850, 0x0780, 0x0730, 0x0700, 0x0710, 0x0710, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, - }, - [BATTERY_C18_SUNWODA] = { - 0x9d70, 0xaf80, 0xb6b0, 0xb830, 0xb990, 0xbc00, 0xbcd0, 0xbea0, - 0xc080, 0xc2e0, 0xc5f0, 0xc890, 0xcb90, 0xcf10, 0xd270, 0xd9e0, - 0x0060, 0x0240, 0x0b20, 0x1210, 0x0f20, 0x2200, 0x1650, 0x14f0, - 0x0980, 0x09c0, 0x07b0, 0x07f0, 0x06f0, 0x07e0, 0x05c0, 0x05c0, - 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, - 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, - }, - [BATTERY_C19_SUNWODA] = { - 0x8590, 0xb1d0, 0xb810, 0xbae0, 0xbc30, 0xbd70, 0xbeb0, 0xbfa0, - 0xc0f0, 0xc330, 0xc640, 0xc890, 0xcb50, 0xce20, 0xd370, 0xd950, - 0x0020, 0x0520, 0x0d80, 0x1860, 0x1910, 0x2040, 0x0be0, 0x0dd0, - 0x0cb0, 0x07b0, 0x08f0, 0x07c0, 0x0790, 0x06e0, 0x0620, 0x0620, - 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, - 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, 0x0400, - }, -}; -BUILD_ASSERT(ARRAY_SIZE(full_model_ocv_table) == BATTERY_COUNT); - -/* - * TODO: Only precharge_current is different. We should consolidate these - * and apply 294 or 327 at run-time.when we need more rom space later. - */ -static const struct battery_info info[] = { - [BATTERY_C18_ATL] = { - .voltage_max = 4400, - .voltage_normal = 3850, - .voltage_min = 3000, - .precharge_current = 294, - .start_charging_min_c = 0, - .start_charging_max_c = 45, - .charging_min_c = 0, - .charging_max_c = 60, - .discharging_min_c = -20, - .discharging_max_c = 60, - }, - [BATTERY_C19_ATL] = { - .voltage_max = 4400, - .voltage_normal = 3850, - .voltage_min = 3000, - .precharge_current = 327, - .start_charging_min_c = 0, - .start_charging_max_c = 45, - .charging_min_c = 0, - .charging_max_c = 60, - .discharging_min_c = -20, - .discharging_max_c = 60, - }, - [BATTERY_C18_SUNWODA] = { - .voltage_max = 4400, - .voltage_normal = 3850, - .voltage_min = 3000, - .precharge_current = 294, - .start_charging_min_c = 0, - .start_charging_max_c = 45, - .charging_min_c = 0, - .charging_max_c = 60, - .discharging_min_c = -20, - .discharging_max_c = 60, - }, - [BATTERY_C19_SUNWODA] = { - .voltage_max = 4400, - .voltage_normal = 3850, - .voltage_min = 3000, - .precharge_current = 327, - .start_charging_min_c = 0, - .start_charging_max_c = 45, - .charging_min_c = 0, - .charging_max_c = 60, - .discharging_min_c = -20, - .discharging_max_c = 60, - }, -}; -BUILD_ASSERT(ARRAY_SIZE(info) == BATTERY_COUNT); - -static const struct max17055_batt_profile batt_profile[] = { - [BATTERY_C18_ATL] = { - .is_ez_config = 0, - .design_cap = 0x2e78, /* 5948mAh */ - .ichg_term = 0x03c0, /* 150 mA */ - /* Empty voltage = 3400mV, Recovery voltage = 4000mV */ - .v_empty_detect = 0xaa64, - .learn_cfg = 0x4402, - .dpacc = 0x0c7d, - .rcomp0 = 0x0011, - .tempco = 0x0209, - .qr_table00 = 0x5a00, - .qr_table10 = 0x2980, - .qr_table20 = 0x1100, - .qr_table30 = 0x1000, - .ocv_table = full_model_ocv_table[BATTERY_C18_ATL], - }, - [BATTERY_C19_ATL] = { - .is_ez_config = 0, - .design_cap = 0x3407, /* 6659mAh */ - .ichg_term = 0x03c0, /* 150 mA */ - /* Empty voltage = 3400mV, Recovery voltage = 4000mV */ - .v_empty_detect = 0xaa64, - .learn_cfg = 0x4402, - .dpacc = 0x0c7e, - .rcomp0 = 0x000f, - .tempco = 0x000b, - .qr_table00 = 0x5800, - .qr_table10 = 0x2680, - .qr_table20 = 0x0d00, - .qr_table30 = 0x0b00, - .ocv_table = full_model_ocv_table[BATTERY_C19_ATL], - }, - [BATTERY_C18_SUNWODA] = { - .is_ez_config = 0, - .design_cap = 0x2fcc, /* 6118mAh */ - .ichg_term = 0x03c0, /* 150 mA */ - /* Empty voltage = 3400mV, Recovery voltage = 4000mV */ - .v_empty_detect = 0xaa64, - .learn_cfg = 0x4402, - .dpacc = 0x0c7c, - .rcomp0 = 0x0024, - .tempco = 0x0c1f, - .qr_table00 = 0x9f00, - .qr_table10 = 0x4480, - .qr_table20 = 0x1600, - .qr_table30 = 0x1400, - .ocv_table = full_model_ocv_table[BATTERY_C18_SUNWODA], - }, - [BATTERY_C19_SUNWODA] = { - .is_ez_config = 0, - .design_cap = 0x34b1, /* 6744mAh */ - .ichg_term = 0x03c0, /* 150 mA */ - /* Empty voltage = 3400mV, Recovery voltage = 4000mV */ - .v_empty_detect = 0xaa64, - .learn_cfg = 0x4402, - .dpacc = 0x0c80, - .rcomp0 = 0x001f, - .tempco = 0x051f, - .qr_table00 = 0x9100, - .qr_table10 = 0x3d00, - .qr_table20 = 0x1200, - .qr_table30 = 0x1002, - .ocv_table = full_model_ocv_table[BATTERY_C19_SUNWODA], - }, -}; -BUILD_ASSERT(ARRAY_SIZE(batt_profile) == BATTERY_COUNT); - -static const struct max17055_alert_profile alert_profile[] = { - [BATTERY_C18_ATL] = { - .v_alert_mxmn = VALRT_DISABLE, - .t_alert_mxmn = MAX17055_TALRTTH_REG( - BATTERY_ATL_CHARGE_MAX_TEMP, - BATTERY_ATL_CHARGE_MIN_TEMP), - .s_alert_mxmn = SALRT_DISABLE, - .i_alert_mxmn = IALRT_DISABLE, - }, - [BATTERY_C19_ATL] = { - .v_alert_mxmn = VALRT_DISABLE, - .t_alert_mxmn = MAX17055_TALRTTH_REG( - BATTERY_ATL_CHARGE_MAX_TEMP, - BATTERY_ATL_CHARGE_MIN_TEMP), - .s_alert_mxmn = SALRT_DISABLE, - .i_alert_mxmn = IALRT_DISABLE, - }, - [BATTERY_C18_SUNWODA] = { - .v_alert_mxmn = VALRT_DISABLE, - .t_alert_mxmn = MAX17055_TALRTTH_REG( - BATTERY_SUNWODA_CHARGE_MIN_TEMP, - BATTERY_SUNWODA_CHARGE_MAX_TEMP), - .s_alert_mxmn = SALRT_DISABLE, - .i_alert_mxmn = IALRT_DISABLE, - }, - [BATTERY_C19_SUNWODA] = { - .v_alert_mxmn = VALRT_DISABLE, - .t_alert_mxmn = MAX17055_TALRTTH_REG( - BATTERY_SUNWODA_CHARGE_MIN_TEMP, - BATTERY_SUNWODA_CHARGE_MAX_TEMP), - .s_alert_mxmn = SALRT_DISABLE, - .i_alert_mxmn = IALRT_DISABLE, - }, - -}; -BUILD_ASSERT(ARRAY_SIZE(alert_profile) == BATTERY_COUNT); - -enum temp_zone { - TEMP_ZONE_0, /* t0 <= bat_temp_c < t1 */ - TEMP_ZONE_1, /* t1 <= bat_temp_c < t2 */ - TEMP_ZONE_2, /* t2 <= bat_temp_c < t3 */ - TEMP_ZONE_3, /* t3 <= bat_temp_c < t4 */ - TEMP_ZONE_COUNT, - TEMP_OUT_OF_RANGE = TEMP_ZONE_COUNT, -}; - -/* - * TODO: Many value in temp_zones are pretty similar, we should consolidate - * these and modify the value when we need more rom space later. - */ -static const struct { - int temp_min; /* 0.1 deg C */ - int temp_max; /* 0.1 deg C */ - int desired_current; /* mA */ - int desired_voltage; /* mV */ -} temp_zones[BATTERY_COUNT][TEMP_ZONE_COUNT] = { - [BATTERY_C18_ATL] = { - {BATTERY_ATL_CHARGE_MIN_TEMP * 10, 100, 1170, 4400}, - {100, 200, 1755, 4400}, - {200, 450, 2925, 4400}, - {450, BATTERY_ATL_CHARGE_MAX_TEMP * 10, 2925, 4100}, - }, - [BATTERY_C19_ATL] = { - {BATTERY_ATL_CHARGE_MIN_TEMP * 10, 100, 1300, 4400}, - {100, 200, 1950, 4400}, - {200, 450, 3250, 4400}, - {450, BATTERY_ATL_CHARGE_MAX_TEMP * 10, 3250, 4100}, - }, - [BATTERY_C18_SUNWODA] = { - {BATTERY_SUNWODA_CHARGE_MIN_TEMP * 10, 100, 1170, 4400}, - {100, 200, 1755, 4400}, - {200, 450, 2925, 4400}, - {450, BATTERY_SUNWODA_CHARGE_MAX_TEMP * 10, 2925, 4100}, - }, - [BATTERY_C19_SUNWODA] = { - {BATTERY_SUNWODA_CHARGE_MIN_TEMP * 10, 100, 1300, 4400}, - {100, 200, 1950, 4400}, - {200, 450, 3250, 4400}, - {450, BATTERY_SUNWODA_CHARGE_MAX_TEMP * 10, 3250, 4100}, - }, -}; - -/* BOARD_VERSION < 5: Pull-up = 1800 mV. */ -static const struct mv_to_id batteries0[] = { - { BATTERY_C18_ATL, 900 }, /* 100K ohm */ - { BATTERY_C19_ATL, 576 }, /* 47K ohm */ - { BATTERY_C18_SUNWODA, 1484 }, /* 470K ohm */ - { BATTERY_C19_SUNWODA, 1200 }, /* 200K ohm */ -}; -BUILD_ASSERT(ARRAY_SIZE(batteries0) < BATTERY_COUNT); - -/* BOARD_VERSION >= 5: Pull-up = 3300 mV. */ -static const struct mv_to_id batteries1[] = { - { BATTERY_C18_ATL, 1650 }, /* 100K ohm */ - { BATTERY_C19_ATL, 1055 }, /* 47K ohm */ - { BATTERY_C18_SUNWODA, 2721 }, /* 470K ohm */ - { BATTERY_C19_SUNWODA, 2200 }, /* 200K ohm */ -}; -BUILD_ASSERT(ARRAY_SIZE(batteries1) < BATTERY_COUNT); - -static enum battery_type batt_type = BATTERY_UNKNOWN; - -static void board_get_battery_type(void) -{ - const struct mv_to_id *table = batteries0; - int size = ARRAY_SIZE(batteries0); - int id; - - if (board_version >= 5) { - table = batteries1; - size = ARRAY_SIZE(batteries1); - } - id = board_read_id(ADC_BATT_ID, table, size); - if (id != ADC_READ_ERROR) - batt_type = id; - CPRINTS("Battery Type: %d", batt_type); -} -/* It has to run after BOARD_VERSION is read */ -DECLARE_HOOK(HOOK_INIT, board_get_battery_type, HOOK_PRIO_INIT_I2C + 2); - -const struct battery_info *battery_get_info(void) -{ - return &info[batt_type]; -} - -const struct max17055_batt_profile *max17055_get_batt_profile(void) -{ - return &batt_profile[batt_type]; -} - -const struct max17055_alert_profile *max17055_get_alert_profile(void) -{ - return &alert_profile[batt_type]; -} - -int get_battery_manufacturer_name(char *dest, int size) -{ - static const char * const name[] = { - [BATTERY_UNKNOWN] = "UNKNOWN", - [BATTERY_C18_ATL] = "C18_ATL", - [BATTERY_C19_ATL] = "C19_ATL", - [BATTERY_C18_SUNWODA] = "C18_SWD", - [BATTERY_C19_SUNWODA] = "C19_SWD", - }; - ASSERT(dest); - strzcpy(dest, name[batt_type], size); - return EC_SUCCESS; -} - -int board_cut_off_battery(void) -{ - /* The cut-off procedure is recommended by Richtek. b/116682788 */ - rt946x_por_reset(); - mt6370_vconn_discharge(0); - rt946x_cutoff_battery(); - - return EC_SUCCESS; -} - -enum battery_disconnect_state battery_get_disconnect_state(void) -{ - if (battery_is_present() == BP_YES) - return BATTERY_NOT_DISCONNECTED; - return BATTERY_DISCONNECTED; -} - -int charger_profile_override(struct charge_state_data *curr) -{ - /* battery temp in 0.1 deg C */ - int temp = curr->batt.temperature - 2731; - enum temp_zone zone; - int usb_mv, wpc_mv; - static int previous_usb_mv; - int val; - - if (curr->state != ST_CHARGE) - return 0; - - /* Limit input (=VBUS) to 5V when soc > 85% and charge current < 1A. */ - if (!(curr->batt.flags & BATT_FLAG_BAD_CURRENT) && - charge_get_percent() > BAT_LEVEL_PD_LIMIT && - curr->batt.current < 1000 && - curr->batt.current > 0) { - usb_mv = 5500; - wpc_mv = 5500; - } else { - usb_mv = PD_MAX_VOLTAGE_MV; - wpc_mv = P9221_DC_IVL_EPP_MV; - } - - if (usb_mv != previous_usb_mv) - CPRINTS("VBUS limited to %dmV", usb_mv); - previous_usb_mv = usb_mv; - - /* Pull down USB VBUS */ - if (pd_get_max_voltage() != usb_mv) - pd_set_external_voltage_limit(0, usb_mv); - - /* - * Pull down WPC VBUS. Need to use raw i2c APIs because RO - * doesn't have p9221 driver. If WPC is off, this is a no-op. - */ - if (i2c_read_offset16(I2C_PORT_WPC, P9221_R7_ADDR_FLAGS, - P9221R7_VOUT_SET_REG, &val, 1) == EC_SUCCESS - && val * 100 != wpc_mv) - i2c_write_offset16(I2C_PORT_WPC, P9221_R7_ADDR_FLAGS, - P9221R7_VOUT_SET_REG, wpc_mv / 100, 1); - - if ((curr->batt.flags & BATT_FLAG_BAD_TEMPERATURE) || - (temp < temp_zones[batt_type][TEMP_ZONE_0].temp_min)) { - zone = TEMP_OUT_OF_RANGE; - } else { - for (zone = TEMP_ZONE_0; zone < TEMP_ZONE_COUNT; zone++) { - if (temp < temp_zones[batt_type][zone].temp_max) - break; - } - } - - if (zone == TEMP_OUT_OF_RANGE || zone >= TEMP_ZONE_COUNT) { - curr->requested_current = curr->requested_voltage = 0; - curr->batt.flags &= ~BATT_FLAG_WANT_CHARGE; - curr->state = ST_IDLE; - } else { - curr->requested_current = - temp_zones[batt_type][zone].desired_current; - curr->requested_voltage = - temp_zones[batt_type][zone].desired_voltage; - } - - /* - * When the charger says it's done charging, even if fuel gauge says - * SOC < BATTERY_LEVEL_NEAR_FULL, we'll overwrite SOC with - * BATTERY_LEVEL_NEAR_FULL. So we can ensure both Chrome OS UI - * and battery LED indicate full charge. - */ - if (rt946x_is_charge_done()) { - curr->batt.state_of_charge = MAX(BATTERY_LEVEL_NEAR_FULL, - curr->batt.state_of_charge); - } - - return 0; -} - -static void board_charge_termination(void) -{ - static uint8_t te; - /* Enable charge termination when we are sure battery is present. */ - if (!te && battery_is_present() == BP_YES) { - if (!rt946x_enable_charge_termination(1)) - te = 1; - } -} -DECLARE_HOOK(HOOK_BATTERY_SOC_CHANGE, - board_charge_termination, - HOOK_PRIO_DEFAULT); - -/* Customs options controllable by host command. */ -#define PARAM_FASTCHARGE (CS_PARAM_CUSTOM_PROFILE_MIN + 0) - -enum ec_status charger_profile_override_get_param(uint32_t param, - uint32_t *value) -{ - return EC_RES_INVALID_PARAM; -} - -enum ec_status charger_profile_override_set_param(uint32_t param, - uint32_t value) -{ - return EC_RES_INVALID_PARAM; -} diff --git a/board/flapjack/board.c b/board/flapjack/board.c deleted file mode 100644 index 7da3cea4a6..0000000000 --- a/board/flapjack/board.c +++ /dev/null @@ -1,639 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "adc.h" -#include "adc_chip.h" -#include "backlight.h" -#include "board.h" -#include "button.h" -#include "charge_manager.h" -#include "charge_state.h" -#include "charger.h" -#include "chipset.h" -#include "common.h" -#include "console.h" -#include "cros_board_info.h" -#include "driver/accelgyro_bmi_common.h" -#include "driver/als_tcs3400.h" -#include "driver/battery/max17055.h" -#include "driver/charger/rt946x.h" -#include "driver/sync.h" -#include "driver/tcpm/mt6370.h" -#include "driver/temp_sensor/tmp432.h" -#include "driver/wpc/p9221.h" -#include "ec_commands.h" -#include "extpower.h" -#include "gpio.h" -#include "hooks.h" -#include "host_command.h" -#include "i2c.h" -#include "power.h" -#include "power_button.h" -#include "lid_switch.h" -#include "pwm.h" -#include "pwm_chip.h" -#include "registers.h" -#include "spi.h" -#include "switch.h" -#include "system.h" -#include "task.h" -#include "tcpm/tcpm.h" -#include "temp_sensor.h" -#include "temp_sensor_chip.h" -#include "thermal.h" -#include "timer.h" -#include "usb_charge.h" -#include "usb_mux.h" -#include "usb_pd_tcpm.h" -#include "util.h" - - -#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) -#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) - -/* LCM_ID is embedded in SKU_ID bit[19-16] */ -#define SKU_ID_TO_LCM_ID(x) (((x) >> PANEL_ID_BIT_POSITION) & 0xf) -#define LCM_ID_TO_SKU_ID(x) (((x) & 0xf) << PANEL_ID_BIT_POSITION) - -/* BOARD_VERSION < 5: Pull-up = 1800 mV. */ -static const struct mv_to_id panels0[] = { - { PANEL_BOE_TV101WUM_NG0, 74 }, /* 2.2 kohm */ - { PANEL_BOE_TV080WUM_NG0, 212 }, /* 6.8 kohm */ - { PANEL_STA_10P, 1191 }, /* 100 kohm */ - { PANEL_STA_08P, 1028 }, /* 68 kohm */ -}; -BUILD_ASSERT(ARRAY_SIZE(panels0) < PANEL_COUNT); - -/* BOARD_VERSION >= 5: Pull-up = 3300 mV. */ -static const struct mv_to_id panels1[] = { - { PANEL_BOE_TV101WUM_NG0, 136 }, /* 2.2 kohm */ - { PANEL_BOE_TV080WUM_NG0, 387 }, /* 6.8 kohm */ - { PANEL_STA_10P, 2184 }, /* 100 kohm */ - { PANEL_STA_08P, 1884 }, /* 68 kohm */ -}; -BUILD_ASSERT(ARRAY_SIZE(panels1) < PANEL_COUNT); - -BUILD_ASSERT(PANEL_COUNT <= PANEL_UNINITIALIZED); - -uint8_t board_version; -uint8_t oem; -uint32_t sku = LCM_ID_TO_SKU_ID(PANEL_UNINITIALIZED); - -static const struct rt946x_init_setting battery_init_setting = { - .eoc_current = 150, - .mivr = 4000, - .ircmp_vclamp = 32, - .ircmp_res = 25, - .boost_voltage = 5050, - .boost_current = 1500, -}; - -int board_read_id(enum adc_channel ch, const struct mv_to_id *table, int size) -{ - int mv = adc_read_channel(ch); - int i; - - if (mv == ADC_READ_ERROR) - mv = adc_read_channel(ch); - - for (i = 0; i < size; i++) { - if (ABS(mv - table[i].median_mv) < ADC_MARGIN_MV) - return table[i].id; - } - - return ADC_READ_ERROR; -} - -const struct rt946x_init_setting *board_rt946x_init_setting(void) -{ - return &battery_init_setting; -} - -static void board_setup_panel(void) -{ - uint8_t channel; - uint8_t dim; - int rv = 0; - - if (board_version >= 3) { - switch (SKU_ID_TO_LCM_ID(sku)) { - case PANEL_BOE_TV080WUM_NG0: - case PANEL_STA_08P: - channel = 0xfa; - dim = 0xc8; - break; - case PANEL_BOE_TV101WUM_NG0: - case PANEL_STA_10P: - channel = 0xfe; - dim = 0xc4; - break; - default: - return; - } - } else { - /* TODO: to be removed once the boards are deprecated. */ - channel = sku & SKU_ID_PANEL_SIZE_MASK ? 0xfe : 0xfa; - dim = sku & SKU_ID_PANEL_SIZE_MASK ? 0xc4 : 0xc8; - } - - rv |= i2c_write8(I2C_PORT_CHARGER, RT946X_ADDR_FLAGS, - MT6370_BACKLIGHT_BLEN, channel); - rv |= i2c_write8(I2C_PORT_CHARGER, RT946X_ADDR_FLAGS, - MT6370_BACKLIGHT_BLDIM, dim); - rv |= i2c_write8(I2C_PORT_CHARGER, RT946X_ADDR_FLAGS, - MT6370_BACKLIGHT_BLPWM, 0xac); - if (rv) - CPRINTS("Board setup panel failed"); -} - -static enum panel_id board_get_panel_id(void) -{ - enum panel_id id; - - if (board_version < 3) { - id = PANEL_DEFAULT; /* No LCM_ID. */ - } else { - const struct mv_to_id *table = panels0; - int size = ARRAY_SIZE(panels0); - if (board_version >= 5) { - table = panels1; - size = ARRAY_SIZE(panels1); - } - id = board_read_id(ADC_LCM_ID, table, size); - if (id < PANEL_DEFAULT || PANEL_COUNT <= id) - id = PANEL_DEFAULT; - } - CPRINTS("LCM ID: %d", id); - return id; -} - -#define CBI_SKU_ID_SIZE 4 - -int cbi_board_override(enum cbi_data_tag tag, uint8_t *buf, uint8_t *size) -{ - switch (tag) { - case CBI_TAG_SKU_ID: - if (*size != CBI_SKU_ID_SIZE) - /* For old boards (board_version < 3) */ - return EC_SUCCESS; - if (SKU_ID_TO_LCM_ID(sku) == PANEL_UNINITIALIZED) - /* Haven't read LCM_ID */ - return EC_ERROR_BUSY; - buf[PANEL_ID_BIT_POSITION / 8] = SKU_ID_TO_LCM_ID(sku); - break; - default: - break; - } - return EC_SUCCESS; -} - -static void cbi_init(void) -{ - uint32_t val; - - if (cbi_get_board_version(&val) == EC_SUCCESS && val <= UINT8_MAX) - board_version = val; - CPRINTS("Board Version: 0x%02x", board_version); - - if (cbi_get_oem_id(&val) == EC_SUCCESS && val <= PROJECT_COUNT) - oem = val; - CPRINTS("OEM: %d", oem); - - sku = LCM_ID_TO_SKU_ID(board_get_panel_id()); - - if (cbi_get_sku_id(&val) == EC_SUCCESS) - sku = val; - - CPRINTS("SKU: 0x%08x", sku); -} -DECLARE_HOOK(HOOK_INIT, cbi_init, HOOK_PRIO_INIT_I2C + 1); - -static void tcpc_alert_event(enum gpio_signal signal) -{ - schedule_deferred_pd_interrupt(0 /* port */); -} - -static void gauge_interrupt(enum gpio_signal signal) -{ - task_wake(TASK_ID_CHARGER); -} - -#include "gpio_list.h" - -/******************************************************************************/ -/* ADC channels. Must be in the exactly same order as in enum adc_channel. */ -const struct adc_t adc_channels[] = { - [ADC_LCM_ID] = {"LCM_ID", 3300, 4096, 0, STM32_AIN(10)}, - [ADC_EC_SKU_ID] = {"EC_SKU_ID", 3300, 4096, 0, STM32_AIN(8)}, - [ADC_BATT_ID] = {"BATT_ID", 3300, 4096, 0, STM32_AIN(7)}, - [ADC_USBC_THERM] = {"USBC_THERM", 3300, 4096, 0, STM32_AIN(14), - STM32_ADC_SMPR_239_5_CY}, -}; -BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); - -/******************************************************************************/ -/* I2C ports */ -const struct i2c_port_t i2c_ports[] = { - {"charger", I2C_PORT_CHARGER, 400, GPIO_I2C1_SCL, GPIO_I2C1_SDA}, - {"tcpc0", I2C_PORT_TCPC0, 400, GPIO_I2C1_SCL, GPIO_I2C1_SDA}, - {"als", I2C_PORT_ALS, 400, GPIO_I2C1_SCL, GPIO_I2C1_SDA}, - {"battery", I2C_PORT_BATTERY, 400, GPIO_I2C2_SCL, GPIO_I2C2_SDA}, - {"accelgyro", I2C_PORT_ACCEL, 400, GPIO_I2C2_SCL, GPIO_I2C2_SDA}, - {"eeprom", I2C_PORT_EEPROM, 400, GPIO_I2C2_SCL, GPIO_I2C2_SDA}, -}; -const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports); - -/******************************************************************************/ -/* Charger Chips */ -const struct charger_config_t chg_chips[] = { - { - .i2c_port = I2C_PORT_CHARGER, - .i2c_addr_flags = RT946X_ADDR_FLAGS, - .drv = &rt946x_drv, - }, -}; - -/* power signal list. Must match order of enum power_signal. */ -const struct power_signal_info power_signal_list[] = { - {GPIO_AP_IN_SLEEP_L, POWER_SIGNAL_ACTIVE_LOW, "AP_IN_S3_L"}, - {GPIO_PMIC_EC_RESETB, POWER_SIGNAL_ACTIVE_HIGH, "PMIC_PWR_GOOD"}, -}; -BUILD_ASSERT(ARRAY_SIZE(power_signal_list) == POWER_SIGNAL_COUNT); - -#ifdef CONFIG_TEMP_SENSOR_TMP432 -/* Temperature sensors data; must be in same order as enum temp_sensor_id. */ -const struct temp_sensor_t temp_sensors[] = { - {"TMP432_Internal", TEMP_SENSOR_TYPE_BOARD, tmp432_get_val, - TMP432_IDX_LOCAL, 4}, - {"TMP432_Sensor_1", TEMP_SENSOR_TYPE_BOARD, tmp432_get_val, - TMP432_IDX_REMOTE1, 4}, - {"TMP432_Sensor_2", TEMP_SENSOR_TYPE_BOARD, tmp432_get_val, - TMP432_IDX_REMOTE2, 4}, -}; -BUILD_ASSERT(ARRAY_SIZE(temp_sensors) == TEMP_SENSOR_COUNT); - -/* - * Thermal limits for each temp sensor. All temps are in degrees K. Must be in - * same order as enum temp_sensor_id. To always ignore any temp, use 0. - */ -struct ec_thermal_config thermal_params[] = { - {{0, 0, 0}, 0, 0}, /* TMP432_Internal */ - {{0, 0, 0}, 0, 0}, /* TMP432_Sensor_1 */ - {{0, 0, 0}, 0, 0}, /* TMP432_Sensor_2 */ -}; -BUILD_ASSERT(ARRAY_SIZE(thermal_params) == TEMP_SENSOR_COUNT); -#endif - -/******************************************************************************/ -/* SPI devices */ -const struct spi_device_t spi_devices[] = { -}; -const unsigned int spi_devices_used = ARRAY_SIZE(spi_devices); - -/******************************************************************************/ -const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { - { - .bus_type = EC_BUS_TYPE_I2C, - .i2c_info = { - .port = I2C_PORT_TCPC0, - .addr_flags = MT6370_TCPC_I2C_ADDR_FLAGS, - }, - .drv = &mt6370_tcpm_drv}, -}; - -const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { - { - .usb_port = 0, - .driver = &virtual_usb_mux_driver, - .hpd_update = &virtual_hpd_update, - }, -}; - -void board_reset_pd_mcu(void) -{ -} - -uint16_t tcpc_get_alert_status(void) -{ - uint16_t status = 0; - - if (!gpio_get_level(GPIO_USB_C0_PD_INT_ODL)) - status |= PD_STATUS_TCPC_ALERT_0; - - return status; -} - -int board_set_active_charge_port(int charge_port) -{ - CPRINTS("New chg p%d", charge_port); - - switch (charge_port) { - case 0: - /* Don't charge from a source port except wireless charging*/ -#ifdef CONFIG_WIRELESS_CHARGER_P9221_R7 - if (board_vbus_source_enabled(charge_port) - && !wpc_chip_is_online()) -#else - if (board_vbus_source_enabled(charge_port)) -#endif - return -1; - break; - case CHARGE_PORT_NONE: - /* - * To ensure the fuel gauge (max17055) is always powered - * even when battery is disconnected, keep VBAT rail on but - * set the charging current to minimum. - */ - charger_set_current(CHARGER_SOLO, 0); - break; - default: - panic("Invalid charge port\n"); - break; - } - - return EC_SUCCESS; -} - -void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) -{ - charge_set_input_current_limit(MAX(charge_ma, - CONFIG_CHARGER_INPUT_CURRENT), charge_mv); -} - -int extpower_is_present(void) -{ - return tcpm_check_vbus_level(0, VBUS_PRESENT); -} - -int pd_snk_is_vbus_provided(int port) -{ - if (port) - panic("Invalid charge port\n"); - - return rt946x_is_vbus_ready(); -} - -/* - * Threshold to detect USB-C board. If the USB-C board isn't connected, - * USBC_THERM is floating thus the ADC pin should read about the pull-up - * voltage. If it's connected, the voltage is capped by the resistor (429k) - * place in parallel to the thermistor. 3.3V x 429k/(39k + 429k) = 3.025V - */ -#define USBC_THERM_THRESHOLD 3025 - -static void board_init(void) -{ -#ifdef SECTION_IS_RO - /* If USB-C board isn't connected, the device is being assembled. - * We cut off the battery until the assembly is done for better yield. - * Timing is ok because STM32F0 initializes ADC on demand. */ - if (board_version > 0x02) { - int mv = adc_read_channel(ADC_USBC_THERM); - if (mv == ADC_READ_ERROR) - mv = adc_read_channel(ADC_USBC_THERM); - CPRINTS("USBC_THERM=%d", mv); - if (mv > USBC_THERM_THRESHOLD) { - cflush(); - board_cut_off_battery(); - } - } -#endif - /* Set SPI1 PB13/14/15 pins to high speed */ - STM32_GPIO_OSPEEDR(GPIO_B) |= 0xfc000000; - - /* Enable TCPC alert interrupts */ - gpio_enable_interrupt(GPIO_USB_C0_PD_INT_ODL); - - /* Enable charger interrupts */ - gpio_enable_interrupt(GPIO_CHARGER_INT_ODL); - -#ifdef SECTION_IS_RW -#ifdef CONFIG_WIRELESS_CHARGER_P9221_R7 - /* Enable Wireless charger interrupts */ - gpio_enable_interrupt(GPIO_P9221_INT_ODL); -#endif - /* Enable interrupts from BMI160 sensor. */ - gpio_enable_interrupt(GPIO_ACCEL_INT_ODL); - - /* Enable interrupt for the TCS3400 color light sensor */ - if (board_version >= 4) - gpio_enable_interrupt(GPIO_TCS3400_INT_ODL); - - /* Enable interrupt for the camera vsync. */ - gpio_enable_interrupt(GPIO_SYNC_INT); -#endif /* SECTION_IS_RW */ - - /* Enable interrupt from PMIC. */ - gpio_enable_interrupt(GPIO_PMIC_EC_RESETB); - - /* Enable gauge interrupt from max17055 */ - gpio_enable_interrupt(GPIO_GAUGE_INT_ODL); - board_setup_panel(); -} -DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); - -#ifdef SECTION_IS_RW -static void usb_pd_connect(void) -{ - /* VBUS from p9221 is already zero as it's disabled by NCP3902 */ - p9221_notify_vbus_change(0); - rt946x_toggle_bc12_detection(); -} -DECLARE_HOOK(HOOK_USB_PD_CONNECT, usb_pd_connect, HOOK_PRIO_DEFAULT); -#endif - -void board_config_pre_init(void) -{ - STM32_RCC_AHBENR |= STM32_RCC_HB_DMA1; - /* - * Remap USART1 and SPI2 DMA: - * - * Ch4: USART1_TX / Ch5: USART1_RX (1000) - * Ch6: SPI2_RX / Ch7: SPI2_TX (0011) - */ - STM32_DMA_CSELR(STM32_DMAC_CH4) = (8 << 12) | (8 << 16) | - (3 << 20) | (3 << 24); -} - -/* Motion sensors */ -/* Mutexes */ -#ifdef SECTION_IS_RW -static struct mutex g_lid_mutex; - -static struct bmi_drv_data_t g_bmi160_data; - -static struct als_drv_data_t g_tcs3400_data = { - .als_cal.scale = 1, - .als_cal.uscale = 0, - .als_cal.offset = 0, - .als_cal.channel_scale = { - .k_channel_scale = ALS_CHANNEL_SCALE(1.0), /* kc from VPD */ - .cover_scale = ALS_CHANNEL_SCALE(0.9), /* CT */ - }, -}; - -static struct tcs3400_rgb_drv_data_t g_tcs3400_rgb_data = { - .calibration.rgb_cal[X] = { - .offset = 15, /* 15.65956688 */ - .coeff[TCS_RED_COEFF_IDX] = FLOAT_TO_FP(-0.04592318), - .coeff[TCS_GREEN_COEFF_IDX] = FLOAT_TO_FP(0.06756278), - .coeff[TCS_BLUE_COEFF_IDX] = FLOAT_TO_FP(-0.05885579), - .coeff[TCS_CLEAR_COEFF_IDX] = FLOAT_TO_FP(0.12021096), - .scale = { - .k_channel_scale = ALS_CHANNEL_SCALE(1.0), /* kr */ - .cover_scale = ALS_CHANNEL_SCALE(0.6) - } - }, - .calibration.rgb_cal[Y] = { - .offset = 8, /* 8.75943638 */ - .coeff[TCS_RED_COEFF_IDX] = FLOAT_TO_FP(-0.07786953), - .coeff[TCS_GREEN_COEFF_IDX] = FLOAT_TO_FP(0.18940035), - .coeff[TCS_BLUE_COEFF_IDX] = FLOAT_TO_FP(-0.0524428), - .coeff[TCS_CLEAR_COEFF_IDX] = FLOAT_TO_FP(0.09092403), - .scale = { - .k_channel_scale = ALS_CHANNEL_SCALE(1.0), /* kg */ - .cover_scale = ALS_CHANNEL_SCALE(1.0) - } - }, - .calibration.rgb_cal[Z] = { - .offset = -21, /* -21.92665481 */ - .coeff[TCS_RED_COEFF_IDX] = FLOAT_TO_FP(-0.18981975), - .coeff[TCS_GREEN_COEFF_IDX] = FLOAT_TO_FP(0.5351057), - .coeff[TCS_BLUE_COEFF_IDX] = FLOAT_TO_FP(-0.01858507), - .coeff[TCS_CLEAR_COEFF_IDX] = FLOAT_TO_FP(-0.01793189), - .scale = { - .k_channel_scale = ALS_CHANNEL_SCALE(1.0), /* kb */ - .cover_scale = ALS_CHANNEL_SCALE(1.5) - } - }, - .calibration.irt = INT_TO_FP(1), - .saturation.again = TCS_DEFAULT_AGAIN, - .saturation.atime = TCS_DEFAULT_ATIME, -}; - -/* Matrix to rotate accelerometer into standard reference frame */ -const mat33_fp_t lid_standard_ref = { - { 0, FLOAT_TO_FP(-1), 0}, - { FLOAT_TO_FP(-1), 0, 0}, - { 0, 0, FLOAT_TO_FP(-1)} -}; - -struct motion_sensor_t motion_sensors[] = { - /* - * Note: bmi160: supports accelerometer and gyro sensor - * Requirement: accelerometer sensor must init before gyro sensor - * DO NOT change the order of the following table. - */ - [LID_ACCEL] = { - .name = "Accel", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_BMI160, - .type = MOTIONSENSE_TYPE_ACCEL, - .location = MOTIONSENSE_LOC_LID, - .drv = &bmi160_drv, - .mutex = &g_lid_mutex, - .drv_data = &g_bmi160_data, - .port = I2C_PORT_ACCEL, - .i2c_spi_addr_flags = BMI160_ADDR0_FLAGS, - .rot_standard_ref = &lid_standard_ref, - .default_range = 4, /* g, to meet CDD 7.3.1/C-1-4 reqs */ - .min_frequency = BMI_ACCEL_MIN_FREQ, - .max_frequency = BMI_ACCEL_MAX_FREQ, - .config = { - /* Enable accel in S0 */ - [SENSOR_CONFIG_EC_S0] = { - .odr = 10000 | ROUND_UP_FLAG, - .ec_rate = 100 * MSEC, - }, - }, - }, - [LID_GYRO] = { - .name = "Gyro", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_BMI160, - .type = MOTIONSENSE_TYPE_GYRO, - .location = MOTIONSENSE_LOC_LID, - .drv = &bmi160_drv, - .mutex = &g_lid_mutex, - .drv_data = &g_bmi160_data, - .port = I2C_PORT_ACCEL, - .i2c_spi_addr_flags = BMI160_ADDR0_FLAGS, - .default_range = 1000, /* dps */ - .rot_standard_ref = &lid_standard_ref, - .min_frequency = BMI_GYRO_MIN_FREQ, - .max_frequency = BMI_GYRO_MAX_FREQ, - }, - [CLEAR_ALS] = { - .name = "Clear Light", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_TCS3400, - .type = MOTIONSENSE_TYPE_LIGHT, - .location = MOTIONSENSE_LOC_LID, - .drv = &tcs3400_drv, - .drv_data = &g_tcs3400_data, - .port = I2C_PORT_ALS, - .i2c_spi_addr_flags = TCS3400_I2C_ADDR_FLAGS, - .rot_standard_ref = NULL, - .default_range = 0x10000, /* scale = 1x, uscale = 0 */ - .min_frequency = TCS3400_LIGHT_MIN_FREQ, - .max_frequency = TCS3400_LIGHT_MAX_FREQ, - .config = { - /* Run ALS sensor in S0 */ - [SENSOR_CONFIG_EC_S0] = { - .odr = 1000, - }, - }, - }, - [RGB_ALS] = { - .name = "RGB Light", - .active_mask = SENSOR_ACTIVE_S0_S3, - .chip = MOTIONSENSE_CHIP_TCS3400, - .type = MOTIONSENSE_TYPE_LIGHT_RGB, - .location = MOTIONSENSE_LOC_LID, - .drv = &tcs3400_rgb_drv, - .drv_data = &g_tcs3400_rgb_data, - /*.port=I2C_PORT_ALS,*/ /* Unused. RGB channels read by CLEAR_ALS. */ - .rot_standard_ref = NULL, - .default_range = 0x10000, /* scale = 1x, uscale = 0 */ - .min_frequency = 0, /* 0 indicates we should not use sensor directly */ - .max_frequency = 0, /* 0 indicates we should not use sensor directly */ - }, - [VSYNC] = { - .name = "Camera vsync", - .active_mask = SENSOR_ACTIVE_S0, - .chip = MOTIONSENSE_CHIP_GPIO, - .type = MOTIONSENSE_TYPE_SYNC, - .location = MOTIONSENSE_LOC_CAMERA, - .drv = &sync_drv, - .default_range = 0, - .min_frequency = 0, - .max_frequency = 1, - }, -}; -const unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors); -const struct motion_sensor_t *motion_als_sensors[] = { - &motion_sensors[CLEAR_ALS], -}; -BUILD_ASSERT(ARRAY_SIZE(motion_als_sensors) == ALS_COUNT); -#endif /* SECTION_IS_RW */ - -int board_allow_i2c_passthru(int port) -{ - return (port == I2C_PORT_VIRTUAL_BATTERY); -} - -int board_get_fod(uint8_t **fod) -{ - *fod = NULL; - return 0; -} - -int board_get_epp_fod(uint8_t **fod) -{ - *fod = NULL; - return 0; -} - diff --git a/board/flapjack/board.h b/board/flapjack/board.h deleted file mode 100644 index 527c911cb0..0000000000 --- a/board/flapjack/board.h +++ /dev/null @@ -1,350 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* Configuration for Kukui */ - -#ifndef __CROS_EC_BOARD_H -#define __CROS_EC_BOARD_H - -/* Optional modules */ -#define CONFIG_ADC -#undef CONFIG_ADC_WATCHDOG -#define CONFIG_BOARD_VERSION_CBI -#define CONFIG_CHIPSET_MT8183 -#define CONFIG_CMD_ACCELS -#define CONFIG_CRC8 -#define CONFIG_CBI_EEPROM -#define CONFIG_EMULATED_SYSRQ -#undef CONFIG_HIBERNATE -#define CONFIG_I2C -#define CONFIG_I2C_CONTROLLER -#define CONFIG_I2C_VIRTUAL_BATTERY -#define CONFIG_I2C_PASSTHRU_RESTRICTED -#define CONFIG_LED_COMMON -#define CONFIG_LOW_POWER_IDLE -#define CONFIG_POWER_COMMON -#define CONFIG_SPI -#define CONFIG_SPI_CONTROLLER -#define CONFIG_STM_HWTIMER32 -#define CONFIG_SWITCH -#define CONFIG_WATCHDOG_HELP - -#define CONFIG_SYSTEM_UNLOCKED /* Allow dangerous commands for testing */ - -#undef CONFIG_UART_CONSOLE -#define CONFIG_UART_CONSOLE 1 -#define CONFIG_UART_RX_DMA - -/* Bootblock */ -#ifdef SECTION_IS_RO -#define CONFIG_BOOTBLOCK - -#define EMMC_SPI_PORT 2 -#endif - -/* Optional features */ -#define CONFIG_BOARD_PRE_INIT -#define CONFIG_BUTTON_TRIGGERED_RECOVERY -#define CONFIG_CHARGER_ILIM_PIN_DISABLED -#define CONFIG_FORCE_CONSOLE_RESUME -#define CONFIG_HOST_COMMAND_STATUS -#define CONFIG_CMD_AP_RESET_LOG - -/* Required for FAFT */ -#define CONFIG_CMD_BUTTON - -/* By default, set hcdebug to off */ -#undef CONFIG_HOSTCMD_DEBUG_MODE -#define CONFIG_HOSTCMD_DEBUG_MODE HCDEBUG_OFF -#define CONFIG_LTO -#define CONFIG_POWER_BUTTON -#define CONFIG_POWER_BUTTON_IGNORE_LID -#define CONFIG_POWER_TRACK_HOST_SLEEP_STATE -#define CONFIG_SOFTWARE_PANIC -#define CONFIG_VBOOT_HASH -#define CONFIG_VOLUME_BUTTONS - -#define CONFIG_CHARGER -#define CONFIG_CHARGER_MT6370 -#define CONFIG_CHARGER_INPUT_CURRENT 512 -#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 2 -#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 15000 -#define CONFIG_CHARGER_PROFILE_OVERRIDE -#define CONFIG_CHARGER_DISCHARGE_ON_AC -#define CONFIG_CHARGER_OTG -#define CONFIG_USB_CHARGER -#define CONFIG_USB_MUX_VIRTUAL - -/* Increase tx buffer size, as we'd like to stream EC log to AP. */ -#undef CONFIG_UART_TX_BUF_SIZE -#define CONFIG_UART_TX_BUF_SIZE 4096 - -/* Motion Sensors */ -#ifdef SECTION_IS_RW -#define CONFIG_ACCELGYRO_BMI160 -#define CONFIG_ACCEL_INTERRUPTS -#define CONFIG_ACCELGYRO_BMI160_INT_EVENT \ - TASK_EVENT_MOTION_SENSOR_INTERRUPT(LID_ACCEL) - -#define CONFIG_ALS -#define ALS_COUNT 1 - -/* TSC3400 ALS */ -#define CONFIG_ALS_TCS3400 -#define CONFIG_ALS_TCS3400_INT_EVENT \ - TASK_EVENT_MOTION_SENSOR_INTERRUPT(CLEAR_ALS) -#define CONFIG_TCS_USE_LUX_TABLE - - -/* ALS needs to be polled */ -#define CONFIG_ACCEL_FORCE_MODE_MASK BIT(CLEAR_ALS) - -/* Camera VSYNC */ -#define CONFIG_SYNC -#define CONFIG_SYNC_COMMAND -#define CONFIG_SYNC_INT_EVENT \ - TASK_EVENT_MOTION_SENSOR_INTERRUPT(VSYNC) -#endif /* SECTION_IS_RW */ - -/* To be able to indicate the device is in tablet mode. */ -#define CONFIG_TABLET_MODE -#define CONFIG_TABLET_MODE_SWITCH - -/* - * Only include the sensor fifo in the RW section (since the motion task is only - * included there). - */ -#ifdef SECTION_IS_RW -/* Enable sensor fifo, must also define the _SIZE and _THRES */ -#define CONFIG_ACCEL_FIFO -/* FIFO size is in power of 2. */ -#define CONFIG_ACCEL_FIFO_SIZE 256 -/* Depends on how fast the AP boots and typical ODRs. */ -#define CONFIG_ACCEL_FIFO_THRES (CONFIG_ACCEL_FIFO_SIZE / 3) -#endif /* SECTION_IS_RW */ - -/* Wireless Power Charger Config */ -#ifdef SECTION_IS_RW -#define CONFIG_WIRELESS_CHARGER_P9221_R7 -#endif - - -/* USB PD config */ -/* Exclude PD state names from RO image to save space */ -#ifdef SECTION_IS_RO -#undef CONFIG_USB_PD_TCPMV1_DEBUG -#endif -#define CONFIG_CHARGE_MANAGER -#define CONFIG_USB_POWER_DELIVERY -#define CONFIG_USB_PD_TCPMV1 -#define CONFIG_USB_PD_ALT_MODE -#define CONFIG_USB_PD_ALT_MODE_DFP -#define CONFIG_USB_PD_DISCHARGE_TCPC -#define CONFIG_USB_PD_DUAL_ROLE -#define CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE -#define CONFIG_USB_PD_LOGGING -#define CONFIG_USB_PD_PORT_MAX_COUNT 1 -#define CONFIG_USB_PD_TCPC_LOW_POWER -#define CONFIG_USB_PD_TCPM_MT6370 -#define CONFIG_USB_PD_TCPM_TCPCI -#define CONFIG_USB_PD_VBUS_DETECT_TCPC -#define CONFIG_USB_PD_5V_CHARGER_CTRL -#define CONFIG_USBC_SS_MUX -#define CONFIG_USBC_VCONN -#define CONFIG_USBC_VCONN_SWAP -#define CONFIG_USB_PD_COMM_LOCKED -#define CONFIG_USB_PD_DP_HPD_GPIO -#define CONFIG_USBC_DISABLE_CHARGE_FROM_RP_DEF -#ifdef SECTION_IS_RO -#define CONFIG_USB_PD_DEBUG_LEVEL 0 -#endif - -#define CONFIG_BATTERY_CUT_OFF -#define CONFIG_BATTERY_PRESENT_CUSTOM -#define CONFIG_BATTERY_REVIVE_DISCONNECT -#define CONFIG_BATTERY_MAX17055 -#define CONFIG_BATTERY_MAX17055_ALERT -#define CONFIG_BATTERY_MAX17055_FULL_MODEL - -/* Battery parameters for max17055 ModelGauge m5 algorithm. */ -#define BATTERY_MAX17055_RSENSE 10 /* m-ohm */ -#define BATTERY_DESIRED_CHARGING_CURRENT 2000 /* mA */ - -#define PD_OPERATING_POWER_MW 15000 -#define PD_MAX_VOLTAGE_MV 9000 -#define PD_MAX_CURRENT_MA 3000 -#define PD_MAX_POWER_MW 18000 - -#define PD_POWER_SUPPLY_TURN_ON_DELAY 30000 /* us */ -#define PD_POWER_SUPPLY_TURN_OFF_DELAY 50000 /* us */ - -/* Timer selection */ -#define TIM_CLOCK32 2 -#define TIM_WATCHDOG 7 - -/* 48 MHz SYSCLK clock frequency */ -#define CPU_CLOCK 48000000 - -/* Optional for testing */ -#undef CONFIG_PECI -#undef CONFIG_PSTORE - -/* Modules we want to exclude */ -#undef CONFIG_CMD_ACCELSPOOF -#undef CONFIG_CMD_APTHROTTLE -#undef CONFIG_CMD_BATTFAKE -#undef CONFIG_CMD_DEVICE_EVENT -#undef CONFIG_CMD_FASTCHARGE -#undef CONFIG_CMD_FLASH -#undef CONFIG_CMD_GETTIME -#undef CONFIG_CMD_HASH -#undef CONFIG_CMD_HCDEBUG -#undef CONFIG_CMD_MD -#undef CONFIG_CMD_MEM -#undef CONFIG_CMD_POWERINDEBUG -#undef CONFIG_CMD_TIMERINFO - -#ifdef SECTION_IS_RO -#undef CONFIG_CMD_ADC -#undef CONFIG_CMD_APTHROTTLE -#undef CONFIG_CMD_AP_RESET_LOG -#undef CONFIG_CMD_CBI -#undef CONFIG_CMD_I2C_SCAN -#undef CONFIG_CMD_I2C_XFER -#undef CONFIG_CMD_IDLE_STATS -#undef CONFIG_CMD_INA -#undef CONFIG_CMD_MMAPINFO -#undef CONFIG_CMD_PD -#undef CONFIG_CMD_PWR_AVG -#undef CONFIG_CMD_REGULATOR -#undef CONFIG_CMD_RW -#undef CONFIG_CMD_SHMEM -/* TODO: Consider put these back when FSI is (about to be) done. */ -#undef CONFIG_CMD_SLEEPMASK -#undef CONFIG_CMD_SLEEPMASK_SET -#undef CONFIG_CMD_SYSLOCK -#undef CONFIG_CONSOLE_CMDHELP -#undef CONFIG_HOSTCMD_GET_UPTIME_INFO -#endif - -#define CONFIG_TASK_PROFILING - -/* I2C ports */ -#define I2C_PORT_CHARGER 0 -#define I2C_PORT_TCPC0 0 -#define I2C_PORT_WPC 0 -#define I2C_PORT_BATTERY 1 -#define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY -#define I2C_PORT_ACCEL 1 -#define I2C_PORT_ALS 1 -#define I2C_PORT_EEPROM 1 - -/* I2C addresses */ -#define I2C_ADDR_EEPROM_FLAGS 0x50 - -/* Route sbs host requests to virtual battery driver */ -#define VIRTUAL_BATTERY_ADDR_FLAGS 0x0B - -/* Enable Accel over SPI */ -#define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */ - -#define CONFIG_MKBP_INPUT_DEVICES -#define CONFIG_MKBP_EVENT -#define CONFIG_MKBP_USE_GPIO -/* Define the host events which are allowed to wakeup AP in S3. */ -#define CONFIG_MKBP_HOST_EVENT_WAKEUP_MASK \ - (EC_HOST_EVENT_MASK(EC_HOST_EVENT_POWER_BUTTON) |\ - EC_HOST_EVENT_MASK(EC_HOST_EVENT_RTC)) - -/* Define panel size mask according to skuid */ -#define SKU_ID_PANEL_SIZE_MASK BIT(1) - -#ifndef __ASSEMBLER__ - -enum oem_id { - PROJECT_FLAPJACK = 0, - PROJECT_COUNT, -}; - -enum adc_channel { - /* Real ADC channels begin here */ - ADC_LCM_ID = 0, - ADC_EC_SKU_ID, - ADC_BATT_ID, - ADC_USBC_THERM, - ADC_CH_COUNT -}; - -/* Panel ID bit position inside sku_id */ -#define PANEL_ID_BIT_POSITION 16 - -/* Refer to coreboot/src/mainboard/google/kukui/display.h */ -enum panel_id { - PANEL_DEFAULT = 0, - PANEL_BOE_TV101WUM_NG0, - PANEL_BOE_TV080WUM_NG0, - PANEL_STA_10P, - PANEL_STA_08P, - PANEL_COUNT, - PANEL_UNINITIALIZED = 0xf, -}; - -/* power signal definitions */ -enum power_signal { - AP_IN_S3_L, - PMIC_PWR_GOOD, - - /* Number of signals */ - POWER_SIGNAL_COUNT, -}; - -/* Motion sensors */ -enum sensor_id { - LID_ACCEL = 0, - LID_GYRO, - CLEAR_ALS, - RGB_ALS, - VSYNC, - SENSOR_COUNT, -}; - -/* Batteries */ -enum battery_type { - BATTERY_UNKNOWN = 0, - BATTERY_C18_ATL, - BATTERY_C19_ATL, - BATTERY_C18_SUNWODA, - BATTERY_C19_SUNWODA, - BATTERY_COUNT, -}; - -#include "gpio_signal.h" -#include "registers.h" - -#ifdef SECTION_IS_RO -/* Interrupt handler for emmc task */ -void emmc_cmd_interrupt(enum gpio_signal signal); -#endif - -void board_reset_pd_mcu(void); - -#define ADC_MARGIN_MV 56 /* Simply assume 1800/16/2 */ - -struct mv_to_id { - int id; - int median_mv; -}; - -int board_read_id(enum adc_channel, const struct mv_to_id *table, int size); - -extern uint8_t board_version; -extern uint8_t oem; -extern uint32_t sku; - -#define PORT_TO_HPD(port) GPIO_USB_C0_HPD_OD - -#endif /* !__ASSEMBLER__ */ - -#endif /* __CROS_EC_BOARD_H */ diff --git a/board/flapjack/build.mk b/board/flapjack/build.mk deleted file mode 100644 index a368c187bf..0000000000 --- a/board/flapjack/build.mk +++ /dev/null @@ -1,21 +0,0 @@ -# -*- makefile -*- -# Copyright 2018 The Chromium OS Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. -# -# Board specific files build -# -# -# STmicro STM32F098VC -CHIP:=stm32 -CHIP_FAMILY:=stm32f0 -CHIP_VARIANT:=stm32f09x - -board-y=battery.o board.o usb_pd_policy.o led.o -board-$(CONFIG_BOOTBLOCK)+=emmc.o -board-$(BOARD_KRANE)+=base_detect_krane.o - -$(out)/RO/board/$(BOARD)/emmc.o: $(out)/bootblock_data.h - -# 21504 bytes plus some extra buffer -DEFAULT_BOOTBLOCK_SIZE:=23000 diff --git a/board/flapjack/ec.tasklist b/board/flapjack/ec.tasklist deleted file mode 100644 index 33e3538139..0000000000 --- a/board/flapjack/ec.tasklist +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/** - * See CONFIG_TASK_LIST in config.h for details. - */ -#define CONFIG_TASK_LIST \ - TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(CHARGER, charger_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(USB_CHG, usb_charger_task, NULL, TASK_STACK_SIZE) \ - TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \ - TASK_ALWAYS(HOSTCMD, host_command_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C0, pd_task, NULL, VENTI_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, TASK_STACK_SIZE) \ - TASK_ALWAYS_RO(EMMC, emmc_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS_RW(WPC,wireless_power_charger_task,NULL,LARGER_TASK_STACK_SIZE) - diff --git a/board/flapjack/emmc.c b/board/flapjack/emmc.c deleted file mode 120000 index a97e912173..0000000000 --- a/board/flapjack/emmc.c +++ /dev/null @@ -1 +0,0 @@ -../../baseboard/kukui/emmc.c
\ No newline at end of file diff --git a/board/flapjack/gpio.inc b/board/flapjack/gpio.inc deleted file mode 100644 index f349ceb972..0000000000 --- a/board/flapjack/gpio.inc +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- mode:c -*- - * - * Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* - * Declare symbolic names for all the GPIOs that we care about. - * Note: Those with interrupt handlers must be declared first. - */ - -/* Interrupts */ -GPIO_INT(USB_C0_PD_INT_ODL, PIN(B, 1), GPIO_INT_FALLING | GPIO_PULL_UP, - tcpc_alert_event) -GPIO_INT(VOLUME_UP_L, PIN(B, 10), GPIO_INT_BOTH | GPIO_PULL_UP, - button_interrupt) /* EC_VOLUP_BTN_ODL */ -GPIO_INT(VOLUME_DOWN_L, PIN(B, 11), GPIO_INT_BOTH | GPIO_PULL_UP, - button_interrupt) /* EC_VOLDN_BTN_ODL */ -GPIO_INT(POWER_BUTTON_L, PIN(A, 0), GPIO_INT_BOTH | GPIO_PULL_UP, - power_button_interrupt) /* EC_PWR_BTN_ODL */ - -GPIO_INT(AP_IN_SLEEP_L, PIN(C, 12), GPIO_INT_BOTH | GPIO_PULL_DOWN, - power_signal_interrupt) -GPIO_INT(PMIC_EC_RESETB, PIN(B, 7), GPIO_INT_BOTH | GPIO_PULL_DOWN, - power_signal_interrupt) -GPIO_INT(WARM_RESET_REQ, PIN(A, 3), GPIO_INT_RISING | GPIO_PULL_DOWN, - chipset_reset_request_interrupt) -GPIO_INT(AP_EC_WATCHDOG_L, PIN(C, 2), GPIO_INT_FALLING, - chipset_watchdog_interrupt) - -GPIO_INT_RW(ACCEL_INT_ODL, PIN(A, 4), GPIO_INT_FALLING | GPIO_SEL_1P8V | \ - GPIO_PULL_UP, bmi160_interrupt) - -GPIO_INT_RW(TCS3400_INT_ODL, PIN(A, 14), GPIO_INT_FALLING, - tcs3400_interrupt) -GPIO_INT(CHARGER_INT_ODL, PIN(C, 13), GPIO_INT_FALLING | GPIO_PULL_UP, - rt946x_interrupt) -GPIO_INT_RO(EMMC_CMD, PIN(B, 15), GPIO_INT_FALLING, - emmc_cmd_interrupt) -GPIO_INT(SPI1_NSS, PIN(A, 15), GPIO_INT_BOTH | GPIO_PULL_UP, - spi_event) -GPIO_INT_RW(SYNC_INT, PIN(A, 8), GPIO_INT_RISING | GPIO_PULL_DOWN, - sync_interrupt) -GPIO_INT(LID_OPEN, PIN(C, 5), GPIO_INT_BOTH, - lid_interrupt) /* HALL_INT_L */ -GPIO_INT(GAUGE_INT_ODL, PIN(C, 9), GPIO_INT_FALLING | GPIO_PULL_UP, - gauge_interrupt) -GPIO_INT_RW(P9221_INT_ODL, PIN(A, 6), GPIO_INT_FALLING, - p9221_interrupt) - -/* Voltage rails control pins */ - -/* Reset pins */ -GPIO(AP_SYS_RST_L, PIN(C, 11), GPIO_OUT_LOW) -GPIO(PMIC_WATCHDOG_L, PIN(C, 3), GPIO_OUT_LOW) -GPIO(PMIC_EN_ODL, PIN(C, 10), GPIO_ODR_HIGH) -GPIO(PMIC_FORCE_RESET_ODL, PIN(A, 2), GPIO_ODR_HIGH) -GPIO(MT6370_RST_L, PIN(F, 0), GPIO_OUT_LOW) - -/* - * I2C pins should be configured as inputs until I2C module is - * initialized. This will avoid driving the lines unintentionally. - */ -GPIO(I2C1_SCL, PIN(B, 8), GPIO_INPUT) -GPIO(I2C1_SDA, PIN(B, 9), GPIO_INPUT) -GPIO(I2C2_SCL, PIN(A, 11), GPIO_INPUT) -GPIO(I2C2_SDA, PIN(A, 12), GPIO_INPUT) - -/* Analog pins */ -GPIO(BATT_ID, PIN(A, 7), GPIO_ANALOG) -GPIO(LCM_ID, PIN(C, 0), GPIO_ANALOG) -GPIO(EC_SKU_ID, PIN(B, 0), GPIO_ANALOG) -GPIO(USBC_THERM, PIN(C, 4), GPIO_ANALOG) - -/* Other input pins */ -GPIO(WP_L, PIN(C, 8), GPIO_INPUT) /* EC_FLASH_WP_ODL */ -GPIO(BOOT0, PIN(F, 11), GPIO_INPUT) -GPIO(CCD_MODE_ODL, PIN(A, 1), GPIO_INPUT) - -/* Other output pins */ -GPIO(ENTERING_RW, PIN(C, 6), GPIO_ODR_HIGH) /* EC_ENTERING_RW_ODL */ -GPIO(EC_INT_L, PIN(B, 12), GPIO_ODR_HIGH) /* EC_AP_INT_ODL */ -GPIO(USB_C0_DP_POLARITY, PIN(C, 14), GPIO_OUT_LOW) -GPIO(USB_C0_HPD_OD, PIN(F, 1), GPIO_ODR_LOW) -GPIO(BOOTBLOCK_EN_L, PIN(C, 1), GPIO_ODR_HIGH) -GPIO(USB_C0_DP_OE_L, PIN(A, 5), GPIO_OUT_HIGH) -GPIO(EC_SWDIO, PIN(A, 13), GPIO_ODR_HIGH) -GPIO(EN_PP5000_USBC, PIN(D, 2), GPIO_OUT_LOW) -GPIO(BPP_EPP_SEL, PIN(B, 6), GPIO_OUT_LOW) -GPIO(NCP3902_EN_L, PIN(C, 7), GPIO_OUT_LOW) - - -/* USART1: PA9/PA10 */ -ALTERNATE(PIN_MASK(A, 0x0600), 1, MODULE_UART, 0) -/* I2C MASTER: PB8/9 */ -ALTERNATE(PIN_MASK(B, 0x0300), 1, MODULE_I2C, GPIO_ODR_HIGH ) -/* I2C MASTER: PA11/12 */ -ALTERNATE(PIN_MASK(A, 0x1800), 5, MODULE_I2C, GPIO_ODR_HIGH ) -/* SPI SLAVE: PB3/4/5 */ -ALTERNATE(PIN_MASK(B, 0x0038), 0, MODULE_SPI, 0) -#ifdef SECTION_IS_RO -/* SPI SLAVE: PB13/14/15 */ -ALTERNATE(PIN_MASK(B, 0xE000), 0, MODULE_SPI_FLASH, 0) -#endif -/* SPI SLAVE CS: PA15 */ -ALTERNATE(PIN_MASK(A, 0x8000), 0, MODULE_SPI, 0) diff --git a/board/flapjack/led.c b/board/flapjack/led.c deleted file mode 100644 index 165d549eb7..0000000000 --- a/board/flapjack/led.c +++ /dev/null @@ -1,182 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - * - * Battery LED control for Flapjack board. - */ - -#include "battery.h" -#include "charge_state.h" -#include "console.h" -#include "driver/charger/rt946x.h" -#include "hooks.h" -#include "led_common.h" -#include "util.h" - -/* Define this to enable led command and debug LED */ -#undef DEBUG_LED - -const enum ec_led_id supported_led_ids[] = { EC_LED_ID_BATTERY_LED }; - -const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); - -#define LED_OFF MT6370_LED_ID_OFF -#define LED_RED MT6370_LED_ID1 -#define LED_GRN MT6370_LED_ID2 -#define LED_BLU MT6370_LED_ID3 - -#define LED_MASK_OFF 0 -#define LED_MASK_RED MT6370_MASK_RGB_ISNK1DIM_EN -#define LED_MASK_GRN MT6370_MASK_RGB_ISNK2DIM_EN -#define LED_MASK_BLU MT6370_MASK_RGB_ISNK3DIM_EN - -static enum charge_state chstate; - -static void led_set_battery(void) -{ - static enum charge_state prev = PWR_STATE_UNCHANGE; - static int battery_second; - int red = 0, grn = 0, blu = 0; - - battery_second++; -#ifndef DEBUG_LED - chstate = charge_get_state(); -#endif - if (chstate == prev) - return; - prev = chstate; - - /* - * Full White - * Charging Amber - * Error Red - */ - switch (chstate) { - case PWR_STATE_CHARGE: - /* RGB(current, duty) = (4mA,10/32) (4mA,1/32) (0mA,) */ - red = 1; - grn = 1; - mt6370_led_set_pwm_dim_duty(LED_RED, 9); - mt6370_led_set_pwm_dim_duty(LED_GRN, 0); - break; - case PWR_STATE_DISCHARGE: - /* RGB(current, duty) = (0mA,) (0mA,) (0mA,) */ - break; - case PWR_STATE_ERROR: - /* RGB(current, duty) = (4mA,8/32) (0mA,) (0mA,) */ - red = 1; - mt6370_led_set_pwm_dim_duty(LED_RED, 7); - break; - case PWR_STATE_CHARGE_NEAR_FULL: - /* RGB(current, duty) = (8mA,2/32) (8mA,1/32) (4mA,1/32) */ - red = 2; - grn = 2; - blu = 1; - mt6370_led_set_pwm_dim_duty(LED_RED, 1); - mt6370_led_set_pwm_dim_duty(LED_GRN, 0); - mt6370_led_set_pwm_dim_duty(LED_BLU, 0); - break; - default: - /* Other states don't alter LED behavior */ - return; - } - - mt6370_led_set_brightness(LED_RED, red); - mt6370_led_set_brightness(LED_GRN, grn); - mt6370_led_set_brightness(LED_BLU, blu); -} - -void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) -{ - /* Current is fixed at 4mA. Brightness is controlled by duty only. */ - const uint8_t max = MT6370_LED_PWM_DIMDUTY_MAX; - if (led_id != EC_LED_ID_BATTERY_LED) - return; - brightness_range[EC_LED_COLOR_GREEN] = max; - brightness_range[EC_LED_COLOR_RED] = max; - brightness_range[EC_LED_COLOR_BLUE] = max; -} - -static void set_current_and_pwm_duty(uint8_t brightness, - enum mt6370_led_index color) -{ - if (brightness) { - /* Current is fixed at 4mA. Brightness is controlled by duty. */ - mt6370_led_set_brightness(color, 1); - mt6370_led_set_pwm_dim_duty(color, brightness); - } else { - /* off */ - mt6370_led_set_brightness(color, 0); - } -} - -int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) -{ - if (led_id != EC_LED_ID_BATTERY_LED) - return EC_ERROR_INVAL; - set_current_and_pwm_duty(brightness[EC_LED_COLOR_RED], LED_RED); - set_current_and_pwm_duty(brightness[EC_LED_COLOR_GREEN], LED_GRN); - set_current_and_pwm_duty(brightness[EC_LED_COLOR_BLUE], LED_BLU); - return EC_SUCCESS; -} - -static void flapjack_led_init(void) -{ - const enum mt6370_led_dim_mode dim = MT6370_LED_DIM_MODE_PWM; - const enum mt6370_led_pwm_freq freq = MT6370_LED_PWM_FREQ1000; - mt6370_led_set_color(LED_MASK_RED | LED_MASK_GRN | LED_MASK_BLU); - mt6370_led_set_dim_mode(LED_RED, dim); - mt6370_led_set_dim_mode(LED_GRN, dim); - mt6370_led_set_dim_mode(LED_BLU, dim); - mt6370_led_set_pwm_frequency(LED_RED, freq); - mt6370_led_set_pwm_frequency(LED_GRN, freq); - mt6370_led_set_pwm_frequency(LED_BLU, freq); -} -DECLARE_HOOK(HOOK_INIT, flapjack_led_init, HOOK_PRIO_DEFAULT); - -/* Called by hook task every 1 sec */ -static void led_second(void) -{ - if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) - led_set_battery(); -} -DECLARE_HOOK(HOOK_SECOND, led_second, HOOK_PRIO_DEFAULT); - -#ifdef DEBUG_LED -static int command_led(int argc, char **argv) -{ - int val; - char *e; - - mt6370_led_set_color(LED_MASK_RED|LED_MASK_GRN|LED_MASK_BLU); - - if (argc == 2) { - val = strtoi(argv[1], &e, 0); - if (*e) - return EC_ERROR_PARAM1; - chstate = val; - return EC_SUCCESS; - } - - if (argc < 4) - return EC_ERROR_PARAM_COUNT; - - val = strtoi(argv[1], &e, 0); - if (*e) - return EC_ERROR_PARAM1; - mt6370_led_set_brightness(LED_RED, val); - - val = strtoi(argv[2], &e, 0); - if (*e) - return EC_ERROR_PARAM2; - mt6370_led_set_brightness(LED_GRN, val); - - val = strtoi(argv[3], &e, 0); - if (*e) - return EC_ERROR_PARAM3; - mt6370_led_set_brightness(LED_BLU, val); - - return EC_SUCCESS; -} -DECLARE_CONSOLE_COMMAND(led, command_led, "<chg_state> or <R> <G> <B>", NULL); -#endif diff --git a/board/flapjack/usb_pd_policy.c b/board/flapjack/usb_pd_policy.c deleted file mode 100644 index ef2156f1fe..0000000000 --- a/board/flapjack/usb_pd_policy.c +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "atomic.h" -#include "charger.h" -#include "charge_manager.h" -#include "common.h" -#include "console.h" -#include "driver/charger/rt946x.h" -#include "gpio.h" -#include "hooks.h" -#include "host_command.h" -#include "registers.h" -#include "system.h" -#include "task.h" -#include "timer.h" -#include "util.h" -#include "usb_mux.h" -#include "usb_pd.h" -#include "usb_pd_tcpm.h" - -#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args) -#define CPRINTS(format, args...) cprints(CC_USBPD, format, ## args) - -static uint8_t vbus_en; - -int board_vbus_source_enabled(int port) -{ - return vbus_en; -} - -int pd_check_vconn_swap(int port) -{ - /* - * VCONN is provided directly by the battery (PPVAR_SYS) - * but use the same rules as power swap. - */ - return pd_get_dual_role(port) == PD_DRP_TOGGLE_ON ? 1 : 0; -} - -int pd_set_power_supply_ready(int port) -{ - /* Disable NCP3902 to avoid charging from VBUS */ - gpio_set_level(GPIO_NCP3902_EN_L, 1); - - /* Provide VBUS */ - vbus_en = 1; - gpio_set_level(GPIO_EN_PP5000_USBC, 1); - - /* notify host of power info change */ - pd_send_host_event(PD_EVENT_POWER_CHANGE); - - return EC_SUCCESS; /* we are ready */ -} - -void pd_power_supply_reset(int port) -{ - int prev_en; - - prev_en = vbus_en; - /* Disable VBUS */ - vbus_en = 0; - - if (prev_en) { - gpio_set_level(GPIO_EN_PP5000_USBC, 0); - msleep(250); - gpio_set_level(GPIO_NCP3902_EN_L, 0); - } - - /* notify host of power info change */ - pd_send_host_event(PD_EVENT_POWER_CHANGE); -} - -/* ----------------- Vendor Defined Messages ------------------ */ -#ifdef CONFIG_USB_PD_ALT_MODE_DFP -__override void svdm_dp_post_config(int port) -{ - dp_flags[port] |= DP_FLAGS_DP_ON; - if (!(dp_flags[port] & DP_FLAGS_HPD_HI_PENDING)) - return; - - gpio_set_level(GPIO_USB_C0_HPD_OD, 1); - gpio_set_level(GPIO_USB_C0_DP_OE_L, 0); - gpio_set_level(GPIO_USB_C0_DP_POLARITY, - polarity_rm_dts(pd_get_polarity(port))); - - /* set the minimum time delay (2ms) for the next HPD IRQ */ - svdm_hpd_deadline[port] = get_time().val + HPD_USTREAM_DEBOUNCE_LVL; - usb_mux_hpd_update(port, 1, 0); -} - -__override int svdm_dp_attention(int port, uint32_t *payload) -{ - int cur_lvl = gpio_get_level(GPIO_USB_C0_HPD_OD); - int lvl = PD_VDO_DPSTS_HPD_LVL(payload[1]); - int irq = PD_VDO_DPSTS_HPD_IRQ(payload[1]); - - dp_status[port] = payload[1]; - - /* Its initial DP status message prior to config */ - if (!(dp_flags[port] & DP_FLAGS_DP_ON)) { - if (lvl) - dp_flags[port] |= DP_FLAGS_HPD_HI_PENDING; - return 1; - } - - usb_mux_set(port, lvl ? USB_PD_MUX_DP_ENABLED : USB_PD_MUX_NONE, - USB_SWITCH_CONNECT, polarity_rm_dts(pd_get_polarity(port))); - - usb_mux_hpd_update(port, lvl, irq); - - if (irq & cur_lvl) { - uint64_t now = get_time().val; - /* wait for the minimum spacing between IRQ_HPD if needed */ - if (now < svdm_hpd_deadline[port]) - usleep(svdm_hpd_deadline[port] - now); - - /* generate IRQ_HPD pulse */ - gpio_set_level(GPIO_USB_C0_HPD_OD, 0); - usleep(HPD_DSTREAM_DEBOUNCE_IRQ); - gpio_set_level(GPIO_USB_C0_HPD_OD, 1); - - gpio_set_level(GPIO_USB_C0_DP_OE_L, 0); - gpio_set_level(GPIO_USB_C0_DP_POLARITY, - polarity_rm_dts(pd_get_polarity(port))); - - /* set the minimum time delay (2ms) for the next HPD IRQ */ - svdm_hpd_deadline[port] = get_time().val + - HPD_USTREAM_DEBOUNCE_LVL; - } else if (irq & !cur_lvl) { - CPRINTF("ERR:HPD:IRQ&LOW\n"); - return 0; /* nak */ - } else { - gpio_set_level(GPIO_USB_C0_HPD_OD, lvl); - gpio_set_level(GPIO_USB_C0_DP_OE_L, !lvl); - gpio_set_level(GPIO_USB_C0_DP_POLARITY, - polarity_rm_dts(pd_get_polarity(port))); - /* set the minimum time delay (2ms) for the next HPD IRQ */ - svdm_hpd_deadline[port] = get_time().val + - HPD_USTREAM_DEBOUNCE_LVL; - } - - /* ack */ - return 1; -} - -__override void svdm_exit_dp_mode(int port) -{ - gpio_set_level(GPIO_USB_C0_HPD_OD, 0); - gpio_set_level(GPIO_USB_C0_DP_OE_L, 1); - usb_mux_hpd_update(port, 0, 0); -} -#endif /* CONFIG_USB_PD_ALT_MODE_DFP */ diff --git a/board/flapjack/vif_override.xml b/board/flapjack/vif_override.xml deleted file mode 100644 index 32736caf64..0000000000 --- a/board/flapjack/vif_override.xml +++ /dev/null @@ -1,3 +0,0 @@ -<!-- Add VIF field overrides here. See genvif.c and the Vendor Info File - Definition from the USB-IF. ---> |