]> git.hungrycats.org Git - linux/commitdiff
usb: misc: ljca: move usb_autopm_put_interface() after wait for response
authorStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Tue, 12 Nov 2024 07:55:12 +0000 (08:55 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Dec 2024 12:54:24 +0000 (13:54 +0100)
commit 5c5d8eb8af06df615e8b1dc88e5847196c846045 upstream.

Do not mark interface as ready to suspend when we are still waiting
for response messages from the device.

Fixes: acd6199f195d ("usb: Add support for Intel LJCA device")
Cc: stable@vger.kernel.org
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Tested-by: Hans de Goede <hdegoede@redhat.com> # ThinkPad X1 Yoga Gen 8, ov2740
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Link: https://lore.kernel.org/r/20241112075514.680712-1-stanislaw.gruszka@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/misc/usb-ljca.c

index 73585f5c4ebf5f9dc9cc1eafb474c5f891dd6811..76951854d88afc7157665078fa7fc718357f000f 100644 (file)
@@ -332,14 +332,11 @@ static int ljca_send(struct ljca_adapter *adap, u8 type, u8 cmd,
 
        ret = usb_bulk_msg(adap->usb_dev, adap->tx_pipe, header,
                           msg_len, &transferred, LJCA_WRITE_TIMEOUT_MS);
-
-       usb_autopm_put_interface(adap->intf);
-
        if (ret < 0)
-               goto out;
+               goto out_put;
        if (transferred != msg_len) {
                ret = -EIO;
-               goto out;
+               goto out_put;
        }
 
        if (ack) {
@@ -347,11 +344,14 @@ static int ljca_send(struct ljca_adapter *adap, u8 type, u8 cmd,
                                                  timeout);
                if (!ret) {
                        ret = -ETIMEDOUT;
-                       goto out;
+                       goto out_put;
                }
        }
        ret = adap->actual_length;
 
+out_put:
+       usb_autopm_put_interface(adap->intf);
+
 out:
        spin_lock_irqsave(&adap->lock, flags);
        adap->ex_buf = NULL;