summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Neukum <oneukum@suse.com>2026-03-04 19:07:30 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-03-11 17:00:11 +0300
commitd740dcd1fa7b9cd86f10f1badc173b952fdc375f (patch)
tree954113d9938bd2d6334880cf3f202eae223f3435
parentfc12cd6bce1da3f1048f00ce6b6080cce47144b0 (diff)
downloadlinux-d740dcd1fa7b9cd86f10f1badc173b952fdc375f.tar.xz
usb: uss720: unify error handling in probe
There is a lot of code duplication. Unify it. Signed-off-by: Oliver Neukum <oneukum@suse.com> Link: https://patch.msgid.link/20260304160734.1742200-1-oneukum@suse.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/misc/uss720.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c
index ec8bd968c4de..616c92ce5e1a 100644
--- a/drivers/usb/misc/uss720.c
+++ b/drivers/usb/misc/uss720.c
@@ -677,35 +677,32 @@ static int uss720_probe(struct usb_interface *intf,
struct parport_uss720_private *priv;
struct parport *pp;
unsigned char reg;
- int ret;
+ int ret = -ENODEV;
dev_dbg(&intf->dev, "probe: vendor id 0x%x, device id 0x%x\n",
le16_to_cpu(usbdev->descriptor.idVendor),
le16_to_cpu(usbdev->descriptor.idProduct));
/* our known interfaces have 3 alternate settings */
- if (intf->num_altsetting != 3) {
- usb_put_dev(usbdev);
- return -ENODEV;
- }
+ if (intf->num_altsetting != 3)
+ goto bail_out_early;
+
ret = usb_set_interface(usbdev, intf->altsetting->desc.bInterfaceNumber, 2);
dev_dbg(&intf->dev, "set interface result %d\n", ret);
interface = intf->cur_altsetting;
- if (interface->desc.bNumEndpoints < 2) {
- usb_put_dev(usbdev);
- return -ENODEV;
- }
+ if (interface->desc.bNumEndpoints < 2)
+ goto bail_out_early;
/*
* Allocate parport interface
*/
+ ret = -ENOMEM;
priv = kzalloc_obj(struct parport_uss720_private);
- if (!priv) {
- usb_put_dev(usbdev);
- return -ENOMEM;
- }
+ if (!priv)
+ goto bail_out_early;
+
priv->pp = NULL;
priv->usbdev = usbdev;
kref_init(&priv->ref_count);
@@ -752,6 +749,10 @@ probe_abort:
kill_all_async_requests_priv(priv);
kref_put(&priv->ref_count, destroy_priv);
return -ENODEV;
+
+bail_out_early:
+ usb_put_dev(usbdev);
+ return ret;
}
static void uss720_disconnect(struct usb_interface *intf)