diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/video/gspca/sn9c20x.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/drivers/media/video/gspca/sn9c20x.c b/drivers/media/video/gspca/sn9c20x.c index da2904a891aa..5285a519c1f3 100644 --- a/drivers/media/video/gspca/sn9c20x.c +++ b/drivers/media/video/gspca/sn9c20x.c | |||
@@ -874,8 +874,8 @@ static const struct i2c_reg_u8 ov7660_init[] = { | |||
874 | 0x10, 0x61 and sd->hstart, vstart = 3, fixes ugly colored borders */ | 874 | 0x10, 0x61 and sd->hstart, vstart = 3, fixes ugly colored borders */ |
875 | {0x17, 0x10}, {0x18, 0x61}, | 875 | {0x17, 0x10}, {0x18, 0x61}, |
876 | {0x37, 0x0f}, {0x38, 0x02}, {0x39, 0x43}, | 876 | {0x37, 0x0f}, {0x38, 0x02}, {0x39, 0x43}, |
877 | {0x3a, 0x00}, {0x69, 0x90}, {0x2d, 0xf6}, | 877 | {0x3a, 0x00}, {0x69, 0x90}, {0x2d, 0x00}, |
878 | {0x2e, 0x0b}, {0x01, 0x78}, {0x02, 0x50}, | 878 | {0x2e, 0x00}, {0x01, 0x78}, {0x02, 0x50}, |
879 | }; | 879 | }; |
880 | 880 | ||
881 | static const struct i2c_reg_u8 ov7670_init[] = { | 881 | static const struct i2c_reg_u8 ov7670_init[] = { |
@@ -1645,7 +1645,7 @@ static void set_exposure(struct gspca_dev *gspca_dev) | |||
1645 | struct sd *sd = (struct sd *) gspca_dev; | 1645 | struct sd *sd = (struct sd *) gspca_dev; |
1646 | u8 exp[8] = {sd->i2c_intf, sd->i2c_addr, | 1646 | u8 exp[8] = {sd->i2c_intf, sd->i2c_addr, |
1647 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}; | 1647 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}; |
1648 | int expo; | 1648 | int expo, expo2; |
1649 | 1649 | ||
1650 | if (gspca_dev->streaming) | 1650 | if (gspca_dev->streaming) |
1651 | exp[7] = 0x1e; | 1651 | exp[7] = 0x1e; |
@@ -1656,8 +1656,23 @@ static void set_exposure(struct gspca_dev *gspca_dev) | |||
1656 | case SENSOR_OV7670: | 1656 | case SENSOR_OV7670: |
1657 | case SENSOR_OV9655: | 1657 | case SENSOR_OV9655: |
1658 | case SENSOR_OV9650: | 1658 | case SENSOR_OV9650: |
1659 | if (expo > 547) | ||
1660 | expo2 = 547; | ||
1661 | else | ||
1662 | expo2 = expo; | ||
1663 | exp[0] |= (2 << 4); | ||
1664 | exp[2] = 0x10; /* AECH */ | ||
1665 | exp[3] = expo2 >> 2; | ||
1666 | exp[7] = 0x10; | ||
1667 | i2c_w(gspca_dev, exp); | ||
1668 | exp[2] = 0x04; /* COM1 */ | ||
1669 | exp[3] = expo2 & 0x0003; | ||
1670 | exp[7] = 0x10; | ||
1671 | i2c_w(gspca_dev, exp); | ||
1672 | expo -= expo2; | ||
1673 | exp[7] = 0x1e; | ||
1659 | exp[0] |= (3 << 4); | 1674 | exp[0] |= (3 << 4); |
1660 | exp[2] = 0x2d; | 1675 | exp[2] = 0x2d; /* ADVFL & ADVFH */ |
1661 | exp[3] = expo; | 1676 | exp[3] = expo; |
1662 | exp[4] = expo >> 8; | 1677 | exp[4] = expo >> 8; |
1663 | break; | 1678 | break; |