[media] em28xx: fix GPIO problem with HVR-900R2 getting out of sync with drx-d
authorDevin Heitmueller <dheitmueller@kernellabs.com>
Sun, 13 Mar 2011 05:04:53 +0000 (02:04 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 20 May 2011 10:26:20 +0000 (07:26 -0300)
The em28xx bridge strobes the reset pin on the drx-d on every ts_ctrl call.
This results in the state of the chip getting out of the sync with the
state of the driver (and hence all tuning requests after the first one fail).

Make sure the drx-d is not being held in reset, but don't actually perform a
hardware reset on the chip.

The GPIO block has been split out from the other HVR-9x0 variants to reduce
the risk of regression, although in theory they would not have any issues
since none of those cases have the frontend driver managing any internal
state.

Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/em28xx/em28xx-cards.c

index 5bdecb3..b4c322d 100644 (file)
@@ -100,6 +100,13 @@ static struct em28xx_reg_seq hauppauge_wintv_hvr_900_digital[] = {
        { -1,                   -1,     -1,             -1},
 };
 
+/* Board Hauppauge WinTV HVR 900 (R2) digital */
+static struct em28xx_reg_seq hauppauge_wintv_hvr_900R2_digital[] = {
+       {EM28XX_R08_GPIO,       0x2e,   ~EM_GPIO_4,     10},
+       {EM2880_R04_GPO,        0x0c,   0x0f,           10},
+       { -1,                   -1,     -1,             -1},
+};
+
 /* Boards - EM2880 MSI DIGIVOX AD and EM2880_BOARD_MSI_DIGIVOX_AD_II */
 static struct em28xx_reg_seq em2880_msi_digivox_ad_analog[] = {
        {EM28XX_R08_GPIO,       0x69,   ~EM_GPIO_4,      10},
@@ -860,7 +867,7 @@ struct em28xx_board em28xx_boards[] = {
                .tuner_gpio   = default_tuner_gpio,
                .mts_firmware = 1,
                .has_dvb      = 1,
-               .dvb_gpio     = hauppauge_wintv_hvr_900_digital,
+               .dvb_gpio     = hauppauge_wintv_hvr_900R2_digital,
                .ir_codes     = RC_MAP_HAUPPAUGE,
                .decoder      = EM28XX_TVP5150,
                .input        = { {