Skip to contentSkip to conversation

testing soc_camera with mt9m001 on pxa270

DISCUSSION Maik Steuer 3 participants 7 messages Nov 28, 2008 – Dec 1, 2008 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

Hello,

I'm testing at the moment the capture interface with the soc-camera and mt9m001 driver.

I fixed all I2C routines to test without any connected camera like mt9m001, because we want to use another camera hardware as mt9m001.

To read out the capture buffer I use the example project capture.c from V4L2-API with mmap(). The ioctl (fd, VIDIOC_REQBUFS, &req) at the beginning of initialization fails. I have debuged the most important parts of the driver (pxa_camera, soc_camera and mt9m001) but I can't find the mistake.

Any Idea?

Here is a short log, which functions were called:

[@Linux /opt]#./capture -m soc_camera_open()
pxa_camera_add_device() !!!
camera 0-0: PXA Camera driver attached to camera 0 pxa_camera_activate() !!!
mt9m001_init() !
pxa_camera_add_device() ret !!! pxa_camera_init_videobuf() !!! soc_camera_querycap() soc_camera_querycap() ret 0 soc_camera_cropcap()
soc_camera_s_crop()
mt9m001_set_fmt_cap() ! mt9m001_set_fmt_cap() ! ret 0 soc_camera_s_crop() ret 0 soc_camera_s_fmt_vid_cap() soc_camera_try_fmt_vid_cap() pxa_camera_try_bus_param() !!!

	test_platform_param() !!!

buswidth 8 flags 3133
buswidth 8 flags 3197
mt9m001_query_bus_param() !
bus_switch_possible() !
width_flag 455
soc_camera_bus_param_compatible() ret 1109 !!!
mt9m001_try_fmt_cap() !
try_fmt__cap() ret 0
soc_camera_try_fmt_vid_cap() ret 0
mt9m001_set_fmt_cap() !
mt9m001_set_fmt_cap() ! ret 0
pxa_camera_set_bus_param()!!!

	test_platform_param() !!!

buswidth 8 flags 3133
buswidth 8 flags 3197
mt9m001_query_bus_param()! bus_switch_possible()!
width_flag 455
mt9m001_set_bus_param()!
flags 1109 datawidth 8 width_flags 64 pxa_camera_set_bus_param() ret 0 !!! soc_camera_s_fmt_vid_cap() ret 0
/dev/video does not support memory mapping soc_camera_close()
camera 0-0: PXA Camera driver detached from camera 0 mt9m001_release() !

greets

Maik

Signature · 7 lines
Sensationsangebot nur bis 30.11: GMX FreeDSL - Telefonanschluss + DSL 
für nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K11308T4569a

--
video4linux-list mailing list
Unsubscribe mailto:[email protected]?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list
#1 lore raw
Quoted 8 lines · Maik Steuer

Hello,

I'm testing at the moment the capture interface with the soc-camera and mt9m001 driver.

I fixed all I2C routines to test without any connected camera like mt9m001, because we want to use another camera hardware as mt9m001.

Quoted 7 lines

To read out the capture buffer I use the example project capture.c from V4L2-API with mmap(). The ioctl (fd, VIDIOC_REQBUFS, &req) at the beginning of initialization fails. I have debuged the most important parts of the driver (pxa_camera, soc_camera and mt9m001) but I can't find the mistake.

Any Idea?

Sorry, no. Without knowing what kernel version you're using, without seeing your "fixes to all I2C routines" I don't think anyone would be able to tell you what the problem is. And anyway you wouldn't get too far without a real camera - at best when the pxa will start capturing, it will timeout waiting for sync signals. Maybe you would be able to do this if you switch to the slave mode, but beware, that this mode hasn't been tested.

I would suggest you tell us what camera you are going to use, maybe someone is already working on a driver for it. If not - you write a driver yourself and start working with a real hardware.

Thanks
Guennadi

Quoted 51 lines

Here is a short log, which functions were called:

[@Linux /opt]#./capture -m soc_camera_open()
pxa_camera_add_device() !!!
camera 0-0: PXA Camera driver attached to camera 0 pxa_camera_activate() !!!
mt9m001_init() !
pxa_camera_add_device() ret !!! pxa_camera_init_videobuf() !!! soc_camera_querycap() soc_camera_querycap() ret 0 soc_camera_cropcap()
soc_camera_s_crop()
mt9m001_set_fmt_cap() ! mt9m001_set_fmt_cap() ! ret 0 soc_camera_s_crop() ret 0 soc_camera_s_fmt_vid_cap() soc_camera_try_fmt_vid_cap() pxa_camera_try_bus_param() !!!

	test_platform_param() !!!

