omap24xxcam 은 v4l2_int_device master 가되며

master 에는 하나의 v4l2_int_device slave가 attach된다.

camif 가 하나인 omap24xx 의 경우 시리얼 인터페이스에서 듀얼 카메라를 이용하기 위해

센서의 enable 핀을 따로두어 센서간 스위칭을 한다.

v4l2 기반으로 시리얼 인터페이스의 듀얼카메라를 구현하기 위해서는 근본적으로

slave device 가 두개로 잡혀야하지만, 그러기 위해선 master도 두개가 잡혀야하는 구조이므로

VIDIOC_S_INPUT IOCTL을 통해 input sensor 를 select 할수 있도록 하여

sensor status 를 global하게 가져가도록 하자.

매 ioctl 마다 sesor status 를 체크하는 루틴을 두어 하나의 센서 드라이버에서

두개의 센서를 컨트롤 할수 있도록 하자.

즉 v4l2_int_device *s 는 변화 없으며, global status struct member 를 통해서

ioctl sub routine 내에서 분기하도록 하자.

omap의 platform_data 도 분기하도록 해주어 (board_XXX_camera.c) initializing 에 문제 없도록 하자.

default sensor를 설정하여 kernel init 시 해당 센서로 i2c driver 및 v4l2_int_device 드라이버가

등록되도록 하자.

시리얼 인터페이스 카메라의 경우 센서의 I2C slave id 가 동일해도 문제가 없는 구조이나

리눅스 의 구조는 그렇지 않다. 주의해서 dev, drv attach 되도록 하자.

아...짜증나





camera init / select input flow

vidioc_s_input 순서
omap24xxcam_open => ioctl_g_ifparm => case VIDIOC_S_INPUT(videodev.c)
=> vidioc_s_input (omap24xxcam)

그러므로 vidioc_s_input 후에 camif 를 reset 하고 카메라를 재시작시키는 등의 과정을 수행
global camera status 를 셋팅하여
다음 ioctl 부터는 스위칭한 센서의 ioctl 코드가 수행되게 한다.

짜증나....



크리에이티브 커먼즈 라이선스
Creative Commons License

Tag : Dual camera, OMAP24xx, v4l2

V4L2 camera device register/unregister flow

Posted 2007/10/26 19:35 by kdsoo

kernel 2.6 omap2430 기준으로

CPU camera interface
    omap24xxcam_probe
    video_register_device ( GRABBER type 의 capture device 로 등록 (v4l2 master))
sensor_probe
    i2c_add_driver
    i2c_register_driver
    driver_probe_device (device(i2c버스) 에 driver로 등록)
Video4Linux
sensor v4l2_int_device_register (v4l2 slave)
    v4l2 ioctl 등록

아....짜증나


크리에이티브 커먼즈 라이선스
Creative Commons License

Tag : Dual camera, OMAP2430, v4l2


그동안 듀얼 카메라의 센서를 둘 다 probe 시킬려하면 먼저 등록된 놈만 probe 가 되는 이유를 알았다...

driver_probe_device() 에서 device의 address 가 같으면 등록을 안시켜버린다...

배라먹을...

등록 조건을 풀어버리면 부팅이 안되네 =ㅅ=

크리에이티브 커먼즈 라이선스
Creative Commons License

Tag : Dual camera, KERNEL 2.6