TerraTec T6 Dual DVB-T Stick
Jump to navigation
Jump to search
It consists of
- Afatech AF9035B-N2 USB Interface with included AF9033 Demodulator
- Afatech AF9033B-N2 second Demodulator
- Fitipower FC0012 Tuner (2 off)
This device is currently not officially supported by Linux, however it is possible to get it working using a slightly patched version of the AF9035 driver as used in EzCap_DVB_T_Stick.
Instructions how to get the stick working
Follow the instruction to get the AF903x source code archive AF903x.tar.gz in EzCap_DVB_T_Stick.
I run kernel 3.0.1 and therefore I needed a few patched just to get the source code compiled (you may not need all of them, but they shouldn't hurt either).
--- a/src/af903x.h 2009-08-14 16:17:10.000000000 +0200 +++ b/src/af903x.h 2011-08-13 16:49:49.799506005 +0200 @@ -9,7 +9,6 @@ #include <linux/slab.h> #include <linux/module.h> #include <linux/kref.h> -#include <linux/smp_lock.h> #include <linux/usb.h> #include <asm/uaccess.h> #include "dvb-usb.h" --- a/src/userdef.h 2009-08-14 16:17:10.000000000 +0200 +++ b/src/userdef.h 2011-08-01 22:56:02.626583791 +0200 @@ -8,7 +8,9 @@ typedef int INT; // 4 bytes //typedef void * HANDLE; +#ifndef NULL #define NULL 0 +#endif #ifdef IN #undef IN --- a/api/type.h 2009-08-14 16:17:10.000000000 +0200 +++ b/api/type.h 2011-08-01 22:54:38.197342415 +0200 @@ -3,6 +3,15 @@ #include "userdef.h"// for Linux +#ifdef IN +#undef IN +#endif +#ifdef OUT +#undef OUT +#endif +#ifdef INOUT +#undef INOUT +#endif #define IN #define OUT #define INOUT --- a/api/usb2impl.c 2011-02-15 11:12:59.000000000 +0100 +++ b/api/usb2impl.c 2011-08-01 21:59:17.635389432 +0200 @@ -6,7 +6,6 @@ #include <linux/slab.h> #include <linux/module.h> #include <linux/kref.h> -#include <linux/smp_lock.h> #include <linux/usb.h> #include <asm/uaccess.h> #include <linux/device.h>
Then, here are some bug fixes to prevent deadlocks of the mutexes:
--- a/src/af903x-drv.c 2009-08-14 16:17:10.000000000 +0200 +++ b/src/af903x-drv.c 2011-08-12 21:26:10.610770606 +0200 @@ -1075,7 +1075,7 @@ DWORD DL_ApCtrl ( if(PDC->architecture != Architecture_PIP) { - if ( PDC->Demodulator.chipNumber == 2 && bOn) dwError = DL_NIMSuspend(PDC, false); + if ( PDC->Demodulator.chipNumber == 2 && bOn) dwError = DRV_NIMSuspend(PDC, false); for (i=0; i<PDC->Demodulator.chipNumber; i++) { @@ -1091,7 +1091,7 @@ DWORD DL_ApCtrl ( } } - if(PDC->Demodulator.chipNumber == 2 && !bOn) dwError = DL_NIMSuspend(PDC, true); + if(PDC->Demodulator.chipNumber == 2 && !bOn) dwError = DRV_NIMSuspend(PDC, true); } else { @@ -1100,7 +1100,7 @@ DWORD DL_ApCtrl ( PDC->fc[ucSlaveDemod].GraphBuilt = 1; if (PDC->fc[0].GraphBuilt == 0 || PDC->fc[1].GraphBuilt == 0) - dwError = DL_NIMSuspend(PDC, false); + dwError = DRV_NIMSuspend(PDC, false); dwError = DRV_ApCtrl (PDC, ucSlaveDemod, bOn); } @@ -1112,7 +1112,7 @@ DWORD DL_ApCtrl ( if (PDC->bTunerPowerOff != true) dwError = DRV_ApCtrl (PDC, ucSlaveDemod, bOn); if (PDC->fc[0].GraphBuilt == 0 && PDC->fc[1].GraphBuilt == 0 && PDC->bTunerPowerOff == true) - dwError = DL_NIMSuspend(PDC, true); + dwError = DRV_NIMSuspend(PDC, true); } }
And finally, the patches to support the TerraTec T6 Dual DVB-T stick:
--- a/src/af903x-devices.c 2009-08-14 16:17:10.000000000 +0200 +++ b/src/af903x-devices.c 2011-08-01 22:06:08.118919600 +0200 @@ -127,6 +127,7 @@ struct usb_device_id af903x_usb_id_table { USB_DEVICE(0x15A4,0x1002) }, { USB_DEVICE(0x15A4,0x1003) }, { USB_DEVICE(0x15A4,0x9035) }, + { USB_DEVICE(0x0ccd,0x10b3) }, /* Terratec T6 */ { 0}, /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, af903x_usb_id_table); @@ -156,7 +157,7 @@ struct dvb_usb_device_properties af903x_ } }, #else - .num_adapters = 1, + .num_adapters = 2, .adapter = { { .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF, @@ -198,13 +199,17 @@ struct dvb_usb_device_properties af903x_ }, }, #endif - .num_device_descs =1, + .num_device_descs =2, .devices = { { "ITEtech USB2.0 DVB-T Recevier", { &af903x_usb_id_table[0], &af903x_usb_id_table[1],&af903x_usb_id_table[2], &af903x_usb_id_table[3], &af903x_usb_id_table[4], NULL}, { NULL }, }, + { "Terratec T6", + { &af903x_usb_id_table[5], NULL}, + { NULL }, + }, {NULL}, } --- a/api/Fitipower_FC0012.c 2009-08-14 16:17:10.000000000 +0200 +++ b/api/Fitipower_FC0012.c 2011-08-11 22:54:23.390763425 +0200 @@ -35,6 +35,12 @@ Dword FC0012_open ( IN Byte chip ) { Dword error = Error_NO_ERROR; + int i; + Byte reg[] = { + 0x05, 0x10, 0x00, 0x00, 0x0a, 0x00, 0x0f, 0xff, + 0x6e, 0xb8, 0x83, 0xfe, 0x02, 0x00, 0x00, 0x0d, + 0x00, 0x1f, 0x90, 0x00, 0x04, + }; /** Control tuner enable */ error = Standard_writeRegisterBits (demodulator, chip, Processor_LINK, p_reg_top_gpiot2_o, reg_top_gpiot2_o_pos, reg_top_gpiot2_o_len, 1); @@ -47,11 +53,16 @@ Dword FC0012_open ( if (error) goto exit; /** Control pin diode **/ - error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 1); + error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 1); if (error) goto exit; - error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_en, 1); + error = Standard_writeRegister (demodulator, chip, Processor_LINK, p_reg_top_gpioh8_on, 1); if (error) goto exit; + + for (i=0; i<sizeof(reg)/sizeof(reg[0]); i++) { + error = Standard_writeTunerRegisters (demodulator, chip, i+1, 1, ®[i]); + if (error) goto exit; + } exit: return (error); } --- a/api/Fitipower_FC0012_Script.h 2009-08-14 16:17:10.000000000 +0200 +++ b/api/Fitipower_FC0012_Script.h 2011-08-13 16:53:41.984092888 +0200 @@ -15,7 +15,7 @@ #define VERSION4 0 -#define FC0012_ADDRESS 0xC0 +#define FC0012_ADDRESS 0xC6 #define FC0012_SCRIPTSETLENGTH 0x00000001 Word FC0012_scriptSets[] = { --- a/api/user.h 2009-08-14 16:17:10.000000000 +0200 +++ b/api/user.h 2011-08-10 22:21:31.192856393 +0200 @@ -22,7 +22,7 @@ #define User_I2C_SPEED 0x07 /** Define I2C address of secondary chip when Diversity mode or PIP mode is active. */ -#define User_I2C_ADDRESS 0x38 +#define User_I2C_ADDRESS 0x3a /** Define USB frame size */ #define User_USB20_MAX_PACKET_SIZE 512
After that, continue with the instructions in EzCap_DVB_T_Stick.