diff options
-rw-r--r-- | board/slippy/board.h | 25 | ||||
-rw-r--r-- | board/slippy/ec.tasklist | 2 | ||||
-rw-r--r-- | common/battery_link.c | 2 | ||||
-rw-r--r-- | common/battery_slippy.c | 52 | ||||
-rw-r--r-- | common/build.mk | 1 | ||||
-rw-r--r-- | include/battery_pack.h | 2 |
6 files changed, 76 insertions, 8 deletions
diff --git a/board/slippy/board.h b/board/slippy/board.h index 4261d6d3d0..6b87496bdf 100644 --- a/board/slippy/board.h +++ b/board/slippy/board.h @@ -3,7 +3,7 @@ * found in the LICENSE file. */ -/* Configuration for Link mainboard */ +/* Configuration for Slippy mainboard */ #ifndef __BOARD_H #define __BOARD_H @@ -15,9 +15,10 @@ #define CONFIG_TASK_PROFILING /* Optional features */ -/*HEY #define CONFIG_SMART_BATTERY */ -/*HEY #define CONFIG_BATTERY_LINK */ -/*HEY #define CONFIG_CHARGER_BQ24725 */ +#define CONFIG_SMART_BATTERY +#define CONFIG_BATTERY_SLIPPY +#define CONFIG_CHARGER +#define CONFIG_CHARGER_BQ24707A #ifdef HAS_TASK_CHIPSET #define CONFIG_CHIPSET_X86_HASWELL #endif @@ -44,7 +45,7 @@ /* I2C ports */ #define I2C_PORT_BATTERY 0 #define I2C_PORT_CHARGER 0 -#define I2C_PORT_THERMAL 2 +#define I2C_PORT_THERMAL 5 /* There are only two I2C ports used because battery and charger share a port */ #define I2C_PORTS_USED 2 @@ -138,6 +139,19 @@ enum gpio_signal { GPIO_COUNT }; +/* Charger module */ +/* Set charger input current limit + * Note - this value should depend on external power adapter, + * designed charging voltage, and the maximum power of + * a running system. + * Following value 4032 mA is the maximum input limit + * on Link's design. + */ +#define CONFIG_BQ24707A_R_SNS 10 /* 10 mOhm charge sense resistor */ +#define CONFIG_BQ24707A_R_AC 10 /* 10 mOhm input current sense resistor */ +#define CONFIG_CHARGER_INPUT_CURRENT 4032 /* mA, about half max */ + + enum adc_channel { /* EC internal die temperature in degrees K. */ ADC_CH_EC_TEMP = 0, @@ -145,6 +159,7 @@ enum adc_channel { /* HEY: Slippy MB has only one discrete thermal sensor, but it has two * values (one internal and one external). Both should be here. * HEY: There may be a BAT_TEMP sensor on the battery pack too. + * On Slippy, that's PB4/AIN10 */ /* HEY: Be prepared to read this (ICMNT). */ diff --git a/board/slippy/ec.tasklist b/board/slippy/ec.tasklist index fa89bc836b..091e8b340e 100644 --- a/board/slippy/ec.tasklist +++ b/board/slippy/ec.tasklist @@ -19,7 +19,7 @@ #define CONFIG_TASK_LIST \ TASK_ALWAYS(HOOKS, hook_task, NULL, TASK_STACK_SIZE) \ TASK_NOTEST(VBOOTHASH, vboot_hash_task, NULL, LARGER_TASK_STACK_SIZE) \ - /*HEY TASK_ALWAYS(CHARGER, charger_task, NULL, TASK_STACK_SIZE) */ \ + TASK_ALWAYS(CHARGER, charger_task, NULL, TASK_STACK_SIZE) \ TASK_NOTEST(THERMAL, thermal_task, NULL, TASK_STACK_SIZE) \ TASK_NOTEST(CHIPSET, chipset_task, NULL, TASK_STACK_SIZE) \ TASK_NOTEST(KEYPROTO, keyboard_protocol_task, NULL, TASK_STACK_SIZE) \ diff --git a/common/battery_link.c b/common/battery_link.c index b20ab45fc1..97d080d876 100644 --- a/common/battery_link.c +++ b/common/battery_link.c @@ -14,8 +14,6 @@ */ #define DESIGN_CAPACITY 8200 -#define CELSIUS_TO_DECI_KELVIN(temp_c) ((temp_c) * 10 + 2731) - enum { TEMP_RANGE_10, TEMP_RANGE_23, diff --git a/common/battery_slippy.c b/common/battery_slippy.c new file mode 100644 index 0000000000..75c9c2d4fb --- /dev/null +++ b/common/battery_slippy.c @@ -0,0 +1,52 @@ +/* Copyright (c) 2012 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_pack.h" + +/* FIXME: We need REAL values for all this stuff */ +static const struct battery_info info = { + + .voltage_max = 12600, + .voltage_normal = 11100, + .voltage_min = 6000, + + /* + * Operational temperature range + * 0 <= T_charge <= 50 deg C + * -20 <= T_discharge <= 60 deg C + */ + .temp_charge_min = CELSIUS_TO_DECI_KELVIN(0), + .temp_charge_max = CELSIUS_TO_DECI_KELVIN(50), + .temp_discharge_min = CELSIUS_TO_DECI_KELVIN(-20), + .temp_discharge_max = CELSIUS_TO_DECI_KELVIN(60), + + /* Pre-charge values. */ + .precharge_current = 256, /* mA */ +}; + +const struct battery_info *battery_get_info(void) +{ + return &info; +} + +/* FIXME: The smart battery should do the right thing - that's why it's + * called "smart". Do we really want to second-guess it? For now, let's not. */ +void battery_vendor_params(struct batt_params *batt) +{ +#if 0 + /* Limit charging voltage */ + if (batt->desired_voltage > info.voltage_max) + batt->desired_voltage = info.voltage_max; + + /* Don't charge if outside of allowable temperature range */ + if (batt->temperature >= info.temp_charge_max || + batt->temperature <= info.temp_charge_min) { + batt->desired_voltage = 0; + batt->desired_current = 0; + } +#endif +} diff --git a/common/build.mk b/common/build.mk index d4f4174d45..5981790e4c 100644 --- a/common/build.mk +++ b/common/build.mk @@ -11,6 +11,7 @@ common-y+=memory_commands.o shared_mem.o system_common.o hooks.o common-y+=gpio_common.o version.o printf.o queue.o common-$(CONFIG_BATTERY_BQ20Z453)+=battery_bq20z453.o common-$(CONFIG_BATTERY_LINK)+=battery_link.o +common-$(CONFIG_BATTERY_SLIPPY)+=battery_slippy.o common-$(CONFIG_BATTERY_SPRING)+=battery_spring.o common-$(CONFIG_CHARGER)+=charge_state.o battery_precharge.o charger_common.o common-$(CONFIG_CHARGER_BQ24725)+=charger_bq24725.o diff --git a/include/battery_pack.h b/include/battery_pack.h index 10022ddac1..620b99e374 100644 --- a/include/battery_pack.h +++ b/include/battery_pack.h @@ -7,6 +7,8 @@ #ifndef __CROS_EC_BATTERY_PACK_H #define __CROS_EC_BATTERY_PACK_H +#define CELSIUS_TO_DECI_KELVIN(temp_c) ((temp_c) * 10 + 2731) + /* Battery parameters */ struct batt_params { int temperature; /* Temperature in 0.1 K */ |