Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 65754
b: refs/heads/master
c: 3562c43
h: refs/heads/master
v: v3
  • Loading branch information
Hans Verkuil authored and Mauro Carvalho Chehab committed Oct 10, 2007
1 parent 8797cf4 commit 683b8e9
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 32 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: da80be21362376443c6ee9918dfff408e83e0c39
refs/heads/master: 3562c43be8cfd6e300508d7c33acebf3369eacd3
19 changes: 11 additions & 8 deletions trunk/drivers/media/video/ivtv/ivtv-fileops.c
Original file line number Diff line number Diff line change
Expand Up @@ -892,12 +892,20 @@ int ivtv_v4l2_open(struct inode *inode, struct file *filp)
return -EBUSY;
}

if (!test_bit(IVTV_F_I_RADIO_USER, &itv->i_flags)) {
if (atomic_read(&itv->capturing) > 0) {
/* switching to radio while capture is
in progress is not polite */
kfree(item);
return -EBUSY;
}
}
/* Mark that the radio is being used. */
set_bit(IVTV_F_I_RADIO_USER, &itv->i_flags);
/* We have the radio */
ivtv_mute(itv);
/* Switch tuner to radio */
ivtv_call_i2c_clients(itv, AUDC_SET_RADIO, NULL);
/* Mark that the radio is being used. */
set_bit(IVTV_F_I_RADIO_USER, &itv->i_flags);
/* Select the correct audio input (i.e. radio tuner) */
ivtv_audio_set_io(itv);
if (itv->hw_flags & IVTV_HW_SAA711X)
Expand Down Expand Up @@ -931,13 +939,8 @@ void ivtv_mute(struct ivtv *itv)

void ivtv_unmute(struct ivtv *itv)
{
/* initialize or refresh input */
if (atomic_read(&itv->capturing) == 0)
ivtv_vapi(itv, CX2341X_ENC_INITIALIZE_INPUT, 0);

ivtv_msleep_timeout(100, 0);

if (atomic_read(&itv->capturing)) {
ivtv_msleep_timeout(100, 0);
ivtv_vapi(itv, CX2341X_ENC_MISC, 1, 12);
ivtv_vapi(itv, CX2341X_ENC_MUTE_AUDIO, 1, 0);
}
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/media/video/ivtv/ivtv-ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,9 @@ int ivtv_v4l2_ioctls(struct ivtv *itv, struct file *filp, unsigned int cmd, void
IVTV_DEBUG_INFO("Input unchanged\n");
break;
}
if (atomic_read(&itv->capturing) > 0) {
return -EBUSY;
}
IVTV_DEBUG_INFO("Changing input from %d to %d\n",
itv->active_input, inp);

Expand Down
28 changes: 5 additions & 23 deletions trunk/drivers/media/video/ivtv/ivtv-streams.c
Original file line number Diff line number Diff line change
Expand Up @@ -554,9 +554,10 @@ int ivtv_start_v4l2_encode_stream(struct ivtv_stream *s)
clear_bit(IVTV_F_I_EOS, &itv->i_flags);

/* Initialize Digitizer for Capture */
itv->video_dec_func(itv, VIDIOC_STREAMOFF, 0);
ivtv_msleep_timeout(300, 1);
ivtv_vapi(itv, CX2341X_ENC_INITIALIZE_INPUT, 0);

ivtv_msleep_timeout(100, 0);
itv->video_dec_func(itv, VIDIOC_STREAMON, 0);
}

/* begin_capture */
Expand Down Expand Up @@ -713,7 +714,6 @@ int ivtv_stop_v4l2_encode_stream(struct ivtv_stream *s, int gop_end)
int cap_type;
unsigned long then;
int stopmode;
u32 data[CX2341X_MBOX_MAX_DATA];

if (s->v4l2dev == NULL)
return -EINVAL;
Expand Down Expand Up @@ -793,27 +793,9 @@ int ivtv_stop_v4l2_encode_stream(struct ivtv_stream *s, int gop_end)
}

then = jiffies;
/* Make sure DMA is complete */
add_wait_queue(&s->waitq, &wait);
do {
/* check if DMA is pending */
if ((s->type == IVTV_ENC_STREAM_TYPE_MPG) && /* MPG Only */
(read_reg(IVTV_REG_DMASTATUS) & 0x02)) {
/* Check for last DMA */
ivtv_vapi_result(itv, data, CX2341X_ENC_GET_SEQ_END, 2, 0, 0);

if (data[0] == 1) {
IVTV_DEBUG_DMA("%s: Last DMA of size 0x%08x\n", s->name, data[1]);
break;
}
} else if (read_reg(IVTV_REG_DMASTATUS) & 0x02) {
break;
}
} while (!ivtv_msleep_timeout(10, 1) &&
then + msecs_to_jiffies(2000) > jiffies);

set_current_state(TASK_RUNNING);
remove_wait_queue(&s->waitq, &wait);
/* Handle any pending interrupts */
ivtv_msleep_timeout(100, 1);
}

atomic_dec(&itv->capturing);
Expand Down

0 comments on commit 683b8e9

Please sign in to comment.