Added support for tbs6514 V2

This commit is contained in:
Davin622
2025-03-17 15:54:06 +08:00
parent 7d6cc50725
commit 2a06970f80

View File

@@ -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: