static void iss_cleanup_modules(struct iss_device *iss) { omap4iss_csi2_cleanup(iss); omap4iss_ipipeif_cleanup(iss); omap4iss_ipipe_cleanup(iss); omap4iss_resizer_cleanup(iss); }
static int iss_initialize_modules(struct iss_device *iss) { int ret; ret = omap4iss_csiphy_init(iss); if (ret < 0) { dev_err(iss->dev, "CSI PHY initialization failed\n"); goto error_csiphy; } ret = omap4iss_csi2_init(iss); if (ret < 0) { dev_err(iss->dev, "CSI2 initialization failed\n"); goto error_csi2; } ret = omap4iss_ipipeif_init(iss); if (ret < 0) { dev_err(iss->dev, "ISP IPIPEIF initialization failed\n"); goto error_ipipeif; } ret = omap4iss_ipipe_init(iss); if (ret < 0) { dev_err(iss->dev, "ISP IPIPE initialization failed\n"); goto error_ipipe; } ret = omap4iss_resizer_init(iss); if (ret < 0) { dev_err(iss->dev, "ISP RESIZER initialization failed\n"); goto error_resizer; } /* Connect the submodules. */ ret = media_entity_create_link( &iss->csi2a.subdev.entity, CSI2_PAD_SOURCE, &iss->ipipeif.subdev.entity, IPIPEIF_PAD_SINK, 0); if (ret < 0) goto error_link; ret = media_entity_create_link( &iss->csi2b.subdev.entity, CSI2_PAD_SOURCE, &iss->ipipeif.subdev.entity, IPIPEIF_PAD_SINK, 0); if (ret < 0) goto error_link; ret = media_entity_create_link( &iss->ipipeif.subdev.entity, IPIPEIF_PAD_SOURCE_VP, &iss->resizer.subdev.entity, RESIZER_PAD_SINK, 0); if (ret < 0) goto error_link; ret = media_entity_create_link( &iss->ipipeif.subdev.entity, IPIPEIF_PAD_SOURCE_VP, &iss->ipipe.subdev.entity, IPIPE_PAD_SINK, 0); if (ret < 0) goto error_link; ret = media_entity_create_link( &iss->ipipe.subdev.entity, IPIPE_PAD_SOURCE_VP, &iss->resizer.subdev.entity, RESIZER_PAD_SINK, 0); if (ret < 0) goto error_link; return 0; error_link: omap4iss_resizer_cleanup(iss); error_resizer: omap4iss_ipipe_cleanup(iss); error_ipipe: omap4iss_ipipeif_cleanup(iss); error_ipipeif: omap4iss_csi2_cleanup(iss); error_csi2: error_csiphy: return ret; }