V4L/DVB (6969): Avoid causing regressions for non-HVR950 boards
authorMauro Carvalho Chehab <mchehab@infradead.org>
Sun, 6 Jan 2008 12:45:44 +0000 (09:45 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Fri, 25 Jan 2008 21:04:39 +0000 (19:04 -0200)
Only HVR950 has analog_gpio configured. It makes no sense to set gpio to 0 for
other boards. Better to add a test, while this var is not set for all xc3028
devices.

Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/em28xx/em28xx-cards.c

index 1011813..5ffdbaa 100644 (file)
@@ -485,27 +485,31 @@ static int em28xx_tuner_callback(void *ptr, int command, int arg)
        switch (command) {
        case XC2028_TUNER_RESET:
        {
-               char gpio0, gpio1, gpio4;
-
-               /* GPIO and initialization codes for analog TV */
-               gpio0 = dev->analog_gpio & 0xff;
-               gpio1 = (dev->analog_gpio >> 8) & 0xff;
-               gpio4 = dev->analog_gpio >> 24;
+               /* GPIO and initialization codes for analog TV and radio
+                  This code should be complemented for DTV, since reset
+                  codes are different.
+                */
 
                dev->em28xx_write_regs_req(dev, 0x00, 0x48, "\x00", 1);
                dev->em28xx_write_regs_req(dev, 0x00, 0x12, "\x67", 1);
 
-               if (gpio4) {
-                       dev->em28xx_write_regs(dev, 0x04, &gpio4, 1);
-                       msleep(140);
+               if (dev->analog_gpio) {
+                       char gpio0 = dev->analog_gpio & 0xff;
+                       char gpio1 = (dev->analog_gpio >> 8) & 0xff;
+                       char gpio4 = dev->analog_gpio >> 24;
+
+                       if (gpio4) {
+                               dev->em28xx_write_regs(dev, 0x04, &gpio4, 1);
+                               msleep(140);
+                       }
+
+                       msleep(6);
+                       dev->em28xx_write_regs(dev, 0x08, &gpio0, 1);
+                       msleep(10);
+                       dev->em28xx_write_regs(dev, 0x08, &gpio1, 1);
+                       msleep(5);
                }
 
-               msleep(6);
-               dev->em28xx_write_regs(dev, 0x08, &gpio0, 1);
-               msleep(10);
-               dev->em28xx_write_regs(dev, 0x08, &gpio1, 1);
-               msleep(5);
-
                break;
        }
        }