aboutsummaryrefslogtreecommitdiff
path: root/src/ec/google/chromeec/ec.c
diff options
context:
space:
mode:
authorTim Wawrzynczak <twawrzynczak@chromium.org>2020-01-22 15:22:18 -0700
committerPatrick Georgi <pgeorgi@google.com>2020-02-01 19:50:19 +0000
commite6078290c5c3fd5a89f548abc5d67b5264745d73 (patch)
treece233b2af20714743916a216ec2ccc9b9f6e35be /src/ec/google/chromeec/ec.c
parent87afa907316faa46250e38d3969139d4fed18d8a (diff)
ec/google/chromeec: Add new wrappers for host commands
Add new functions to get (from the EC): 1) The number of USB-PD ports 2) The capabilities of each port (EC_CMD_GET_PD_PORT_CAPS) BUG=b:146506369 BRANCH=none TEST=Instrumented calls to these and verified the data Change-Id: I57edbe1592cd28b005f01679ef8a8b5de3e1f586 Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38540 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Furquan Shaikh <furquan@google.com>
Diffstat (limited to 'src/ec/google/chromeec/ec.c')
-rw-r--r--src/ec/google/chromeec/ec.c59
1 files changed, 56 insertions, 3 deletions
diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index 0b23034101..4bf41ac119 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -15,16 +15,18 @@
#include <stdint.h>
#include <string.h>
-#include <cbmem.h>
-#include <console/console.h>
#include <assert.h>
#include <bootmode.h>
#include <bootstate.h>
+#include <cbmem.h>
+#include <console/console.h>
#include <delay.h>
+#include <device/device.h>
+#include <device/path.h>
#include <elog.h>
#include <rtc.h>
-#include <stdlib.h>
#include <security/vboot/vboot_common.h>
+#include <stdlib.h>
#include <timer.h>
#include "chip.h"
@@ -1419,6 +1421,57 @@ enum ec_current_image google_chromeec_get_current_image(void)
return ec_image_type;
}
+int google_chromeec_get_num_pd_ports(int *num_ports)
+{
+ struct ec_response_charge_port_count resp = {};
+ struct chromeec_command cmd = {
+ .cmd_code = EC_CMD_CHARGE_PORT_COUNT,
+ .cmd_version = 0,
+ .cmd_data_out = &resp,
+ .cmd_size_in = 0,
+ .cmd_size_out = sizeof(resp),
+ .cmd_dev_index = 0,
+ };
+ int rv;
+
+ rv = google_chromeec_command(&cmd);
+ if (rv)
+ return rv;
+
+ *num_ports = resp.port_count;
+ return 0;
+}
+
+int google_chromeec_get_pd_port_caps(int port,
+ struct usb_pd_port_caps *port_caps)
+{
+ struct ec_params_get_pd_port_caps params = {
+ .port = port,
+ };
+ struct ec_response_get_pd_port_caps resp = {};
+ struct chromeec_command cmd = {
+ .cmd_code = EC_CMD_GET_PD_PORT_CAPS,
+ .cmd_version = 0,
+ .cmd_data_in = &params,
+ .cmd_size_in = sizeof(params),
+ .cmd_data_out = &resp,
+ .cmd_size_out = sizeof(resp),
+ .cmd_dev_index = 0,
+ };
+ int rv;
+
+ rv = google_chromeec_command(&cmd);
+ if (rv)
+ return rv;
+
+ port_caps->power_role_cap = resp.pd_power_role_cap;
+ port_caps->try_power_role_cap = resp.pd_try_power_role_cap;
+ port_caps->data_role_cap = resp.pd_data_role_cap;
+ port_caps->port_location = resp.pd_port_location;
+
+ return 0;
+}
+
void google_chromeec_init(void)
{
google_chromeec_log_uptimeinfo();