]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
media: vivid: place the logic which disables ioctl on a separate function
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 1 Sep 2020 13:07:12 +0000 (15:07 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 7 Sep 2020 13:59:15 +0000 (15:59 +0200)
Move this code out of the long vivid_create_instance() function.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/test-drivers/vivid/vivid-core.c

index d4785da440d978026eb7c384a5146ef4ad532dab..f8cb4133e1cefca5d7b58afe9a4bc115284ff025 100644 (file)
@@ -1001,6 +1001,100 @@ static int vivid_detect_feature_set(struct vivid_dev *dev, int inst,
        return 0;
 }
 
+static void vivid_disable_unused_ioctls(struct vivid_dev *dev,
+                                       bool has_tuner,
+                                       bool has_modulator,
+                                       unsigned in_type_counter[4],
+                                       unsigned out_type_counter[4])
+{
+       /* disable invalid ioctls based on the feature set */
+       if (!dev->has_audio_inputs) {
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_AUDIO);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_AUDIO);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMAUDIO);
+               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_AUDIO);
+               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_AUDIO);
+               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_ENUMAUDIO);
+               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_AUDIO);
+               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_G_AUDIO);
+               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_ENUMAUDIO);
+       }
+       if (!dev->has_audio_outputs) {
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_AUDOUT);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_AUDOUT);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMAUDOUT);
+               v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_AUDOUT);
+               v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_AUDOUT);
+               v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_ENUMAUDOUT);
+               v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_S_AUDOUT);
+               v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_G_AUDOUT);
+               v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_ENUMAUDOUT);
+       }
+       if (!in_type_counter[TV] && !in_type_counter[SVID]) {
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_STD);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_STD);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMSTD);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERYSTD);
+       }
+       if (!out_type_counter[SVID]) {
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_STD);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_STD);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMSTD);
+       }
+       if (!has_tuner && !has_modulator) {
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_FREQUENCY);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_FREQUENCY);
+               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_FREQUENCY);
+               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_FREQUENCY);
+               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_FREQUENCY);
+               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_G_FREQUENCY);
+       }
+       if (!has_tuner) {
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_TUNER);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_TUNER);
+               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_TUNER);
+               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_TUNER);
+               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_TUNER);
+               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_G_TUNER);
+       }
+       if (in_type_counter[HDMI] == 0) {
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_EDID);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_EDID);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_DV_TIMINGS_CAP);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_DV_TIMINGS);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_DV_TIMINGS);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUM_DV_TIMINGS);
+               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERY_DV_TIMINGS);
+       }
+       if (out_type_counter[HDMI] == 0) {
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_EDID);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_DV_TIMINGS_CAP);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_DV_TIMINGS);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_DV_TIMINGS);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_DV_TIMINGS);
+       }
+       if (!dev->has_fb) {
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FBUF);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FBUF);
+               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_OVERLAY);
+       }
+       v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
+       v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
+       v4l2_disable_ioctl(&dev->sdr_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
+       v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
+       v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FREQUENCY);
+       v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FREQUENCY);
+       v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMESIZES);
+       v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMEINTERVALS);
+       v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_FREQUENCY);
+       v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_FREQUENCY);
+       v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_S_FREQUENCY);
+       v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_G_FREQUENCY);
+       v4l2_disable_ioctl(&dev->touch_cap_dev, VIDIOC_S_PARM);
+       v4l2_disable_ioctl(&dev->touch_cap_dev, VIDIOC_ENUM_FRAMESIZES);
+       v4l2_disable_ioctl(&dev->touch_cap_dev, VIDIOC_ENUM_FRAMEINTERVALS);
+}
+
 static int vivid_create_instance(struct platform_device *pdev, int inst)
 {
        static const struct v4l2_dv_timings def_dv_timings =
@@ -1189,92 +1283,8 @@ static int vivid_create_instance(struct platform_device *pdev, int inst)
                        (u32)bt->pixelclock / (htot * vtot));
        }
 
-       /* disable invalid ioctls based on the feature set */
-       if (!dev->has_audio_inputs) {
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_AUDIO);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_AUDIO);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMAUDIO);
-               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_AUDIO);
-               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_AUDIO);
-               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_ENUMAUDIO);
-               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_AUDIO);
-               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_G_AUDIO);
-               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_ENUMAUDIO);
-       }
-       if (!dev->has_audio_outputs) {
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_AUDOUT);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_AUDOUT);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMAUDOUT);
-               v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_AUDOUT);
-               v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_AUDOUT);
-               v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_ENUMAUDOUT);
-               v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_S_AUDOUT);
-               v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_G_AUDOUT);
-               v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_ENUMAUDOUT);
-       }
-       if (!in_type_counter[TV] && !in_type_counter[SVID]) {
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_STD);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_STD);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMSTD);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERYSTD);
-       }
-       if (!out_type_counter[SVID]) {
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_STD);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_STD);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMSTD);
-       }
-       if (!has_tuner && !has_modulator) {
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_FREQUENCY);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_FREQUENCY);
-               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_FREQUENCY);
-               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_FREQUENCY);
-               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_FREQUENCY);
-               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_G_FREQUENCY);
-       }
-       if (!has_tuner) {
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_TUNER);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_TUNER);
-               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_TUNER);
-               v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_TUNER);
-               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_TUNER);
-               v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_G_TUNER);
-       }
-       if (in_type_counter[HDMI] == 0) {
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_EDID);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_EDID);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_DV_TIMINGS_CAP);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_DV_TIMINGS);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_DV_TIMINGS);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUM_DV_TIMINGS);
-               v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERY_DV_TIMINGS);
-       }
-       if (out_type_counter[HDMI] == 0) {
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_EDID);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_DV_TIMINGS_CAP);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_DV_TIMINGS);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_DV_TIMINGS);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_DV_TIMINGS);
-       }
-       if (!dev->has_fb) {
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FBUF);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FBUF);
-               v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_OVERLAY);
-       }
-       v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
-       v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
-       v4l2_disable_ioctl(&dev->sdr_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
-       v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
-       v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FREQUENCY);
-       v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FREQUENCY);
-       v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMESIZES);
-       v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMEINTERVALS);
-       v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_FREQUENCY);
-       v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_FREQUENCY);
-       v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_S_FREQUENCY);
-       v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_G_FREQUENCY);
-       v4l2_disable_ioctl(&dev->touch_cap_dev, VIDIOC_S_PARM);
-       v4l2_disable_ioctl(&dev->touch_cap_dev, VIDIOC_ENUM_FRAMESIZES);
-       v4l2_disable_ioctl(&dev->touch_cap_dev, VIDIOC_ENUM_FRAMEINTERVALS);
+       vivid_disable_unused_ioctls(dev, has_tuner, has_modulator,
+                                   in_type_counter, out_type_counter);
 
        /* configure internal data */
        dev->fmt_cap = &vivid_formats[0];