Loading drivers/media/video/gspca/nw80x.c +65 −208 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ struct sd { }; enum bridges { BRIDGE_NW800, /* et31x110 */ BRIDGE_NW800, /* and et31x110 */ BRIDGE_NW801, BRIDGE_NW802, }; Loading Loading @@ -145,7 +145,7 @@ enum webcams { nw801/nw802 320x240 - 640x480 */ static const struct v4l2_pix_format sif_mode[] = { static const struct v4l2_pix_format cif_mode[] = { {352, 288, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE, .bytesperline = 352, .sizeimage = 352 * 288 * 4 / 8, Loading @@ -171,6 +171,7 @@ static const struct v4l2_pix_format vga_mode[] = { * - n bytes: data */ #define I2C0 0xff static const u8 nw800_init[] = { 0x05, 0x00, 0x01, 0x55, 0x10, 0x9b, 0x01, 0xaa, Loading Loading @@ -333,8 +334,9 @@ static const u8 nw800_init[] = { 0, 0, 0 }; /* 06a5:d001 - nw801 - p35u */ static const u8 nw801_init_1[] = { /* 06a5:d001 - nw801 - Panasonic * P35u */ static const u8 nw801_start_1[] = { 0x05, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x0e, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e, 0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -389,7 +391,7 @@ static const u8 nw801_init_1[] = { 0xf0, 0x00, 0, 0, 0, }; static const u8 nw801_init_qvga[] = { static const u8 nw801_start_qvga[] = { 0x02, 0x00, 0x10, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, 0x00, 0x78, 0x18, 0x0b, 0x06, 0xa2, 0x86, 0x78, 0x02, 0x0f, 0x01, 0x6b, Loading @@ -401,7 +403,7 @@ static const u8 nw801_init_qvga[] = { /* AE window */ 0, 0, 0, }; static const u8 nw801_init_vga[] = { static const u8 nw801_start_vga[] = { 0x02, 0x00, 0x10, 0x78, 0xa0, 0x97, 0x78, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xf0, 0x02, 0x0f, 0x01, 0xd5, Loading @@ -412,7 +414,7 @@ static const u8 nw801_init_vga[] = { 0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01, 0, 0, 0, }; static const u8 nw801_init_2[] = { static const u8 nw801_start_2[] = { 0x10, 0x04, 0x01, 0x1a, 0x10, 0x19, 0x01, 0x09, /* clock */ 0x10, 0x24, 0x06, 0xc0, 0x00, 0x3f, 0x02, 0x00, 0x01, Loading Loading @@ -441,7 +443,7 @@ static const u8 nw801_init_2[] = { }; /* nw802 (sharp IR3Y38M?) */ static const u8 nw802_init[] = { static const u8 nw802_start[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x4d, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -524,7 +526,6 @@ static const u8 nw802_init[] = { }; /* et31x110 - Trust 120 SpaceCam */ static const u8 spacecam_init[] = { /*fixme: at connection time*/ 0x04, 0x05, 0x01, 0x01, 0x04, 0x04, 0x01, 0x01, 0x04, 0x06, 0x01, 0x04, Loading Loading @@ -617,13 +618,8 @@ static const u8 spacecam_init[] = { 0x04, 0x04, 0x01, 0x40, 0, 0, 0 }; /* et31x110 - other Trust SpaceCam120 */ static const u8 spacecam2_init[] = { 0x04, 0x05, 0x01, 0x61, 0x04, 0x04, 0x01, 0x01, 0x04, 0x06, 0x01, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00, 0x00, 0x05, 0x05, 0x01, 0x00, /* et31x110 - pas106 - other Trust SpaceCam120 */ static const u8 spacecam2_start[] = { 0x04, 0x06, 0x01, 0x44, 0x04, 0x06, 0x01, 0x00, 0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f, Loading Loading @@ -682,79 +678,25 @@ static const u8 spacecam2_init[] = { 0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01, 0x04, 0x04, 0x01, 0x40, 0x04, 0x04, 0x01, 0x00, #if 1 I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x05, I2C0, 0x40, 0x02, 0x11, 0x06, I2C0, 0x40, 0x02, 0x14, 0x00, I2C0, 0x40, 0x02, 0x13, 0x01, #else 0x06, 0x00, 0x0b, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x05, 0x06, 0x00, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x05, 0x05, 0x02, 0x02, 0x0c, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x06, 0x06, 0x00, 0x02, 0x11, 0x06, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x14, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */ 0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00, 0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65, 0x40, #if 1 I2C0, 0x40, 0x02, 0x02, 0x0c, I2C0, 0x40, 0x02, 0x02, 0x0c, /* pixel clock */ I2C0, 0x40, 0x02, 0x0f, 0x00, I2C0, 0x40, 0x02, 0x13, 0x01, #else 0x06, 0x00, 0x01, 0x0c, 0x06, 0x00, 0x02, 0x02, 0x0c, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x0f, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */ 0x10, 0x00, 0x01, 0x01, 0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20, 0x01, 0x60, 0x01, #if 1 I2C0, 0x40, 0x02, 0x05, 0x0f, I2C0, 0x40, 0x02, 0x13, 0x01, I2C0, 0x40, 0x02, 0x05, 0x0f, /* exposure */ I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */ I2C0, 0x40, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00, /* gains */ I2C0, 0x40, 0x03, 0x12, 0x04, 0x01, #else 0x06, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x02, 0x05, 0x0f, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x06, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00, 0x06, 0x00, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00, 0x05, 0x02, 0x02, 0x07, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x02, 0x04, 0x01, 0x06, 0x00, 0x03, 0x12, 0x04, 0x01, 0x05, 0x02, 0x02, 0x03, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01, 0x10, 0x0e, 0x01, 0x08, 0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7, Loading @@ -776,7 +718,7 @@ static const u8 spacecam2_init[] = { }; /* nw802 - Conceptronic Video Pro */ static const u8 cvideopro_init[] = { static const u8 cvideopro_start[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -856,10 +798,9 @@ static const u8 cvideopro_init[] = { }; /* nw802 - D-link dru-350c cam */ static const u8 dlink_init[] = { static const u8 dlink_start[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d, /* 0xf9, 0x02, = nb pixels per line */ 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4, Loading @@ -878,7 +819,6 @@ static const u8 dlink_init[] = { 0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94, /* 0x19, v index of clamping pulse */ 0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00, 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0, Loading Loading @@ -909,7 +849,6 @@ static const u8 dlink_init[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x82, 0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01, 0xf0, 0x00, /* 0x00, 0x03, 0x02, 0x92, 0x03, = nb of pixels per line */ 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78, 0x40, Loading Loading @@ -938,8 +877,10 @@ static const u8 dlink_init[] = { 0, 0, 0 }; /* nw801 - Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */ static const u8 ds330_init[] = { /* 06a5:d001 - nw801 - Sony * Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */ /*fixme: 320x240 only*/ static const u8 ds3303_start[] = { 0x05, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e, 0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1021,8 +962,9 @@ static const u8 ds330_init[] = { 0, 0, 0 }; /* 06a5:d001 - nw802 - Panasonic GP-KR651US (Philips TDA8786) */ static const u8 kr651_init_1[] = { /* 06a5:d001 - nw802 - Panasonic * GP-KR651US (Philips TDA8786) */ static const u8 kr651_start_1[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x48, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1075,7 +1017,7 @@ static const u8 kr651_init_1[] = { 0x01, 0xf0, 0x00, 0, 0, 0 }; static const u8 kr651_init_qvga[] = { static const u8 kr651_start_qvga[] = { 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78, 0x40, Loading @@ -1088,21 +1030,19 @@ static const u8 kr651_init_qvga[] = { 0x10, 0x1d, 0x02, 0x28, 0x01, 0, 0, 0 }; static const u8 kr651_init_vga[] = { static const u8 kr651_start_vga[] = { 0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x30, 0x03, 0x01, 0x82, 0x82, 0x98, 0x80, 0x10, 0x1a, 0x01, 0x03, 0x10, 0x00, 0x01, 0xa0, 0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01, 0x10, 0x1b, 0x02, 0x00, 0x00, 0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01, 0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00, 0x10, 0x1d, 0x02, 0x68, 0x00, }; static const u8 kr651_init_2[] = { static const u8 kr651_start_2[] = { 0x10, 0x0e, 0x01, 0x08, 0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8, 0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, Loading @@ -1122,7 +1062,7 @@ static const u8 kr651_init_2[] = { }; /* nw802 - iRez Kritter cam */ static const u8 kritter_init[] = { static const u8 kritter_start[] = { 0x04, 0x06, 0x01, 0x06, 0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0x94, 0x03, 0x18, 0x00, 0x48, 0x0f, 0x1e, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1202,7 +1142,7 @@ static const u8 kritter_init[] = { }; /* nw802 - Mustek Wcam 300 mini */ static const u8 mustek_init[] = { static const u8 mustek_start[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1337,7 +1277,7 @@ static const u8 proscope_init_1[] = { 0x01, 0xf0, 0x00, 0, 0, 0 }; static const u8 proscope_init_qvga[] = { static const u8 proscope_start_qvga[] = { 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78, 0x40, Loading @@ -1350,7 +1290,7 @@ static const u8 proscope_init_qvga[] = { 0x10, 0x0e, 0x01, 0x10, 0, 0, 0 }; static const u8 proscope_init_vga[] = { static const u8 proscope_start_vga[] = { 0x00, 0x03, 0x02, 0xf9, 0x02, 0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01, 0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00, Loading @@ -1368,7 +1308,7 @@ static const u8 proscope_init_vga[] = { 0x10, 0x03, 0x01, 0x00, 0, 0, 0 }; static const u8 proscope_init_2[] = { static const u8 proscope_start_2[] = { 0x10, 0x0f, 0x02, 0x0c, 0x0c, 0x10, 0x03, 0x01, 0x0c, 0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae, Loading @@ -1383,14 +1323,8 @@ static const u8 proscope_init_2[] = { 0, 0, 0 }; /* nw800 - Divio Chicony TwinkleCam */ static const u8 twinkle_init[] = { 0x04, 0x05, 0x01, 0x61, 0x04, 0x04, 0x01, 0x01, 0x04, 0x06, 0x01, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00, 0x00, 0x05, 0x05, 0x01, 0x00, /* nw800 - hv7121b? (seems pas106) - Divio Chicony TwinkleCam */ static const u8 twinkle_start[] = { 0x04, 0x06, 0x01, 0x44, 0x04, 0x06, 0x01, 0x00, 0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f, Loading Loading @@ -1448,107 +1382,32 @@ static const u8 twinkle_init[] = { 0x01, 0x60, 0x01, 0x00, 0x00, 0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01, /*320 3f ef, 0x00 */ 0x04, 0x04, 0x01, 0x10, 0x04, 0x04, 0x01, 0x00, 0x04, 0x05, 0x01, 0x61, 0x04, 0x04, 0x01, 0x01, #if 1 I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, I2C0, 0x40, 0x02, 0x11, 0x06, I2C0, 0x40, 0x02, 0x14, 0x00, I2C0, 0x40, 0x02, 0x13, 0x01, I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */ I2C0, 0x40, 0x02, 0x07, 0x01, #else 0x06, 0x00, 0x0b, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x06, 0x00, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x05, 0x02, 0x02, 0x0c, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x06, 0x06, 0x00, 0x02, 0x11, 0x06, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x14, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x07, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00, /* 320 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, */ 0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65, /* 320 0x00, 0x78, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x5c, */ 0x40, #if 1 I2C0, 0x40, 0x02, 0x02, 0x0c, I2C0, 0x40, 0x02, 0x13, 0x01, #else 0x06, 0x00, 0x01, 0x0c, 0x06, 0x00, 0x02, 0x02, 0x0c, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x10, 0x00, 0x01, 0x01, 0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20, 0x01, 0x60, 0x01, /* 320 0xf0, 0x00, 0x40, 0x01, */ #if 1 I2C0, 0x40, 0x02, 0x05, 0x0f, I2C0, 0x40, 0x02, 0x13, 0x01, I2C0, 0x40, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17, I2C0, 0x40, 0x03, 0x12, 0x00, 0x01, #else 0x06, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x02, 0x05, 0x0f, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x07, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17, 0x06, 0x00, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17, 0x05, 0x02, 0x02, 0x08, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x02, 0x00, 0x01, 0x06, 0x00, 0x03, 0x12, 0x00, 0x01, 0x05, 0x02, 0x02, 0x03, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01, /* 320 3f ef */ #if 1 I2C0, 0x40, 0x02, 0x12, 0x00, I2C0, 0x40, 0x02, 0x0e, 0x00, I2C0, 0x40, 0x02, 0x11, 0x06, #else 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x12, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x0e, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x06, 0x06, 0x00, 0x02, 0x11, 0x06, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7, 0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7, 0xf9, Loading Loading @@ -1745,7 +1604,7 @@ static const u8 dsbc110_init[] = { }; /* nw802 dvc-v6 */ static const u8 dvcv6_init[] = { static const u8 dvcv6_start[] = { 0x04, 0x06, 0x01, 0x06, 0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1830,22 +1689,22 @@ static const u8 dvcv6_init[] = { 0x04, 0x04, 0x01, 0x00, }; static const u8 *webcam_init[] = { static const u8 *webcam_start[] = { [Generic800] = nw800_init, [SpaceCam] = spacecam_init, [SpaceCam2] = spacecam2_init, [Cvideopro] = cvideopro_init, [Dlink350c] = dlink_init, [DS3303u] = ds330_init, [Kr651us] = kr651_init_1, [Kritter] = kritter_init, [Mustek300] = mustek_init, [SpaceCam2] = spacecam2_start, [Cvideopro] = cvideopro_start, [Dlink350c] = dlink_start, [DS3303u] = ds3303_start, [Kr651us] = kr651_start_1, [Kritter] = kritter_start, [Mustek300] = mustek_start, [Proscope] = proscope_init_1, [Twinkle] = twinkle_init, [Twinkle] = twinkle_start, [DsbC110] = dsbc110_init, [DvcV6] = dvcv6_init, [P35u] = nw801_init_1, [Generic802] = nw802_init, [DvcV6] = dvcv6_start, [P35u] = nw801_start_1, [Generic802] = nw802_start, }; /* -- write a register -- */ Loading Loading @@ -1949,7 +1808,7 @@ static void reg_w_buf(struct gspca_dev *gspca_dev, if (cmd[-3] != I2C0) reg_w(gspca_dev, reg, cmd, len); else i2c_w(gspca_dev, reg & 0xff, cmd, len); i2c_w(gspca_dev, reg, cmd, len); cmd += len; } } Loading Loading @@ -2092,8 +1951,8 @@ static int sd_init(struct gspca_dev *gspca_dev) PDEBUG(D_PROBE, "Bridge nw80%d", sd->bridge); if (sd->bridge == BRIDGE_NW800) { gspca_dev->cam.cam_mode = sif_mode; gspca_dev->cam.nmodes = ARRAY_SIZE(sif_mode); gspca_dev->cam.cam_mode = cif_mode; gspca_dev->cam.nmodes = ARRAY_SIZE(cif_mode); } else { gspca_dev->cam.cam_mode = vga_mode; switch (sd->webcam) { Loading @@ -2110,12 +1969,10 @@ static int sd_init(struct gspca_dev *gspca_dev) } switch (sd->webcam) { case P35u: /* sd->ctrls[EXPOSURE].min = 0; * sd->ctrls[EXPOSURE].max = 9; /* sd->ctrls[EXPOSURE].max = 9; * sd->ctrls[EXPOSURE].def = 1; */ break; case Kr651us: /* sd->ctrls[EXPOSURE].min = 0; */ sd->ctrls[EXPOSURE].max = 315; sd->ctrls[EXPOSURE].def = 150; break; Loading @@ -2133,29 +1990,29 @@ static int sd_start(struct gspca_dev *gspca_dev) struct sd *sd = (struct sd *) gspca_dev; const u8 *cmd; cmd = webcam_init[sd->webcam]; cmd = webcam_start[sd->webcam]; reg_w_buf(gspca_dev, cmd); switch (sd->webcam) { case P35u: if (gspca_dev->width == 320) reg_w_buf(gspca_dev, nw801_init_qvga); reg_w_buf(gspca_dev, nw801_start_qvga); else reg_w_buf(gspca_dev, nw801_init_vga); reg_w_buf(gspca_dev, nw801_init_2); reg_w_buf(gspca_dev, nw801_start_vga); reg_w_buf(gspca_dev, nw801_start_2); break; case Kr651us: if (gspca_dev->width == 320) reg_w_buf(gspca_dev, kr651_init_qvga); reg_w_buf(gspca_dev, kr651_start_qvga); else reg_w_buf(gspca_dev, kr651_init_vga); reg_w_buf(gspca_dev, kr651_init_2); reg_w_buf(gspca_dev, kr651_start_vga); reg_w_buf(gspca_dev, kr651_start_2); break; case Proscope: if (gspca_dev->width == 320) reg_w_buf(gspca_dev, proscope_init_qvga); reg_w_buf(gspca_dev, proscope_start_qvga); else reg_w_buf(gspca_dev, proscope_init_vga); reg_w_buf(gspca_dev, proscope_init_2); reg_w_buf(gspca_dev, proscope_start_vga); reg_w_buf(gspca_dev, proscope_start_2); break; } Loading Loading
drivers/media/video/gspca/nw80x.c +65 −208 Original line number Diff line number Diff line Loading @@ -53,7 +53,7 @@ struct sd { }; enum bridges { BRIDGE_NW800, /* et31x110 */ BRIDGE_NW800, /* and et31x110 */ BRIDGE_NW801, BRIDGE_NW802, }; Loading Loading @@ -145,7 +145,7 @@ enum webcams { nw801/nw802 320x240 - 640x480 */ static const struct v4l2_pix_format sif_mode[] = { static const struct v4l2_pix_format cif_mode[] = { {352, 288, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE, .bytesperline = 352, .sizeimage = 352 * 288 * 4 / 8, Loading @@ -171,6 +171,7 @@ static const struct v4l2_pix_format vga_mode[] = { * - n bytes: data */ #define I2C0 0xff static const u8 nw800_init[] = { 0x05, 0x00, 0x01, 0x55, 0x10, 0x9b, 0x01, 0xaa, Loading Loading @@ -333,8 +334,9 @@ static const u8 nw800_init[] = { 0, 0, 0 }; /* 06a5:d001 - nw801 - p35u */ static const u8 nw801_init_1[] = { /* 06a5:d001 - nw801 - Panasonic * P35u */ static const u8 nw801_start_1[] = { 0x05, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x0e, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e, 0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -389,7 +391,7 @@ static const u8 nw801_init_1[] = { 0xf0, 0x00, 0, 0, 0, }; static const u8 nw801_init_qvga[] = { static const u8 nw801_start_qvga[] = { 0x02, 0x00, 0x10, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, 0x00, 0x78, 0x18, 0x0b, 0x06, 0xa2, 0x86, 0x78, 0x02, 0x0f, 0x01, 0x6b, Loading @@ -401,7 +403,7 @@ static const u8 nw801_init_qvga[] = { /* AE window */ 0, 0, 0, }; static const u8 nw801_init_vga[] = { static const u8 nw801_start_vga[] = { 0x02, 0x00, 0x10, 0x78, 0xa0, 0x97, 0x78, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xf0, 0x02, 0x0f, 0x01, 0xd5, Loading @@ -412,7 +414,7 @@ static const u8 nw801_init_vga[] = { 0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01, 0, 0, 0, }; static const u8 nw801_init_2[] = { static const u8 nw801_start_2[] = { 0x10, 0x04, 0x01, 0x1a, 0x10, 0x19, 0x01, 0x09, /* clock */ 0x10, 0x24, 0x06, 0xc0, 0x00, 0x3f, 0x02, 0x00, 0x01, Loading Loading @@ -441,7 +443,7 @@ static const u8 nw801_init_2[] = { }; /* nw802 (sharp IR3Y38M?) */ static const u8 nw802_init[] = { static const u8 nw802_start[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x4d, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -524,7 +526,6 @@ static const u8 nw802_init[] = { }; /* et31x110 - Trust 120 SpaceCam */ static const u8 spacecam_init[] = { /*fixme: at connection time*/ 0x04, 0x05, 0x01, 0x01, 0x04, 0x04, 0x01, 0x01, 0x04, 0x06, 0x01, 0x04, Loading Loading @@ -617,13 +618,8 @@ static const u8 spacecam_init[] = { 0x04, 0x04, 0x01, 0x40, 0, 0, 0 }; /* et31x110 - other Trust SpaceCam120 */ static const u8 spacecam2_init[] = { 0x04, 0x05, 0x01, 0x61, 0x04, 0x04, 0x01, 0x01, 0x04, 0x06, 0x01, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00, 0x00, 0x05, 0x05, 0x01, 0x00, /* et31x110 - pas106 - other Trust SpaceCam120 */ static const u8 spacecam2_start[] = { 0x04, 0x06, 0x01, 0x44, 0x04, 0x06, 0x01, 0x00, 0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f, Loading Loading @@ -682,79 +678,25 @@ static const u8 spacecam2_init[] = { 0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01, 0x04, 0x04, 0x01, 0x40, 0x04, 0x04, 0x01, 0x00, #if 1 I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x05, I2C0, 0x40, 0x02, 0x11, 0x06, I2C0, 0x40, 0x02, 0x14, 0x00, I2C0, 0x40, 0x02, 0x13, 0x01, #else 0x06, 0x00, 0x0b, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x05, 0x06, 0x00, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x05, 0x05, 0x05, 0x02, 0x02, 0x0c, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x06, 0x06, 0x00, 0x02, 0x11, 0x06, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x14, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */ 0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00, 0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65, 0x40, #if 1 I2C0, 0x40, 0x02, 0x02, 0x0c, I2C0, 0x40, 0x02, 0x02, 0x0c, /* pixel clock */ I2C0, 0x40, 0x02, 0x0f, 0x00, I2C0, 0x40, 0x02, 0x13, 0x01, #else 0x06, 0x00, 0x01, 0x0c, 0x06, 0x00, 0x02, 0x02, 0x0c, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x0f, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */ 0x10, 0x00, 0x01, 0x01, 0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20, 0x01, 0x60, 0x01, #if 1 I2C0, 0x40, 0x02, 0x05, 0x0f, I2C0, 0x40, 0x02, 0x13, 0x01, I2C0, 0x40, 0x02, 0x05, 0x0f, /* exposure */ I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */ I2C0, 0x40, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00, /* gains */ I2C0, 0x40, 0x03, 0x12, 0x04, 0x01, #else 0x06, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x02, 0x05, 0x0f, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x06, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00, 0x06, 0x00, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00, 0x05, 0x02, 0x02, 0x07, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x02, 0x04, 0x01, 0x06, 0x00, 0x03, 0x12, 0x04, 0x01, 0x05, 0x02, 0x02, 0x03, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01, 0x10, 0x0e, 0x01, 0x08, 0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7, Loading @@ -776,7 +718,7 @@ static const u8 spacecam2_init[] = { }; /* nw802 - Conceptronic Video Pro */ static const u8 cvideopro_init[] = { static const u8 cvideopro_start[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -856,10 +798,9 @@ static const u8 cvideopro_init[] = { }; /* nw802 - D-link dru-350c cam */ static const u8 dlink_init[] = { static const u8 dlink_start[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d, /* 0xf9, 0x02, = nb pixels per line */ 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4, Loading @@ -878,7 +819,6 @@ static const u8 dlink_init[] = { 0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94, /* 0x19, v index of clamping pulse */ 0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00, 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0, Loading Loading @@ -909,7 +849,6 @@ static const u8 dlink_init[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x82, 0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01, 0xf0, 0x00, /* 0x00, 0x03, 0x02, 0x92, 0x03, = nb of pixels per line */ 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78, 0x40, Loading Loading @@ -938,8 +877,10 @@ static const u8 dlink_init[] = { 0, 0, 0 }; /* nw801 - Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */ static const u8 ds330_init[] = { /* 06a5:d001 - nw801 - Sony * Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */ /*fixme: 320x240 only*/ static const u8 ds3303_start[] = { 0x05, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e, 0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1021,8 +962,9 @@ static const u8 ds330_init[] = { 0, 0, 0 }; /* 06a5:d001 - nw802 - Panasonic GP-KR651US (Philips TDA8786) */ static const u8 kr651_init_1[] = { /* 06a5:d001 - nw802 - Panasonic * GP-KR651US (Philips TDA8786) */ static const u8 kr651_start_1[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x48, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1075,7 +1017,7 @@ static const u8 kr651_init_1[] = { 0x01, 0xf0, 0x00, 0, 0, 0 }; static const u8 kr651_init_qvga[] = { static const u8 kr651_start_qvga[] = { 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78, 0x40, Loading @@ -1088,21 +1030,19 @@ static const u8 kr651_init_qvga[] = { 0x10, 0x1d, 0x02, 0x28, 0x01, 0, 0, 0 }; static const u8 kr651_init_vga[] = { static const u8 kr651_start_vga[] = { 0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x30, 0x03, 0x01, 0x82, 0x82, 0x98, 0x80, 0x10, 0x1a, 0x01, 0x03, 0x10, 0x00, 0x01, 0xa0, 0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01, 0x10, 0x1b, 0x02, 0x00, 0x00, 0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01, 0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00, 0x10, 0x1d, 0x02, 0x68, 0x00, }; static const u8 kr651_init_2[] = { static const u8 kr651_start_2[] = { 0x10, 0x0e, 0x01, 0x08, 0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8, 0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, Loading @@ -1122,7 +1062,7 @@ static const u8 kr651_init_2[] = { }; /* nw802 - iRez Kritter cam */ static const u8 kritter_init[] = { static const u8 kritter_start[] = { 0x04, 0x06, 0x01, 0x06, 0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0x94, 0x03, 0x18, 0x00, 0x48, 0x0f, 0x1e, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1202,7 +1142,7 @@ static const u8 kritter_init[] = { }; /* nw802 - Mustek Wcam 300 mini */ static const u8 mustek_init[] = { static const u8 mustek_start[] = { 0x04, 0x06, 0x01, 0x04, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1337,7 +1277,7 @@ static const u8 proscope_init_1[] = { 0x01, 0xf0, 0x00, 0, 0, 0 }; static const u8 proscope_init_qvga[] = { static const u8 proscope_start_qvga[] = { 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78, 0x40, Loading @@ -1350,7 +1290,7 @@ static const u8 proscope_init_qvga[] = { 0x10, 0x0e, 0x01, 0x10, 0, 0, 0 }; static const u8 proscope_init_vga[] = { static const u8 proscope_start_vga[] = { 0x00, 0x03, 0x02, 0xf9, 0x02, 0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01, 0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00, Loading @@ -1368,7 +1308,7 @@ static const u8 proscope_init_vga[] = { 0x10, 0x03, 0x01, 0x00, 0, 0, 0 }; static const u8 proscope_init_2[] = { static const u8 proscope_start_2[] = { 0x10, 0x0f, 0x02, 0x0c, 0x0c, 0x10, 0x03, 0x01, 0x0c, 0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae, Loading @@ -1383,14 +1323,8 @@ static const u8 proscope_init_2[] = { 0, 0, 0 }; /* nw800 - Divio Chicony TwinkleCam */ static const u8 twinkle_init[] = { 0x04, 0x05, 0x01, 0x61, 0x04, 0x04, 0x01, 0x01, 0x04, 0x06, 0x01, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00, 0x00, 0x05, 0x05, 0x01, 0x00, /* nw800 - hv7121b? (seems pas106) - Divio Chicony TwinkleCam */ static const u8 twinkle_start[] = { 0x04, 0x06, 0x01, 0x44, 0x04, 0x06, 0x01, 0x00, 0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f, Loading Loading @@ -1448,107 +1382,32 @@ static const u8 twinkle_init[] = { 0x01, 0x60, 0x01, 0x00, 0x00, 0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01, /*320 3f ef, 0x00 */ 0x04, 0x04, 0x01, 0x10, 0x04, 0x04, 0x01, 0x00, 0x04, 0x05, 0x01, 0x61, 0x04, 0x04, 0x01, 0x01, #if 1 I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, I2C0, 0x40, 0x02, 0x11, 0x06, I2C0, 0x40, 0x02, 0x14, 0x00, I2C0, 0x40, 0x02, 0x13, 0x01, I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */ I2C0, 0x40, 0x02, 0x07, 0x01, #else 0x06, 0x00, 0x0b, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x06, 0x00, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x05, 0x02, 0x02, 0x0c, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x06, 0x06, 0x00, 0x02, 0x11, 0x06, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x14, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x07, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00, /* 320 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00, */ 0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65, /* 320 0x00, 0x78, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x5c, */ 0x40, #if 1 I2C0, 0x40, 0x02, 0x02, 0x0c, I2C0, 0x40, 0x02, 0x13, 0x01, #else 0x06, 0x00, 0x01, 0x0c, 0x06, 0x00, 0x02, 0x02, 0x0c, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x10, 0x00, 0x01, 0x01, 0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20, 0x01, 0x60, 0x01, /* 320 0xf0, 0x00, 0x40, 0x01, */ #if 1 I2C0, 0x40, 0x02, 0x05, 0x0f, I2C0, 0x40, 0x02, 0x13, 0x01, I2C0, 0x40, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17, I2C0, 0x40, 0x03, 0x12, 0x00, 0x01, #else 0x06, 0x00, 0x01, 0x0f, 0x06, 0x00, 0x02, 0x05, 0x0f, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x13, 0x01, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x07, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17, 0x06, 0x00, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17, 0x05, 0x02, 0x02, 0x08, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x02, 0x00, 0x01, 0x06, 0x00, 0x03, 0x12, 0x00, 0x01, 0x05, 0x02, 0x02, 0x03, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01, /* 320 3f ef */ #if 1 I2C0, 0x40, 0x02, 0x12, 0x00, I2C0, 0x40, 0x02, 0x0e, 0x00, I2C0, 0x40, 0x02, 0x11, 0x06, #else 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x12, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x02, 0x0e, 0x00, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, 0x06, 0x00, 0x01, 0x06, 0x06, 0x00, 0x02, 0x11, 0x06, 0x05, 0x02, 0x02, 0x02, 0x40, 0x05, 0x05, 0x01, 0x01, #endif 0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7, 0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7, 0xf9, Loading Loading @@ -1745,7 +1604,7 @@ static const u8 dsbc110_init[] = { }; /* nw802 dvc-v6 */ static const u8 dvcv6_init[] = { static const u8 dvcv6_start[] = { 0x04, 0x06, 0x01, 0x06, 0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c, 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19, Loading Loading @@ -1830,22 +1689,22 @@ static const u8 dvcv6_init[] = { 0x04, 0x04, 0x01, 0x00, }; static const u8 *webcam_init[] = { static const u8 *webcam_start[] = { [Generic800] = nw800_init, [SpaceCam] = spacecam_init, [SpaceCam2] = spacecam2_init, [Cvideopro] = cvideopro_init, [Dlink350c] = dlink_init, [DS3303u] = ds330_init, [Kr651us] = kr651_init_1, [Kritter] = kritter_init, [Mustek300] = mustek_init, [SpaceCam2] = spacecam2_start, [Cvideopro] = cvideopro_start, [Dlink350c] = dlink_start, [DS3303u] = ds3303_start, [Kr651us] = kr651_start_1, [Kritter] = kritter_start, [Mustek300] = mustek_start, [Proscope] = proscope_init_1, [Twinkle] = twinkle_init, [Twinkle] = twinkle_start, [DsbC110] = dsbc110_init, [DvcV6] = dvcv6_init, [P35u] = nw801_init_1, [Generic802] = nw802_init, [DvcV6] = dvcv6_start, [P35u] = nw801_start_1, [Generic802] = nw802_start, }; /* -- write a register -- */ Loading Loading @@ -1949,7 +1808,7 @@ static void reg_w_buf(struct gspca_dev *gspca_dev, if (cmd[-3] != I2C0) reg_w(gspca_dev, reg, cmd, len); else i2c_w(gspca_dev, reg & 0xff, cmd, len); i2c_w(gspca_dev, reg, cmd, len); cmd += len; } } Loading Loading @@ -2092,8 +1951,8 @@ static int sd_init(struct gspca_dev *gspca_dev) PDEBUG(D_PROBE, "Bridge nw80%d", sd->bridge); if (sd->bridge == BRIDGE_NW800) { gspca_dev->cam.cam_mode = sif_mode; gspca_dev->cam.nmodes = ARRAY_SIZE(sif_mode); gspca_dev->cam.cam_mode = cif_mode; gspca_dev->cam.nmodes = ARRAY_SIZE(cif_mode); } else { gspca_dev->cam.cam_mode = vga_mode; switch (sd->webcam) { Loading @@ -2110,12 +1969,10 @@ static int sd_init(struct gspca_dev *gspca_dev) } switch (sd->webcam) { case P35u: /* sd->ctrls[EXPOSURE].min = 0; * sd->ctrls[EXPOSURE].max = 9; /* sd->ctrls[EXPOSURE].max = 9; * sd->ctrls[EXPOSURE].def = 1; */ break; case Kr651us: /* sd->ctrls[EXPOSURE].min = 0; */ sd->ctrls[EXPOSURE].max = 315; sd->ctrls[EXPOSURE].def = 150; break; Loading @@ -2133,29 +1990,29 @@ static int sd_start(struct gspca_dev *gspca_dev) struct sd *sd = (struct sd *) gspca_dev; const u8 *cmd; cmd = webcam_init[sd->webcam]; cmd = webcam_start[sd->webcam]; reg_w_buf(gspca_dev, cmd); switch (sd->webcam) { case P35u: if (gspca_dev->width == 320) reg_w_buf(gspca_dev, nw801_init_qvga); reg_w_buf(gspca_dev, nw801_start_qvga); else reg_w_buf(gspca_dev, nw801_init_vga); reg_w_buf(gspca_dev, nw801_init_2); reg_w_buf(gspca_dev, nw801_start_vga); reg_w_buf(gspca_dev, nw801_start_2); break; case Kr651us: if (gspca_dev->width == 320) reg_w_buf(gspca_dev, kr651_init_qvga); reg_w_buf(gspca_dev, kr651_start_qvga); else reg_w_buf(gspca_dev, kr651_init_vga); reg_w_buf(gspca_dev, kr651_init_2); reg_w_buf(gspca_dev, kr651_start_vga); reg_w_buf(gspca_dev, kr651_start_2); break; case Proscope: if (gspca_dev->width == 320) reg_w_buf(gspca_dev, proscope_init_qvga); reg_w_buf(gspca_dev, proscope_start_qvga); else reg_w_buf(gspca_dev, proscope_init_vga); reg_w_buf(gspca_dev, proscope_init_2); reg_w_buf(gspca_dev, proscope_start_vga); reg_w_buf(gspca_dev, proscope_start_2); break; } Loading