Toshiba TC358743 Linux driver for iMX6

From RidgeRun Developer Connection
Jump to: navigation, search

TC358743 features

Reference: Toshiba TC358743 bridge chip

The Toshiba TC358743 is an HDMI 1.4 to MIPI CSI-2 1.01 bridge chip capable of handling video data up to 1080P at 60 fps.

Supported features:

  • RGB, YCbCr444, YCbCr422: 24-bpp 1080P at 60 fps
  • Audio
  • EDID
  • I2C for chip configuration

All other chip features are not supported at this time. RidgeRun can add support if required.

Enable driver

The driver was developed for kernel 3.0.35-4.1.0, but can be ported to other versions as needed.

1. Apply the add_tc358743_driver.patch to your kernel.

2. Enable the driver from the kernel configuration:

-> Kernel configuration                                                                                                                                       
         -> Device Drivers                                                                                                                                           
           -> Multimedia support (MEDIA_SUPPORT [=y])                                                                                                                
             -> Video capture adapters (VIDEO_CAPTURE_DRIVERS [=y])                                                                                                  
               -> MXC Video For Linux Camera (VIDEO_MXC_CAMERA [=m])                                                                                                 
                 -> MXC Camera/V4L2 PRP Features support
                   -> <M> Toshiba tc358743 Hdmi to CSI 2 bridge                                                                           

3. Compile the kernel

Driver testing

Driver loading

modprobe tc358743_h2c_bridge
modprobe mxc_v4l2_capture

Testing with GStreamer

  • 1080p60 capture and preview

With an 1080p60 HDMI source attached to the device run:

gst-launch mfw_v4lsrc capture-mode=5 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_isink
  • 720p60 capture and preview

With an 720p60 HDMI source attached to the device run:

gst-launch mfw_v4lsrc capture-mode=3 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_isink

Testing tips in case of trouble getting the output

Check for available video devices

run

ls /dev/video*

Output will be something similar to

/# ls /dev/video*
/dev/video0   /dev/video1   /dev/video16  /dev/video17

run ( without connecting the HD Video Source to the HDMI-MIPI card )

gst-launch mfw_v4lsrc device=/dev/video1 ! mfw_v4lsink

You should get colour bars as a output on the HDMI out cable connected from Sabrelite board to the TV Monitor.

and next run the same pipeline mentioned above ( by connecting the HD video Source to the HDMI-MIPI card ).

You should now get the video from HD video Source in the TV monitor instead of colour bars.

Test Results

The following results are for 720p60 and 1080p60 inputs and using a 1080p HDMI monitor.

Codesourcery Toolchain

  • 720p60 capture-preview V4l2 video sink
/ # gst-launch mfw_v4lsrc capture-mode=3 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_v4lsink
/ # ...
perf0: frames: 293 	current: 58.16	 average: 57.42	arm-load: 34
perf0: frames: 351 	current: 57.17	 average: 57.37	arm-load: 14
perf0: frames: 411 	current: 58.97	 average: 57.60	arm-load: 29
perf0: frames: 470 	current: 57.90	 average: 57.64	arm-load: 33
perf0: frames: 529 	current: 57.85	 average: 57.66	arm-load: 33
perf0: frames: 588 	current: 57.89	 average: 57.69	arm-load: 33
perf0: frames: 647 	current: 57.86	 average: 57.70	arm-load: 33
perf0: frames: 707 	current: 58.83	 average: 57.80	arm-load: 33
perf0: frames: 767 	current: 58.80	 average: 57.87	arm-load: 33
perf0: frames: 826 	current: 57.80	 average: 57.87	arm-load: 34
  • 720p60 capture-preview IPU video sink
/ # gst-launch mfw_v4lsrc capture-mode=3 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_isink
/ # ...
perf0: frames: 241 	current: 59.82	 average: 59.83	arm-load: 1
perf0: frames: 301 	current: 59.82	 average: 59.83	arm-load: 1
perf0: frames: 361 	current: 59.82	 average: 59.83	arm-load: 1
perf0: frames: 421 	current: 59.83	 average: 59.83	arm-load: 4
perf0: frames: 481 	current: 59.83	 average: 59.83	arm-load: 0
perf0: frames: 542 	current: 60.78	 average: 59.93	arm-load: 3
perf0: frames: 602 	current: 59.82	 average: 59.92	arm-load: 1
perf0: frames: 662 	current: 59.83	 average: 59.92	arm-load: 2
perf0: frames: 722 	current: 59.84	 average: 59.91	arm-load: 0
perf0: frames: 782 	current: 59.83	 average: 59.90	arm-load: 4
perf0: frames: 842 	current: 59.83	 average: 59.90	arm-load: 1
perf0: frames: 903 	current: 60.79	 average: 59.96	arm-load: 1
perf0: frames: 963 	current: 59.83	 average: 59.95	arm-load: 1
  • 720p60 capture only
