aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
diff options
context:
space:
mode:
authorMike Isely <isely@pobox.com>2007-11-25 23:48:52 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-01-25 16:03:01 -0500
commit681c739944018d80dbcf7f19997eba97676c7116 (patch)
tree4c2f3ab63bfd852fba0ec87f69fe76e52fa4aa48 /drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
parent493977f016f2ff52fdca38d031c7211b4da658fd (diff)
V4L/DVB (6691): pvrusb2: Rework pipeline state control
This is a new implementation for video pipeline control within the pvrusb2 driver. Actual start/stop of the pipeline is moved to the driver's kernel thread. Pipeline stages are controlled autonomously based on surrounding pipeline or application control state. Kernel thread management is also cleaned up and moved into the internal control structure of the driver, solving a set up / tear down race along the way. Better failure recovery is implemented with this new control strategy. Also with this change comes better control of the cx23416 encoder, building on additional information learned about the peculiarities of controlling this part (this information was the original trigger for this rework). With this change, overall encoder stability should be considerably improved. Yes, this is a large change for this driver, but due to the nature of the feature being worked on, the changes are fairly pervasive and would be difficult to break into smaller pieces with any semblence of step-wise stability. Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/pvrusb2/pvrusb2-video-v4l.c')
-rw-r--r--drivers/media/video/pvrusb2/pvrusb2-video-v4l.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
index 61efa6f02200..767e49022f9b 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-video-v4l.c
@@ -129,7 +129,7 @@ static const struct pvr2_v4l_decoder_ops decoder_ops[] = {
129static void decoder_detach(struct pvr2_v4l_decoder *ctxt) 129static void decoder_detach(struct pvr2_v4l_decoder *ctxt)
130{ 130{
131 ctxt->client->handler = NULL; 131 ctxt->client->handler = NULL;
132 ctxt->hdw->decoder_ctrl = NULL; 132 pvr2_hdw_set_decoder(ctxt->hdw,NULL);
133 kfree(ctxt); 133 kfree(ctxt);
134} 134}
135 135
@@ -217,7 +217,7 @@ int pvr2_i2c_decoder_v4l_setup(struct pvr2_hdw *hdw,
217 ctxt->client = cp; 217 ctxt->client = cp;
218 ctxt->hdw = hdw; 218 ctxt->hdw = hdw;
219 ctxt->stale_mask = (1 << ARRAY_SIZE(decoder_ops)) - 1; 219 ctxt->stale_mask = (1 << ARRAY_SIZE(decoder_ops)) - 1;
220 hdw->decoder_ctrl = &ctxt->ctrl; 220 pvr2_hdw_set_decoder(hdw,&ctxt->ctrl);
221 cp->handler = &ctxt->handler; 221 cp->handler = &ctxt->handler;
222 pvr2_trace(PVR2_TRACE_CHIPS,"i2c 0x%x saa711x V4L2 handler set up", 222 pvr2_trace(PVR2_TRACE_CHIPS,"i2c 0x%x saa711x V4L2 handler set up",
223 cp->client->addr); 223 cp->client->addr);