diff -uprN opencv-3.3.1/modules/videoio/src/cap_v4l.cpp opencv-3.3_csi/modules/videoio/src/cap_v4l.cpp
--- opencv-3.3.1/modules/videoio/src/cap_v4l.cpp	2017-10-23 23:41:12.000000000 +0800
+++ opencv-3.3_csi/modules/videoio/src/cap_v4l.cpp	2018-01-08 17:36:53.120761322 +0800
@@ -439,11 +439,11 @@ static int try_init_v4l2(CvCaptureCAM_V4
 
   /* Query information about current input */
   capture->inp = v4l2_input();
-  capture->inp.index = deviceIndex;
-  if (-1 == ioctl (capture->deviceHandle, VIDIOC_ENUMINPUT, &capture->inp))
+  capture->inp.index = 0;
+  if (-1 == ioctl (capture->deviceHandle, VIDIOC_S_INPUT, &capture->inp))
   {
 #ifndef NDEBUG
-    fprintf(stderr, "(DEBUG) try_init_v4l2 VIDIOC_ENUMINPUT \"%s\": %s\n", deviceName, strerror(errno));
+    fprintf(stderr, "(DEBUG) try_init_v4l2 VIDIOC_S_INPUT \"%s\": %s\n", deviceName, strerror(errno));
 #endif
     icvCloseCAM_V4L(capture);
     return 0;
@@ -646,7 +646,7 @@ static int _capture_V4L2 (CvCaptureCAM_V
        capture->inp.index = CHANNEL_NUMBER;
        /* Set only channel number to CHANNEL_NUMBER */
        /* V4L2 have a status field from selected video mode */
-       if (-1 == ioctl (capture->deviceHandle, VIDIOC_ENUMINPUT, &capture->inp))
+       if (-1 == ioctl (capture->deviceHandle, VIDIOC_S_INPUT, &capture->inp))
        {
          fprintf (stderr, "VIDEOIO ERROR: V4L2: Aren't able to set channel number\n");
          icvCloseCAM_V4L (capture);