On Tue, 2018-10-16 at 13:03 -0300, Fabio Estevam wrote: > > + /* DCP clock is optional, only used on some SOCs */ > > + sdcp->dcp_clk = devm_clk_get(dev, "dcp"); > > + if (IS_ERR(sdcp->dcp_clk)) { > > + if (sdcp->dcp_clk != ERR_PTR(-ENOENT)) > > + return PTR_ERR(sdcp->dcp_clk); > > + sdcp->dcp_clk = NULL; > > This dcp_clk assignment to NULL does not seem to be necessary. The clk API ignores all calls if clk == NULL (which is very nice) but not if IS_ERR(clk). Setting dcp_clk to NULL avoids sprinkling other checks. > > + ret = clk_prepare_enable(sdcp->dcp_clk); > > + if (ret) > > + return ret; > > > > ret = devm_request_irq(dev, dcp_vmi_irq, mxs_dcp_irq, 0, > > "dcp-vmi-irq", sdcp); > > if (ret) { > > dev_err(dev, "Failed to claim DCP VMI IRQ!\n"); > > In case of subsequent errors you should call > clk_disable_unprepare(sdcp->dcp_clk). Yes, will resend. Maybe some day clk consumer will automatically undo pending prepare/enables on release?