spca561.h

来自「ARM8008光盘linux-kernel」· C头文件 代码 · 共 681 行 · 第 1/2 页

H
681
字号
	{ 0 , 0x0061 , 0x8805 },//61 31	{ 0 , 0x0008 , 0x8800 },// 10	{ 0 , 0x0035 , 0x8801 },// 0x14 // set gain general	{ 0 , 0x0014 , 0x8805 },	{ 0 , 0x0000 , 0x8800 },	{ 0 , 0x0030 , 0x8112 },	{ 0 , 0 , 0 }} ;static __u16 spca561_vista_data[][3]={/***********************/ { 0x00, 0xC8, 0x8631}, { 0x00, 0xC8, 0x8634}, { 0x00, 0x00, 0x8112}, /********************/ { 0x00, 0x01, 0x8114}, { 0x00, 0x21, 0x8118}, /********************/ { 0x00, 0x92, 0x8804}, { 0x00, 0x14, 0x8802}, //0x04  { 0x00, 0x03, 0x8801}, { 0x00, 0x25, 0x8805}, { 0x00, 0x01, 0x8800},  { 0x00, 0x04, 0x8801}, { 0x00, 0x69, 0x8805}, { 0x00, 0x01, 0x8800},  { 0x00, 0x05, 0x8801}, { 0x00, 0x3A, 0x8805}, { 0x00, 0x00, 0x8800},  { 0x00, 0x2F, 0x8801}, { 0x00, 0x00, 0x8805}, { 0x00, 0x0F, 0x8800},  { 0x00, 0x20, 0x8801}, { 0x00, 0x04, 0x8805}, { 0x00, 0x33, 0x8800},  { 0x00, 0x00, 0x8805}, { 0x00, 0x06, 0x8801}, { 0x00, 0x00, 0x8800},  { 0x00, 0xAA, 0x8805}, { 0x00, 0x07, 0x8801}, { 0x00, 0x00, 0x8800},  { 0x00, 0x0B, 0x8805}, { 0x00, 0x39, 0x8801}, { 0x00, 0x00, 0x8800},  { 0x00, 0x10, 0x8805}, //10 { 0x00, 0x35, 0x8801}, { 0x00, 0x00, 0x8800},  { 0x00, 0xff, 0x8805}, //00 31 { 0x00, 0x09, 0x8801}, // 0010 0 010 0000 0000 { 0x00, 0x23, 0x8800}, //22 08  { 0x00, 0x0B, 0x8805}, { 0x00, 0x28, 0x8801}, { 0x00, 0x00, 0x8800}, { 0 , 0x000f , 0x8805 },{ 0 , 0x003b , 0x8801 },{ 0 , 0x0000 , 0x8800 },	 { 0x00, 0x00, 0x8805}, { 0x00, 0x3C, 0x8801}, { 0x00, 0x00, 0x8800},  { 0x00, 0x90, 0x8604}, //144 { 0x00, 0x00, 0x8605}, { 0x00, 0xB0, 0x8603}, //176 { 0x00, 0x02, 0x8201}, { 0x00, 0x08, 0x8200}, { 0x00, 0x01, 0x8200},   { 0x00, 0x07, 0x8201}, { 0x00, 0x08, 0x8200}, { 0x00, 0x01, 0x8200},  { 0x00, 0x08, 0x8620}, { 0x00, 0x0C, 0x8620}, { 0x00, 0x00, 0x8610}, { 0x00, 0x3F, 0x8611}, { 0x00, 0x3F, 0x8612}, { 0x00, 0x3F, 0x8613}, { 0x00, 0x3F, 0x8614}, { 0x00, 0x3F, 0x8615}, { 0x00, 0x55, 0x8616}, { 0x00, 0x3F, 0x8617}, { 0x00, 0xF0, 0x8505}, { 0x00, 0x32, 0x850A}, /*******************/// { 0 , 0x0081 , 0x8702 }, /*******************/// { 0x00, 0x00, 0x8500}, { 0x00, 0x10, 0x8500}, // compression registers overwrite by start { 0x00, 0x07, 0x8601}, { 0x00, 0x07, 0x8602}, { 0x00, 0x01, 0x8801}, { 0x00, 0x03, 0x8805}, { 0x00, 0x00, 0x8800}, { 0x00, 0x02, 0x8801},{ 0x00, 0x0E, 0x8805},{ 0x00, 0x00, 0x8800}, { 0x00, 0x0C, 0x8620}, /**********************/ {0,0,0}};static void sensor_Reset(struct usb_spca50x *spca50x){int err;	err=spca50x_reg_write (spca50x->dev, 0, 0x8631,0xC8);	err=spca50x_reg_write (spca50x->dev, 0, 0x8634,0xC8);	err=spca50x_reg_write (spca50x->dev, 0, 0x8112,0x00);	err=spca50x_reg_write (spca50x->dev, 0, 0x8114,0x00);	err=spca50x_reg_write (spca50x->dev, 0, 0x8118,0x21);	spca561_InitI2c(spca50x,0x14);	spca561_WriteI2c(spca50x,1,0x0d);	spca561_WriteI2c(spca50x,0,0x0d);}static int init_vista(struct usb_spca50x *spca50x){int err;	__u8 Reg8391[] = { 0x90,0x30,0x14,0x00,0x0c,0x00,0x00,0x00}; //14	__u8 Reg8307[] = { 0xaa,0x00};	err=spca50x_reg_write (spca50x->dev, 0, 0x8620,0x00);	//	sensor_Reset(spca50x); 	spca50x_write_vector(spca50x,spca561_vista_data) ;	spca5xxRegWrite(spca50x->dev,0,0, 0x8307,Reg8307,2);	err=spca50x_reg_write (spca50x->dev, 0, 0x8700, 0x85);	// 0x27 clock	spca5xxRegWrite(spca50x->dev,0,0, 0x8391,Reg8391,8);	spca5xxRegWrite(spca50x->dev,0,0, 0x8390,Reg8391,8);		err=spca50x_reg_write(spca50x->dev, 0, 0x8112, 0x10 | 0x20);	err=spca50x_reg_write(spca50x->dev, 0, 0x850b, 0x03); 	err=spca50x_reg_write(spca50x->dev, 0, 0x8112, 0x00);			err=spca50x_reg_write (spca50x->dev, 0, 0x8118, 0x29);		err=spca50x_reg_write (spca50x->dev, 0, 0x8114, 0x00);	err=spca50x_reg_write (spca50x->dev, 0, 0x8620, 0x00);		spca50x_write_vector(spca50x,spca561_vista_data) ;	spca5xxRegWrite(spca50x->dev,0,0, 0x8307,Reg8307,2);	err=spca50x_reg_write (spca50x->dev, 0, 0x8700, 0x85);	// 0x27 clock	spca5xxRegWrite(spca50x->dev,0,0, 0x8391,Reg8391,8);	spca5xxRegWrite(spca50x->dev,0,0, 0x8390,Reg8391,8);		err=spca50x_reg_write(spca50x->dev, 0, 0x8112, 0x10 | 0x20);	err=spca50x_reg_write(spca50x->dev, 0, 0x850b, 0x03); 	err=spca50x_reg_write(spca50x->dev, 0, 0x8112, 0x20);	//	return 0;}static int spca561_init(struct usb_spca50x *spca50x){	int err;			switch (spca50x->customid){	case 0x7004:	case 0xa001:	case 0x0815:	case 0x0561:	case 0xcdee:	case 0x7e50:	PDEBUG(0,"Find spca561 USB Product ID %x",spca50x->customid);	spca50x_write_vector(spca50x,spca561_init_data) ;	break;	case 0x403b:	PDEBUG(0,"Find spca561 USB Product ID %x",spca50x->customid);	err= init_vista(spca50x);		break;	default:	PDEBUG(0,"Error reading USB Product ID from Global register");	break;	}	return 0;}static void spca561_start(struct usb_spca50x *spca50x){	int err;	int Clck = 0;	__u8 Reg8307[] = { 0xaa,0x00};		__u8 Reg8391[] = { 0x90,0x30,0x1b,0x00,0x0c,0x00,0x00,0x00};	switch (spca50x->customid){	case 0x7004:	case 0xa001:	case 0x0815:	case 0x0561:	case 0xcdee:	case 0x7e50:	switch (spca50x->mode){		case 0:		case 1:			Clck = 0x25;		break;		case 2:			Clck = 0x22;		break;		case 3:			Clck = 0x21;		break;		default:			Clck = 0x25;	 	break;	}	err=spca50x_reg_write (spca50x->dev, 0, 0x8500,spca50x->mode);	// mode	err=spca50x_reg_write (spca50x->dev, 0, 0x8700, Clck);	// 0x27 clock	err=spca50x_reg_write(spca50x->dev, 0, 0x8112, 0x10 | 0x20); 		break;	case 0x403b:	switch (spca50x->mode){		case 0:		case 1:			Clck = 0x8a;		break;		case 2:			Clck = 0x85;		break;		case 3:			Clck = 0x83;		break;		default:			Clck = 0x25;	 	break;	}	err=spca50x_reg_write (spca50x->dev, 0, 0x8500,spca50x->mode);	// 10 mode	spca5xxRegWrite(spca50x->dev,0,0, 0x8307,Reg8307,2);	err=spca50x_reg_write (spca50x->dev, 0, 0x8700, Clck);	// 0x8f 0x85 0x27 clock	spca5xxRegWrite(spca50x->dev,0,0, 0x8391,Reg8391,8);	spca5xxRegWrite(spca50x->dev,0,0, 0x8390,Reg8391,8);		err=spca50x_reg_write(spca50x->dev, 0, 0x8112, 0x10 | 0x20);		err=spca50x_reg_write(spca50x->dev, 0, 0x850b, 0x03); 	break;	default:	PDEBUG(0,"Error reading USB Product ID from Global register");	break;	}	}static void spca561_stop(struct usb_spca50x *spca50x){	int err;	err=spca50x_reg_write(spca50x->dev, 0, 0x8112, 0x20); }static __u16 spca561_setbrightness(struct usb_spca50x *spca50x){	__u8 value = 0;	value = spca50x->brightness >> 9;	spca5xxRegWrite(spca50x->dev,0,value,0x8611,NULL,0);	spca5xxRegWrite(spca50x->dev,0,value,0x8612,NULL,0);	spca5xxRegWrite(spca50x->dev,0,value,0x8613,NULL,0);	spca5xxRegWrite(spca50x->dev,0,value,0x8614,NULL,0);	return 0;} static __u16 spca561_getbrightness(struct usb_spca50x *spca50x){	__u8 value = 0;	__u16 tot = 0;	spca5xxRegRead(spca50x->dev,0,0,0x8611,&value,1);	tot += value;	spca5xxRegRead(spca50x->dev,0,0,0x8612,&value,1);	tot += value;	spca5xxRegRead(spca50x->dev,0,0,0x8613,&value,1);	tot += value;	spca5xxRegRead(spca50x->dev,0,0,0x8614,&value,1);	tot += value;	spca50x->brightness = tot << 7;	return 0;} static __u16 spca561_setcontrast(struct usb_spca50x *spca50x){		__u8 lowb = 0;		lowb = (spca50x->contrast >> 8) & 0xFF;	spca5xxRegWrite(spca50x->dev,0,lowb,0x8651,NULL,0);	spca5xxRegWrite(spca50x->dev,0,lowb,0x8652,NULL,0);	spca5xxRegWrite(spca50x->dev,0,lowb,0x8653,NULL,0);	spca5xxRegWrite(spca50x->dev,0,lowb,0x8654,NULL,0);		return 0;}static __u16 spca561_getcontrast(struct usb_spca50x *spca50x){	__u8 value = 0;	__u16 tot = 0;	spca5xxRegRead(spca50x->dev,0,0,0x8651,&value,1);	tot += value;	spca5xxRegRead(spca50x->dev,0,0,0x8652,&value,1);	tot += value;	spca5xxRegRead(spca50x->dev,0,0,0x8653,&value,1);	tot += value;	spca5xxRegRead(spca50x->dev,0,0,0x8654,&value,1);	tot += value;	spca50x->contrast = tot << 6;	return 0;} static int spca561_config(struct usb_spca50x *spca50x){	struct usb_device *dev = spca50x->dev;	int data1, data2;	// Read frm global register the USB product and vendor IDs, just to		// prove that we can communicate with the device.  This works, which	// confirms at we are communicating properly and that the device	// is a 561.	data1 = spca50x_reg_read(dev, 0, 0x8104, 1);	if (data1 < 0) PDEBUG(1,"Error reading USB Vendor ID from Global register");	data2 = spca50x_reg_read(dev, 0, 0x8105, 1);	if (data2 < 0)		PDEBUG(1,"Error reading USB Vendor ID from Global register");	PDEBUG(1, "Read from GLOBAL: USB Vendor ID 0x%02x%02x", data2, data1);	data1=spca50x_reg_read(dev, 0, 0x8106, 1);	if (data1 < 0)		PDEBUG(1, "Error reading USB Product ID from Global register");	data2 = spca50x_reg_read(dev, 0, 0x8107, 1);	if (data2 < 0)		PDEBUG(1, "Error reading USB Product ID from Global register");	PDEBUG(1, "Read from GLOBAL: USB Product ID 0x%02x%02x", data2, data1);	spca50x->customid = ((data2 << 8) | data1) & 0xffff;			return 0; // success} #endif

⌨️ 快捷键说明

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