(1 << VFLIP_IDX) |
(1 << FREQ_IDX),
-[SENSOR_GC0307] = (1 << AUTOGAIN_IDX) |
- (1 << INFRARED_IDX) |
+[SENSOR_GC0307] = (1 << INFRARED_IDX) |
(1 << VFLIP_IDX) |
(1 << FREQ_IDX),
/*param3*/
{0xa0, 0x21, 0x01, 0x6e, 0x00, 0x00, 0x00, 0x10},
{0xa0, 0x21, 0x02, 0x88, 0x00, 0x00, 0x00, 0x10},
-
- {0xa0, 0x21, 0x68, 0x22, 0x00, 0x00, 0x00, 0x10},
- {0xdd, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0xa0, 0x21, 0x03, 0x07, 0x00, 0x00, 0x00, 0x10},
- {0xdd, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0xa0, 0x21, 0x04, 0x91, 0x00, 0x00, 0x00, 0x10},
{}
};
struct sd *sd = (struct sd *) gspca_dev;
switch (sd->sensor) {
+ case SENSOR_GC0307: {
+ int a, b;
+
+ /* expo = 0..255 -> a = 19..43 */
+ a = 19 + expo * 25 / 256;
+ i2c_w1(gspca_dev, 0x68, a);
+ a -= 12;
+ b = a * a * 4; /* heuristic */
+ i2c_w1(gspca_dev, 0x03, b >> 8);
+ i2c_w1(gspca_dev, 0x04, b);
+ break;
+ }
case SENSOR_HV7131R: {
u8 Expodoit[] =
{ 0xc1, 0x11, 0x25, 0x00, 0x00, 0x00, 0x00, 0x16 };
expo = sd->brightness >> 4;
sd->exposure = setexposure(gspca_dev, expo);
break;
+ case SENSOR_GC0307:
case SENSOR_MT9V111:
expo = sd->brightness >> 8;
sd->exposure = setexposure(gspca_dev, expo);
if (delta < luma_mean - luma_delta ||
delta > luma_mean + luma_delta) {
switch (sd->sensor) {
+ case SENSOR_GC0307:
+ expotimes = sd->exposure;
+ expotimes += (luma_mean - delta) >> 6;
+ if (expotimes < 0)
+ expotimes = 0;
+ sd->exposure = setexposure(gspca_dev,
+ (unsigned int) expotimes);
+ break;
case SENSOR_HV7131R:
expotimes = sd->exposure >> 8;
expotimes += (luma_mean - delta) >> 4;