Hi,
I'm running into the same problem as I want a pixel format of V4L2_PIX_FMT_SGBRG8 for my finger print sensor. I am using the imx6 sabresd board. I have connected the sensor to parallel port of IPU2(IPU1 w.r.t. to TRM).
I want to capture the image from sensor and send it to display.
Below is my implemetation in source code:
arch/arm/boot/dts/imx6q.dtsi
pinctrl_ipu2_2: ipu1grp-2 {
fsl,pins = <
MX6QDL_PAD_EIM_A18__IPU2_CSI1_DATA13 0x80000000
MX6QDL_PAD_EIM_A19__IPU2_CSI1_DATA14 0x80000000
MX6QDL_PAD_EIM_A20__IPU2_CSI1_DATA15 0x80000000
MX6QDL_PAD_EIM_A21__IPU2_CSI1_DATA16 0x80000000
MX6QDL_PAD_EIM_A22__IPU2_CSI1_DATA17 0x80000000
MX6QDL_PAD_EIM_A23__IPU2_CSI1_DATA18 0x80000000
MX6QDL_PAD_EIM_A24__IPU2_CSI1_DATA19 0x80000000
MX6QDL_PAD_EIM_DA12__IPU2_CSI1_VSYNC 0x80000000
MX6QDL_PAD_EIM_A16__IPU2_CSI1_PIXCLK 0x80000000
MX6QDL_PAD_EIM_DA11__IPU2_CSI1_HSYNC 0x8000000
>;
};
arch/arm/boot/dts/imx6qdl-sabresd.dtsi
regulators {
compatible = "simple-bus";
finger_3p3v: 3p3v { // custom supply for my sensor
compatible = "regulator-fixed";
regulator-name = "3P3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
}
}
v4l2_cap_2 { // To make the video node for the device which is connecte to ipu2 with CSI1
compatible = "fsl,imx6q-v4l2-capture";
ipu_id = <1>;
csi_id = <1>;
mclk_source = <0>;
status = "okay";
}
&i2c2{
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c3_2>;
status = "okay";
finger_print: finger_module@18 { // add the sensor entry having slave address 0x18
compatible = "fsl,finger-print";
reg = <0x18>;
VDDIO-supply = <&finger_3p3v>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu2_2>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
finger-gpio = <&gpio3 7 0>;
csi_id = <1>;
ipu_id = <1>;
mclk = <24000000>;
mclk_source = <0>;
}
arch/arm/mach-imx/mach-imx6q.c
if (of_machine_is_compatible("fsl,imx6q-sabresd") ||
of_machine_is_compatible("fsl,imx6q-sabreauto")){
regmap_update_bits(gpr, IOMUXC_GPR1, 1 << 20, 1 << 20);
regmap_update_bits(gpr, IOMUXC_GPR1, 1 << 17, 1 << 17);
regmap_update_bits(gpr, IOMUXC_GPR3, 2 << 6, 2 << 6);
regmap_update_bits(gpr, IOMUXC_GPR3, 1 << 10, 1 << 10);
}
When I probed the data line of sensor, It is sending data, as well as HSYNC and VSYNC.
I am facing the below errors:
imx6q-pinctrl 20e0000.iomuxc: pin MX6Q_PAD_CSI0_DAT12 already requested by 2-0018; cannot claim for 0-003c
root@imx6qsabresd:/bin# gst-launch mfw_v4lsrc device=/dev/video0 ! autovideosink
MAX resolution 1024x768
ERROR: v4l2 capture: slave not found!
MFW_GST_V4LSRC_PLUGIN 3.0.11 build on Sep 6 2014 12:31:36.
Setting pipeline to PAUSED ...
ERROR: v4l2 capture: slave not found!
MFW_GST_V4LSINK_PLUGIN 3.0
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0
ERROR: from element /GstPipeline:pipeline0/MFWGstV4LSrc:mfwgstv4lsrc0: Internal data flow error.
Additional debug info:
/home/vinod/vvdn/VSTI_PoSX/yocto_src/build/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/gstreamer/0.10.36-r2/gstreamer-0.10.3:
streaming task paused, reason error (-5)
Execution ended after 10001604002 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Total rendered:0
[--->FINALIZE v4l_sink
Freeing pipeline ...
root@imx6qsabresd:/bin#