TechniSat CableStar Combo HD CI: Difference between revisions

From LinuxTVWiki
Jump to navigation Jump to search
Line 121: Line 121:


===Patch===
===Patch===
These are the needed patchs for the kernel 3.9.2 to get the device working.
These are the needed patches for the kernel 3.9.2 to get the device working. Also tested on Linux debian wheezy 3.10-0.bpo.2-686-pae


dvb-usb-ids.h
dvb-usb-ids.h

Revision as of 18:33, 3 November 2013

A DVB-C USB device from TechniSat.

Overview/Features

A combined DVB-C and DVB-T USB 2.0 box (standard definition and high definition). The device contains a common interface slot and an integrated infrared receiver. A remote control is included.

It is supported by parching the device ids into the current releases of Linux.

Components Used

DRX 3913 JKA 2

http://www.tridentmicro.com/producttree/tv/dtv/drx/drx-39xyk/

CY7C68013A

EPM3128ATC144-10N

http://www.altera.com/cgi-bin/devsearch.pl?col=corp&qt=EPM3128

Identification

The USB id of this device is 14f7:0003

Making it Work

The Window drivers for this devices from TechniSat is named UDST7000Bda.sys, the same as the driver for the Technisat SkyStar USB 2 HD CI and TerraTec S7 DVB-S devices. These devices are supported by Linux with the az6027 driver. This gives some hope towards future Linux support for this device.

Firmware

dvb-usb-terratec-h7-drxk.fw dvb-usb-terratec-h5-drxk.fw from http://linuxtv.org/downloads/firmware/ 0

Copy the firmware file to your hotplug directory (e.g. /lib/firmware/) and (when applied the patches from below) rename it to dvb-usb-technisat-cablestar-hdci-drxk.fw

Drivers

As the TechniSat CableStar Combo HD CI is a clone of the Terratec T7 card which is supported in the kernel v3.9.2 some small patches are needed to get the card working.

Log from initialization on kernel 3.9.2:

[ 5846.524448] usb 1-1.1: dvb_usb_v2: found a 'Technisat Combo HD CI' in cold state
[ 5846.524477] usb 1-1.1: dvb_usb_v2: downloading firmware from file 'dvb-usb-terratec-h7-az6007.fw'
[ 5846.542443] usb 1-1.1: dvb_usb_v2: found a 'Technisat Combo HD CI' in warm state
[ 5847.759051] usb 1-1.1: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
[ 5847.759077] DVB: registering new adapter (Technisat Combo HD CI)
[ 5847.761918] usb 1-1.1: dvb_usb_v2: MAC address: c2:f7:14:03:00:00
[ 5847.763861] drxk: frontend initialized.
[ 5847.763975] usb 1-1.1: DVB: registering adapter 0 frontend 0 (DRXK)...
[ 5847.764816] drxk: Could not load firmware file dvb-usb-terratec-h7-drxk.fw.
[ 5847.764819] drxk: Copy dvb-usb-terratec-h7-drxk.fw to your hotplug directory!
[ 5847.765331] mt2063_attach: Attaching MT2063
[ 5847.765339] usb 1-1.1: dvb_usb_v2: 'Technisat Combo HD CI' successfully initialized and connected
[ 5847.813453] drxk: status = 0x639130d9
[ 5847.813458] drxk: detected a drx-3913k, spin A3, xtal 27.000 MHz
[ 5847.975123] DRXK driver version 0.9.4300
[ 6062.180856] mt2063: detected a mt2063 B3

lsusb:

Bus 001 Device 006: ID 14f7:0003 TechniSat Digital GmbH CableStar Combo HD CI
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x14f7 TechniSat Digital GmbH
  idProduct          0x0003 CableStar Combo HD CI
  bcdDevice            0.03
  iManufacturer           1 TechniSat Digital S.A.
  iProduct                2 CableStar Combo HD CI
  iSerial                 3 0008C9D91C8F
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval             100
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
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:     0x0001
  Self Powered

Patch

These are the needed patches for the kernel 3.9.2 to get the device working. Also tested on Linux debian wheezy 3.10-0.bpo.2-686-pae

dvb-usb-ids.h

diff --git a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h
index 419a2d6..4a53454 100644
--- a/drivers/media/dvb-core/dvb-usb-ids.h
+++ b/drivers/media/dvb-core/dvb-usb-ids.h
@@ -365,6 +365,7 @@
 #define USB_PID_TERRATEC_DVBS2CI_V2			0x10ac
 #define USB_PID_TECHNISAT_USB2_HDCI_V1			0x0001
 #define USB_PID_TECHNISAT_USB2_HDCI_V2			0x0002
