This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM625: SK-AM62P-LP Unable to enable V3 Link on Android SDK

Part Number: AM625

Tool/software:

Dear Team, ,

This is related to https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1397621/am625-am625/5348691

Objective of this task : Bring up https://www.arducam.com/product/arducam-v3link-camera-kit-for-ti-development-boards/ with imx219 sensor for capturing RAW frames

Steps 1:

Created a patch as attached. v3-imx219.patch

diff --git a/BUILD.bazel b/BUILD.bazel
index 98e28fa43..ee55dacaa 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -765,6 +765,11 @@ kernel_build(
         "ti/k3-am62-lp-sk-microtips-mf101hie-panel.dtbo",
         "ti/k3-am62p5-sk-mcan.dtbo",
         "ti/k3-am62p5-sk-microtips-mf101hie-panel.dtbo",
+	"ti/k3-am62x-sk-csi2-v3link-fusion.dtbo",
+	"ti/k3-v3link-imx219-0-0.dtbo",
+	"ti/k3-v3link-imx219-0-1.dtbo",
+	"ti/k3-v3link-imx219-0-2.dtbo",
+	"ti/k3-v3link-imx219-0-3.dtbo",
     ],
     outs = [
         "Image",
@@ -789,6 +794,11 @@ kernel_build(
         "k3-am625-sk-m2-cc3301.dtbo",
         "k3-am62p5-sk-m2-cc3301.dtbo",
         "k3-am625-sk-wl1837.dtbo",
+	"k3-am62x-sk-csi2-v3link-fusion.dtbo",
+	"k3-v3link-imx219-0-0.dtbo",
+	"k3-v3link-imx219-0-1.dtbo",
+	"k3-v3link-imx219-0-2.dtbo",
+	"k3-v3link-imx219-0-3.dtbo",
         "vmlinux",
         "vmlinux.symvers",
     ],
@@ -845,6 +855,8 @@ kernel_build(
         "drivers/leds/leds-tlc591xx.ko",
         "drivers/mailbox/omap-mailbox.ko",
         "drivers/mailbox/ti-msgmgr.ko",
+	"drivers/media/i2c/ds90ub960.ko",
+	"drivers/media/i2c/imx219.ko",
         "drivers/media/i2c/ov5640.ko",
         "drivers/media/platform/cadence/cdns-csi2rx.ko",
         "drivers/media/platform/chips-media/wave5/wave5.ko",
@@ -966,6 +978,11 @@ kernel_images(
         ":ti/k3-am625-sk-m2-cc3301.dtbo",
         ":ti/k3-am62p5-sk-m2-cc3301.dtbo",
         ":ti/k3-am625-sk-wl1837.dtbo",
+	":ti/k3-am62x-sk-csi2-v3link-fusion.dtbo",
+	":ti/k3-v3link-imx219-0-0.dtbo",
+	":ti/k3-v3link-imx219-0-1.dtbo",
+	":ti/k3-v3link-imx219-0-2.dtbo",
+	":ti/k3-v3link-imx219-0-3.dtbo",
     ]
 )
 
diff --git a/arch/arm64/boot/dts/ti/k3-am62p-main.dtsi b/arch/arm64/boot/dts/ti/k3-am62p-main.dtsi
index e2fb5fcd8..ab33d590e 100644
--- a/arch/arm64/boot/dts/ti/k3-am62p-main.dtsi
+++ b/arch/arm64/boot/dts/ti/k3-am62p-main.dtsi
@@ -1152,27 +1152,27 @@
 
 				csi0_port0: port@0 {
 					reg = <0>;
-					status = "disabled";
+					status = "enabled";
 				};
 
 				csi0_port1: port@1 {
 					reg = <1>;
-					status = "disabled";
+					status = "enabled";
 				};
 
 				csi0_port2: port@2 {
 					reg = <2>;
-					status = "disabled";
+					status = "enabled";
 				};
 
 				csi0_port3: port@3 {
 					reg = <3>;
-					status = "disabled";
+					status = "enabled";
 				};
 
 				csi0_port4: port@4 {
 					reg = <4>;
-					status = "disabled";
+					status = "enabled";
 				};
 			};
 		};
diff --git a/arch/arm64/configs/ti_gki.fragment b/arch/arm64/configs/ti_gki.fragment
index e9562f376..452a5442b 100644
--- a/arch/arm64/configs/ti_gki.fragment
+++ b/arch/arm64/configs/ti_gki.fragment
@@ -159,3 +159,5 @@ CONFIG_WL18XX=m
 CONFIG_WLAN_VENDOR_TI=y
 CONFIG_WLCORE=m
 CONFIG_WLCORE_SDIO=m
+CONFIG_VIDEO_DS90UB960=m
+CONFIG_VIDEO_IMX219=m

Step 2: 

At the UBoot:
  1. env set dtbo_index '14 15 16 17 18'
  2. saveenv
  3. reset

Step 3:

Once the android is booted
  1. adb root
  2. adb shell
  3. cd /vendor/lib/modules
  4. insmod imx219.ko

However, I don't see any kernel logs confirming the V3 link is up and imx219 is active. Could you please help me with the correct patch?

1. I think with V3 Link, 4 virtual video device must be listed.

Best regards,

Libin Jose

  • Hi,

    normaly if you device tree overlay was ok you don't need to load manually driver  system should load it itself.

    for no log it's becasue we put quiet in kernel commandline so we don't see a lot of lot by default in serial console , you can you dmesg command from console or adb shell in root mode.
    if you want you can rebuiltd android and remove 'quiet' from BOARD_KERNEL_CMDLINE in 'device/ti/am62x/device-common.mk'


    i don't have this expension card so difficult to test in my side, to you test it on linux bsp before move on android ?

    if you can share more log from logcat dmesg etc.

    Regard,
    Guillaume

  • Dear Guillaume,

    I will share the log on coming Monday. Is it possible for your to verify my patch?

    If not for dmesg logs, atleast "adb shell dumpsys media.camera" should have listed the cameras. However, it didn't listed in our case.

    So I assume, there was some issue in the patch. Soo could you comment on the patch?

    Best regards,

    Libin Jose.

  • Hi,

    your patch look good except for part in k3-am62p-main.dtsi because node should be enable when you load device tree overlay.

    but as i say i don't have V3 Link daughter board so difficult to validate it.

    and As i read in your first e2e imx  sensor was not supported except to capture raw images so this sensors will probably not works on android too.


    adb shell dumpsys media.camera list camera which are good option to works with android.

    you need to use cam -l command to see if camera HAL find you camera and accept it.
    https://software-dl.ti.com/processor-sdk-android/esd/AM62PX/10_01_00/docs/devices/AM62PX/android/Application_Notes_Camera.html#debugging-tips

    do you check with lsmod command if imx219 and DS90UB960 driver was loading ?


    Guillaume

  • Dear ,

    I am following the page as you mentioned:

    $ adb shell lsmod | grep " 1 "
    rpmsg_ns               20480  1 virtio_rpmsg_bus
    cdns_csi2rx            24576  1 
    snd_soc_simple_card_utils    32768  1 snd_soc_simple_card
    ds90ub960              53248  1 
    i2c_atr                24576  1 ds90ub960
    snd_soc_ti_sdma        20480  1 snd_soc_davinci_mcasp
    snd_soc_ti_udma        20480  1 snd_soc_davinci_mcasp
    snd_soc_ti_edma        20480  1 snd_soc_davinci_mcasp
    snd_soc_tlv320aic3x_i2c    20480  1 
    snd_soc_tlv320aic3x    90112  1 snd_soc_tlv320aic3x_i2c
    k3_udma_glue           45056  1 ti_am65_cpsw_nuss,[permanent]
    tidss                  69632  1 
    drm_dma_helper         28672  1 tidss
    gpio_regulator         20480  1 
    palmas                 24576  1 palmas_regulator
    rtc_ti_k3              20480  1 
    sa2ul                  45056  1 
    zsmalloc               40960  1 zram

    I don't see imx219 in lsmod. However, when I insert them manually, there seems to be no error.

    console:/vendor/lib/modules # insmod ./imx219.ko                               
    console:/vendor/lib/modules # 
    

    onsole:/vendor/lib/modules # cam --camera 1 --info
    [0:18:33.703581010] [2403]  WARN IPAManager ipa_manager.cpp:154 No IPA found in '/vendor/lib64/libcamera'
    [0:18:33.703825715] [2403]  INFO Camera camera_manager.cpp:284 libcamera v0.1.0+22-60b023a0-dirty (2023-09-12T09:47:48+02:00)
    [0:18:33.705628175] [2404] ERROR SimplePipeline simple.cpp:1423 No sensor found
    Camera 1 not found
    Failed to create camera session
    
    --- logcat ----
    01-01 00:00:26.945   344   344 I libcamera:  INFO HAL camera3_hal.cpp:61 Initialising Android camera HAL
    01-01 00:00:27.121   344   344 D libcamera: DEBUG HALConfig camera_hal_config.cpp:189 '/base/bus@f0000/bus@b00000/i2c@2b200000/camera@3c' (0)[0]
    01-01 00:00:27.124   344   344 D libcamera: DEBUG HALConfig camera_hal_config.cpp:189 '/base/bus@f0000/i2c@20020000/i2c-switch@71/i2c@1/camera@3c' (0)[0]
    01-01 00:00:27.150   344   344 W libcamera:  WARN IPAManager ipa_manager.cpp:154 No IPA found in '/vendor/lib64/libcamera'
    01-01 00:00:27.151   344   344 I libcamera:  INFO Camera camera_manager.cpp:284 libcamera v0.1.0+22-60b023a0-dirty (2023-09-12T09:47:48+02:00)
    01-01 00:00:27.164   344   385 D libcamera: DEBUG Camera camera_manager.cpp:69 Starting camera manager
    01-01 00:00:27.165   344   385 D libcamera: DEBUG DeviceEnumerator device_enumerator.cpp:224 New media device "j721e-csi2rx" created from /dev/media0
    01-01 00:00:27.165   344   385 D libcamera: DEBUG DeviceEnumerator device_enumerator.cpp:252 Added device /dev/media0: j721e-csi2rx
    01-01 00:00:27.165   344   385 D libcamera: DEBUG Camera camera_manager.cpp:113 Found registered pipeline handler 'SimplePipelineHandler'
    01-01 00:00:27.165   344   385 D libcamera: DEBUG DeviceEnumerator device_enumerator.cpp:312 Successful match for media device "j721e-csi2rx"
    01-01 00:00:27.165   344   385 E libcamera: ERROR SimplePipeline simple.cpp:1423 No sensor found
    01-01 00:00:27.198   344   344 I CamPrvdr@2.4-legacy: Loaded "libcamera camera HALv3 module" camera module
    01-01 00:00:27.292   318   318 D nativeloader: InitDefaultPublicLibraries for_preload=1: libandroid.so:libaaudio.so:libamidi.so:libbinder_ndk.so:libc.so:libcamera2ndk.so:libdl.so:libEGL.so:libGLESv1_CM.so:libGLESv2.so:libGLESv3.so:libicu.so:libicui18n.so:libicuuc.so:libjnigraphics.so:liblog.so:libmediandk.so:libm.so:libnativehelper.so:libnativewindow.so:libOpenMAXAL.so:libOpenSLES.so:libRS.so:libstdc++.so:libsync.so:libvulkan.so:libwebviewchromium_plat_support.so:libz.so
    

    Any idea?

    Best regards

    Libin Jose

  • Hi,

    if you imx module not laded automatically at boot it's probably because you have an issue in device-tree , you can chek in /proc/device-tree/  if you find compatbile 'sony,imx219' and same check if driver for serializer was insmod too : https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/arch/arm64/boot/dts/ti/k3-v3link-imx219-0-0.dtso?h=ti-android-linux-6.6.y#n47


    Guillaume