it make possible use of fine tunable system.
We can set exact verbosity.

Use case:

this will enablle all message in module uvcvideo:
echo "module uvcvideo +p" > /sys/kernel/debug/dynamic_debug/control

this will disable message of function uvc_v4l2_do_ioctl:
echo "func uvc_v4l2_do_ioctl -p" > /sys/kernel/debug/dynamic_debug/control

Signed-off-by: Alexey Fisher <bug-tr...@fisher-privat.net>
---
 drivers/media/video/uvc/uvc_queue.c |    8 ++-
 drivers/media/video/uvc/uvc_v4l2.c  |    2 +
 drivers/media/video/uvc/uvc_video.c |  137 ++++++++++++++++++++++++++++-------
 3 files changed, 120 insertions(+), 27 deletions(-)

diff --git a/drivers/media/video/uvc/uvc_queue.c 
b/drivers/media/video/uvc/uvc_queue.c
index 36f3c58..19e6cba 100644
--- a/drivers/media/video/uvc/uvc_queue.c
+++ b/drivers/media/video/uvc/uvc_queue.c
@@ -137,6 +137,9 @@ int uvc_alloc_buffers(struct uvc_video_queue *queue, 
unsigned int nbuffers,
        void *mem = NULL;
        int ret;
 
+       pr_debug("%s: nbuffers %u; buflength: %u", __func__,
+               nbuffers, buflength);
+
        if (nbuffers > UVC_MAX_VIDEO_BUFFERS)
                nbuffers = UVC_MAX_VIDEO_BUFFERS;
 
@@ -347,8 +350,9 @@ int uvc_dequeue_buffer(struct uvc_video_queue *queue,
        if ((ret = uvc_queue_waiton(buf, nonblocking)) < 0)
                goto done;
 
-       uvc_trace(UVC_TRACE_CAPTURE, "Dequeuing buffer %u (%u, %u bytes).\n",
-               buf->buf.index, buf->state, buf->buf.bytesused);
+       pr_debug("%s: Dequeuing buffer %u (%u, %u/%u bytes).", __func__,
+               buf->buf.index, buf->state,
+               buf->buf.length, buf->buf.bytesused);
 
        switch (buf->state) {
        case UVC_BUF_STATE_ERROR:
diff --git a/drivers/media/video/uvc/uvc_v4l2.c 
b/drivers/media/video/uvc/uvc_v4l2.c
index fa89ebf..3ba2563 100644
--- a/drivers/media/video/uvc/uvc_v4l2.c
+++ b/drivers/media/video/uvc/uvc_v4l2.c
@@ -559,6 +559,8 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned 
int cmd, void *arg)
        struct uvc_streaming *stream = handle->stream;
        long ret = 0;
 
+       pr_debug("%s: cmd: %u", __func__, cmd);
+
        switch (cmd) {
        /* Query capabilities */
        case VIDIOC_QUERYCAP:
diff --git a/drivers/media/video/uvc/uvc_video.c 
b/drivers/media/video/uvc/uvc_video.c
index 43f955e..9a95a62 100644
--- a/drivers/media/video/uvc/uvc_video.c
+++ b/drivers/media/video/uvc/uvc_video.c
@@ -73,6 +73,8 @@ int uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 
unit,
 {
        int ret;
 
+       pr_debug("%s", __func__);
+
        ret = __uvc_query_ctrl(dev, query, unit, intfnum, cs, data, size,
                                UVC_CTRL_CONTROL_TIMEOUT);
        if (ret != size) {
@@ -92,6 +94,8 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
        struct uvc_frame *frame = NULL;
        unsigned int i;
 
+       pr_debug("%s", __func__);
+
        if (ctrl->bFormatIndex <= 0 ||
            ctrl->bFormatIndex > stream->nformats)
                return;
@@ -110,9 +114,13 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming 
*stream,
 
        if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) ||
             (ctrl->dwMaxVideoFrameSize == 0 &&
-             stream->dev->uvc_version < 0x0110))
+             stream->dev->uvc_version < 0x0110)) {
+               pr_debug("%s: rewrite dwMaxVideoFrameSize=%u to %u.",
+                        __func__, ctrl->dwMaxVideoFrameSize,
+                       frame->dwMaxVideoFrameBufferSize);
                ctrl->dwMaxVideoFrameSize =
                        frame->dwMaxVideoFrameBufferSize;
+       }
 
        if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) &&
            stream->dev->quirks & UVC_QUIRK_FIX_BANDWIDTH &&
