Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83b2f849 authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab
Browse files

[media] rtl28xxu: switch rtl2832 demod attach to I2C binding



As rtl2832 driver support now I2C binding we will switch to that one.

Tested-by: default avatarBenjamin Larsson <benjamin@southpole.se>
Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent c2c8386f
Loading
Loading
Loading
Loading
+26 −3
Original line number Diff line number Diff line
@@ -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;
}

+1 −0
Original line number Diff line number Diff line
@@ -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