Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ffb62a14 authored by Dan Carpenter's avatar Dan Carpenter Committed by Felipe Balbi
Browse files

usb: gadget: double unlocks on error in atmel_usba_start()



The "goto out" statements were wrong.  We aren't holding any locks at
that point so we should return directly.

Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 0f827684
Loading
Loading
Loading
Loading
+4 −6
Original line number Original line Diff line number Diff line
@@ -1772,7 +1772,7 @@ out:
static int atmel_usba_start(struct usb_gadget *gadget,
static int atmel_usba_start(struct usb_gadget *gadget,
		struct usb_gadget_driver *driver)
		struct usb_gadget_driver *driver)
{
{
	int ret = 0;
	int ret;
	struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget);
	struct usba_udc *udc = container_of(gadget, struct usba_udc, gadget);
	unsigned long flags;
	unsigned long flags;


@@ -1784,11 +1784,11 @@ static int atmel_usba_start(struct usb_gadget *gadget,


	ret = clk_prepare_enable(udc->pclk);
	ret = clk_prepare_enable(udc->pclk);
	if (ret)
	if (ret)
		goto out;
		return ret;
	ret = clk_prepare_enable(udc->hclk);
	ret = clk_prepare_enable(udc->hclk);
	if (ret) {
	if (ret) {
		clk_disable_unprepare(udc->pclk);
		clk_disable_unprepare(udc->pclk);
		goto out;
		return ret;
	}
	}


	DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name);
	DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name);
@@ -1804,11 +1804,9 @@ static int atmel_usba_start(struct usb_gadget *gadget,
		usba_writel(udc, CTRL, USBA_ENABLE_MASK);
		usba_writel(udc, CTRL, USBA_ENABLE_MASK);
		usba_writel(udc, INT_ENB, USBA_END_OF_RESET);
		usba_writel(udc, INT_ENB, USBA_END_OF_RESET);
	}
	}

out:
	spin_unlock_irqrestore(&udc->lock, flags);
	spin_unlock_irqrestore(&udc->lock, flags);


	return ret;
	return 0;
}
}


static int atmel_usba_stop(struct usb_gadget *gadget,
static int atmel_usba_stop(struct usb_gadget *gadget,