mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 13:46:49 +00:00
linux: TechnoTrend S2-4600 patch fixed
Previously the TT S2-4600 driver worked fine only in some applications (such as tvheadend), but not in others (such as vdr). This patch fixed that.
This commit is contained in:
parent
21ade48093
commit
b1cb45aeb6
@ -1,6 +1,6 @@
|
|||||||
diff -urN a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h
|
diff -urN a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h
|
||||||
--- a/drivers/media/dvb-core/dvb-usb-ids.h 2015-03-18 15:11:52.000000000 +0200
|
--- a/drivers/media/dvb-core/dvb-usb-ids.h 2015-04-29 11:22:30.000000000 +0300
|
||||||
+++ b/drivers/media/dvb-core/dvb-usb-ids.h 2015-03-21 12:13:33.967120836 +0200
|
+++ b/drivers/media/dvb-core/dvb-usb-ids.h 2015-05-05 20:35:29.392417272 +0300
|
||||||
@@ -245,6 +245,7 @@
|
@@ -245,6 +245,7 @@
|
||||||
#define USB_PID_TECHNOTREND_CONNECT_S2400 0x3006
|
#define USB_PID_TECHNOTREND_CONNECT_S2400 0x3006
|
||||||
#define USB_PID_TECHNOTREND_CONNECT_S2400_8KEEPROM 0x3009
|
#define USB_PID_TECHNOTREND_CONNECT_S2400_8KEEPROM 0x3009
|
||||||
@ -10,8 +10,8 @@ diff -urN a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-us
|
|||||||
#define USB_PID_TECHNOTREND_TVSTICK_CT2_4400 0x3014
|
#define USB_PID_TECHNOTREND_TVSTICK_CT2_4400 0x3014
|
||||||
#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
|
#define USB_PID_TERRATEC_CINERGY_DT_XS_DIVERSITY 0x005a
|
||||||
diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
|
diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
|
||||||
--- a/drivers/media/usb/dvb-usb/dw2102.c 2015-03-18 15:11:52.000000000 +0200
|
--- a/drivers/media/usb/dvb-usb/dw2102.c 2015-04-29 11:22:30.000000000 +0300
|
||||||
+++ b/drivers/media/usb/dvb-usb/dw2102.c 2015-03-21 12:16:04.791127250 +0200
|
+++ b/drivers/media/usb/dvb-usb/dw2102.c 2015-05-05 20:37:20.376421156 +0300
|
||||||
@@ -2,7 +2,8 @@
|
@@ -2,7 +2,8 @@
|
||||||
* DVBWorld DVB-S 2101, 2102, DVB-S2 2104, DVB-C 3101,
|
* DVBWorld DVB-S 2101, 2102, DVB-S2 2104, DVB-C 3101,
|
||||||
* TeVii S600, S630, S650, S660, S480, S421, S632
|
* TeVii S600, S630, S650, S660, S480, S421, S632
|
||||||
@ -31,7 +31,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
|
|
||||||
/* Max transfer size done by I2C transfer functions */
|
/* Max transfer size done by I2C transfer functions */
|
||||||
#define MAX_XFER_SIZE 64
|
#define MAX_XFER_SIZE 64
|
||||||
@@ -112,11 +115,9 @@
|
@@ -112,12 +115,15 @@
|
||||||
"Please see linux/Documentation/dvb/ for more details " \
|
"Please see linux/Documentation/dvb/ for more details " \
|
||||||
"on firmware-problems."
|
"on firmware-problems."
|
||||||
|
|
||||||
@ -39,13 +39,18 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
+struct dw2102_state {
|
+struct dw2102_state {
|
||||||
u8 initialized;
|
u8 initialized;
|
||||||
-};
|
-};
|
||||||
-
|
+ u8 last_lock;
|
||||||
-struct s6x0_state {
|
|
||||||
+ struct i2c_client *i2c_client_tuner;
|
+ struct i2c_client *i2c_client_tuner;
|
||||||
|
|
||||||
|
-struct s6x0_state {
|
||||||
|
+ /* fe hook functions*/
|
||||||
int (*old_set_voltage)(struct dvb_frontend *f, fe_sec_voltage_t v);
|
int (*old_set_voltage)(struct dvb_frontend *f, fe_sec_voltage_t v);
|
||||||
|
+ int (*fe_read_status)(struct dvb_frontend *fe,
|
||||||
|
+ fe_status_t *status);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -887,7 +888,7 @@
|
/* debug */
|
||||||
|
@@ -887,7 +893,7 @@
|
||||||
|
|
||||||
static int su3000_power_ctrl(struct dvb_usb_device *d, int i)
|
static int su3000_power_ctrl(struct dvb_usb_device *d, int i)
|
||||||
{
|
{
|
||||||
@ -54,7 +59,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
u8 obuf[] = {0xde, 0};
|
u8 obuf[] = {0xde, 0};
|
||||||
|
|
||||||
info("%s: %d, initialized %d\n", __func__, i, state->initialized);
|
info("%s: %d, initialized %d\n", __func__, i, state->initialized);
|
||||||
@@ -973,7 +974,7 @@
|
@@ -973,7 +979,7 @@
|
||||||
{
|
{
|
||||||
struct dvb_usb_adapter *d =
|
struct dvb_usb_adapter *d =
|
||||||
(struct dvb_usb_adapter *)(fe->dvb->priv);
|
(struct dvb_usb_adapter *)(fe->dvb->priv);
|
||||||
@ -63,7 +68,31 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
|
|
||||||
dw210x_set_voltage(fe, voltage);
|
dw210x_set_voltage(fe, voltage);
|
||||||
if (st->old_set_voltage)
|
if (st->old_set_voltage)
|
||||||
@@ -1117,6 +1118,22 @@
|
@@ -1000,6 +1006,23 @@
|
||||||
|
i2c_transfer(&udev_adap->dev->i2c_adap, &msg, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int tt_s2_4600_read_status(struct dvb_frontend *fe, fe_status_t *status)
|
||||||
|
+{
|
||||||
|
+ struct dvb_usb_adapter *d =
|
||||||
|
+ (struct dvb_usb_adapter *)(fe->dvb->priv);
|
||||||
|
+ struct dw2102_state *st = (struct dw2102_state *)d->dev->priv;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ ret = st->fe_read_status(fe, status);
|
||||||
|
+
|
||||||
|
+ /* resync slave fifo when signal change from unlock to lock */
|
||||||
|
+ if ((*status & FE_HAS_LOCK) && (!st->last_lock))
|
||||||
|
+ su3000_streaming_ctrl(d, 1);
|
||||||
|
+
|
||||||
|
+ st->last_lock = (*status & FE_HAS_LOCK) ? 1 : 0;
|
||||||
|
+ return ret;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static struct stv0299_config sharp_z0194a_config = {
|
||||||
|
.demod_address = 0x68,
|
||||||
|
.inittab = sharp_z0194a_inittab,
|
||||||
|
@@ -1117,6 +1140,22 @@
|
||||||
.gate = TDA18271_GATE_DIGITAL,
|
.gate = TDA18271_GATE_DIGITAL,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -86,7 +115,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
static u8 m88rs2000_inittab[] = {
|
static u8 m88rs2000_inittab[] = {
|
||||||
DEMOD_WRITE, 0x9a, 0x30,
|
DEMOD_WRITE, 0x9a, 0x30,
|
||||||
DEMOD_WRITE, 0x00, 0x01,
|
DEMOD_WRITE, 0x00, 0x01,
|
||||||
@@ -1295,7 +1312,7 @@
|
@@ -1295,7 +1334,7 @@
|
||||||
|
|
||||||
static int ds3000_frontend_attach(struct dvb_usb_adapter *d)
|
static int ds3000_frontend_attach(struct dvb_usb_adapter *d)
|
||||||
{
|
{
|
||||||
@ -95,7 +124,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
u8 obuf[] = {7, 1};
|
u8 obuf[] = {7, 1};
|
||||||
|
|
||||||
d->fe_adap[0].fe = dvb_attach(ds3000_attach, &s660_ds3000_config,
|
d->fe_adap[0].fe = dvb_attach(ds3000_attach, &s660_ds3000_config,
|
||||||
@@ -1461,6 +1478,86 @@
|
@@ -1461,6 +1500,92 @@
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,13 +205,19 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
+
|
+
|
||||||
+ state->i2c_client_tuner = client;
|
+ state->i2c_client_tuner = client;
|
||||||
+
|
+
|
||||||
|
+ /* hook fe: need to resync the slave fifo when signal locks */
|
||||||
|
+ state->fe_read_status = adap->fe_adap[0].fe->ops.read_status;
|
||||||
|
+ adap->fe_adap[0].fe->ops.read_status = tt_s2_4600_read_status;
|
||||||
|
+
|
||||||
|
+ state->last_lock = 0;
|
||||||
|
+
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
static int dw2102_tuner_attach(struct dvb_usb_adapter *adap)
|
static int dw2102_tuner_attach(struct dvb_usb_adapter *adap)
|
||||||
{
|
{
|
||||||
dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0x60,
|
dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0x60,
|
||||||
@@ -1561,6 +1658,7 @@
|
@@ -1561,6 +1686,7 @@
|
||||||
TERRATEC_CINERGY_S2_R2,
|
TERRATEC_CINERGY_S2_R2,
|
||||||
GOTVIEW_SAT_HD,
|
GOTVIEW_SAT_HD,
|
||||||
GENIATECH_T220,
|
GENIATECH_T220,
|
||||||
@ -190,7 +225,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct usb_device_id dw2102_table[] = {
|
static struct usb_device_id dw2102_table[] = {
|
||||||
@@ -1584,6 +1682,8 @@
|
@@ -1584,6 +1710,8 @@
|
||||||
[TERRATEC_CINERGY_S2_R2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00b0)},
|
[TERRATEC_CINERGY_S2_R2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00b0)},
|
||||||
[GOTVIEW_SAT_HD] = {USB_DEVICE(0x1FE1, USB_PID_GOTVIEW_SAT_HD)},
|
[GOTVIEW_SAT_HD] = {USB_DEVICE(0x1FE1, USB_PID_GOTVIEW_SAT_HD)},
|
||||||
[GENIATECH_T220] = {USB_DEVICE(0x1f4d, 0xD220)},
|
[GENIATECH_T220] = {USB_DEVICE(0x1f4d, 0xD220)},
|
||||||
@ -199,7 +234,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1857,7 +1957,7 @@
|
@@ -1857,7 +1985,7 @@
|
||||||
static struct dvb_usb_device_properties s6x0_properties = {
|
static struct dvb_usb_device_properties s6x0_properties = {
|
||||||
.caps = DVB_USB_IS_AN_I2C_ADAPTER,
|
.caps = DVB_USB_IS_AN_I2C_ADAPTER,
|
||||||
.usb_ctrl = DEVICE_SPECIFIC,
|
.usb_ctrl = DEVICE_SPECIFIC,
|
||||||
@ -208,7 +243,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
.firmware = S630_FIRMWARE,
|
.firmware = S630_FIRMWARE,
|
||||||
.no_reconnect = 1,
|
.no_reconnect = 1,
|
||||||
|
|
||||||
@@ -1950,7 +2050,7 @@
|
@@ -1950,7 +2078,7 @@
|
||||||
static struct dvb_usb_device_properties su3000_properties = {
|
static struct dvb_usb_device_properties su3000_properties = {
|
||||||
.caps = DVB_USB_IS_AN_I2C_ADAPTER,
|
.caps = DVB_USB_IS_AN_I2C_ADAPTER,
|
||||||
.usb_ctrl = DEVICE_SPECIFIC,
|
.usb_ctrl = DEVICE_SPECIFIC,
|
||||||
@ -217,7 +252,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
.power_ctrl = su3000_power_ctrl,
|
.power_ctrl = su3000_power_ctrl,
|
||||||
.num_adapters = 1,
|
.num_adapters = 1,
|
||||||
.identify_state = su3000_identify_state,
|
.identify_state = su3000_identify_state,
|
||||||
@@ -2015,7 +2115,7 @@
|
@@ -2015,7 +2143,7 @@
|
||||||
static struct dvb_usb_device_properties t220_properties = {
|
static struct dvb_usb_device_properties t220_properties = {
|
||||||
.caps = DVB_USB_IS_AN_I2C_ADAPTER,
|
.caps = DVB_USB_IS_AN_I2C_ADAPTER,
|
||||||
.usb_ctrl = DEVICE_SPECIFIC,
|
.usb_ctrl = DEVICE_SPECIFIC,
|
||||||
@ -226,7 +261,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
.power_ctrl = su3000_power_ctrl,
|
.power_ctrl = su3000_power_ctrl,
|
||||||
.num_adapters = 1,
|
.num_adapters = 1,
|
||||||
.identify_state = su3000_identify_state,
|
.identify_state = su3000_identify_state,
|
||||||
@@ -2061,6 +2161,55 @@
|
@@ -2061,6 +2189,55 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -282,7 +317,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
static int dw2102_probe(struct usb_interface *intf,
|
static int dw2102_probe(struct usb_interface *intf,
|
||||||
const struct usb_device_id *id)
|
const struct usb_device_id *id)
|
||||||
{
|
{
|
||||||
@@ -2135,16 +2284,34 @@
|
@@ -2135,16 +2312,34 @@
|
||||||
0 == dvb_usb_device_init(intf, &su3000_properties,
|
0 == dvb_usb_device_init(intf, &su3000_properties,
|
||||||
THIS_MODULE, NULL, adapter_nr) ||
|
THIS_MODULE, NULL, adapter_nr) ||
|
||||||
0 == dvb_usb_device_init(intf, &t220_properties,
|
0 == dvb_usb_device_init(intf, &t220_properties,
|
||||||
@ -318,7 +353,7 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
.id_table = dw2102_table,
|
.id_table = dw2102_table,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2155,7 +2322,8 @@
|
@@ -2155,7 +2350,8 @@
|
||||||
" DVB-C 3101 USB2.0,"
|
" DVB-C 3101 USB2.0,"
|
||||||
" TeVii S600, S630, S650, S660, S480, S421, S632"
|
" TeVii S600, S630, S650, S660, S480, S421, S632"
|
||||||
" Prof 1100, 7500 USB2.0,"
|
" Prof 1100, 7500 USB2.0,"
|
||||||
@ -329,8 +364,8 @@ diff -urN a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw210
|
|||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_FIRMWARE(DW2101_FIRMWARE);
|
MODULE_FIRMWARE(DW2101_FIRMWARE);
|
||||||
diff -urN a/drivers/media/usb/dvb-usb/Kconfig b/drivers/media/usb/dvb-usb/Kconfig
|
diff -urN a/drivers/media/usb/dvb-usb/Kconfig b/drivers/media/usb/dvb-usb/Kconfig
|
||||||
--- a/drivers/media/usb/dvb-usb/Kconfig 2015-03-18 15:11:52.000000000 +0200
|
--- a/drivers/media/usb/dvb-usb/Kconfig 2015-04-29 11:22:30.000000000 +0300
|
||||||
+++ b/drivers/media/usb/dvb-usb/Kconfig 2015-03-21 12:13:33.967120836 +0200
|
+++ b/drivers/media/usb/dvb-usb/Kconfig 2015-05-05 20:35:29.392417272 +0300
|
||||||
@@ -278,9 +278,11 @@
|
@@ -278,9 +278,11 @@
|
||||||
select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT
|
select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT
|
select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user