Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6:
V4L/DVB (10626): ivtv: fix regression in get sliced vbi format
V4L/DVB (10625): ivtv: fix decoder crash regression
V4L/DVB (10619): gspca - main: Destroy the URBs at disconnection time.
V4L/DVB (10572): Revert commit dda06a8e46
V4L/DVB (10533): fix LED status output
V4L/DVB (10532): Correction of Stereo detection/setting and signal strength indication
V4L/DVB (10527): tuner: fix TUV1236D analog/digital setup
V4L/DVB (10516a): zoran: Update MAINTAINERS entry
This commit is contained in:
commit
1024d1c24b
7 changed files with 84 additions and 50 deletions
|
@ -4924,11 +4924,11 @@ L: zd1211-devs@lists.sourceforge.net (subscribers-only)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ZR36067 VIDEO FOR LINUX DRIVER
|
ZR36067 VIDEO FOR LINUX DRIVER
|
||||||
P: Ronald Bultje
|
|
||||||
M: rbultje@ronald.bitfreak.net
|
|
||||||
L: mjpeg-users@lists.sourceforge.net
|
L: mjpeg-users@lists.sourceforge.net
|
||||||
|
L: linux-media@vger.kernel.org
|
||||||
W: http://mjpeg.sourceforge.net/driver-zoran/
|
W: http://mjpeg.sourceforge.net/driver-zoran/
|
||||||
S: Maintained
|
T: Mercurial http://linuxtv.org/hg/v4l-dvb
|
||||||
|
S: Odd Fixes
|
||||||
|
|
||||||
ZS DECSTATION Z85C30 SERIAL DRIVER
|
ZS DECSTATION Z85C30 SERIAL DRIVER
|
||||||
P: Maciej W. Rozycki
|
P: Maciej W. Rozycki
|
||||||
|
|
|
@ -318,7 +318,6 @@ static int simple_std_setup(struct dvb_frontend *fe,
|
||||||
u8 *config, u8 *cb)
|
u8 *config, u8 *cb)
|
||||||
{
|
{
|
||||||
struct tuner_simple_priv *priv = fe->tuner_priv;
|
struct tuner_simple_priv *priv = fe->tuner_priv;
|
||||||
u8 tuneraddr;
|
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* tv norm specific stuff for multi-norm tuners */
|
/* tv norm specific stuff for multi-norm tuners */
|
||||||
|
@ -387,6 +386,7 @@ static int simple_std_setup(struct dvb_frontend *fe,
|
||||||
|
|
||||||
case TUNER_PHILIPS_TUV1236D:
|
case TUNER_PHILIPS_TUV1236D:
|
||||||
{
|
{
|
||||||
|
struct tuner_i2c_props i2c = priv->i2c_props;
|
||||||
/* 0x40 -> ATSC antenna input 1 */
|
/* 0x40 -> ATSC antenna input 1 */
|
||||||
/* 0x48 -> ATSC antenna input 2 */
|
/* 0x48 -> ATSC antenna input 2 */
|
||||||
/* 0x00 -> NTSC antenna input 1 */
|
/* 0x00 -> NTSC antenna input 1 */
|
||||||
|
@ -398,17 +398,15 @@ static int simple_std_setup(struct dvb_frontend *fe,
|
||||||
buffer[1] = 0x04;
|
buffer[1] = 0x04;
|
||||||
}
|
}
|
||||||
/* set to the correct mode (analog or digital) */
|
/* set to the correct mode (analog or digital) */
|
||||||
tuneraddr = priv->i2c_props.addr;
|
i2c.addr = 0x0a;
|
||||||
priv->i2c_props.addr = 0x0a;
|
rc = tuner_i2c_xfer_send(&i2c, &buffer[0], 2);
|
||||||
rc = tuner_i2c_xfer_send(&priv->i2c_props, &buffer[0], 2);
|
|
||||||
if (2 != rc)
|
if (2 != rc)
|
||||||
tuner_warn("i2c i/o error: rc == %d "
|
tuner_warn("i2c i/o error: rc == %d "
|
||||||
"(should be 2)\n", rc);
|
"(should be 2)\n", rc);
|
||||||
rc = tuner_i2c_xfer_send(&priv->i2c_props, &buffer[2], 2);
|
rc = tuner_i2c_xfer_send(&i2c, &buffer[2], 2);
|
||||||
if (2 != rc)
|
if (2 != rc)
|
||||||
tuner_warn("i2c i/o error: rc == %d "
|
tuner_warn("i2c i/o error: rc == %d "
|
||||||
"(should be 2)\n", rc);
|
"(should be 2)\n", rc);
|
||||||
priv->i2c_props.addr = tuneraddr;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -364,16 +364,15 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
|
||||||
enum dmx_success success)
|
enum dmx_success success)
|
||||||
{
|
{
|
||||||
struct dmxdev_filter *dmxdevfilter = filter->priv;
|
struct dmxdev_filter *dmxdevfilter = filter->priv;
|
||||||
unsigned long flags;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (dmxdevfilter->buffer.error) {
|
if (dmxdevfilter->buffer.error) {
|
||||||
wake_up(&dmxdevfilter->buffer.queue);
|
wake_up(&dmxdevfilter->buffer.queue);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
spin_lock_irqsave(&dmxdevfilter->dev->lock, flags);
|
spin_lock(&dmxdevfilter->dev->lock);
|
||||||
if (dmxdevfilter->state != DMXDEV_STATE_GO) {
|
if (dmxdevfilter->state != DMXDEV_STATE_GO) {
|
||||||
spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags);
|
spin_unlock(&dmxdevfilter->dev->lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
del_timer(&dmxdevfilter->timer);
|
del_timer(&dmxdevfilter->timer);
|
||||||
|
@ -392,7 +391,7 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
|
||||||
}
|
}
|
||||||
if (dmxdevfilter->params.sec.flags & DMX_ONESHOT)
|
if (dmxdevfilter->params.sec.flags & DMX_ONESHOT)
|
||||||
dmxdevfilter->state = DMXDEV_STATE_DONE;
|
dmxdevfilter->state = DMXDEV_STATE_DONE;
|
||||||
spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags);
|
spin_unlock(&dmxdevfilter->dev->lock);
|
||||||
wake_up(&dmxdevfilter->buffer.queue);
|
wake_up(&dmxdevfilter->buffer.queue);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -404,12 +403,11 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
|
||||||
{
|
{
|
||||||
struct dmxdev_filter *dmxdevfilter = feed->priv;
|
struct dmxdev_filter *dmxdevfilter = feed->priv;
|
||||||
struct dvb_ringbuffer *buffer;
|
struct dvb_ringbuffer *buffer;
|
||||||
unsigned long flags;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
spin_lock_irqsave(&dmxdevfilter->dev->lock, flags);
|
spin_lock(&dmxdevfilter->dev->lock);
|
||||||
if (dmxdevfilter->params.pes.output == DMX_OUT_DECODER) {
|
if (dmxdevfilter->params.pes.output == DMX_OUT_DECODER) {
|
||||||
spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags);
|
spin_unlock(&dmxdevfilter->dev->lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,7 +417,7 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
|
||||||
else
|
else
|
||||||
buffer = &dmxdevfilter->dev->dvr_buffer;
|
buffer = &dmxdevfilter->dev->dvr_buffer;
|
||||||
if (buffer->error) {
|
if (buffer->error) {
|
||||||
spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags);
|
spin_unlock(&dmxdevfilter->dev->lock);
|
||||||
wake_up(&buffer->queue);
|
wake_up(&buffer->queue);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -430,7 +428,7 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
|
||||||
dvb_ringbuffer_flush(buffer);
|
dvb_ringbuffer_flush(buffer);
|
||||||
buffer->error = ret;
|
buffer->error = ret;
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&dmxdevfilter->dev->lock, flags);
|
spin_unlock(&dmxdevfilter->dev->lock);
|
||||||
wake_up(&buffer->queue);
|
wake_up(&buffer->queue);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -399,9 +399,7 @@ static void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
|
||||||
void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf,
|
void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf,
|
||||||
size_t count)
|
size_t count)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
spin_lock(&demux->lock);
|
||||||
|
|
||||||
spin_lock_irqsave(&demux->lock, flags);
|
|
||||||
|
|
||||||
while (count--) {
|
while (count--) {
|
||||||
if (buf[0] == 0x47)
|
if (buf[0] == 0x47)
|
||||||
|
@ -409,17 +407,16 @@ void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf,
|
||||||
buf += 188;
|
buf += 188;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock_irqrestore(&demux->lock, flags);
|
spin_unlock(&demux->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dvb_dmx_swfilter_packets);
|
EXPORT_SYMBOL(dvb_dmx_swfilter_packets);
|
||||||
|
|
||||||
void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count)
|
void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
int p = 0, i, j;
|
int p = 0, i, j;
|
||||||
|
|
||||||
spin_lock_irqsave(&demux->lock, flags);
|
spin_lock(&demux->lock);
|
||||||
|
|
||||||
if (demux->tsbufp) {
|
if (demux->tsbufp) {
|
||||||
i = demux->tsbufp;
|
i = demux->tsbufp;
|
||||||
|
@ -452,18 +449,17 @@ void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count)
|
||||||
}
|
}
|
||||||
|
|
||||||
bailout:
|
bailout:
|
||||||
spin_unlock_irqrestore(&demux->lock, flags);
|
spin_unlock(&demux->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dvb_dmx_swfilter);
|
EXPORT_SYMBOL(dvb_dmx_swfilter);
|
||||||
|
|
||||||
void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count)
|
void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
int p = 0, i, j;
|
int p = 0, i, j;
|
||||||
u8 tmppack[188];
|
u8 tmppack[188];
|
||||||
|
|
||||||
spin_lock_irqsave(&demux->lock, flags);
|
spin_lock(&demux->lock);
|
||||||
|
|
||||||
if (demux->tsbufp) {
|
if (demux->tsbufp) {
|
||||||
i = demux->tsbufp;
|
i = demux->tsbufp;
|
||||||
|
@ -504,7 +500,7 @@ void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count)
|
||||||
}
|
}
|
||||||
|
|
||||||
bailout:
|
bailout:
|
||||||
spin_unlock_irqrestore(&demux->lock, flags);
|
spin_unlock(&demux->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(dvb_dmx_swfilter_204);
|
EXPORT_SYMBOL(dvb_dmx_swfilter_204);
|
||||||
|
|
|
@ -98,11 +98,16 @@
|
||||||
* - blacklisted KWorld radio in hid-core.c and hid-ids.h
|
* - blacklisted KWorld radio in hid-core.c and hid-ids.h
|
||||||
* 2008-12-03 Mark Lord <mlord@pobox.com>
|
* 2008-12-03 Mark Lord <mlord@pobox.com>
|
||||||
* - add support for DealExtreme USB Radio
|
* - add support for DealExtreme USB Radio
|
||||||
|
* 2009-01-31 Bob Ross <pigiron@gmx.com>
|
||||||
|
* - correction of stereo detection/setting
|
||||||
|
* - correction of signal strength indicator scaling
|
||||||
|
* 2009-01-31 Rick Bronson <rick@efn.org>
|
||||||
|
* Tobias Lorenz <tobias.lorenz@gmx.net>
|
||||||
|
* - add LED status output
|
||||||
*
|
*
|
||||||
* ToDo:
|
* ToDo:
|
||||||
* - add firmware download/update support
|
* - add firmware download/update support
|
||||||
* - RDS support: interrupt mode, instead of polling
|
* - RDS support: interrupt mode, instead of polling
|
||||||
* - add LED status output (check if that's not already done in firmware)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -881,6 +886,30 @@ static int si470x_rds_on(struct si470x_device *radio)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* General Driver Functions - LED_REPORT
|
||||||
|
**************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* si470x_set_led_state - sets the led state
|
||||||
|
*/
|
||||||
|
static int si470x_set_led_state(struct si470x_device *radio,
|
||||||
|
unsigned char led_state)
|
||||||
|
{
|
||||||
|
unsigned char buf[LED_REPORT_SIZE];
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
buf[0] = LED_REPORT;
|
||||||
|
buf[1] = LED_COMMAND;
|
||||||
|
buf[2] = led_state;
|
||||||
|
|
||||||
|
retval = si470x_set_report(radio, (void *) &buf, sizeof(buf));
|
||||||
|
|
||||||
|
return (retval < 0) ? -EINVAL : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* RDS Driver Functions
|
* RDS Driver Functions
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
@ -1385,20 +1414,22 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* stereo indicator == stereo (instead of mono) */
|
/* stereo indicator == stereo (instead of mono) */
|
||||||
if ((radio->registers[STATUSRSSI] & STATUSRSSI_ST) == 1)
|
if ((radio->registers[STATUSRSSI] & STATUSRSSI_ST) == 0)
|
||||||
tuner->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO;
|
|
||||||
else
|
|
||||||
tuner->rxsubchans = V4L2_TUNER_SUB_MONO;
|
tuner->rxsubchans = V4L2_TUNER_SUB_MONO;
|
||||||
|
else
|
||||||
|
tuner->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO;
|
||||||
|
|
||||||
/* mono/stereo selector */
|
/* mono/stereo selector */
|
||||||
if ((radio->registers[POWERCFG] & POWERCFG_MONO) == 1)
|
if ((radio->registers[POWERCFG] & POWERCFG_MONO) == 0)
|
||||||
tuner->audmode = V4L2_TUNER_MODE_MONO;
|
|
||||||
else
|
|
||||||
tuner->audmode = V4L2_TUNER_MODE_STEREO;
|
tuner->audmode = V4L2_TUNER_MODE_STEREO;
|
||||||
|
else
|
||||||
|
tuner->audmode = V4L2_TUNER_MODE_MONO;
|
||||||
|
|
||||||
/* min is worst, max is best; signal:0..0xffff; rssi: 0..0xff */
|
/* min is worst, max is best; signal:0..0xffff; rssi: 0..0xff */
|
||||||
tuner->signal = (radio->registers[STATUSRSSI] & STATUSRSSI_RSSI)
|
/* measured in units of dbµV in 1 db increments (max at ~75 dbµV) */
|
||||||
* 0x0101;
|
tuner->signal = (radio->registers[STATUSRSSI] & STATUSRSSI_RSSI);
|
||||||
|
/* the ideal factor is 0xffff/75 = 873,8 */
|
||||||
|
tuner->signal = (tuner->signal * 873) + (8 * tuner->signal / 10);
|
||||||
|
|
||||||
/* automatic frequency control: -1: freq to low, 1 freq to high */
|
/* automatic frequency control: -1: freq to low, 1 freq to high */
|
||||||
/* AFCRL does only indicate that freq. differs, not if too low/high */
|
/* AFCRL does only indicate that freq. differs, not if too low/high */
|
||||||
|
@ -1632,6 +1663,9 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
|
||||||
/* set initial frequency */
|
/* set initial frequency */
|
||||||
si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */
|
si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */
|
||||||
|
|
||||||
|
/* set led to connect state */
|
||||||
|
si470x_set_led_state(radio, BLINK_GREEN_LED);
|
||||||
|
|
||||||
/* rds buffer allocation */
|
/* rds buffer allocation */
|
||||||
radio->buf_size = rds_buf * 3;
|
radio->buf_size = rds_buf * 3;
|
||||||
radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL);
|
radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL);
|
||||||
|
@ -1715,6 +1749,9 @@ static void si470x_usb_driver_disconnect(struct usb_interface *intf)
|
||||||
cancel_delayed_work_sync(&radio->work);
|
cancel_delayed_work_sync(&radio->work);
|
||||||
usb_set_intfdata(intf, NULL);
|
usb_set_intfdata(intf, NULL);
|
||||||
if (radio->users == 0) {
|
if (radio->users == 0) {
|
||||||
|
/* set led to disconnect state */
|
||||||
|
si470x_set_led_state(radio, BLINK_ORANGE_LED);
|
||||||
|
|
||||||
video_unregister_device(radio->videodev);
|
video_unregister_device(radio->videodev);
|
||||||
kfree(radio->buffer);
|
kfree(radio->buffer);
|
||||||
kfree(radio);
|
kfree(radio);
|
||||||
|
|
|
@ -422,6 +422,7 @@ static void destroy_urbs(struct gspca_dev *gspca_dev)
|
||||||
if (urb == NULL)
|
if (urb == NULL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
BUG_ON(!gspca_dev->dev);
|
||||||
gspca_dev->urb[i] = NULL;
|
gspca_dev->urb[i] = NULL;
|
||||||
if (!gspca_dev->present)
|
if (!gspca_dev->present)
|
||||||
usb_kill_urb(urb);
|
usb_kill_urb(urb);
|
||||||
|
@ -1950,8 +1951,12 @@ void gspca_disconnect(struct usb_interface *intf)
|
||||||
{
|
{
|
||||||
struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
|
struct gspca_dev *gspca_dev = usb_get_intfdata(intf);
|
||||||
|
|
||||||
|
mutex_lock(&gspca_dev->usb_lock);
|
||||||
gspca_dev->present = 0;
|
gspca_dev->present = 0;
|
||||||
|
mutex_unlock(&gspca_dev->usb_lock);
|
||||||
|
|
||||||
|
destroy_urbs(gspca_dev);
|
||||||
|
gspca_dev->dev = NULL;
|
||||||
usb_set_intfdata(intf, NULL);
|
usb_set_intfdata(intf, NULL);
|
||||||
|
|
||||||
/* release the device */
|
/* release the device */
|
||||||
|
|
|
@ -393,7 +393,7 @@ static int ivtv_g_fmt_sliced_vbi_cap(struct file *file, void *fh, struct v4l2_fo
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
v4l2_subdev_call(itv->sd_video, video, s_fmt, fmt);
|
v4l2_subdev_call(itv->sd_video, video, g_fmt, fmt);
|
||||||
vbifmt->service_set = ivtv_get_service_set(vbifmt);
|
vbifmt->service_set = ivtv_get_service_set(vbifmt);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1748,6 +1748,18 @@ static long ivtv_default(struct file *file, void *fh, int cmd, void *arg)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case IVTV_IOC_DMA_FRAME:
|
||||||
|
case VIDEO_GET_PTS:
|
||||||
|
case VIDEO_GET_FRAME_COUNT:
|
||||||
|
case VIDEO_GET_EVENT:
|
||||||
|
case VIDEO_PLAY:
|
||||||
|
case VIDEO_STOP:
|
||||||
|
case VIDEO_FREEZE:
|
||||||
|
case VIDEO_CONTINUE:
|
||||||
|
case VIDEO_COMMAND:
|
||||||
|
case VIDEO_TRY_COMMAND:
|
||||||
|
return ivtv_decoder_ioctls(file, cmd, (void *)arg);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -1790,18 +1802,6 @@ static long ivtv_serialized_ioctl(struct ivtv *itv, struct file *filp,
|
||||||
ivtv_vapi(itv, CX2341X_DEC_SET_AUDIO_MODE, 2, itv->audio_bilingual_mode, itv->audio_stereo_mode);
|
ivtv_vapi(itv, CX2341X_DEC_SET_AUDIO_MODE, 2, itv->audio_bilingual_mode, itv->audio_stereo_mode);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case IVTV_IOC_DMA_FRAME:
|
|
||||||
case VIDEO_GET_PTS:
|
|
||||||
case VIDEO_GET_FRAME_COUNT:
|
|
||||||
case VIDEO_GET_EVENT:
|
|
||||||
case VIDEO_PLAY:
|
|
||||||
case VIDEO_STOP:
|
|
||||||
case VIDEO_FREEZE:
|
|
||||||
case VIDEO_CONTINUE:
|
|
||||||
case VIDEO_COMMAND:
|
|
||||||
case VIDEO_TRY_COMMAND:
|
|
||||||
return ivtv_decoder_ioctls(filp, cmd, (void *)arg);
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue