mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-15 09:36:42 +07:00
[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:
parent
bc4b18c6f5
commit
8c1476ffc0
@ -414,6 +414,41 @@ static int __saa7134_ir_start(void *priv)
|
||||
if (ir->running)
|
||||
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->active = false;
|
||||
|
||||
@ -548,9 +583,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
|
||||
mask_keycode = 0x0007C8;
|
||||
mask_keydown = 0x000010;
|
||||
polling = 50; // ms
|
||||
/* Set GPIO pin2 to high to enable the IR controller */
|
||||
saa_setb(SAA7134_GPIO_GPMODE0, 0x4);
|
||||
saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
|
||||
/* GPIO stuff moved to __saa7134_ir_start() */
|
||||
break;
|
||||
case SAA7134_BOARD_AVERMEDIA_M135A:
|
||||
ir_codes = RC_MAP_AVERMEDIA_M135A;
|
||||
@ -572,18 +605,14 @@ int saa7134_input_init1(struct saa7134_dev *dev)
|
||||
mask_keycode = 0x02F200;
|
||||
mask_keydown = 0x000400;
|
||||
polling = 50; // ms
|
||||
/* Without this we won't receive key up events */
|
||||
saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
|
||||
saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
|
||||
/* GPIO stuff moved to __saa7134_ir_start() */
|
||||
break;
|
||||
case SAA7134_BOARD_AVERMEDIA_A16D:
|
||||
ir_codes = RC_MAP_AVERMEDIA_A16D;
|
||||
mask_keycode = 0x02F200;
|
||||
mask_keydown = 0x000400;
|
||||
polling = 50; /* ms */
|
||||
/* Without this we won't receive key up events */
|
||||
saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
|
||||
saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
|
||||
/* GPIO stuff moved to __saa7134_ir_start() */
|
||||
break;
|
||||
case SAA7134_BOARD_KWORLD_TERMINATOR:
|
||||
ir_codes = RC_MAP_PIXELVIEW;
|
||||
@ -635,7 +664,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
|
||||
mask_keycode = 0x0003CC;
|
||||
mask_keydown = 0x000010;
|
||||
polling = 5; /* ms */
|
||||
saa_setb(SAA7134_GPIO_GPMODE1, 0x80);
|
||||
/* GPIO stuff moved to __saa7134_ir_start() */
|
||||
break;
|
||||
case SAA7134_BOARD_VIDEOMATE_TV_PVR:
|
||||
case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS:
|
||||
|
Loading…
Reference in New Issue
Block a user