On 02/06/2021 15:25, Mauro Carvalho Chehab wrote: > The ivtv driver has gained support a long time ago for audio > and video settings via V4L2 API. > > Let's drop support of the duplicated controls implemented > abusing the DVB API. I thought these were removed a long time ago :-) In any case: Acked-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx> Thanks! Hans > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > --- > drivers/media/pci/ivtv/Kconfig | 12 -- > drivers/media/pci/ivtv/ivtv-driver.h | 2 - > drivers/media/pci/ivtv/ivtv-ioctl.c | 221 --------------------------- > 3 files changed, 235 deletions(-) > > diff --git a/drivers/media/pci/ivtv/Kconfig b/drivers/media/pci/ivtv/Kconfig > index c729e54692c4..e70502902b73 100644 > --- a/drivers/media/pci/ivtv/Kconfig > +++ b/drivers/media/pci/ivtv/Kconfig > @@ -29,18 +29,6 @@ config VIDEO_IVTV > To compile this driver as a module, choose M here: the > module will be called ivtv. > > -config VIDEO_IVTV_DEPRECATED_IOCTLS > - bool "enable the DVB ioctls abuse on ivtv driver" > - depends on VIDEO_IVTV > - help > - Enable the usage of the a DVB set of ioctls that were abused by > - IVTV driver for a while. > - > - Those ioctls were not needed for a long time, as IVTV implements > - the proper V4L2 ioctls since kernel 3.3. > - > - If unsure, say N. > - > config VIDEO_IVTV_ALSA > tristate "Conexant cx23415/cx23416 ALSA interface for PCM audio capture" > depends on VIDEO_IVTV && SND > diff --git a/drivers/media/pci/ivtv/ivtv-driver.h b/drivers/media/pci/ivtv/ivtv-driver.h > index e5efe525ad7b..4cf92dee6527 100644 > --- a/drivers/media/pci/ivtv/ivtv-driver.h > +++ b/drivers/media/pci/ivtv/ivtv-driver.h > @@ -57,8 +57,6 @@ > #include <linux/uaccess.h> > #include <asm/byteorder.h> > > -#include <linux/dvb/video.h> > -#include <linux/dvb/audio.h> > #include <media/v4l2-common.h> > #include <media/v4l2-ioctl.h> > #include <media/v4l2-ctrls.h> > diff --git a/drivers/media/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c > index 35dccb31174c..da19b2e95e6c 100644 > --- a/drivers/media/pci/ivtv/ivtv-ioctl.c > +++ b/drivers/media/pci/ivtv/ivtv-ioctl.c > @@ -23,11 +23,6 @@ > #include <media/i2c/saa7127.h> > #include <media/tveeprom.h> > #include <media/v4l2-event.h> > -#ifdef CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS > -#include <linux/compat.h> > -#include <linux/dvb/audio.h> > -#include <linux/dvb/video.h> > -#endif > > u16 ivtv_service2vbi(int type) > { > @@ -1606,38 +1601,11 @@ static int ivtv_try_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder > return ivtv_video_command(itv, id, dec, true); > } > > -#ifdef CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS > -static __inline__ void warn_deprecated_ioctl(const char *name) > -{ > - pr_warn_once("warning: the %s ioctl is deprecated. Don't use it, as it will be removed soon\n", > - name); > -} > - > -#ifdef CONFIG_COMPAT > -struct compat_video_event { > - __s32 type; > - /* unused, make sure to use atomic time for y2038 if it ever gets used */ > - compat_long_t timestamp; > - union { > - video_size_t size; > - unsigned int frame_rate; /* in frames per 1000sec */ > - unsigned char vsync_field; /* unknown/odd/even/progressive */ > - } u; > -}; > -#define VIDEO_GET_EVENT32 _IOR('o', 28, struct compat_video_event) > -#endif > - > -#endif > - > static int ivtv_decoder_ioctls(struct file *filp, unsigned int cmd, void *arg) > { > struct ivtv_open_id *id = fh2id(filp->private_data); > struct ivtv *itv = id->itv; > struct ivtv_stream *s = &itv->streams[id->type]; > -#ifdef CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS > - int nonblocking = filp->f_flags & O_NONBLOCK; > - unsigned long iarg = (unsigned long)arg; > -#endif > > switch (cmd) { > case IVTV_IOC_DMA_FRAME: { > @@ -1669,169 +1637,6 @@ static int ivtv_decoder_ioctls(struct file *filp, unsigned int cmd, void *arg) > if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)) > return -EINVAL; > return ivtv_passthrough_mode(itv, *(int *)arg != 0); > -#ifdef CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS > - case VIDEO_GET_PTS: { > - s64 *pts = arg; > - s64 frame; > - > - warn_deprecated_ioctl("VIDEO_GET_PTS"); > - if (s->type < IVTV_DEC_STREAM_TYPE_MPG) { > - *pts = s->dma_pts; > - break; > - } > - if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)) > - return -EINVAL; > - return ivtv_g_pts_frame(itv, pts, &frame); > - } > - > - case VIDEO_GET_FRAME_COUNT: { > - s64 *frame = arg; > - s64 pts; > - > - warn_deprecated_ioctl("VIDEO_GET_FRAME_COUNT"); > - if (s->type < IVTV_DEC_STREAM_TYPE_MPG) { > - *frame = 0; > - break; > - } > - if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)) > - return -EINVAL; > - return ivtv_g_pts_frame(itv, &pts, frame); > - } > - > - case VIDEO_PLAY: { > - struct v4l2_decoder_cmd dc; > - > - warn_deprecated_ioctl("VIDEO_PLAY"); > - memset(&dc, 0, sizeof(dc)); > - dc.cmd = V4L2_DEC_CMD_START; > - return ivtv_video_command(itv, id, &dc, 0); > - } > - > - case VIDEO_STOP: { > - struct v4l2_decoder_cmd dc; > - > - warn_deprecated_ioctl("VIDEO_STOP"); > - memset(&dc, 0, sizeof(dc)); > - dc.cmd = V4L2_DEC_CMD_STOP; > - dc.flags = V4L2_DEC_CMD_STOP_TO_BLACK | V4L2_DEC_CMD_STOP_IMMEDIATELY; > - return ivtv_video_command(itv, id, &dc, 0); > - } > - > - case VIDEO_FREEZE: { > - struct v4l2_decoder_cmd dc; > - > - warn_deprecated_ioctl("VIDEO_FREEZE"); > - memset(&dc, 0, sizeof(dc)); > - dc.cmd = V4L2_DEC_CMD_PAUSE; > - return ivtv_video_command(itv, id, &dc, 0); > - } > - > - case VIDEO_CONTINUE: { > - struct v4l2_decoder_cmd dc; > - > - warn_deprecated_ioctl("VIDEO_CONTINUE"); > - memset(&dc, 0, sizeof(dc)); > - dc.cmd = V4L2_DEC_CMD_RESUME; > - return ivtv_video_command(itv, id, &dc, 0); > - } > - > - case VIDEO_COMMAND: > - case VIDEO_TRY_COMMAND: { > - /* Note: struct v4l2_decoder_cmd has the same layout as > - struct video_command */ > - struct v4l2_decoder_cmd *dc = arg; > - int try = (cmd == VIDEO_TRY_COMMAND); > - > - if (try) > - warn_deprecated_ioctl("VIDEO_TRY_COMMAND"); > - else > - warn_deprecated_ioctl("VIDEO_COMMAND"); > - return ivtv_video_command(itv, id, dc, try); > - } > - > -#ifdef CONFIG_COMPAT > - case VIDEO_GET_EVENT32: > -#endif > - case VIDEO_GET_EVENT: { > -#ifdef CONFIG_COMPAT > - struct compat_video_event *ev32 = arg; > -#endif > - struct video_event *ev = arg; > - DEFINE_WAIT(wait); > - > - warn_deprecated_ioctl("VIDEO_GET_EVENT"); > - if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)) > - return -EINVAL; > - memset(ev, 0, sizeof(*ev)); > - set_bit(IVTV_F_I_EV_VSYNC_ENABLED, &itv->i_flags); > - > - while (1) { > - if (test_and_clear_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags)) > - ev->type = VIDEO_EVENT_DECODER_STOPPED; > - else if (test_and_clear_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags)) { > - unsigned char vsync_field; > - > - ev->type = VIDEO_EVENT_VSYNC; > - vsync_field = test_bit(IVTV_F_I_EV_VSYNC_FIELD, &itv->i_flags) ? > - VIDEO_VSYNC_FIELD_ODD : VIDEO_VSYNC_FIELD_EVEN; > - if (itv->output_mode == OUT_UDMA_YUV && > - (itv->yuv_info.lace_mode & IVTV_YUV_MODE_MASK) == > - IVTV_YUV_MODE_PROGRESSIVE) { > - vsync_field = VIDEO_VSYNC_FIELD_PROGRESSIVE; > - } > -#ifdef CONFIG_COMPAT > - if (cmd == VIDEO_GET_EVENT32) > - ev32->u.vsync_field = vsync_field; > - else > -#endif > - ev->u.vsync_field = vsync_field; > - } > - if (ev->type) > - return 0; > - if (nonblocking) > - return -EAGAIN; > - /* Wait for event. Note that serialize_lock is locked, > - so to allow other processes to access the driver while > - we are waiting unlock first and later lock again. */ > - mutex_unlock(&itv->serialize_lock); > - prepare_to_wait(&itv->event_waitq, &wait, TASK_INTERRUPTIBLE); > - if (!test_bit(IVTV_F_I_EV_DEC_STOPPED, &itv->i_flags) && > - !test_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags)) > - schedule(); > - finish_wait(&itv->event_waitq, &wait); > - mutex_lock(&itv->serialize_lock); > - if (signal_pending(current)) { > - /* return if a signal was received */ > - IVTV_DEBUG_INFO("User stopped wait for event\n"); > - return -EINTR; > - } > - } > - break; > - } > - > - case VIDEO_SELECT_SOURCE: > - warn_deprecated_ioctl("VIDEO_SELECT_SOURCE"); > - if (!(itv->v4l2_cap & V4L2_CAP_VIDEO_OUTPUT)) > - return -EINVAL; > - return ivtv_passthrough_mode(itv, iarg == VIDEO_SOURCE_DEMUX); > - > - case AUDIO_SET_MUTE: > - warn_deprecated_ioctl("AUDIO_SET_MUTE"); > - itv->speed_mute_audio = iarg; > - return 0; > - > - case AUDIO_CHANNEL_SELECT: > - warn_deprecated_ioctl("AUDIO_CHANNEL_SELECT"); > - if (iarg > AUDIO_STEREO_SWAPPED) > - return -EINVAL; > - return v4l2_ctrl_s_ctrl(itv->ctrl_audio_playback, iarg + 1); > - > - case AUDIO_BILINGUAL_CHANNEL_SELECT: > - warn_deprecated_ioctl("AUDIO_BILINGUAL_CHANNEL_SELECT"); > - if (iarg > AUDIO_STEREO_SWAPPED) > - return -EINVAL; > - return v4l2_ctrl_s_ctrl(itv->ctrl_audio_multilingual_playback, iarg + 1); > -#endif > default: > return -EINVAL; > } > @@ -1846,17 +1651,6 @@ static long ivtv_default(struct file *file, void *fh, bool valid_prio, > if (!valid_prio) { > switch (cmd) { > case IVTV_IOC_PASSTHROUGH_MODE: > -#ifdef CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS > - case VIDEO_PLAY: > - case VIDEO_STOP: > - case VIDEO_FREEZE: > - case VIDEO_CONTINUE: > - case VIDEO_COMMAND: > - case VIDEO_SELECT_SOURCE: > - case AUDIO_SET_MUTE: > - case AUDIO_CHANNEL_SELECT: > - case AUDIO_BILINGUAL_CHANNEL_SELECT: > -#endif > return -EBUSY; > } > } > @@ -1874,21 +1668,6 @@ static long ivtv_default(struct file *file, void *fh, bool valid_prio, > > case IVTV_IOC_DMA_FRAME: > case IVTV_IOC_PASSTHROUGH_MODE: > -#ifdef CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS > - 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: > - case VIDEO_SELECT_SOURCE: > - case AUDIO_SET_MUTE: > - case AUDIO_CHANNEL_SELECT: > - case AUDIO_BILINGUAL_CHANNEL_SELECT: > -#endif > return ivtv_decoder_ioctls(file, cmd, (void *)arg); > > default: >