mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
[media] rtl28xxu: switch rtl2832 demod attach to I2C binding
As rtl2832 driver support now I2C binding we will switch to that one. Tested-by: Benjamin Larsson <benjamin@southpole.se> Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
c2c8386f82
commit
83b2f84957
2 changed files with 27 additions and 3 deletions
|
@ -790,7 +790,10 @@ static int rtl2832u_frontend_attach(struct dvb_usb_adapter *adap)
|
|||
int ret;
|
||||
struct dvb_usb_device *d = adap_to_d(adap);
|
||||
struct rtl28xxu_priv *priv = d_to_priv(d);
|
||||
struct rtl2832_platform_data platform_data;
|
||||
const struct rtl2832_config *rtl2832_config;
|
||||
struct i2c_board_info board_info = {};
|
||||
struct i2c_client *client;
|
||||
|
||||
dev_dbg(&d->udev->dev, "%s:\n", __func__);
|
||||
|
||||
|
@ -823,12 +826,26 @@ static int rtl2832u_frontend_attach(struct dvb_usb_adapter *adap)
|
|||
}
|
||||
|
||||
/* attach demodulator */
|
||||
adap->fe[0] = dvb_attach(rtl2832_attach, rtl2832_config, &d->i2c_adap);
|
||||
if (!adap->fe[0]) {
|
||||
platform_data.config = rtl2832_config;
|
||||
platform_data.dvb_frontend = &adap->fe[0];
|
||||
strlcpy(board_info.type, "rtl2832", I2C_NAME_SIZE);
|
||||
board_info.addr = 0x10;
|
||||
board_info.platform_data = &platform_data;
|
||||
request_module("%s", board_info.type);
|
||||
client = i2c_new_device(&d->i2c_adap, &board_info);
|
||||
if (client == NULL || client->dev.driver == NULL) {
|
||||
ret = -ENODEV;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!try_module_get(client->dev.driver->owner)) {
|
||||
i2c_unregister_device(client);
|
||||
ret = -ENODEV;
|
||||
goto err;
|
||||
}
|
||||
|
||||
priv->i2c_client_demod = client;
|
||||
|
||||
/* RTL2832 I2C repeater */
|
||||
priv->demod_i2c_adapter = rtl2832_get_i2c_adapter(adap->fe[0]);
|
||||
|
||||
|
@ -837,7 +854,6 @@ static int rtl2832u_frontend_attach(struct dvb_usb_adapter *adap)
|
|||
|
||||
if (priv->slave_demod) {
|
||||
struct i2c_board_info info = {};
|
||||
struct i2c_client *client;
|
||||
|
||||
/*
|
||||
* We continue on reduced mode, without DVB-T2/C, using master
|
||||
|
@ -1190,6 +1206,13 @@ static void rtl28xxu_exit(struct dvb_usb_device *d)
|
|||
i2c_unregister_device(client);
|
||||
}
|
||||
|
||||
/* remove I2C demod */
|
||||
client = priv->i2c_client_demod;
|
||||
if (client) {
|
||||
module_put(client->dev.driver->owner);
|
||||
i2c_unregister_device(client);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -57,6 +57,7 @@ struct rtl28xxu_priv {
|
|||
u8 page; /* integrated demod active register page */
|
||||
struct i2c_adapter *demod_i2c_adapter;
|
||||
bool rc_active;
|
||||
struct i2c_client *i2c_client_demod;
|
||||
struct i2c_client *i2c_client_tuner;
|
||||
struct i2c_client *i2c_client_slave_demod;
|
||||
#define SLAVE_DEMOD_NONE 0
|
||||
|
|
Loading…
Reference in a new issue