mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-02 07:27:49 +00:00
dvb-latest: update to 2018-11-23
This commit is contained in:
parent
49049575d7
commit
1a8870a673
@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="media_tree"
|
||||
PKG_VERSION="2018-10-09-8caec72e8cbf"
|
||||
PKG_SHA256="39f579c936ac78dec82825840142d5f856203e8133aa238aca5fe95c7a70e8ae"
|
||||
PKG_VERSION="2018-11-23-708d75fe1c7c"
|
||||
PKG_SHA256="57ed46bdc5905b093c578c69252564be80343ceeefab92c0b081f99b9463a3b8"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://git.linuxtv.org/media_tree.git"
|
||||
PKG_URL="http://linuxtv.org/downloads/drivers/linux-media-${PKG_VERSION}.tar.bz2"
|
||||
|
@ -589,7 +589,7 @@ index ed3210d..9598b99 100644
|
||||
.vmux = CX25840_VIN7_CH3 |
|
||||
CX25840_VIN4_CH2 |
|
||||
diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||
index 7d52173..9e61f23 100644
|
||||
index 0d0929c..0366c4d 100644
|
||||
--- a/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||
+++ b/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||
@@ -2382,6 +2382,16 @@ static int dvb_register(struct cx23885_tsport *port)
|
||||
@ -639,7 +639,7 @@ index 7d52173..9e61f23 100644
|
||||
}
|
||||
break;
|
||||
diff --git a/drivers/media/pci/cx23885/cx23885-video.c b/drivers/media/pci/cx23885/cx23885-video.c
|
||||
index f8a3dea..594bdcf 100644
|
||||
index 168178c..6d6e7fb 100644
|
||||
--- a/drivers/media/pci/cx23885/cx23885-video.c
|
||||
+++ b/drivers/media/pci/cx23885/cx23885-video.c
|
||||
@@ -264,6 +264,8 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input)
|
||||
@ -670,7 +670,7 @@ index f8a3dea..594bdcf 100644
|
||||
if (vdev->vfl_type == VFL_TYPE_VBI)
|
||||
cap->device_caps |= V4L2_CAP_VBI_CAPTURE;
|
||||
else
|
||||
@@ -882,8 +893,16 @@ static int vidioc_g_tuner(struct file *file, void *priv,
|
||||
@@ -899,8 +910,16 @@ static int vidioc_g_tuner(struct file *file, void *priv,
|
||||
{
|
||||
struct cx23885_dev *dev = video_drvdata(file);
|
||||
|
||||
@ -689,7 +689,7 @@ index f8a3dea..594bdcf 100644
|
||||
if (0 != t->index)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -898,8 +917,16 @@ static int vidioc_s_tuner(struct file *file, void *priv,
|
||||
@@ -915,8 +934,16 @@ static int vidioc_s_tuner(struct file *file, void *priv,
|
||||
{
|
||||
struct cx23885_dev *dev = video_drvdata(file);
|
||||
|
||||
@ -708,7 +708,7 @@ index f8a3dea..594bdcf 100644
|
||||
if (0 != t->index)
|
||||
return -EINVAL;
|
||||
/* Update the A/V core */
|
||||
@@ -913,9 +940,16 @@ static int vidioc_g_frequency(struct file *file, void *priv,
|
||||
@@ -930,9 +957,16 @@ static int vidioc_g_frequency(struct file *file, void *priv,
|
||||
{
|
||||
struct cx23885_dev *dev = video_drvdata(file);
|
||||
|
||||
@ -728,7 +728,7 @@ index f8a3dea..594bdcf 100644
|
||||
f->type = V4L2_TUNER_ANALOG_TV;
|
||||
f->frequency = dev->freq;
|
||||
|
||||
@@ -929,8 +963,16 @@ static int cx23885_set_freq(struct cx23885_dev *dev, const struct v4l2_frequency
|
||||
@@ -946,8 +980,16 @@ static int cx23885_set_freq(struct cx23885_dev *dev, const struct v4l2_frequency
|
||||
struct v4l2_ctrl *mute;
|
||||
int old_mute_val = 1;
|
||||
|
||||
@ -747,7 +747,7 @@ index f8a3dea..594bdcf 100644
|
||||
if (unlikely(f->tuner != 0))
|
||||
return -EINVAL;
|
||||
|
||||
@@ -995,7 +1037,9 @@ static int cx23885_set_freq_via_ops(struct cx23885_dev *dev,
|
||||
@@ -1012,7 +1054,9 @@ static int cx23885_set_freq_via_ops(struct cx23885_dev *dev,
|
||||
if ((dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850) ||
|
||||
(dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255) ||
|
||||
(dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255_22111) ||
|
||||
@ -758,7 +758,7 @@ index f8a3dea..594bdcf 100644
|
||||
fe = &dev->ts1.analog_fe;
|
||||
|
||||
if (fe && fe->ops.tuner_ops.set_analog_params) {
|
||||
@@ -1026,6 +1070,8 @@ int cx23885_set_frequency(struct file *file, void *priv,
|
||||
@@ -1043,6 +1087,8 @@ int cx23885_set_frequency(struct file *file, void *priv,
|
||||
case CX23885_BOARD_HAUPPAUGE_HVR1255_22111:
|
||||
case CX23885_BOARD_HAUPPAUGE_HVR1265_K4:
|
||||
case CX23885_BOARD_HAUPPAUGE_HVR1850:
|
||||
@ -768,9 +768,16 @@ index f8a3dea..594bdcf 100644
|
||||
break;
|
||||
default:
|
||||
diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
|
||||
index a08d8fe..26b1c3d 100644
|
||||
index d389f1f..b93f333 100644
|
||||
--- a/drivers/media/tuners/si2157.c
|
||||
+++ b/drivers/media/tuners/si2157.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Silicon Labs Si2146/2147/2148/2157/2158 silicon tuner driver
|
||||
+ * Silicon Labs Si2141/2146/2147/2148/2157/2158 silicon tuner driver
|
||||
*
|
||||
* Copyright (C) 2014 Antti Palosaari <crope@iki.fi>
|
||||
*
|
||||
@@ -56,14 +56,20 @@ static int si2157_cmd_execute(struct i2c_client *client, struct si2157_cmd *cmd)
|
||||
break;
|
||||
}
|
||||
@ -826,11 +833,28 @@ index a08d8fe..26b1c3d 100644
|
||||
/* power up */
|
||||
if (dev->chiptype == SI2157_CHIPTYPE_SI2146) {
|
||||
memcpy(cmd.args, "\xc0\x05\x01\x00\x00\x0b\x00\x00\x01", 9);
|
||||
@@ -230,6 +235,28 @@ skip_fw_download:
|
||||
@@ -230,6 +235,45 @@ skip_fw_download:
|
||||
|
||||
dev_info(&client->dev, "firmware version: %c.%c.%d\n",
|
||||
cmd.args[6], cmd.args[7], cmd.args[8]);
|
||||
+
|
||||
+ if (dev->chiptype == SI2157_CHIPTYPE_SI2141) {
|
||||
+ /* set clock */
|
||||
+ memcpy(cmd.args, "\xc0\x00\x0d", 3);
|
||||
+ cmd.wlen = 3;
|
||||
+ cmd.rlen = 1;
|
||||
+ ret = si2157_cmd_execute(client, &cmd);
|
||||
+ if (ret)
|
||||
+ goto err;
|
||||
+ /* setup PIN */
|
||||
+ memcpy(cmd.args, "\x12\x80\x80\x85\x00\x81\x00", 7);
|
||||
+ cmd.wlen = 7;
|
||||
+ cmd.rlen = 7;
|
||||
+ ret = si2157_cmd_execute(client, &cmd);
|
||||
+ if (ret)
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
+ /* enable tuner status flags */
|
||||
+ memcpy(cmd.args, "\x14\x00\x01\x05\x01\x00", 6);
|
||||
+ cmd.wlen = 6;
|
||||
@ -855,7 +879,7 @@ index a08d8fe..26b1c3d 100644
|
||||
warm:
|
||||
/* init statistics in order signal app which are supported */
|
||||
c->strength.len = 1;
|
||||
@@ -274,6 +301,84 @@ err:
|
||||
@@ -274,6 +318,84 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -940,7 +964,7 @@ index a08d8fe..26b1c3d 100644
|
||||
static int si2157_set_params(struct dvb_frontend *fe)
|
||||
{
|
||||
struct i2c_client *client = fe->tuner_priv;
|
||||
@@ -344,7 +449,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
@@ -344,7 +466,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
@ -949,7 +973,7 @@ index a08d8fe..26b1c3d 100644
|
||||
if (if_frequency != dev->if_frequency) {
|
||||
memcpy(cmd.args, "\x14\x00\x06\x07", 4);
|
||||
cmd.args[4] = (if_frequency / 1000) & 0xff;
|
||||
@@ -358,7 +463,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
@@ -358,7 +480,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
dev->if_frequency = if_frequency;
|
||||
}
|
||||
|
||||
@ -958,7 +982,7 @@ index a08d8fe..26b1c3d 100644
|
||||
memcpy(cmd.args, "\x41\x00\x00\x00\x00\x00\x00\x00", 8);
|
||||
cmd.args[4] = (c->frequency >> 0) & 0xff;
|
||||
cmd.args[5] = (c->frequency >> 8) & 0xff;
|
||||
@@ -370,19 +475,293 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
@@ -370,24 +492,298 @@ static int si2157_set_params(struct dvb_frontend *fe)
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
@ -967,15 +991,15 @@ index a08d8fe..26b1c3d 100644
|
||||
+
|
||||
+ si2157_tune_wait(client, 1); /* wait to complete, ignore any errors */
|
||||
+
|
||||
return 0;
|
||||
err:
|
||||
+ return 0;
|
||||
+err:
|
||||
+ dev->bandwidth = 0;
|
||||
+ dev->frequency = 0;
|
||||
+ dev->if_frequency = 0;
|
||||
dev_dbg(&client->dev, "failed=%d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ dev_dbg(&client->dev, "failed=%d\n", ret);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int si2157_set_analog_params(struct dvb_frontend *fe,
|
||||
+ struct analog_parameters *params)
|
||||
+{
|
||||
@ -1178,15 +1202,15 @@ index a08d8fe..26b1c3d 100644
|
||||
+
|
||||
+ si2157_tune_wait(client, 0); /* wait to complete, ignore any errors */
|
||||
+
|
||||
+ return 0;
|
||||
+err:
|
||||
return 0;
|
||||
err:
|
||||
+ dev->bandwidth = 0;
|
||||
+ dev->frequency = 0;
|
||||
+ dev->if_frequency = 0;
|
||||
+ dev_dbg(&client->dev, "failed=%d\n", ret);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
dev_dbg(&client->dev, "failed=%d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int si2157_get_frequency(struct dvb_frontend *fe, u32 *frequency)
|
||||
+{
|
||||
+ struct i2c_client *client = fe->tuner_priv;
|
||||
@ -1215,9 +1239,9 @@ index a08d8fe..26b1c3d 100644
|
||||
- *frequency = dev->if_frequency;
|
||||
+ *frequency = dev->if_frequency & ~1; /* strip analog IF indicator bit */
|
||||
+ dev_info(&client->dev, "%s: if_frequency=%u\n", __func__, *frequency);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int si2157_get_rf_strength(struct dvb_frontend *fe, u16 *rssi)
|
||||
+{
|
||||
+ struct i2c_client *client = fe->tuner_priv;
|
||||
@ -1246,14 +1270,20 @@ index a08d8fe..26b1c3d 100644
|
||||
+ dev_dbg(&client->dev, "%s: strength=%d rssi=%u\n",
|
||||
+ __func__, (s8)cmd.args[3], *rssi);
|
||||
+
|
||||
return 0;
|
||||
+ return 0;
|
||||
+err:
|
||||
+ dev_dbg(&client->dev, "failed=%d\n", ret);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
+}
|
||||
+
|
||||
static const struct dvb_tuner_ops si2157_ops = {
|
||||
@@ -395,7 +774,12 @@ static const struct dvb_tuner_ops si2157_ops = {
|
||||
.info = {
|
||||
- .name = "Silicon Labs Si2141/Si2146/2147/2148/2157/2158",
|
||||
+ .name = "Silicon Labs Si2141/2146/2147/2148/2157/2158",
|
||||
.frequency_min_hz = 42 * MHz,
|
||||
.frequency_max_hz = 870 * MHz,
|
||||
},
|
||||
@@ -395,7 +791,12 @@ static const struct dvb_tuner_ops si2157_ops = {
|
||||
.init = si2157_init,
|
||||
.sleep = si2157_sleep,
|
||||
.set_params = si2157_set_params,
|
||||
@ -1267,7 +1297,7 @@ index a08d8fe..26b1c3d 100644
|
||||
};
|
||||
|
||||
static void si2157_stat_work(struct work_struct *work)
|
||||
@@ -455,7 +839,7 @@ static int si2157_probe(struct i2c_client *client,
|
||||
@@ -455,7 +856,7 @@ static int si2157_probe(struct i2c_client *client,
|
||||
cmd.wlen = 0;
|
||||
cmd.rlen = 1;
|
||||
ret = si2157_cmd_execute(client, &cmd);
|
||||
@ -1277,10 +1307,10 @@ index a08d8fe..26b1c3d 100644
|
||||
|
||||
memcpy(&fe->ops.tuner_ops, &si2157_ops, sizeof(struct dvb_tuner_ops));
|
||||
diff --git a/drivers/media/tuners/si2157_priv.h b/drivers/media/tuners/si2157_priv.h
|
||||
index e6436f7..2a67c1b 100644
|
||||
index 50f8630..1e5ce5b 100644
|
||||
--- a/drivers/media/tuners/si2157_priv.h
|
||||
+++ b/drivers/media/tuners/si2157_priv.h
|
||||
@@ -30,6 +30,8 @@ struct si2157_dev {
|
||||
@@ -37,6 +37,8 @@ struct si2157_dev {
|
||||
u8 chiptype;
|
||||
u8 if_port;
|
||||
u32 if_frequency;
|
||||
@ -1351,7 +1381,7 @@ index fdd3c22..25aa7bb 100644
|
||||
break;
|
||||
|
||||
diff --git a/drivers/media/usb/cx231xx/cx231xx-video.c b/drivers/media/usb/cx231xx/cx231xx-video.c
|
||||
index f7fcd73..c09b6d7 100644
|
||||
index 0d451c4..d5e51a5 100644
|
||||
--- a/drivers/media/usb/cx231xx/cx231xx-video.c
|
||||
+++ b/drivers/media/usb/cx231xx/cx231xx-video.c
|
||||
@@ -1293,7 +1293,7 @@ int cx231xx_s_frequency(struct file *file, void *priv,
|
||||
@ -1398,7 +1428,7 @@ index f7fcd73..c09b6d7 100644
|
||||
if (dev->norm & (V4L2_STD_MN | V4L2_STD_NTSC_443))
|
||||
if_frequency = 5400000; /*5.4MHz */
|
||||
else if (dev->norm & V4L2_STD_B)
|
||||
@@ -1566,8 +1582,19 @@ int cx231xx_querycap(struct file *file, void *priv,
|
||||
@@ -1584,8 +1600,19 @@ int cx231xx_querycap(struct file *file, void *priv,
|
||||
else
|
||||
cap->device_caps |= V4L2_CAP_VIDEO_CAPTURE;
|
||||
}
|
||||
@ -1419,7 +1449,7 @@ index f7fcd73..c09b6d7 100644
|
||||
cap->capabilities = cap->device_caps | V4L2_CAP_READWRITE |
|
||||
V4L2_CAP_VBI_CAPTURE | V4L2_CAP_VIDEO_CAPTURE |
|
||||
V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS;
|
||||
@@ -2172,10 +2199,20 @@ static void cx231xx_vdev_init(struct cx231xx *dev,
|
||||
@@ -2191,10 +2218,20 @@ static void cx231xx_vdev_init(struct cx231xx *dev,
|
||||
|
||||
video_set_drvdata(vfd, dev);
|
||||
if (dev->tuner_type == TUNER_ABSENT) {
|
||||
|
@ -0,0 +1,217 @@
|
||||
From: Thomas Hollstegge <thomas.hollstegge@gmail.com>
|
||||
[v3] media: dvbsky: Add support for MyGica T230C v2
|
||||
https://lore.kernel.org/patchwork/cover/904817/
|
||||
|
||||
diff --git a/drivers/media/dvb-frontends/si2168.c b/drivers/media/dvb-frontends/si2168.c
|
||||
index 4d43424..3402b96 100644
|
||||
--- a/drivers/media/dvb-frontends/si2168.c
|
||||
+++ b/drivers/media/dvb-frontends/si2168.c
|
||||
@@ -96,13 +96,15 @@ static int si2168_ts_bus_ctrl(struct dvb_frontend *fe, int acquire)
|
||||
dev_dbg(&client->dev, "%s acquire: %d\n", __func__, acquire);
|
||||
|
||||
/* set TS_MODE property */
|
||||
- memcpy(cmd.args, "\x14\x00\x01\x10\x10\x00", 6);
|
||||
+ memcpy(cmd.args, "\x14\x00\x01\x10\x00\x00", 6);
|
||||
if (acquire)
|
||||
cmd.args[4] |= dev->ts_mode;
|
||||
else
|
||||
cmd.args[4] |= SI2168_TS_TRISTATE;
|
||||
if (dev->ts_clock_gapped)
|
||||
cmd.args[4] |= 0x40;
|
||||
+ cmd.args[4] |= (dev->ts_clock_mode & 0x03) << 4;
|
||||
+
|
||||
cmd.wlen = 6;
|
||||
cmd.rlen = 4;
|
||||
ret = si2168_cmd_execute(client, &cmd);
|
||||
@@ -644,6 +646,18 @@ static int si2168_set_frontend(struct dvb_frontend *fe)
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
+ /* set TS frequency */
|
||||
+ if (dev->ts_clock_freq) {
|
||||
+ memcpy(cmd.args, "\x14\x00\x0d\x10", 4);
|
||||
+ cmd.args[4] = ((dev->ts_clock_freq / 10000) >> 0) & 0xff;
|
||||
+ cmd.args[5] = ((dev->ts_clock_freq / 10000) >> 8) & 0xff;
|
||||
+ cmd.wlen = 6;
|
||||
+ cmd.rlen = 4;
|
||||
+ ret = si2168_cmd_execute(client, &cmd);
|
||||
+ if (ret)
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
memcpy(cmd.args, "\x14\x00\x08\x10\xd7\x05", 6);
|
||||
cmd.args[5] |= dev->ts_clock_inv ? 0x00 : 0x10;
|
||||
cmd.wlen = 6;
|
||||
@@ -1057,6 +1071,10 @@ static int si2168_probe(struct i2c_client *client,
|
||||
dev->ts_mode = config->ts_mode;
|
||||
dev->ts_clock_inv = config->ts_clock_inv;
|
||||
dev->ts_clock_gapped = config->ts_clock_gapped;
|
||||
+ dev->ts_clock_mode = config->ts_clock_mode;
|
||||
+ if (dev->ts_clock_mode == 0)
|
||||
+ dev->ts_clock_mode = SI2168_TS_CLOCK_MODE_AUTO_ADAPT;
|
||||
+ dev->ts_clock_freq = config->ts_clock_freq;
|
||||
dev->spectral_inversion = config->spectral_inversion;
|
||||
|
||||
dev_info(&client->dev, "Silicon Labs Si2168-%c%d%d successfully identified\n",
|
||||
diff --git a/drivers/media/dvb-frontends/si2168.h b/drivers/media/dvb-frontends/si2168.h
|
||||
index d519edd..3f52ee8 100644
|
||||
--- a/drivers/media/dvb-frontends/si2168.h
|
||||
+++ b/drivers/media/dvb-frontends/si2168.h
|
||||
@@ -47,6 +47,14 @@ struct si2168_config {
|
||||
/* TS clock gapped */
|
||||
bool ts_clock_gapped;
|
||||
|
||||
+ /* TS clock mode */
|
||||
+#define SI2168_TS_CLOCK_MODE_AUTO_ADAPT 0x01
|
||||
+#define SI2168_TS_CLOCK_MODE_MANUAL 0x02
|
||||
+ u8 ts_clock_mode;
|
||||
+
|
||||
+ /* TS clock frequency (for manual mode) */
|
||||
+ u32 ts_clock_freq;
|
||||
+
|
||||
/* Inverted spectrum */
|
||||
bool spectral_inversion;
|
||||
};
|
||||
diff --git a/drivers/media/dvb-frontends/si2168_priv.h b/drivers/media/dvb-frontends/si2168_priv.h
|
||||
index 2d362e1..8173d6c 100644
|
||||
--- a/drivers/media/dvb-frontends/si2168_priv.h
|
||||
+++ b/drivers/media/dvb-frontends/si2168_priv.h
|
||||
@@ -48,6 +48,8 @@ struct si2168_dev {
|
||||
u8 ts_mode;
|
||||
bool ts_clock_inv;
|
||||
bool ts_clock_gapped;
|
||||
+ u8 ts_clock_mode;
|
||||
+ u32 ts_clock_freq;
|
||||
bool spectral_inversion;
|
||||
};
|
||||
|
||||
diff --git a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2/dvbsky.c
|
||||
index e28bd88..4a4c6ae 100644
|
||||
--- a/drivers/media/usb/dvb-usb-v2/dvbsky.c
|
||||
+++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c
|
||||
@@ -583,6 +583,66 @@ static int dvbsky_mygica_t230c_attach(struct dvb_usb_adapter *adap)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int dvbsky_mygica_t230c_v2_attach(struct dvb_usb_adapter *adap)
|
||||
+{
|
||||
+ struct dvbsky_state *state = adap_to_priv(adap);
|
||||
+ struct dvb_usb_device *d = adap_to_d(adap);
|
||||
+ struct i2c_adapter *i2c_adapter;
|
||||
+ struct i2c_client *client_demod, *client_tuner;
|
||||
+ struct i2c_board_info info;
|
||||
+ struct si2168_config si2168_config;
|
||||
+ struct si2157_config si2157_config;
|
||||
+
|
||||
+ /* attach demod */
|
||||
+ memset(&si2168_config, 0, sizeof(si2168_config));
|
||||
+ si2168_config.i2c_adapter = &i2c_adapter;
|
||||
+ si2168_config.fe = &adap->fe[0];
|
||||
+ si2168_config.ts_mode = SI2168_TS_PARALLEL;
|
||||
+ si2168_config.ts_clock_inv = 1;
|
||||
+ si2168_config.ts_clock_mode = SI2168_TS_CLOCK_MODE_MANUAL;
|
||||
+ si2168_config.ts_clock_freq = 10000000;
|
||||
+ memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
+ strlcpy(info.type, "si2168", sizeof(info.type));
|
||||
+ info.addr = 0x64;
|
||||
+ info.platform_data = &si2168_config;
|
||||
+
|
||||
+ request_module("si2168");
|
||||
+ client_demod = i2c_new_device(&d->i2c_adap, &info);
|
||||
+ if (!client_demod || !client_demod->dev.driver)
|
||||
+ goto fail_demod_device;
|
||||
+ if (!try_module_get(client_demod->dev.driver->owner))
|
||||
+ goto fail_demod_module;
|
||||
+
|
||||
+ /* attach tuner */
|
||||
+ memset(&si2157_config, 0, sizeof(si2157_config));
|
||||
+ si2157_config.fe = adap->fe[0];
|
||||
+ si2157_config.if_port = 0;
|
||||
+ memset(&info, 0, sizeof(struct i2c_board_info));
|
||||
+ strlcpy(info.type, "si2141", sizeof(info.type));
|
||||
+ info.addr = 0x60;
|
||||
+ info.platform_data = &si2157_config;
|
||||
+
|
||||
+ request_module("si2157");
|
||||
+ client_tuner = i2c_new_device(i2c_adapter, &info);
|
||||
+ if (!client_tuner || !client_tuner->dev.driver)
|
||||
+ goto fail_tuner_device;
|
||||
+ if (!try_module_get(client_tuner->dev.driver->owner))
|
||||
+ goto fail_tuner_module;
|
||||
+
|
||||
+ state->i2c_client_demod = client_demod;
|
||||
+ state->i2c_client_tuner = client_tuner;
|
||||
+ return 0;
|
||||
+
|
||||
+fail_tuner_module:
|
||||
+ i2c_unregister_device(client_tuner);
|
||||
+fail_tuner_device:
|
||||
+ module_put(client_demod->dev.driver->owner);
|
||||
+fail_demod_module:
|
||||
+ i2c_unregister_device(client_demod);
|
||||
+fail_demod_device:
|
||||
+ return -ENODEV;
|
||||
+}
|
||||
+
|
||||
|
||||
static int dvbsky_identify_state(struct dvb_usb_device *d, const char **name)
|
||||
{
|
||||
@@ -762,6 +822,33 @@ static struct dvb_usb_device_properties mygica_t230c_props = {
|
||||
}
|
||||
};
|
||||
|
||||
+static struct dvb_usb_device_properties mygica_t230c_v2_props = {
|
||||
+ .driver_name = KBUILD_MODNAME,
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .adapter_nr = adapter_nr,
|
||||
+ .size_of_priv = sizeof(struct dvbsky_state),
|
||||
+
|
||||
+ .generic_bulk_ctrl_endpoint = 0x01,
|
||||
+ .generic_bulk_ctrl_endpoint_response = 0x81,
|
||||
+ .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY,
|
||||
+
|
||||
+ .i2c_algo = &dvbsky_i2c_algo,
|
||||
+ .frontend_attach = dvbsky_mygica_t230c_v2_attach,
|
||||
+ .init = dvbsky_init,
|
||||
+ .get_rc_config = dvbsky_get_rc_config,
|
||||
+ .streaming_ctrl = dvbsky_streaming_ctrl,
|
||||
+ .identify_state = dvbsky_identify_state,
|
||||
+ .exit = dvbsky_exit,
|
||||
+
|
||||
+ .num_adapters = 1,
|
||||
+ .adapter = {
|
||||
+ {
|
||||
+ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096),
|
||||
+ }
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+
|
||||
static const struct usb_device_id dvbsky_id_table[] = {
|
||||
{ DVB_USB_DEVICE(0x0572, 0x6831,
|
||||
&dvbsky_s960_props, "DVBSky S960/S860", RC_MAP_DVBSKY) },
|
||||
@@ -797,6 +884,9 @@ static const struct usb_device_id dvbsky_id_table[] = {
|
||||
{ DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C,
|
||||
&mygica_t230c_props, "MyGica Mini DVB-T2 USB Stick T230C",
|
||||
RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C_V2,
|
||||
+ &mygica_t230c_v2_props, "MyGica Mini DVB-T2 USB Stick T230C v2",
|
||||
+ RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, dvbsky_id_table);
|
||||
diff --git a/include/media/dvb-usb-ids.h b/include/media/dvb-usb-ids.h
|
||||
index f9e73b4..d606248 100644
|
||||
--- a/include/media/dvb-usb-ids.h
|
||||
+++ b/include/media/dvb-usb-ids.h
|
||||
@@ -387,6 +387,7 @@
|
||||
#define USB_PID_MYGICA_D689 0xd811
|
||||
#define USB_PID_MYGICA_T230 0xc688
|
||||
#define USB_PID_MYGICA_T230C 0xc689
|
||||
+#define USB_PID_MYGICA_T230C_V2 0xc68a
|
||||
#define USB_PID_ELGATO_EYETV_DIVERSITY 0x0011
|
||||
#define USB_PID_ELGATO_EYETV_DTT 0x0021
|
||||
#define USB_PID_ELGATO_EYETV_DTT_2 0x003f
|
||||
--
|
||||
2.17.1
|
||||
|
@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="dvb-latest"
|
||||
PKG_VERSION="9f419c414672676f63e85a61ea99df0ddcd6e9a7"
|
||||
PKG_SHA256="284026f37db8880247f94e8fb763107c47ac44460d1b7819e076c61ccec9b86c"
|
||||
PKG_VERSION="a8aef9cea0a4a2f3ea86c0b37bd6a1378018c0c1"
|
||||
PKG_SHA256="a26566b1f8ad52f2a1b3c60f0ee8862702e51e2a7bc9e5385999137db0da3fe3"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://git.linuxtv.org/media_build.git"
|
||||
PKG_URL="https://git.linuxtv.org/media_build.git/snapshot/${PKG_VERSION}.tar.gz"
|
||||
|
Loading…
x
Reference in New Issue
Block a user