[media] v4l2: standardize log start/end message
authorHans Verkuil <hans.verkuil@cisco.com>
Thu, 2 Feb 2012 11:20:53 +0000 (08:20 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 14 Feb 2012 18:38:13 +0000 (16:38 -0200)
For drivers that properly use the v4l2 framework (i.e. set v4l2_dev in the
video_device struct), the start and end messages of VIDIOC_LOG_STATUS are
now generated automatically. People tended to forget these, but the v4l2-ctl
tool scans for these messages, and it also makes it easier to read the status
output in the kernel log.

The cx18, ivtv and bttv drivers were changed since they no longer need to
log these start/end messages.

In saa7164 two empty log_status functions were removed.

Also added a helper function to v4l2-ctrl.c that can be used as the
vidioc_log_status callback if all you need to do is to log the current control
values. This is now used by pwc and vivi.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Cc: Steven Toth <stoth@kernellabs.com>
Cc: Andy Walls <awalls@md.metrocast.net>
Cc: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/bt8xx/bttv-driver.c
drivers/media/video/cx18/cx18-ioctl.c
drivers/media/video/ivtv/ivtv-ioctl.c
drivers/media/video/pwc/pwc-v4l.c
drivers/media/video/saa7164/saa7164-encoder.c
drivers/media/video/saa7164/saa7164-vbi.c
drivers/media/video/v4l2-ctrls.c
drivers/media/video/v4l2-ioctl.c
drivers/media/video/vivi.c
include/media/v4l2-ctrls.h

index 76c301f05095375ec21d6956d00a9d69f8b33da6..e581b37be7893c5071a2a09d25dcae997bbc619b 100644 (file)
@@ -2035,11 +2035,7 @@ static int bttv_log_status(struct file *file, void *f)
        struct bttv_fh *fh  = f;
        struct bttv *btv = fh->btv;
 
-       pr_info("%d: ========  START STATUS CARD #%d  ========\n",
-               btv->c.nr, btv->c.nr);
        bttv_call_all(btv, core, log_status);
-       pr_info("%d: ========  END STATUS CARD   #%d  ========\n",
-               btv->c.nr, btv->c.nr);
        return 0;
 }
 
index 66b1c15c35413b1f092068e6bfb2f4daf7cad7f7..be49f68ddf370d2d71a7df48dfc53b91931e301f 100644 (file)
@@ -1085,8 +1085,6 @@ static int cx18_log_status(struct file *file, void *fh)
        struct v4l2_audio audin;
        int i;
 
-       CX18_INFO("=================  START STATUS CARD #%d  "
-                 "=================\n", cx->instance);
        CX18_INFO("Version: %s  Card: %s\n", CX18_VERSION, cx->card_name);
        if (cx->hw_flags & CX18_HW_TVEEPROM) {
                struct tveeprom tv;
@@ -1120,8 +1118,6 @@ static int cx18_log_status(struct file *file, void *fh)
        CX18_INFO("Read MPEG/VBI: %lld/%lld bytes\n",
                        (long long)cx->mpg_data_received,
                        (long long)cx->vbi_data_inserted);
-       CX18_INFO("==================  END STATUS CARD #%d  "
-                 "==================\n", cx->instance);
        return 0;
 }
 
index 37ac32b53baf86e969135d3891e7f7aceb0ee122..385e003fcfbb882d732fcccd9119dc390879b150 100644 (file)
@@ -1485,8 +1485,6 @@ static int ivtv_log_status(struct file *file, void *fh)
        struct v4l2_audio audin;
        int i;
 
-       IVTV_INFO("=================  START STATUS CARD #%d  =================\n",
-                      itv->instance);
        IVTV_INFO("Version: %s Card: %s\n", IVTV_VERSION, itv->card_name);
        if (itv->hw_flags & IVTV_HW_TVEEPROM) {
                struct tveeprom tv;
@@ -1568,9 +1566,6 @@ static int ivtv_log_status(struct file *file, void *fh)
        IVTV_INFO("Read MPG/VBI: %lld/%lld bytes\n",
                        (long long)itv->mpg_data_received,
                        (long long)itv->vbi_data_inserted);
-       IVTV_INFO("==================  END STATUS CARD #%d  ==================\n",
-                       itv->instance);
-
        return 0;
 }
 
index f495eeb5403aaff31dd66ba582a07d86297752b9..2834e3e65b397226dfccb1c7ae2dba8482aa8aaa 100644 (file)
@@ -1146,14 +1146,6 @@ leave:
        return ret;
 }
 
