⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ov2640.c

📁 LINUX下的ov2640驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	ov2640_write_reg(0x6d, 0x00);	ov2640_write_reg(0x3d, 0x38);	ov2640_write_reg(0xff, 0x00);	ov2640_write_reg(0xe5, 0x7f);	ov2640_write_reg(0xf9, 0xc0);	ov2640_write_reg(0x41, 0x24);	ov2640_write_reg(0x44, 0x06);	ov2640_write_reg(0xe0, 0x14);	ov2640_write_reg(0x76, 0xff);	ov2640_write_reg(0x33, 0xa0);	ov2640_write_reg(0x42, 0x20);	ov2640_write_reg(0x43, 0x18);	ov2640_write_reg(0x4c, 0x00);	ov2640_write_reg(0x87, 0xd0);	ov2640_write_reg(0x88, 0x3f);	ov2640_write_reg(0xd7, 0x03);	ov2640_write_reg(0xd9, 0x10);	ov2640_write_reg(0xd3, 0x82);	ov2640_write_reg(0xc8, 0x08);	ov2640_write_reg(0xc9, 0x80);	ov2640_write_reg(0x7c, 0x00);	ov2640_write_reg(0x7d, 0x00);	ov2640_write_reg(0x7c, 0x03);	ov2640_write_reg(0x7d, 0x48);	ov2640_write_reg(0x7d, 0x48);	ov2640_write_reg(0x7c, 0x08);	ov2640_write_reg(0x7d, 0x20);	ov2640_write_reg(0x7d, 0x10);	ov2640_write_reg(0x7d, 0x0e);	ov2640_write_reg(0x90, 0x00);	ov2640_write_reg(0x91, 0x0e);	ov2640_write_reg(0x91, 0x1a);	ov2640_write_reg(0x91, 0x31);	ov2640_write_reg(0x91, 0x5a);	ov2640_write_reg(0x91, 0x69);	ov2640_write_reg(0x91, 0x75);	ov2640_write_reg(0x91, 0x7e);	ov2640_write_reg(0x91, 0x88);	ov2640_write_reg(0x91, 0x8f);	ov2640_write_reg(0x91, 0x96);	ov2640_write_reg(0x91, 0xa3);	ov2640_write_reg(0x91, 0xaf);	ov2640_write_reg(0x91, 0xc4);	ov2640_write_reg(0x91, 0xd7);	ov2640_write_reg(0x91, 0xe8);	ov2640_write_reg(0x91, 0x20);	ov2640_write_reg(0x92, 0x00);	ov2640_write_reg(0x93, 0x06);	ov2640_write_reg(0x93, 0xe3);	ov2640_write_reg(0x93, 0x03);	ov2640_write_reg(0x93, 0x03);	ov2640_write_reg(0x93, 0x00);	ov2640_write_reg(0x93, 0x02);	ov2640_write_reg(0x93, 0x00);	ov2640_write_reg(0x93, 0x00);	ov2640_write_reg(0x93, 0x00);	ov2640_write_reg(0x93, 0x00);	ov2640_write_reg(0x93, 0x00);	ov2640_write_reg(0x93, 0x00);	ov2640_write_reg(0x93, 0x00);	ov2640_write_reg(0x96, 0x00);	ov2640_write_reg(0x97, 0x08);	ov2640_write_reg(0x97, 0x19);	ov2640_write_reg(0x97, 0x02);	ov2640_write_reg(0x97, 0x0c);	ov2640_write_reg(0x97, 0x24);	ov2640_write_reg(0x97, 0x30);	ov2640_write_reg(0x97, 0x28);	ov2640_write_reg(0x97, 0x26);	ov2640_write_reg(0x97, 0x02);	ov2640_write_reg(0x97, 0x98);	ov2640_write_reg(0x97, 0x80);	ov2640_write_reg(0x97, 0x00);	ov2640_write_reg(0x97, 0x00);	ov2640_write_reg(0xa4, 0x00);	ov2640_write_reg(0xa8, 0x00);	ov2640_write_reg(0xc5, 0x11);	ov2640_write_reg(0xc6, 0x51);	ov2640_write_reg(0xbf, 0x80);	ov2640_write_reg(0xc7, 0x10);	ov2640_write_reg(0xb6, 0x66);	ov2640_write_reg(0xb8, 0xa5);	ov2640_write_reg(0xb7, 0x64);	ov2640_write_reg(0xb9, 0x7c);	ov2640_write_reg(0xb3, 0xaf);	ov2640_write_reg(0xb4, 0x97);	ov2640_write_reg(0xb5, 0xff);	ov2640_write_reg(0xb0, 0xc5);	ov2640_write_reg(0xb1, 0x94);	ov2640_write_reg(0xb2, 0x0f);	ov2640_write_reg(0xc4, 0x5c);	ov2640_write_reg(0xa6, 0x00);	ov2640_write_reg(0xa7, 0x20);	ov2640_write_reg(0xa7, 0xd8);	ov2640_write_reg(0xa7, 0x1b);	ov2640_write_reg(0xa7, 0x31);	ov2640_write_reg(0xa7, 0x00);	ov2640_write_reg(0xa7, 0x18);	ov2640_write_reg(0xa7, 0x20);	ov2640_write_reg(0xa7, 0xd8);	ov2640_write_reg(0xa7, 0x19);	ov2640_write_reg(0xa7, 0x31);	ov2640_write_reg(0xa7, 0x00);	ov2640_write_reg(0xa7, 0x18);	ov2640_write_reg(0xa7, 0x20);	ov2640_write_reg(0xa7, 0xd8);	ov2640_write_reg(0xa7, 0x19);	ov2640_write_reg(0xa7, 0x31);	ov2640_write_reg(0xa7, 0x00);	ov2640_write_reg(0xa7, 0x18);	ov2640_write_reg(0xc0, 0x64);	ov2640_write_reg(0xc1, 0x4b);	ov2640_write_reg(0x86, 0x1d);	ov2640_write_reg(0x50, 0x00);	ov2640_write_reg(0x51, 0xc8);	ov2640_write_reg(0x52, 0x96);	ov2640_write_reg(0x53, 0x00);	ov2640_write_reg(0x54, 0x00);	ov2640_write_reg(0x55, 0x00);	ov2640_write_reg(0x57, 0x00);	ov2640_write_reg(0x5a, 0xc8);	ov2640_write_reg(0x5b, 0x96);	ov2640_write_reg(0x5c, 0x00);	ov2640_write_reg(0xc3, 0xef);	ov2640_write_reg(0x7f, 0x00);	ov2640_write_reg(0xda, 0x01);	ov2640_write_reg(0xe5, 0x1f);	ov2640_write_reg(0xe1, 0x67);	ov2640_write_reg(0xe0, 0x00);	ov2640_write_reg(0xdd, 0x7f);	ov2640_write_reg(0x05, 0x00);	return 0;}/*! * ov2640 sensor interface Initialization * @param param            sensor_interface * * @param width            u32 * @param height           u32 * @return  None */static void ov2640_interface(sensor_interface * param, u32 width, u32 height){	param->Vsync_pol = 0x0;	param->clk_mode = 0x0;	//gated	param->pixclk_pol = 0x0;	param->data_width = 0x1;	param->data_pol = 0x0;	param->ext_vsync = 0x0;	param->Vsync_pol = 0x0;	param->Hsync_pol = 0x0;	param->width = width - 1;	param->height = height - 1;	param->pixel_fmt = IPU_PIX_FMT_UYVY;	param->mclk = 27000000;}/*! * ov2640 sensor set color configuration * * @param bright       int * @param saturation   int * @param red          int * @param green        int * @param blue         int * @return  None */static void ov2640_set_color(int bright, int saturation, int red, int green,			     int blue){}/*! * ov2640 sensor get color configuration * * @param bright       int * * @param saturation   int * * @param red          int * * @param green        int * * @param blue         int * * @return  None */static void ov2640_get_color(int *bright, int *saturation, int *red, int *green,			     int *blue){}/*! * ov2640 sensor set AE measurement window mode configuration * * @param ae_mode      int * @return  None */static void ov2640_set_ae_mode(int ae_mode){}/*! * ov2640 sensor get AE measurement window mode configuration * * @param ae_mode      int * * @return  None */static void ov2640_get_ae_mode(int *ae_mode){}/*! * ov2640 sensor enable/disable AE  * * @param active      int * @return  None */static void ov2640_set_ae(int active){}/*! * ov2640 sensor enable/disable auto white balance * * @param active      int * @return  None */static void ov2640_set_awb(int active){}/*! * ov2640 sensor set the flicker control  * * @param control      int * @return  None */static void ov2640_flicker_control(int control){}/*! * ov2640 Get mode&flicker control parameters  * * @return  None */static void ov2640_get_control_params(int *ae, int *awb, int *flicker){}extern cam_data *g_cam;static sensor_interface *ov2640_config(int *frame_rate, int high_quality){	u32 out_width, out_height;	if (high_quality) {		out_width = 1600;		out_height = 1120;		g_cam->crop_bounds.left = 0;		g_cam->crop_bounds.width = 1600;		g_cam->crop_bounds.top = 0;		g_cam->crop_bounds.height = 1120;		g_cam->crop_current = g_cam->crop_defrect = g_cam->crop_bounds;		g_cam->streamparm.parm.capture.capturemode = 1;	} else {		out_width = 800;		out_height = 600;		g_cam->crop_bounds.left = 0;		g_cam->crop_bounds.width = 800;		g_cam->crop_bounds.top = 0;		g_cam->crop_bounds.height = 600;		g_cam->crop_current = g_cam->crop_defrect = g_cam->crop_bounds;		g_cam->streamparm.parm.capture.capturemode = 0;	}	ov2640_interface(interface_param, out_width, out_height);	set_mclk_rate(&interface_param->mclk);	if (high_quality) {		ov2640_init_1600_1120();	} else {		ov2640_init_800_600();	}	return interface_param;}/*! * ov2640 Reset function * * @return  None */static sensor_interface *ov2640_reset(void){	return ov2640_config(&reset_frame_rate, V4L2_MODE_HIGHQUALITY);}/*! * ov2640 get_status function * * @return  int */static int ov2640_get_status(void){	int retval = 0;	if (!interface_param)		return -ENODEV;	retval = ov2640_write_reg(0xff, 1);	return retval;}struct camera_sensor camera_sensor_if = {	.set_color = ov2640_set_color,	.get_color = ov2640_get_color,	.set_ae_mode = ov2640_set_ae_mode,	.get_ae_mode = ov2640_get_ae_mode,	.set_ae = ov2640_set_ae,	.set_awb = ov2640_set_awb,	.flicker_control = ov2640_flicker_control,	.get_control_params = ov2640_get_control_params,	.config = ov2640_config,	.reset = ov2640_reset,	.get_status = ov2640_get_status,};extern void gpio_sensor_active(void);/*! * ov2640 init function * * @return  Error code indicating success or failure */static __init int ov2640_init(void){	u8 err;	PMIC_STATUS ret;	t_regulator_voltage voltage;#ifdef CONFIG_MACH_MX27_MDK27V1	/*AVDD--2.8v */	voltage.vcam = VCAM_2_8V;	if ((ret = pmic_power_regulator_set_voltage(REGU_VCAM, voltage)) < 0) {		printk(KERN_ERR "%s:vmmc1 set voltage error:%d\n", __func__,		       ret);		return -1;	} else {		printk(KERN_INFO "%s:vcam set voltage ok\n", __func__);	}	if ((ret = pmic_power_regulator_on(REGU_VCAM)) < 0) {		printk(KERN_ERR "%s:vcam power on error:%d\n", __func__, ret);		return -1;	} else {		printk(KERN_INFO "%s:vcam power on ok\n", __func__);	}#else	/*AVDD--2.8v */	voltage.vmmc1 = VMMC1_2_8V;	if ((ret = pmic_power_regulator_set_voltage(REGU_VMMC1, voltage)) < 0) {		printk(KERN_ERR "%s:vmmc1 set voltage error:%d\n", __func__,		       ret);		return -1;	} else {		printk(KERN_INFO "%s:vmmc1 set voltage ok\n", __func__);	}	if ((ret = pmic_power_regulator_on(REGU_VMMC1)) < 0) {		printk(KERN_ERR "%s:vmmc1 power on error:%d\n", __func__, ret);		return -1;	} else {		printk(KERN_INFO "%s:vmmc1 power on ok\n", __func__);	}#endif	/*DVDD--1.3v */	voltage.vvib = VVIB_1_3V;	if ((ret = pmic_power_regulator_set_voltage(REGU_VVIB, voltage)) < 0) {		printk(KERN_ERR "%s:VVIB set voltage error:%d\n", __func__,		       ret);		return -1;	} else {		printk(KERN_INFO "%s:VVIB set voltage ok\n", __func__);	}	if ((ret = pmic_power_regulator_on(REGU_VVIB)) < 0) {		printk(KERN_ERR "%s:VVIB power regulator on error:%d\n",		       __func__, ret);		return -1;	} else {		printk(KERN_INFO "%s:VVIB power on ok\n", __func__);	}	/*1V8_SW2A for I2C */	voltage.sw2a = SW2A_1_8V;	if ((ret = pmic_power_regulator_set_voltage(SW_SW2A, voltage)) < 0) {		printk(KERN_ERR "%s:SW2A  set voltage error:%d\n", __func__,		       ret);		return -1;	} else {		printk(KERN_INFO "%s: SW2A power on\n", __func__);	}	if ((ret = pmic_power_regulator_set_voltage(SW_SW2B, voltage)) < 0) {		printk(KERN_ERR "%s:SW2B set voltage error:%d\n", __func__,		       ret);		return -1;	} else {		printk(KERN_INFO "%s:SW2B set voltage ok\n", __func__);	}	if (pmic_power_set_regen_assig(REGU_GPO3, 1) < 0) {		printk(KERN_ERR "%s:set_regen_assig error\n", __func__);		return -1;	} else {		printk(KERN_INFO "%s:set_regen_assig ok\n", __func__);	}	if ((ret = pmic_power_regulator_on(REGU_GPO3)) < 0) {		printk(KERN_ERR "%s:REGU_GPO3 power on error:%d\n", __func__,		       ret);		return -1;	} else {		printk(KERN_INFO "%s:REGU_GPO3 power on ok\n", __func__);	}	gpio_sensor_active();	err = i2c_add_driver(&ov2640_i2c_driver);	return err;}extern void gpio_sensor_inactive(void);/*! * OV2640 cleanup function * * @return  Error code indicating success or failure */static void __exit ov2640_clean(void){	i2c_del_driver(&ov2640_i2c_driver);	gpio_sensor_inactive();}module_init(ov2640_init);module_exit(ov2640_clean);/* Exported symbols for modules. */EXPORT_SYMBOL(camera_sensor_if);MODULE_AUTHOR("Freescale Semiconductor, Inc.");MODULE_DESCRIPTION("OV2640 Camera Driver");MODULE_LICENSE("GPL");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -