aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Solomin <vadic052@gmail.com>2011-03-06 11:00:38 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-03-22 15:37:53 -0400
commit8c1476ffc0b820f6ca8cc0b3f50c8a0f57e8d82d (patch)
treedce8b4f36f6f4424b6fcd55ee37ed3b135a01f63
parentbc4b18c6f536de3733e247b07adcc9ea3f5684dd (diff)
[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>
-rw-r--r--drivers/media/video/saa7134/saa7134-input.c49
1 files changed, 39 insertions, 10 deletions
diff --git a/drivers/media/video/saa7134/saa7134-input.c b/drivers/media/video/saa7134/saa7134-input.c
index c9eff0336aa6..790d66703fea 100644
--- a/drivers/media/video/saa7134/saa7134-input.c
+++ b/drivers/media/video/saa7134/saa7134-input.c
@@ -414,6 +414,41 @@ static int __saa7134_ir_start(void *priv)
414 if (ir->running) 414 if (ir->running)
415 return 0; 415 return 0;
416 416
417 /* Moved here from saa7134_input_init1() because the latter
418 * is not called on device resume */
419 switch (dev->board) {
420 case SAA7134_BOARD_MD2819:
421 case SAA7134_BOARD_KWORLD_VSTREAM_XPERT:
422 case SAA7134_BOARD_AVERMEDIA_305:
423 case SAA7134_BOARD_AVERMEDIA_307:
424 case SAA7134_BOARD_AVERMEDIA_STUDIO_305:
425 case SAA7134_BOARD_AVERMEDIA_STUDIO_505:
426 case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
427 case SAA7134_BOARD_AVERMEDIA_STUDIO_507:
428 case SAA7134_BOARD_AVERMEDIA_STUDIO_507UA:
429 case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
430 case SAA7134_BOARD_AVERMEDIA_M102:
431 case SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS:
432 /* Without this we won't receive key up events */
433 saa_setb(SAA7134_GPIO_GPMODE0, 0x4);
434 saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
435 break;
436 case SAA7134_BOARD_AVERMEDIA_777:
437 case SAA7134_BOARD_AVERMEDIA_A16AR:
438 /* Without this we won't receive key up events */
439 saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
440 saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
441 break;
442 case SAA7134_BOARD_AVERMEDIA_A16D:
443 /* Without this we won't receive key up events */
444 saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
445 saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
446 break;
447 case SAA7134_BOARD_GOTVIEW_7135:
448 saa_setb(SAA7134_GPIO_GPMODE1, 0x80);
449 break;
450 }
451
417 ir->running = true; 452 ir->running = true;
418 ir->active = false; 453 ir->active = false;
419 454
@@ -548,9 +583,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
548 mask_keycode = 0x0007C8; 583 mask_keycode = 0x0007C8;
549 mask_keydown = 0x000010; 584 mask_keydown = 0x000010;
550 polling = 50; // ms 585 polling = 50; // ms
551 /* Set GPIO pin2 to high to enable the IR controller */ 586 /* GPIO stuff moved to __saa7134_ir_start() */
552 saa_setb(SAA7134_GPIO_GPMODE0, 0x4);
553 saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
554 break; 587 break;
555 case SAA7134_BOARD_AVERMEDIA_M135A: 588 case SAA7134_BOARD_AVERMEDIA_M135A:
556 ir_codes = RC_MAP_AVERMEDIA_M135A; 589 ir_codes = RC_MAP_AVERMEDIA_M135A;
@@ -572,18 +605,14 @@ int saa7134_input_init1(struct saa7134_dev *dev)
572 mask_keycode = 0x02F200; 605 mask_keycode = 0x02F200;
573 mask_keydown = 0x000400; 606 mask_keydown = 0x000400;
574 polling = 50; // ms 607 polling = 50; // ms
575 /* Without this we won't receive key up events */ 608 /* GPIO stuff moved to __saa7134_ir_start() */
576 saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
577 saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
578 break; 609 break;
579 case SAA7134_BOARD_AVERMEDIA_A16D: 610 case SAA7134_BOARD_AVERMEDIA_A16D:
580 ir_codes = RC_MAP_AVERMEDIA_A16D; 611 ir_codes = RC_MAP_AVERMEDIA_A16D;
581 mask_keycode = 0x02F200; 612 mask_keycode = 0x02F200;
582 mask_keydown = 0x000400; 613 mask_keydown = 0x000400;
583 polling = 50; /* ms */ 614 polling = 50; /* ms */
584 /* Without this we won't receive key up events */ 615 /* GPIO stuff moved to __saa7134_ir_start() */
585 saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
586 saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
587 break; 616 break;
588 case SAA7134_BOARD_KWORLD_TERMINATOR: 617 case SAA7134_BOARD_KWORLD_TERMINATOR:
589 ir_codes = RC_MAP_PIXELVIEW; 618 ir_codes = RC_MAP_PIXELVIEW;
@@ -635,7 +664,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
635 mask_keycode = 0x0003CC; 664 mask_keycode = 0x0003CC;
636 mask_keydown = 0x000010; 665 mask_keydown = 0x000010;
637 polling = 5; /* ms */ 666 polling = 5; /* ms */
638 saa_setb(SAA7134_GPIO_GPMODE1, 0x80); 667 /* GPIO stuff moved to __saa7134_ir_start() */
639 break; 668 break;
640 case SAA7134_BOARD_VIDEOMATE_TV_PVR: 669 case SAA7134_BOARD_VIDEOMATE_TV_PVR:
641 case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS: 670 case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS: