Skip to content

Commit

Permalink
usb: gadget: mv_udc: refine the clock relative code
Browse files Browse the repository at this point in the history
Split the clock relative code from clock gating solution.
Then we can remove some duplicate code, make the code more clean.

Signed-off-by: Neil Zhang <zhangwm@marvell.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
  • Loading branch information
Neil Zhang authored and Felipe Balbi committed Dec 12, 2011
1 parent 309d6d2 commit 85ff7bf
Showing 1 changed file with 25 additions and 20 deletions.
45 changes: 25 additions & 20 deletions drivers/usb/gadget/mv_udc_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1138,11 +1138,11 @@ static int udc_reset(struct mv_udc *udc)
return 0;
}

static int mv_udc_enable(struct mv_udc *udc)
static int mv_udc_enable_internal(struct mv_udc *udc)
{
int retval;

if (udc->clock_gating == 0 || udc->active)
if (udc->active)
return 0;

dev_dbg(&udc->dev->dev, "enable udc\n");
Expand All @@ -1161,9 +1161,17 @@ static int mv_udc_enable(struct mv_udc *udc)
return 0;
}

static void mv_udc_disable(struct mv_udc *udc)
static int mv_udc_enable(struct mv_udc *udc)
{
if (udc->clock_gating && udc->active) {
if (udc->clock_gating)
return mv_udc_enable_internal(udc);

return 0;
}

static void mv_udc_disable_internal(struct mv_udc *udc)
{
if (udc->active) {
dev_dbg(&udc->dev->dev, "disable udc\n");
if (udc->pdata->phy_deinit)
udc->pdata->phy_deinit(udc->phy_regs);
Expand All @@ -1172,6 +1180,12 @@ static void mv_udc_disable(struct mv_udc *udc)
}
}

static void mv_udc_disable(struct mv_udc *udc)
{
if (udc->clock_gating)
mv_udc_disable_internal(udc);
}

static int mv_udc_get_frame(struct usb_gadget *gadget)
{
struct mv_udc *udc;
Expand Down Expand Up @@ -2253,14 +2267,9 @@ static int __devinit mv_udc_probe(struct platform_device *dev)
}

/* we will acces controller register, so enable the clk */
udc_clock_enable(udc);
if (pdata->phy_init) {
retval = pdata->phy_init(udc->phy_regs);
if (retval) {
dev_err(&dev->dev, "phy init error %d\n", retval);
goto err_iounmap_phyreg;
}
}
retval = mv_udc_enable_internal(udc);
if (retval)
goto err_iounmap_phyreg;

udc->op_regs = (struct mv_op_regs __iomem *)((u32)udc->cap_regs
+ (readl(&udc->cap_regs->caplength_hciversion)
Expand Down Expand Up @@ -2388,11 +2397,9 @@ static int __devinit mv_udc_probe(struct platform_device *dev)
* If not, it means that VBUS detection is not supported, we
* have to enable vbus active all the time to let controller work.
*/
if (udc->clock_gating) {
if (udc->pdata->phy_deinit)
udc->pdata->phy_deinit(udc->phy_regs);
udc_clock_disable(udc);
} else
if (udc->clock_gating)
mv_udc_disable_internal(udc);
else
udc->vbus_active = 1;

retval = usb_add_gadget_udc(&dev->dev, &udc->gadget);
Expand Down Expand Up @@ -2422,9 +2429,7 @@ static int __devinit mv_udc_probe(struct platform_device *dev)
dma_free_coherent(&dev->dev, udc->ep_dqh_size,
udc->ep_dqh, udc->ep_dqh_dma);
err_disable_clock:
if (udc->pdata->phy_deinit)
udc->pdata->phy_deinit(udc->phy_regs);
udc_clock_disable(udc);
mv_udc_disable_internal(udc);
err_iounmap_phyreg:
iounmap((void *)udc->phy_regs);
err_iounmap_capreg:
Expand Down

0 comments on commit 85ff7bf

Please sign in to comment.