📄 sonix.h
字号:
{ /*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 + -