static int ipu_get_resources(struct ipu_crtc *ipu_crtc, struct ipu_client_platformdata *pdata) { struct ipu_soc *ipu = dev_get_drvdata(ipu_crtc->dev->parent); int ret; ipu_crtc->ipu_ch = ipu_idmac_get(ipu, pdata->dma[0]); if (IS_ERR(ipu_crtc->ipu_ch)) { ret = PTR_ERR(ipu_crtc->ipu_ch); goto err_out; } ipu_crtc->dc = ipu_dc_get(ipu, pdata->dc); if (IS_ERR(ipu_crtc->dc)) { ret = PTR_ERR(ipu_crtc->dc); goto err_out; } ipu_crtc->dmfc = ipu_dmfc_get(ipu, pdata->dma[0]); if (IS_ERR(ipu_crtc->dmfc)) { ret = PTR_ERR(ipu_crtc->dmfc); goto err_out; } if (pdata->dp >= 0) { ipu_crtc->dp = ipu_dp_get(ipu, pdata->dp); if (IS_ERR(ipu_crtc->dp)) { ret = PTR_ERR(ipu_crtc->dp); goto err_out; } } ipu_crtc->di = ipu_di_get(ipu, pdata->di); if (IS_ERR(ipu_crtc->di)) { ret = PTR_ERR(ipu_crtc->di); goto err_out; } ipu_crtc->irq = ipu_idmac_channel_irq(ipu, ipu_crtc->ipu_ch, IPU_IRQ_EOF); ret = devm_request_irq(ipu_crtc->dev, ipu_crtc->irq, ipu_irq_handler, 0, "imx_drm", ipu_crtc); if (ret < 0) { dev_err(ipu_crtc->dev, "irq request failed with %d.\n", ret); goto err_out; } disable_irq(ipu_crtc->irq); return 0; err_out: ipu_put_resources(ipu_crtc); return ret; }
static int ipu_get_resources(struct ipu_crtc *ipu_crtc, struct ipu_client_platformdata *pdata) { struct ipu_soc *ipu = dev_get_drvdata(ipu_crtc->dev->parent); int ret; ipu_crtc->ipu_ch = ipu_idmac_get(ipu, pdata->dma[0]); if (IS_ERR(ipu_crtc->ipu_ch)) { ret = PTR_ERR(ipu_crtc->ipu_ch); goto err_out; } ipu_crtc->dc = ipu_dc_get(ipu, pdata->dc); if (IS_ERR(ipu_crtc->dc)) { ret = PTR_ERR(ipu_crtc->dc); goto err_out; } ipu_crtc->dmfc = ipu_dmfc_get(ipu, pdata->dma[0]); if (IS_ERR(ipu_crtc->dmfc)) { ret = PTR_ERR(ipu_crtc->dmfc); goto err_out; } if (pdata->dp >= 0) { ipu_crtc->dp = ipu_dp_get(ipu, pdata->dp); if (IS_ERR(ipu_crtc->dp)) { ret = PTR_ERR(ipu_crtc->dp); goto err_out; } } ipu_crtc->di = ipu_di_get(ipu, pdata->di); if (IS_ERR(ipu_crtc->di)) { ret = PTR_ERR(ipu_crtc->di); goto err_out; } return 0; err_out: ipu_put_resources(ipu_crtc); return ret; }