-static int pwc_log_status(struct file *file, void *priv)
-{
-       struct pwc_device *pdev = video_drvdata(file);
-
-       v4l2_ctrl_handler_log_status(&pdev->ctrl_handler, PWC_NAME);
-       return 0;
-}
-
 const struct v4l2_ioctl_ops pwc_ioctl_ops = {
        .vidioc_querycap                    = pwc_querycap,
        .vidioc_enum_input                  = pwc_enum_input,
@@ -1169,7 +1161,7 @@ const struct v4l2_ioctl_ops pwc_ioctl_ops = {
        .vidioc_dqbuf                       = pwc_dqbuf,
        .vidioc_streamon                    = pwc_streamon,
        .vidioc_streamoff                   = pwc_streamoff,
-       .vidioc_log_status                  = pwc_log_status,
+       .vidioc_log_status                  = v4l2_ctrl_log_status,
        .vidioc_enum_framesizes             = pwc_enum_framesizes,
        .vidioc_enum_frameintervals         = pwc_enum_frameintervals,
        .vidioc_g_parm                      = pwc_g_parm,
index 2fd38a01887ff359b50314fb1d7f68ec86e98480..a9ed686ad08a55acd270675359215f203f24d9c8 100644 (file)
@@ -791,11 +791,6 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
        return 0;
 }
 
-static int vidioc_log_status(struct file *file, void *priv)
-{
-       return 0;
-}
-
 static int fill_queryctrl(struct saa7164_encoder_params *params,
        struct v4l2_queryctrl *c)
 {
@@ -1347,7 +1342,6 @@ static const struct v4l2_ioctl_ops mpeg_ioctl_ops = {
        .vidioc_g_ext_ctrls      = vidioc_g_ext_ctrls,
        .vidioc_s_ext_ctrls      = vidioc_s_ext_ctrls,
        .vidioc_try_ext_ctrls    = vidioc_try_ext_ctrls,
-       .vidioc_log_status       = vidioc_log_status,
        .vidioc_queryctrl        = vidioc_queryctrl,
        .vidioc_g_chip_ident     = saa7164_g_chip_ident,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
index e2e034158718d2d20934dfc0c19138474cff9e7d..273cf807401c616b4294b2d7f0051312941107e3 100644 (file)
@@ -730,11 +730,6 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
        return 0;
 }
 
-static int vidioc_log_status(struct file *file, void *priv)
-{
-       return 0;
-}
-
 static int fill_queryctrl(struct saa7164_vbi_params *params,
        struct v4l2_queryctrl *c)
 {
@@ -1256,7 +1251,6 @@ static const struct v4l2_ioctl_ops vbi_ioctl_ops = {
        .vidioc_g_ext_ctrls      = vidioc_g_ext_ctrls,
        .vidioc_s_ext_ctrls      = vidioc_s_ext_ctrls,
        .vidioc_try_ext_ctrls    = vidioc_try_ext_ctrls,
-       .vidioc_log_status       = vidioc_log_status,
        .vidioc_queryctrl        = vidioc_queryctrl,
 #if 0
        .vidioc_g_chip_ident     = saa7164_g_chip_ident,
index 94fbb5b50c74c33f6351539984e07af66546bfe0..7d58e4d420cd70153f55b095528950b3b524f5bc 100644 (file)
@@ -2382,3 +2382,15 @@ void v4l2_ctrl_del_event(struct v4l2_ctrl *ctrl,
        v4l2_ctrl_unlock(ctrl);
 }
 EXPORT_SYMBOL(v4l2_ctrl_del_event);
+
+int v4l2_ctrl_log_status(struct file *file, void *fh)
+{
+       struct video_device *vfd = video_devdata(file);
+       struct v4l2_fh *vfh = file->private_data;
+
+       if (test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) && vfd->v4l2_dev)
+               v4l2_ctrl_handler_log_status(vfh->ctrl_handler,
+                       vfd->v4l2_dev->name);
+       return 0;
+}
+EXPORT_SYMBOL(v4l2_ctrl_log_status);
index a288ee6fd456174e398fc32ddb4cbe8bcb2cad4d..74cab51a66e08ba7a6726c2ccca5ea8a5e4fad4a 100644 (file)
@@ -1939,7 +1939,13 @@ static long __video_do_ioctl(struct file *file,
        {
                if (!ops->vidioc_log_status)
                        break;
+               if (vfd->v4l2_dev)
+                       pr_info("%s: =================  START STATUS  =================\n",
+                               vfd->v4l2_dev->name);
                ret = ops->vidioc_log_status(file, fh);
+               if (vfd->v4l2_dev)
+                       pr_info("%s: ==================  END STATUS  ==================\n",
+                               vfd->v4l2_dev->name);
                break;
        }
 #ifdef CONFIG_VIDEO_ADV_DEBUG
index 5578c195358514e1c012fe2c04d188986a059885..64a3b5276ccf0a2f5d66696394105c6107505b76 100644 (file)
@@ -959,14 +959,6 @@ static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
        return vb2_streamoff(&dev->vb_vidq, i);
 }
 
-static int vidioc_log_status(struct file *file, void *priv)
-{
-       struct vivi_dev *dev = video_drvdata(file);
-
-       v4l2_ctrl_handler_log_status(&dev->ctrl_handler, dev->v4l2_dev.name);
-       return 0;
-}
-
 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *i)
 {
        return 0;
@@ -1210,7 +1202,7 @@ static const struct v4l2_ioctl_ops vivi_ioctl_ops = {
        .vidioc_s_input       = vidioc_s_input,
        .vidioc_streamon      = vidioc_streamon,
        .vidioc_streamoff     = vidioc_streamoff,
-       .vidioc_log_status    = vidioc_log_status,
+       .vidioc_log_status    = v4l2_ctrl_log_status,
        .vidioc_subscribe_event = vidioc_subscribe_event,
        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
 };
index eeb3df637144cd12ed16209ca07836c70364f36c..5f246c277ff8bbb941306cbe980e6b5416c32640 100644 (file)
@@ -492,6 +492,10 @@ void v4l2_ctrl_add_event(struct v4l2_ctrl *ctrl,
 void v4l2_ctrl_del_event(struct v4l2_ctrl *ctrl,
                struct v4l2_subscribed_event *sev);
 
+/* Can be used as a vidioc_log_status function that just dumps all controls
+   associated with the filehandle. */
+int v4l2_ctrl_log_status(struct file *file, void *fh);
+
 /* Helpers for ioctl_ops. If hdl == NULL then they will all return -EINVAL. */
 int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc);
 int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm);