V4L/DVB (7020): Add USB ID for a newer variant of Hauppauge WinTV USB2
[powerpc.git] / drivers / media / video / em28xx / em28xx-cards.c
index 1011813..fe0ee45 100644 (file)
@@ -419,6 +419,8 @@ struct usb_device_id em28xx_id_table [] = {
                        .driver_info = EM2820_BOARD_PINNACLE_USB_2 },
        { USB_DEVICE(0x2040, 0x4200),
                        .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 },
+       { USB_DEVICE(0x2040, 0x4201),
+                       .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 },
        { USB_DEVICE(0x2304, 0x0207),
                        .driver_info = EM2820_BOARD_PINNACLE_DVC_90 },
        { USB_DEVICE(0x2304, 0x021a),
@@ -485,27 +487,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;
        }
        }