]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
media: ivtv: get rid of DVB deprecated ioctls
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 1 Jun 2021 09:27:04 +0000 (11:27 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Fri, 4 Jun 2021 06:06:53 +0000 (08:06 +0200)
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.

Acked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/pci/ivtv/Kconfig
drivers/media/pci/ivtv/ivtv-driver.h
drivers/media/pci/ivtv/ivtv-ioctl.c

index c729e54692c473e1d7d74864e3e41cb9373b9a22..e70502902b73c7c61e23babcd572b6723eea5f8a 100644 (file)
@@ -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
index e5efe525ad7bf91dc726c78581d91a5ddce9a75e..4cf92dee65271cea2fd4c7f4949e064cbb3f4e77 100644 (file)
@@ -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>
index 35dccb31174c1e82d77ba72d6a58b7b9af7b34e8..da19b2e95e6cf07dd5e8ee2d990172b2d7c40de1 100644 (file)
 #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: