]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
media: v4l2-dev: convert VFL_TYPE_* into an enum
authorMauro Carvalho Chehab <mchehab@s-opensource.com>
Thu, 28 Sep 2017 22:39:32 +0000 (18:39 -0400)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Mon, 18 Dec 2017 16:49:40 +0000 (11:49 -0500)
Using enums makes easier to document, as it can use kernel-doc
markups. It also allows cross-referencing, with increases the
kAPI readability.

Please notice that now cx88_querycap() has to have a default for
the VFL type, as there are more types than supported by the driver.

Acked-By: Mike Isely <isely@pobox.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Documentation/media/kapi/v4l2-dev.rst
drivers/media/pci/cx88/cx88-blackbird.c
drivers/media/pci/cx88/cx88-video.c
drivers/media/pci/cx88/cx88.h
drivers/media/pci/saa7134/saa7134-video.c
drivers/media/usb/cx231xx/cx231xx-video.c
drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
drivers/media/usb/tm6000/tm6000-video.c
drivers/media/v4l2-core/v4l2-dev.c
include/media/v4l2-dev.h
include/media/v4l2-mediabus.h

index b29aa616c2672267ed62aaccb54cb8d7e4027663..7bb0505b60f1c2c5ac76afb7cd6b5067b54052eb 100644 (file)
@@ -196,11 +196,18 @@ device.
 Which device is registered depends on the type argument. The following
 types exist:
 
-- ``VFL_TYPE_GRABBER``: ``/dev/videoX`` for video input/output devices
-- ``VFL_TYPE_VBI``: ``/dev/vbiX`` for vertical blank data (i.e. closed captions, teletext)
-- ``VFL_TYPE_RADIO``: ``/dev/radioX`` for radio tuners
-- ``VFL_TYPE_SDR``: ``/dev/swradioX`` for Software Defined Radio tuners
-- ``VFL_TYPE_TOUCH``: ``/dev/v4l-touchX`` for touch sensors
+========================== ====================         ==============================
+:c:type:`vfl_devnode_type` Device name          Usage
+========================== ====================         ==============================
+``VFL_TYPE_GRABBER``       ``/dev/videoX``       for video input/output devices
+``VFL_TYPE_VBI``           ``/dev/vbiX``         for vertical blank data (i.e.
+                                                closed captions, teletext)
+``VFL_TYPE_RADIO``         ``/dev/radioX``       for radio tuners
+``VFL_TYPE_SUBDEV``        ``/dev/v4l-subdevX``  for V4L2 subdevices
+``VFL_TYPE_SDR``           ``/dev/swradioX``     for Software Defined Radio
+                                                (SDR) tuners
+``VFL_TYPE_TOUCH``         ``/dev/v4l-touchX``   for touch sensors
+========================== ====================         ==============================
 
 The last argument gives you a certain amount of control over the device
 device node number used (i.e. the X in ``videoX``). Normally you will pass -1
index e3101f04941c0887b9ef6da3c30bbe98611f45ec..0e0952e607952d593a54d2f601edcf35b307db84 100644 (file)
@@ -805,8 +805,7 @@ static int vidioc_querycap(struct file *file, void  *priv,
 
        strcpy(cap->driver, "cx88_blackbird");
        sprintf(cap->bus_info, "PCI:%s", pci_name(dev->pci));
-       cx88_querycap(file, core, cap);
-       return 0;
+       return cx88_querycap(file, core, cap);
 }
 
 static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
index 7d25ecd4404bfa61443117241ed4dfcd8d89e9f1..9be682cdb644f4d67a88a8a45bbaebe1ba7211d7 100644 (file)
@@ -806,8 +806,8 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
        return 0;
 }
 
-void cx88_querycap(struct file *file, struct cx88_core *core,
-                  struct v4l2_capability *cap)
+int cx88_querycap(struct file *file, struct cx88_core *core,
+                 struct v4l2_capability *cap)
 {
        struct video_device *vdev = video_devdata(file);
 
@@ -825,11 +825,14 @@ void cx88_querycap(struct file *file, struct cx88_core *core,
        case VFL_TYPE_VBI:
                cap->device_caps |= V4L2_CAP_VBI_CAPTURE;
                break;
+       default:
+               return -EINVAL;
        }
        cap->capabilities = cap->device_caps | V4L2_CAP_VIDEO_CAPTURE |
                V4L2_CAP_VBI_CAPTURE | V4L2_CAP_DEVICE_CAPS;
        if (core->board.radio.type == CX88_RADIO)
                cap->capabilities |= V4L2_CAP_RADIO;
+       return 0;
 }
 EXPORT_SYMBOL(cx88_querycap);
 
@@ -841,8 +844,7 @@ static int vidioc_querycap(struct file *file, void  *priv,
 
        strcpy(cap->driver, "cx8800");
        sprintf(cap->bus_info, "PCI:%s", pci_name(dev->pci));
-       cx88_querycap(file, core, cap);
-       return 0;
+       return cx88_querycap(file, core, cap);
 }
 
 static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
index 6777926f20f236b5e3959e0e84ff9f062ffdf2da..07a33f02fef433d007cd3d16bae4f7001e184c9f 100644 (file)
@@ -734,7 +734,7 @@ int cx8802_start_dma(struct cx8802_dev    *dev,
 int cx88_enum_input(struct cx88_core *core, struct v4l2_input *i);
 int cx88_set_freq(struct cx88_core  *core, const struct v4l2_frequency *f);
 int cx88_video_mux(struct cx88_core *core, unsigned int input);
-void cx88_querycap(struct file *file, struct cx88_core *core,
-                  struct v4l2_capability *cap);
+int cx88_querycap(struct file *file, struct cx88_core *core,
+                 struct v4l2_capability *cap);
 
 #endif
index 82d2a24644e4afff78c36e07aec9ccf2d0cd218e..1ae5d2dac3bf43c3c09b2719a14efe67d009ab4b 100644 (file)
@@ -1531,6 +1531,8 @@ int saa7134_querycap(struct file *file, void *priv,
        case VFL_TYPE_VBI:
                cap->device_caps |= vbi_caps;
                break;
+       default:
+               return -EINVAL;
        }
        cap->capabilities = radio_caps | video_caps | vbi_caps |
                cap->device_caps | V4L2_CAP_DEVICE_CAPS;
index 226059fc672bd98e391985c5a6c71b1dfb8df90f..936542cb059a7bb70772a8a312d0f8deb6734b30 100644 (file)
@@ -1756,6 +1756,8 @@ static int cx231xx_v4l2_open(struct file *filp)
        case VFL_TYPE_RADIO:
                radio = 1;
                break;
+       default:
+               return -EINVAL;
        }
 
        cx231xx_videodbg("open dev=%s type=%s users=%d\n",
index 4320bda9352df905592921e4522c61349176a954..864830d4c74129a9c038b971dc890feeaa3efcbc 100644 (file)
@@ -153,6 +153,8 @@ static int pvr2_querycap(struct file *file, void *priv, struct v4l2_capability *
        case VFL_TYPE_RADIO:
                cap->device_caps = V4L2_CAP_RADIO;
                break;
+       default:
+               return -EINVAL;
        }
        cap->device_caps |= V4L2_CAP_TUNER | V4L2_CAP_READWRITE;
        return 0;
index a95ea629b2033fafdded5d7d0b0268cb6c3784cb..df040558997e5bf365a1722171dbe02aa6db3c42 100644 (file)
@@ -1313,6 +1313,8 @@ static int __tm6000_open(struct file *file)
        case VFL_TYPE_RADIO:
                radio = 1;
                break;
+       default:
+               return -EINVAL;
        }
 
        /* If more than one user, mutex should be added */
index c647ba6488055a8e8bc9f995d366be067bcb4807..d5e0e536ef049b71c19355e8e1efcf457cbee6a1 100644 (file)
@@ -102,7 +102,7 @@ static DECLARE_BITMAP(devnode_nums[VFL_TYPE_MAX], VIDEO_NUM_DEVICES);
 
 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
 /* Return the bitmap corresponding to vfl_type. */
-static inline unsigned long *devnode_bits(int vfl_type)
+static inline unsigned long *devnode_bits(enum vfl_devnode_type vfl_type)
 {
        /* Any types not assigned to fixed minor ranges must be mapped to
           one single bitmap for the purposes of finding a free node number
@@ -113,7 +113,7 @@ static inline unsigned long *devnode_bits(int vfl_type)
 }
 #else
 /* Return the bitmap corresponding to vfl_type. */
-static inline unsigned long *devnode_bits(int vfl_type)
+static inline unsigned long *devnode_bits(enum vfl_devnode_type vfl_type)
 {
        return devnode_nums[vfl_type];
 }
@@ -821,8 +821,10 @@ static int video_register_media_controller(struct video_device *vdev, int type)
        return 0;
 }
 
-int __video_register_device(struct video_device *vdev, int type, int nr,
-               int warn_if_nr_in_use, struct module *owner)
+int __video_register_device(struct video_device *vdev,
+                           enum vfl_devnode_type type,
+                           int nr, int warn_if_nr_in_use,
+                           struct module *owner)
 {
        int i = 0;
        int ret;
index 82b93e91e2eb6f811829d32add18b1c6aaf72c5f..ecd79332d7716b4808b69f138e7f1eeb1521b295 100644 (file)
 
 #define VIDEO_MAJOR    81
 
-#define VFL_TYPE_GRABBER       0
-#define VFL_TYPE_VBI           1
-#define VFL_TYPE_RADIO         2
-#define VFL_TYPE_SUBDEV                3
-#define VFL_TYPE_SDR           4
-#define VFL_TYPE_TOUCH         5
-#define VFL_TYPE_MAX           6
+/**
+ * enum vfl_devnode_type - type of V4L2 device node
+ *
+ * @VFL_TYPE_GRABBER:  for video input/output devices
+ * @VFL_TYPE_VBI:      for vertical blank data (i.e. closed captions, teletext)
+ * @VFL_TYPE_RADIO:    for radio tuners
+ * @VFL_TYPE_SUBDEV:   for V4L2 subdevices
+ * @VFL_TYPE_SDR:      for Software Defined Radio tuners
+ * @VFL_TYPE_TOUCH:    for touch sensors
+ */
+enum vfl_devnode_type {
+       VFL_TYPE_GRABBER        = 0,
+       VFL_TYPE_VBI            = 1,
+       VFL_TYPE_RADIO          = 2,
+       VFL_TYPE_SUBDEV         = 3,
+       VFL_TYPE_SDR            = 4,
+       VFL_TYPE_TOUCH          = 5,
+};
+#define VFL_TYPE_MAX VFL_TYPE_TOUCH
 
 /* Is this a receiver, transmitter or mem-to-mem? */
 /* Ignored for VFL_TYPE_SUBDEV. */
@@ -189,7 +201,7 @@ struct v4l2_file_operations {
  * @prio: pointer to &struct v4l2_prio_state with device's Priority state.
  *      If NULL, then v4l2_dev->prio will be used.
  * @name: video device name
- * @vfl_type: V4L device type
+ * @vfl_type: V4L device type, as defined by &enum vfl_devnode_type
  * @vfl_dir: V4L receiver, transmitter or m2m
  * @minor: device node 'minor'. It is set to -1 if the registration failed
  * @num: number of the video device node
@@ -237,7 +249,7 @@ struct video_device
 
        /* device info */
        char name[32];
-       int vfl_type;
+       enum vfl_devnode_type vfl_type;
        int vfl_dir;
        int minor;
        u16 num;
@@ -282,7 +294,7 @@ struct video_device
  * __video_register_device - register video4linux devices
  *
  * @vdev: struct video_device to register
- * @type: type of device to register
+ * @type: type of device to register, as defined by &enum vfl_devnode_type
  * @nr:   which device node number is desired:
  *     (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
  * @warn_if_nr_in_use: warn if the desired device node number
@@ -301,29 +313,22 @@ struct video_device
  *
  * Returns 0 on success.
  *
- * Valid values for @type are:
- *
- *     - %VFL_TYPE_GRABBER - A frame grabber
- *     - %VFL_TYPE_VBI - Vertical blank data (undecoded)
- *     - %VFL_TYPE_RADIO - A radio card
- *     - %VFL_TYPE_SUBDEV - A subdevice
- *     - %VFL_TYPE_SDR - Software Defined Radio
- *     - %VFL_TYPE_TOUCH - A touch sensor
- *
  * .. note::
  *
  *     This function is meant to be used only inside the V4L2 core.
  *     Drivers should use video_register_device() or
  *     video_register_device_no_warn().
  */
-int __must_check __video_register_device(struct video_device *vdev, int type,
-               int nr, int warn_if_nr_in_use, struct module *owner);
+int __must_check __video_register_device(struct video_device *vdev,
+                                        enum vfl_devnode_type type,
+                                        int nr, int warn_if_nr_in_use,
+                                        struct module *owner);
 
 /**
  *  video_register_device - register video4linux devices
  *
  * @vdev: struct video_device to register
- * @type: type of device to register
+ * @type: type of device to register, as defined by &enum vfl_devnode_type
  * @nr:   which device node number is desired:
  *     (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
  *
@@ -337,7 +342,8 @@ int __must_check __video_register_device(struct video_device *vdev, int type,
  *     you video_device_release() should be called on failure.
  */
 static inline int __must_check video_register_device(struct video_device *vdev,
-               int type, int nr)
+                                                    enum vfl_devnode_type type,
+                                                    int nr)
 {
        return __video_register_device(vdev, type, nr, 1, vdev->fops->owner);
 }
@@ -346,7 +352,7 @@ static inline int __must_check video_register_device(struct video_device *vdev,
  *  video_register_device_no_warn - register video4linux devices
  *
  * @vdev: struct video_device to register
- * @type: type of device to register
+ * @type: type of device to register, as defined by &enum vfl_devnode_type
  * @nr:   which device node number is desired:
  *     (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
  *
@@ -362,8 +368,9 @@ static inline int __must_check video_register_device(struct video_device *vdev,
  *     is responsible for freeing any data. Usually that means that
  *     you video_device_release() should be called on failure.
  */
-static inline int __must_check video_register_device_no_warn(
-               struct video_device *vdev, int type, int nr)
+static inline int __must_check
+video_register_device_no_warn(struct video_device *vdev,
+                             enum vfl_devnode_type type, int nr)
 {
        return __video_register_device(vdev, type, nr, 0, vdev->fops->owner);
 }
index e5281e1086c48cacbdccef74cb9c5189a8e84921..4d8626c468bc1e35c95d1799f3fbbfff49208509 100644 (file)
@@ -93,6 +93,13 @@ struct v4l2_mbus_config {
        unsigned int flags;
 };
 
+/**
+ * v4l2_fill_pix_format - Ancillary routine that fills a &struct
+ *     v4l2_pix_format fields from a &struct v4l2_mbus_framefmt.
+ *
+ * @pix_fmt:   pointer to &struct v4l2_pix_format to be filled
+ * @mbus_fmt:  pointer to &struct v4l2_mbus_framefmt to be used as model
+ */
 static inline void v4l2_fill_pix_format(struct v4l2_pix_format *pix_fmt,
                                const struct v4l2_mbus_framefmt *mbus_fmt)
 {
@@ -105,6 +112,15 @@ static inline void v4l2_fill_pix_format(struct v4l2_pix_format *pix_fmt,
        pix_fmt->xfer_func = mbus_fmt->xfer_func;
 }
 
+/**
+ * v4l2_fill_pix_format - Ancillary routine that fills a &struct
+ *     v4l2_mbus_framefmt from a &struct v4l2_pix_format and a
+ *     data format code.
+ *
+ * @mbus_fmt:  pointer to &struct v4l2_mbus_framefmt to be filled
+ * @pix_fmt:   pointer to &struct v4l2_pix_format to be used as model
+ * @code:      data format code (from &enum v4l2_mbus_pixelcode)
+ */
 static inline void v4l2_fill_mbus_format(struct v4l2_mbus_framefmt *mbus_fmt,
                           const struct v4l2_pix_format *pix_fmt,
                           u32 code)
@@ -119,6 +135,13 @@ static inline void v4l2_fill_mbus_format(struct v4l2_mbus_framefmt *mbus_fmt,
        mbus_fmt->code = code;
 }
 
+/**
+ * v4l2_fill_pix_format - Ancillary routine that fills a &struct
+ *     v4l2_pix_format_mplane fields from a media bus structure.
+ *
+ * @pix_mp_fmt:        pointer to &struct v4l2_pix_format_mplane to be filled
+ * @mbus_fmt:  pointer to &struct v4l2_mbus_framefmt to be used as model
+ */
 static inline void v4l2_fill_pix_format_mplane(
                                struct v4l2_pix_format_mplane *pix_mp_fmt,
                                const struct v4l2_mbus_framefmt *mbus_fmt)
@@ -132,6 +155,13 @@ static inline void v4l2_fill_pix_format_mplane(
        pix_mp_fmt->xfer_func = mbus_fmt->xfer_func;
 }
 
+/**
+ * v4l2_fill_pix_format - Ancillary routine that fills a &struct
+ *     v4l2_mbus_framefmt from a &struct v4l2_pix_format_mplane.
+ *
+ * @mbus_fmt:  pointer to &struct v4l2_mbus_framefmt to be filled
+ * @pix_mp_fmt:        pointer to &struct v4l2_pix_format_mplane to be used as model
+ */
 static inline void v4l2_fill_mbus_format_mplane(
                                struct v4l2_mbus_framefmt *mbus_fmt,
                                const struct v4l2_pix_format_mplane *pix_mp_fmt)