@@ -45,7 +45,7 @@ struct sd {
u8 blue;
u8 red;
u8 gamma;
- u8 vflip; /* ov7630/ov7648 only */
+ u8 vflip; /* ov7630/ov7648/po2030n only */
u8 sharpness;
u8 infrared; /* mt9v111 only */
u8 freq; /* ov76xx only */
@@ -219,7 +219,7 @@ static const struct ctrl sd_ctrls[] = {
.set = sd_setautogain,
.get = sd_getautogain,
},
-/* ov7630/ov7648 only */
+/* ov7630/ov7648/po2030n only */
#define VFLIP_IDX 7
{
{
@@ -328,7 +328,6 @@ static const __u32 ctrl_dis[] = {
[SENSOR_PO2030N] = (1 << AUTOGAIN_IDX) |
(1 << INFRARED_IDX) |
- (1 << VFLIP_IDX) |
(1 << FREQ_IDX),
[SENSOR_SOI768] = (1 << AUTOGAIN_IDX) |
(1 << INFRARED_IDX) |
@@ -2136,7 +2135,7 @@ static void setautogain(struct gspca_dev
sd->ag_cnt = -1;
}
-/* hv7131r/ov7630/ov7648 only */
+/* hv7131r/ov7630/ov7648/po2030n only */
static void setvflip(struct sd *sd)
{
u8 comn;
@@ -2156,6 +2155,20 @@ static void setvflip(struct sd *sd)
comn |= 0x80;
i2c_w1(&sd->gspca_dev, 0x75, comn);
break;
+ case SENSOR_PO2030N:
+ /* Reg. 0x1E: Timing Generator Control Register 2 (Tgcontrol2)
+ * (reset value: 0x0A)
+ * bit7: HM: Horizontal Mirror: 0: disable, 1: enable
+ * bit6: VM: Vertical Mirror: 0: disable, 1: enable
+ * bit5: ST: Shutter Selection: 0: electrical, 1: mechanical
+ * bit4: FT: Single Frame Transfer: 0: disable, 1: enable
+ * bit3-0: X
+ */
+ comn = 0x0A;
+ if (sd->vflip)
+ comn |= 0x40;
+ i2c_w1(&sd->gspca_dev, 0x1E, comn);
+ break;
default:
/* case SENSOR_OV7648: */
comn = 0x06;