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; } return 0; error_resizer: omap4iss_ipipe_cleanup(iss); error_ipipe: omap4iss_ipipeif_cleanup(iss); error_ipipeif: omap4iss_csi2_cleanup(iss); error_csi2: error_csiphy: return ret; }
/* * omap4iss_csi2_init - Routine for module driver init */ int omap4iss_csi2_init(struct iss_device *iss) { struct iss_csi2_device *csi2a = &iss->csi2a; int ret; csi2a->iss = iss; csi2a->available = 1; csi2a->regs1 = iss->regs[OMAP4_ISS_MEM_CSI2_A_REGS1]; csi2a->phy = &iss->csiphy1; csi2a->state = ISS_PIPELINE_STREAM_STOPPED; init_waitqueue_head(&csi2a->wait); ret = csi2_init_entities(csi2a); if (ret < 0) goto fail; return 0; fail: omap4iss_csi2_cleanup(iss); return ret; }
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; }