📄 vc032x.h
字号:
spca50x->mode_cam[QSIF].method = 1; spca50x->mode_cam[QSIF].mode = 1; }static int vc0321_reset(struct usb_spca50x *spca50x){ spca5xxRegWrite(spca50x->dev, 0xa0, 0x00, 0xb04d, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0x01, 0xb301, NULL, 0); msleep(100); spca5xxRegWrite(spca50x->dev, 0xa0, 0x01, 0xb003, NULL, 0); msleep(100);return 0;}static int vc0321_config(struct usb_spca50x *spca50x){ __u8 tmp2[3]; int sensor = 0; spca50x->qindex = 7; vc0321_reset(spca50x); sensor = vc032x_probe_sensor(spca50x); switch (sensor) { case -1: PDEBUG(0,"Unknown sensor..."); return -EINVAL; break; case SENSOR_OV7660: PDEBUG(0, "Find Sensor OV7660"); spca50x->sensor = SENSOR_OV7660; set_vc0321VGA(spca50x); break; case SENSOR_PO3130NC: PDEBUG(0, "Find Sensor PO3130NC"); spca50x->sensor = SENSOR_PO3130NC; set_vc0321VGA(spca50x); break; case SENSOR_MI1320: PDEBUG(0, "Find Sensor MI1320"); spca50x->sensor = SENSOR_MI1320; set_vc0321VGA(spca50x); break; case SENSOR_HV7131R: PDEBUG(0, "Find Sensor HV7131R"); spca50x->sensor = SENSOR_HV7131R; set_vc0321VGA(spca50x); break; case SENSOR_OV7670: PDEBUG(0, "Find Sensor OV7670"); spca50x->sensor = SENSOR_OV7670; if(spca50x->bridge == BRIDGE_VC0323) set_vc0323VGA(spca50x); else set_vc0321VGA(spca50x); break; case SENSOR_MI1310_SOC: PDEBUG(0, "Find Sensor MI1310_SOC"); spca50x->sensor = SENSOR_MI1310_SOC; if(spca50x->bridge == BRIDGE_VC0323) set_vc0323VGA(spca50x); else set_vc0321VGA(spca50x); break; }; if (spca50x->bridge == BRIDGE_VC0321){spca5xxRegRead (spca50x->dev, 0x8a, 0x01, 0 , tmp2, 3); udelay(10);spca5xxRegWrite(spca50x->dev, 0x87, 0x00, 0x0f0f, NULL, 0); udelay(10);spca5xxRegRead (spca50x->dev, 0x8b, 0x01, 0 , tmp2, 3); udelay(10);spca5xxRegWrite(spca50x->dev, 0x88, 0x00, 0x0202, NULL, 0); udelay(10);} return 0;}static void vc0321_setquality(struct usb_spca50x *spca50x){ __u8 quality = 0; quality = (spca50x->qindex) & 0xff;// spca5xxRegWrite(spca50x->dev, 0xa0, quality, 0x0008, NULL, 0);}static void vc0321_setAutobright(struct usb_spca50x *spca50x){ __u8 autoval = 0; if (spca50x->autoexpo) autoval = 0x42; else autoval = 0x02;// spca5xxRegWrite(spca50x->dev, 0xa0, autoval, 0x0180, NULL, 0);}static void vc0321_start(struct usb_spca50x *spca50x){ // __u8 tmp2; int err = 0; __u8 *GammaT = NULL; __u8 *MatrixT = NULL; /* Assume start use the good resolution from spca50x->mode */ if (spca50x->bridge == BRIDGE_VC0321){ spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfec, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfed, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfee, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xbfef, NULL, 0); } switch (spca50x->sensor) { case SENSOR_OV7660: GammaT = ov7660_gamma; MatrixT = ov7660_matrix; if (spca50x->mode) { /* 320x240 */ err = vc0321WriteVector(spca50x, ov7660_initQVGA_data); } else { /* 640x480 */ err = vc0321WriteVector(spca50x, ov7660_initVGA_data); } break; case SENSOR_PO3130NC: GammaT = po3130_gamma; MatrixT = po3130_matrix; if (spca50x->mode) { /* 320x240 */ err = vc0321WriteVector(spca50x, po3130_initQVGA_data); } else { /* 640x480 */ err = vc0321WriteVector(spca50x, po3130_initVGA_data); } err = vc0321WriteVector(spca50x, po3130_rundata); break; case SENSOR_HV7131R: GammaT = hv7131r_gamma; MatrixT = hv7131r_matrix; if (spca50x->mode) { /* 320x240 */ err = vc0321WriteVector(spca50x, hv7131r_initQVGA_data); } else { /* 640x480 */ err = vc0321WriteVector(spca50x, hv7131r_initVGA_data); } break; case SENSOR_MI1320: GammaT = mi1320_gamma; MatrixT = mi1320_matrix; if (spca50x->mode) { /* 320x240 */ err = vc0321WriteVector(spca50x, mi1320_initQVGA_data); } else { /* 640x480 */ err = vc0321WriteVector(spca50x, mi1320_initVGA_data); } break; case SENSOR_OV7670: //GammaT = ov7660_gamma; //MatrixT = ov7660_matrix; if (spca50x->mode) { /* 320x240 */ err = vc0321WriteVector(spca50x, ov7670_initQVGA_JPG); } else { /* 640x480 */ err = vc0321WriteVector(spca50x, ov7670_initVGA_JPG); } break; case SENSOR_MI1310_SOC: if (spca50x->mode) { /* 320x240 */ err = vc0321WriteVector(spca50x, mi1310_socinitQVGA_JPG); } else { /* 640x480 */ err = vc0321WriteVector(spca50x, mi1310_socinitVGA_JPG); } break; default: PDEBUG(0, "Damned !! no sensor found Bye"); return; break; } if (GammaT && MatrixT){ put_tab_to_reg(spca50x, GammaT, 17, 0xb84a); put_tab_to_reg(spca50x, GammaT, 17, 0xb85b); put_tab_to_reg(spca50x, GammaT, 17, 0xb86c); put_tab_to_reg(spca50x, MatrixT, 9, 0xb82c); // Seem SHARPNESS /* spca5xxRegWrite(spca50x->dev, 0xa0, 0x80, 0xb80a, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xb80b, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xb80e, NULL, 0); */ /* all 0x40 ??? do nothing spca5xxRegWrite(spca50x->dev, 0xa0, 0x40, 0xb822, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0x40, 0xb823, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0x40, 0xb824, NULL, 0); */ /* Only works for HV7131R ?? spca5xxRegRead (spca50x->dev, 0xa1, 0x01, 0xb881, &tmp2, 1); udelay(10); spca5xxRegWrite(spca50x->dev, 0xa0, 0xfe01, 0xb881, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0x79, 0xb801, NULL, 0); */ /* only hv7131r et ov7660 spca5xxRegWrite(spca50x->dev, 0xa0, 0x20, 0xb827, NULL, 0); spca5xxRegWrite(spca50x->dev, 0xa0, 0xff, 0xb826, NULL, 0); //ISP_GAIN 80 spca5xxRegWrite(spca50x->dev, 0xa0, 0x23, 0xb800, NULL, 0); // ISP CTRL_BAS */ // set the led on 0x0892 0x0896 spca5xxRegWrite(spca50x->dev, 0x89, 0xffff, 0xfdff, NULL, 0); msleep(100); vc0321_setbrightness(spca50x); vc0321_setquality(spca50x); vc0321_setAutobright(spca50x); }}static void vc0321_stopN(struct usb_spca50x *spca50x){ struct usb_device *dev = spca50x->dev; spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0); spca5xxRegWrite(dev, 0xa0, 0x01, 0xb301, NULL, 0); spca5xxRegWrite(dev, 0xa0, 0x09, 0xb003, NULL, 0);}static void vc0321_stop0(struct usb_spca50x *spca50x){ struct usb_device *dev = spca50x->dev; spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);}static void vc0321_shutdown(struct usb_spca50x *spca50x){/* struct usb_device *dev = spca50x->dev; __u8 buffread; spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0); spca5xxRegWrite(dev, 0xa0, 0x01, 0xb301, NULL, 0); spca5xxRegWrite(dev, 0xa0, 0x09, 0xb303, NULL, 0); spca5xxRegWrite(dev, 0x89, 0xffff, 0xffff, NULL, 0);*/}static __u16 vc0321_getcolors(struct usb_spca50x *spca50x){//Nothingreturn spca50x->colour;}static void vc0321_setcolors(struct usb_spca50x *spca50x){//Nothing spca50x->colour = 0;}static void vc0321_set50HZ(struct usb_spca50x *spca50x) { switch (spca50x->sensor) { case SENSOR_OV7660: vc0321WriteVector(spca50x, ov7660_50HZ); break; default: break; } } static void vc0321_set60HZ(struct usb_spca50x *spca50x) { switch (spca50x->sensor) { case SENSOR_OV7660: vc0321WriteVector(spca50x, ov7660_60HZ); break; default: break; } }static void vc0321_setNoFliker(struct usb_spca50x *spca50x) { switch (spca50x->sensor) { case SENSOR_OV7660: vc0321WriteVector(spca50x, ov7660_NoFliker); break; default: break; } } static int vc0321_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){ if (cdata[0] == 0xFF && cdata[1] == 0xD8) { PDEBUG(5, "vc032x header packet found datalength %d !!", *datalength ); if(spca50x->bridge == BRIDGE_VC0321) *iPix = 46; else *iPix = 0; *datalength -= *iPix; return 0; } *iPix = 0; PDEBUG(5, "vc0321 process packet %d datalength %d ",seqnum+1,*datalength); return (seqnum +1);}#if 0 static int vc0321_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){ if (cdata[0] == 0xFF && cdata[1] == 0xD8) { *iPix = 46 ; PDEBUG(5, "vc0321 header packet found datalength %d !!", *datalength ); *datalength -= *iPix; return 0; } *iPix = 0; PDEBUG(5, "vc0321 process packet %d datalength %d ",seqnum+1,*datalength); return (seqnum +1);}static int vc0323_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){ if (cdata[0] == 0xFF && cdata[1] == 0xD8) { PDEBUG(5, "vc0323 header packet found datalength %d !!", *datalength ); if(spca50x->bridge == BRIDGE_VC0321){ *iPix = 46 ; *datalength -= *iPix; } return 0; } *iPix = 0; PDEBUG(5, "vc0321 process packet %d datalength %d ",seqnum+1,*datalength); return (seqnum +1);}#endif#endif // VC032XUSB_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -