BD99955: Added support for 'psys' & 'amonbmon' console commands

Added console commands for the debugging purpose
psys - Can be used to measure the system power
amonbmon - Can be used to measure AMON/BMON voltage diff, current

BUG=chrome-os-partner:54273
BRANCH=none
TEST=Manually tested on Amenia
     psys - Ran fish task and observed psys value changes.
     amonbmon - AMON & BMON voltage & current are same as measured
                across sense resistors.

Change-Id: I6653e814d9b00efe7dae9ce1fbd7ddbc2356f8e0
Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/353043
Commit-Ready: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Tested-by: Vijay P Hiremath <vijay.p.hiremath@intel.com>
Reviewed-by: Shawn N <shawnn@chromium.org>
This commit is contained in:
Vijay Hiremath
2016-06-14 14:22:47 -07:00
committed by chrome-bot
parent 66b2f33e7d
commit dcac93af41
12 changed files with 216 additions and 18 deletions

View File

@@ -116,9 +116,12 @@ const struct adc_t adc_channels[] = {
/* Vbus sensing. Converted to mV, full ADC is equivalent to 28.16V. */
[ADC_VBUS] = {"VBUS", NPCX_ADC_CH1, 28160, ADC_READ_MAX+1, 0},
/* Adapter current output or battery discharging current */
[ADC_AMON_BMON] = {"AMON_BMON", NPCX_ADC_CH4, 55000, 6144, 0},
[ADC_AMON_BMON] = {"AMON_BMON", NPCX_ADC_CH4,
(5 << BD99955_IOUT_GAIN_SELECT) * 10000,
ADC_READ_MAX+1, 0},
/* System current consumption */
[ADC_PSYS] = {"PSYS", NPCX_ADC_CH3, 1, 1, 0},
[ADC_PSYS] = {"PSYS", NPCX_ADC_CH3, ADC_MAX_VOLT * 10,
ADC_READ_MAX+1, 3},
/* Thermistor 0 */
[ADC_THERM_SYS0] = {"THERM_SYS0", NPCX_ADC_CH0, 1, 1, 0},
/* Thermistor 1 */

View File

@@ -31,7 +31,6 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_V2
#define CONFIG_CHARGER_ADC_AMON_BMON
#define CONFIG_CHARGER_DISCHARGE_ON_AC
#define CONFIG_CHARGER_BD99955
#define CONFIG_CHARGER_ILIM_PIN_DISABLED
@@ -40,10 +39,18 @@
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 15000
#define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 1
#define CONFIG_CHARGER_NARROW_VDC
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
#define CONFIG_USB_CHARGER
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10
#define BD99955_IOUT_GAIN_SELECT \
BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_GAIN_SET_20V
#define CONFIG_CMD_CHARGER_PSYS
#define BD99955_PSYS_GAIN_SELECT \
BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_02UAW
#define CONFIG_CHIPSET_APOLLOLAKE
#define CONFIG_CMD_ACCELS
#define CONFIG_CMD_ACCEL_INFO

View File

@@ -27,7 +27,6 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_V2
#define CONFIG_CHARGER_ADC_AMON_BMON
#define CONFIG_CHARGER_DISCHARGE_ON_AC
#define CONFIG_CHARGER_ISL9237
#define CONFIG_CHARGER_ILIM_PIN_DISABLED
@@ -37,6 +36,7 @@
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_CHIPSET_SKYLAKE
#define CONFIG_CHIPSET_RESET_HOOK

View File

@@ -41,7 +41,6 @@
#define CONFIG_CHARGER_NARROW_VDC
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
#define CONFIG_CHARGER_ADC_AMON_BMON
#define CONFIG_CHARGER_DISCHARGE_ON_AC
#define CONFIG_CHARGER_V2
#define CONFIG_CHIPSET_MEDIATEK
@@ -110,6 +109,7 @@
#define CONFIG_USB_SWITCH_PI3USB9281_CHIP_COUNT 1
/* Optional features */
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_CMD_HOSTCMD
#define CONFIG_CMD_I2C_PROTECT
#define CONFIG_CMD_PD_CONTROL

View File

@@ -31,7 +31,6 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_V2
#define CONFIG_CHARGER_ADC_AMON_BMON
#define CONFIG_CHARGER_DISCHARGE_ON_AC
#define CONFIG_CHARGER_ISL9237
#define CONFIG_CHARGER_ILIM_PIN_DISABLED
@@ -41,6 +40,7 @@
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_CHIPSET_SKYLAKE
#define CONFIG_CHIPSET_RESET_HOOK

View File

@@ -52,13 +52,14 @@
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
#endif /* BOARD_REV */
#define CONFIG_CHARGER_ADC_AMON_BMON
#define CONFIG_CHARGER_DISCHARGE_ON_AC
#define CONFIG_CHARGER_V2
#define CONFIG_CHIPSET_MEDIATEK
#define CONFIG_CMD_TYPEC
#define CONFIG_EXTPOWER_GPIO
#define CONFIG_FORCE_CONSOLE_RESUME
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
/*
* EC_WAKE: PA0 - WKUP1
* POWER_BUTTON_L: PB5 - WKUP6

View File

@@ -61,6 +61,16 @@
#define CONFIG_POWER_BUTTON_X86
#define CONFIG_POWER_COMMON
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 10
#define BD99955_IOUT_GAIN_SELECT \
BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_GAIN_SET_20V
#define CONFIG_CMD_CHARGER_PSYS
#define BD99955_PSYS_GAIN_SELECT \
BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_02UAW
/* EC */
#define CONFIG_ADC
#define CONFIG_BOARD_VERSION

View File

@@ -24,7 +24,6 @@
#define CONFIG_CHARGER
#define CONFIG_CHARGER_V2
#define CONFIG_CHARGER_ADC_AMON_BMON
#define CONFIG_CHARGER_DISCHARGE_ON_AC
#define CONFIG_CHARGER_ISL9237
#define CONFIG_CHARGER_ILIM_PIN_DISABLED
@@ -34,6 +33,7 @@
#define CONFIG_CHARGER_PROFILE_OVERRIDE
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
#define CONFIG_CMD_CHARGER_ADC_AMON_BMON
#define CONFIG_CHIPSET_SKYLAKE
#define CONFIG_CLOCK_CRYSTAL

View File

@@ -911,3 +911,162 @@ DECLARE_CONSOLE_COMMAND(bd99955, console_command_bd99955,
"Read or write a charger register",
NULL);
#endif /* CONFIG_CMD_CHARGER */
#ifdef CONFIG_CMD_CHARGER_PSYS
static int bd99955_psys_charger_adc(void)
{
int i;
int reg;
uint64_t ipmon = 0;
for (i = 0; i < BD99955_PMON_IOUT_ADC_READ_COUNT; i++) {
if (ch_raw_read16(BD99955_CMD_PMON_DACIN_VAL, &reg,
BD99955_EXTENDED_COMMAND))
return 0;
/* Conversion Interval is 200us */
usleep(200);
ipmon += reg;
}
/*
* Calculate power in mW
* PSYS = VACP×IACP+VBAT×IBAT = IPMON / GPMON
*/
return (int) ((ipmon * 1000) / ((1 << BD99955_PSYS_GAIN_SELECT) *
BD99955_PMON_IOUT_ADC_READ_COUNT));
}
static int bd99955_enable_psys(void)
{
int rv;
int reg;
rv = ch_raw_read16(BD99955_CMD_PMON_IOUT_CTRL_SET, &reg,
BD99955_EXTENDED_COMMAND);
if (rv)
return rv;
/* Enable PSYS & Select PSYS Gain */
reg &= ~BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_MASK;
reg |= (BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_INSEL |
BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_OUT_EN |
BD99955_PSYS_GAIN_SELECT);
return ch_raw_write16(BD99955_CMD_PMON_IOUT_CTRL_SET, reg,
BD99955_EXTENDED_COMMAND);
}
/**
* Get system power.
*/
static int console_command_psys(int argc, char **argv)
{
int rv;
rv = bd99955_enable_psys();
if (rv)
return rv;
CPRINTS("PSYS from chg_adc: %d mW",
bd99955_psys_charger_adc());
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(psys, console_command_psys,
NULL,
"Get the system power in mW",
NULL);
#endif /* CONFIG_CMD_CHARGER_PSYS */
#ifdef CONFIG_CMD_CHARGER_ADC_AMON_BMON
static int bd99955_amon_bmon_chg_adc(void)
{
int i;
int reg;
int iout = 0;
for (i = 0; i < BD99955_PMON_IOUT_ADC_READ_COUNT; i++) {
ch_raw_read16(BD99955_CMD_IOUT_DACIN_VAL, &reg,
BD99955_EXTENDED_COMMAND);
iout += reg;
/* Conversion Interval is 200us */
usleep(200);
}
/*
* Discharge current in mA
* IDCHG = iout * GIDCHG
* IADP = iout * GIADP
*
* VIDCHG = GIDCHG * (VSRN- VSRP) = GIDCHG * IDCHG / IDCHG_RES
* VIADP = GIADP * (VACP- VACN) = GIADP * IADP / IADP_RES
*/
return (iout * (5 << BD99955_IOUT_GAIN_SELECT)) /
(10 * BD99955_PMON_IOUT_ADC_READ_COUNT);
}
static int bd99955_amon_bmon(int amon_bmon)
{
int rv;
int reg;
int imon;
int sns_res;
rv = ch_raw_read16(BD99955_CMD_PMON_IOUT_CTRL_SET, &reg,
BD99955_EXTENDED_COMMAND);
if (rv)
return rv;
/* Enable monitor */
reg &= ~BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_GAIN_SET_MASK;
reg |= (BD99955_CMD_PMON_IOUT_CTRL_SET_IMON_INSEL |
BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_OUT_EN |
(BD99955_IOUT_GAIN_SELECT << 4));
if (amon_bmon) {
reg |= BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_SOURCE_SEL;
sns_res = CONFIG_CHARGER_SENSE_RESISTOR_AC;
} else {
reg &= ~BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_SOURCE_SEL;
sns_res = CONFIG_CHARGER_SENSE_RESISTOR;
}
rv = ch_raw_write16(BD99955_CMD_PMON_IOUT_CTRL_SET, reg,
BD99955_EXTENDED_COMMAND);
if (rv)
return rv;
imon = bd99955_amon_bmon_chg_adc();
CPRINTS("%cMON from chg_adc: %d uV, %d mA]",
amon_bmon ? 'A' : 'B',
imon * sns_res,
imon);
return EC_SUCCESS;
}
/**
* Get charger AMON and BMON current.
*/
static int console_command_amon_bmon(int argc, char **argv)
{
int rv = EC_ERROR_PARAM1;
/* Switch to AMON */
if (argc == 1 || (argc >= 2 && argv[1][0] == 'a'))
rv = bd99955_amon_bmon(1);
/* Switch to BMON */
if (argc == 1 || (argc >= 2 && argv[1][0] == 'b'))
rv = bd99955_amon_bmon(0);
return rv;
}
DECLARE_CONSOLE_COMMAND(amonbmon, console_command_amon_bmon,
"amonbmon [a|b]",
"Get charger AMON/BMON voltage diff, current",
NULL);
#endif /* CONFIG_CMD_CHARGER_ADC_AMON_BMON */

View File

@@ -124,6 +124,26 @@ enum bd99955_charge_port {
#define BD99955_CMD_PROCHOT_IDCHG_SET 0x23
#define BD99955_CMD_PROCHOT_VSYS_SET 0x24
#define BD99955_CMD_PMON_IOUT_CTRL_SET 0x25
#define BD99955_CMD_PMON_IOUT_CTRL_SET_IMON_INSEL (1 << 9)
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_INSEL (1 << 8)
#define BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_OUT_EN (1 << 7)
#define BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_SOURCE_SEL (1 << 6)
#define BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_GAIN_SET_MASK 0x30
#define BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_GAIN_SET_40V 0x03
#define BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_GAIN_SET_20V 0x02
#define BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_GAIN_SET_10V 0x01
#define BD99955_CMD_PMON_IOUT_CTRL_SET_IOUT_GAIN_SET_05V 0x00
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_OUT_EN (1 << 3)
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_MASK 0x07
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_64UAW 0x06
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_32UAW 0x05
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_16UAW 0x04
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_08UAW 0x03
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_04UAW 0x02
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_02UAW 0x01
#define BD99955_CMD_PMON_IOUT_CTRL_SET_PMON_GAIN_SET_01UAW 0x00
#define BD99955_PMON_IOUT_ADC_READ_COUNT 100
#define BD99955_CMD_PMON_DACIN_VAL 0x26
#define BD99955_CMD_IOUT_DACIN_VAL 0x27
#define BD99955_CMD_VCC_UCD_SET 0x28

View File

@@ -355,7 +355,7 @@ static void charger_disable_psys(void)
}
DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, charger_disable_psys, HOOK_PRIO_DEFAULT);
#ifdef CONFIG_CMD_PSYS
#ifdef CONFIG_CMD_CHARGER_PSYS
#define PSYS_ADC_READ_COUNT 100
static int charger_get_system_power(void)
{
@@ -400,10 +400,10 @@ DECLARE_CONSOLE_COMMAND(psys, console_command_psys,
NULL,
"Get the system power in mW",
NULL);
#endif /* CONFIG_CMD_PSYS */
#endif /* CONFIG_CMD_CHARGER_PSYS */
#endif /* CONFIG_CHARGER_PSYS */
#ifdef CONFIG_CHARGER_ADC_AMON_BMON
#ifdef CONFIG_CMD_CHARGER_ADC_AMON_BMON
/**
* Get charger AMON and BMON current.
*/
@@ -450,4 +450,4 @@ DECLARE_CONSOLE_COMMAND(amonbmon, console_command_amon_bmon,
"amonbmon [a|b]",
"Get charger AMON/BMON voltage diff, current",
NULL);
#endif /* CONFIG_CHARGER_ADC_AMON_BMON */
#endif /* CONFIG_CMD_CHARGER_ADC_AMON_BMON */

View File

@@ -337,9 +337,6 @@
#undef CONFIG_CHARGER_V1
#undef CONFIG_CHARGER_V2
/* Enable charger AMON_BMON ADC current detection */
#undef CONFIG_CHARGER_ADC_AMON_BMON
/* Compile charger-specific code for these chargers (pick at most one) */
#undef CONFIG_CHARGER_BD99955
#undef CONFIG_CHARGER_BQ24707A
@@ -528,6 +525,8 @@
#undef CONFIG_CMD_BATDEBUG
#define CONFIG_CMD_BATTFAKE
#define CONFIG_CMD_CHARGER
#undef CONFIG_CMD_CHARGER_ADC_AMON_BMON
#undef CONFIG_CMD_CHARGER_PSYS
#define CONFIG_CMD_CHARGE_SUPPLIER_INFO
#undef CONFIG_CMD_CHGRAMP
#undef CONFIG_CMD_CLOCKGATES
@@ -564,7 +563,6 @@
#define CONFIG_CMD_POWER_AP
#define CONFIG_CMD_POWERINDEBUG
#undef CONFIG_CMD_POWERLED
#undef CONFIG_CMD_PSYS
#undef CONFIG_CMD_RTC_ALARM
#undef CONFIG_CMD_SCRATCHPAD
#define CONFIG_CMD_SHMEM