aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88
diff options
context:
space:
mode:
authorDevin Heitmueller <dheitmueller@kernellabs.com>2009-05-14 20:50:36 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-06-16 17:21:08 -0400
commitb8d91986e60e5e15a5283935a99ef86650744a46 (patch)
tree089a71921af05d1ca0eb74ee8eb690c153cb66a4 /drivers/media/video/cx88
parente80858e88b2c9c20de849c67ac2804218a25aaa3 (diff)
V4L/DVB (11807): cx88: remove xc5000 reset for Pinnacle 800i
According to the engineer at PCTV Systems, the xc5000 reset pin is supposed to be on GPIO12. However, despite three nights of effort, pulling that GPIO low didn't reset the xc5000. While pulling MO_SRST_IO low does reset the xc5000, this also resets in the s5h1409 being reset as well. This causes tuning to always fail since the internal state of the s5h1409 does not match the driver's state. Given that the only two conditions in which the driver performs a reset is during firmware load and powering down the chip, I am taking out the reset. We know that the chip is being reset when the cx88 comes online, and not being able to do power management for this board is better than not having any tuning at all. Problem discovered when implementing proper power management for the xc5000, which results in calls to the reset callback *after* s5h1409 is initialized. Cc: Steven Toth <stoth@kernellabs.com> Cc: Chaogui Zhang <czhang1974@gmail.com> Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx88')
-rw-r--r--drivers/media/video/cx88/cx88-cards.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index 1039757e2c4e..d2aa27e90ac5 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -2702,10 +2702,22 @@ static int cx88_xc5000_tuner_callback(struct cx88_core *core,
2702 switch (core->boardnr) { 2702 switch (core->boardnr) {
2703 case CX88_BOARD_PINNACLE_PCTV_HD_800i: 2703 case CX88_BOARD_PINNACLE_PCTV_HD_800i:
2704 if (command == 0) { /* This is the reset command from xc5000 */ 2704 if (command == 0) { /* This is the reset command from xc5000 */
2705 /* Reset XC5000 tuner via SYS_RSTO_pin */ 2705
2706 cx_write(MO_SRST_IO, 0); 2706 /* djh - According to the engineer at PCTV Systems,
2707 msleep(10); 2707 the xc5000 reset pin is supposed to be on GPIO12.
2708 cx_write(MO_SRST_IO, 1); 2708 However, despite three nights of effort, pulling
2709 that GPIO low didn't reset the xc5000. While
2710 pulling MO_SRST_IO low does reset the xc5000, this
2711 also resets in the s5h1409 being reset as well.
2712 This causes tuning to always fail since the internal
2713 state of the s5h1409 does not match the driver's
2714 state. Given that the only two conditions in which
2715 the driver performs a reset is during firmware load
2716 and powering down the chip, I am taking out the
2717 reset. We know that the chip is being reset
2718 when the cx88 comes online, and not being able to
2719 do power management for this board is worse than
2720 not having any tuning at all. */
2709 return 0; 2721 return 0;
2710 } else { 2722 } else {
2711 err_printk(core, "xc5000: unknown tuner " 2723 err_printk(core, "xc5000: unknown tuner "