mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
Merge pull request #3583 from trsqr/dvbsky-t9580-dvbt2
linux: Add support for the DVB-T2/C tuner of DVBSky T9580
This commit is contained in:
commit
58110c9ed2
137
packages/linux/patches/3.17.1/linux-225-dvbt2-support-for-dvbsky-t9580.patch
vendored
Normal file
137
packages/linux/patches/3.17.1/linux-225-dvbt2-support-for-dvbsky-t9580.patch
vendored
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
diff -urN b/drivers/media/pci/cx23885/cx23885-dvb.c c/drivers/media/pci/cx23885/cx23885-dvb.c
|
||||||
|
--- b/drivers/media/pci/cx23885/cx23885-dvb.c 2014-10-27 19:08:58.000000000 +0200
|
||||||
|
+++ c/drivers/media/pci/cx23885/cx23885-dvb.c 2014-10-28 08:49:07.456447843 +0200
|
||||||
|
@@ -75,6 +75,8 @@
|
||||||
|
#include "a8293.h"
|
||||||
|
#include "mb86a20s.h"
|
||||||
|
#include "si2165.h"
|
||||||
|
+#include "si2168.h"
|
||||||
|
+#include "si2157.h"
|
||||||
|
|
||||||
|
static unsigned int debug;
|
||||||
|
|
||||||
|
@@ -955,6 +957,12 @@
|
||||||
|
struct videobuf_dvb_frontend *fe0, *fe1 = NULL;
|
||||||
|
int mfe_shared = 0; /* bus not shared by default */
|
||||||
|
int ret;
|
||||||
|
+ struct si2168_config si2168_config;
|
||||||
|
+ struct si2157_config si2157_config;
|
||||||
|
+ struct i2c_board_info info;
|
||||||
|
+ struct i2c_adapter *adapter;
|
||||||
|
+ struct i2c_client *client_demod;
|
||||||
|
+ struct i2c_client *client_tuner;
|
||||||
|
|
||||||
|
/* Get the first frontend */
|
||||||
|
fe0 = videobuf_dvb_get_frontend(&port->frontends, 1);
|
||||||
|
@@ -1589,6 +1597,50 @@
|
||||||
|
break;
|
||||||
|
/* port C */
|
||||||
|
case 2:
|
||||||
|
+ i2c_bus = &dev->i2c_bus[0];
|
||||||
|
+
|
||||||
|
+ /* attach frontend */
|
||||||
|
+ memset(&si2168_config, 0, sizeof(si2168_config));
|
||||||
|
+ si2168_config.i2c_adapter = &adapter;
|
||||||
|
+ si2168_config.fe = &fe0->dvb.frontend;
|
||||||
|
+ si2168_config.ts_mode = SI2168_TS_SERIAL;
|
||||||
|
+ memset(&info, 0, sizeof(struct i2c_board_info));
|
||||||
|
+ strlcpy(info.type, "si2168", I2C_NAME_SIZE);
|
||||||
|
+ info.addr = 0x64;
|
||||||
|
+ info.platform_data = &si2168_config;
|
||||||
|
+ request_module(info.type);
|
||||||
|
+ client_demod = i2c_new_device(&i2c_bus->i2c_adap, &info);
|
||||||
|
+ if (client_demod == NULL ||
|
||||||
|
+ client_demod->dev.driver == NULL)
|
||||||
|
+ goto frontend_detach;
|
||||||
|
+ if (!try_module_get(client_demod->dev.driver->owner)) {
|
||||||
|
+ i2c_unregister_device(client_demod);
|
||||||
|
+ goto frontend_detach;
|
||||||
|
+ }
|
||||||
|
+ port->i2c_client_demod = client_demod;
|
||||||
|
+
|
||||||
|
+ /* attach tuner */
|
||||||
|
+ memset(&si2157_config, 0, sizeof(si2157_config));
|
||||||
|
+ si2157_config.fe = fe0->dvb.frontend;
|
||||||
|
+ memset(&info, 0, sizeof(struct i2c_board_info));
|
||||||
|
+ strlcpy(info.type, "si2157", I2C_NAME_SIZE);
|
||||||
|
+ info.addr = 0x60;
|
||||||
|
+ info.platform_data = &si2157_config;
|
||||||
|
+ request_module(info.type);
|
||||||
|
+ client_tuner = i2c_new_device(adapter, &info);
|
||||||
|
+ if (client_tuner == NULL ||
|
||||||
|
+ client_tuner->dev.driver == NULL) {
|
||||||
|
+ module_put(client_demod->dev.driver->owner);
|
||||||
|
+ i2c_unregister_device(client_demod);
|
||||||
|
+ goto frontend_detach;
|
||||||
|
+ }
|
||||||
|
+ if (!try_module_get(client_tuner->dev.driver->owner)) {
|
||||||
|
+ i2c_unregister_device(client_tuner);
|
||||||
|
+ module_put(client_demod->dev.driver->owner);
|
||||||
|
+ i2c_unregister_device(client_demod);
|
||||||
|
+ goto frontend_detach;
|
||||||
|
+ }
|
||||||
|
+ port->i2c_client_tuner = client_tuner;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
@@ -1818,6 +1870,7 @@
|
||||||
|
int cx23885_dvb_unregister(struct cx23885_tsport *port)
|
||||||
|
{
|
||||||
|
struct videobuf_dvb_frontend *fe0;
|
||||||
|
+ struct i2c_client *client;
|
||||||
|
|
||||||
|
/* FIXME: in an error condition where the we have
|
||||||
|
* an expected number of frontends (attach problem)
|
||||||
|
@@ -1826,6 +1879,21 @@
|
||||||
|
* This comment only applies to future boards IF they
|
||||||
|
* implement MFE support.
|
||||||
|
*/
|
||||||
|
+
|
||||||
|
+ /* remove I2C client for tuner */
|
||||||
|
+ client = port->i2c_client_tuner;
|
||||||
|
+ if (client) {
|
||||||
|
+ module_put(client->dev.driver->owner);
|
||||||
|
+ i2c_unregister_device(client);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* remove I2C client for demodulator */
|
||||||
|
+ client = port->i2c_client_demod;
|
||||||
|
+ if (client) {
|
||||||
|
+ module_put(client->dev.driver->owner);
|
||||||
|
+ i2c_unregister_device(client);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
fe0 = videobuf_dvb_get_frontend(&port->frontends, 1);
|
||||||
|
if (fe0 && fe0->dvb.frontend)
|
||||||
|
videobuf_dvb_unregister_bus(&port->frontends);
|
||||||
|
diff -urN b/drivers/media/pci/cx23885/cx23885.h c/drivers/media/pci/cx23885/cx23885.h
|
||||||
|
--- b/drivers/media/pci/cx23885/cx23885.h 2014-10-27 19:08:58.000000000 +0200
|
||||||
|
+++ c/drivers/media/pci/cx23885/cx23885.h 2014-10-28 08:48:17.700446770 +0200
|
||||||
|
@@ -334,6 +334,9 @@
|
||||||
|
/* Workaround for a temp dvb_frontend that the tuner can attached to */
|
||||||
|
struct dvb_frontend analog_fe;
|
||||||
|
|
||||||
|
+ struct i2c_client *i2c_client_demod;
|
||||||
|
+ struct i2c_client *i2c_client_tuner;
|
||||||
|
+
|
||||||
|
int (*set_frontend)(struct dvb_frontend *fe);
|
||||||
|
};
|
||||||
|
|
||||||
|
diff -urN b/drivers/media/pci/cx23885/Kconfig c/drivers/media/pci/cx23885/Kconfig
|
||||||
|
--- b/drivers/media/pci/cx23885/Kconfig 2014-10-27 19:08:58.000000000 +0200
|
||||||
|
+++ c/drivers/media/pci/cx23885/Kconfig 2014-10-28 08:50:30.804449641 +0200
|
||||||
|
@@ -34,12 +34,14 @@
|
||||||
|
select DVB_A8293 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
select DVB_MB86A20S if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
select DVB_SI2165 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
+ select DVB_SI2168 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
select MEDIA_TUNER_MT2063 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
select MEDIA_TUNER_MT2131 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
select MEDIA_TUNER_XC2028 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
select MEDIA_TUNER_TDA8290 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
select MEDIA_TUNER_TDA18271 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
select MEDIA_TUNER_XC5000 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
+ select MEDIA_TUNER_SI2157 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
select DVB_TUNER_DIB0070 if MEDIA_SUBDRV_AUTOSELECT
|
||||||
|
---help---
|
||||||
|
This is a video4linux driver for Conexant 23885 based
|
Loading…
x
Reference in New Issue
Block a user