📄 spca500_init.h
字号:
xmult = 0x16; ymult = 0x12; } else { xmult = 0x28; ymult = 0x1e; } /* is there a sensor here ? */ spca5xxRegRead(spca50x->dev, 0, 0, 0x8a04, &Data, 1); PDEBUG(0, "Spca500 Sensor Address 0x%02X ", Data);PDEBUG(0, "Spca500 mode %d ,Xmult 0x%02X, Ymult 0x%02X ", spca50x->mode,xmult,ymult); /* setup qtable */ switch (spca50x->desc) { case LogitechClickSmart310: spca500_setmode(spca50x,xmult,ymult); /* enable drop packet */ if ((err = spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001)) < 0) { PDEBUG(2, "failed to enable drop packet"); } err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 3); if (err < 0) { PDEBUG(2, "spca50x_reg_write failed"); } err = spca50x_setup_qtable(spca50x, 0x00, 0x8800, 0x8840, qtable_creative_pccam); if (err < 0) { PDEBUG(2, "spca50x_setup_qtable failed"); } //Init SDRAM - needed for SDRAM access spca50x_reg_write(spca50x->dev, 0x00, 0x870a, 0x04); /* switch to video camera mode */ err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004); if (err < 0) { PDEBUG(2, "spca50x_reg_write camera mode failed"); } wait_ms(500); if (spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44) != 0) { PDEBUG(2, "spca50x_reg_readwait() failed"); } spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1); spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data); err = spca500_synch310(spca50x); spca50x_write_vector(spca50x, spca500_visual_defaults); spca500_setmode(spca50x,xmult,ymult); /* enable drop packet */ if ((err = spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001)) < 0) { PDEBUG(2, "failed to enable drop packet"); } err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 3); if (err < 0) { PDEBUG(2, "spca50x_reg_write failed"); } err = spca50x_setup_qtable(spca50x, 0x00, 0x8800, 0x8840, qtable_creative_pccam); if (err < 0) { PDEBUG(2, "spca50x_setup_qtable failed"); } //Init SDRAM - needed for SDRAM access spca50x_reg_write(spca50x->dev, 0x00, 0x870a, 0x04); /* switch to video camera mode */ err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004); if (err < 0) { PDEBUG(2, "spca50x_reg_write camera mode failed"); } if (spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44) != 0) { PDEBUG(2, "spca50x_reg_readwait() failed"); } spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1); spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data); break; case CreativePCCam300: /* Creative PC-CAM 300 640x480 CCD */ case IntelPocketPCCamera: /* FIXME: Temporary fix for Intel Pocket PC Camera - NWG (Sat 29th March 2003) */ /* do a full reset */ if ((err = spca500_full_reset(spca50x)) < 0) { PDEBUG(2, "spca500_full_reset failed"); } /* enable drop packet */ if ((err = spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001)) < 0) { PDEBUG(2, "failed to enable drop packet"); } err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 3); if (err < 0) { PDEBUG(2, "spca50x_reg_write failed"); } err = spca50x_setup_qtable(spca50x, 0x00, 0x8800, 0x8840, qtable_creative_pccam); if (err < 0) { PDEBUG(2, "spca50x_setup_qtable failed"); } spca500_setmode(spca50x,xmult,ymult); spca50x_reg_write(spca50x->dev, 0x20, 0x0001, 0x0004); /* switch to video camera mode */ err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004); if (err < 0) { PDEBUG(2, "spca50x_reg_write camera mode failed"); } if (spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44) != 0) { PDEBUG(2, "spca50x_reg_readwait() failed"); } spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1); spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data); //spca50x_write_vector(spca50x, spca500_visual_defaults); break; case KodakEZ200: /* Kodak EZ200 */ /* do a full reset */ if ((err = spca500_full_reset(spca50x)) < 0) { PDEBUG(2, "spca500_full_reset failed"); } /* enable drop packet */ if ((err = spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001)) < 0) { PDEBUG(2, "failed to enable drop packet"); } err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 0); if (err < 0) { PDEBUG(2, "spca50x_reg_write failed"); } err = spca50x_setup_qtable(spca50x, 0x00, 0x8800, 0x8840, qtable_kodak_ez200); if (err < 0) { PDEBUG(2, "spca50x_setup_qtable failed"); } spca500_setmode(spca50x,xmult,ymult); spca50x_reg_write(spca50x->dev, 0x20, 0x0001, 0x0004); /* switch to video camera mode */ err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004); if (err < 0) { PDEBUG(2, "spca50x_reg_write camera mode failed"); } if (spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44) != 0) { PDEBUG(2, "spca50x_reg_readwait() failed"); } spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1); spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data); //spca50x_write_vector(spca50x, spca500_visual_defaults); break; case BenqDC1016: case DLinkDSC350: /* FamilyCam 300 */ case AiptekPocketDV: /* Aiptek PocketDV */ case Gsmartmini: /*Mustek Gsmart Mini */ case MustekGsmart300: // Mustek Gsmart 300 case PalmPixDC85: case Optimedia: case ToptroIndus: case AgfaCl20: spca500_reinit(spca50x); spca50x_reg_write(spca50x->dev, 0x00, 0x0d01, 0x01); /* enable drop packet */ spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001); err = spca50x_setup_qtable(spca50x, 0x00, 0x8800, 0x8840, qtable_pocketdv); if (err < 0) { PDEBUG(2, "spca50x_setup_qtable failed"); } spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 2); /* familycam Quicksmart pocketDV stuff */ spca50x_reg_write(spca50x->dev, 0x00, 0x800a, 0x00); //Set agc transfer: synced inbetween frames spca50x_reg_write(spca50x->dev, 0x00, 0x820f, 0x01); //Init SDRAM - needed for SDRAM access spca50x_reg_write(spca50x->dev, 0x00, 0x870a, 0x04); spca500_setmode(spca50x,xmult,ymult); /* switch to video camera mode */ err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004); spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44); spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1); spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data); break; case LogitechTraveler: case LogitechClickSmart510: { spca50x_reg_write(spca50x->dev, 0x02, 0x00, 0x00); /* enable drop packet */ if ((err = spca50x_reg_write(spca50x->dev, 0x00, 0x850a, 0x0001)) < 0) { PDEBUG(2, "failed to enable drop packet"); } err = spca50x_setup_qtable(spca50x, 0x00, 0x8800, 0x8840, qtable_creative_pccam); if (err < 0) { PDEBUG(2, "spca50x_setup_qtable failed"); } err = spca50x_reg_write(spca50x->dev, 0x00, 0x8880, 3); if (err < 0) { PDEBUG(2, "spca50x_reg_write failed"); } spca50x_reg_write(spca50x->dev, 0x00, 0x800a, 0x00); //Init SDRAM - needed for SDRAM access spca50x_reg_write(spca50x->dev, 0x00, 0x870a, 0x04); spca500_setmode(spca50x,xmult,ymult); /* switch to video camera mode */ err = spca50x_reg_write(spca50x->dev, 0x00, 0x8000, 0x0004); spca50x_reg_readwait(spca50x->dev, 0, 0x8000, 0x44); spca5xxRegRead(spca50x->dev, 0, 0, 0x816b, &Data, 1); spca50x_reg_write(spca50x->dev, 0x00, 0x816b, Data); spca50x_write_vector(spca50x, Clicksmart510_defaults); } break; default: PDEBUG(0, "UNKNOW spca500 WEBCAM MODEL !! "); break; }}static int spca500_full_reset(struct usb_spca50x *spca50x){ int err; /* send the reset command */ err = spca50x_reg_write(spca50x->dev, 0xe0, 0x0001, 0x0000); if (err < 0) { return err; } /* wait for the reset to complete */ err = spca50x_reg_readwait(spca50x->dev, 0x06, 0x0000, 0x0000); if (err < 0) { return err; } if ((err = spca50x_reg_write(spca50x->dev, 0xe0, 0x0000, 0x0000)) < 0) { PDEBUG(2, "spca50x_reg_write() failed"); return err; } if ((err = spca50x_reg_readwait(spca50x->dev, 0x06, 0, 0)) < 0) { PDEBUG(2, "spca50x_reg_readwait() failed"); return err; } /* all ok */ return 0;}static int spca500_sofdetect(struct usb_spca50x *spca50x,struct spca50x_frame *frame, unsigned char *cdata,int *iPix, int seqnum, int *datalength){ if (cdata[0] == SPCA50X_SEQUENCE_DROP) { if (cdata[1] == 0x01) { *iPix = SPCA500_OFFSET_DATA; *datalength -= *iPix; return 0; } else { /* drop packet */ return -1; } } else { *iPix = 1; *datalength -= *iPix; return (seqnum+1); }}#endif /* SPCA500_INIT_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -