Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelv...
[pandora-kernel.git] / drivers / media / video / hdpvr / hdpvr-core.c
index 0cae5b8..b70d6af 100644 (file)
@@ -60,6 +60,7 @@ static struct usb_device_id hdpvr_table[] = {
        { USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID1) },
        { USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID2) },
        { USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID3) },
+       { USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID4) },
        { }                                     /* Terminating entry */
 };
 MODULE_DEVICE_TABLE(usb, hdpvr_table);
@@ -152,19 +153,26 @@ static int device_authorization(struct hdpvr_device *dev)
                         ret, print_buf);
        }
 #endif
-       if (dev->usbc_buf[1] == HDPVR_FIRMWARE_VERSION) {
+
+       v4l2_info(&dev->v4l2_dev, "firmware version 0x%x dated %s\n",
+                         dev->usbc_buf[1], &dev->usbc_buf[2]);
+
+       switch (dev->usbc_buf[1]) {
+       case HDPVR_FIRMWARE_VERSION:
                dev->flags &= ~HDPVR_FLAG_AC3_CAP;
-       } else if (dev->usbc_buf[1] == HDPVR_FIRMWARE_VERSION_AC3) {
-               dev->flags |= HDPVR_FLAG_AC3_CAP;
-       } else if (dev->usbc_buf[1] > HDPVR_FIRMWARE_VERSION_AC3) {
-               v4l2_info(&dev->v4l2_dev, "untested firmware version 0x%x, "
-                         "the driver might not work\n", dev->usbc_buf[1]);
+               break;
+       case HDPVR_FIRMWARE_VERSION_AC3:
+       case HDPVR_FIRMWARE_VERSION_0X12:
+       case HDPVR_FIRMWARE_VERSION_0X15:
                dev->flags |= HDPVR_FLAG_AC3_CAP;
-       } else {
-               v4l2_err(&dev->v4l2_dev, "unknown firmware version 0x%x\n",
-                       dev->usbc_buf[1]);
-               ret = -EINVAL;
-               goto unlock;
+               break;
+       default:
+               v4l2_info(&dev->v4l2_dev, "untested firmware, the driver might"
+                         " not work.\n");
+               if (dev->usbc_buf[1] >= HDPVR_FIRMWARE_VERSION_AC3)
+                       dev->flags |= HDPVR_FLAG_AC3_CAP;
+               else
+                       dev->flags &= ~HDPVR_FLAG_AC3_CAP;
        }
 
        response = dev->usbc_buf+38;
@@ -319,8 +327,12 @@ static int hdpvr_probe(struct usb_interface *interface,
        if (default_video_input < HDPVR_VIDEO_INPUTS)
                dev->options.video_input = default_video_input;
 
-       if (default_audio_input < HDPVR_AUDIO_INPUTS)
+       if (default_audio_input < HDPVR_AUDIO_INPUTS) {
                dev->options.audio_input = default_audio_input;
+               if (default_audio_input == HDPVR_SPDIF)
+                       dev->options.audio_codec =
+                               V4L2_MPEG_AUDIO_ENCODING_AC3;
+       }
 
        dev->udev = usb_get_dev(interface_to_usbdev(interface));