buswidth 8 flags 3133
buswidth 8 flags 3197
mt9m001_query_bus_param() !
bus_switch_possible() !
width_flag 455
soc_camera_bus_param_compatible() ret 1109 !!!
mt9m001_try_fmt_cap() !
try_fmt__cap() ret 0
soc_camera_try_fmt_vid_cap() ret 0
mt9m001_set_fmt_cap() !
mt9m001_set_fmt_cap() ! ret 0
pxa_camera_set_bus_param()!!!

	test_platform_param() !!!

buswidth 8 flags 3133
buswidth 8 flags 3197
mt9m001_query_bus_param()! bus_switch_possible()!
width_flag 455
mt9m001_set_bus_param()!
flags 1109 datawidth 8 width_flags 64 pxa_camera_set_bus_param() ret 0 !!! soc_camera_s_fmt_vid_cap() ret 0
/dev/video does not support memory mapping soc_camera_close()
camera 0-0: PXA Camera driver detached from camera 0 mt9m001_release() !

Quoted 7 lines

greets

Maik

Signature · 2 lines
Sensationsangebot nur bis 30.11: GMX FreeDSL - Telefonanschluss + DSL 
für nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K11308T4569a

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer

--
video4linux-list mailing list
Unsubscribe mailto:[email protected]?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list

#2 lore raw

-------- Original-Nachricht --------

Quoted 22 lines

Datum: Fri, 28 Nov 2008 16:16:48 +0100 (CET)
Von: Guennadi Liakhovetski <[email protected]>
An: Maik Steuer <[email protected]>
CC: [email protected], [email protected]
Betreff: Re: testing soc_camera with mt9m001 on pxa270

Quoted 14 lines · Maik Steuer

Hello,

I'm testing at the moment the capture interface with the soc-camera and mt9m001 driver.

I fixed all I2C routines to test without any connected camera like mt9m001, because we want to use another camera hardware as mt9m001.

To read out the capture buffer I use the example project capture.c from V4L2-API with mmap(). The ioctl (fd, VIDIOC_REQBUFS, &req) at the beginning of initialization fails. I have debuged the most important parts of the driver (pxa_camera, soc_camera and mt9m001) but I can't find the mistake.

Quoted 5 lines
Quoted 1 line

Any Idea?

Sorry, no. Without knowing what kernel version you're using, without seeing your "fixes to all I2C routines" I don't think anyone would be able to tell you what the problem is.

I'm using 2.6.27.7. The fixes are easy. The two functions reg_read() and reg_write() in mt9m001.c returns always with 0 and the included i2c_smbus_read_word_data() and i2c_smbus_write_word_data() were commented out. I set the MT9M001_CHIP_VERSION to 0x8431 and set the default data_width to 8. That's all. In the V4L2-API capture example I set the right color space (in this case V4L2_PIX_FMT_GREY).

Quoted 6 lines

And anyway you wouldn't get too far
without a real camera - at best when the pxa will start capturing, it will timeout waiting for sync signals. Maybe you would be able to do this if you switch to the slave mode, but beware, that this mode hasn't been tested.

The pxa doesn't start capturing. That's my target to test the capture interface. I don't know if there is an easier way to start capturing as with the capture example from V4L2-API.

Quoted 4 lines

I would suggest you tell us what camera you are going to use, maybe someone is already working on a driver for it. If not - you write a driver yourself and start working with a real hardware.

At the moment the camera is only a FPGA which sends 8 Bit dummy data with hsync, vsync and pixclock. So I can change all necessary parameters for pxa requirements.

I throught that the ioctl (fd, VIDIOC_REQBUFS, &req) starts soc_camera_reqbufs() but it isn't so.

greets
Maik

Quoted 65 lines

Thanks
Guennadi

Quoted 51 lines

Here is a short log, which functions were called:

[@Linux /opt]#./capture -m soc_camera_open()
pxa_camera_add_device() !!!
camera 0-0: PXA Camera driver attached to camera 0 pxa_camera_activate() !!!
mt9m001_init() !
pxa_camera_add_device() ret !!! pxa_camera_init_videobuf() !!! soc_camera_querycap() soc_camera_querycap() ret 0 soc_camera_cropcap()
soc_camera_s_crop()
mt9m001_set_fmt_cap() ! mt9m001_set_fmt_cap() ! ret 0 soc_camera_s_crop() ret 0 soc_camera_s_fmt_vid_cap() soc_camera_try_fmt_vid_cap() pxa_camera_try_bus_param() !!!

	test_platform_param() !!!

