DEar,
I'm using a custom board with a custom sensor, with kernel 3.10.17_ga
I modified the DTS files to adapt to our hardware, and starting from the ov5640.c driver i wrote the driver for our sensor.
the probe is workink, the video dev is registered (ipu =1 csi =1 -> /dev/video2)... everything seems to be fine,
but when i try to cat /dev/video2 i have the error
ERROR: v4l2 capture: mxc_v4l_read timeout counter 0
imx-ipuv3 2800000.ipu: Not A CSI channel
cat: read error: Timer expired
I tried just to make an experiment to use a different ipu csi (0,0) , of course it will not work due to wrong pin but i have a timeout on read error and not the "not a CSI channel error"...
so i think i miss something in the dts file to connect ipu1,1 to vpu....
what coudl be wrong?
Thanks
Omar
Now i tried t use the OV5640 (i'm using the OV5640 mipi board from boundary).
And I have the same error.... SO it should be not a problem of driver (already included and tested) or hardware (the probe is working...
but still I have the timeout error on mxc_v4l_read ("timeout counter 0")
Omar
ok the ov5640_mipi now is working... was a mistake in the ipucsi config in dts file... but still digging on my Ar0134 (parallel) sensor capture
in my hardware should be captured on IPU2...
HI,Omar Pighi
I‘m using imx6q and ov5640 too,can you tell me how did you slove the poblem。
thanks
Richard
I am having the same issue with the ov5640_mipi module on sabresd Quad board. Relevant DTS entries are shown below. I am building as-per L5.0.0_1.0.0 BSP instructions and I am seeing:
root@sabresd_6dq:/ # cat /dev/video1
ERROR: v4l2 capture: mxc_v4l_read timeout counter 0
imx-ipuv3 2400000.ipu: Not a CSI channel
/system/bin/sh: cat: /dev/video1: Timer expired
Omar: What was your solution?
Cheers,
Don
ov5640_mipi: ov5640_mipi@3c { /* i2c2 driver */
compatible = "ovti,ov5640_mipi";
reg = <0x3c>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
DOVDD-supply = <&vgen4_reg>; /* 1.8v */
AVDD-supply = <&vgen3_reg>; /* 2.8v, rev C board is VGEN3 rev B board is VGEN5 */
DVDD-supply = <&vgen2_reg>; /* 1.5v*/
pwn-gpios = <&gpio1 19 1>; /* active low: SD1_DAT2 */
rst-gpios = <&gpio1 20 0>; /* active high: SD1_CLK */
ipu_id = <0>;
csi_id = <1>;
mclk = <24000000>;
mclk_source = <0>;
};
&mipi_csi {
status = "okay";
ipu_id = <0>;
csi_id = <1>;
v_channel = <0>;
lanes = <2>;
};
v4l2_cap_0 {
compatible = "fsl,imx6q-v4l2-capture";
ipu_id = <0>;
csi_id = <0>;
mclk_source = <0>;
status = "okay";
};
v4l2_cap_1 {
compatible = "fsl,imx6q-v4l2-capture";
ipu_id = <0>;
csi_id = <1>;
mclk_source = <0>;
status = "okay";
};
I have question on a couple of register:
IOMUXC_GPR1 in this bit i configure if mipi or parallel goes to CSI in my hardware bit20 =1 because i'm using the parallel CSI1 to IPU2 (see Sasamy answer above)
but I have also IPU2_CONF register where some bits confuse me (bit 29 and bit 31) seem to be a duplicate.... where , when and what I have to configure (if I had to this second register IPU specific?)
thanks
Omar
where are defined the register of IPU (IPU2_CONF etc..)...
i think ihave to configure the input of IPU2 from CSI1 doing something like that:
if(sensor->csi==1) | ||||
{ | ||||
val= (1<<20) ; | ||||
ipur = syscon_regmap_lookup_by_pdevname("ipu2"); | ||||
if (!IS_ERR(ipur)) | ||||
{ | ||||
regmap_update_bits(ipur, IPU2_CONF, 0xA0000000, 0x80000000); | ||||
} | ||||
else | ||||
{ | ||||
pr_err("%s: ipu2 not found\n", __func__); | ||||
} | ||||
} |
I'm not able to find the definition of IPU2_CONF ..... I made the name so probably is different.. but somewhere should be defined the registers to configure the IPU...
what do you think to add something like that:
ipur = ipu_get_soc(sensor->ipu_id); | |
ipu_enable_csi(ipur, sensor->csi); |
Hi Selea,
I think you need to configure the interface and channel for your board, for example
linux-2.6-imx.git - Freescale i.MX Linux Tree
Alexander
in my driver (took from OV5640) I did:
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr"); |
if (!IS_ERR(gpr)) {
if (of_machine_is_compatible("fsl,imx6q")) { | ||
int mask = sensor->csi ? (1 << 20) : (1 << 19); |
if (sensor->csi != sensor->ipu_id) { | |||
pr_warning("%s: csi_id != ipu_id\n", __func__); | |||
return -ENODEV; | |||
} | |||
regmap_update_bits(gpr, IOMUXC_GPR1, mask, mask); | |||
} else if (of_machine_is_compatible("fsl,imx6dl")) { | |||
int mask = sensor->csi ? (7 << 3) : (7 << 0); | |||
int val = sensor->csi ? (4 << 3) : (4 << 0); |
regmap_update_bits(gpr, IOMUXC_GPR13, mask, val); | ||
} |
} else {
pr_err("%s: failed to find fsl,imx6q-iomux-gpr regmap\n", | ||
__func__); |
}
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Is the ERROR here probably... what do you think?
Omar
Omar, sorry,
I was wrong - I have not noticed that CSI is configured in the sensor driver and I see no error here.
csi_id = <1>;
int mask = sensor->csi ? (1 << 20) : (1 << 19);
IOMUXC_GPR1 --> 20 MIPI sensor to IPU-2 mux control --> 1 Enable parallel interface to IPU2 CSI1
Alexander
I was wondering if the code portion you showed me is called anyway other then driver... so maybe it is overriding my settings....
Omar
maybe i understood what you mean... I will try to add for my board... thanks
Omar