s3c-hsudc: reorder error handling in start function
From: Heiko Stuebner <heiko.stuebner@...> Date: Tue, 29 Nov 2011 15:16:39 +0100
Commit-Message
This removes duplicate code and makes room for more error handling steps. Signed-off-by: Heiko Stuebner <heiko@...>
Patch-Comment
drivers/usb/gadget/s3c-hsudc.c | 22 ++++++++++------------ 1 files changed, 10 insertions(+), 12 deletions(-)
Statistics
- 10 lines added
- 12 lines removed
Changes
------------------------ drivers/usb/gadget/s3c-hsudc.c ------------------------
index 787ac5b..74be824 100644
@@ -1165,11 +1165,7 @@ static int s3c_hsudc_start(struct usb_gadget_driver *driver,
ret = bind(&hsudc->gadget);
if (ret) {
dev_err(hsudc->dev, "%s: bind failed\n", hsudc->gadget.name);
+ goto err_bind;
}
/* connect to bus through transceiver */
@@ -1178,13 +1174,7 @@ static int s3c_hsudc_start(struct usb_gadget_driver *driver,
if (ret) {
dev_err(hsudc->dev, "%s: can't bind to transceiver\n",
hsudc->gadget.name);
+ goto err_otg;
}
}
@@ -1197,6 +1187,14 @@ static int s3c_hsudc_start(struct usb_gadget_driver *driver,
hsudc->pd->gpio_init();
return 0;
+err_otg:
+ driver->unbind(&hsudc->gadget);
+err_bind:
+ device_del(&hsudc->gadget.dev);
+
+ hsudc->driver = NULL;
+ hsudc->gadget.dev.driver = NULL;
+ return ret;
}
static int s3c_hsudc_stop(struct usb_gadget_driver *driver)