buswidth 8 flags 3133
buswidth 8 flags 3197
mt9m001_query_bus_param() !
bus_switch_possible() !
width_flag 455
soc_camera_bus_param_compatible() ret 1109 !!!
mt9m001_try_fmt_cap() !
try_fmt__cap() ret 0
soc_camera_try_fmt_vid_cap() ret 0
mt9m001_set_fmt_cap() !
mt9m001_set_fmt_cap() ! ret 0
pxa_camera_set_bus_param()!!!

	test_platform_param() !!!

buswidth 8 flags 3133
buswidth 8 flags 3197
mt9m001_query_bus_param()! bus_switch_possible()!
width_flag 455
mt9m001_set_bus_param()!
flags 1109 datawidth 8 width_flags 64 pxa_camera_set_bus_param() ret 0 !!! soc_camera_s_fmt_vid_cap() ret 0
/dev/video does not support memory mapping soc_camera_close()
camera 0-0: PXA Camera driver detached from camera 0 mt9m001_release() !

Quoted 7 lines

greets

Maik

Signature · 2 lines
Sensationsangebot nur bis 30.11: GMX FreeDSL - Telefonanschluss + DSL 
für nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K11308T4569a

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer

Signature · 6 lines
Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger

--
video4linux-list mailing list
Unsubscribe mailto:[email protected]?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list
#3 lore raw
Quoted 10 lines · Maik Steuer
Quoted 3 lines

I would suggest you tell us what camera you are going to use, maybe someone is already working on a driver for it. If not - you write a driver yourself and start working with a real hardware.

At the moment the camera is only a FPGA which sends 8 Bit dummy data with hsync, vsync and pixclock. So I can change all necessary parameters for pxa requirements.

I throught that the ioctl (fd, VIDIOC_REQBUFS, &req) starts soc_camera_reqbufs() but it isn't so.

Yes, this is indeed what should happen: see __video_do_ioctl() and around it. You're saying, that VIDIOC_REQBUFS is the first failing ioctl? Then just check what error code it returns, activate the

	dev_dbg(&icd->dev, "%s: %d\n", __func__, p->memory);

in soc_camera.c::soc_camera_reqbufs(), etc.

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer

--
video4linux-list mailing list
Unsubscribe mailto:[email protected]?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list

#4 lore raw

-------- Original-Nachricht --------

Quoted 17 lines

Datum: Fri, 28 Nov 2008 18:00:47 +0100 (CET)
Von: Guennadi Liakhovetski <[email protected]>
An: Maik Steuer <[email protected]>
CC: [email protected], [email protected]
Betreff: Re: testing soc_camera with mt9m001 on pxa270

Quoted 2 lines · Maik Steuer
Quoted 2 lines

I would suggest you tell us what camera you are going to use, maybe someone is already working on a driver for it. If not - you write a

driver

Quoted 6 lines
Quoted 1 line

yourself and start working with a real hardware.

At the moment the camera is only a FPGA which sends 8 Bit dummy data with hsync, vsync and pixclock. So I can change all necessary parameters for pxa requirements.

Quoted 5 lines
Quoted 2 lines

I throught that the ioctl (fd, VIDIOC_REQBUFS, &req) starts soc_camera_reqbufs() but it isn't so.

Yes, this is indeed what should happen: see __video_do_ioctl() and around it. You're saying, that VIDIOC_REQBUFS is the first failing ioctl? Then

Yes, VIDIOC_REQBUFS is the first failling. The right case construction wasn't called. I printed out the commited ioctl cmd and the unsigned integer value for VIDIOC_REQBUFS:

<7>pxa27x-camera: VIDIOC_REQBUFS
<7>switch(c0105608) VIDIOC_REQBUFS = c0145608

They are different! That's the problem. The capture.c example use #include <linux/videodev2.h> but the v4l2-ioctl.c use declarations in #include <media/v4l2-ioctl.h> for the VIDIOC_REQBUF define macro.

Is there a known version conflict?

Quoted 11 lines

just check what error code it returns, activate the

	dev_dbg(&icd->dev, "%s: %d\n", __func__, p->memory);

in soc_camera.c::soc_camera_reqbufs(), etc.

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer

greets
Maik

Signature · 7 lines
Sensationsangebot verlängert: GMX FreeDSL - Telefonanschluss + DSL 
für nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K1308T4569a

--
video4linux-list mailing list
Unsubscribe mailto:[email protected]?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list
#5 lore raw
Quoted 28 lines · Maik Steuer

-------- Original-Nachricht --------

Quoted 17 lines

Datum: Fri, 28 Nov 2008 18:00:47 +0100 (CET)
Von: Guennadi Liakhovetski <[email protected]>
An: Maik Steuer <[email protected]>
CC: [email protected], [email protected]
Betreff: Re: testing soc_camera with mt9m001 on pxa270

Quoted 2 lines · Maik Steuer
Quoted 2 lines

I would suggest you tell us what camera you are going to use, maybe someone is already working on a driver for it. If not - you write a

driver

Quoted 6 lines
Quoted 1 line

yourself and start working with a real hardware.

At the moment the camera is only a FPGA which sends 8 Bit dummy data with hsync, vsync and pixclock. So I can change all necessary parameters for pxa requirements.

Quoted 5 lines
Quoted 2 lines

I throught that the ioctl (fd, VIDIOC_REQBUFS, &req) starts soc_camera_reqbufs() but it isn't so.

Yes, this is indeed what should happen: see __video_do_ioctl() and around it. You're saying, that VIDIOC_REQBUFS is the first failing ioctl? Then

Yes, VIDIOC_REQBUFS is the first failling. The right case construction wasn't called. I printed out the commited ioctl cmd and the unsigned integer value for VIDIOC_REQBUFS:

Quoted 8 lines

<7>pxa27x-camera: VIDIOC_REQBUFS
<7>switch(c0105608) VIDIOC_REQBUFS = c0145608

They are different! That's the problem. The capture.c example use #include <linux/videodev2.h> but the v4l2-ioctl.c use declarations in #include <media/v4l2-ioctl.h> for the VIDIOC_REQBUF define macro.

Is there a known version conflict?

Oops, not to me. Mauro?

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer

--
video4linux-list mailing list
Unsubscribe mailto:[email protected]?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list

#6 lore raw
Quoted 33 lines · On Mon, 1 Dec 2008 11:43:04 +0100 (CET) Guennadi Liakhovetski…
Quoted 31 lines · Maik Steuer

-------- Original-Nachricht --------

Quoted 17 lines

Datum: Fri, 28 Nov 2008 18:00:47 +0100 (CET)
Von: Guennadi Liakhovetski <[email protected]>
An: Maik Steuer <[email protected]>
CC: [email protected], [email protected]
Betreff: Re: testing soc_camera with mt9m001 on pxa270

Quoted 2 lines · Maik Steuer
Quoted 2 lines

I would suggest you tell us what camera you are going to use, maybe someone is already working on a driver for it. If not - you write a

driver

Quoted 6 lines
Quoted 1 line

yourself and start working with a real hardware.

At the moment the camera is only a FPGA which sends 8 Bit dummy data with hsync, vsync and pixclock. So I can change all necessary parameters for pxa requirements.

Quoted 5 lines
Quoted 2 lines

I throught that the ioctl (fd, VIDIOC_REQBUFS, &req) starts soc_camera_reqbufs() but it isn't so.

Yes, this is indeed what should happen: see __video_do_ioctl() and around it. You're saying, that VIDIOC_REQBUFS is the first failing ioctl? Then

Yes, VIDIOC_REQBUFS is the first failling. The right case construction wasn't called. I printed out the commited ioctl cmd and the unsigned integer value for VIDIOC_REQBUFS:

<7>pxa27x-camera: VIDIOC_REQBUFS
<7>switch(c0105608) VIDIOC_REQBUFS = c0145608

Quoted 7 lines
Quoted 5 lines

They are different! That's the problem. The capture.c example use #include <linux/videodev2.h> but the v4l2-ioctl.c use declarations in #include <media/v4l2-ioctl.h> for the VIDIOC_REQBUF define macro.

Is there a known version conflict?

Oops, not to me. Mauro?

v4l2-ioctl.h doesn't define VIDIOC_REQBUF. It just includes linux/videodev2.h, as:

linux/include/linux/videodev2.h:#define VIDIOC_REQBUFS _IOWR('V', 8, struct v4l2_requestbuffers)

Can you double check what #define are you using with the driver and with the userspace?

Maybe the macro is wrongly evaluated or you're linking against a broken version of the file.

There's another possibility:

the 3rd argument of the macro is used to determine the size of the parameter. The size of the struct may vary (depending on how the struct is defined), depending on the architecture.

In the case of this macro, it is defined as:

struct v4l2_requestbuffers {
        __u32                   count;
        enum v4l2_buf_type      type;
        enum v4l2_memory        memory;
        __u32                   reserved[2];
};

On most architectures, enum is evaluated as a 32 bits data. So, the size of the struct is 16. However, on a few architectures, like arm, enum is generally evaluated as 8 bits. You can see some discussions about this at [1]. The fix on ARM is to pass an additional compilation parameter on ARM [2]. Probably, something like this is needed also when compiling v4l utils.

[1] http://threebit.net/mail-archive/video4linux/msg01880.html
[2] http://threebit.net/mail-archive/video4linux/msg02037.html

Cheers,
Mauro

--
video4linux-list mailing list
Unsubscribe mailto:[email protected]?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list