summaryrefslogtreecommitdiff
path: root/drivers/staging/media/omap4iss/iss_video.h
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2013-10-09 18:52:45 +0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2013-12-11 15:03:51 +0400
commitf3632ba850c70bf24a80295621857166e0c0b14c (patch)
tree7bbd6654d9fa6ade3ac246b148b9c9e146a79915 /drivers/staging/media/omap4iss/iss_video.h
parentaf15d025ecdf35ad1eb438595727d80155d8d28e (diff)
downloadlinux-f3632ba850c70bf24a80295621857166e0c0b14c.tar.xz
[media] v4l: omap4iss: Reset the ISS when the pipeline can't be stopped
When a failure to stop a module in the pipeline is detected, the only way to recover is to reset the ISS. However, as other users can be using a different pipeline with other modules, the ISS can't be reset synchronously with the error detection. Keep track of modules that have failed to stop, and reset the ISS accordingly when the last user releases the last reference to the ISS. Refuse to start streaming on a pipeline that contains a crashed module, as the hardware wouldn't work anyway. Modify the omap4iss_pipeline_set_stream() function to record the new ISS pipeline state only when no error occurs, except when stopping the pipeline in which case the pipeline is still marked as stopped. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/staging/media/omap4iss/iss_video.h')
-rw-r--r--drivers/staging/media/omap4iss/iss_video.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/staging/media/omap4iss/iss_video.h b/drivers/staging/media/omap4iss/iss_video.h
index 2c8d256a87c5..73e1a3419b01 100644
--- a/drivers/staging/media/omap4iss/iss_video.h
+++ b/drivers/staging/media/omap4iss/iss_video.h
@@ -77,6 +77,7 @@ enum iss_pipeline_state {
/*
* struct iss_pipeline - An OMAP4 ISS hardware pipeline
+ * @entities: Bitmask of entities in the pipeline (indexed by entity ID)
* @error: A hardware error occurred during capture
*/
struct iss_pipeline {
@@ -86,6 +87,7 @@ struct iss_pipeline {
enum iss_pipeline_stream_state stream_state;
struct iss_video *input;
struct iss_video *output;
+ unsigned int entities;
atomic_t frame_number;
bool do_propagation; /* of frame number */
bool error;