一、摄像头驱动
我们以GT2005为例,来讲述一个摄像头驱动的调试过程:
摄像头和主控的关系图,如下:
摄像头驱动比较简单,完成一面三大步就可以:
摄像头的上电、时钟这些基本条件;
IIC保证摄像头的初始化;
摄像头工作后传回数据到主控。
完成这三个步骤就完成了摄像头基本工作的调试。
1、 摄像头的上电、时钟这些基本条件的实现
电源部分,上电时对应规格书,确认上电时序;MCLK摄像头的主时钟是否提供,看下面是和电和规格书中的
(1)、主意摄像头工作要两组电压:1.8V(1.5V)、2.8V还有MCLK
程序中对电源控制:我们在arch\arm\mach-smdkv310.c中,完成上面两个步骤的代码,(这一点不同平台也许有所不同,这里这是一个实例,这部分代码只是针对三星平台的)
- #ifdef CONFIG_VIDEO_GT2005
- static void set_cam2005_main_power(int onoff)
- {
- unsigned int gpio;
- int err;
- if(onoff)
- {
- err = gpio_request(S5PV210_GPB(2), "GPB");
- if (err)
- printk(KERN_ERR "#### failed to request GPB2 for CAM\n");
- s3c_gpio_cfgpin(S5PV210_GPB(2),S3C_GPIO_OUTPUT);
- s3c_gpio_setpull(S5PV210_GPB(2), S3C_GPIO_PULL_UP);
- gpio_direction_output(S5PV210_GPB(2), 1);
- gpio_free(S5PV210_GPB(2));
- //RESET
- err = gpio_request(S5PV210_GPE1(4), "GPE1");
- if (err)
- printk(KERN_ERR "#### failed to request GPE1_4 for CAM\n");
- s3c_gpio_setpull(S5PV210_GPE1(4), S3C_GPIO_PULL_NONE);
- gpio_direction_output(S5PV210_GPE1(4),0);
- mdelay(100);
- gpio_direction_output(S5PV210_GPE1(4), 1);
- gpio_free(S5PV210_GPE1(4));
- //PWDN CAM_back
- err = gpio_request(S5PV210_GPB(4), "GPB");
- if (err)
- printk(KERN_ERR "#### failed to request GPB4 for CAM\n");
- s3c_gpio_cfgpin(S5PV210_GPB(4),S3C_GPIO_OUTPUT);
- s3c_gpio_setpull(S5PV210_GPB(4), S3C_GPIO_PULL_UP);
- gpio_direction_output(S5PV210_GPB(4), 0);
- mdelay(100);
- gpio_direction_output(S5PV2