@@ -146,6 +154,9 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming 
*stream,
                 */
                bandwidth = max_t(u32, bandwidth, 1024);
 
+               pr_debug("%s: rewrite dwMaxPayloadTransferSize=%u to %u.",
+                       __func__, ctrl->dwMaxPayloadTransferSize, bandwidth);
+
                ctrl->dwMaxPayloadTransferSize = bandwidth;
        }
 }
@@ -157,6 +168,8 @@ static int uvc_get_video_ctrl(struct uvc_streaming *stream,
        __u16 size;
        int ret;
 
+       pr_debug("%s", __func__);
+
        size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
        if ((stream->dev->quirks & UVC_QUIRK_PROBE_DEF) &&
                        query == UVC_GET_DEF)
@@ -233,6 +246,20 @@ static int uvc_get_video_ctrl(struct uvc_streaming *stream,
        uvc_fixup_video_ctrl(stream, ctrl);
        ret = 0;
 
+       pr_debug("%s: bmHint: %u; bFormatIndex: %u; bFrameIndex: %u; "
+                "dwFrameInterval: %u; wKeyFrameRate: %u; "
+                "wCompQuality: %u; wCompWindowSize: %u; wDelay: %u; "
+                "dwMaxVideoFrameSize %u; dwMaxPayloadTransferSize: %u",
+               __func__, ctrl->bmHint,
+               ctrl->bFormatIndex,
+               ctrl->bFrameIndex,
+               ctrl->dwFrameInterval,
+               ctrl->wKeyFrameRate,
+               ctrl->wCompQuality,
+               ctrl->wCompWindowSize,
+               ctrl->wDelay,
+               ctrl->dwMaxVideoFrameSize,
+               ctrl->dwMaxPayloadTransferSize);
 out:
        kfree(data);
        return ret;
@@ -245,6 +272,21 @@ static int uvc_set_video_ctrl(struct uvc_streaming *stream,
        __u16 size;
        int ret;
 
+       pr_debug("%s: bmHint: %u; bFormatIndex: %u; bFrameIndex: %u; "
+                "dwFrameInterval: %u; wKeyFrameRate: %u; "
+                "wCompQuality: %u; wCompWindowSize: %u; wDelay: %u; "
+                "dwMaxVideoFrameSize %u; dwMaxPayloadTransferSize: %u",
+               __func__, ctrl->bmHint,
+               ctrl->bFormatIndex,
+               ctrl->bFrameIndex,
+               ctrl->dwFrameInterval,
+               ctrl->wKeyFrameRate,
+               ctrl->wCompQuality,
+               ctrl->wCompWindowSize,
+               ctrl->wDelay,
+               ctrl->dwMaxVideoFrameSize,
+               ctrl->dwMaxPayloadTransferSize);
+
        size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
        data = kzalloc(size, GFP_KERNEL);
        if (data == NULL)
@@ -292,6 +334,8 @@ int uvc_probe_video(struct uvc_streaming *stream,
        unsigned int i;
        int ret;
 
+       pr_debug("%s", __func__);
+
        /* Perform probing. The device should adjust the requested values
         * according to its capabilities. However, some devices, namely the
         * first generation UVC Logitech webcams, don't implement the Video
@@ -349,6 +393,7 @@ done:
 int uvc_commit_video(struct uvc_streaming *stream,
        struct uvc_streaming_control *probe)
 {
+       pr_debug("%s", __func__);
        return uvc_set_video_ctrl(stream, probe, 0);
 }
 
@@ -406,6 +451,8 @@ static int uvc_video_decode_start(struct uvc_streaming 
*stream,
 {
        __u8 fid;
 
+       pr_debug("%s", __func__);
+
        /* Sanity checks:
         * - packet must be at least 2 bytes long
         * - bHeaderLength value must be at least 2 bytes (see above)
@@ -416,8 +463,8 @@ static int uvc_video_decode_start(struct uvc_streaming 
*stream,
 
        /* Skip payloads marked with the error bit ("error frames"). */
        if (data[1] & UVC_STREAM_ERR) {
-               uvc_trace(UVC_TRACE_FRAME, "Dropping payload (error bit "
-                         "set).\n");
+               pr_debug("%s: Dropping payload (error bit "
+                         "set).", __func__);
                return -ENODATA;
        }
 
@@ -449,8 +496,8 @@ static int uvc_video_decode_start(struct uvc_streaming 
*stream,
                struct timespec ts;
 
                if (fid == stream->last_fid) {
-                       uvc_trace(UVC_TRACE_FRAME, "Dropping payload (out of "
-                               "sync).\n");
+                       pr_debug("%s: Dropping payload (out of "
+                               "sync).", __func__);
                        if ((stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID) &&
                            (data[1] & UVC_STREAM_EOF))
                                stream->last_fid ^= UVC_STREAM_FID;
@@ -486,8 +533,8 @@ static int uvc_video_decode_start(struct uvc_streaming 
*stream,
         * previous payload had the EOF bit set.
         */
        if (fid != stream->last_fid && buf->buf.bytesused != 0) {
-               uvc_trace(UVC_TRACE_FRAME, "Frame complete (FID bit "
-                               "toggled).\n");
+               pr_debug("%s: Frame complete (FID bit "
+                               "toggled).", __func__);
                buf->state = UVC_BUF_STATE_READY;
                return -EAGAIN;
        }
@@ -504,6 +551,8 @@ static void uvc_video_decode_data(struct uvc_streaming 
*stream,
        unsigned int maxlen, nbytes;
        void *mem;
 
+       pr_debug("%s", __func__);
+
        if (len <= 0)
                return;
 
@@ -516,7 +565,7 @@ static void uvc_video_decode_data(struct uvc_streaming 
*stream,
 
        /* Complete the current frame if the buffer size was exceeded. */
        if (len > maxlen) {
-               uvc_trace(UVC_TRACE_FRAME, "Frame complete (overflow).\n");
+               pr_debug("%s: Frame complete (overflow).", __func__);
                buf->state = UVC_BUF_STATE_READY;
        }
 }
@@ -524,11 +573,14 @@ static void uvc_video_decode_data(struct uvc_streaming 
*stream,
 static void uvc_video_decode_end(struct uvc_streaming *stream,
                struct uvc_buffer *buf, const __u8 *data, int len)
 {
+
+       pr_debug("%s", __func__);
+
        /* Mark the buffer as done if the EOF marker is set. */
        if (data[1] & UVC_STREAM_EOF && buf->buf.bytesused != 0) {
-               uvc_trace(UVC_TRACE_FRAME, "Frame complete (EOF found).\n");
+               pr_debug("%s: Frame complete (EOF found).", __func__);
                if (data[0] == len)
-                       uvc_trace(UVC_TRACE_FRAME, "EOF in empty payload.\n");
+                       pr_debug("%s: EOF in empty payload.", __func__);
                buf->state = UVC_BUF_STATE_READY;
                if (stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID)
                        stream->last_fid ^= UVC_STREAM_FID;
@@ -549,6 +601,8 @@ static void uvc_video_decode_end(struct uvc_streaming 
*stream,
 static int uvc_video_encode_header(struct uvc_streaming *stream,
                struct uvc_buffer *buf, __u8 *data, int len)
 {
+       pr_debug("%s", __func__);
+
        data[0] = 2;    /* Header length */
        data[1] = UVC_STREAM_EOH | UVC_STREAM_EOF
                | (stream->last_fid & UVC_STREAM_FID);
@@ -562,6 +616,8 @@ static int uvc_video_encode_data(struct uvc_streaming 
*stream,
        unsigned int nbytes;
        void *mem;
 
+       pr_debug("%s", __func__);
+
        /* Copy video data to the URB buffer. */
        mem = queue->mem + buf->buf.m.offset + queue->buf_used;
        nbytes = min((unsigned int)len, buf->buf.bytesused - queue->buf_used);
@@ -587,10 +643,13 @@ static void uvc_video_decode_isoc(struct urb *urb, struct 
uvc_streaming *stream,
        u8 *mem;
        int ret, i;
 
+       pr_debug("%s", __func__);
+
        for (i = 0; i < urb->number_of_packets; ++i) {
                if (urb->iso_frame_desc[i].status < 0) {
-                       uvc_trace(UVC_TRACE_FRAME, "USB isochronous frame "
-                               "lost (%d).\n", urb->iso_frame_desc[i].status);
+                       pr_debug("%s: USB isochronous frame "
+                               "lost (%d).", __func__,
+                               urb->iso_frame_desc[i].status);
                        /* Mark the buffer as faulty. */
                        if (buf != NULL)
                                buf->error = 1;
@@ -635,6 +694,8 @@ static void uvc_video_decode_bulk(struct urb *urb, struct 
uvc_streaming *stream,
        u8 *mem;
        int len, ret;
 
+       pr_debug("%s", __func__);
+
        if (urb->actual_length == 0)
                return;
 
@@ -699,6 +760,8 @@ static void uvc_video_encode_bulk(struct urb *urb, struct 
uvc_streaming *stream,
        u8 *mem = urb->transfer_buffer;
        int len = stream->urb_size, ret;
 
+       pr_debug("%s", __func__);
+
        if (buf == NULL) {
                urb->transfer_buffer_length = 0;
                return;
@@ -744,6 +807,8 @@ static void uvc_video_complete(struct urb *urb)
        unsigned long flags;
        int ret;
 
+       pr_debug("%s", __func__);
+
        switch (urb->status) {
        case 0:
                break;
@@ -783,6 +848,8 @@ static void uvc_free_urb_buffers(struct uvc_streaming 
*stream)
 {
        unsigned int i;
 
+       pr_debug("%s", __func__);
+
        for (i = 0; i < UVC_URBS; ++i) {
                if (stream->urb_buffer[i]) {
                        usb_free_coherent(stream->dev->udev, stream->urb_size,
@@ -811,6 +878,8 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming 
*stream,
        unsigned int npackets;
        unsigned int i;
 
+       pr_debug("%s", __func__);
+
        /* Buffers are already allocated, bail out. */
        if (stream->urb_size)
                return stream->urb_size / psize;
@@ -836,15 +905,15 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming 
*stream,
                }
 
                if (i == UVC_URBS) {
-                       uvc_trace(UVC_TRACE_VIDEO, "Allocated %u URB buffers "
-                               "of %ux%u bytes each.\n", UVC_URBS, npackets,
-                               psize);
+                       pr_debug("%s: Allocated %u URB buffers "
+                               "of %ux%u bytes each.", __func__,
+                               UVC_URBS, npackets, psize);
                        return npackets;
                }
        }
 
-       uvc_trace(UVC_TRACE_VIDEO, "Failed to allocate URB buffers (%u bytes "
-               "per packet).\n", psize);
+       pr_debug("%s: Failed to allocate URB buffers (%u bytes "
+               "per packet).", __func__, psize);
        return 0;
 }
 
@@ -856,6 +925,8 @@ static void uvc_uninit_video(struct uvc_streaming *stream, 
int free_buffers)
        struct urb *urb;
        unsigned int i;
 
+       pr_debug("%s", __func__);
+
        for (i = 0; i < UVC_URBS; ++i) {
                urb = stream->urb[i];
                if (urb == NULL)
@@ -882,6 +953,8 @@ static int uvc_init_video_isoc(struct uvc_streaming *stream,
        u16 psize;
        u32 size;
 
+       pr_debug("%s", __func__);
+
        psize = le16_to_cpu(ep->desc.wMaxPacketSize);
        psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
        size = stream->ctrl.dwMaxVideoFrameSize;
@@ -934,6 +1007,8 @@ static int uvc_init_video_bulk(struct uvc_streaming 
*stream,
        u16 psize;
        u32 size;
 
+       pr_debug("%s", __func__);
+
        psize = le16_to_cpu(ep->desc.wMaxPacketSize) & 0x07ff;
        size = stream->ctrl.dwMaxPayloadTransferSize;
        stream->bulk.max_payload_size = size;
@@ -983,6 +1058,8 @@ static int uvc_init_video(struct uvc_streaming *stream, 
gfp_t gfp_flags)
        unsigned int i;
        int ret;
 
+       pr_debug("%s", __func__);
+
        stream->sequence = -1;
        stream->last_fid = -1;
        stream->bulk.header_size = 0;
@@ -1000,12 +1077,12 @@ static int uvc_init_video(struct uvc_streaming *stream, 
gfp_t gfp_flags)
                bandwidth = stream->ctrl.dwMaxPayloadTransferSize;
 
                if (bandwidth == 0) {
-                       uvc_trace(UVC_TRACE_VIDEO, "Device requested null "
-                               "bandwidth, defaulting to lowest.\n");
+                       pr_debug("%s: Device requested null "
+                               "bandwidth, defaulting to lowest.", __func__);
                        bandwidth = 1;
                } else {
-                       uvc_trace(UVC_TRACE_VIDEO, "Device requested %u "
-                               "B/frame bandwidth.\n", bandwidth);
+                       pr_debug("%s: Device requested %u "
+                               "B/frame bandwidth.", __func__, bandwidth);
                }
 
                for (i = 0; i < intf->num_altsetting; ++i) {
@@ -1029,13 +1106,14 @@ static int uvc_init_video(struct uvc_streaming *stream, 
gfp_t gfp_flags)
                }
 
                if (best_ep == NULL) {
-                       uvc_trace(UVC_TRACE_VIDEO, "No fast enough alt setting "
-                               "for requested bandwidth.\n");
+                       pr_debug("%s: No fast enough alt setting "
+                               "for requested bandwidth.", __func__);
                        return -EIO;
                }
 
-               uvc_trace(UVC_TRACE_VIDEO, "Selecting alternate setting %u "
-                       "(%u B/frame bandwidth).\n", altsetting, best_psize);
+               pr_debug("%s: Selecting alternate setting %u "
+                       "(%u B/frame bandwidth).", __func__,
+                       altsetting, best_psize);
 
                ret = usb_set_interface(stream->dev->udev, intfnum, altsetting);
                if (ret < 0)
@@ -1082,6 +1160,9 @@ static int uvc_init_video(struct uvc_streaming *stream, 
gfp_t gfp_flags)
  */
 int uvc_video_suspend(struct uvc_streaming *stream)
 {
+
+       pr_debug("%s", __func__);
+
        if (!uvc_queue_streaming(&stream->queue))
                return 0;
 
@@ -1103,6 +1184,8 @@ int uvc_video_resume(struct uvc_streaming *stream)
 {
        int ret;
 
+       pr_debug("%s", __func__);
+
        stream->frozen = 0;
 
        ret = uvc_commit_video(stream, &stream->ctrl);
@@ -1143,6 +1226,8 @@ int uvc_video_init(struct uvc_streaming *stream)
        unsigned int i;
        int ret;
 
+       pr_debug("%s", __func__);
+
        if (stream->nformats == 0) {
                uvc_printk(KERN_INFO, "No supported video formats found.\n");
                return -EINVAL;
@@ -1237,6 +1322,8 @@ int uvc_video_enable(struct uvc_streaming *stream, int 
enable)
 {
        int ret;
 
+       pr_debug("%s", __func__);
+
        if (!enable) {
                uvc_uninit_video(stream, 1);
                usb_set_interface(stream->dev->udev, stream->intfnum, 0);
-- 
1.7.1

_______________________________________________
Linux-uvc-devel mailing list
Linux-uvc-devel@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/linux-uvc-devel

Reply via email to