Deferring probe error

Hi,

We have a problem with ADV7611 chip. It gives below error.

| adv7610 2-004c: could not find pctldev for node /soc/ipu@02400000/ipu1grp-5, deferring probe

We have used below pins:

Here is the patches we applied for devicetree and driver:

Some parts of the patch:

+&ipu1 {
+
+    pinctrl_ipu1_5: ipu1grp-5 { /* bt.1120 16-bit */
+        fsl,pins = <
+            MX6QDL_PAD_EIM_DA9__IPU1_CSI1_DATA00    0x000030B0 /*pulldown*/
+            MX6QDL_PAD_EIM_DA8__IPU1_CSI1_DATA01    0x000030B0 /*pulldown*/

+    pinctrl_gpio_camera_reset: gpio-camera-reset-1 {
+        fsl,pins = <
+            MX6QDL_PAD_EIM_D26__GPIO3_IO26        PAD_CTRL_HYS_PU /*pulldown*/
+        >;
+    };

+    adv7610: adv7610@4C {
+        compatible = "adv,adv7610";
+        reg = <0x4C>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&pinctrl_ipu1_5>;
+        csi_id = <1>;
+        ipu_id = <1>;
+        reset-gpio = <&gpio3 26 0>;
     };

The original ADV7610 patch we got is below:

https://github.com/allanmatthew/linux-fslc/commit/a2ac6d7890d3d3cb1c666b27b8a5980b6d3cc194

Greetings @huseyinkozan!

I see that the patch you used comes from kernel version 3.14.43. The kernel version for BSP 2.8 is 4.9, so there seems to be something missing (specifically something related to a pinctrl, I guess) in the driver for it to work with that kernel version. I was able to find this piece of code based on kernel 4.1, if that’s of any help. In any case, I see that the driver for this device is not mainlined even on latest versions of the Linux kernel, so perhaps the manufacturer of this part might help with some driver.

Also, I recommend you to upgrade to the latest BSP 2.8.7 at your earliest convenience. We do not support earlier betas and you should upgrade to make sure you have LTS support.

Thanks @gustavo.tx

I am able to pass that error by moving pinctrl_ipu1_5 to dtsi. I have attached the 1209-imx6dl-colibri-cam-eval-v3.dts-dvi.patch.

Now, I am getting format error like below:

root@colibri-imx6:~# gst-launch-1.0 v4l2src ! fakesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed to enumerate possible video formats device '/dev/video0' can work with
Additional debug info:
../../../git/sys/v4l2/gstv4l2object.c(1171): gst_v4l2_object_fill_format_list (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Failed to get number 0 in pixelformat enumeration for /dev/video0. (25 - Inappropriate ioctl for device)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
root@colibri-imx6:~# gst-launch-1.0 imxv4l2src ! fakesink
====== IMXV4L2SRC: 4.3.4 build on Dec 15 2020 17:25:54. ======
WARNING: erroneous pipeline: could not link imxv4l2src0 to fakesink0
root@colibri-imx6:~# 

I tried to add 4.1 patch changes over 3.14 but it seems something change between 4.1 to 4.9, and I cannot merge without digging into driver development.

We stucked with 2.8b4 because of RT patches. My last trial was a failure. I may try later a suitable time.

I found current kernel supports ADV7611 that notest at below files. But it seems does not support 20BIT connection.

Can we use that driver if we change the connections to 8BIT ?

We were using imxv4lsrc. If we can use it, can we use v4l2src instead ?

@huseyinkozan,

Yes, you can probably use that driver if you change the connections to 8-bit.

The imxv4l2src element makes use of the iMX6’s VPU for processing the input. You can certainly use v4l2src instead, but you might not get the same performance since it’ll run on CPU only.

Thanks @gustavo.tx

I have added this patch, and built-in driver detected the device.

+	hdmi_receiver@4c {
+		compatible = "adi,adv7611";
+		reg = <0x4c>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_ipu1_csi0>;
+		reset-gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		default-input = <0>;
+		port@0 {
+			reg = <0>;
+		};
+		port@1 {
+			reg = <1>;
+			hdmi_in: endpoint {
+				remote-endpoint = <&ipu1_csi1>;
+			};
+		};

Output:

root@colibri-imx6:~# dmesg | grep -i adv76
[    8.992685] adv7611 2-004c: adv7611 found @ 0x98 (21a8000.i2c)

But we got below error:

root@colibri-imx6:~# v4l2-ctl -V -d /dev/video0                                              
[  439.288379] ERROR: v4l2 capture: slave not found! V4L2_CID_HUE
Failed to open /dev/video0: Resource temporarily unavailable

Currently there is no video input to ADV chip. I may try later after input connections ready.

Does this “run on CPU only” mean hw encoder will not work ? Or just for capturing runs on CPU ?

Do you know any way to pass video stream from built-in driver to VPU ? A gstreamer way, or maybe a driver patch.

@huseyinkozan,

Using v4l2src instead of imxv4l2src will use CPU only for capturing. You can still use the other imx gstreamer elements to make use of the VPU.

Thanks @gustavo.tx

imxv4l2videosrc source seems working. But we have some problems with our pipeline. While testing with gst-launch with fpsdisplaysink, fps and fps-n seems not working properly. Runs allways 60 FPS. I am trying to adapt input source to our application code.

Hi @huseyinkozan and @gustavo.tx,

So the “root” of the issue seems to be solved by now, right?

Following the conversation, I understand that you are now dealing with higher-level issues.

Best regards,
André Curvello

Hi @andrecurvello.tx ,

Yes, changing the source solved the problem. We can get stream with 3.14 drivers both 8bit and 16 bit works. You can mark the question solved.

Ok! Thanks.