diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c index 2c662ed91b5b..d9a934b99a89 100644 --- a/drivers/media/video/gspca/gspca.c +++ b/drivers/media/video/gspca/gspca.c @@ -158,7 +158,7 @@ static int gspca_input_connect(struct gspca_dev *dev) int err = 0; dev->input_dev = NULL; - if (dev->sd_desc->int_pkt_scan) { + if (dev->sd_desc->int_pkt_scan || dev->sd_desc->other_input) { input_dev = input_allocate_device(); if (!input_dev) return -ENOMEM; diff --git a/drivers/media/video/gspca/gspca.h b/drivers/media/video/gspca/gspca.h index 0ed254b496a5..02c696a22be0 100644 --- a/drivers/media/video/gspca/gspca.h +++ b/drivers/media/video/gspca/gspca.h @@ -131,6 +131,9 @@ struct sd_desc { cam_ident_op get_chip_ident; #ifdef CONFIG_INPUT cam_int_pkt_op int_pkt_scan; + /* other_input makes the gspca core create gspca_dev->input even when + int_pkt_scan is NULL, for cams with non interrupt driven buttons */ + u8 other_input; #endif };