+#define USB_PID_TECHNISAT_USB2_CABLESTAR_HDCI		0x0003
 #define USB_PID_TECHNISAT_AIRSTAR_TELESTICK_2		0x0004
 #define USB_PID_TECHNISAT_USB2_DVB_S2			0x0500
 #define USB_PID_CPYTO_REDI_PC50A			0xa803

az6007.c

diff --git a/drivers/media/usb/dvb-usb-v2/az6007.c b/drivers/media/usb/dvb-usb-v2/az6007.c
index 44c64ef3..c1051c3 100644
--- a/drivers/media/usb/dvb-usb-v2/az6007.c
+++ b/drivers/media/usb/dvb-usb-v2/az6007.c
@@ -68,6 +68,19 @@ static struct drxk_config terratec_h7_drxk = {
 	.microcode_name = "dvb-usb-terratec-h7-drxk.fw",
 };
 
+static struct drxk_config cablestar_hdci_drxk = {
+	.adr = 0x29,
+	.parallel_ts = true,
+	.dynamic_clk = true,
+	.single_master = true,
+	.enable_merr_cfg = true,
+	.no_i2c_bridge = false,
+	.chunk_size = 64,
+	.mpeg_out_clk_strength = 0x02,
+	.qam_demod_parameter_count = 2,
+	.microcode_name = "dvb-usb-technisat-cablestar-hdci-drxk.fw",
+};
+
 static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable)
 {
 	struct az6007_device_state *st = fe_to_priv(fe);
@@ -630,6 +643,27 @@ static int az6007_frontend_attach(struct dvb_usb_adapter *adap)
 	return 0;
 }
 
+static int az6007_cablestar_hdci_frontend_attach(struct dvb_usb_adapter *adap)
+{
+	struct az6007_device_state *st = adap_to_priv(adap);
+	struct dvb_usb_device *d = adap_to_d(adap);
+
+	pr_debug("attaching demod drxk\n");
+
+	adap->fe[0] = dvb_attach(drxk_attach, &cablestar_hdci_drxk,
+				 &d->i2c_adap);
+	if (!adap->fe[0])
+		return -EINVAL;
+
+	adap->fe[0]->sec_priv = adap;
+	st->gate_ctrl = adap->fe[0]->ops.i2c_gate_ctrl;
+	adap->fe[0]->ops.i2c_gate_ctrl = drxk_gate_ctrl;
+
+	az6007_ci_init(adap);
+
+	return 0;
+}
+
 static int az6007_tuner_attach(struct dvb_usb_adapter *adap)
 {
 	struct dvb_usb_device *d = adap_to_d(adap);
@@ -868,6 +902,29 @@ static struct dvb_usb_device_properties az6007_props = {
 	}
 };
 
+static struct dvb_usb_device_properties az6007_cablestar_hdci_props = {
+	.driver_name         = KBUILD_MODNAME,
+	.owner               = THIS_MODULE,
+	.firmware            = AZ6007_FIRMWARE,
+
+	.adapter_nr          = adapter_nr,
+	.size_of_priv        = sizeof(struct az6007_device_state),
+	.i2c_algo            = &az6007_i2c_algo,
+	.tuner_attach        = az6007_tuner_attach,
+	.frontend_attach     = az6007_cablestar_hdci_frontend_attach,
+	.streaming_ctrl      = az6007_streaming_ctrl,
+/* ditch get_rc_config as it can't work (TS35 remote, I believe it's rc5) */
+	.get_rc_config       = NULL,
+	.read_mac_address    = az6007_read_mac_addr,
+	.download_firmware   = az6007_download_firmware,
+	.identify_state	     = az6007_identify_state,
+	.power_ctrl          = az6007_power_ctrl,
+	.num_adapters        = 1,
+	.adapter             = {
+		{ .stream = DVB_USB_STREAM_BULK(0x02, 10, 4096), }
+	}
+};
+
 static struct usb_device_id az6007_usb_table[] = {
 	{DVB_USB_DEVICE(USB_VID_AZUREWAVE, USB_PID_AZUREWAVE_6007,
 		&az6007_props, "Azurewave 6007", RC_MAP_EMPTY)},
@@ -875,6 +932,8 @@ static struct usb_device_id az6007_usb_table[] = {
 		&az6007_props, "Terratec H7", RC_MAP_NEC_TERRATEC_CINERGY_XS)},
 	{DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_H7_2,
 		&az6007_props, "Terratec H7", RC_MAP_NEC_TERRATEC_CINERGY_XS)},
+	{DVB_USB_DEVICE(USB_VID_TECHNISAT, USB_PID_TECHNISAT_USB2_CABLESTAR_HDCI,
+		&az6007_cablestar_hdci_props, "Technisat CableStar Combo HD CI", RC_MAP_EMPTY)},
 	{0},
 };

External Links