summaryrefslogtreecommitdiffstats
path: root/drivers/usb/typec/mux
diff options
context:
space:
mode:
authorMadhusudanarao Amara <madhusudanarao.amara@intel.com>2020-09-16 12:11:02 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-09-16 13:09:31 +0200
commitd69030c91b3765934048151792f141f0571efa86 (patch)
treed8d77241cd419efc4420cc717547378e2ee6bf3a /drivers/usb/typec/mux
parentbcea6dafeeef7d1a6a8320a249aabf981d63b881 (diff)
downloadlinux-stable-d69030c91b3765934048151792f141f0571efa86.tar.gz
linux-stable-d69030c91b3765934048151792f141f0571efa86.tar.bz2
linux-stable-d69030c91b3765934048151792f141f0571efa86.zip
usb: typec: intel_pmc_mux: Handle SCU IPC error conditions
Check and return if there are errors. The response bits are valid only on no errors. Fixes: b7404a29cd3d ("usb: typec: intel_pmc_mux: Definitions for response status bits") Signed-off-by: Madhusudanarao Amara <madhusudanarao.amara@intel.com> Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://lore.kernel.org/r/20200916091102.27118-4-heikki.krogerus@linux.intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/typec/mux')
-rw-r--r--drivers/usb/typec/mux/intel_pmc_mux.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/usb/typec/mux/intel_pmc_mux.c b/drivers/usb/typec/mux/intel_pmc_mux.c
index ec7da0fa3cf8..676b525c2a66 100644
--- a/drivers/usb/typec/mux/intel_pmc_mux.c
+++ b/drivers/usb/typec/mux/intel_pmc_mux.c
@@ -125,13 +125,19 @@ static int hsl_orientation(struct pmc_usb_port *port)
static int pmc_usb_command(struct pmc_usb_port *port, u8 *msg, u32 len)
{
u8 response[4];
+ int ret;
/*
* Error bit will always be 0 with the USBC command.
- * Status can be checked from the response message.
+ * Status can be checked from the response message if the
+ * function intel_scu_ipc_dev_command succeeds.
*/
- intel_scu_ipc_dev_command(port->pmc->ipc, PMC_USBC_CMD, 0, msg, len,
- response, sizeof(response));
+ ret = intel_scu_ipc_dev_command(port->pmc->ipc, PMC_USBC_CMD, 0, msg,
+ len, response, sizeof(response));
+
+ if (ret)
+ return ret;
+
if (response[2] & PMC_USB_RESP_STATUS_FAILURE) {
if (response[2] & PMC_USB_RESP_STATUS_FATAL)
return -EIO;