Xavier - using raw CSI without i2c

Hello,

I am trying to use the MIPI CSI interface on a Xavier AGX in a ‘raw’ mode, ignoring I2C (as our device is configured externally) and also not using the ISP (capturing directly from VI from /dev/video0), similar to what is discussed in these forum threads:

https://devtalk.nvidia.com/default/topic/1049476/jetson-tx1/tx1-csi-without-i2c/
https://devtalk.nvidia.com/default/topic/1025863/jetson-tx2/how-to-grab-pre-configured-csi-video-stream-without-i2c-/

I’m using JetPack 4.3 release, with L4T 32.3.1.

By putting together information from other forum threads and the sensor driver programming guide, I am working through the following steps, in an attempt to modify the imx185 v4l2 driver to talk to my device:

1 - Disable plugin manager, swap to main platform devicetree file, modify imx185 with mode parameters specific to my device
2 - Modify existing driver (either imx185 or ovf5693) to basically pass on initialization / probe steps
3 - get to the point of seeing a /dev/video0 device
4 - Probe the device with v4l2-ctl


Notes on this process so far:

1 - Disable plugin manager, swap to main platform devicetree file, modify imx185 with mode parameters specific to my device:

https://docs.nvidia.com/jetson/l4t/#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide%2Fcamera_sensor_prog.html%23wwpID0E01F0HA
The instructions in the sensor software development guide do not seem to match with the current L4T sources:

From the camera programmer’s guide:
1.Locate and edit the .dtsi file:
/hardware/nvidia/platform/t19x/common/kernel-dts/t19x-common-modules/tegra194-cvb-p2822-0000-a00.dtsi
2.Remove the following line from the file:
#include “tegra194-camera-plugin-manager.dtsi”
This file does not include tegra194-camera-plugin-manager.dtsi, but it does appear to instantiate the plugin-manager. I did not edit this file.

By grepping around the source tree, I commented out the #include “t19x-common-modules/tegra194-camera-plugin-manager.dtsi” in the following 4 files it shows up in (probably not all are needed but just wanted to be safe):

/hardware/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-as-p3668-p2822-0000.dts /hardware/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-as-0006-p2822-0000.dts /hardware/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0006-p2822-0000.dts /hardware/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0001-p2822-0000.dts

From the camera programmer’s guide:
3.Locate and edit the .dtsi file:
/hardware/nvidia/platform/t19x/galen/kernel-dts/common/t194-p2822-0000-a00.dtsi
4.Replace the following line:
#include “tegra194-p2822-camera-modules.dtsi”
With an #include statement specifying the DTSI file for your new device.
I just modified tegra194-p2822-camera-modules.dtsi directly, by changing the status fields in camera modules dtsi, to set status from “disabled” to “okay” for the imx185 and its parent, tca9546_70:

