Linux: Sundtek MediaTV Digital Home DVB-C stick without closed-source drivers
Update 2017-05-04: The first version of this article was about the Sundtek MediaTV Pro stick. After browsing through my mails from 2010, I just found out that my device isn’t actually a Sundtek MediaTV Pro, but a Sundtek MediaTV Digital Home. I corrected the article accordingly and apologize for any confusion.
Some years ago I bought a Sundtek MediaTV Digital Home stick (first generation) that can be used to tune to DVB-C channels. Unfortunately the stick isn’t recognized immediately by the Linux kernel, and you have to install a [closed source driver] that does most of the heavy lifting in userspace:
$ lsusb
Bus 001 Device 107: ID eb1a:51b2 eMPIA Technology, Inc.
$ dmesg
usb 1-3: new high-speed USB device number 107 using xhci_hcd
usb 1-3: New USB device found, idVendor=eb1a, idProduct=51b2
usb 1-3: New USB device strings: Mfr=2, Product=1, SerialNumber=3
usb 1-3: Product: MediaTV Digi9cXXXXXX
usb 1-3: Manufacturer: Sundtek
usb 1-3: SerialNumber:
Today I found out that the device seems to be a rebranded MaxMedia UB425-TC with a different USB ID. If you take the device apart and look at the soldered ICs, you’ll notice that it uses the same components as the MaxMedia UB425-TC:
- Empia EM2874B
- Micronas DRX 3913KA2
- NXP TDA18271HDC2
The MaxMedia UB425-TC is supported by the em28xx
kernel module since version 3.4. I’ve found a way to use the Sundtek stick with the existing module without any closed source driver:
-
Grab the device firmware from the OpenELEC project and place it in
/lib/firmware
-
Load the
em28xx
module and force card to 84 (MaxMedia UB425-TC):$ sudo modprobe em28xx card=84
-
Register the Sundtek USB vendor and product ID with the
em28xx
module:$ echo eb1a 51b2 | sudo tee /sys/bus/usb/drivers/em28xx/new_id
Afterwards, the device is recognized by the kernel, and you can tune to DVB-C channels:
usb 1-6: new high-speed USB device number 112 using xhci_hcd
usb 1-6: New USB device found, idVendor=eb1a, idProduct=51b2
usb 1-6: New USB device strings: Mfr=2, Product=1, SerialNumber=3
usb 1-6: Product: MediaTV Digi9cXXXXXX
usb 1-6: Manufacturer: Sundtek
usb 1-6: SerialNumber:
em28xx: New device Sundtek MediaTV Digi9cXXXXXX @ 480 Mbps (eb1a:51b2, interface 0, class 0)
em28xx: DVB interface 0 found: bulk
em28xx: chip ID is em2874
em2874 #0: EEPROM ID = 26 00 01 00, EEPROM hash = 0x260095b9
em2874 #0: EEPROM info:
em2874 #0: microcode start address = 0x0004, boot configuration = 0x01
em2874 #0: I2S audio, 5 sample rates
em2874 #0: 500mA max power
em2874 #0: Table at offset 0x36, strings=0x2a7a, 0x106a, 0x12a4
em2874 #0: Identified as MaxMedia UB425-TC (card=84)
em2874 #0: dvb set to bulk mode.
em2874 #0: Binding DVB extension
drxk: status = 0x439130d9
drxk: detected a drx-3913k, spin A2, xtal 20.250 MHz
drxk: DRXK driver version 0.9.4300
drxk: frontend initialized.
tda18271 9-0060: creating new instance
TDA18271HD/C2 detected @ 9-0060
DVB: registering new adapter (em2874 #0)
usb 1-6: DVB: registering adapter 0 frontend 0 (DRXK DVB-C DVB-T)...
em2874 #0: DVB extension successfully initialized
em28xx: Registered (Em28xx dvb Extension) extension
em2874 #0: Registering input extension
Registered IR keymap rc-reddo
input: em28xx IR (em2874 #0) as /devices/pci0000:00/0000:00:14.0/usb1/1-6/rc/rc0/input436
rc0: em28xx IR (em2874 #0) as /devices/pci0000:00/0000:00:14.0/usb1/1-6/rc/rc0
em2874 #0: Input extension successfully initalized
em28xx: Registered (Em28xx Input Extension) extension
I didn’t try the other modes of the stick (DVB-T, FM radio, analog TV), but I suspect they won’t work. Have fun!