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 코드가 수행되게 한다.
짜증나....
Trackback URL : http://kdsoo.com/trackback/1160