V4L 2 soc - camera 데이터 구조

4623 단어
static LIST_HEAD(hosts)
모든 host 는 hosts 가 가리 키 는 링크 에 있 습 니 다.
static LIST_HEAD(devices);
모든 soc camera device 는 devices 가 가리 키 는 링크 에 걸 려 있 습 니 다.
시스템 내 에 soc 가 여러 개 있 을 수 있 습 니 다.camera_host, 각 soccamera_host 1 ~ n 개 soc 대응 가능camera_device。각 soccamera_device soccamera_video_start 함수 생 성 장치 노드 / dev / videoX
soc_camera_host 는 시스템 camera 처리 모듈 에 대응 합 니 다. 이론 적 으로 여러 개의 camera host 가 있 을 수 있 지만 대부분의 시스템 은 camera host 만 있 습 니 다.
soccamera_host_register 에서 v4l2 호출device_register 는 이 soccamera_host v4l2 등록장치 장치.
soccamera_probe 에서 soc 호출camera_init_i2c, soccamera_device 등록 v4l2subdev, 우 리 는 soccamera_probe 코드 를 통 해 알 수 있 듯 이 i2C 장치 만 이런 방식 을 사용 할 수 있 습 니 다. 비 I2C 장치 에 있어 soc 가 필요 합 니 다.camera_링크 제공 add장치 추가.
soc_camera_host, soc_camera_device,v4l2_device,v4l2_subdev 관 계 는 다음 과 같 습 니 다:
  • 이론 적 으로 시스템 내 에 여러 개의 soc 가 있 을 수 있다.camera_host, 물리 적 soccamera_host 는 시스템 의 camera 처리 모듈 구동
  • 하나의 soccamera_host 여러 soc 대응 가능camera_device, 물리 적 soccamera_device 는 camera 인터페이스 입 니 다. soccamera_host 대응 v4l2dev
  • 각 soccamera_device, 시스템 은 그들 을 위해 장치 노드 / dev / videoX 를 만 들 것 입 니 다.
  • 각 soccamera_device 여러 v4l2subdev, 물리 적 v4l2subdev 는 sensor, video AD 칩
  • 일 수 있 습 니 다.
  • v4l2_subdev 는 i2c 걸 기 를 통 해 v4l2 를 받 을 수 있 습 니 다.device, soccamera_링크 가 제공 하 는 adddevice 가 증가 하 는 것 은 sensor 와 video AD 칩 이 MCU camera 인 터 페 이 스 를 연결 하 는 방식 에 의존한다.
  • struct soc_camera_device {
        struct list_head list;
        struct device dev;
        struct device *pdev;        /* Platform device */
        s32 user_width;
        s32 user_height;
        enum v4l2_colorspace colorspace;
        unsigned char iface;        /* Host number */
        unsigned char devnum;       /* Device number per host */
        struct soc_camera_sense *sense; /* See comment in struct definition */
        struct soc_camera_ops *ops;
        struct video_device *vdev;
        const struct soc_camera_format_xlate *current_fmt;
        struct soc_camera_format_xlate *user_formats;
        int num_user_formats;
        enum v4l2_field field;      /* Preserve field over close() */
        void *host_priv;        /* Per-device host private data */
        /* soc_camera.c private count. Only accessed with .video_lock held */
        int use_count;
        struct mutex video_lock;    /* Protects device data */
        struct file *streamer;      /* stream owner */
        struct videobuf_queue vb_vidq;
    };
    

    각 soccamera_device 는 soc 를 제외 하고 / dev / videoX 장치 노드 에 대응 합 니 다.camera_probe 시 실 패 했 습 니 다.
    @list:soc_came_device 는 이 구성원 을 통 해 전역 devices 링크 에 연결 합 니 다.
    @ pdev: 모든 soccamera_device, 모두 하나의 platform device 가 있 습 니 다. pdev 가 바로 이 platform device 구조의 dev 구성원 입 니 다.
    @user_width, @user_height: 이 카메라 의 부족 width 와 height
    @ iface: camera bus id 이자 host id 입 니 다. 하나의 host 는 여러 soc 에 대응 할 수 있 습 니 다.camera_device
    @ devnum: device number, 각 soccamera_device 는 자동 으로 device number 를 할당 합 니 다.
    @ ops: 조작 집합, sensor, video AD (host 도 있 을 수 있 음) 구동 이 인 터 페 이 스 를 실현 하려 면
    @use_count: soc camera 사용 계수, 이 장 치 를 열 때마다 1 을 추가 하고 닫 으 면 1 을 감소 합 니 다.
    soc_camera_host
    struct soc_camera_host {
        struct v4l2_device v4l2_dev;
        struct list_head list;
        unsigned char nr;               /* Host number */
        void *priv;
        const char *drv_name;
        struct soc_camera_host_ops *ops;
    }

    @v4l2_dev: host 마다 v4l2device
    @list:soc_camera_host 는 이 구성원 을 통 해 전역 hosts 링크 에 연결 합 니 다.
    @ nr: host number, 호스트 인터페이스 마다 host 가 대응 합 니 다.
    @ priv: 일반적으로 플랫폼 의 특정한 camera 인 자 를 저장 합 니 다. 예 를 들 어 irq, DMA 등 입 니 다.
    struct soc_camera_ops {
        int (*suspend)(struct soc_camera_device *, pm_message_t state);
        int (*resume)(struct soc_camera_device *);
        unsigned long (*query_bus_param)(struct soc_camera_device *);
        int (*set_bus_param)(struct soc_camera_device *, unsigned long);
        int (*enum_input)(struct soc_camera_device *, struct v4l2_input *);
        const struct v4l2_queryctrl *controls;
        int num_controls;
    };  
    이것 은 sensor, video AD 또는 host 가 실현 하 는 리 셋 함수 집합 입 니 다.
    @ suspend, @ resume: 시스템 휴면 깨 울 때의 리 셋 함수 입 니 다. 전원 관 리 를 고려 하지 않 으 면 이 두 함 수 를 실현 하지 않 을 수 있 습 니 다.
    @query_bus_param: sensor 와 host 간 의 버스 정 보 를 얻 습 니 다. 예 를 들 어 HSYNC VSYNC 극성, 데이터 버스 너비, 데이터 라인 극성 등 입 니 다.
    @set_bus_param: sensor 와 host 사이 의 버스 매개 변 수 를 설정 합 니 다.
    @enum_input: 주어진 input number 를 매 거 하고 상층 부 는 @ v4l2 를 통과 합 니 다.input - > index 는 어떤 input 를 볼 지 지정 합 니 다. 일반적으로 실현 되 지 않 을 수 있 습 니 다.
    @controls:controls
    @num_controls: @ controls 수

    좋은 웹페이지 즐겨찾기