diff options
author | Madhusudanarao Amara <madhusudanarao.amara@intel.com> | 2020-09-16 12:11:02 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-09-16 13:09:31 +0200 |
commit | d69030c91b3765934048151792f141f0571efa86 (patch) | |
tree | d8d77241cd419efc4420cc717547378e2ee6bf3a /drivers/usb/typec/mux | |
parent | bcea6dafeeef7d1a6a8320a249aabf981d63b881 (diff) | |
download | linux-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.c | 12 |
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; |