/ # gst-launch mfw_v4lsrc capture-mode=3 fps-n=60 ! gstperf ! fakesink
/ # ...
/ # perf0: frames: 62 	current: 61.01	 average: 61.01	arm-load: 9
/ # perf0: frames: 122 	current: 59.99	 average: 60.51	arm-load: 0
/ # perf0: frames: 182 	current: 59.99	 average: 60.34	arm-load: 0
/ # perf0: frames: 242 	current: 59.99	 average: 60.25	arm-load: 0
/ # perf0: frames: 302 	current: 59.99	 average: 60.20	arm-load: 0
/ # perf0: frames: 362 	current: 59.99	 average: 60.16	arm-load: 0
/ # perf0: frames: 422 	current: 59.99	 average: 60.14	arm-load: 0
/ # perf0: frames: 482 	current: 59.99	 average: 60.12	arm-load: 0
  • 720p60 H.264 encoded
/ #  gst-launch mfw_v4lsrc capture-mode=3 fps-n=60 ! vpuenc codec=6 ! gstperf ! fakesink
/ # ...
/ # perf0: frames: 63 	current: 62.54	 average: 62.54	arm-load: 2
/ # perf0: frames: 123 	current: 59.99	 average: 61.27	arm-load: 0
/ # perf0: frames: 183 	current: 59.99	 average: 60.85	arm-load: 0
/ # perf0: frames: 243 	current: 59.99	 average: 60.63	arm-load: 0
/ # perf0: frames: 303 	current: 59.99	 average: 60.51	arm-load: 1
/ # perf0: frames: 363 	current: 59.99	 average: 60.42	arm-load: 8
  • 1080p60 capture-preview mfw_v4lsink
/ # gst-launch mfw_v4lsrc capture-mode=5 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_v4lsink
/ # ...
perf0: frames: 152 	current: 37.97	 average: 36.32	arm-load: 26
perf0: frames: 192 	current: 38.07	 average: 36.67	arm-load: 50
perf0: frames: 232 	current: 38.07	 average: 36.90	arm-load: 25
perf0: frames: 272 	current: 38.00	 average: 37.06	arm-load: 51
perf0: frames: 312 	current: 38.01	 average: 37.18	arm-load: 25
perf0: frames: 352 	current: 38.00	 average: 37.27	arm-load: 50
perf0: frames: 392 	current: 37.97	 average: 37.34	arm-load: 26
perf0: frames: 432 	current: 37.96	 average: 37.40	arm-load: 48
perf0: frames: 472 	current: 37.87	 average: 37.44	arm-load: 26


  • 1080p60 capture-preview IPU video sink
/ # gst-launch mfw_v4lsrc capture-mode=5 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_isink
/ # ...
perf0: frames: 242 	current: 59.55	 average: 59.14	arm-load: 10
perf0: frames: 303 	current: 59.67	 average: 59.24	arm-load: 1
perf0: frames: 365 	current: 60.47	 average: 59.45	arm-load: 7
perf0: frames: 426 	current: 59.55	 average: 59.46	arm-load: 2
perf0: frames: 487 	current: 59.67	 average: 59.49	arm-load: 6
perf0: frames: 549 	current: 60.50	 average: 59.60	arm-load: 2
perf0: frames: 610 	current: 59.61	 average: 59.60	arm-load: 9
perf0: frames: 672 	current: 60.49	 average: 59.68	arm-load: 0
perf0: frames: 733 	current: 59.48	 average: 59.67	arm-load: 0
perf0: frames: 794 	current: 59.63	 average: 59.66	arm-load: 2


  • 1080p60 capture only
/ # gst-launch mfw_v4lsrc capture-mode=5 fps-n=60 ! gstperf ! fakesink
/ # ...
/ # perf0: frames: 61 	current: 60.95	 average: 60.95	arm-load: 6
/ # perf0: frames: 121 	current: 59.94	 average: 60.45	arm-load: 0
/ # perf0: frames: 181 	current: 59.94	 average: 60.28	arm-load: 1
/ # perf0: frames: 241 	current: 59.94	 average: 60.19	arm-load: 0
/ # perf0: frames: 301 	current: 59.94	 average: 60.14	arm-load: 0
/ # perf0: frames: 361 	current: 59.94	 average: 60.11	arm-load: 0
/ # perf0: frames: 421 	current: 59.94	 average: 60.08	arm-load: 3
  • 1080p60 H.264 encoded
/ #  gst-launch mfw_v4lsrc capture-mode=5 fps-n=60 ! vpuenc codec=6 ! gstperf ! fakesink
/ # ...
/ # perf0: frames: 40 	current: 39.24	 average: 39.24	arm-load: 5
/ # perf0: frames: 79 	current: 38.38	 average: 38.81	arm-load: 1
/ # perf0: frames: 118 	current: 38.33	 average: 38.65	arm-load: 4
/ # perf0: frames: 157 	current: 38.40	 average: 38.59	arm-load: 0
/ # perf0: frames: 196 	current: 38.45	 average: 38.56	arm-load: 1
/ # perf0: frames: 235 	current: 38.28	 average: 38.51	arm-load: 0

Linaro Toolchain (Hardware and Software floating point supported)

  • 1080p60 capture-preview using V4L2 Video Sink
/ # gst-launch mfw_v4lsrc capture-mode=5 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_v4lsink
/ # ...
perf0: frames: 595 	current: 59.70	 average: 59.01	arm-load: 25
perf0: frames: 655 	current: 59.72	 average: 59.08	arm-load: 25
perf0: frames: 716 	current: 60.66	 average: 59.21	arm-load: 25
perf0: frames: 776 	current: 59.72	 average: 59.25	arm-load: 25
perf0: frames: 836 	current: 59.76	 average: 59.29	arm-load: 25
perf0: frames: 896 	current: 59.74	 average: 59.32	arm-load: 25
perf0: frames: 956 	current: 59.73	 average: 59.34	arm-load: 26
perf0: frames: 1017 	current: 60.72	 average: 59.42	arm-load: 25
perf0: frames: 1077 	current: 59.61	 average: 59.43	arm-load: 25


  • 1080p60 capture-preview using IPU Video Sink
/ #  gst-launch mfw_v4lsrc capture-mode=5 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_isink
/ # ...
perf0: frames: 485 	current: 60.04	 average: 59.77	arm-load: 0
perf0: frames: 546 	current: 59.71	 average: 59.76	arm-load: 0
perf0: frames: 608 	current: 60.64	 average: 59.85	arm-load: 2
perf0: frames: 669 	current: 60.00	 average: 59.86	arm-load: 2
perf0: frames: 729 	current: 59.16	 average: 59.80	arm-load: 1
perf0: frames: 790 	current: 60.02	 average: 59.82	arm-load: 0
perf0: frames: 851 	current: 60.09	 average: 59.84	arm-load: 1
perf0: frames: 912 	current: 60.10	 average: 59.86	arm-load: 3
perf0: frames: 973 	current: 60.14	 average: 59.87	arm-load: 2
perf0: frames: 1034 	current: 60.19	 average: 59.89	arm-load: 2
  • 720p60 capture-preview using V4L2 Video Sink
/ # gst-launch mfw_v4lsrc capture-mode=3 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_v4lsink
/ # ...
perf0: frames: 240 	current: 59.82	 average: 59.66	arm-load: 20
perf0: frames: 301 	current: 60.76	 average: 59.88	arm-load: 33
perf0: frames: 361 	current: 59.83	 average: 59.87	arm-load: 17
perf0: frames: 421 	current: 59.82	 average: 59.86	arm-load: 19
perf0: frames: 481 	current: 59.78	 average: 59.85	arm-load: 25
perf0: frames: 542 	current: 60.72	 average: 59.95	arm-load: 23
perf0: frames: 602 	current: 59.79	 average: 59.93	arm-load: 24
perf0: frames: 662 	current: 59.79	 average: 59.92	arm-load: 33
  • 720p60 capture-preview using IPU Video Sink
/ # gst-launch mfw_v4lsrc capture-mode=3 fps-n=60 queue-size=7 ! queue max-size-buffers=3 ! gstperf ! mfw_isink
/ # ...
perf0: frames: 299 	current: 59.90	 average: 59.68	arm-load: 2
perf0: frames: 359 	current: 59.94	 average: 59.73	arm-load: 1
perf0: frames: 419 	current: 59.91	 average: 59.75	arm-load: 2
perf0: frames: 480 	current: 59.79	 average: 59.76	arm-load: 1
perf0: frames: 540 	current: 59.96	 average: 59.78	arm-load: 2
perf0: frames: 600 	current: 59.98	 average: 59.80	arm-load: 1
perf0: frames: 661 	current: 59.79	 average: 59.80	arm-load: 2
perf0: frames: 721 	current: 59.96	 average: 59.81	arm-load: 2
perf0: frames: 781 	current: 59.86	 average: 59.82	arm-load: 1
perf0: frames: 842 	current: 60.87	 average: 59.89	arm-load: 1
perf0: frames: 902 	current: 59.97	 average: 59.90	arm-load: 2