mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-10 17:41:54 +00:00
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:
committed by
chrome-internal-fetch
parent
445691932c
commit
c7c312d057
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user