mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 04:33:26 +02:00
Added support for tbs6514 V2
This commit is contained in:
@@ -34,7 +34,9 @@
|
|||||||
#include "mxl603.h"
|
#include "mxl603.h"
|
||||||
|
|
||||||
#include "mtv23x.h"
|
#include "mtv23x.h"
|
||||||
|
|
||||||
#include "gx1503.h"
|
#include "gx1503.h"
|
||||||
|
#include "r850.h"
|
||||||
#include "tas2971.h"
|
#include "tas2971.h"
|
||||||
|
|
||||||
#include "stid135.h"
|
#include "stid135.h"
|
||||||
@@ -1442,6 +1444,24 @@ static void tbs6590se_reset_demod(struct tbsecp3_adapter *adapter) //for the cxd
|
|||||||
|
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
static unsigned char tbsecp3_get_hwver(struct tbsecp3_adapter *adapter) //for get the hardware version
|
||||||
|
{
|
||||||
|
struct tbsecp3_dev *dev = adapter->dev;
|
||||||
|
u8 ver = 0;
|
||||||
|
u32 tmp = 0;
|
||||||
|
|
||||||
|
tmp = tbs_read(TBSECP3_GPIO_BASE, 0x68);
|
||||||
|
ver = (u8) (tmp>>8)&0xff;
|
||||||
|
|
||||||
|
return ver;
|
||||||
|
|
||||||
|
}
|
||||||
|
static struct r850_config r850_config={
|
||||||
|
|
||||||
|
.i2c_address = 0x7C,
|
||||||
|
.R850_Xtal=24000,
|
||||||
|
|
||||||
|
};
|
||||||
static int tbsecp3_frontend_attach(struct tbsecp3_adapter *adapter)
|
static int tbsecp3_frontend_attach(struct tbsecp3_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct tbsecp3_dev *dev = adapter->dev;
|
struct tbsecp3_dev *dev = adapter->dev;
|
||||||
@@ -1459,6 +1479,7 @@ static int tbsecp3_frontend_attach(struct tbsecp3_adapter *adapter)
|
|||||||
struct i2c_adapter *i2c = &adapter->i2c->i2c_adap;
|
struct i2c_adapter *i2c = &adapter->i2c->i2c_adap;
|
||||||
struct i2c_client *client_demod, *client_tuner;
|
struct i2c_client *client_demod, *client_tuner;
|
||||||
|
|
||||||
|
|
||||||
adapter->fe = NULL;
|
adapter->fe = NULL;
|
||||||
adapter->fe2 = NULL;
|
adapter->fe2 = NULL;
|
||||||
adapter->i2c_client_demod = NULL;
|
adapter->i2c_client_demod = NULL;
|
||||||
@@ -1956,11 +1977,25 @@ static int tbsecp3_frontend_attach(struct tbsecp3_adapter *adapter)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TBSECP3_BOARD_TBS6514:
|
case TBSECP3_BOARD_TBS6514:
|
||||||
|
|
||||||
memset(&gx1503_config,0,sizeof(gx1503_config));
|
memset(&gx1503_config,0,sizeof(gx1503_config));
|
||||||
|
unsigned char ver=tbsecp3_get_hwver(adapter);
|
||||||
|
if(ver==0x32){
|
||||||
|
dev->info->eeprom_i2c = 2;
|
||||||
|
if(adapter->nr==0)
|
||||||
|
set_mac_address(adapter);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
gx1503_config.i2c_adapter =&i2c;
|
gx1503_config.i2c_adapter =&i2c;
|
||||||
gx1503_config.fe = &adapter->fe;
|
gx1503_config.fe = &adapter->fe;
|
||||||
gx1503_config.clk_freq = 30400;//KHZ
|
gx1503_config.clk_freq = 30400;//KHZ
|
||||||
gx1503_config.ts_mode = 1;
|
if(ver==0x32)
|
||||||
|
gx1503_config.ts_config = 1;
|
||||||
|
else
|
||||||
|
gx1503_config.ts_config = 0;
|
||||||
|
|
||||||
|
gx1503_config.ts_mode = 1;
|
||||||
gx1503_config.i2c_wr_max = 8;
|
gx1503_config.i2c_wr_max = 8;
|
||||||
|
|
||||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||||
@@ -1978,26 +2013,39 @@ static int tbsecp3_frontend_attach(struct tbsecp3_adapter *adapter)
|
|||||||
}
|
}
|
||||||
|
|
||||||
adapter->i2c_client_demod = client_demod;
|
adapter->i2c_client_demod = client_demod;
|
||||||
|
|
||||||
/*attach tuner*/
|
if(ver==0x32)
|
||||||
memset(&si2157_config, 0, sizeof(si2157_config));
|
{
|
||||||
si2157_config.fe = adapter->fe;
|
if (dvb_attach(r850_attach, adapter->fe, &r850_config,
|
||||||
si2157_config.if_port = 0;
|
i2c) == NULL) {
|
||||||
|
dvb_frontend_detach(adapter->fe);
|
||||||
memset(&info, 0, sizeof(struct i2c_board_info));
|
adapter->fe = NULL;
|
||||||
strscpy(info.type, "si2157", I2C_NAME_SIZE);
|
dev_err(&dev->pci_dev->dev,
|
||||||
info.addr = 0x60;
|
"frontend %d tuner attach failed\n",
|
||||||
info.platform_data = &si2157_config;
|
adapter->nr);
|
||||||
request_module(info.type);
|
|
||||||
client_tuner = i2c_new_client_device(i2c, &info);
|
|
||||||
if (!i2c_client_has_driver(client_tuner))
|
|
||||||
goto frontend_atach_fail;
|
goto frontend_atach_fail;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
/*attach tuner*/
|
||||||
|
memset(&si2157_config, 0, sizeof(si2157_config));
|
||||||
|
si2157_config.fe = adapter->fe;
|
||||||
|
si2157_config.if_port = 0;
|
||||||
|
|
||||||
if (!try_module_get(client_tuner->dev.driver->owner)) {
|
memset(&info, 0, sizeof(struct i2c_board_info));
|
||||||
i2c_unregister_device(client_tuner);
|
strscpy(info.type, "si2157", I2C_NAME_SIZE);
|
||||||
goto frontend_atach_fail;
|
info.addr = 0x60;
|
||||||
|
info.platform_data = &si2157_config;
|
||||||
|
request_module(info.type);
|
||||||
|
client_tuner = i2c_new_client_device(i2c, &info);
|
||||||
|
if (!i2c_client_has_driver(client_tuner))
|
||||||
|
goto frontend_atach_fail;
|
||||||
|
|
||||||
|
if (!try_module_get(client_tuner->dev.driver->owner)) {
|
||||||
|
i2c_unregister_device(client_tuner);
|
||||||
|
goto frontend_atach_fail;
|
||||||
|
}
|
||||||
|
adapter->i2c_client_tuner = client_tuner;
|
||||||
}
|
}
|
||||||
adapter->i2c_client_tuner = client_tuner;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TBSECP3_BOARD_TBS6814:
|
case TBSECP3_BOARD_TBS6814:
|
||||||
|
Reference in New Issue
Block a user