On Wednesday 08 February 2012 09:56 AM, Ajay Kumar Gupta wrote: > +static int dsps_musb_init(struct musb *musb) > +{ > + struct device *dev = musb->controller; > + struct musb_hdrc_platform_data *plat = dev->platform_data; > + struct platform_device *pdev = to_platform_device(dev->parent); > + struct dsps_glue *glue = platform_get_drvdata(pdev); > + const struct dsps_musb_wrapper *wrp = glue->wrp; > + struct omap_musb_board_data *data = plat->board_data; > + void __iomem *reg_base = musb->ctrl_base; > + u32 rev, val; > + int status; > + > + /* mentor core register starts at offset of 0x400 from musb base */ > + musb->mregs += wrp->musb_core_offset; > + > + /* NOP driver needs change if supporting dual instance */ > + usb_nop_xceiv_register(); > + musb->xceiv = otg_get_transceiver(); > + if (!musb->xceiv) > + return -ENODEV; > + > + status = pm_runtime_get_sync(dev); > + if (status < 0) { > + dev_err(dev, "pm_runtime_get_sync FAILED"); > + goto err0; > + } So you are doing a get_sync at init and you cut the clocks at exit only. Any particular reason for that. > + -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html