aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/omap3isp/ispvideo.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-10-31 18:42:54 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-10-31 18:42:54 -0400
commit1eb63378354ac37b7e27d256bbf84684751bac32 (patch)
tree0775591a2dced778d1ba0bd8a946831e424d02d7 /drivers/media/video/omap3isp/ispvideo.c
parent1a4ceab195e66bce9c1638fdded6d92988100ba4 (diff)
parentbac2dacd5fb9ddad093d7a2dc5ab44e764874821 (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.c22
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 */
283static int isp_video_validate_pipeline(struct isp_pipeline *pipe) 284static 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