diff options
author | Randall Spangler <rspangler@chromium.org> | 2015-06-09 11:15:06 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-06-10 18:24:05 +0000 |
commit | fe9e3bf56532b33a9d99b9372b53905dece5907b (patch) | |
tree | 6bffb4bdd8ad8bac679e44d021eaf21bcb557fbd /common | |
parent | 4e5b020ca917e99c1e68523e4c5aec518b7d9510 (diff) | |
download | chrome-ec-fe9e3bf56532b33a9d99b9372b53905dece5907b.tar.gz |
Remove obsolete board-specific code
Now that we've removed boards from ToT, also delete board-specific
code used only by the removed boards.
There are still more things to remove (unused charging chips, LED
drivers, COMx support). More CLs coming.
BUG=chromium:493866
BRANCH=none
TEST=make buildall -j
Change-Id: Ie6bdeaf96e61cadd77e3f6336c73b9b54ff4eabb
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/276524
Reviewed-by: Alec Berg <alecaberg@chromium.org>
Diffstat (limited to 'common')
-rw-r--r-- | common/build.mk | 3 | ||||
-rw-r--r-- | common/charge_state_v1.c | 5 | ||||
-rw-r--r-- | common/extpower_falco.c | 325 | ||||
-rw-r--r-- | common/extpower_snow.c | 46 | ||||
-rw-r--r-- | common/extpower_spring.c | 970 | ||||
-rw-r--r-- | common/host_command.c | 6 | ||||
-rw-r--r-- | common/lb_common.c | 9 | ||||
-rw-r--r-- | common/pmu_tps65090_charger.c | 20 | ||||
-rw-r--r-- | common/pmu_tps65090_powerinfo.c | 3 |
9 files changed, 2 insertions, 1385 deletions
diff --git a/common/build.mk b/common/build.mk index cdde1f7fd3..be87443078 100644 --- a/common/build.mk +++ b/common/build.mk @@ -40,10 +40,7 @@ common-$(CONFIG_CRC8)+= crc8.o common-$(CONFIG_PMU_POWERINFO)+=pmu_tps65090_powerinfo.o common-$(CONFIG_PMU_TPS65090)+=pmu_tps65090.o common-$(CONFIG_EOPTION)+=eoption.o -common-$(CONFIG_EXTPOWER_FALCO)+=extpower_falco.o common-$(CONFIG_EXTPOWER_GPIO)+=extpower_gpio.o -common-$(CONFIG_EXTPOWER_SNOW)+=extpower_snow.o -common-$(CONFIG_EXTPOWER_SPRING)+=extpower_spring.o common-$(CONFIG_FANS)+=fan.o common-$(CONFIG_FLASH)+=flash.o common-$(CONFIG_FMAP)+=fmap.o diff --git a/common/charge_state_v1.c b/common/charge_state_v1.c index b817049138..90d93446a2 100644 --- a/common/charge_state_v1.c +++ b/common/charge_state_v1.c @@ -865,11 +865,6 @@ void charger_task(void) sleep_usec = CHARGE_POLL_PERIOD_SHORT; } -#ifdef CONFIG_EXTPOWER_FALCO - watch_adapter_closely(ctx); - sleep_usec = EXTPOWER_FALCO_POLL_PERIOD; -#endif - /* Show charging progress in console */ charging_progress(ctx); diff --git a/common/extpower_falco.c b/common/extpower_falco.c deleted file mode 100644 index f7e0516e70..0000000000 --- a/common/extpower_falco.c +++ /dev/null @@ -1,325 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -/* - * Falco adapters can support "charger hybrid turbo boost" mode and other - * buzzwords. The limits vary depending on each adapter's power rating, so we - * need to watch for changes and adjust the limits and high-current thresholds - * accordingly. If we go over, the AP needs to throttle itself. The EC's - * charging state logic isn't affected, just the AP's P-State. We try to save - * PROCHOT as a last resort. - */ - -#include <limits.h> /* part of the compiler */ - -#include "adc.h" -#include "battery_smart.h" -#include "charge_state.h" -#include "charger.h" -#include "chipset.h" -#include "common.h" -#include "console.h" -#include "driver/charger/bq24738.h" -#include "extpower.h" -#include "extpower_falco.h" -#include "hooks.h" -#include "host_command.h" -#include "throttle_ap.h" -#include "util.h" - -/* Console output macros */ -#define CPUTS(outstr) cputs(CC_CHARGER, outstr) -#define CPRINTS(format, args...) cprints(CC_CHARGER, format, ## args) - -/* Values for our supported adapters */ -static const char * const ad_name[] = { - "unknown", - "45W", - "65W", - "90W" -}; -BUILD_ASSERT(ARRAY_SIZE(ad_name) == NUM_ADAPTER_TYPES); - -test_export_static -struct adapter_id_vals ad_id_vals[] = { - /* mV low, mV high */ - {INT_MIN, INT_MAX}, /* anything = ADAPTER_UNKNOWN */ - {434, 554}, /* ADAPTER_45W */ - {561, 717}, /* ADAPTER_65W */ - {725, 925} /* ADAPTER_90W */ -}; -BUILD_ASSERT(ARRAY_SIZE(ad_id_vals) == NUM_ADAPTER_TYPES); - -test_export_static -int ad_input_current[][NUM_AC_TURBO_STATES] = { - /* - * Current limits in mA for each adapter, for turbo off and turbo on. - * Values are in hex to avoid roundoff, because the BQ24738 Input - * Current Register masks off bits 6-0. - * - * Note that this is very specific to the combinations of adapters and - * BQ24738 charger chip on Falco. - */ - - {0x0a00, 0x0a00}, /* ADAPTER_UNKNOWN ~ 2.5 A */ - {0x0600, 0x0800}, /* ADAPTER_45W ~ 1.5-2.0 A */ - {0x0a00, 0x0c00}, /* ADAPTER_65W ~ 2.5-3.0 A */ - {0x0f00, 0x1100} /* ADAPTER_90W ~ 3.8-4.3 A */ -}; -BUILD_ASSERT(ARRAY_SIZE(ad_input_current) == NUM_ADAPTER_TYPES); - -test_export_static -struct adapter_limits ad_limits[][NUM_AC_TURBO_STATES][NUM_AC_THRESHOLDS] = { - /* ADAPTER_UNKNOWN - treat as 65W, no turbo */ - { - /* Turbo off */ - { - { 3080, 2730, 16, 80, }, - { 3280, 2930, 1, 80, }, - }, - /* Turbo on - unused, except for testing */ - { - { 3080, 2730, 16, 80, }, - { 3280, 2930, 1, 80, }, - } - }, - /* ADAPTER_45W */ - { - /* Turbo off */ - { - { 2050, 1700, 16, 80, }, - { 2260, 1910, 1, 80, }, - }, - /* Turbo on */ - { - { 2310, 1960, 16, 80, }, - { 2560, 2210, 1, 80, }, - } - }, - /* ADAPTER_65W */ - { - /* Turbo off */ - { - { 3080, 2730, 16, 80, }, - { 3280, 2930, 1, 80, }, - }, - /* Turbo on */ - { - { 3330, 2980, 16, 80, }, - { 3590, 3240, 1, 80, }, - } - }, - /* ADAPTER_90W */ - { - /* Turbo off */ - { - { 4360, 4010, 16, 80, }, - { 4560, 4210, 1, 80, }, - }, - /* Turbo on */ - { - { 4620, 4270, 16, 80, }, - { 4870, 4520, 1, 80, }, - } - } -}; -BUILD_ASSERT(ARRAY_SIZE(ad_limits) == NUM_ADAPTER_TYPES); - -/* The battery current limits are independent of Turbo or adapter rating. - * hi_val and lo_val are DISCHARGE current in mA. - */ -test_export_static -struct adapter_limits batt_limits[] = { - { 7500, 7000, 16, 50, }, - { 8000, 7500, 1, 50, }, -}; -BUILD_ASSERT(ARRAY_SIZE(batt_limits) == NUM_BATT_THRESHOLDS); - -static int last_mv; -static enum adapter_type identify_adapter(void) -{ - int i; - last_mv = adc_read_channel(ADC_AC_ADAPTER_ID_VOLTAGE); - - /* ADAPTER_UNKNOWN matches everything, so search backwards */ - for (i = NUM_ADAPTER_TYPES - 1; i >= 0; i--) - if (last_mv >= ad_id_vals[i].lo && last_mv <= ad_id_vals[i].hi) - return i; - - return ADAPTER_UNKNOWN; /* should never get here */ -} - -test_export_static enum adapter_type ac_adapter; -static void ac_change_callback(void) -{ - if (extpower_is_present()) { - ac_adapter = identify_adapter(); - CPRINTS("AC Adapter is %s (%dmv)", - ad_name[ac_adapter], last_mv); - } else { - ac_adapter = ADAPTER_UNKNOWN; - CPRINTS("AC Adapter is not present"); - /* Charger unavailable. Clear local flags */ - } -} -DECLARE_HOOK(HOOK_AC_CHANGE, ac_change_callback, HOOK_PRIO_DEFAULT); - -test_export_static int ac_turbo = -1; -static void set_turbo(int on) -{ - int tmp, r; - - if (ac_turbo != on) - CPRINTS("turbo mode => %d", on); - - /* Set/clear turbo mode in charger */ - r = charger_get_option(&tmp); - if (r != EC_SUCCESS) - goto bad; - - if (on) - tmp |= OPTION_BOOST_MODE_ENABLE; - else - tmp &= ~OPTION_BOOST_MODE_ENABLE; - - r = charger_set_option(tmp); - if (r != EC_SUCCESS) - goto bad; - - /* Set allowed Io based on adapter. The charger will sometimes change - * this setting all by itself due to inrush current limiting, so we - * can't assume it stays where we put it. */ - r = charger_set_input_current(ad_input_current[ac_adapter][on]); - if (r != EC_SUCCESS) - goto bad; - - ac_turbo = on; - return; -bad: - CPRINTS("ERROR: can't talk to charger: %d", r); -} - - -/* We need to OR all the possible reasons to throttle in order to decide - * whether it should happen or not. Use one bit per reason. - */ -#define BATT_REASON_OFFSET 0 -#define AC_REASON_OFFSET NUM_BATT_THRESHOLDS -BUILD_ASSERT(NUM_BATT_THRESHOLDS + NUM_AC_THRESHOLDS < 32); - -test_export_static uint32_t ap_is_throttled; -static void set_throttle(int on, int whosays) -{ - if (on) - ap_is_throttled |= (1 << whosays); - else - ap_is_throttled &= ~(1 << whosays); - - throttle_ap(ap_is_throttled ? THROTTLE_ON : THROTTLE_OFF, - THROTTLE_SOFT, THROTTLE_SRC_POWER); -} - -test_export_static -void check_threshold(int current, struct adapter_limits *lim, int whoami) -{ - if (lim->triggered) { - /* watching for current to drop */ - if (current < lim->lo_val) { - if (++lim->count >= lim->lo_cnt) { - set_throttle(0, whoami); - lim->count = 0; - lim->triggered = 0; - } - } else { - lim->count = 0; - } - } else { - /* watching for current to rise */ - if (current > lim->hi_val) { - if (++lim->count >= lim->hi_cnt) { - set_throttle(1, whoami); - lim->count = 0; - lim->triggered = 1; - } - } else { - lim->count = 0; - } - } -} - - -test_export_static -void watch_battery_closely(struct charge_state_context *ctx) -{ - int i; - int current = ctx->curr.batt.current; - - /* NB: The values in batt_limits[] indicate DISCHARGE current (mA). - * However, the value returned from battery_current() is CHARGE - * current: postive for charging and negative for discharging. - * - * Turbo mode can discharge the battery even while connected to the - * charger. The spec says not to turn throttling off until the battery - * drain has been below the threshold for 5 seconds. That means we - * still need to check while on AC, or else just plugging the adapter - * in and out would mess up that 5-second timeout. Since the threshold - * logic uses signed numbers to compare the limits, everything Just - * Works. - */ - - /* Check limits against DISCHARGE current, not CHARGE current! */ - for (i = 0; i < NUM_BATT_THRESHOLDS; i++) - check_threshold(-current, &batt_limits[i], /* invert sign! */ - i + BATT_REASON_OFFSET); -} - -void watch_adapter_closely(struct charge_state_context *ctx) -{ - int current, i; - - /* We always watch the battery current drain, even when on AC. */ - watch_battery_closely(ctx); - - /* We can only talk to the charger if we're on AC. If there are no - * errors and we recognize the adapter, enable Turbo at 15% charge, - * disable it at 10% to provide hysteresis. */ - if (extpower_is_present()) { - if (ctx->curr.error || - ctx->curr.batt.state_of_charge < 10 || - ac_adapter == ADAPTER_UNKNOWN) { - set_turbo(0); - } else if (ctx->curr.batt.state_of_charge > 15) { - set_turbo(1); - } - } else { - /* If we're not on AC, we can't monitor the current, - * so watch for its return. - */ - ac_turbo = -1; - } - - /* If the AP is off, we won't need to throttle it. */ - if (chipset_in_state(CHIPSET_STATE_ANY_OFF | - CHIPSET_STATE_SUSPEND)) - return; - - /* Check all the thresholds. */ - current = adc_read_channel(ADC_CH_CHARGER_CURRENT); - for (i = 0; i < NUM_AC_THRESHOLDS; i++) - check_threshold(current, &ad_limits[ac_adapter][ac_turbo][i], - i + AC_REASON_OFFSET); -} - -static int command_adapter(int argc, char **argv) -{ - enum adapter_type v = identify_adapter(); - ccprintf("Adapter %s (%dmv), turbo %d, ap_is_throttled 0x%08x\n", - ad_name[v], last_mv, ac_turbo, ap_is_throttled); - return EC_SUCCESS; -} -DECLARE_CONSOLE_COMMAND(adapter, command_adapter, - NULL, - "Display AC adapter information", - NULL); diff --git a/common/extpower_snow.c b/common/extpower_snow.c deleted file mode 100644 index 3713056c9a..0000000000 --- a/common/extpower_snow.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -/* External power detection for snow */ - -#include "common.h" -#include "extpower.h" -#include "gpio.h" -#include "pmu_tpschrome.h" -#include "task.h" - -int extpower_is_present(void) -{ - /* - * Detect AC state using combined gpio pins - * - * On snow, there's no single gpio signal to detect AC. - * GPIO_AC_PWRBTN_L provides AC on and PWRBTN release. - * GPIO_KB_PWR_ON_L provides PWRBTN release. - * - * When AC plugged, both GPIOs will be high. - * - * One drawback of this detection is, when press-and-hold power - * button. AC state will be unknown. This function will fallback - * to PMU VACG. - */ - - int ac_good = 1, battery_good; - - if (gpio_get_level(GPIO_KB_PWR_ON_L)) - return gpio_get_level(GPIO_AC_PWRBTN_L); - - /* Check PMU VACG */ - if (!in_interrupt_context()) - pmu_get_power_source(&ac_good, &battery_good); - - /* - * Charging task only interacts with AP in discharging state. So - * return 1 when AC status can not be detected by GPIO or VACG. - */ - return ac_good; -} - -/* TODO(crosbug.com/p/23810): host events and hook notifications */ diff --git a/common/extpower_spring.c b/common/extpower_spring.c deleted file mode 100644 index 63735deab5..0000000000 --- a/common/extpower_spring.c +++ /dev/null @@ -1,970 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -/* USB charging control for spring board */ - -#include "adc.h" -#include "adc_chip.h" -#include "battery.h" -#include "battery_smart.h" -#include "chipset.h" -#include "clock.h" -#include "console.h" -#include "driver/tsu6721.h" -#include "extpower.h" -#include "gpio.h" -#include "hooks.h" -#include "host_command.h" -#include "keyboard_mkbp.h" -#include "pmu_tpschrome.h" -#include "pwm.h" -/* - * TODO(crosbug.com/p/23745): Refactor low-level STM32 ADC code out of this - * module. Files in common should not use chip registers directly. - */ -#include "registers.h" -#include "system.h" -#include "task.h" -#include "timer.h" -#include "util.h" - -#define PWM_FREQUENCY 32000 /* Hz */ - -/* Console output macros */ -#define CPUTS(outstr) cputs(CC_USBCHARGE, outstr) -#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args) -#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args) - -/* ILIM pin control */ -enum ilim_config { - ILIM_CONFIG_MANUAL_OFF, - ILIM_CONFIG_MANUAL_ON, - ILIM_CONFIG_PWM, -}; - -/* Devices that need VBUS power */ -#define POWERED_5000_DEVICE_TYPE (TSU6721_TYPE_OTG) -#define POWERED_3300_DEVICE_TYPE (TSU6721_TYPE_JIG_UART_ON) - -/* Toad cable */ -#define TOAD_DEVICE_TYPE (TSU6721_TYPE_UART | TSU6721_TYPE_AUDIO3) - -/* Voltage threshold of D+ for video */ -#define VIDEO_ID_THRESHOLD 1300 - -/* - * Mapping from PWM duty to current: - * Current = A + B * PWM_Duty - */ -#define PWM_MAPPING_A 2958 -#define PWM_MAPPING_B (-29) - -/* Map current in milli-amps to PWM duty cycle percentage */ -#define MA_TO_PWM(curr) (((curr) - PWM_MAPPING_A) / PWM_MAPPING_B) - -/* PWM controlled current limit */ -#define I_LIMIT_100MA MA_TO_PWM(100) -#define I_LIMIT_500MA MA_TO_PWM(500) -#define I_LIMIT_1000MA MA_TO_PWM(1000) -#define I_LIMIT_1500MA MA_TO_PWM(1500) -#define I_LIMIT_2000MA MA_TO_PWM(2000) -#define I_LIMIT_2400MA MA_TO_PWM(2400) -#define I_LIMIT_3000MA 0 - -/* PWM control loop parameters */ -#define PWM_CTRL_MAX_DUTY I_LIMIT_100MA /* Minimum current */ -#define PWM_CTRL_BEGIN_OFFSET 90 -#define PWM_CTRL_OC_MARGIN 15 -#define PWM_CTRL_OC_DETECT_TIME (1200 * MSEC) -#define PWM_CTRL_OC_BACK_OFF 3 -#define PWM_CTRL_OC_RETRY 2 -#define PWM_CTRL_STEP_DOWN 3 -#define PWM_CTRL_STEP_UP 5 -#define PWM_CTRL_VBUS_HARD_LOW 4400 -#define PWM_CTRL_VBUS_LOW 4500 -#define PWM_CTRL_VBUS_HIGH 4700 /* Must be higher than 4.5V */ -#define PWM_CTRL_VBUS_HIGH_500MA 4550 - -/* Delay before notifying kernel of device type change */ -#define BATTERY_KEY_DELAY (PWM_CTRL_OC_DETECT_TIME + 400 * MSEC) - -/* Delay for signals to settle */ -#define DELAY_POWER_MS 20 -#define DELAY_USB_DP_DN_MS 20 -#define DELAY_ID_MUX_MS 30 -#define CABLE_DET_POLL_MS 100 -#define CABLE_DET_POLL_COUNT 6 - -/* Current sense resistor values */ -#define R_INPUT_MOHM 20 /* mOhm */ -#define R_BATTERY_MOHM 33 /* mOhm */ - -static int current_dev_type = TSU6721_TYPE_NONE; -static int nominal_pwm_duty; -static int current_pwm_duty; -static int user_pwm_duty = -1; - -static int pending_tsu6721_reset; -static int pending_adc_watchdog_disable; -static int pending_dev_type_update; -static int pending_video_power_off; -static int restore_id_mux; - -static enum { - ADC_WATCH_NONE, - ADC_WATCH_TOAD, - ADC_WATCH_USB, -} current_watchdog = ADC_WATCH_NONE; - -struct { - int type; - const char *name; -} const known_dev_types[] = { - {TSU6721_TYPE_OTG, "OTG"}, - {TSU6721_TYPE_USB_HOST, "USB"}, - {TSU6721_TYPE_CHG12, "Type-1/2-Chg"}, - {TSU6721_TYPE_NON_STD_CHG, "Non-Std-Chg"}, - {TSU6721_TYPE_DCP, "DCP"}, - {TSU6721_TYPE_CDP, "CDP"}, - {TSU6721_TYPE_U200_CHG, "U200-Chg"}, - {TSU6721_TYPE_APPLE_CHG, "Apple-Chg"}, - {TSU6721_TYPE_JIG_UART_ON, "Video"}, - {TSU6721_TYPE_AUDIO3, "Audio-3"}, - {TSU6721_TYPE_UART, "UART"}, - {TSU6721_TYPE_VBUS_DEBOUNCED, "Power"} }; - -/* - * Last time we see a power source removed. Also records the power source - * type and PWM duty cycle at that moment. - * Index: 0 = Unknown power source. - * 1 = Recognized power source. - */ -static timestamp_t power_removed_time[2]; -static uint32_t power_removed_type[2]; -static int power_removed_pwm_duty[2]; -static int oc_detect_retry[2] = {PWM_CTRL_OC_RETRY, PWM_CTRL_OC_RETRY}; - -/* PWM duty cycle limit based on over current event */ -static int over_current_pwm_duty; - -static enum ilim_config current_ilim_config = ILIM_CONFIG_MANUAL_OFF; - -static const int apple_charger_type[4] = {I_LIMIT_500MA, - I_LIMIT_1000MA, - I_LIMIT_2000MA, - I_LIMIT_2400MA}; - -static int video_power_enabled; - -#define NON_STD_CHARGER_REDETECT_DELAY (600 * MSEC) -static enum { - NO_REDETECT, - REDETECT_SCHEDULED, - REDETECTED, -} charger_need_redetect = NO_REDETECT; -static timestamp_t charger_redetection_time; - -/** - * Directly read discharge current in mA; negative = charging. - */ -static int battery_current(int *current) -{ - int rv, d; - - rv = sb_read(SB_CURRENT, &d); - if (rv) { - *current = 0; - return rv; - } - - *current = (int16_t)d; - return EC_SUCCESS; -} - -static int get_video_power(void) -{ - return video_power_enabled; -} - -static void set_video_power(int enabled) -{ - int power_good; - - pmu_enable_fet(FET_VIDEO, enabled, enabled ? &power_good : NULL); - if (enabled && !power_good) - pmu_enable_fet(FET_VIDEO, 0, NULL); - video_power_enabled = enabled; -} - -static void ilim_use_gpio(void) -{ - pwm_enable(PWM_CH_ILIM, 0); - gpio_set_flags(GPIO_ILIM, GPIO_OUTPUT); -} - -/** - * Set ILIM pin control type. - */ -static void ilim_config(enum ilim_config config) -{ - if (config == current_ilim_config) - return; - current_ilim_config = config; - - switch (config) { - case ILIM_CONFIG_MANUAL_OFF: - case ILIM_CONFIG_MANUAL_ON: - ilim_use_gpio(); - gpio_set_level(GPIO_ILIM, - config == ILIM_CONFIG_MANUAL_ON ? 1 : 0); - break; - case ILIM_CONFIG_PWM: - pwm_enable(PWM_CH_ILIM, 1); - break; - default: - break; - } -} - -/** - * Return Apple charger current limit. - */ -static int apple_charger_current(void) -{ - int vp, vn; - int type = 0; - int data[ADC_CH_COUNT]; - - tsu6721_disable_interrupts(); - tsu6721_mux(TSU6721_MUX_USB); - /* Wait for signal to stablize */ - msleep(DELAY_USB_DP_DN_MS); - adc_read_all_channels(data); - vp = data[ADC_CH_USB_DP_SNS]; - vn = data[ADC_CH_USB_DN_SNS]; - tsu6721_mux(TSU6721_MUX_AUTO); - tsu6721_enable_interrupts(); - if (vp > 1215) - type |= 0x2; - if (vn > 1215) - type |= 0x1; - - return apple_charger_type[type]; -} - -static int hard_current_limit(int limit) -{ - /* - * The PWM duty cycle goes lower than the nominal - * cycle for PWM_CTRL_OC_MARGIN. Therefore, increase duty cycle by - * PWM_CTRL_OC_MARGIN avoids going over the hard limit. - * (Note that lower PWM cycle translates to higher current) - */ - return MIN(limit + PWM_CTRL_OC_MARGIN, 100); -} - -static int video_dev_type(int device_type) -{ - return (device_type & ~TSU6721_TYPE_USB_HOST) | - TSU6721_TYPE_JIG_UART_ON; -} - -static int usb_video_id_present(void) -{ - return adc_read_channel(ADC_CH_USB_DP_SNS) > VIDEO_ID_THRESHOLD; -} - -static int usb_poll_video_id(void) -{ - int i; - for (i = 0; i < CABLE_DET_POLL_COUNT; ++i) { - msleep(CABLE_DET_POLL_MS); - if (usb_video_id_present()) - return 1; - } - return 0; -} - -static int probe_video(int device_type) -{ - tsu6721_disable_interrupts(); - gpio_set_level(GPIO_ID_MUX, 1); - msleep(DELAY_ID_MUX_MS); - - if (usb_poll_video_id()) { - /* Not USB host but video */ - device_type = video_dev_type(device_type); - return device_type; - } else { - if (adc_read_channel(ADC_CH_USB_VBUS_SNS) > 3500) { - /* - * Either USB host or video dongle. - * Leave ID_MUX high so we see the change on - * DP_SNS if any. - * - * ADC watchdog is responsible for sensing a - * detach event and switch back ID_MUX. - */ - return device_type; - } else { - /* Unhandled unpowered video dongle. Ignore it. */ - gpio_set_level(GPIO_ID_MUX, 0); - msleep(DELAY_ID_MUX_MS); - tsu6721_enable_interrupts(); - return TSU6721_TYPE_NONE; - } - } -} - -/** - * Set PWM duty cycle. - */ -static void set_pwm_duty_cycle(int percent) -{ - if (current_ilim_config != ILIM_CONFIG_PWM) - ilim_config(ILIM_CONFIG_PWM); - if (percent < 0) - percent = 0; - if (percent > 100) - percent = 100; - pwm_set_duty(PWM_CH_ILIM, percent); - current_pwm_duty = percent; -} - -/** - * Returns next lower PWM duty cycle, or -1 for unchanged duty cycle. - */ -static int pwm_get_next_lower(void) -{ - if (current_pwm_duty > nominal_pwm_duty - - PWM_CTRL_OC_MARGIN && - current_pwm_duty > over_current_pwm_duty && - current_pwm_duty > 0) - return MAX(current_pwm_duty - PWM_CTRL_STEP_DOWN, 0); - return -1; -} - -static int pwm_check_vbus_low(int vbus, int battery_current) -{ - if (battery_current >= 0) - return vbus < PWM_CTRL_VBUS_LOW && current_pwm_duty < 100; - else - return vbus < PWM_CTRL_VBUS_HARD_LOW && current_pwm_duty < 100; -} - -static int pwm_check_vbus_high(int vbus) -{ - if (vbus > PWM_CTRL_VBUS_HIGH) - return 1; - if (vbus > PWM_CTRL_VBUS_HIGH_500MA && current_pwm_duty > I_LIMIT_500MA) - return 1; - return 0; -} - -static void pwm_nominal_duty_cycle(int percent) -{ - int new_percent = percent; - - new_percent += PWM_CTRL_BEGIN_OFFSET; - new_percent = MIN(new_percent, PWM_CTRL_MAX_DUTY); - - set_pwm_duty_cycle(new_percent); - nominal_pwm_duty = percent; -} - -static void adc_watch_vbus(int high, int low) -{ - adc_enable_watchdog(STM32_AIN(5), high, low); - task_clear_pending_irq(STM32_IRQ_ADC_1); - task_enable_irq(STM32_IRQ_ADC_1); -} - -static void adc_watch_toad(void) -{ - /* Watch VBUS and interrupt if voltage goes under 3V. */ - adc_watch_vbus(4095, 1800); - current_watchdog = ADC_WATCH_TOAD; -} - -static void adc_watch_usb(void) -{ - /* Watch VBUS and interrupt if voltage goes under 3V. */ - adc_watch_vbus(4095, 1800); - current_watchdog = ADC_WATCH_USB; -} - -static int usb_has_power_input(int dev_type) -{ - if (dev_type & TSU6721_TYPE_JIG_UART_ON) - return 1; - return (dev_type & TSU6721_TYPE_VBUS_DEBOUNCED) && - !(dev_type & POWERED_5000_DEVICE_TYPE); -} - -static int usb_need_boost(int dev_type) -{ - if (dev_type & POWERED_5000_DEVICE_TYPE) - return 0; - if (chipset_in_state(CHIPSET_STATE_ON | CHIPSET_STATE_SUSPEND)) - return 1; - return (dev_type != TSU6721_TYPE_NONE); -} - -static void usb_boost_power_hook(int power_on) -{ - if (current_dev_type == TSU6721_TYPE_NONE) - gpio_set_level(GPIO_BOOST_EN, power_on); - else if (current_dev_type & TSU6721_TYPE_JIG_UART_ON) - set_video_power(power_on); -} - -static int usb_charger_removed(int dev_type) -{ - if (!(current_dev_type & TSU6721_TYPE_VBUS_DEBOUNCED)) - return 0; - - /* Charger is removed */ - if (dev_type == TSU6721_TYPE_NONE) - return 1; - - /* - * Device type changed from known type to unknown type. Assuming - * it went away and came back. - */ - if ((current_dev_type != TSU6721_TYPE_VBUS_DEBOUNCED) && - (dev_type == TSU6721_TYPE_VBUS_DEBOUNCED)) - return 1; - - return 0; -} - -/** - * Detect over-current events. - * - * When a power source is removed, record time, power source type, and PWM duty - * cycle. Then when we see a power source, compare type and calculate time - * difference to determine if we have just encountered an over current event. - */ -static void usb_detect_overcurrent(int dev_type) -{ - if (usb_charger_removed(dev_type)) { - int idx = !(current_dev_type == TSU6721_TYPE_VBUS_DEBOUNCED); - power_removed_time[idx] = get_time(); - power_removed_type[idx] = current_dev_type; - power_removed_pwm_duty[idx] = current_pwm_duty; - } else if (dev_type & TSU6721_TYPE_VBUS_DEBOUNCED) { - int idx = !(dev_type == TSU6721_TYPE_VBUS_DEBOUNCED); - timestamp_t now = get_time(); - now.val -= power_removed_time[idx].val; - if (now.val >= PWM_CTRL_OC_DETECT_TIME) { - oc_detect_retry[idx] = PWM_CTRL_OC_RETRY; - return; - } - if (power_removed_type[idx] == dev_type) { - if (oc_detect_retry[idx] > 0) { - CPRINTS("USB overcurrent: Retry (%d)", - oc_detect_retry[idx]); - oc_detect_retry[idx]--; - return; - } - over_current_pwm_duty = power_removed_pwm_duty[idx] + - PWM_CTRL_OC_BACK_OFF; - CPRINTS("USB overcurrent: Limited to %d%%", - over_current_pwm_duty); - } - } -} - -/** - * Supply 5V VBUS if needed. - * - * If we toggle power output, wait for a moment, and then update device - * type. To avoid race condition, check if power requirement changes during - * this time. - */ -static int usb_manage_boost(int dev_type) -{ - int need_boost; - int retry_limit = 3; - - do { - if (retry_limit-- <= 0) - break; - - need_boost = usb_need_boost(dev_type); - if (need_boost != gpio_get_level(GPIO_BOOST_EN)) { - gpio_set_level(GPIO_BOOST_EN, need_boost); - msleep(DELAY_POWER_MS); - dev_type = tsu6721_get_device_type(); - if (gpio_get_level(GPIO_ID_MUX)) - dev_type = video_dev_type(dev_type); - } - } while (need_boost == !usb_need_boost(dev_type)); - - return dev_type; -} - -/** - * Update ILIM current limit according to device type. - */ -static void usb_update_ilim(int dev_type) -{ - if (usb_has_power_input(dev_type)) { - /* Limit USB port current. 500mA for not listed types. */ - int current_limit = I_LIMIT_500MA; - if (dev_type & TSU6721_TYPE_CHG12) - current_limit = I_LIMIT_3000MA; - else if (dev_type & TSU6721_TYPE_APPLE_CHG) - current_limit = apple_charger_current(); - else if (dev_type & TSU6721_TYPE_CDP) - current_limit = I_LIMIT_1500MA; - else if (dev_type & TSU6721_TYPE_DCP) - current_limit = hard_current_limit(I_LIMIT_1500MA); - else if (dev_type & TSU6721_TYPE_JIG_UART_ON) - current_limit = hard_current_limit(I_LIMIT_2000MA); - else if (dev_type & TOAD_DEVICE_TYPE) - current_limit = hard_current_limit(I_LIMIT_500MA); - else if (dev_type == TSU6721_TYPE_VBUS_DEBOUNCED) - current_limit = hard_current_limit(I_LIMIT_100MA); - - pwm_nominal_duty_cycle(current_limit); - } else { - ilim_config(ILIM_CONFIG_MANUAL_ON); - } -} - -static void usb_log_dev_type(int dev_type) -{ - int i = sizeof(known_dev_types) / sizeof(known_dev_types[0]); - - CPRINTF("[%T USB: 0x%06x", dev_type); - for (--i; i >= 0; --i) - if (dev_type & known_dev_types[i].type) - CPRINTF(" %s", known_dev_types[i].name); - CPRINTF("]\n"); -} - -static void send_battery_key_deferred(void) -{ - keyboard_send_battery_key(); -} -DECLARE_DEFERRED(send_battery_key_deferred); - -static void notify_dev_type_change(int dev_type) -{ - usb_log_dev_type(dev_type); - current_dev_type = dev_type; - hook_call_deferred(send_battery_key_deferred, BATTERY_KEY_DELAY); -} - -static void usb_device_change(int dev_type) -{ - - if (current_dev_type == dev_type) - return; - - over_current_pwm_duty = 0; - - /* - * Video output is recognized incorrectly as USB host. When we see - * USB host, probe for video output. - */ - if (dev_type & TSU6721_TYPE_USB_HOST) - dev_type = probe_video(dev_type); - - usb_detect_overcurrent(dev_type); - - dev_type = usb_manage_boost(dev_type); - - /* Supply 3.3V VBUS if needed. */ - if (dev_type & POWERED_3300_DEVICE_TYPE) - set_video_power(1); - - usb_update_ilim(dev_type); - - if ((dev_type & TOAD_DEVICE_TYPE) && - (dev_type & TSU6721_TYPE_VBUS_DEBOUNCED)) - adc_watch_toad(); - else if (dev_type & TSU6721_TYPE_USB_HOST) - adc_watch_usb(); - - if (dev_type != current_dev_type) { - if ((dev_type & TSU6721_TYPE_NON_STD_CHG || - dev_type == TSU6721_TYPE_VBUS_DEBOUNCED) && - charger_need_redetect == NO_REDETECT) { - /* Schedule redetection */ - charger_need_redetect = REDETECT_SCHEDULED; - charger_redetection_time = get_time(); - charger_redetection_time.val += - NON_STD_CHARGER_REDETECT_DELAY; - } else if (dev_type != TSU6721_TYPE_VBUS_DEBOUNCED && - !(dev_type & TSU6721_TYPE_NON_STD_CHG)) { - /* Not non-std charger. Disarm redetection timer. */ - charger_need_redetect = NO_REDETECT; - } - notify_dev_type_change(dev_type); - } - - if (dev_type) - disable_sleep(SLEEP_MASK_USB_PWR); - else - enable_sleep(SLEEP_MASK_USB_PWR); -} - -/*****************************************************************************/ -/* External API */ - -/* - * TODO(crosbug.com/p/23741): Init here until we can do with HOOK_INIT. Just - * need to set prio so we init before the charger task does. - */ -void extpower_charge_init(void) -{ - set_pwm_duty_cycle(I_LIMIT_500MA); - - /* - * TODO(crosbug.com/p/23742): For some reason the TSU6721 comes up very - * slowly. Wait for a while before accessing it. This delay seems to - * be long enough. Once we understand the slow start, it may be - * possible to remove this delay. - */ - msleep(500); - - tsu6721_reset(); - gpio_enable_interrupt(GPIO_USB_CHG_INT); - - /* TODO(crosbug.com/p/23742): Need delay after reset as well */ - msleep(100); - - extpower_charge_update(1); -} - -void extpower_charge_update(int force_update) -{ - int int_val = 0; - - if (restore_id_mux) { - gpio_set_level(GPIO_ID_MUX, 0); - msleep(DELAY_ID_MUX_MS); - restore_id_mux = 0; - } - - if (pending_adc_watchdog_disable) { - current_watchdog = ADC_WATCH_NONE; - adc_disable_watchdog(); - pending_adc_watchdog_disable = 0; - } - - if (pending_video_power_off) { - set_video_power(0); - pending_video_power_off = 0; - } - - if (pending_tsu6721_reset) { - tsu6721_reset(); - force_update = 1; - pending_tsu6721_reset = 0; - } - - if (pending_dev_type_update) { - force_update = 1; - pending_dev_type_update = 0; - } - - /* - * Check device type except when: - * 1. Current device type is non-standard charger or undetermined - * charger type. This is handled by charger re-detection. - * 2. ID_MUX=1. This is handled by ADC watchdog. - */ - if (current_dev_type != TSU6721_TYPE_VBUS_DEBOUNCED && - !(current_dev_type & TSU6721_TYPE_NON_STD_CHG) && - gpio_get_level(GPIO_ID_MUX) == 0) - force_update |= (tsu6721_get_device_type() != current_dev_type); - - if (!force_update) - int_val = tsu6721_get_interrupts(); - - if (int_val & TSU6721_INT_DETACH) - usb_device_change(TSU6721_TYPE_NONE); - else if (int_val || force_update) - usb_device_change(tsu6721_get_device_type()); -} - -int extpower_charge_needs_update(void) -{ - return tsu6721_peek_interrupts(); -} - -int extpower_is_present(void) -{ - static int last_vbus; - int vbus, vbus_good; - - if (!gpio_get_level(GPIO_BOOST_EN)) - return 0; - - /* - * UVLO is 4.1V. We consider AC bad when its voltage drops below 4.2V - * for two consecutive samples. This is to give PWM a chance to bring - * voltage up. - */ - vbus = adc_read_channel(ADC_CH_USB_VBUS_SNS); - vbus_good = (vbus >= 4200 || last_vbus >= 4200); - last_vbus = vbus; - - return vbus_good; -} - -void extpower_interrupt(enum gpio_signal signal) -{ - task_wake(TASK_ID_CHARGER); -} - -/*****************************************************************************/ -/* Hooks */ - -void adc_watchdog_interrupt(void) -{ - switch (current_watchdog) { - case ADC_WATCH_USB: - restore_id_mux = 1; - /* Fall through */ - case ADC_WATCH_TOAD: - pending_tsu6721_reset = 1; - pending_adc_watchdog_disable = 1; - task_disable_irq(STM32_IRQ_ADC_1); - task_wake(TASK_ID_CHARGER); - break; - default: - break; - } -} -DECLARE_IRQ(STM32_IRQ_ADC_1, adc_watchdog_interrupt, 2); - -static void usb_boost_pwr_on_hook(void) -{ - usb_boost_power_hook(1); -} -DECLARE_HOOK(HOOK_CHIPSET_PRE_INIT, usb_boost_pwr_on_hook, HOOK_PRIO_DEFAULT); - -static void usb_boost_pwr_off_hook(void) -{ - usb_boost_power_hook(0); -} -DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, usb_boost_pwr_off_hook, HOOK_PRIO_DEFAULT); - -static void pwm_tweak(void) -{ - int vbus, current; - int next; - - if (current_ilim_config != ILIM_CONFIG_PWM) - return; - - vbus = adc_read_channel(ADC_CH_USB_VBUS_SNS); - if (battery_current(¤t)) - current = 0; - - if (user_pwm_duty >= 0) { - if (current_pwm_duty != user_pwm_duty) - set_pwm_duty_cycle(user_pwm_duty); - return; - } - - /* - * If VBUS voltage is too low: - * - If battery is discharging, throttling more is going to draw - * more current from the battery, so do nothing unless VBUS is - * about to be lower than AC good threshold. - * - Otherwise, throttle input current to raise VBUS voltage. - * If VBUS voltage is high enough, allow more current until we hit - * current limit target. - */ - if (pwm_check_vbus_low(vbus, current)) { - set_pwm_duty_cycle(current_pwm_duty + PWM_CTRL_STEP_UP); - CPRINTS("PWM duty up %d%%", current_pwm_duty); - } else if (pwm_check_vbus_high(vbus)) { - next = pwm_get_next_lower(); - if (next >= 0) { - set_pwm_duty_cycle(next); - CPRINTS("PWM duty down %d%%", current_pwm_duty); - } - } -} -DECLARE_HOOK(HOOK_SECOND, pwm_tweak, HOOK_PRIO_DEFAULT); - -static void usb_detach_video(void) -{ - if (!(current_dev_type & TSU6721_TYPE_JIG_UART_ON)) - return; - pending_video_power_off = 1; - restore_id_mux = 1; - pending_tsu6721_reset = 1; - task_wake(TASK_ID_CHARGER); -} -DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, usb_detach_video, HOOK_PRIO_DEFAULT); -DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, usb_detach_video, HOOK_PRIO_DEFAULT); - -static void usb_monitor_detach(void) -{ - int vbus; - - if (!(current_dev_type & TSU6721_TYPE_JIG_UART_ON)) - return; - - if (!usb_video_id_present()) { - usb_detach_video(); - return; - } - - /* Check if there is external power */ - vbus = adc_read_channel(ADC_CH_USB_VBUS_SNS); - if (get_video_power() && vbus > 4000) { - set_video_power(0); - notify_dev_type_change(current_dev_type | - TSU6721_TYPE_VBUS_DEBOUNCED); - } else if (!get_video_power() && vbus <= 4000) { - set_pwm_duty_cycle(100); - set_video_power(1); - notify_dev_type_change(current_dev_type & - ~TSU6721_TYPE_VBUS_DEBOUNCED); - } -} -DECLARE_HOOK(HOOK_SECOND, usb_monitor_detach, HOOK_PRIO_DEFAULT); - -static void usb_monitor_cable_det(void) -{ - if (!(current_dev_type & TSU6721_TYPE_USB_HOST)) - return; - - if (usb_video_id_present()) - adc_watchdog_interrupt(); -} -DECLARE_HOOK(HOOK_SECOND, usb_monitor_cable_det, HOOK_PRIO_DEFAULT); - -static void usb_charger_redetect(void) -{ - if (charger_need_redetect != REDETECT_SCHEDULED) - return; - - if (timestamp_expired(charger_redetection_time, NULL)) { - CPRINTS("USB Redetecting"); - /* - * TSU6721 doesn't update device type if power or ID pin - * is present. Therefore, if the device type is the same, - * we need to reset TSU6721 to force a redetection. - */ - if (tsu6721_get_device_type() == current_dev_type) - pending_tsu6721_reset = 1; - else - pending_dev_type_update = 1; - if (gpio_get_level(GPIO_ID_MUX)) - restore_id_mux = 1; - charger_need_redetect = REDETECTED; - task_wake(TASK_ID_CHARGER); - } -} -DECLARE_HOOK(HOOK_SECOND, usb_charger_redetect, HOOK_PRIO_DEFAULT); - -/*****************************************************************************/ -/* Console commands for debugging */ - -#ifdef CONFIG_CMD_ILIM -static int command_ilim(int argc, char **argv) -{ - char *e; - int v; - - if (argc >= 2) { - if (parse_bool(argv[1], &v)) { - ilim_config(v ? ILIM_CONFIG_MANUAL_ON : - ILIM_CONFIG_MANUAL_OFF); - } else { - v = strtoi(argv[1], &e, 0); - if (*e) - return EC_ERROR_PARAM1; - set_pwm_duty_cycle(v); - } - } - - if (current_ilim_config == ILIM_CONFIG_MANUAL_ON) - ccprintf("ILIM is GPIO high\n"); - else if (current_ilim_config == ILIM_CONFIG_MANUAL_OFF) - ccprintf("ILIM is GPIO low\n"); - else - ccprintf("ILIM is PWM duty cycle %d%%\n", - pwm_get_duty(PWM_CH_ILIM)); - - return EC_SUCCESS; -} -DECLARE_CONSOLE_COMMAND(ilim, command_ilim, - "[percent | on | off]", - "Set or show ILIM duty cycle/GPIO value", - NULL); -#endif /* CONFIG_CMD_ILIM */ - -#ifdef CONFIG_CMD_BATDEBUG -static int command_batdebug(int argc, char **argv) -{ - struct batt_params batt; - - battery_get_params(&batt); - - ccprintf("VBUS = %d mV\n", adc_read_channel(ADC_CH_USB_VBUS_SNS)); - ccprintf("VAC = %d mV\n", pmu_adc_read(ADC_VAC, ADC_FLAG_KEEP_ON) - * 17000 / 1024); - ccprintf("IAC = %d mA\n", pmu_adc_read(ADC_IAC, ADC_FLAG_KEEP_ON) - * (1000 / R_INPUT_MOHM) * 33 / 1024); - ccprintf("VBAT = %d mV\n", pmu_adc_read(ADC_VBAT, ADC_FLAG_KEEP_ON) - * 17000 / 1024); - ccprintf("IBAT = %d mA\n", pmu_adc_read(ADC_IBAT, 0) - * (1000 / R_BATTERY_MOHM) * 40 / 1024); - ccprintf("PWM = %d%%\n", pwm_get_duty(PWM_CH_ILIM)); - ccprintf("Battery Current = %d mA\n", batt.current); - ccprintf("Battery Voltage= %d mV\n", batt.voltage); - return EC_SUCCESS; -} -DECLARE_CONSOLE_COMMAND(batdebug, command_batdebug, - NULL, NULL, NULL); -#endif /* CONFIG_CMD_BATDEBUG */ - -/*****************************************************************************/ -/* Host commands */ - -static int ext_power_command_current_limit(struct host_cmd_handler_args *args) -{ - const struct ec_params_ext_power_current_limit *p = args->params; - - if (system_is_locked()) - return EC_RES_ACCESS_DENIED; - - user_pwm_duty = ((int)(p->limit) - PWM_MAPPING_A) / PWM_MAPPING_B; - - return EC_SUCCESS; -} -DECLARE_HOST_COMMAND(EC_CMD_EXT_POWER_CURRENT_LIMIT, - ext_power_command_current_limit, - EC_VER_MASK(0)); - -static int power_command_info(struct host_cmd_handler_args *args) -{ - struct ec_response_power_info *r = args->response; - - r->voltage_ac = adc_read_channel(ADC_CH_USB_VBUS_SNS); - r->voltage_system = pmu_adc_read(ADC_VAC, ADC_FLAG_KEEP_ON) - * 17000 / 1024; - r->current_system = pmu_adc_read(ADC_IAC, 0) - * (1000 / R_INPUT_MOHM) * 33 / 1024; - r->usb_dev_type = current_dev_type; - - /* Approximate value by PWM duty cycle */ - r->usb_current_limit = PWM_MAPPING_A + PWM_MAPPING_B * current_pwm_duty; - - args->response_size = sizeof(*r); - - return EC_RES_SUCCESS; -} -DECLARE_HOST_COMMAND(EC_CMD_POWER_INFO, power_command_info, EC_VER_MASK(0)); diff --git a/common/host_command.c b/common/host_command.c index 451bff74f3..da73d2dbd5 100644 --- a/common/host_command.c +++ b/common/host_command.c @@ -719,10 +719,8 @@ static int host_command_get_features(struct host_cmd_handler_args *args) #ifdef CONFIG_TEMP_SENSOR | EC_FEATURE_MASK_0(EC_FEATURE_THERMAL) #endif -/* Hack to uniquely identify Samus and Falco ec */ -#if (defined CONFIG_BACKLIGHT_LID) || \ - (defined CONFIG_BATTERY_SAMUS) || \ - (defined CONFIG_EXTPOWER_FALCO) +/* Hack to uniquely identify Samus ec */ +#if (defined CONFIG_BACKLIGHT_LID) || (defined CONFIG_BATTERY_SAMUS) | EC_FEATURE_MASK_0(EC_FEATURE_BKLIGHT_SWITCH) #endif #ifdef CONFIG_WIRELESS diff --git a/common/lb_common.c b/common/lb_common.c index edd033d870..c964ab8be3 100644 --- a/common/lb_common.c +++ b/common/lb_common.c @@ -56,12 +56,6 @@ static inline uint8_t controller_read(int ctrl_num, uint8_t reg) #define MAX_GREEN 0x30 #define MAX_BLUE 0x67 #endif -#ifdef BOARD_LINK -/* Link uses seven segments, not four, but keep the same limits anyway */ -#define MAX_RED 0x5c -#define MAX_GREEN 0x30 -#define MAX_BLUE 0x67 -#endif #if defined(BOARD_SAMUS) || defined(BOARD_RYU) || defined(BOARD_RYU_P4P5) /* Samus uses completely different LEDs, so the numbers are different. The * Samus LEDs can handle much higher currents, but these constants were @@ -117,9 +111,6 @@ static const uint8_t led_to_ctrl[] = { 1, 1, 0, 0 }; #ifdef BOARD_BDS static const uint8_t led_to_isc[] = { 0x18, 0x15, 0x18, 0x15 }; #endif -#ifdef BOARD_LINK -static const uint8_t led_to_isc[] = { 0x18, 0x15, 0x18, 0x15 }; -#endif #ifdef BOARD_SAMUS static const uint8_t led_to_isc[] = { 0x15, 0x18, 0x15, 0x18 }; #endif diff --git a/common/pmu_tps65090_charger.c b/common/pmu_tps65090_charger.c index d03c9d05c5..6e56ef98ff 100644 --- a/common/pmu_tps65090_charger.c +++ b/common/pmu_tps65090_charger.c @@ -309,14 +309,6 @@ static int calc_next_state(int state) return ST_IDLE0; } -#ifdef CONFIG_EXTPOWER_SPRING - /* Re-init on charger timeout. */ - if (pmu_is_charge_timeout()) { - CPRINTS("[pmu] charging: timeout"); - return ST_IDLE0; - } -#endif - return ST_CHARGING; case ST_CHARGING_ERROR: @@ -428,18 +420,10 @@ void charger_task(void) enable_charging(0); disable_sleep(SLEEP_MASK_CHARGING); -#ifdef CONFIG_EXTPOWER_SPRING - extpower_charge_init(); -#endif - while (1) { last_waken = get_time(); pmu_clear_irq(); -#ifdef CONFIG_EXTPOWER_SPRING - extpower_charge_update(0); -#endif - #ifdef CONFIG_PMU_TPS65090_CHARGING_LED update_battery_led(); #endif @@ -525,10 +509,6 @@ void charger_task(void) } } -#ifdef CONFIG_EXTPOWER_SPRING - has_pending_event |= extpower_charge_needs_update(); -#endif - if (!has_pending_event) { task_wait_event(wait_time); disable_sleep(SLEEP_MASK_CHARGING); diff --git a/common/pmu_tps65090_powerinfo.c b/common/pmu_tps65090_powerinfo.c index e53e49a660..9eb6adca42 100644 --- a/common/pmu_tps65090_powerinfo.c +++ b/common/pmu_tps65090_powerinfo.c @@ -120,9 +120,6 @@ DECLARE_CONSOLE_COMMAND(powerinfo, command_powerinfo, * * This reuses the same EC_CMD_POWER_INFO host command as Spring, but doesn't * provide the full set of information because Pit doesn't take power over USB. - * - * Note that Spring *also* uses the TPS65090 PMU, but it can't use this common - * code because it implements the same host command differently... */ static int power_command_info(struct host_cmd_handler_args *args) { |