diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-31 18:42:54 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-31 18:42:54 -0400 |
commit | 1eb63378354ac37b7e27d256bbf84684751bac32 (patch) | |
tree | 0775591a2dced778d1ba0bd8a946831e424d02d7 /drivers/media/video/omap3isp/ispvideo.c | |
parent | 1a4ceab195e66bce9c1638fdded6d92988100ba4 (diff) | |
parent | bac2dacd5fb9ddad093d7a2dc5ab44e764874821 (diff) |
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (348 commits)
[media] pctv452e: Remove bogus code
[media] adv7175: Make use of media bus pixel codes
[media] media: vb2: fix incorrect return value
[media] em28xx: implement VIDIOC_ENUM_FRAMESIZES
[media] cx23885: Stop the risc video fifo before reconfiguring it
[media] cx23885: Avoid incorrect error handling and reporting
[media] cx23885: Avoid stopping the risc engine during buffer timeout
[media] cx23885: Removed a spurious function cx23885_set_scale()
[media] cx23885: v4l2 api compliance, set the audioset field correctly
[media] cx23885: hook the audio selection functions into the main driver
[media] cx23885: add generic functions for dealing with audio input selection
[media] cx23885: fixes related to maximum number of inputs and range checking
[media] cx23885: Initial support for the MPX-885 mini-card
[media] cx25840: Ensure AUDIO6 and AUDIO7 trigger line-in baseband use
[media] cx23885: Enable audio line in support from the back panel
[media] cx23885: Allow the audio mux config to be specified on a per input basis
[media] cx25840: Enable support for non-tuner LR1/LR2 audio inputs
[media] cx23885: Name an internal i2c part and declare a bitfield by name
[media] cx23885: Ensure VBI buffers timeout quickly - bugfix for vbi hangs during streaming
[media] cx23885: remove channel dump diagnostics when a vbi buffer times out
...
Fix up trivial conflicts in drivers/misc/altera-stapl/altera.c (header
file rename vs add)
Diffstat (limited to 'drivers/media/video/omap3isp/ispvideo.c')
-rw-r--r-- | drivers/media/video/omap3isp/ispvideo.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/media/video/omap3isp/ispvideo.c b/drivers/media/video/omap3isp/ispvideo.c index 912ac071b104..0cb8a9f9d675 100644 --- a/drivers/media/video/omap3isp/ispvideo.c +++ b/drivers/media/video/omap3isp/ispvideo.c | |||
@@ -278,7 +278,8 @@ isp_video_far_end(struct isp_video *video) | |||
278 | * limits reported by every block in the pipeline. | 278 | * limits reported by every block in the pipeline. |
279 | * | 279 | * |
280 | * Return 0 if all formats match, or -EPIPE if at least one link is found with | 280 | * Return 0 if all formats match, or -EPIPE if at least one link is found with |
281 | * different formats on its two ends. | 281 | * different formats on its two ends or if the pipeline doesn't start with a |
282 | * video source (either a subdev with no input pad, or a non-subdev entity). | ||
282 | */ | 283 | */ |
283 | static int isp_video_validate_pipeline(struct isp_pipeline *pipe) | 284 | static int isp_video_validate_pipeline(struct isp_pipeline *pipe) |
284 | { | 285 | { |
@@ -329,10 +330,15 @@ static int isp_video_validate_pipeline(struct isp_pipeline *pipe) | |||
329 | * in the middle of it. */ | 330 | * in the middle of it. */ |
330 | shifter_link = subdev == &isp->isp_ccdc.subdev; | 331 | shifter_link = subdev == &isp->isp_ccdc.subdev; |
331 | 332 | ||
332 | /* Retrieve the source format */ | 333 | /* Retrieve the source format. Return an error if no source |
334 | * entity can be found, and stop checking the pipeline if the | ||
335 | * source entity isn't a subdev. | ||
336 | */ | ||
333 | pad = media_entity_remote_source(pad); | 337 | pad = media_entity_remote_source(pad); |
334 | if (pad == NULL || | 338 | if (pad == NULL) |
335 | media_entity_type(pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV) | 339 | return -EPIPE; |
340 | |||
341 | if (media_entity_type(pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV) | ||
336 | break; | 342 | break; |
337 | 343 | ||
338 | subdev = media_entity_to_v4l2_subdev(pad->entity); | 344 | subdev = media_entity_to_v4l2_subdev(pad->entity); |
@@ -1050,6 +1056,14 @@ error: | |||
1050 | if (video->isp->pdata->set_constraints) | 1056 | if (video->isp->pdata->set_constraints) |
1051 | video->isp->pdata->set_constraints(video->isp, false); | 1057 | video->isp->pdata->set_constraints(video->isp, false); |
1052 | media_entity_pipeline_stop(&video->video.entity); | 1058 | media_entity_pipeline_stop(&video->video.entity); |
1059 | /* The DMA queue must be emptied here, otherwise CCDC interrupts | ||
1060 | * that will get triggered the next time the CCDC is powered up | ||
1061 | * will try to access buffers that might have been freed but | ||
1062 | * still present in the DMA queue. This can easily get triggered | ||
1063 | * if the above omap3isp_pipeline_set_stream() call fails on a | ||
1064 | * system with a free-running sensor. | ||
1065 | */ | ||
1066 | INIT_LIST_HEAD(&video->dmaqueue); | ||
1053 | video->queue = NULL; | 1067 | video->queue = NULL; |
1054 | } | 1068 | } |
1055 | 1069 | ||