From ac548522adc3a636f4412677860f7b20494c1451 Mon Sep 17 00:00:00 2001 From: Steven Vanden Branden Date: Wed, 10 Jun 2015 18:02:29 +0200 Subject: [PATCH 1/7] add turbosight VID and tbs5980 PID --- drivers/media/dvb-core/dvb-usb-ids.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h index c117fb3..0ea1e94 100644 --- a/drivers/media/dvb-core/dvb-usb-ids.h +++ b/drivers/media/dvb-core/dvb-usb-ids.h @@ -70,6 +70,7 @@ #define USB_VID_EVOLUTEPC 0x1e59 #define USB_VID_AZUREWAVE 0x13d3 #define USB_VID_TECHNISAT 0x14f7 +#define USB_VID_TURBOSIGHT 0x734c /* Product IDs */ #define USB_PID_ADSTECH_USB2_COLD 0xa333 @@ -388,4 +389,5 @@ #define USB_PID_PCTV_2002E_SE 0x025d #define USB_PID_SVEON_STV27 0xd3af #define USB_PID_TURBOX_DTT_2000 0xd3a4 +#define USB_PID_TURBOSIGHT_5980 0x5980 #endif -- 2.4.2 From e9d3c9b079650e69f09a09802d2536b58e0a69cb Mon Sep 17 00:00:00 2001 From: Steven Vanden Branden Date: Wed, 10 Jun 2015 18:17:49 +0200 Subject: [PATCH 2/7] initial driver support tbs 5980 --- drivers/media/usb/dvb-usb/dw2102.c | 87 +++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c index f1f357f..ede24e7 100644 --- a/drivers/media/usb/dvb-usb/dw2102.c +++ b/drivers/media/usb/dvb-usb/dw2102.c @@ -3,7 +3,8 @@ * TeVii S600, S630, S650, S660, S480, S421, S632 * Prof 1100, 7500, * Geniatech SU3000, T220, - * TechnoTrend S2-4600 Cards + * TechnoTrend S2-4600 Cards, + * Turbosight TBS5980 * Copyright (C) 2008-2012 Igor M. Liplianin (liplianin@me.by) * * This program is free software; you can redistribute it and/or modify it @@ -110,6 +111,7 @@ #define S660_FIRMWARE "dvb-usb-s660.fw" #define P1100_FIRMWARE "dvb-usb-p1100.fw" #define P7500_FIRMWARE "dvb-usb-p7500.fw" +#define T5980_FIRMWARE "dvb-usb-tbsqbox-id5980.fw" #define err_str "did not find the firmware file. (%s) " \ "Please see linux/Documentation/dvb/ for more details " \ @@ -629,6 +631,17 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], goto unlock; } + if(le16_to_cpu(udev->descriptor.idProduct) + == 0x5980 && num == 1) { + u8 obuf[3]; + obuf[0] = msg[0].len; + obuf[1] = msg[0].addr << 1; + obuf[2] = 0x00; + dw210x_op_rw(d->udev, 0x90,0,0, + ibuf, msg[j].len, + DW210X_READ_MSG); + } + dw210x_op_rw(d->udev, 0x91, 0, 0, ibuf, msg[j].len, DW210X_READ_MSG); @@ -669,9 +682,10 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], memcpy(obuf + 2, msg[j].buf, msg[j].len); dw210x_op_rw(d->udev, le16_to_cpu(udev->descriptor.idProduct) == - 0x7500 ? 0x92 : 0x90, 0, 0, + 0x5980 ? 0x92 : 0x90, 0, 0, obuf, msg[j].len + 2, DW210X_WRITE_MSG); + //TODO: modded from 0x7500 break; } else { /* write registers */ @@ -1101,6 +1115,18 @@ static struct stv0900_config prof_7500_stv0900_config = { .set_lock_led = dw210x_led_ctrl, }; +static struct stv0900_config turbosight_5980_stv0900_config = { + .demod_address = 0x6a,//ok + .demod_mode = 0, + .xtal = 27000000, //ok + .clkmode = 3,// no change + .diseqc_mode = 2, //guess 22 KHZ + .tun1_maddress = 0,// 0x60 + .tun1_adc = 2, + .path1_mode = 3, + .set_lock_led = dw210x_led_ctrl, +}; + static struct ds3000_config su3000_ds3000_config = { .demod_address = 0x68, .ci_mode = 1, @@ -1217,6 +1243,36 @@ static int dw2104_frontend_attach(struct dvb_usb_adapter *d) return -EIO; } +static int turbosight_5980_frontend_attach(struct dvb_usb_adapter *d) +{ + struct dvb_tuner_ops *tuner_ops = NULL; + u8 obuf[] = {7,1}; + u8 obuf2[] = {1,1}; + u8 obuf3[] = {6,1}; + + d->fe_adap[0].fe = dvb_attach(stv0900_attach, &turbosight_5980_stv0900_config, + &d->dev->i2c_adap, 0); + if (d->fe_adap[0].fe == NULL) + return -EIO; + + if (dvb_attach(stb6100_attach, d->fe_adap[0].fe, &dw2104a_stb6100_config, + &d->dev->i2c_adap)) { + tuner_ops = &d->fe_adap[0].fe->ops.tuner_ops; + tuner_ops->set_frequency = stb6100_set_freq; + tuner_ops->get_frequency = stb6100_get_freq; + tuner_ops->set_bandwidth = stb6100_set_bandw; + tuner_ops->get_bandwidth = stb6100_get_bandw; + d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; + info("Attached STV0900+STB6100!\n"); + } + + dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG); + dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf2, 2, DW210X_WRITE_MSG); + dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf3, 2, DW210X_WRITE_MSG); + + return 0; +} + static struct dvb_usb_device_properties dw2102_properties; static struct dvb_usb_device_properties dw2104_properties; static struct dvb_usb_device_properties s6x0_properties; @@ -1657,6 +1713,7 @@ enum dw2102_table_entry { GOTVIEW_SAT_HD, GENIATECH_T220, TECHNOTREND_S2_4600, + TURBOSIGHT_5980, }; static struct usb_device_id dw2102_table[] = { @@ -1682,6 +1739,7 @@ static struct usb_device_id dw2102_table[] = { [GENIATECH_T220] = {USB_DEVICE(0x1f4d, 0xD220)}, [TECHNOTREND_S2_4600] = {USB_DEVICE(USB_VID_TECHNOTREND, USB_PID_TECHNOTREND_CONNECT_S2_4600)}, + [TURBOSIGHT_5980] = {USB_DEVICE(USB_VID_TURBOSIGHT, USB_PID_TURBOSIGHT_5980)}, { } }; @@ -2045,6 +2103,13 @@ static struct dvb_usb_device_description d632 = { {NULL}, }; +static struct dvb_usb_device_properties *t5980; +static struct dvb_usb_device_description d5980 = { + "TBS 5980 USB DVB-S2 CI", + {&dw2102_table[TURBOSIGHT_5980], NULL}, + {NULL}, +}; + static struct dvb_usb_device_properties su3000_properties = { .caps = DVB_USB_IS_AN_I2C_ADAPTER, .usb_ctrl = DEVICE_SPECIFIC, @@ -2263,6 +2328,22 @@ static int dw2102_probe(struct usb_interface *intf, s421->devices[1] = d632; s421->adapter->fe[0].frontend_attach = m88rs2000_frontend_attach; + t5980 = kmemdup(&dw2104_properties, + sizeof(struct dvb_usb_device_properties), GFP_KERNEL); + if (!t5980) { + kfree(p1100); + kfree(s660); + kfree(p7500); + kfree(t5980); + return -ENOMEM; + } + t5980->num_device_descs = 1; + t5980->devices[0] = d5980; + t5980->i2c_algo=&s6x0_i2c_algo; + t5980->read_mac_address = s6x0_read_mac_address; + t5980->firmware = T5980_FIRMWARE; + t5980->adapter->fe[0].frontend_attach = turbosight_5980_frontend_attach; + if (0 == dvb_usb_device_init(intf, &dw2102_properties, THIS_MODULE, NULL, adapter_nr) || 0 == dvb_usb_device_init(intf, &dw2104_properties, @@ -2277,6 +2358,8 @@ static int dw2102_probe(struct usb_interface *intf, THIS_MODULE, NULL, adapter_nr) || 0 == dvb_usb_device_init(intf, p7500, THIS_MODULE, NULL, adapter_nr) || + 0 == dvb_usb_device_init(intf, t5980, + THIS_MODULE, NULL, adapter_nr) || 0 == dvb_usb_device_init(intf, s421, THIS_MODULE, NULL, adapter_nr) || 0 == dvb_usb_device_init(intf, &su3000_properties, -- 2.4.2 From 85d7345b2a2a38ae2b2e47dc1f70c22a39e0af23 Mon Sep 17 00:00:00 2001 From: Steven Vanden Branden Date: Wed, 10 Jun 2015 18:41:08 +0200 Subject: [PATCH 3/7] firmware module --- drivers/media/usb/dvb-usb/dw2102.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c index ede24e7..1a9e7ed 100644 --- a/drivers/media/usb/dvb-usb/dw2102.c +++ b/drivers/media/usb/dvb-usb/dw2102.c @@ -2415,3 +2415,4 @@ MODULE_FIRMWARE(S630_FIRMWARE); MODULE_FIRMWARE(S660_FIRMWARE); MODULE_FIRMWARE(P1100_FIRMWARE); MODULE_FIRMWARE(P7500_FIRMWARE); +MODULE_FIRMWARE(T5980_FIRMWARE); -- 2.4.2 From 322d060ac5548c5825acef806547d5fa7388d618 Mon Sep 17 00:00:00 2001 From: Steven Vanden Branden Date: Wed, 10 Jun 2015 18:43:29 +0200 Subject: [PATCH 4/7] change PID and VID temporarly --- drivers/media/usb/dvb-usb/dw2102.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c index 1a9e7ed..dfae6e6 100644 --- a/drivers/media/usb/dvb-usb/dw2102.c +++ b/drivers/media/usb/dvb-usb/dw2102.c @@ -1739,7 +1739,7 @@ static struct usb_device_id dw2102_table[] = { [GENIATECH_T220] = {USB_DEVICE(0x1f4d, 0xD220)}, [TECHNOTREND_S2_4600] = {USB_DEVICE(USB_VID_TECHNOTREND, USB_PID_TECHNOTREND_CONNECT_S2_4600)}, - [TURBOSIGHT_5980] = {USB_DEVICE(USB_VID_TURBOSIGHT, USB_PID_TURBOSIGHT_5980)}, + [TURBOSIGHT_5980] = {USB_DEVICE(USB_VID_CYPRESS, USB_PID_ULTIMA_TVBOX_USB2_FX_COLD)}, { } }; -- 2.4.2 From e26a064f30f828b724830692aad871bad43196da Mon Sep 17 00:00:00 2001 From: Steven Vanden Branden Date: Wed, 10 Jun 2015 22:12:39 +0200 Subject: [PATCH 5/7] Revert "firmware module" This reverts commit 85d7345b2a2a38ae2b2e47dc1f70c22a39e0af23. --- drivers/media/usb/dvb-usb/dw2102.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c index dfae6e6..6963bff 100644 --- a/drivers/media/usb/dvb-usb/dw2102.c +++ b/drivers/media/usb/dvb-usb/dw2102.c @@ -2415,4 +2415,3 @@ MODULE_FIRMWARE(S630_FIRMWARE); MODULE_FIRMWARE(S660_FIRMWARE); MODULE_FIRMWARE(P1100_FIRMWARE); MODULE_FIRMWARE(P7500_FIRMWARE); -MODULE_FIRMWARE(T5980_FIRMWARE); -- 2.4.2 From 1ba2bc2a2db90d0fb865a7ab50f60c0936b506e4 Mon Sep 17 00:00:00 2001 From: Steven Vanden Branden Date: Wed, 10 Jun 2015 22:14:10 +0200 Subject: [PATCH 6/7] Revert "Revert "firmware module"" This reverts commit e26a064f30f828b724830692aad871bad43196da. --- drivers/media/usb/dvb-usb/dw2102.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c index 6963bff..dfae6e6 100644 --- a/drivers/media/usb/dvb-usb/dw2102.c +++ b/drivers/media/usb/dvb-usb/dw2102.c @@ -2415,3 +2415,4 @@ MODULE_FIRMWARE(S630_FIRMWARE); MODULE_FIRMWARE(S660_FIRMWARE); MODULE_FIRMWARE(P1100_FIRMWARE); MODULE_FIRMWARE(P7500_FIRMWARE); +MODULE_FIRMWARE(T5980_FIRMWARE); -- 2.4.2 From 8adff5c5ddb5a6a205ee3eb95ba6c2d09191b3ed Mon Sep 17 00:00:00 2001 From: Steven Vanden Branden Date: Wed, 10 Jun 2015 22:14:36 +0200 Subject: [PATCH 7/7] Revert "change PID and VID temporarly" This reverts commit 322d060ac5548c5825acef806547d5fa7388d618. --- drivers/media/usb/dvb-usb/dw2102.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c index dfae6e6..1a9e7ed 100644 --- a/drivers/media/usb/dvb-usb/dw2102.c +++ b/drivers/media/usb/dvb-usb/dw2102.c @@ -1739,7 +1739,7 @@ static struct usb_device_id dw2102_table[] = { [GENIATECH_T220] = {USB_DEVICE(0x1f4d, 0xD220)}, [TECHNOTREND_S2_4600] = {USB_DEVICE(USB_VID_TECHNOTREND, USB_PID_TECHNOTREND_CONNECT_S2_4600)}, - [TURBOSIGHT_5980] = {USB_DEVICE(USB_VID_CYPRESS, USB_PID_ULTIMA_TVBOX_USB2_FX_COLD)}, + [TURBOSIGHT_5980] = {USB_DEVICE(USB_VID_TURBOSIGHT, USB_PID_TURBOSIGHT_5980)}, { } }; -- 2.4.2