📄 spca508_init.h
字号:
/* 482 */ {0, 0x0032, 0x850b},/* 483 */ {0, 0x0010, 0x850c},/* 484 */ {0, 0x0021, 0x850d},/* 485 */ {0, 0x0001, 0x8500},/* 486 */ {0, 0x0000, 0x8508},/* 487 */ {0, 0x0012, 0x8608},/* 488 */ {0, 0x002c, 0x8609},/* 489 */ {0, 0x0002, 0x860a},/* 490 */ {0, 0x0039, 0x860b},/* 491 */ {0, 0x00d0, 0x860c},/* 492 */ {0, 0x00f7, 0x860d},/* 493 */ {0, 0x00ed, 0x860e},/* 494 */ {0, 0x00db, 0x860f},/* 495 */ {0, 0x0039, 0x8610},/* 496 */ {0, 0x0012, 0x8657},/* 497 */ {0, 0x0064, 0x8619},/* This line starts it all, it is not needed here *//* since it has been build into the driver*/ /*590 */ {0, 0x0030, 0x8112},#endif {0, 0, 0}};/* * Initialization data for Creative Webcam Vista */static __u16 spca508_vista_init_data[][3] = { {0, 0x0008, 0x8200}, /* Clear register */ {0, 0x0000, 0x870b}, /* Reset CTL3 */ {0, 0x0020, 0x8112}, /* Video Drop packet enable */ {0, 0x0003, 0x8111}, /* Soft Reset compression, memory, TG & CDSP */ {0, 0x0000, 0x8110}, /* Disable everything */ {0, 0x0000, 0x8114}, /* Software GPIO output data */ {0, 0x0000, 0x8114}, {0, 0x0003, 0x8111}, {0, 0x0000, 0x8111}, {0, 0x0090, 0x8110}, /* Enable: SSI output, External 2X clock output */ {0, 0x0020, 0x8112}, {0, 0x0000, 0x8114}, {0, 0x0001, 0x8114}, {0, 0x0001, 0x8114}, {0, 0x0001, 0x8114}, {0, 0x0003, 0x8114}, {0, 0x000f, 0x8402}, /* Memory bank Address */ {0, 0x0000, 0x8403}, /* Memory bank Address */ {0, 0x00ba, 0x8804}, /* SSI Slave address */ {0, 0x0010, 0x8802}, /* 93.75kHz SSI Clock Two DataByte */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, /* Will write 2 bytes (DATA1+DATA2) */ {0, 0x0020, 0x8801}, /* Register address for SSI read/write */ {0, 0x0044, 0x8805}, /* DATA2 */ {0, 0x0004, 0x8800}, /* DATA1 -> write triggered */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0009, 0x8801}, {0, 0x0042, 0x8805}, {0, 0x0001, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x003c, 0x8801}, {0, 0x0001, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0001, 0x8801}, {0, 0x000a, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0002, 0x8801}, {0, 0x0000, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0003, 0x8801}, {0, 0x0027, 0x8805}, {0, 0x0001, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0004, 0x8801}, {0, 0x0065, 0x8805}, {0, 0x0001, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0005, 0x8801}, {0, 0x0003, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0006, 0x8801}, {0, 0x001c, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0007, 0x8801}, {0, 0x002a, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x000e, 0x8801}, {0, 0x0000, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0028, 0x8801}, {0, 0x002e, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0039, 0x8801}, {0, 0x0013, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x003b, 0x8801}, {0, 0x000c, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0035, 0x8801}, {0, 0x0028, 0x8805}, {0, 0x0000, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ /* READ { 0, 0x0001, 0x8802 } -> 0000: 10 */ {0, 0x0010, 0x8802}, {0, 0x0009, 0x8801}, {0, 0x0042, 0x8805}, {0, 0x0001, 0x8800}, /* READ { 0, 0x0001, 0x8803 } -> 0000: 00 */ {0, 0x0050, 0x8703}, {0, 0x0002, 0x8704}, /* External input CKIx1 */ {0, 0x0001, 0x870C}, /* Select CKOx2 output */ {0, 0x009A, 0x8600}, /* Line memory Read Counter (L) */ {0, 0x0001, 0x8606}, /* 1 Line memory Read Counter (H) Result: (d)410 */ {0, 0x0023, 0x8601}, {0, 0x0010, 0x8602}, {0, 0x000A, 0x8603}, {0, 0x009A, 0x8600}, {0, 0x0001, 0x865B}, /* 1 Horizontal Offset for Valid Pixel(L) */ {0, 0x0003, 0x865C}, /* Vertical offset for valid lines (L) */ {0, 0x0058, 0x865D}, /* Horizontal valid pixels window (L) */ {0, 0x0048, 0x865E}, /* Vertical valid lines window (L) */ {0, 0x0000, 0x865F}, {0, 0x0006, 0x8660}, /* Enable nibble data input, select nibble input order */ {0, 0x0013, 0x8608}, /* A11 Coeficients for color correction */ {0, 0x0028, 0x8609}, /* Note: these values are confirmed at the end of array */ {0, 0x0005, 0x860A}, /* ... */ {0, 0x0025, 0x860B}, {0, 0x00E1, 0x860C}, {0, 0x00FA, 0x860D}, {0, 0x00F4, 0x860E}, {0, 0x00E8, 0x860F}, {0, 0x0025, 0x8610}, /* A33 Coef. */ {0, 0x00FC, 0x8611}, /* White balance offset: R */ {0, 0x0001, 0x8612}, /* White balance offset: Gr */ {0, 0x00FE, 0x8613}, /* White balance offset: B */ {0, 0x0000, 0x8614}, /* White balance offset: Gb */ {0, 0x0064, 0x8651}, /* R gain for white balance (L) */ {0, 0x0040, 0x8652}, /* Gr gain for white balance (L) */ {0, 0x0066, 0x8653}, /* B gain for white balance (L) */ {0, 0x0040, 0x8654}, /* Gb gain for white balance (L) */ {0, 0x0001, 0x863F}, /* Enable fixed gamma correction */ {0, 0x00A1, 0x8656}, /* Size - Window1: 256x256, Window2: 128x128 */ /* UV division: UV no change, Enable New edge enhancement */ {0, 0x0018, 0x8657}, /* Edge gain high threshold */ {0, 0x0020, 0x8658}, /* Edge gain low threshold */ {0, 0x000A, 0x8659}, /* Edge bandwidth high threshold */ {0, 0x0005, 0x865A}, /* Edge bandwidth low threshold */ {0, 0x0064, 0x8607}, /* UV filter enable */ {0, 0x0016, 0x8660}, {0, 0x0000, 0x86B0}, /* Bad pixels compensation address */ {0, 0x00DC, 0x86B1}, /* X coord for bad pixels compensation (L) */ {0, 0x0000, 0x86B2}, {0, 0x0009, 0x86B3}, /* Y coord for bad pixels compensation (L) */ {0, 0x0000, 0x86B4}, {0, 0x0001, 0x86B0}, {0, 0x00F5, 0x86B1}, {0, 0x0000, 0x86B2}, {0, 0x00C6, 0x86B3}, {0, 0x0000, 0x86B4}, {0, 0x0002, 0x86B0}, {0, 0x001C, 0x86B1}, {0, 0x0001, 0x86B2}, {0, 0x00D7, 0x86B3}, {0, 0x0000, 0x86B4}, {0, 0x0003, 0x86B0}, {0, 0x001C, 0x86B1}, {0, 0x0001, 0x86B2}, {0, 0x00D8, 0x86B3}, {0, 0x0000, 0x86B4}, {0, 0x0004, 0x86B0}, {0, 0x001D, 0x86B1}, {0, 0x0001, 0x86B2}, {0, 0x00D8, 0x86B3}, {0, 0x0000, 0x86B4}, {0, 0x001E, 0x8660}, /* READ { 0, 0x0000, 0x8608 } -> 0000: 13 */ /* READ { 0, 0x0000, 0x8609 } -> 0000: 28 */ /* READ { 0, 0x0000, 0x8610 } -> 0000: 05 */ /* READ { 0, 0x0000, 0x8611 } -> 0000: 25 */ /* READ { 0, 0x0000, 0x8612 } -> 0000: e1 */ /* READ { 0, 0x0000, 0x8613 } -> 0000: fa */ /* READ { 0, 0x0000, 0x8614 } -> 0000: f4 */ /* READ { 0, 0x0000, 0x8615 } -> 0000: e8 */ /* READ { 0, 0x0000, 0x8616 } -> 0000: 25 */ {0, 0, 0}};static int config_spca508(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 508. 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); data1 = spca50x_reg_read(dev, 0, 0x8621, 1); if (data1 < 0) PDEBUG(1, "Error reading Window 1 Average Luminance from Global register"); PDEBUG(1, "Read from GLOBAL: Window 1 average luminance %3d", data1); switch (spca50x->desc) { case ViewQuestVQ110: { if (spca50x_write_vector(spca50x, spca508_init_data)) return -1; break; } case MicroInnovationIC200: case IntelEasyPCCamera: { if (spca50x_write_vector(spca50x, spca508cs110_init_data)) return -1; break; } case HamaUSBSightcam: { if (spca50x_write_vector(spca50x, spca508_sightcam_init_data)) return -1; break; } case HamaUSBSightcam2: { if (spca50x_write_vector(spca50x, spca508_sightcam2_init_data)) return -1; break; } case CreativeVista: { if (spca50x_write_vector(spca50x, spca508_vista_init_data)) return -1; break; } default: return -1; } return 0; // success}#endif /* SPCA508_INIT_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -