T6 Dual DVB-T Stick: Difference between revisions
Jump to navigation
Jump to search
(New Device Entry for TerraTec T6 Dual DVB-T Stick (first created as "TerraTec T6", but wanted to rename it) |
(Contents deleted because new device page with same contents created.) |
||
Line 1: | Line 1: | ||
can be found under [[TerraTec_T6_Dual_DVB-T_Stick]]. |
|||
Major components: |
|||
* Afatech AF9035B-N2 USB Interface with included AF9033 Demodulator |
|||
* Afatech AF9033B-N2 second Demodulator |
|||
* Fitipower FC0012 Tuner (2 off) |
|||
[[File:terratec-t6-internals-front.jpg|300px|left|top side of PCB with all major chips and IR receiver]] |
|||
[[File:terratec-t6-internals-rear.jpg|300px|right|bottom side of PCB]] |
|||
<br/><br/><br/><br/><br/><br/><br/> |
|||
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]]. |
|||
[[Category:DVB-T USB Devices]] |
Latest revision as of 16:06, 13 August 2011
can be found under TerraTec_T6_Dual_DVB-T_Stick.