zinger: add custom VDM to read last measured current

Add custom VDM to read last measured output current in mA.

BUG=chrome-os-partner:30850
BRANCH=none
TEST=Run "pd 0 vdm curr" on samus pd console and verify
reasonable current

Change-Id: Ie1f1ab235560eb4e90f399ceac31c5cd93003d80
Signed-off-by: Alec Berg <alecaberg@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/212981
This commit is contained in:
Alec Berg
2014-08-18 17:49:53 -07:00
committed by chrome-internal-fetch
parent 445691932c
commit c7c312d057
4 changed files with 19 additions and 2 deletions

View File

@@ -196,6 +196,9 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload)
ccprintf("%08x ", *payload++);
ccprintf("\n");
break;
case VDO_CMD_CURRENT:
ccprintf("Current: %dmA\n", payload[1]);
break;
}
return 0;

View File

@@ -82,6 +82,8 @@ static timestamp_t fault_deadline;
#define VBUS_MV(mv) ((mv)*ADC_SCALE/VOLT_DIV/VDDA_MV)
/* convert VBUS current in raw ADC value */
#define VBUS_MA(ma) ((ma)*ADC_SCALE*R_SENSE/1000*CURR_GAIN/VDDA_MV)
/* convert raw ADC value to mA */
#define ADC_TO_CURR_MA(vbus) ((vbus)*1000/(ADC_SCALE*R_SENSE)*VDDA_MV/CURR_GAIN)
/* Max current : 20% over 3A = 3.6A */
#define MAX_CURRENT VBUS_MA(3600)
@@ -133,6 +135,9 @@ static int last_volt_idx;
static int down_step;
static uint64_t down_step_done_time;
/* output current measurement */
int vbus_amp;
int pd_request_voltage(uint32_t rdo)
{
int op_ma = rdo & 0x3FF;
@@ -200,7 +205,7 @@ void pd_power_supply_reset(int port)
int pd_board_checks(void)
{
int vbus_volt, vbus_amp;
int vbus_volt;
int ovp_idx;
/* Reload the watchdog */
@@ -329,6 +334,11 @@ int pd_custom_vdm(int port, int cnt, uint32_t *payload, uint32_t **rpayload)
case VDO_CMD_PING_ENABLE:
pd_ping_enable(0, payload[1]);
break;
case VDO_CMD_CURRENT:
/* return last measured current */
payload[1] = ADC_TO_CURR_MA(vbus_amp);
rsize = 2;
break;
default:
/* Unknown : do not answer */
return 0;

View File

@@ -1581,6 +1581,9 @@ static int command_pd(int argc, char **argv)
return EC_ERROR_PARAM4;
pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_PING_ENABLE,
&enable, 1);
} else if (!strncasecmp(argv[3], "curr", 4)) {
pd_send_vdm(port, USB_VID_GOOGLE, VDO_CMD_CURRENT,
NULL, 0);
} else {
return EC_ERROR_PARAM_COUNT;
}
@@ -1638,7 +1641,7 @@ static int command_pd(int argc, char **argv)
DECLARE_CONSOLE_COMMAND(pd, command_pd,
"<port> "
"[tx|bist|charger|dev|dump|dualrole|enable"
"|soft|hard|clock|ping|state|vdm [ping]]",
"|soft|hard|clock|ping|state|vdm [ping | curr]]",
"USB PD",
NULL);

View File

@@ -128,6 +128,7 @@ enum pd_errors {
#define VDO_CMD_FLASH_WRITE VDO_CMD_VENDOR(7)
#define VDO_CMD_FLASH_HASH VDO_CMD_VENDOR(8)
#define VDO_CMD_PING_ENABLE VDO_CMD_VENDOR(10)
#define VDO_CMD_CURRENT VDO_CMD_VENDOR(11)
#define PD_VDO_VID(vdo) ((vdo) >> 16)
#define PD_VDO_CMD(vdo) ((vdo) & 0x1f)