Hauppauge WinTV-HVR-950Q
A hybrid ATSC USB 2.0 device by Hauppauge.
The digital side of the device is supported under Linux since kernel 2.6.26. Analog support was merged into the mainline v4l-dvb tree on March 18, 2009.
Overview/Features
The device supports NTSC, 8-VSB and QAM.
Components Used
- Xceive XC5000 (tuner and analog demodulator)
- Auvitek AU8522 (A/V decoder analog demodulator [not used], and digital demodulator)
- Auvitek AU0828 (USB bridge)
Identification
This descriptor is from a unit packaged as a "WinTV HVR 950Q, model 1176", which is shipped with the A/V cables and toy-sized antenna and a remote:
lsusb -v Bus 001 Device 022: ID 2040:7200 Hauppauge Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x2040 Hauppauge idProduct 0x7200 bcdDevice 0.05 iManufacturer 1 iProduct 2 iSerial 10 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 267 bNumInterfaces 4 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0000 1x 0 bytes bInterval 5 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0000 1x 0 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 1 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0002 1x 2 bytes bInterval 5 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0300 1x 768 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 2 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0002 1x 2 bytes bInterval 5 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x03fc 1x 1020 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 3 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0002 1x 2 bytes bInterval 5 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0400 1x 1024 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 4 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0002 1x 2 bytes bInterval 5 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0c00 2x 1024 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 5 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0002 1x 2 bytes bInterval 5 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x1400 3x 1024 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 1 Control Device bInterfaceProtocol 0 iInterface 11 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 1 (HEADER) bcdADC 1.00 wTotalLength 38 bInCollection 1 baInterfaceNr( 0) 2 AudioControl Interface Descriptor: bLength 12 bDescriptorType 36 bDescriptorSubtype 2 (INPUT_TERMINAL) bTerminalID 1 wTerminalType 0x0602 Digital Audio Interface bAssocTerminal 0 bNrChannels 2 wChannelConfig 0x0003 Left Front (L) Right Front (R) iChannelNames 0 iTerminal 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 3 (OUTPUT_TERMINAL) bTerminalID 2 wTerminalType 0x0101 USB Streaming bAssocTerminal 0 bSourceID 3 iTerminal 0 AudioControl Interface Descriptor: bLength 8 bDescriptorType 36 bDescriptorSubtype 6 (FEATURE_UNIT) bUnitID 3 bSourceID 1 bControlSize 1 bmaControls( 0) 0x01 Mute iFeature 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 11 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 5 Transfer Type Isochronous Synch Type Asynchronous Usage Type Data wMaxPacketSize 0x0000 1x 0 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 11 AudioStreaming Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 1 (AS_GENERAL) bTerminalLink 2 bDelay 1 frames wFormatTag 1 PCM AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 2 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 48000 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 5 Transfer Type Isochronous Synch Type Asynchronous Usage Type Data wMaxPacketSize 0x0100 1x 256 bytes bInterval 4 AudioControl Endpoint Descriptor: bLength 7 bDescriptorType 37 bDescriptorSubtype 1 (EP_GENERAL) bmAttributes 0x00 bLockDelayUnits 0 Undefined wLockDelay 0 Undefined Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 3 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 bNumConfigurations 1 Device Status: 0x0000 (Bus Powered)
Making it Work
Firmware
In order to use the LinuxTV driver, you need to download and install the firmware for the xc5000.
Note: The firmware is now bundled with Ubuntu 9.10 (Karmic), so users of that distro/version and newer do not need the following steps.
wget http://www.steventoth.net/linux/xc5000/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip wget http://www.steventoth.net/linux/xc5000/extract.sh sh extract.sh cp dvb-fe-xc5000-1.1.fw /lib/firmware
The firmware will be added lazily (on-demand) when you first use the driver.
Kernel 2.6.31 firmware issues
Kernel 2.6.31 requires dvb-fe-xc5000-1.6.114.fw firmware from here: [1] (to be saved as /lib/firmware/dvb-fe-xc5000-1.6.114.fw).
When running this kernel version, loading of the firmware takes very long, and prevents MythTV from working properly. To deal with this problem you can use xc5000's no_poweroff=1 module option, to prevent the device from sleeping (after which firmware has to be reloaded)
Drivers
The xc5000 driver needed for this WinTV-HVR-950Q is already part of the latest Linux kernel (part of v4l-dvb drivers).
Analog support was merged into the mainline v4l-dvb tree on March 18, 2009.
Sample Kernel Output
After you plug-in the device on a USB 2.0 port (it won't work with a USB 1.1) and use the driver for the first time (eg, by scanning channels), you may see something like this on dmesg:
usb 1-3: new high speed USB device using ehci_hcd and address 3 usb 1-3: configuration #1 chosen from 1 choice au0828: i2c bus registered tveeprom 0-0050: Hauppauge model 72001, rev B3F0, serial# 5280879 tveeprom 0-0050: MAC address is 00-0D-FE-XX-XX-XX tveeprom 0-0050: tuner model is Xceive XC5000 (idx 150, type 4) tveeprom 0-0050: TV standards NTSC(M) ATSC/DVB Digital (eeprom 0x88) tveeprom 0-0050: audio processor is AU8522 (idx 44) tveeprom 0-0050: decoder processor is AU8522 (idx 42) tveeprom 0-0050: has no radio, has IR receiver, has no IR transmitter hauppauge_eeprom: hauppauge eeprom: model=72001 xc5000 0-0061: creating new instance xc5000: Successfully identified at address 0x61 xc5000: Firmware has not been loaded previously DVB: registering new adapter (au0828) DVB: registering adapter 0 frontend 0 (Auvitek AU8522 QAM/8VSB Frontend)... Registered device AU0828 [Hauppauge HVR950Q] usb 1-3: New USB device found, idVendor=2040, idProduct=7200 usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=10 usb 1-3: Product: WinTV HVR-950 usb 1-3: Manufacturer: Hauppauge usb 1-3: SerialNumber: 000000000
After an application open the device the first time, the module will load the firmware. You will see:
xc5000: waiting for firmware upload (dvb-fe-xc5000-1.1.fw)... i2c-adapter i2c-2: firmware: requesting dvb-fe-xc5000-1.1.fw xc5000: firmware read 12332 bytes. xc5000: firmware upload
Analog Audio
To have analog audio in tvtime I am using following bash script to start the tvtime (There are two versions of SOX command - for OSS and for Alsa):
#!/bin/sh tvtime &>/dev/null & tPID=$! echo "Started TVTime, PID: $tPID" sleep 1 # For OSS: # sox -r 48000 -b 16 -c 2 -t ossdsp /dev/dsp1 -t ossdsp /dev/dsp &>/dev/null & # For Alsa: sox -t alsa hw:1,0 -t alsa hw:0,0 &>/dev/null & sPID=$! echo "Started SOX, PID: $sPID" while true; do sleep 1 tRUN=$( ps -p $tPID -o pid --no-headers ) sRUN=$( ps -p $sPID -o pid --no-headers ) if [ "$tRUN" = "" ]; then echo "TVTime exited. Closing SOX and exiting." kill $sPID exit fi if [ "$sRUN" = "" ]; then echo "SOX exited. Closing TVTime and exiting." kill $tPID exit fi done