Commit 63b4ca23 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

[media] omap3isp: Move media_entity_cleanup() from unregister() to cleanup()

The media_entity_cleanup() function belong to the module cleanup
handlers, not the entity registration handlers. Move it there.

Create a omap3isp_video_cleanup() function to cleanup the video node
entity, and call it from the module cleanup handlers.

Rename omap3isp_stat_free() to omap3isp_stat_cleanup().
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 57f6217b
...@@ -2206,8 +2206,6 @@ static int ccdc_init_entities(struct isp_ccdc_device *ccdc) ...@@ -2206,8 +2206,6 @@ static int ccdc_init_entities(struct isp_ccdc_device *ccdc)
void omap3isp_ccdc_unregister_entities(struct isp_ccdc_device *ccdc) void omap3isp_ccdc_unregister_entities(struct isp_ccdc_device *ccdc)
{ {
media_entity_cleanup(&ccdc->subdev.entity);
v4l2_device_unregister_subdev(&ccdc->subdev); v4l2_device_unregister_subdev(&ccdc->subdev);
omap3isp_video_unregister(&ccdc->video_out); omap3isp_video_unregister(&ccdc->video_out);
} }
...@@ -2287,6 +2285,9 @@ void omap3isp_ccdc_cleanup(struct isp_device *isp) ...@@ -2287,6 +2285,9 @@ void omap3isp_ccdc_cleanup(struct isp_device *isp)
{ {
struct isp_ccdc_device *ccdc = &isp->isp_ccdc; struct isp_ccdc_device *ccdc = &isp->isp_ccdc;
omap3isp_video_cleanup(&ccdc->video_out);
media_entity_cleanup(&ccdc->subdev.entity);
/* Free LSC requests. As the CCDC is stopped there's no active request, /* Free LSC requests. As the CCDC is stopped there's no active request,
* so only the pending request and the free queue need to be handled. * so only the pending request and the free queue need to be handled.
*/ */
......
...@@ -1100,8 +1100,6 @@ static int ccp2_init_entities(struct isp_ccp2_device *ccp2) ...@@ -1100,8 +1100,6 @@ static int ccp2_init_entities(struct isp_ccp2_device *ccp2)
*/ */
void omap3isp_ccp2_unregister_entities(struct isp_ccp2_device *ccp2) void omap3isp_ccp2_unregister_entities(struct isp_ccp2_device *ccp2)
{ {
media_entity_cleanup(&ccp2->subdev.entity);
v4l2_device_unregister_subdev(&ccp2->subdev); v4l2_device_unregister_subdev(&ccp2->subdev);
omap3isp_video_unregister(&ccp2->video_in); omap3isp_video_unregister(&ccp2->video_in);
} }
...@@ -1146,6 +1144,9 @@ void omap3isp_ccp2_cleanup(struct isp_device *isp) ...@@ -1146,6 +1144,9 @@ void omap3isp_ccp2_cleanup(struct isp_device *isp)
{ {
struct isp_ccp2_device *ccp2 = &isp->isp_ccp2; struct isp_ccp2_device *ccp2 = &isp->isp_ccp2;
omap3isp_video_cleanup(&ccp2->video_in);
media_entity_cleanup(&ccp2->subdev.entity);
regulator_put(ccp2->vdds_csib); regulator_put(ccp2->vdds_csib);
} }
......
...@@ -1241,8 +1241,6 @@ static int csi2_init_entities(struct isp_csi2_device *csi2) ...@@ -1241,8 +1241,6 @@ static int csi2_init_entities(struct isp_csi2_device *csi2)
void omap3isp_csi2_unregister_entities(struct isp_csi2_device *csi2) void omap3isp_csi2_unregister_entities(struct isp_csi2_device *csi2)
{ {
media_entity_cleanup(&csi2->subdev.entity);
v4l2_device_unregister_subdev(&csi2->subdev); v4l2_device_unregister_subdev(&csi2->subdev);
omap3isp_video_unregister(&csi2->video_out); omap3isp_video_unregister(&csi2->video_out);
} }
...@@ -1277,6 +1275,10 @@ int omap3isp_csi2_register_entities(struct isp_csi2_device *csi2, ...@@ -1277,6 +1275,10 @@ int omap3isp_csi2_register_entities(struct isp_csi2_device *csi2,
*/ */
void omap3isp_csi2_cleanup(struct isp_device *isp) void omap3isp_csi2_cleanup(struct isp_device *isp)
{ {
struct isp_csi2_device *csi2a = &isp->isp_csi2a;
omap3isp_video_cleanup(&csi2a->video_out);
media_entity_cleanup(&csi2a->subdev.entity);
} }
/* /*
......
...@@ -370,5 +370,5 @@ void omap3isp_h3a_aewb_cleanup(struct isp_device *isp) ...@@ -370,5 +370,5 @@ void omap3isp_h3a_aewb_cleanup(struct isp_device *isp)
{ {
kfree(isp->isp_aewb.priv); kfree(isp->isp_aewb.priv);
kfree(isp->isp_aewb.recover_priv); kfree(isp->isp_aewb.recover_priv);
omap3isp_stat_free(&isp->isp_aewb); omap3isp_stat_cleanup(&isp->isp_aewb);
} }
...@@ -425,5 +425,5 @@ void omap3isp_h3a_af_cleanup(struct isp_device *isp) ...@@ -425,5 +425,5 @@ void omap3isp_h3a_af_cleanup(struct isp_device *isp)
{ {
kfree(isp->isp_af.priv); kfree(isp->isp_af.priv);
kfree(isp->isp_af.recover_priv); kfree(isp->isp_af.recover_priv);
omap3isp_stat_free(&isp->isp_af); omap3isp_stat_cleanup(&isp->isp_af);
} }
...@@ -516,5 +516,5 @@ void omap3isp_hist_cleanup(struct isp_device *isp) ...@@ -516,5 +516,5 @@ void omap3isp_hist_cleanup(struct isp_device *isp)
if (HIST_USING_DMA(&isp->isp_hist)) if (HIST_USING_DMA(&isp->isp_hist))
omap_free_dma(isp->isp_hist.dma_ch); omap_free_dma(isp->isp_hist.dma_ch);
kfree(isp->isp_hist.priv); kfree(isp->isp_hist.priv);
omap3isp_stat_free(&isp->isp_hist); omap3isp_stat_cleanup(&isp->isp_hist);
} }
...@@ -2046,10 +2046,7 @@ static int preview_init_entities(struct isp_prev_device *prev) ...@@ -2046,10 +2046,7 @@ static int preview_init_entities(struct isp_prev_device *prev)
void omap3isp_preview_unregister_entities(struct isp_prev_device *prev) void omap3isp_preview_unregister_entities(struct isp_prev_device *prev)
{ {
media_entity_cleanup(&prev->subdev.entity);
v4l2_device_unregister_subdev(&prev->subdev); v4l2_device_unregister_subdev(&prev->subdev);
v4l2_ctrl_handler_free(&prev->ctrls);
omap3isp_video_unregister(&prev->video_in); omap3isp_video_unregister(&prev->video_in);
omap3isp_video_unregister(&prev->video_out); omap3isp_video_unregister(&prev->video_out);
} }
...@@ -2085,6 +2082,12 @@ int omap3isp_preview_register_entities(struct isp_prev_device *prev, ...@@ -2085,6 +2082,12 @@ int omap3isp_preview_register_entities(struct isp_prev_device *prev,
void omap3isp_preview_cleanup(struct isp_device *isp) void omap3isp_preview_cleanup(struct isp_device *isp)
{ {
struct isp_prev_device *prev = &isp->isp_prev;
v4l2_ctrl_handler_free(&prev->ctrls);
omap3isp_video_cleanup(&prev->video_in);
omap3isp_video_cleanup(&prev->video_out);
media_entity_cleanup(&prev->subdev.entity);
} }
/* /*
......
...@@ -1674,8 +1674,6 @@ static int resizer_init_entities(struct isp_res_device *res) ...@@ -1674,8 +1674,6 @@ static int resizer_init_entities(struct isp_res_device *res)
void omap3isp_resizer_unregister_entities(struct isp_res_device *res) void omap3isp_resizer_unregister_entities(struct isp_res_device *res)
{ {
media_entity_cleanup(&res->subdev.entity);
v4l2_device_unregister_subdev(&res->subdev); v4l2_device_unregister_subdev(&res->subdev);
omap3isp_video_unregister(&res->video_in); omap3isp_video_unregister(&res->video_in);
omap3isp_video_unregister(&res->video_out); omap3isp_video_unregister(&res->video_out);
...@@ -1712,6 +1710,11 @@ int omap3isp_resizer_register_entities(struct isp_res_device *res, ...@@ -1712,6 +1710,11 @@ int omap3isp_resizer_register_entities(struct isp_res_device *res,
void omap3isp_resizer_cleanup(struct isp_device *isp) void omap3isp_resizer_cleanup(struct isp_device *isp)
{ {
struct isp_res_device *res = &isp->isp_res;
omap3isp_video_cleanup(&res->video_in);
omap3isp_video_cleanup(&res->video_out);
media_entity_cleanup(&res->subdev.entity);
} }
/* /*
......
...@@ -1062,7 +1062,6 @@ int omap3isp_stat_unsubscribe_event(struct v4l2_subdev *subdev, ...@@ -1062,7 +1062,6 @@ int omap3isp_stat_unsubscribe_event(struct v4l2_subdev *subdev,
void omap3isp_stat_unregister_entities(struct ispstat *stat) void omap3isp_stat_unregister_entities(struct ispstat *stat)
{ {
media_entity_cleanup(&stat->subdev.entity);
v4l2_device_unregister_subdev(&stat->subdev); v4l2_device_unregister_subdev(&stat->subdev);
} }
...@@ -1085,8 +1084,9 @@ int omap3isp_stat_init(struct ispstat *stat, const char *name, ...@@ -1085,8 +1084,9 @@ int omap3isp_stat_init(struct ispstat *stat, const char *name,
return isp_stat_init_entities(stat, name, sd_ops); return isp_stat_init_entities(stat, name, sd_ops);
} }
void omap3isp_stat_free(struct ispstat *stat) void omap3isp_stat_cleanup(struct ispstat *stat)
{ {
media_entity_cleanup(&stat->subdev.entity);
isp_stat_bufs_free(stat); isp_stat_bufs_free(stat);
kfree(stat->buf); kfree(stat->buf);
} }
...@@ -144,7 +144,7 @@ int omap3isp_stat_request_statistics(struct ispstat *stat, ...@@ -144,7 +144,7 @@ int omap3isp_stat_request_statistics(struct ispstat *stat,
struct omap3isp_stat_data *data); struct omap3isp_stat_data *data);
int omap3isp_stat_init(struct ispstat *stat, const char *name, int omap3isp_stat_init(struct ispstat *stat, const char *name,
const struct v4l2_subdev_ops *sd_ops); const struct v4l2_subdev_ops *sd_ops);
void omap3isp_stat_free(struct ispstat *stat); void omap3isp_stat_cleanup(struct ispstat *stat);
int omap3isp_stat_subscribe_event(struct v4l2_subdev *subdev, int omap3isp_stat_subscribe_event(struct v4l2_subdev *subdev,
struct v4l2_fh *fh, struct v4l2_fh *fh,
struct v4l2_event_subscription *sub); struct v4l2_event_subscription *sub);
......
...@@ -1325,6 +1325,11 @@ int omap3isp_video_init(struct isp_video *video, const char *name) ...@@ -1325,6 +1325,11 @@ int omap3isp_video_init(struct isp_video *video, const char *name)
return 0; return 0;
} }
void omap3isp_video_cleanup(struct isp_video *video)
{
media_entity_cleanup(&video->video.entity);
}
int omap3isp_video_register(struct isp_video *video, struct v4l2_device *vdev) int omap3isp_video_register(struct isp_video *video, struct v4l2_device *vdev)
{ {
int ret; int ret;
...@@ -1341,8 +1346,6 @@ int omap3isp_video_register(struct isp_video *video, struct v4l2_device *vdev) ...@@ -1341,8 +1346,6 @@ int omap3isp_video_register(struct isp_video *video, struct v4l2_device *vdev)
void omap3isp_video_unregister(struct isp_video *video) void omap3isp_video_unregister(struct isp_video *video)
{ {
if (video_is_registered(&video->video)) { if (video_is_registered(&video->video))
media_entity_cleanup(&video->video.entity);
video_unregister_device(&video->video); video_unregister_device(&video->video);
}
} }
...@@ -190,6 +190,7 @@ struct isp_video_fh { ...@@ -190,6 +190,7 @@ struct isp_video_fh {
container_of(q, struct isp_video_fh, queue) container_of(q, struct isp_video_fh, queue)
int omap3isp_video_init(struct isp_video *video, const char *name); int omap3isp_video_init(struct isp_video *video, const char *name);
void omap3isp_video_cleanup(struct isp_video *video);
int omap3isp_video_register(struct isp_video *video, int omap3isp_video_register(struct isp_video *video,
struct v4l2_device *vdev); struct v4l2_device *vdev);
void omap3isp_video_unregister(struct isp_video *video); void omap3isp_video_unregister(struct isp_video *video);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment