Bläddra i källkod

V4L/DVB (6969): Avoid causing regressions for non-HVR950 boards

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>
Mauro Carvalho Chehab 17 år sedan
förälder
incheckning
a4950134d4
1 ändrade filer med 19 tillägg och 15 borttagningar
  1. 19 15
      drivers/media/video/em28xx/em28xx-cards.c

+ 19 - 15
drivers/media/video/em28xx/em28xx-cards.c

@@ -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;
 	}
 	}