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

📄 sonix.h

📁 spca5xx
💻 H
📖 第 1 页 / 共 2 页
字号:
{	/*FIXME hardcoded as we need to read register of the tasc */	spca50x->brightness = 0x80 << 8;	spca50x->contrast =0x80 << 8 ;	return (0x80 << 8);}static __u16 sonix_setbrightness(struct usb_spca50x *spca50x){	__u8 value;	__u8 i2c[]= { 0x30,0x11,0x02,0x20,0x70,0x00,0x00,0x10 };	__u8 i2c1[]=  { 0xA1, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14 };	__u8 i2cOV[] = { 0xa0, 0x21, 0x06, 0x36, 0xbd, 0x06, 0xf6, 0x16};	__u8 i2cp202[] ={ 0xA0,0x40,0x10,0x0E,0x31,0x00,0x63,0x15 };	__u8 i2cpdoit[] ={ 0xA0,0x40,0x11,0x01,0x31,0x00,0x63,0x16 };	//__u8 i2cpexpo1[] = { 0xB0,0x40,0x04,0x07,0x2A,0x00,0x63,0x16 };	__u8 i2cpexpo[] = { 0xB0,0x40,0x0e,0x01,0xab,0x00,0x63,0x16 };	if (spca50x->sensor == SENSOR_TAS5130C ||	    spca50x->sensor == SENSOR_TAS5110 ) {		value = (0xFF - (spca50x->brightness >> 8));		i2c[4] = value & 0xFF;		PDEBUG(4,"brightness %d :%d ",value,i2c[4]);		if(sonix_i2cwrite(spca50x->dev,i2c,8) < 0) PDEBUG(0,"i2c error brightness");	} else if (spca50x->sensor == SENSOR_PAS106) {		i2c1[3] = spca50x->brightness >> 11;		i2c1[2] = 0x0e;;		if(sonix_i2cwrite(spca50x->dev,i2c1,8) < 0) PDEBUG(0,"i2c error brightness");		i2c1[3] = 0x01;		i2c1[2] = 0x13;;		if(sonix_i2cwrite(spca50x->dev,i2c1,8) < 0) PDEBUG(0,"i2c error brightness");	} else if (spca50x->sensor == SENSOR_OV7630){		// change reg 0x06		i2cOV[3] = (spca50x->brightness >> 8);		if(sonix_i2cwrite(spca50x->dev,i2cOV,8) < 0) PDEBUG(0,"i2c error brightness");	}	else if (spca50x->sensor == SENSOR_PAS202){		// change reg 0x10		i2cpexpo[4] = 0xff-(spca50x->brightness >> 8);		//if(sonix_i2cwrite(spca50x->dev,i2cpexpo1,8) < 0) PDEBUG(0,"i2c error brightness");		//if(sonix_i2cwrite(spca50x->dev,i2cpdoit,8) < 0) PDEBUG(0,"i2c error brightness");		if(sonix_i2cwrite(spca50x->dev,i2cpexpo,8) < 0) PDEBUG(0,"i2c error brightness");		if(sonix_i2cwrite(spca50x->dev,i2cpdoit,8) < 0) PDEBUG(0,"i2c error brightness");		i2cp202[3] = (spca50x->brightness >> 11);		if(sonix_i2cwrite(spca50x->dev,i2cp202,8) < 0) PDEBUG(0,"i2c error brightness");		if(sonix_i2cwrite(spca50x->dev,i2cpdoit,8) < 0) PDEBUG(0,"i2c error brightness");	}	return 0;}static __u16 sonix_setcontrast(struct usb_spca50x *spca50x){	__u8 gain = 0;	__u8 rgb_value = 0;	gain = (spca50x->contrast >> 13) & 0x0F;	/* red and blue gain */	rgb_value = gain << 4 | gain;	sonixRegWrite(spca50x->dev,0x08,0x10,0x0000,&rgb_value,1);	/* green gain*/	rgb_value = gain;	sonixRegWrite(spca50x->dev,0x08,0x11,0x0000,&rgb_value,1);	return 0;}static int sonix_init(	struct usb_spca50x *spca50x ){	__u8 ByteReceive=0x00;	sonixRegRead(spca50x->dev,0x00,0x00,0x0000,&ByteReceive,1);	if(ByteReceive != 0x10) return -ENODEV;	return 0;}static int tas5130_I2cinit(struct usb_spca50x *spca50x ){		//__u8 i2c10[]= { 0x30,0x11,0x00,0x40,0x47,0x00,0x00,0x10 }; // shutter 0x47 short exposure?	__u8 i2c10[]= { 0x30,0x11,0x00,0x40,0x01,0x00,0x00,0x10 }; // shutter 0x01 long exposure 	__u8 i2c2[]=  { 0x30,0x11,0x02,0x20,0x70,0x00,0x00,0x10 };		if(sonix_i2cwrite(spca50x->dev,i2c10,8) < 0) PDEBUG(0,"i2c error i2c10");		if(sonix_i2cwrite(spca50x->dev,i2c2,8) < 0) PDEBUG(0,"i2c error i2c2");		return 0;}static int pas106_I2cinit(struct usb_spca50x *spca50x ){	__u8 i2c1[]=  { 0xA1, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14 };	int i = 0;	while (pas106_data[i][0]){		memcpy(&i2c1[2],&pas106_data[i++][0],2); //copy 2 bytes from the template		if(sonix_i2cwrite(spca50x->dev,i2c1,8) < 0) PDEBUG(0,"i2c error pas106");	}	return 0;}static int ov7630_I2cinit(struct usb_spca50x *spca50x ){    	int i = 0;	while (ov7630_sensor_init[i][0]){	if(sonix_i2cwrite(spca50x->dev,ov7630_sensor_init[i],8) < 0) PDEBUG(0,"i2c error ov7630");	i++;	}	return 0;}static int tas5110_I2cinit(struct usb_spca50x *spca50x ){    	int i = 0;	while (tas5110_sensor_init[i][0]){	if(sonix_i2cwrite(spca50x->dev,tas5110_sensor_init[i],8) < 0) PDEBUG(0,"i2c error tas5110");	i++;	}	return 0;}static int hv7131_I2cinit(struct usb_spca50x *spca50x ){    	int i = 0;	while (hv7131_sensor_init[i][0]){	if(sonix_i2cwrite(spca50x->dev,hv7131_sensor_init[i],8) < 0) PDEBUG(0,"i2c error hv7131");	i++;	}	return 0;}static int pas202_I2cinit(struct usb_spca50x *spca50x ){    	int i = 0;	while (pas202_sensor_init[i][0]){	if(sonix_i2cwrite(spca50x->dev,pas202_sensor_init[i],8) < 0) PDEBUG(0,"i2c error pas202");	i++;	}	return 0;}static void sonix_start(struct usb_spca50x *spca50x ){		__u8 compress = 0;	__u8 MCK_SIZE = 0x33;	__u8 frmult = 0x28;	__u8 *sn9c10x = NULL;	 __u8 CompressCtrl[]= { 0,0};	 int err =0;	switch (spca50x->sensor){ 	case SENSOR_OV7630:		sn9c10x = initOv7630 ;		compress = spca50x->mode << 4 | COMP2;		CompressCtrl[0] = compress;		frmult = 0x68;		CompressCtrl[1] = 0x20;		MCK_SIZE = 0x20; 	break;	 case SENSOR_TAS5130C:		sn9c10x = initTas5130 ; 		compress = spca50x->mode << 4 | COMP;		CompressCtrl[0] = compress;		frmult = 0x60;		switch (spca50x->mode){		case 0: /* 640x480 3fp/s */			CompressCtrl[1] = 0x43;//0xA3 3fp/s ;// 0xF3;			MCK_SIZE = 0x43; // 0xA3;//0xF3;			break;		case 1: /* 320x240 0x33 10fp/s */			CompressCtrl[1] = 0x23;			MCK_SIZE = 0x23;			break;		case 2: /* 160x120 15fp/s */			CompressCtrl[1] = 0x23;			MCK_SIZE = 0x23;			break;		default:		break;		}		break;	 case SENSOR_PAS106:		sn9c10x = initPas106; ; 		compress = spca50x->mode << 4 | COMP1;		CompressCtrl[0] = compress;		frmult = 0x24;//0x28		CompressCtrl[1] = 0x20; //0xF3;		MCK_SIZE = 0x20; //0xF3;		break;	case SENSOR_TAS5110:		sn9c10x = initTas5110;		compress = spca50x->mode << 4 | 0x86;		CompressCtrl[0] = compress;		frmult = 0x60;		CompressCtrl[1] = 0x2b; //0xF3;		MCK_SIZE = 0x2b; //0xF3;	break;	case SENSOR_HV7131R:		sn9c10x = initHv7131;		compress = spca50x->mode << 4 | 0x8a;		CompressCtrl[0] = compress;		frmult = 0x60;		CompressCtrl[1] = 0x20;		MCK_SIZE = 0x20;	break;	case SENSOR_PAS202:		sn9c10x = initPas202;		compress = spca50x->mode << 4 | 0x89;		CompressCtrl[0] = compress;		frmult = 0x20; //reg17 // 7 fp/s VGA		if( spca50x->mode) frmult = 0x24; // 0x28->11fp/s SIF 0x24		CompressCtrl[1] = 0x20;//reg19 30		MCK_SIZE = 0x20;	break;	}	/* reg 0x01 bit 2 video transfert on */		sonixRegWrite(spca50x->dev,0x08,0x01,0x0000,&sn9c10x[0],1);	/* reg 0x17 SensorClk enable inv Clk 0x60 */		sonixRegWrite(spca50x->dev,0x08,0x17,0x0000,&sn9c10x[0x17 -1],1);	/* Set the whole registers from the template */		sonixRegWrite(spca50x->dev,0x08,0x01,0x0000,sn9c10x,0x1f);	switch (spca50x->sensor){	 case SENSOR_TAS5130C:		err = tas5130_I2cinit(spca50x );		break;	 case SENSOR_PAS106:		err = pas106_I2cinit( spca50x);		break;	 case SENSOR_OV7630:	 	err = ov7630_I2cinit ( spca50x);		break;	 case SENSOR_HV7131R:	 	err = hv7131_I2cinit ( spca50x);		break;	 case SENSOR_TAS5110:	 	err = tas5110_I2cinit ( spca50x);		break;	 case SENSOR_PAS202:	 	err = pas202_I2cinit ( spca50x);		break;		 default:	 	err = -EINVAL;		break;	}	/* H_size V_size  0x28,0x1e maybe 640x480 */		sonixRegWrite(spca50x->dev,0x08,0x15,0x0000,&sn9c10x[0x15 -1],0x02);		/* compression register */		sonixRegWrite(spca50x->dev,0x08,0x18,0x0000,&compress,1);	// H_start		sonixRegWrite(spca50x->dev,0x08,0x12,0x0000,&sn9c10x[0x12 -1],1);	// V_START		sonixRegWrite(spca50x->dev,0x08,0x13,0x0000,&sn9c10x[0x13 -1],1);	/* re set 0x17 SensorClk enable inv Clk 0x60 */		sonixRegWrite(spca50x->dev,0x08,0x17,0x0000,&frmult,1);	/*MCKSIZE ->3*/		sonixRegWrite(spca50x->dev,0x08,0x19,0x0000,&MCK_SIZE,1);	/* AE_STRX AE_STRY AE_ENDX AE_ENDY */	sonixRegWrite(spca50x->dev,0x08,0x1c,0x0000,&sn9c10x[0x1c -1],4);	/* Enable video transfert */		sonixRegWrite(spca50x->dev,0x08,0x01,0x0000,&sn9c10x[0],1);	/* Compression */	sonixRegWrite(spca50x->dev,0x08,0x18,0x0000,CompressCtrl,2);		sonix_setcontrast(spca50x);	sonix_setbrightness(spca50x);}static int sonix_config(struct usb_spca50x *spca50x){	switch(spca50x->sensor){	case SENSOR_OV7630:	case SENSOR_TAS5130C:	case SENSOR_HV7131R:	case SENSOR_MI0360:	case SENSOR_PAS202:		set_sonixVGA(spca50x);	break;	case SENSOR_PAS106:	case SENSOR_TAS5110:		set_sonixSIF(spca50x);	break;	default:	return -EINVAL;	break;	}	spca50x->qindex = 3; //set the quantization tablereturn 0;}static void sonix_stop(struct usb_spca50x *spca50x ){  	__u8 ByteSend =0;		ByteSend=0x09; // 0X00	sonixRegWrite(spca50x->dev,0x08,0x01,0x0000,&ByteSend,1);}#endif /* SONIXUSB_H */

⌨️ 快捷键说明

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