EVGA inDtube: Difference between revisions
Line 181: | Line 181: | ||
</pre> |
</pre> |
||
Alternatively, we can modify Samsung Frontend s5h1409.c code prior to compiling to do the frequency shift for us in kernel |
Alternatively, we can modify Samsung Frontend s5h1409.c code prior to compiling kernel to do the frequency shift for us in kernel |
||
instead of in user land. |
instead of in user land. |
||
Revision as of 21:41, 28 December 2012
A hybrid ATSC USB 2.0 device by Evga.
Overview/Features
This device supports ATSC (i.e. OTA Digital TV) and analog NTSC. The package includes a small telescoping monopole antenna and a short USB extension cable, a remote control, and a connector to svideo or composite video inputs.
Components used:
- Samsung S5H1409 QAM/8VSB Frontend
Xceive XC3028L
- (digital demodulator)
- (video decoder)
- Empiatech em2883 (USB bridge and analog audio)
Identification
The device identifies itself as a "eMPIA Technology, Inc" and the subsystem information provided by lsusb -v is ebla:2883.
Making it Work
This tuner is very difficult to get to find channels when scanning OTA ATSC. There is a thread about getting it to work which assuming you are familiar with the concept of frequency lists, as defined in /usr/share/dvb/atsc is very helpful at http://www.digitalhome.ca/forum/showthread.php?t=134023
You will need to modify the standard ATSC frequency list which has the wrong center frequencies for this tuner. Using vim or your favorite text editor modify the center frequencies in the intial-tuning-data contained in the text file /usr/share/dvb/us-ATSC-center-frequencies-8VSB and save it in /usr/share/dvb/atsc as my-ATSC. You need to subtract roughly 400 Khz from each center frequency. I subtracted 403615 Hz from each frequency so it falls in the exact center of what the InDtube Tuner can lock. From then on be sure to specify this file when scanning for channels with scan:
Scanning for channels.
scan -a 1 /usr/share/dvb/atsc/my-ATSC -o zap mychannels.conf
example initial-tuning-data modificaton
from: /usr/share/dvb/atsc$ head us-ATSC-center-frequencies-8VSB # US ATSC center frequencies, use if in doubt A 57028615 8VSB A 63028615 8VSB A 69028615 8VSB A 79028615 8VSB A 85028615 8VSB A 177028615 8VSB A 183028615 8VSB A 189028615 8VSB to: /usr/share/dvb/atsc$ head my-ATSC # MY ATSC center frequencies, use for inDtube ATSC Tuner A 56625000 8VSB A 62625000 8VSB A 68625000 8VSB A 78625000 8VSB A 84625000 8VSB A 176625000 8VSB A 182625000 8VSB A 188625000 8VSB A 194625000 8VSB
Firmware
type: xc2028 firmware, ver 3.6
Drivers
Analog Audio Issue
Sample kernel output
After you plug-in the device on a USB port, you should see something like this on dmesg:
usb 1-3: new high speed USB device using ehci_hcd and address 3 em28xx: New device EVGA inDtube @ 480 Mbps (eb1a:2883, interface 0, class 0) em28xx #0: chip ID is em2882/em2883 em28xx #0: i2c eeprom 00: 1a eb 67 95 1a eb 83 28 d0 12 65 03 6a 1c 86 10 em28xx #0: i2c eeprom 10: 00 00 24 57 4e 07 01 00 00 00 00 00 00 00 00 00 em28xx #0: i2c eeprom 20: 46 00 01 00 f0 10 01 00 b8 00 00 00 5b 32 00 00 em28xx #0: i2c eeprom 30: 00 00 20 40 20 80 02 20 01 01 00 00 00 00 00 00 em28xx #0: i2c eeprom 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 em28xx #0: i2c eeprom 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 em28xx #0: i2c eeprom 60: 00 00 00 00 00 00 00 00 00 00 1c 03 45 00 56 00 em28xx #0: i2c eeprom 70: 47 00 41 00 20 00 69 00 6e 00 44 00 74 00 75 00 em28xx #0: i2c eeprom 80: 62 00 65 00 00 00 10 03 44 00 54 00 30 00 30 00 em28xx #0: i2c eeprom 90: 30 00 31 00 00 00 00 00 00 00 00 00 38 00 39 00 em28xx #0: i2c eeprom a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 em28xx #0: i2c eeprom b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 em28xx #0: i2c eeprom c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 em28xx #0: i2c eeprom d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 em28xx #0: i2c eeprom e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 em28xx #0: i2c eeprom f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 em28xx #0: EEPROM ID= 0x9567eb1a, EEPROM hash = 0xcee44a99 em28xx #0: EEPROM info: em28xx #0: AC97 audio (5 sample rates) em28xx #0: 500mA max power em28xx #0: Table at 0x24, strings=0x1c6a, 0x1086, 0x0000 em28xx #0: Identified as Unknown EM2750/28xx video grabber (card=1) em28xx #0: Your board has no unique USB ID. em28xx #0: A hint were successfully done, based on eeprom hash. em28xx #0: This method is not 100% failproof. em28xx #0: If the board were missdetected, please email this log to: em28xx #0: V4L Mailing List <linux-media@vger.kernel.org> em28xx #0: Board detected as Evga inDtube tvp5150 0-005c: chip found @ 0xb8 (em28xx #0) tuner 0-0061: chip found @ 0xc2 (em28xx #0) xc2028 0-0061: creating new instance xc2028 0-0061: type set to XCeive xc2028/xc3028 tuner xc2028 0-0061: Loading 81 firmware images from xc3028L-v36.fw, type: xc2028 firmware, ver 3.6 xc2028 0-0061: Loading firmware for type=BASE MTS (5), id 0000000000000000. xc2028 0-0061: Loading firmware for type=MTS (4), id 000000000000b700. xc2028 0-0061: Loading SCODE for type=MTS LCD NOGD MONO IF SCODE HAS_IF_4500 (6002b004), id 000000000000b700. Registered IR keymap rc-evga-indtube input: em28xx IR (em28xx #0) as /devices/pci0000:00/0000:00:1a.7/usb1/1-3/rc/rc0/input9 rc0: em28xx IR (em28xx #0) as /devices/pci0000:00/0000:00:1a.7/usb1/1-3/rc/rc0 em28xx #0: Config register raw data: 0xd0 em28xx #0: AC97 vendor ID = 0xffffffff em28xx #0: AC97 features = 0x6a90 em28xx #0: Empia 202 AC97 audio processor detected tvp5150 0-005c: tvp5150am1 detected. em28xx #0: v4l2 driver version 0.1.2 em28xx #0: V4L2 video device registered as video0 em28xx #0: V4L2 VBI device registered as vbi0 em28xx-audio.c: probing for em28x1 non standard usbaudio em28xx-audio.c: Copyright (C) 2006 Markus Rechberger
Remote Control Support
So far have only been able to confirm that the volume control works.
MythTV Recognition
No issues noted in MythTV so far recognising the device, however you may wish to apply the below modifications to MythTV source prior to compiling in order to use the built in channel scanning function within MythTV, and to printout the correct values for the signal quality or SNR in the OSD.
//modification to frequencytables.cpp to allow the InDtube tuner to lock during channel scan #else // if !DEBUG_DVB_OFFSETS // USA Terrestrial (center frequency, subtract 1.75 MHz for visual carrier) // VHF 2-4 fmap["atsc_vsb8_us0"] = new FrequencyTable( // "ATSC Channel %1", 2, 57000000, 69000000, 6000000, "ATSC Channel %1", 2, 56625000, 68625000, 6000000, DTVModulation::kModulation8VSB); // VHF 5-6 fmap["atsc_vsb8_us1"] = new FrequencyTable( // "ATSC Channel %1", 5, 79000000, 85000000, 6000000, "ATSC Channel %1", 5, 78625000, 84625000, 6000000, DTVModulation::kModulation8VSB); // VHF 7-13 fmap["atsc_vsb8_us2"] = new FrequencyTable( // "ATSC Channel %1", 7, 177000000, 213000000, 6000000, "ATSC Channel %1", 7, 176625000, 212625000, 6000000, DTVModulation::kModulation8VSB); // UHF 14-69 fmap["atsc_vsb8_us3"] = new FrequencyTable( // "ATSC Channel %1", 14, 473000000, 803000000, 6000000, "ATSC Channel %1", 14, 472625000, 802625000, 6000000, DTVModulation::kModulation8VSB); #endif // !DEBUG_DVB_OFFSETS
//modification to tvplay.cpp to printout the signal quality or SNR correctly QString sigMsg = allGood ? tr("Lock") : lockMsg; QString sigDesc = tr("Signal %1\%").arg(sig,2); // Begin hack // // if (snr > 0.0f) // sigDesc += " | " + tr("S/N %1dB").arg(log10f(snr), 3, 'f', 1); if (snr > 0.0f) sigDesc += " | " + tr("S/N %1dB").arg((snr / 10), 3, 'f', 1); // End Hack // if (ber != 0xffffffff) sigDesc += " | " + tr("BE %1", "Bit Errors").arg(ber, 2);
Alternatively, we can modify Samsung Frontend s5h1409.c code prior to compiling kernel to do the frequency shift for us in kernel instead of in user land.
patched code for s5h1409.c
/* Talk to the demod, set the FEC, GUARD, QAM settings etc */ static int s5h1409_set_frontend(struct dvb_frontend *fe) { struct dtv_frontend_properties *p = &fe->dtv_property_cache; struct s5h1409_state *state = fe->demodulator_priv; /* Evga inDtube center freq hack, subtract 403615 Hz from center freq */ p->frequency = p->frequency - 403615; /* end hack */ dprintk("%s(frequency=%d)\n", __func__, p->frequency); s5h1409_softreset(fe); state->current_frequency = p->frequency; s5h1409_enable_modulation(fe, p->modulation); if (fe->ops.tuner_ops.set_params) { if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 1); fe->ops.tuner_ops.set_params(fe); if (fe->ops.i2c_gate_ctrl) fe->ops.i2c_gate_ctrl(fe, 0); } /* Issue a reset to the demod so it knows to resync against the newly tuned frequency */ s5h1409_softreset(fe);