usb: typec: intel_pmc_mux: Use correct response message bits
authorUtkarsh Patel <utkarsh.h.patel@intel.com>
Thu, 3 Dec 2020 22:08:13 +0000 (14:08 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 9 Dec 2020 13:37:33 +0000 (14:37 +0100)
When Intel PMC Mux agent driver receives the response message from PMC, it
checks for the same response bits for all the mux states.
Corrected it by checking correct response message bits, Bit 8 & 9 for the
SAFE Mode and Alternate Modes and Bit 16 & 17 for the Connect and
Disconnect Modes.

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Utkarsh Patel <utkarsh.h.patel@intel.com>
Link: https://lore.kernel.org/r/20201203220813.16281-1-utkarsh.h.patel@intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/mux/intel_pmc_mux.c

index aa3211f1c4c3c0108bb30ddde8af53b2bc40bdef..e58ae8a7fefb411b422f1e07adee55df6a1d86a4 100644 (file)
@@ -176,6 +176,7 @@ 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];
+       u8 status_res;
        int ret;
 
        /*
@@ -189,9 +190,13 @@ static int pmc_usb_command(struct pmc_usb_port *port, u8 *msg, u32 len)
        if (ret)
                return ret;
 
-       if (response[2] & PMC_USB_RESP_STATUS_FAILURE) {
-               if (response[2] & PMC_USB_RESP_STATUS_FATAL)
+       status_res = (msg[0] & 0xf) < PMC_USB_SAFE_MODE ?
+                    response[2] : response[1];
+
+       if (status_res & PMC_USB_RESP_STATUS_FAILURE) {
+               if (status_res & PMC_USB_RESP_STATUS_FATAL)
                        return -EIO;
+
                return -EBUSY;
        }