[media] saa7134-input: key up events not sent after suspend/resume
On my AverMedia AverTV Studio 507, key up events are no longer sent after a suspend-to-disk/resume cycle, resulting in "stuck" keys. Apparently, for key up events to be generated, a certain GPIO pin must be set. Currently it's set in saa7134_input_init1(), but that function is not called on device resume. I suggest that code be moved to __saa7134_ir_start(), which is called both on init and resume. Signed-off-by: Vadim Solomin <vadic052@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Родитель
bc4b18c6f5
Коммит
8c1476ffc0
|
@ -414,6 +414,41 @@ static int __saa7134_ir_start(void *priv)
|
||||||
if (ir->running)
|
if (ir->running)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* Moved here from saa7134_input_init1() because the latter
|
||||||
|
* is not called on device resume */
|
||||||
|
switch (dev->board) {
|
||||||
|
case SAA7134_BOARD_MD2819:
|
||||||
|
case SAA7134_BOARD_KWORLD_VSTREAM_XPERT:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_305:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_307:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_STUDIO_305:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_STUDIO_505:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_STUDIO_507:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_STUDIO_507UA:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_M102:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS:
|
||||||
|
/* Without this we won't receive key up events */
|
||||||
|
saa_setb(SAA7134_GPIO_GPMODE0, 0x4);
|
||||||
|
saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
|
||||||
|
break;
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_777:
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_A16AR:
|
||||||
|
/* Without this we won't receive key up events */
|
||||||
|
saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
|
||||||
|
saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
|
||||||
|
break;
|
||||||
|
case SAA7134_BOARD_AVERMEDIA_A16D:
|
||||||
|
/* Without this we won't receive key up events */
|
||||||
|
saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
|
||||||
|
saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
|
||||||
|
break;
|
||||||
|
case SAA7134_BOARD_GOTVIEW_7135:
|
||||||
|
saa_setb(SAA7134_GPIO_GPMODE1, 0x80);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
ir->running = true;
|
ir->running = true;
|
||||||
ir->active = false;
|
ir->active = false;
|
||||||
|
|
||||||
|
@ -548,9 +583,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
|
||||||
mask_keycode = 0x0007C8;
|
mask_keycode = 0x0007C8;
|
||||||
mask_keydown = 0x000010;
|
mask_keydown = 0x000010;
|
||||||
polling = 50; // ms
|
polling = 50; // ms
|
||||||
/* Set GPIO pin2 to high to enable the IR controller */
|
/* GPIO stuff moved to __saa7134_ir_start() */
|
||||||
saa_setb(SAA7134_GPIO_GPMODE0, 0x4);
|
|
||||||
saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
|
|
||||||
break;
|
break;
|
||||||
case SAA7134_BOARD_AVERMEDIA_M135A:
|
case SAA7134_BOARD_AVERMEDIA_M135A:
|
||||||
ir_codes = RC_MAP_AVERMEDIA_M135A;
|
ir_codes = RC_MAP_AVERMEDIA_M135A;
|
||||||
|
@ -572,18 +605,14 @@ int saa7134_input_init1(struct saa7134_dev *dev)
|
||||||
mask_keycode = 0x02F200;
|
mask_keycode = 0x02F200;
|
||||||
mask_keydown = 0x000400;
|
mask_keydown = 0x000400;
|
||||||
polling = 50; // ms
|
polling = 50; // ms
|
||||||
/* Without this we won't receive key up events */
|
/* GPIO stuff moved to __saa7134_ir_start() */
|
||||||
saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
|
|
||||||
saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
|
|
||||||
break;
|
break;
|
||||||
case SAA7134_BOARD_AVERMEDIA_A16D:
|
case SAA7134_BOARD_AVERMEDIA_A16D:
|
||||||
ir_codes = RC_MAP_AVERMEDIA_A16D;
|
ir_codes = RC_MAP_AVERMEDIA_A16D;
|
||||||
mask_keycode = 0x02F200;
|
mask_keycode = 0x02F200;
|
||||||
mask_keydown = 0x000400;
|
mask_keydown = 0x000400;
|
||||||
polling = 50; /* ms */
|
polling = 50; /* ms */
|
||||||
/* Without this we won't receive key up events */
|
/* GPIO stuff moved to __saa7134_ir_start() */
|
||||||
saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
|
|
||||||
saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
|
|
||||||
break;
|
break;
|
||||||
case SAA7134_BOARD_KWORLD_TERMINATOR:
|
case SAA7134_BOARD_KWORLD_TERMINATOR:
|
||||||
ir_codes = RC_MAP_PIXELVIEW;
|
ir_codes = RC_MAP_PIXELVIEW;
|
||||||
|
@ -635,7 +664,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
|
||||||
mask_keycode = 0x0003CC;
|
mask_keycode = 0x0003CC;
|
||||||
mask_keydown = 0x000010;
|
mask_keydown = 0x000010;
|
||||||
polling = 5; /* ms */
|
polling = 5; /* ms */
|
||||||
saa_setb(SAA7134_GPIO_GPMODE1, 0x80);
|
/* GPIO stuff moved to __saa7134_ir_start() */
|
||||||
break;
|
break;
|
||||||
case SAA7134_BOARD_VIDEOMATE_TV_PVR:
|
case SAA7134_BOARD_VIDEOMATE_TV_PVR:
|
||||||
case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS:
|
case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче