summaryrefslogtreecommitdiff
path: root/common/usbc
diff options
context:
space:
mode:
authorJameson Thies <jthies@google.com>2023-01-13 00:56:50 +0000
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-01-18 16:52:22 +0000
commita7eb8d5a503165c54ea73d1c7feb44dd4078b008 (patch)
tree6fefbe422a08fbaf23badeb6f0635893298a93be /common/usbc
parent50911dcbde3916a0909b8bc148b7d400269cbaed (diff)
downloadchrome-ec-a7eb8d5a503165c54ea73d1c7feb44dd4078b008.tar.gz
TCPMv2: Add SOP minor revision to EC_CMD_TYPEC_STATUS
EC_CMD_TYPEC_STATUS is used to send data about USB-C partners and cables to the kernel where it can then be exposed to userspace. Currently, EC_CMD_TYPEC_STATUS only assigns major PD revision to sop_revision causing the minor revision to appear as "0" regardless of the devices actual minor PD revision. This CL adds minor revision assignment to EC_CMD_TYPEC_STATUS so that it can be correctly reported by the kernel. BUG=b:261736720 BRANCH=None TEST="cat /sys/class/typec/port0-partner/usb_power_delivery_revision" for USB PD 2.0, 3.0 and 3.1 devices. Signed-off-by: Jameson Thies <jthies@google.com> Change-Id: I8c1858d6e6d577628b373d16f9aabdfd15a0e3c4 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4163826 Reviewed-by: Diana Z <dzigterman@chromium.org> Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
Diffstat (limited to 'common/usbc')
-rw-r--r--common/usbc/usb_pd_dpm.c2
-rw-r--r--common/usbc/usb_pd_host.c21
-rw-r--r--common/usbc/usb_pe_drp_sm.c2
3 files changed, 19 insertions, 6 deletions
diff --git a/common/usbc/usb_pd_dpm.c b/common/usbc/usb_pd_dpm.c
index 0c2bfe3b25..fc01783b87 100644
--- a/common/usbc/usb_pd_dpm.c
+++ b/common/usbc/usb_pd_dpm.c
@@ -1041,7 +1041,7 @@ int dpm_get_status_msg(int port, uint8_t *msg, uint32_t *len)
/* Power Status */
sdb.power_status = 0x0;
- partner_rmdo = pe_get_partner_rmdo(port);
+ partner_rmdo = pd_get_partner_rmdo(port);
if ((partner_rmdo.major_rev == 3 && partner_rmdo.minor_rev >= 1) ||
partner_rmdo.major_rev > 3) {
/* USB PD Rev 3.1: 6.5.2 Status Message */
diff --git a/common/usbc/usb_pd_host.c b/common/usbc/usb_pd_host.c
index bf891cf5ed..2c08aee302 100644
--- a/common/usbc/usb_pd_host.c
+++ b/common/usbc/usb_pd_host.c
@@ -210,10 +210,23 @@ static enum ec_status hc_typec_status(struct host_cmd_handler_args *args)
r->events = pd_get_events(p->port);
- r->sop_revision = r->sop_connected ?
- PD_STATUS_REV_SET_MAJOR(
- pd_get_rev(p->port, TCPCI_MSG_SOP)) :
- 0;
+ if (pd_get_partner_rmdo(p->port).major_rev != 0) {
+ r->sop_revision =
+ PD_STATUS_RMDO_REV_SET_MAJOR(
+ pd_get_partner_rmdo(p->port).major_rev) |
+ PD_STATUS_RMDO_REV_SET_MINOR(
+ pd_get_partner_rmdo(p->port).minor_rev) |
+ PD_STATUS_RMDO_VER_SET_MAJOR(
+ pd_get_partner_rmdo(p->port).major_ver) |
+ PD_STATUS_RMDO_VER_SET_MINOR(
+ pd_get_partner_rmdo(p->port).minor_ver);
+ } else if (r->sop_connected) {
+ r->sop_revision = PD_STATUS_REV_SET_MAJOR(
+ pd_get_rev(p->port, TCPCI_MSG_SOP));
+ } else {
+ r->sop_revision = 0;
+ }
+
r->sop_prime_revision =
pd_get_identity_discovery(p->port, TCPCI_MSG_SOP_PRIME) ==
PD_DISC_COMPLETE ?
diff --git a/common/usbc/usb_pe_drp_sm.c b/common/usbc/usb_pe_drp_sm.c
index 0714213cbd..a505a4922d 100644
--- a/common/usbc/usb_pe_drp_sm.c
+++ b/common/usbc/usb_pe_drp_sm.c
@@ -1459,7 +1459,7 @@ void pe_clear_ado(int port)
mutex_unlock(&pe[port].ado_lock);
}
-struct rmdo pe_get_partner_rmdo(int port)
+struct rmdo pd_get_partner_rmdo(int port)
{
return pe[port].partner_rmdo;
}