IMX6Q camera驱动分析 (4)

本文结合项目实际需求做一个关于设备驱动的分析,如何新加一个Camera设备

这个项目使用了一个并口摄像头信号到MCU。具体原理框图如下

 Camera数据流向是 sensor -->913串行器----->914解串器------>并口数据--->imx6q

在设备树上的配置如下:

&i2c2{
    #address-cells = <1>;
        #size-cells = <0>;
        status = "okay"; 
    ds914desilizer:ds914desilizer@0x60{
        compatible = "ds914dseilizer,TI";
        ipu=<1>;
        csi=<1>;
        reg=<0x60>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctl_ipu_ds914>;
        
        width = <1280>;
        height = <720>;
        denominator  = <25>;
        numerator  =<1>;

    };    
};

因为是一个i2c设备,于是挂载在i2c这个设备树下,并且使能这个i2c,在里面使能复用并口数据IO,设置分辨率等。

那么看设备驱动做了什么。

内核有一个OV5640的例子,于是对其改改就成我们自己的了。

 

 国际惯例,是一个i2c驱动,注册一个i2c_driver .

 

设备驱动probe做的主要事情就是填充一个sensor_data 结构体并将其放入 v4l2_int_device 的 私有数据里。这个私有数据以后被master 所用 ,也就是mxc_v4l2_capture.c的 cam_data 

这个v4l2_int_device 是一个从类型设备(代表具体的sensor)

然后 调用注册函数 将其注册,就是放入我第二篇说的那个链表中,用来与具体的master匹配,匹配成功后调用attach函数。

可见,写一个设备驱动的话,最主要的就是生成一个v4l2_int_device 和 sensor_data 。

还有

 v4l2_int_ioctl_desc 这个 数组里面的函数,在一定情况时会被mxc_v4l2_capture.c所调用。

这么做的原因是为了更好的实现设备与驱动的分离,驱动只要调接口,随你设备是如何做的。

 具体代码不放出来了,不方便透露。

猜你喜欢

转载自www.cnblogs.com/coversky/p/10886168.html