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

📄 ibmcam.c

📁 Linux Kernel 2.6.9 for OMAP1710
💻 C
📖 第 1 页 / 共 5 页
字号:
	ibmcam_veio(uvd, 0, 0x01, 0x0108);	ibmcam_veio(uvd, 0, 0x03, 0x0112);	ibmcam_veio(uvd, 1, 0x00, 0x0115);	ibmcam_veio(uvd, 0, 0x06, 0x0115);	ibmcam_veio(uvd, 1, 0x00, 0x0116);	ibmcam_veio(uvd, 0, 0x44, 0x0116);	ibmcam_veio(uvd, 1, 0x00, 0x0116);	ibmcam_veio(uvd, 0, 0x40, 0x0116);	ibmcam_veio(uvd, 1, 0x00, 0x0115);	ibmcam_veio(uvd, 0, 0x0e, 0x0115);	ibmcam_veio(uvd, 0, 0x19, 0x012c);	ibmcam_Packet_Format1(uvd, 0x00, 0x1e);	ibmcam_Packet_Format1(uvd, 0x39, 0x0d);	ibmcam_Packet_Format1(uvd, 0x39, 0x09);	ibmcam_Packet_Format1(uvd, 0x3b, 0x00);	ibmcam_Packet_Format1(uvd, 0x28, 0x22);	ibmcam_Packet_Format1(uvd, light_27, 0);	ibmcam_Packet_Format1(uvd, 0x2b, 0x1f);	ibmcam_Packet_Format1(uvd, 0x39, 0x08);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x2c, 0x00);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x30, 0x14);	ibmcam_PacketFormat2(uvd, 0x39, 0x02);	ibmcam_PacketFormat2(uvd, 0x01, 0xe1);	ibmcam_PacketFormat2(uvd, 0x02, 0xcd);	ibmcam_PacketFormat2(uvd, 0x03, 0xcd);	ibmcam_PacketFormat2(uvd, 0x04, 0xfa);	ibmcam_PacketFormat2(uvd, 0x3f, 0xff);	ibmcam_PacketFormat2(uvd, 0x39, 0x00);	ibmcam_PacketFormat2(uvd, 0x39, 0x02);	ibmcam_PacketFormat2(uvd, 0x0a, 0x37);	ibmcam_PacketFormat2(uvd, 0x0b, 0xb8);	ibmcam_PacketFormat2(uvd, 0x0c, 0xf3);	ibmcam_PacketFormat2(uvd, 0x0d, 0xe3);	ibmcam_PacketFormat2(uvd, 0x0e, 0x0d);	ibmcam_PacketFormat2(uvd, 0x0f, 0xf2);	ibmcam_PacketFormat2(uvd, 0x10, 0xd5);	ibmcam_PacketFormat2(uvd, 0x11, 0xba);	ibmcam_PacketFormat2(uvd, 0x12, 0x53);	ibmcam_PacketFormat2(uvd, 0x3f, 0xff);	ibmcam_PacketFormat2(uvd, 0x39, 0x00);	ibmcam_PacketFormat2(uvd, 0x39, 0x02);	ibmcam_PacketFormat2(uvd, 0x16, 0x00);	ibmcam_PacketFormat2(uvd, 0x17, 0x28);	ibmcam_PacketFormat2(uvd, 0x18, 0x7d);	ibmcam_PacketFormat2(uvd, 0x19, 0xbe);	ibmcam_PacketFormat2(uvd, 0x3f, 0xff);	ibmcam_PacketFormat2(uvd, 0x39, 0x00);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x00, 0x18);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x13, 0x18);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x14, 0x06);	/* This is default brightness */	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x31, 0x37);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x32, 0x46);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x33, 0x55);	ibmcam_Packet_Format1(uvd, 0x2e, 0x04);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x2d, 0x04);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x29, 0x80);	ibmcam_Packet_Format1(uvd, 0x2c, 0x01);	ibmcam_Packet_Format1(uvd, 0x30, 0x17);	ibmcam_Packet_Format1(uvd, 0x39, 0x08);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x34, 0x00);	ibmcam_veio(uvd, 0, 0x00, 0x0101);	ibmcam_veio(uvd, 0, 0x00, 0x010a);	switch (uvd->videosize) {	case VIDEOSIZE_128x96:		ibmcam_veio(uvd, 0, 0x80, 0x0103);		ibmcam_veio(uvd, 0, 0x60, 0x0105);		ibmcam_veio(uvd, 0, 0x0c, 0x010b);		ibmcam_veio(uvd, 0, 0x04, 0x011b);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x0b, 0x011d);		ibmcam_veio(uvd, 0, 0x00, 0x011e);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x00, 0x0129);		break;	case VIDEOSIZE_176x144:		ibmcam_veio(uvd, 0, 0xb0, 0x0103);		ibmcam_veio(uvd, 0, 0x8f, 0x0105);		ibmcam_veio(uvd, 0, 0x06, 0x010b);		ibmcam_veio(uvd, 0, 0x04, 0x011b);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x0d, 0x011d);		ibmcam_veio(uvd, 0, 0x00, 0x011e);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x03, 0x0129);		break;	case VIDEOSIZE_352x288:		ibmcam_veio(uvd, 0, 0xb0, 0x0103);		ibmcam_veio(uvd, 0, 0x90, 0x0105);		ibmcam_veio(uvd, 0, 0x02, 0x010b);		ibmcam_veio(uvd, 0, 0x04, 0x011b);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x05, 0x011d);		ibmcam_veio(uvd, 0, 0x00, 0x011e);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x00, 0x0129);		break;	}	ibmcam_veio(uvd, 0, 0xff, 0x012b);	/* This is another brightness - don't know why */	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x31, 0xc3);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x32, 0xd2);	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, 0x33, 0xe1);	/* Default contrast */	for (i=0; i < ntries; i++)		ibmcam_Packet_Format1(uvd, contrast_14, 0x0a);	/* Default sharpness */	for (i=0; i < 2; i++)		ibmcam_PacketFormat2(uvd, sharp_13, 0x1a);	/* Level 4 FIXME */	/* Default lighting conditions */	ibmcam_Packet_Format1(uvd, light_27, lighting); /* 0=Bright 2=Low */	/* Assorted init */	switch (uvd->videosize) {	case VIDEOSIZE_128x96:		ibmcam_Packet_Format1(uvd, 0x2b, 0x1e);		ibmcam_veio(uvd, 0, 0xc9, 0x0119);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x80, 0x0109);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x36, 0x0102);		ibmcam_veio(uvd, 0, 0x1a, 0x0104);		ibmcam_veio(uvd, 0, 0x04, 0x011a);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x2b, 0x011c);		ibmcam_veio(uvd, 0, 0x23, 0x012a);	/* Same everywhere */#if 0		ibmcam_veio(uvd, 0, 0x00, 0x0106);		ibmcam_veio(uvd, 0, 0x38, 0x0107);#else		ibmcam_veio(uvd, 0, 0x02, 0x0106);		ibmcam_veio(uvd, 0, 0x2a, 0x0107);#endif		break;	case VIDEOSIZE_176x144:		ibmcam_Packet_Format1(uvd, 0x2b, 0x1e);		ibmcam_veio(uvd, 0, 0xc9, 0x0119);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x80, 0x0109);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x04, 0x0102);		ibmcam_veio(uvd, 0, 0x02, 0x0104);		ibmcam_veio(uvd, 0, 0x04, 0x011a);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x2b, 0x011c);		ibmcam_veio(uvd, 0, 0x23, 0x012a);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x01, 0x0106);		ibmcam_veio(uvd, 0, 0xca, 0x0107);		break;	case VIDEOSIZE_352x288:		ibmcam_Packet_Format1(uvd, 0x2b, 0x1f);		ibmcam_veio(uvd, 0, 0xc9, 0x0119);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x80, 0x0109);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x08, 0x0102);		ibmcam_veio(uvd, 0, 0x01, 0x0104);		ibmcam_veio(uvd, 0, 0x04, 0x011a);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x2f, 0x011c);		ibmcam_veio(uvd, 0, 0x23, 0x012a);	/* Same everywhere */		ibmcam_veio(uvd, 0, 0x03, 0x0106);		ibmcam_veio(uvd, 0, 0xf6, 0x0107);		break;	}	return (CAMERA_IS_OPERATIONAL(uvd) ? 0 : -EFAULT);}static int ibmcam_model2_setup(struct uvd *uvd){	ibmcam_veio(uvd, 0, 0x0000, 0x0100);	/* LED on */	ibmcam_veio(uvd, 1, 0x0000, 0x0116);	ibmcam_veio(uvd, 0, 0x0060, 0x0116);	ibmcam_veio(uvd, 0, 0x0002, 0x0112);	ibmcam_veio(uvd, 0, 0x00bc, 0x012c);	ibmcam_veio(uvd, 0, 0x0008, 0x012b);	ibmcam_veio(uvd, 0, 0x0000, 0x0108);	ibmcam_veio(uvd, 0, 0x0001, 0x0133);	ibmcam_veio(uvd, 0, 0x0001, 0x0102);	switch (uvd->videosize) {	case VIDEOSIZE_176x144:		ibmcam_veio(uvd, 0, 0x002c, 0x0103);	/* All except 320x240 */		ibmcam_veio(uvd, 0, 0x0000, 0x0104);	/* Same */		ibmcam_veio(uvd, 0, 0x0024, 0x0105);	/* 176x144, 352x288 */		ibmcam_veio(uvd, 0, 0x00b9, 0x010a);	/* Unique to this mode */		ibmcam_veio(uvd, 0, 0x0038, 0x0119);	/* Unique to this mode */		ibmcam_veio(uvd, 0, 0x0003, 0x0106);	/* Same */		ibmcam_veio(uvd, 0, 0x0090, 0x0107);	/* Unique to every mode*/		break;	case VIDEOSIZE_320x240:		ibmcam_veio(uvd, 0, 0x0028, 0x0103);	/* Unique to this mode */		ibmcam_veio(uvd, 0, 0x0000, 0x0104);	/* Same */		ibmcam_veio(uvd, 0, 0x001e, 0x0105);	/* 320x240, 352x240 */		ibmcam_veio(uvd, 0, 0x0039, 0x010a);	/* All except 176x144 */		ibmcam_veio(uvd, 0, 0x0070, 0x0119);	/* All except 176x144 */		ibmcam_veio(uvd, 0, 0x0003, 0x0106);	/* Same */		ibmcam_veio(uvd, 0, 0x0098, 0x0107);	/* Unique to every mode*/		break;	case VIDEOSIZE_352x240:		ibmcam_veio(uvd, 0, 0x002c, 0x0103);	/* All except 320x240 */		ibmcam_veio(uvd, 0, 0x0000, 0x0104);	/* Same */		ibmcam_veio(uvd, 0, 0x001e, 0x0105);	/* 320x240, 352x240 */		ibmcam_veio(uvd, 0, 0x0039, 0x010a);	/* All except 176x144 */		ibmcam_veio(uvd, 0, 0x0070, 0x0119);	/* All except 176x144 */		ibmcam_veio(uvd, 0, 0x0003, 0x0106);	/* Same */		ibmcam_veio(uvd, 0, 0x00da, 0x0107);	/* Unique to every mode*/		break;	case VIDEOSIZE_352x288:		ibmcam_veio(uvd, 0, 0x002c, 0x0103);	/* All except 320x240 */		ibmcam_veio(uvd, 0, 0x0000, 0x0104);	/* Same */		ibmcam_veio(uvd, 0, 0x0024, 0x0105);	/* 176x144, 352x288 */		ibmcam_veio(uvd, 0, 0x0039, 0x010a);	/* All except 176x144 */		ibmcam_veio(uvd, 0, 0x0070, 0x0119);	/* All except 176x144 */		ibmcam_veio(uvd, 0, 0x0003, 0x0106);	/* Same */		ibmcam_veio(uvd, 0, 0x00fe, 0x0107);	/* Unique to every mode*/		break;	}	return (CAMERA_IS_OPERATIONAL(uvd) ? 0 : -EFAULT);}/* * ibmcam_model1_setup_after_video_if() * * This code adds finishing touches to the video data interface. * Here we configure the frame rate and turn on the LED. */static void ibmcam_model1_setup_after_video_if(struct uvd *uvd){	unsigned short internal_frame_rate;	RESTRICT_TO_RANGE(framerate, FRAMERATE_MIN, FRAMERATE_MAX);	internal_frame_rate = FRAMERATE_MAX - framerate; /* 0=Fast 6=Slow */	ibmcam_veio(uvd, 0, 0x01, 0x0100);	/* LED On  */	ibmcam_veio(uvd, 0, internal_frame_rate, 0x0111);	ibmcam_veio(uvd, 0, 0x01, 0x0114);	ibmcam_veio(uvd, 0, 0xc0, 0x010c);}static void ibmcam_model2_setup_after_video_if(struct uvd *uvd){	unsigned short setup_model2_rg2, setup_model2_sat, setup_model2_yb;	ibmcam_veio(uvd, 0, 0x0000, 0x0100);	/* LED on */	switch (uvd->videosize) {	case VIDEOSIZE_176x144:		ibmcam_veio(uvd, 0, 0x0050, 0x0111);		ibmcam_veio(uvd, 0, 0x00d0, 0x0111);		break;	case VIDEOSIZE_320x240:	case VIDEOSIZE_352x240:	case VIDEOSIZE_352x288:		ibmcam_veio(uvd, 0, 0x0040, 0x0111);		ibmcam_veio(uvd, 0, 0x00c0, 0x0111);		break;	}	ibmcam_veio(uvd, 0, 0x009b, 0x010f);	ibmcam_veio(uvd, 0, 0x00bb, 0x010f);	/*	 * Hardware settings, may affect CMOS sensor; not user controls!	 * -------------------------------------------------------------	 * 0x0004: no effect	 * 0x0006: hardware effect	 * 0x0008: no effect	 * 0x000a: stops video stream, probably important h/w setting	 * 0x000c: changes color in hardware manner (not user setting)	 * 0x0012: changes number of colors (does not affect speed)	 * 0x002a: no effect	 * 0x002c: hardware setting (related to scan lines)	 * 0x002e: stops video stream, probably important h/w setting	 */	ibmcam_model2_Packet1(uvd, 0x000a, 0x005c);	ibmcam_model2_Packet1(uvd, 0x0004, 0x0000);	ibmcam_model2_Packet1(uvd, 0x0006, 0x00fb);	ibmcam_model2_Packet1(uvd, 0x0008, 0x0000);	ibmcam_model2_Packet1(uvd, 0x000c, 0x0009);	ibmcam_model2_Packet1(uvd, 0x0012, 0x000a);	ibmcam_model2_Packet1(uvd, 0x002a, 0x0000);	ibmcam_model2_Packet1(uvd, 0x002c, 0x0000);	ibmcam_model2_Packet1(uvd, 0x002e, 0x0008);	/*	 * Function 0x0030 pops up all over the place. Apparently	 * it is a hardware control register, with every bit assigned to	 * do something.	 */	ibmcam_model2_Packet1(uvd, 0x0030, 0x0000);	/*	 * Magic control of CMOS sensor. Only lower values like	 * 0-3 work, and picture shifts left or right. Don't change.	 */	switch (uvd->videosize) {	case VIDEOSIZE_176x144:		ibmcam_model2_Packet1(uvd, 0x0014, 0x0002);		ibmcam_model2_Packet1(uvd, 0x0016, 0x0002); /* Horizontal shift */		ibmcam_model2_Packet1(uvd, 0x0018, 0x004a); /* Another hardware setting */		break;	case VIDEOSIZE_320x240:		ibmcam_model2_Packet1(uvd, 0x0014, 0x0009);		ibmcam_model2_Packet1(uvd, 0x0016, 0x0005); /* Horizontal shift */		ibmcam_model2_Packet1(uvd, 0x0018, 0x0044); /* Another hardware setting */		break;	case VIDEOSIZE_352x240:		/* This mode doesn't work as Windows programs it; changed to work */		ibmcam_model2_Packet1(uvd, 0x0014, 0x0009); /* Windows sets this to 8 */		ibmcam_model2_Packet1(uvd, 0x0016, 0x0003); /* Horizontal shift */		ibmcam_model2_Packet1(uvd, 0x0018, 0x0044); /* Windows sets this to 0x0045 */		break;	case VIDEOSIZE_352x288:		ibmcam_model2_Packet1(uvd, 0x0014, 0x0003);		ibmcam_model2_Packet1(uvd, 0x0016, 0x0002); /* Horizontal shift */		ibmcam_model2_Packet1(uvd, 0x0018, 0x004a); /* Another hardware setting */		break;	}	ibmcam_model2_Packet1(uvd, mod2_brightness, 0x005a);	/*	 * We have our own frame rate setting varying from 0 (slowest) to 6 (fastest).	 * The camera model 2 allows frame rate in range [0..0x1F] where 0 is also the	 * slowest setting. However for all practical reasons high settings make no	 * sense because USB is not fast enough to support high FPS. Be aware that	 * the picture datastream will be severely disrupted if you ask for	 * frame rate faster than allowed for the video size - see below:	 *	 * Allowable ranges (obtained experimentally on OHCI, K6-3, 450 MHz):	 * -----------------------------------------------------------------	 * 176x144: [6..31]	 * 320x240: [8..31]	 * 352x240: [10..31]	 * 352x288: [16..31] I have to raise lower threshold for stability...	 *	 * As usual, slower FPS provides better sensitivity.	 */	{		short hw_fps=31, i_framerate;		RESTRICT_TO_RANGE(framerate, FRAMERATE_MIN, FRAMERATE_MAX);		i_framerate = FRAMERATE_MAX - framerate + FRAMERATE_MIN;		switch (uvd->videosize) {		case VIDEOSIZE_176x144:			hw_fps = 6 + i_framerate*4;			break;		case VIDEOSIZE_320x240:			hw_fps = 8 + i_framerate*3;			break;		case VIDEOSIZE_352x240:			hw_fps = 10 + i_framerate*2;			break;		case VIDEOSIZE_352x288:			hw_fps = 28 + i_framerate/2;			break;		}		if (uvd->debug > 0)			info("Framerate (hardware): %hd.", hw_fps);		RESTRICT_TO_RANGE(hw_fps, 0, 31);		ibmcam_model2_Packet1(uvd, mod2_set_framerate, hw_fps);	}	/*	 * This setting does not visibly affect pictures; left it here	 * because it was present in Windows USB data stream. This function	 * does not allow arbitrary values and apparently is a bit mask, to	 * be activated only at appropriate time. Don't change it randomly!	 */	switch (uvd->videosize) {	case VIDEOSIZE_176x144:		ibmcam_model2_Packet1(uvd, 0x0026, 0x00c2);		break;	case VIDEOSIZE_320x240:		ibmcam_model2_Packet1(uvd, 0x0026, 0x0044);		break;	case VIDEOSIZE_352x240:		ibmcam_model2_Packet1(uvd, 0x0026, 0x0046);		break;	case VIDEOSIZE_352x288:		ibmcam_model2_Packet1(uvd, 0x0026, 0x0048);		break;	}	ibmcam_model2_Packet1(uvd, mod2_sensitivity, lighting);	if (init_model2_rg2 >= 0) {		RESTRICT_TO_RANGE(init_model2_rg2, 0, 255);		setup_model2_rg2 = init_model2_rg2;	} else		setup_model2_rg2 = 0x002f;	if (init_model2_sat >= 0) {		RESTRICT_TO_RANGE(init_model2_sat, 0, 255);		setup_model2_sat = init_model2_sat;	} else		setup_model2_sat = 0x0034;	if (init_model2_yb >= 0) {		RESTRICT_TO_RANGE(init_model2_yb, 0, 255);		setup_model2_yb = init_model2_yb;	} else		setup_model2_yb = 0x00a0;	ibmcam_model2_Packet1(uvd, mod2_color_balance_rg2, setup_model2_rg2);	ibmcam_model2_Packet1(uvd, mod2_saturation, setup_model2_sat);	ibmcam_model2_Packet1(uvd, mod2_color_balance_yb, setup_model2_yb);	ibmcam_model2_Packet1(uvd, mod2_hue, uvd->vpic.hue >> 9); /* 0 .. 7F */;	/* Hardware control command */	ibmcam_model2_Packet1(uvd, 0x0030, 0x0004);	ibmcam_veio(uvd, 0, 0x00c0, 0x010c);	

⌨️ 快捷键说明

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