V4L/DVB: gspca_ov519: add support for the button on ov511 based cams
Due to hardware limitations this only works while the camera is streaming. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
92e232acd6
commit
88e8d20a8c
@@ -2702,6 +2702,11 @@ static void sd_reset_snapshot(struct gspca_dev *gspca_dev)
|
|||||||
sd->snapshot_needs_reset = 0;
|
sd->snapshot_needs_reset = 0;
|
||||||
|
|
||||||
switch (sd->bridge) {
|
switch (sd->bridge) {
|
||||||
|
case BRIDGE_OV511:
|
||||||
|
case BRIDGE_OV511PLUS:
|
||||||
|
reg_w(sd, R51x_SYS_SNAP, 0x02);
|
||||||
|
reg_w(sd, R51x_SYS_SNAP, 0x00);
|
||||||
|
break;
|
||||||
case BRIDGE_OV518:
|
case BRIDGE_OV518:
|
||||||
case BRIDGE_OV518PLUS:
|
case BRIDGE_OV518PLUS:
|
||||||
reg_w(sd, R51x_SYS_SNAP, 0x02); /* Reset */
|
reg_w(sd, R51x_SYS_SNAP, 0x02); /* Reset */
|
||||||
@@ -3996,11 +4001,17 @@ static void ov51x_handle_button(struct gspca_dev *gspca_dev, u8 state)
|
|||||||
|
|
||||||
sd->snapshot_pressed = state;
|
sd->snapshot_pressed = state;
|
||||||
} else {
|
} else {
|
||||||
/* On the ov519 we need to reset the button state multiple
|
/* On the ov511 / ov519 we need to reset the button state
|
||||||
times, as resetting does not work as long as the button
|
multiple times, as resetting does not work as long as the
|
||||||
stays pressed */
|
button stays pressed */
|
||||||
if (sd->bridge == BRIDGE_OV519 && state)
|
switch (sd->bridge) {
|
||||||
sd->snapshot_needs_reset = 1;
|
case BRIDGE_OV511:
|
||||||
|
case BRIDGE_OV511PLUS:
|
||||||
|
case BRIDGE_OV519:
|
||||||
|
if (state)
|
||||||
|
sd->snapshot_needs_reset = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4025,6 +4036,7 @@ static void ov511_pkt_scan(struct gspca_dev *gspca_dev,
|
|||||||
*/
|
*/
|
||||||
if (!(in[0] | in[1] | in[2] | in[3] | in[4] | in[5] | in[6] | in[7]) &&
|
if (!(in[0] | in[1] | in[2] | in[3] | in[4] | in[5] | in[6] | in[7]) &&
|
||||||
(in[8] & 0x08)) {
|
(in[8] & 0x08)) {
|
||||||
|
ov51x_handle_button(gspca_dev, (in[8] >> 2) & 1);
|
||||||
if (in[8] & 0x80) {
|
if (in[8] & 0x80) {
|
||||||
/* Frame end */
|
/* Frame end */
|
||||||
if ((in[9] + 1) * 8 != gspca_dev->width ||
|
if ((in[9] + 1) * 8 != gspca_dev->width ||
|
||||||
|
Reference in New Issue
Block a user