android camera摄像头驱动 下载本文

摄像头驱动比较简单,完成一面三大步就可以: 摄像头的上电、时钟这些基本条件; IIC保证摄像头的初始化; 摄像头工作后传回数据到主控。

完成这三个步骤就完成了摄像头基本工作的调试。 1、摄像头的上电、时钟这些基本条件的实现

电源部分,上电时对应规格书,确认上电时序;MCLK摄像头的主时钟是否提供,看下面是和电和规格书中的

(1)、主意摄像头工作要两组电压:1.8V(1.5V)、2.8V还有MCLK

程序中对电源控制:我们在arch\\arm\\mach-smdkv310.c中,完成上面两个步骤的代码,(这一点不同平台也许有所不同,这里这是一个实例,这部分代码只是针对三星平台的)

[cpp] view plaincopy

1. #ifdef CONFIG_VIDEO_GT2005

2. static void set_cam2005_main_power(int onoff) 3. 4. { 5.

6. unsigned int gpio; 7. int err; 8.

9. if(onoff) 10. {

11. err = gpio_request(S5PV210_GPB(2), \); 12. if (err)

13. printk(KERN_ERR \); 14. s3c_gpio_cfgpin(S5PV210_GPB(2),S3C_GPIO_OUTPUT); 15. s3c_gpio_setpull(S5PV210_GPB(2), S3C_GPIO_PULL_UP); 16. gpio_direction_output(S5PV210_GPB(2), 1); 17. gpio_free(S5PV210_GPB(2)); 18.

19. //RESET

20. err = gpio_request(S5PV210_GPE1(4), \); 21. if (err)

22. printk(KERN_ERR \);

23. s3c_gpio_setpull(S5PV210_GPE1(4), S3C_GPIO_PULL_NONE);

24. gpio_direction_output(S5PV210_GPE1(4),0); 25. mdelay(100);

26. gpio_direction_output(S5PV210_GPE1(4), 1); 27. gpio_free(S5PV210_GPE1(4)); 28. 29.

30. //PWDN CAM_back

31. err = gpio_request(S5PV210_GPB(4), \); 32. if (err)

33. printk(KERN_ERR \); 34. s3c_gpio_cfgpin(S5PV210_GPB(4),S3C_GPIO_OUTPUT); 35. s3c_gpio_setpull(S5PV210_GPB(4), S3C_GPIO_PULL_UP); 36. gpio_direction_output(S5PV210_GPB(4), 0); 37. mdelay(100);

38. gpio_direction_output(S5PV210_GPB(4), 1); 39. gpio_free(S5PV210_GPB(4)); 40. 41. } 42. else 43. { 44. ……………… 45. } 46. return; 47. } 48. #endif

提供MCLK代码如下:

[cpp] view plaincopy

1. static int smdkv210_cam_clk_init(void) 2. {

3. unsigned int tempvalue=0;

4. tempvalue = readl(S5P_CLK_DIV1); 5. tempvalue = (tempvalue &0xffff0fff); 6. writel(tempvalue,S5P_CLK_DIV1); 7. tempvalue = readl(S5P_CLK_SRC1);

8. tempvalue = (tempvalue &0xffff0fff)|0x00001000; 9. writel(tempvalue,S5P_CLK_SRC1); 10.

11. return 0; 12. }

这时拿示波器抓到上电时的波形和MCLK24MHZ的时钟,信号就说明我们完成了这一步,其实在实际工作中,我们一般出问题的时候才会测这些数据,确认问题点。 上电时序: (1)、上电时序; (2)、MCLK如下所示。

2、 IIC和一些参数的配置

[cpp] view plaincopy

1. #ifdef CONFIG_VIDEO_GT2005

2. static struct GT2005_platform_data GT2005_plat = {