diff options
author | Devin Heitmueller <dheitmueller@kernellabs.com> | 2009-05-14 20:50:36 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-06-16 17:21:08 -0400 |
commit | b8d91986e60e5e15a5283935a99ef86650744a46 (patch) | |
tree | 089a71921af05d1ca0eb74ee8eb690c153cb66a4 /drivers/media/video/cx88/cx88-cards.c | |
parent | e80858e88b2c9c20de849c67ac2804218a25aaa3 (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/cx88-cards.c')
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 20 |
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 " |