Hi,
I want to use TVP5150 decoder with imx6q.
Here are what I have done till now:
Physical Connection:
TVP5150 is connected to parallel port of CSI0 of IPU0, i.e. IPU1_CSI0_DATA12 to IPU1_CSI0_DATA19 Pins.
Device Tree:
TVP5150 node is defined under i2c1 as follow:
tvp5150@5c {
compatible = "ti,tvp5150";
reg = <0x5c>;
pdn-gpios = <&gpio7 13 GPIO_ACTIVE_LOW>;
reset-gpios = <&gpio7 12 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_csi0>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
csi_id = <0>;
mclk = <24000000>;
mclk_source = <0>;
port {
tvp5150_to_ipu1_csi0_mux: endpoint {
remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
};
};
};
IPU0 node is as follow:
ipu1: ipu@2400000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx6q-ipu";
reg = <0x2400000 0x400000>;
interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>,
<0 5 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&clks IMX6QDL_CLK_IPU1>,
<&clks IMX6QDL_CLK_IPU1_DI0>, <&clks IMX6QDL_CLK_IPU1_DI1>,
<&clks IMX6QDL_CLK_IPU1_DI0_SEL>, <&clks IMX6QDL_CLK_IPU1_DI1_SEL>,
<&clks IMX6QDL_CLK_LDB_DI0>, <&clks IMX6QDL_CLK_LDB_DI1>;
clock-names = "bus","di0", "di1","di0_sel", "di1_sel","ldb_di0", "ldb_di1";
resets = <&src 2>;
bypass_reset = <0>;
status = "okay";
ipu1_csi0: port@0 {
reg = <0>;
ipu1_csi0_from_ipu1_csi0_mux: endpoint {
bus-width = <8>;
data-shift = <12>; /* Lines 19:12 used */
hsync-active = <1>;
vsync-active = <1>;
remote-endpoint = <&ipu1_csi0_mux_to_ipu1_csi0>;
};
};
/* Some Other stuffs are here */
};
IPU0 Mux node is as follow:
ipu1_csi0_mux {
compatible = "video-mux";
mux-controls = <&mux 0>;
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port@0 {
reg = <0>;
ipu1_csi0_mux_from_mipi_vc0: endpoint {
remote-endpoint = <&mipi_vc0_to_ipu1_csi0_mux>;
};
};
port@1 {
reg = <1>;
ipu1_csi0_mux_from_parallel_sensor: endpoint {
remote-endpoint = <&tvp5150_to_ipu1_csi0_mux>;
};
};
port@2 {
reg = <2>;
ipu1_csi0_mux_to_ipu1_csi0: endpoint {
remote-endpoint = <&ipu1_csi0_from_ipu1_csi0_mux>;
};
};
};
V4L2 capture node is as follow:
v4l2_cap_0 {
compatible = "fsl,imx6q-v4l2-capture";
ipu_id = <0>;
csi_id = <0>;
mclk_source = <0>;
status = "okay";
};
Kernel Configuration:
I have built kernel with imx_v7_defconfig and now these modules are loaded at startup:
# lsmod
Module Size Used by Not tainted
mxc_v4l2_capture 53248 0
ipu_bg_overlay_sdc 16384 1 mxc_v4l2_capture
ipu_still 16384 1 mxc_v4l2_capture
v4l2_int_device 16384 1 mxc_v4l2_capture
ipu_prp_enc 16384 1 mxc_v4l2_capture
ipu_csi_enc 16384 1 mxc_v4l2_capture
ipu_fg_overlay_sdc 16384 1 mxc_v4l2_capture
imx_vdoa 16384 0
tvp5150 32768 0
evbug 16384 0
Representation:
TVP5150 is probed successfully with the following message:
tvp5150 1-005c: tvp5150 (4.0) chip found @ 0xb8 (21a4000.i2c)
tvp5150 1-005c: tvp5150am1 detected.
The /dev/video0 is now available, but in kernel log there is an error:
ERROR: v4l2 capture: slave not found!
Questions:
Q1- What is wrong with my settings that the /dev/video0 is not opened?
Q2- Does v4l2 capture works as bridge to initialize subdevices such as TVP5150 and create video device representation (/dev/video0)?
Any example Kernel Configuration and Device Tree can be helpful
Thanks in advance