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

📄 cpia2_core.c

📁 V4l driver for DVB HD
💻 C
📖 第 1 页 / 共 5 页
字号:
			 cam_reg);}/****************************************************************************** * *  cpia2_set_property_mirror * *****************************************************************************/void cpia2_set_property_mirror(struct camera_data *cam, int prop_val){	unsigned char cam_reg;	cpia2_do_command(cam, CPIA2_CMD_GET_USER_EFFECTS, TRANSFER_READ, 0);	cam_reg = cam->params.vp_params.user_effects;	if (prop_val)	{		cam_reg |= CPIA2_VP_USER_EFFECTS_MIRROR;	}	else	{		cam_reg &= ~CPIA2_VP_USER_EFFECTS_MIRROR;	}	cpia2_do_command(cam, CPIA2_CMD_SET_USER_EFFECTS, TRANSFER_WRITE,			 cam_reg);}/****************************************************************************** * *  set_target_kb * *  The new Target KB is set in cam->params.vc_params.target_kb and *  activates on reset. *****************************************************************************/int cpia2_set_target_kb(struct camera_data *cam, unsigned char value){	DBG("Requested target_kb = %d\n", value);	if (value != cam->params.vc_params.target_kb) {		cpia2_usb_stream_pause(cam);		/* reset camera for new target_kb */		cam->params.vc_params.target_kb = value;		cpia2_reset_camera(cam);		cpia2_usb_stream_resume(cam);	}	return 0;}/****************************************************************************** * *  cpia2_set_gpio * *****************************************************************************/int cpia2_set_gpio(struct camera_data *cam, unsigned char setting){	int ret;	/* Set the microport direction (register 0x90, should be defined	 * already) to 1 (user output), and set the microport data (0x91) to	 * the value in the ioctl argument.	 */	ret = cpia2_do_command(cam,			       CPIA2_CMD_SET_VC_MP_GPIO_DIRECTION,			       CPIA2_VC_MP_DIR_OUTPUT,			       255);	if (ret < 0)		return ret;	cam->params.vp_params.gpio_direction = 255;	ret = cpia2_do_command(cam,			       CPIA2_CMD_SET_VC_MP_GPIO_DATA,			       CPIA2_VC_MP_DIR_OUTPUT,			       setting);	if (ret < 0)		return ret;	cam->params.vp_params.gpio_data = setting;	return 0;}/****************************************************************************** * *  cpia2_set_fps * *****************************************************************************/int cpia2_set_fps(struct camera_data *cam, int framerate){	int retval;	switch(framerate) {		case CPIA2_VP_FRAMERATE_30:		case CPIA2_VP_FRAMERATE_25:			if(cam->params.pnp_id.device_type == DEVICE_STV_672 &&			   cam->params.version.sensor_flags ==						    CPIA2_VP_SENSOR_FLAGS_500) {				return -EINVAL;			}			/* Fall through */		case CPIA2_VP_FRAMERATE_15:		case CPIA2_VP_FRAMERATE_12_5:		case CPIA2_VP_FRAMERATE_7_5:		case CPIA2_VP_FRAMERATE_6_25:			break;		default:			return -EINVAL;	}	if (cam->params.pnp_id.device_type == DEVICE_STV_672 &&	    framerate == CPIA2_VP_FRAMERATE_15)		framerate = 0; /* Work around bug in VP4 */	retval = cpia2_do_command(cam,				 CPIA2_CMD_FRAMERATE_REQ,				 TRANSFER_WRITE,				 framerate);	if(retval == 0)		cam->params.vp_params.frame_rate = framerate;	return retval;}/****************************************************************************** * *  cpia2_set_brightness * *****************************************************************************/void cpia2_set_brightness(struct camera_data *cam, unsigned char value){	/***	 * Don't let the register be set to zero - bug in VP4 - flash of full	 * brightness	 ***/	if (cam->params.pnp_id.device_type == DEVICE_STV_672 && value == 0)		value++;	DBG("Setting brightness to %d (0x%0x)\n", value, value);	cpia2_do_command(cam,CPIA2_CMD_SET_VP_BRIGHTNESS, TRANSFER_WRITE,value);}/****************************************************************************** * *  cpia2_set_contrast * *****************************************************************************/void cpia2_set_contrast(struct camera_data *cam, unsigned char value){	DBG("Setting contrast to %d (0x%0x)\n", value, value);	cam->params.color_params.contrast = value;	cpia2_do_command(cam, CPIA2_CMD_SET_CONTRAST, TRANSFER_WRITE, value);}/****************************************************************************** * *  cpia2_set_saturation * *****************************************************************************/void cpia2_set_saturation(struct camera_data *cam, unsigned char value){	DBG("Setting saturation to %d (0x%0x)\n", value, value);	cam->params.color_params.saturation = value;	cpia2_do_command(cam,CPIA2_CMD_SET_VP_SATURATION, TRANSFER_WRITE,value);}/****************************************************************************** * *  wake_system * *****************************************************************************/void wake_system(struct camera_data *cam){	cpia2_do_command(cam, CPIA2_CMD_SET_WAKEUP, TRANSFER_WRITE, 0);}/****************************************************************************** * *  set_lowlight_boost * *  Valid for STV500 sensor only *****************************************************************************/void set_lowlight_boost(struct camera_data *cam){	struct cpia2_command cmd;	if (cam->params.pnp_id.device_type != DEVICE_STV_672 ||	    cam->params.version.sensor_flags != CPIA2_VP_SENSOR_FLAGS_500)		return;	cmd.direction = TRANSFER_WRITE;	cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP;	cmd.reg_count = 3;	cmd.start = CPIA2_VP_RAM_ADDR_H;	cmd.buffer.block_data[0] = 0;	/* High byte of address to write to */	cmd.buffer.block_data[1] = 0x59;	/* Low byte of address to write to */	cmd.buffer.block_data[2] = 0;	/* High byte of data to write */	cpia2_send_command(cam, &cmd);	if (cam->params.vp_params.lowlight_boost) {		cmd.buffer.block_data[0] = 0x02;	/* Low byte data to write */	} else {		cmd.buffer.block_data[0] = 0x06;	}	cmd.start = CPIA2_VP_RAM_DATA;	cmd.reg_count = 1;	cpia2_send_command(cam, &cmd);	/* Rehash the VP4 values */	cpia2_do_command(cam, CPIA2_CMD_REHASH_VP4, TRANSFER_WRITE, 1);}/****************************************************************************** * *  cpia2_set_format * *  Assumes that new size is already set in param struct. *****************************************************************************/void cpia2_set_format(struct camera_data *cam){	cam->flush = true;	cpia2_usb_stream_pause(cam);	/* reset camera to new size */	cpia2_set_low_power(cam);	cpia2_reset_camera(cam);	cam->flush = false;	cpia2_dbg_dump_registers(cam);	cpia2_usb_stream_resume(cam);}/****************************************************************************** * * cpia2_dbg_dump_registers * *****************************************************************************/void cpia2_dbg_dump_registers(struct camera_data *cam){#ifdef _CPIA2_DEBUG_	struct cpia2_command cmd;	if (!(debugs_on & DEBUG_DUMP_REGS))		return;	cmd.direction = TRANSFER_READ;	/* Start with bank 0 (SYSTEM) */	cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_SYSTEM;	cmd.reg_count = 3;	cmd.start = 0;	cpia2_send_command(cam, &cmd);	printk(KERN_DEBUG "System Device Hi      = 0x%X\n",	       cmd.buffer.block_data[0]);	printk(KERN_DEBUG "System Device Lo      = 0x%X\n",	       cmd.buffer.block_data[1]);	printk(KERN_DEBUG "System_system control = 0x%X\n",	       cmd.buffer.block_data[2]);	/* Bank 1 (VC) */	cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VC;	cmd.reg_count = 4;	cmd.start = 0x80;	cpia2_send_command(cam, &cmd);	printk(KERN_DEBUG "ASIC_ID       = 0x%X\n",	       cmd.buffer.block_data[0]);	printk(KERN_DEBUG "ASIC_REV      = 0x%X\n",	       cmd.buffer.block_data[1]);	printk(KERN_DEBUG "PW_CONTRL     = 0x%X\n",	       cmd.buffer.block_data[2]);	printk(KERN_DEBUG "WAKEUP        = 0x%X\n",	       cmd.buffer.block_data[3]);	cmd.start = 0xA0;	/* ST_CTRL */	cmd.reg_count = 1;	cpia2_send_command(cam, &cmd);	printk(KERN_DEBUG "Stream ctrl   = 0x%X\n",	       cmd.buffer.block_data[0]);	cmd.start = 0xA4;	/* Stream status */	cpia2_send_command(cam, &cmd);	printk(KERN_DEBUG "Stream status = 0x%X\n",	       cmd.buffer.block_data[0]);	cmd.start = 0xA8;	/* USB status */	cmd.reg_count = 3;	cpia2_send_command(cam, &cmd);	printk(KERN_DEBUG "USB_CTRL      = 0x%X\n",	       cmd.buffer.block_data[0]);	printk(KERN_DEBUG "USB_STRM      = 0x%X\n",	       cmd.buffer.block_data[1]);	printk(KERN_DEBUG "USB_STATUS    = 0x%X\n",	       cmd.buffer.block_data[2]);	cmd.start = 0xAF;	/* USB settings */	cmd.reg_count = 1;	cpia2_send_command(cam, &cmd);	printk(KERN_DEBUG "USB settings  = 0x%X\n",	       cmd.buffer.block_data[0]);	cmd.start = 0xC0;	/* VC stuff */	cmd.reg_count = 26;	cpia2_send_command(cam, &cmd);	printk(KERN_DEBUG "VC Control    = 0x%0X\n",	       cmd.buffer.block_data[0]);	printk(KERN_DEBUG "VC Format     = 0x%0X\n",	       cmd.buffer.block_data[3]);	printk(KERN_DEBUG "VC Clocks     = 0x%0X\n",	       cmd.buffer.block_data[4]);	printk(KERN_DEBUG "VC IHSize     = 0x%0X\n",	       cmd.buffer.block_data[5]);	printk(KERN_DEBUG "VC Xlim Hi    = 0x%0X\n",	       cmd.buffer.block_data[6]);	printk(KERN_DEBUG "VC XLim Lo    = 0x%0X\n",	       cmd.buffer.block_data[7]);	printk(KERN_DEBUG "VC YLim Hi    = 0x%0X\n",	       cmd.buffer.block_data[8]);	printk(KERN_DEBUG "VC YLim Lo    = 0x%0X\n",	       cmd.buffer.block_data[9]);	printk(KERN_DEBUG "VC OHSize     = 0x%0X\n",	       cmd.buffer.block_data[10]);	printk(KERN_DEBUG "VC OVSize     = 0x%0X\n",	       cmd.buffer.block_data[11]);	printk(KERN_DEBUG "VC HCrop      = 0x%0X\n",	       cmd.buffer.block_data[12]);	printk(KERN_DEBUG "VC VCrop      = 0x%0X\n",	       cmd.buffer.block_data[13]);	printk(KERN_DEBUG "VC HPhase     = 0x%0X\n",	       cmd.buffer.block_data[14]);	printk(KERN_DEBUG "VC VPhase     = 0x%0X\n",	       cmd.buffer.block_data[15]);	printk(KERN_DEBUG "VC HIspan     = 0x%0X\n",	       cmd.buffer.block_data[16]);	printk(KERN_DEBUG "VC VIspan     = 0x%0X\n",	       cmd.buffer.block_data[17]);	printk(KERN_DEBUG "VC HiCrop     = 0x%0X\n",	       cmd.buffer.block_data[18]);	printk(KERN_DEBUG "VC ViCrop     = 0x%0X\n",	       cmd.buffer.block_data[19]);	printk(KERN_DEBUG "VC HiFract    = 0x%0X\n",	       cmd.buffer.block_data[20]);	printk(KERN_DEBUG "VC ViFract    = 0x%0X\n",	       cmd.buffer.block_data[21]);	printk(KERN_DEBUG "VC JPeg Opt   = 0x%0X\n",	       cmd.buffer.block_data[22]);	printk(KERN_DEBUG "VC Creep Per  = 0x%0X\n",	       cmd.buffer.block_data[23]);	printk(KERN_DEBUG "VC User Sq.   = 0x%0X\n",	       cmd.buffer.block_data[24]);	printk(KERN_DEBUG "VC Target KB  = 0x%0X\n",	       cmd.buffer.block_data[25]);	/*** VP ***/	cmd.req_mode = CAMERAACCESS_TYPE_BLOCK | CAMERAACCESS_VP;	cmd.reg_count = 14;	cmd.start = 0;	cpia2_send_command(cam, &cmd);	printk(KERN_DEBUG "VP Dev Hi     = 0x%0X\n",	       cmd.buffer.block_data[0]);	printk(KERN_DEBUG "VP Dev Lo     = 0x%0X\n",	       cmd.buffer.block_data[1]);	printk(KERN_DEBUG "VP Sys State  = 0x%0X\n",	       cmd.buffer.block_data[2]);	printk(KERN_DEBUG "VP Sys Ctrl   = 0x%0X\n",	       cmd.buffer.block_data[3]);	printk(KERN_DEBUG "VP Sensor flg = 0x%0X\n",	       cmd.buffer.block_data[5]);	printk(KERN_DEBUG "VP Sensor Rev = 0x%0X\n",	       cmd.buffer.block_data[6]);	printk(KERN_DEBUG "VP Dev Config = 0x%0X\n",	       cmd.buffer.block_data[7]);	printk(KERN_DEBUG "VP GPIO_DIR   = 0x%0X\n",	       cmd.buffer.block_data[8]);	printk(KERN_DEBUG "VP GPIO_DATA  = 0x%0X\n",	       cmd.buffer.block_data[9]);	printk(KERN_DEBUG "VP Ram ADDR H = 0x%0X\n",	       cmd.buffer.block_data[10]);	printk(KERN_DEBUG "VP Ram ADDR L = 0x%0X\n",	       cmd.buffer.block_data[11]);	printk(KERN_DEBUG "VP RAM Data   = 0x%0X\n",	       cmd.buffer.block_data[12]);	printk(KERN_DEBUG "Do Call       = 0x%0X\n",	       cmd.buffer.block_data[13]);	if (cam->params.pnp_id.device_type == DEVICE_STV_672) {		cmd.reg_count = 9;		cmd.start = 0x0E;		cpia2_send_command(cam, &cmd);		printk(KERN_DEBUG "VP Clock Ctrl = 0x%0X\n",		       cmd.buffer.block_data[0]);		printk(KERN_DEBUG "VP Patch Rev  = 0x%0X\n",		       cmd.buffer.block_data[1]);		printk(KERN_DEBUG "VP Vid Mode   = 0x%0X\n",		       cmd.buffer.block_data[2]);		printk(KERN_DEBUG "VP Framerate  = 0x%0X\n",		       cmd.buffer.block_data[3]);		printk(KERN_DEBUG "VP UserEffect = 0x%0X\n",		       cmd.buffer.block_data[4]);		printk(KERN_DEBUG "VP White Bal  = 0x%0X\n",		       cmd.buffer.block_data[5]);		printk(KERN_DEBUG "VP WB thresh  = 0x%0X\n",		       cmd.buffer.block_data[6]);		printk(KERN_DEBUG "VP Exp Modes  = 0x%0X\n",		       cmd.buffer.block_data[7]);		printk(KERN_DEBUG "VP Exp Target = 0x%0X\n",		       cmd.buffer.block_data[8]);		cmd.reg_count = 1;		cmd.start = 0x1B;		cpia2_send_command(cam, &cmd);		printk(KERN_DEBUG "VP FlickerMds = 0x%0X\n",		       cmd.buffer.block_data[0]);	} else

⌨️ 快捷键说明

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