/hardware/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-camera-modules.dtsi: tca9546_70: tca9546@70 { status = "okay"; i2c@0 { ... imx185_cam0: imx185_a@1a { status = "okay"; }; ... };

Next step will be to modify tegra194-p2822-0000-camera-imx185-a00.dtsi and change the parameters to match my device. I haven’t actually changed this file yet, as I wanted to get the /dev/video0 device to show up first.

When I boot with this modified devicetree, I can see the status fields are set to “okay”:
cat /proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx185_a@1a/status
okay
cat /proc/device-tree/i2c@3180000/tca9546@70/status
okay

2 - Modify existing driver (either imx185 or ovf5693) to basically pass on initialization / probe steps

Commented out regmap_read() and regmap_write() calls in imx185.c, added additional dev_info() prints inside imx185_probe().

3 - get to the point of seeing a /dev/video0 device

When I insmod my custom imx185.ko, I can see the messages from imx185_probe() show up in dmesg, and it appears that the probe is completing successfully:
[58857.939383] imx185 30-001a: probing v4l2 sensor
[58857.939780] imx185 30-001a: tegracam sensor driver:imx185_v2.0.6
[58857.940337] imx185 30-001a: passed imx185_board_setup successfully
[58857.940483] imx185 30-001a: Detected IMX185 sensor

However, neither /dev/video* nor /dev/v4l* devices show up in the system.

I also tried changing other parameters in /hardware/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-camera-modules.dtsi from disabled to okay, as I can see the VI, CSI, and camera module0 are used in the imx185 DT:

  • changed host1x port0 and port1 status=“okay”
  • changed cam_module0 status=“okay”
  • changed csi_base top-level status=“okay”; this causes the system to fail to boot

Some questions:

  1. For /dev/video0 to show up, are actual MIPI signals required to be detected, or will it show up without any initial signals?
    Our device will only output MIPI data when its FSYNC is pulsed, which is something I am doing with a userspace application. I can see signals coming out on a scope, but have not tried to ensure all the parameters match what is in the DT yet, as I was thinking I should be able to get /dev/video0 to show up first.

  2. Any suggestions on how to debug the initialization? I see references to v4l2_i2c_subdev_init() in the v4l documentation and other forum posts, but in imx185.c:imx185_probe(), the functions of interest appear to perhaps be: tegracam_device_register() and tegracam_v4l2subdev_register() - maybe this has changed with the most recent release of L4T. In my debugging so far these functions seem to return success values.

Another possible problem would be a mismatch between the DT’s devname/compatible, and driver’s of_device_id /compatible; but as I kept these value the same and they appear to match, I don’t think this is the issue:

323 tcp: tegra-camera-platform {
324 compatible = “nvidia, tegra-camera-platform”;
325 modules {
326 cam_module0: module0 {
327 status = “okay”;
328 cam_module0_drivernode0: drivernode0 {
329 status = “okay”;
330 };
331 cam_module0_drivernode1: drivernode1 {
332 status = “disabled”;
333 pcl_id = “v4l2_lens”;
334 };
335 };

imx185’s parameters are kept as-is:

63 static const struct of_device_id imx185_of_match[] = {                                                                            
64     { .compatible = "nvidia,imx185",},                                                                                            
65     { },                                                                                                                          
66 };


848 MODULE_DEVICE_TABLE(i2c, imx185_id);
849
850 static struct i2c_driver imx185_i2c_driver = {
851 .driver = {
852 .name = “imx185”,
853 .owner = THIS_MODULE,
854 .of_match_table = of_match_ptr(imx185_of_match),
855 },
856 .probe = imx185_probe,
857 .remove = imx185_remove,
858 .id_table = imx185_id,
859 };

Any suggestions would be much appreciated.

Thank you,
Tom

Try to use e3326 as reference to avoid the involve the tca9546_70.

  1. Apply the dt like below. 2. Remove all the i2c access function from the ov5693.c
diff --git a/tegra194-p2888-0001-p2822-0000.dts b/tegra194-p2888-0001-p2822-0000.dts
index f4073db..80a4e89 100644
--- a/tegra194-p2888-0001-p2822-0000.dts
+++ b/tegra194-p2888-0001-p2822-0000.dts
@@ -13,5 +13,4 @@
  * more details.
  */
 #include "common/tegra194-p2888-0001-p2822-0000-common.dtsi"
-#include "common/tegra194-p2822-camera-modules.dtsi"
-#include "t19x-common-modules/tegra194-camera-plugin-manager.dtsi"
+#include "common/tegra194-p2822-0000-camera-e3326-a00.dtsi"

Thank you ShaneCCC, I tried out your suggestion with the ov5693 driver and was able to get /dev/video0 to show up after modifying the DT and commenting out enough of the driver’s I2C access.

I have some additional questions on camera config:

Our camera supports a few modes of operation. One mode is: for a single frame sync pulse, the camera gives a single 1024x1024 frame of 12-bit data per pixel. For this config, I am trying:
active_w = “1024”;
active_h = “1024”;
csi_pixel_bit_depth = “12”

Are these the only parameters to determine size of the data that I expect? Does the VI pad the 12-bit pixel data into 16-bit in memory, or is it packed as 12-bit values?

A second mode is more complex; a single frame sync pulse, the camera gives N ‘frames’ of Height X Width of 12-bit data per pixel. I am not sure how to configure for this mode; should I configure:
active_w = Width * N
active_h = Height * N
Or not multiply the values, and then there will be N frames I need to read out into userspace at once?

This mode also uses approximately 6.7MB of buffer space. On a different SoC, we had a problem where the internal DMA buffer was smaller than this, and the circular buffer was wrapping around, overwriting the first data before userspace could read out a frame.

On the Xavier, I am wondering; what size is the buffer that the VI writes into; and do I need to worry about increasing this, if I am expecting at least 6.7MB of data before the userspace application can read out?

Thank you for any help you can provide.

Tom

Hi tom_adi
Current the VI driver only support streaming mode. For your case it couldn’t support otherwise you rewrite the VI/CSI driver.

Hi ShaneCCC,

I’m a little confused with your answer, could you explain a bit more? Our sensor does run streaming, although the effective frame sync rate can be low (1-2 fps).

Thanks,
Tom

Current driver implement only support the frame output continuous until stop stream command.

Thanks for the reply ShaneCCC; I think I understand the issue.

For now, I’m working to get the camera’s single-frame mode functioning. I’ve removed all but one mode of the ov5693 devicetree, and configured that mode to have a HxW of 1024x1024, and pixel depth of 12bits:

active_w = "1024";
active_h = "1024";
mode_type = "bayer";
pixel_phase = "bggr";
csi_pixel_bit_depth = "12";

I tried to capture a frame using v4l2-ctl, also configuring these parameters there:

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1024,height=1024,pixelformat=RG12 --stream-mmap --stream-count=1 --stream-to=csi.raw --verbose
VIDIOC_QUERYCAP: ok
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Capture:
	Width/Height      : 2592/1944
	Pixel Format      : 'RG12'
	Field             : None
	Bytes per Line    : 5184
	Size Image        : 10077696
	Colorspace        : sRGB
	Transfer Function : Default (maps to sRGB)
	YCbCr/HSV Encoding: Default (maps to ITU-R 601)
	Quantization      : Default (maps to Full Range)
	Flags             : 
VIDIOC_REQBUFS: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_QUERYBUF: ok
VIDIOC_QBUF: ok
VIDIOC_STREAMON: failed: Remote I/O error

For some reason, v4l2-ctl prints out the video format differently; I’m not sure where this configuration is coming from (and it fails with an I/O error).

Also, during boot, I see some sort of a crash after the ov5693 is bound to the VI, see dmesg output (NULL pointer dereference); but the system still boots up, and I see a /dev/video0 device.

[    7.557935] tegra-xusb 3610000.xhci: Firmware timestamp: 2019-07-24 05:47:34 UTC, Version: 60.06 release
[    7.557962] tegra-xusb 3610000.xhci: xHCI Host Controller
[    7.557973] tegra-xusb 3610000.xhci: new USB bus registered, assigned bus number 1
[    7.558642] tegra-xusb 3610000.xhci: hcc params 0x0184ff25 hci version 0x110 quirks 0x00050810
[    7.558683] tegra-xusb 3610000.xhci: irq 471, io mem 0x03610000
[    7.558848] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    7.558851] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    7.558854] usb usb1: Product: xHCI Host Controller
[    7.558856] usb usb1: Manufacturer: Linux 4.9.140-tegra xhci-hcd
[    7.558858] usb usb1: SerialNumber: 3610000.xhci
[    7.559329] hub 1-0:1.0: USB hub found
[    7.559355] hub 1-0:1.0: 4 ports detected
[    7.559640] tegra-xusb 3610000.xhci: xHCI Host Controller
[    7.559646] tegra-xusb 3610000.xhci: new USB bus registered, assigned bus number 2
[    7.559650] tegra-xusb 3610000.xhci: Host supports USB 3.1 Enhanced SuperSpeed
[    7.559787] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[    7.559790] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    7.559793] usb usb2: Product: xHCI Host Controller
[    7.559796] usb usb2: Manufacturer: Linux 4.9.140-tegra xhci-hcd
[    7.559798] usb usb2: SerialNumber: 3610000.xhci
[    7.560105] hub 2-0:1.0: USB hub found
[    7.560126] hub 2-0:1.0: 4 ports detected
[    7.631639] tegra-ivc ivc-bc00000.rtcpu: region 0: iova=0xbfee0000-0xbfefffff size=131072
[    7.631960] tegra-ivc ivc-bc00000.rtcpu:echo@0: echo: ver=0 grp=1 RX[16x64]=0x1000-0x1480 TX[16x64]=0x1480-0x1900
[    7.632182] tegra-ivc ivc-bc00000.rtcpu:dbg@1: dbg: ver=0 grp=1 RX[1x384]=0x1900-0x1b00 TX[1x384]=0x1b00-0x1d00
[    7.632305] tegra-ivc ivc-bc00000.rtcpu:dbg@2: dbg: ver=0 grp=1 RX[1x8192]=0x1d00-0x3d80 TX[1x8192]=0x3d80-0x5e00
[    7.632586] tegra-ivc ivc-bc00000.rtcpu:ivccontrol@3: ivccontrol: ver=0 grp=1 RX[64x320]=0x5e00-0xae80 TX[64x320]=0xae80-0xff00
[    7.632651] tegra-ivc ivc-bc00000.rtcpu:ivccapture@4: ivccapture: ver=0 grp=1 RX[512x64]=0xff00-0x17f80 TX[512x64]=0x17f80-0x20000
[    7.632887] tegra186-cam-rtcpu bc00000.rtcpu: using cam RTCPU IRQ (69)
[    7.632890] tegra186-cam-rtcpu bc00000.rtcpu: tegra_camrtc_mon_create is successful
[    7.633715] tegra186-cam-rtcpu bc00000.rtcpu: firmware version cpu=rce cmd=5 sha1=cf2bef3ad10e437272857b76308abef8ffb80bda
[    7.634124] gpio tegra-gpio wake67 for gpio=48(G:0)
[    7.634182] gpio tegra-gpio-aon wake29 for gpio=36(EE:4)
[    7.634321] input: gpio-keys as /devices/gpio-keys/input/input5
[    7.664189] usb usb1: usb_suspend_both: status 0
[    7.667219] tegra_rtc c2a0000.rtc: setting system clock to 2020-02-25 23:18:52 UTC (1582672732)
[    7.667568] mmcblk mmc0:0001: Card claimed for testing.
[    7.707504] bpmp: mounted debugfs mirror
[    7.713342] vdd-1v8-cvb: disabling
[    7.713346] vdd-1v8-sd: disabling
[    7.713349] vdd-epb-1v0: disabling
[    7.713351] avdd-cam-2v8: disabling
[    7.713353] vdd-sata-1v5: disabling
[    7.713355] vdd-3v3-slt: disabling
[    7.713357] vdd-fan: disabling
[    7.713359] vdd_sys_en: disabling
[    7.713365] ALSA device list:
[    7.713368]   #0: tegra-hda-galen-t194 at 0x3518000 irq 68
[    7.713370]   #1: tegra-snd-t19x-mobile-rt565x
[    7.915674] tegradc 15210000.nvdisplay: vblank syncpt # 15 for dc 1
[    7.921415] tegradc 15210000.nvdisplay: vpulse3 syncpt # 16 for dc 1
[    7.936555] tegradc 15210000.nvdisplay: probed
[    7.936883] tegradc 15210000.nvdisplay: fb registered
[    7.941337] hpd: state 7 (Takeover from bootloader), hpd 0, pending_hpd_evt 1
[    7.944238] tegradc 15220000.nvdisplay: disp2 connected to head2->/host1x/sor1
[    7.944271] tegradc 15220000.nvdisplay: parse_dp_settings: No dp-lt-settings node
[    7.944323] tegradc 15220000.nvdisplay: DT parsed successfully
[    7.944356] tegradc 15220000.nvdisplay: Display dc.ffffff80114d0000 registered with id=2
[    7.944491] tegradc 15220000.nvdisplay: vblank syncpt # 17 for dc 2
[    7.944496] tegradc 15220000.nvdisplay: vpulse3 syncpt # 18 for dc 2
[    7.952917] tegradc 15220000.nvdisplay: probed
[    7.990711] hpd: switching from state 7 (Takeover from bootloader) to state 0 (Reset)
[    7.990734] hpd: state 0 (Reset), hpd 0, pending_hpd_evt 0
[    8.003761] tegradc 15220000.nvdisplay: fb registered
[    8.003764] tegradc 15210000.nvdisplay: blank - powerdown
[    8.006980] hpd: state 7 (Takeover from bootloader), hpd 0, pending_hpd_evt 1
[    8.006983] hpd: switching from state 7 (Takeover from bootloader) to state 0 (Reset)
[    8.006988] hpd: state 0 (Reset), hpd 0, pending_hpd_evt 0
[    8.008501] Freeing unused kernel memory: 8576K
[    8.039185] extcon-disp-state external-connection:disp-state: cable 44 state 0 already set.
[    8.039189] tegradc 15220000.nvdisplay: blank - powerdown
[    8.039203] Extcon DP: HPD disabled
[    8.039208] hpd: hpd_switch 0
[    8.039211] hpd: switching from state 0 (Reset) to state 1 (Check Plug)
[    8.039222] hpd: state 1 (Check Plug), hpd 0, pending_hpd_evt 0
[    8.039226] hpd: switching from state 1 (Check Plug) to state 3 (Disabled)
[    8.079775] extcon-disp-state external-connection:disp-state: cable 44 state 0 already set.
[    8.079789] Extcon DP: HPD disabled
[    8.079798] hpd: hpd_switch 0
[    8.079800] hpd: switching from state 0 (Reset) to state 1 (Check Plug)
[    8.079811] hpd: state 1 (Check Plug), hpd 0, pending_hpd_evt 0
[    8.079815] hpd: switching from state 1 (Check Plug) to state 3 (Disabled)
[    8.139612] Root device found: mmcblk0p1
[    8.141036] Found dev node: /dev/mmcblk0p1
[    8.168332] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
[    8.169335] Rootfs mounted over mmcblk0p1
[    8.187118] Switching from initrd to actual rootfs
[    8.330755] ip_tables: (C) 2000-2006 Netfilter Core Team
[    8.334676] cgroup: cgroup2: unknown option "nsdelegate"
[    8.343720] systemd[1]: systemd 237 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
[    8.344605] systemd[1]: Detected architecture arm64.
[    8.354390] systemd[1]: Set hostname to <xavier01>.
[    8.436771] systemd[1]: File /lib/systemd/system/systemd-journald.service:35 configures an IP firewall (IPAddressDeny=any), but the local system does not support BPF/cgroup based firewalling.
[    8.437058] systemd[1]: Proceeding WITHOUT firewalling in effect! (This warning is only shown for the first loaded unit using IP firewalling.)
[    8.573690] random: systemd: uninitialized urandom read (16 bytes read)
[    8.576934] systemd[1]: Created slice System Slice.
[    8.577638] random: systemd: uninitialized urandom read (16 bytes read)
[    8.577898] systemd[1]: Listening on udev Kernel Socket.
[    8.578181] random: systemd: uninitialized urandom read (16 bytes read)
[    8.578305] systemd[1]: Reached target User and Group Name Lookups.
[    8.578876] systemd[1]: Listening on Syslog Socket.
[    8.579286] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
[    8.636172] gpio tegra-gpio wake44 for gpio=192(Y:0)
[    8.667168] EXT4-fs (mmcblk0p1): re-mounted. Opts: (null)
[    8.993908] systemd-journald[2469]: Received request to flush runtime journal from PID 1
[    9.110286] nvgpu: 17000000.gv11b          nvgpu_nvhost_syncpt_init:291  [INFO]  syncpt_unit_base 60000000 syncpt_unit_size 400000 size 1000

[    9.502131] using random self ethernet address
[    9.502227] using random host ethernet address
[    9.536950] ov5693 2-0036: probing v4l2 sensor.
[    9.536957] ov5693 2-0036: TEST!
[    9.537678] ov5693 2-0036: tegracam sensor driver:ov5693_v2.0.6
[    9.548722] tegra194-vi5 15c10000.vi: subdev ov5693 2-0036 bound
[    9.549173] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[    9.549320] Mem abort info:
[    9.549368]   ESR = 0x96000005
[    9.549428]   Exception class = DABT (current EL), IL = 32 bits
[    9.549521]   SET = 0, FnV = 0
[    9.549572]   EA = 0, S1PTW = 0
[    9.549622] Data abort info:
[    9.549669]   ISV = 0, ISS = 0x00000005
[    9.549733]   CM = 0, WnR = 0
[    9.549786] user pgtable: 4k pages, 39-bit VAs, pgd = ffffffc3d74a2000
[    9.549888] [0000000000000000] *pgd=0000000000000000, *pud=0000000000000000
[    9.550011] Internal error: Oops: 96000005 [#1] PREEMPT SMP
[    9.550108] Modules linked in: ov5693(+) spidev nvgpu binfmt_misc bluedroid_pm ip_tables x_tables
[    9.550298] CPU: 0 PID: 4381 Comm: systemd-udevd Not tainted 4.9.140-tegra #1
[    9.551810] Hardware name: Jetson-AGX (DT)
[    9.556013] task: ffffffc3d965c600 task.stack: ffffffc3d74c4000
[    9.561882] PC is at camera_common_g_fmt+0x44/0xc8
[    9.566777] LR is at camera_common_g_fmt+0x30/0xc8
[    9.571678] pc : [<ffffff8008b45d04>] lr : [<ffffff8008b45cf0>] pstate: 40400045
[    9.579204] sp : ffffffc3d74c76a0
[    9.582446] x29: ffffffc3d74c76a0 x28: 0000000000000018 
[    9.588211] x27: 0000000000000175 x26: 0000000000000002 
[    9.593811] x25: 0000000000000038 x24: 0000000000000001 
[    9.599411] x23: ffffffc3dddcf050 x22: ffffffc3dddcf050 
[    9.604836] x21: ffffffc3dddcf018 x20: 0000000000000000 
[    9.609999] x19: ffffffc3d74c7770 x18: 0000000000000001 
[    9.615773] x17: 0000007fb22511d0 x16: ffffff800825b9a8 
[    9.621290] x15: ffffffffffffffff x14: ffffffc3d74c76a0 
[    9.626973] x13: ffffffc3d74c75a5 x12: ffffffffffffffff 
[    9.632327] x11: ffffffc3d74c7560 x10: ffffffc3d74c7560 
[    9.638174] x9 : 0000000000000002 x8 : 0000000000000002 
[    9.643948] x7 : ffffff8008fb6e08 x6 : 0000000000000090 
[    9.649206] x5 : 000000000000008d x4 : 0000000000000001 
[    9.654543] x3 : 0000000000010000 x2 : 0000000000000000 
[    9.660136] x1 : ffffffc3d965c600 x0 : 0000000000000001 

[    9.666620] Process systemd-udevd (pid: 4381, stack limit = 0xffffffc3d74c4000)
[    9.673787] Call trace:
[    9.676160] [<ffffff8008b45d04>] camera_common_g_fmt+0x44/0xc8
[    9.681754] [<ffffff8008b4a520>] v4l2sd_get_fmt+0x28/0x38
[    9.686832] [<ffffff8008b3497c>] tegra_channel_fmts_bitmap_init+0x13c/0x268
[    9.693305] [<ffffff8008b3614c>] tegra_channel_init_subdevices+0x17c/0x790
[    9.699954] [<ffffff8008b37370>] tegra_vi_graph_notify_complete+0x2e8/0x6e0
[    9.706344] [<ffffff8008b1ab6c>] v4l2_async_test_notify+0x104/0x120
[    9.712206] [<ffffff8008b1ada8>] v4l2_async_register_subdev+0x88/0x100
[    9.718334] [<ffffff8008b4a334>] tegracam_v4l2subdev_register+0xf4/0x1a0
[    9.724732] [<ffffff80011bca4c>] ov5693_probe+0x20c/0x4e8 [ov5693]
[    9.730493] [<ffffff8008ae1534>] i2c_device_probe+0x144/0x258
[    9.736268] [<ffffff800877e418>] driver_probe_device+0xd8/0x408
[    9.742127] [<ffffff800877e824>] __driver_attach+0xdc/0x128
[    9.747743] [<ffffff800877be94>] bus_for_each_dev+0x5c/0xa8
[    9.753415] [<ffffff800877dc18>] driver_attach+0x30/0x40
[    9.758839] [<ffffff800877d64c>] bus_add_driver+0x20c/0x2a8
[    9.764440] [<ffffff800877f75c>] driver_register+0x6c/0x110
[    9.770219] [<ffffff8008ae1c24>] i2c_register_driver+0x4c/0xb0
[    9.776191] [<ffffff80011c40c0>] ov5693_i2c_driver_init+0x18/0x30 [ov5693]
[    9.783253] [<ffffff8008083afc>] do_one_initcall+0x44/0x130
[    9.788771] [<ffffff80081c2ddc>] do_init_module+0x64/0x1a8
[    9.794455] [<ffffff80081581dc>] load_module+0x10a4/0x12d8
[    9.799877] [<ffffff80081586c0>] SyS_finit_module+0xd8/0xf0
[    9.805394] [<ffffff800808391c>] __sys_trace_return+0x0/0x4
[    9.807344] random: crng init done
[    9.807348] random: 7 urandom warning(s) missed due to ratelimiting
[    9.820707] ---[ end trace 76774f2ddcb176e4 ]---
[   10.426792] Mass Storage Function, version: 2009/09/11
[   10.426912] LUN: removable file: (no medium)
[   10.432159] using random self ethernet address
[   10.432267] using random host ethernet address
[   10.468427] rndis0: HOST MAC ea:a9:92:fb:a8:78
[   10.468854] rndis0: MAC ea:a9:92:fb:a8:79
[   10.471408] usb0: HOST MAC ea:a9:92:fb:a8:7a
[   10.471544] usb0: MAC ea:a9:92:fb:a8:7b
[   10.471634] tegra-xudc-new 3550000.xudc: exiting ELPG
[   10.472865] tegra-xudc-new 3550000.xudc: exiting ELPG done
[   10.473013] tegra-xudc-new 3550000.xudc: ep 0 (type: 0, dir: out) enabled
[   10.473166] tegra-xudc-new 3550000.xudc: entering ELPG
[   10.473981] tegra-xudc-new 3550000.xudc: entering ELPG done
[   10.474110] tegra-xudc-new 3550000.xudc: exiting ELPG
[   10.475733] tegra-xudc-new 3550000.xudc: exiting ELPG done
[   10.475876] tegra-xudc-new 3550000.xudc: entering ELPG
[   10.476207] tegra-xudc-new 3550000.xudc: entering ELPG done
[   10.482391] l4tbr0: port 1(rndis0) entered blocking state
[   10.482515] l4tbr0: port 1(rndis0) entered disabled state
[   10.482802] device rndis0 entered promiscuous mode
[   10.489195] IPv6: ADDRCONF(NETDEV_UP): rndis0: link is not ready
[   10.494580] l4tbr0: port 2(usb0) entered blocking state
[   10.494698] l4tbr0: port 2(usb0) entered disabled state
[   10.494974] device usb0 entered promiscuous mode
[   10.499536] IPv6: ADDRCONF(NETDEV_UP): usb0: link is not ready
[   11.040485] nvgpu: 17000000.gv11b                 tpc_pg_mask_store:843  [INFO]  no value change, same mask already set
[   11.191549] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   11.333056] gpio tegra-gpio wake20 for gpio=52(G:4)
[   11.345213] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[   11.805834] zram: Added device: zram0
[   11.809071] zram: Added device: zram1
[   11.809907] zram: Added device: zram2
[   11.810876] zram: Added device: zram3
[   11.811435] zram: Added device: zram4
[   11.812657] zram: Added device: zram5
[   11.813604] zram: Added device: zram6
[   11.814187] zram: Added device: zram7
[   11.830462] zram0: detected capacity change from 0 to 1037008896
[   11.848196] Adding 1012700k swap on /dev/zram0.  Priority:5 extents:1 across:1012700k SS
[   11.850800] zram1: detected capacity change from 0 to 1037008896
[   11.859731] Adding 1012700k swap on /dev/zram1.  Priority:5 extents:1 across:1012700k SS
[   11.861918] zram2: detected capacity change from 0 to 1037008896
[   11.870708] Adding 1012700k swap on /dev/zram2.  Priority:5 extents:1 across:1012700k SS
[   11.873282] zram3: detected capacity change from 0 to 1037008896
[   11.883433] Adding 1012700k swap on /dev/zram3.  Priority:5 extents:1 across:1012700k SS
[   11.886079] zram4: detected capacity change from 0 to 1037008896
[   11.895516] Adding 1012700k swap on /dev/zram4.  Priority:5 extents:1 across:1012700k SS
[   11.897943] zram5: detected capacity change from 0 to 1037008896
[   11.907023] Adding 1012700k swap on /dev/zram5.  Priority:5 extents:1 across:1012700k SS
[   11.909448] zram6: detected capacity change from 0 to 1037008896
[   11.916561] Wake76 for irq=199
[   11.916641] Wake77 for irq=199
[   11.916695] Wake78 for irq=199
[   11.916749] Wake79 for irq=199
[   11.916801] Wake80 for irq=199
[   11.916853] Wake81 for irq=199
[   11.916907] Wake82 for irq=199
[   11.916991] tegra-xusb 3610000.xhci: Upgrade port 0 to USB3.0
[   11.917092] tegra-xusb 3610000.xhci: Upgrade port 1 to USB3.0
[   11.918966] Adding 1012700k swap on /dev/zram6.  Priority:5 extents:1 across:1012700k SS
[   11.921323] zram7: detected capacity change from 0 to 1037008896
[   11.930999] Adding 1012700k swap on /dev/zram7.  Priority:5 extents:1 across:1012700k SS
[   12.148085] usb 1-1: new high-speed USB device number 2 using tegra-xusb
[   12.169930] usb 1-1: New USB device found, idVendor=2109, idProduct=2812
[   12.170068] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   12.170185] usb 1-1: Product: USB2.0 Hub             
[   12.170269] usb 1-1: Manufacturer: VIA Labs, Inc.         
[   12.171241] hub 1-1:1.0: USB hub found
[   12.171566] hub 1-1:1.0: 4 ports detected
[   12.288418] usb 2-3: new SuperSpeed USB device number 2 using tegra-xusb
[   12.320108] usb 1-1: usb_suspend_both: status 0
[   12.320300] usb usb1: usb_suspend_both: status 0
[   12.540635] usb 2-3: New USB device found, idVendor=2109, idProduct=0812
[   12.540783] usb 2-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   12.540906] usb 2-3: Product: USB3.0 Hub             
[   12.540997] usb 2-3: Manufacturer: VIA Labs, Inc.         
[   12.547339] hub 2-3:1.0: USB hub found
[   12.547606] hub 2-3:1.0: 4 ports detected
[   12.742847] tegradc 15200000.nvdisplay: blank - powerdown
[   12.742969] tegradc 15210000.nvdisplay: blank - powerdown
[   12.743061] tegradc 15220000.nvdisplay: blank - powerdown
[   12.936375] usb 2-3.3: new SuperSpeed USB device number 3 using tegra-xusb
[   12.957512] usb 2-3.3: New USB device found, idVendor=0bda, idProduct=8153
[   12.957655] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=6
[   12.957773] usb 2-3.3: Product: USB 10/100/1000 LAN
[   12.957852] usb 2-3.3: Manufacturer: Realtek
[   12.957937] usb 2-3.3: SerialNumber: 000002
[   13.052715] usb 2-3.3: reset SuperSpeed USB device number 3 using tegra-xusb
[   13.121181] r8152 2-3.3:1.0 eth1: v2.09.00 (2017/08/21)
[   13.121301] r8152 2-3.3:1.0 eth1: This product is covered by one or more of the following patents:
               		US6,570,884, US6,115,776, and US6,327,625.

Thank you for any suggestions or comments.

The resolution should be changed but it still 2592x1944, that’s weird.

Width/Height      : 2592/1944

@tom_adi
You need to modify the ov5693.c to remove the mode table too.
I am attached the the files here for your reference.

BTW need to set pixel_phase as rggb if set the bit depth to 12

			pixel_phase = "rggb";
			csi_pixel_bit_depth = "12";

ov5693_mode_tbls.h (1.96 KB)
ov5693.c (20.7 KB)