Commit 6f5f6ee2 authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab
Browse files

[media] rtl2832: add platform data callbacks for exported resources



Add callback for all of those functions which are currently
exported using EXPORT_SYMBOL. That allows us convert every user to
callbacks and eventually all exported symbols could be removed.

Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 15d37f38
Loading
Loading
Loading
Loading
+82 −8
Original line number Diff line number Diff line
@@ -1183,6 +1183,80 @@ static struct dvb_frontend_ops rtl2832_ops = {
	.i2c_gate_ctrl = rtl2832_i2c_gate_ctrl,
};

static struct dvb_frontend *rtl2832_get_dvb_frontend(struct i2c_client *client)
{
	struct rtl2832_priv *dev = i2c_get_clientdata(client);

	dev_dbg(&client->dev, "\n");
	return &dev->fe;
}

static struct i2c_adapter *rtl2832_get_i2c_adapter_(struct i2c_client *client)
{
	struct rtl2832_priv *dev = i2c_get_clientdata(client);

	dev_dbg(&client->dev, "\n");
	return dev->i2c_adapter_tuner;
}

static struct i2c_adapter *rtl2832_get_private_i2c_adapter_(struct i2c_client *client)
{
	struct rtl2832_priv *dev = i2c_get_clientdata(client);

	dev_dbg(&client->dev, "\n");
	return dev->i2c_adapter;
}

static int rtl2832_enable_slave_ts(struct i2c_client *client)
{
	struct rtl2832_priv *dev = i2c_get_clientdata(client);
	int ret;

	dev_dbg(&client->dev, "setting PIP mode\n");

	ret = rtl2832_wr_regs(dev, 0x0c, 1, "\x5f\xff", 2);
	if (ret)
		goto err;

	ret = rtl2832_wr_demod_reg(dev, DVBT_PIP_ON, 0x1);
	if (ret)
		goto err;

	ret = rtl2832_wr_reg(dev, 0xbc, 0, 0x18);
	if (ret)
		goto err;

	ret = rtl2832_wr_reg(dev, 0x22, 0, 0x01);
	if (ret)
		goto err;

	ret = rtl2832_wr_reg(dev, 0x26, 0, 0x1f);
	if (ret)
		goto err;

	ret = rtl2832_wr_reg(dev, 0x27, 0, 0xff);
	if (ret)
		goto err;

	ret = rtl2832_wr_regs(dev, 0x92, 1, "\x7f\xf7\xff", 3);
	if (ret)
		goto err;

	/* soft reset */
	ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x1);
	if (ret)
		goto err;

	ret = rtl2832_wr_demod_reg(dev, DVBT_SOFT_RST, 0x0);
	if (ret)
		goto err;

	return 0;
err:
	dev_dbg(&client->dev, "failed=%d\n", ret);
	return ret;
}

static int rtl2832_probe(struct i2c_client *client,
		const struct i2c_device_id *id)
{
@@ -1195,13 +1269,6 @@ static int rtl2832_probe(struct i2c_client *client,

	dev_dbg(&client->dev, "\n");

	/* Caller really need to provide pointer for frontend we create. */
	if (pdata->dvb_frontend == NULL) {
		dev_err(&client->dev, "frontend pointer not defined\n");
		ret = -EINVAL;
		goto err;
	}

	/* allocate memory for the internal state */
	priv = kzalloc(sizeof(struct rtl2832_priv), GFP_KERNEL);
	if (priv == NULL) {
@@ -1243,8 +1310,15 @@ static int rtl2832_probe(struct i2c_client *client,
	priv->fe.ops.release = NULL;
	priv->fe.demodulator_priv = priv;
	i2c_set_clientdata(client, priv);
	if (pdata->dvb_frontend)
		*pdata->dvb_frontend = &priv->fe;

	/* setup callbacks */
	pdata->get_dvb_frontend = rtl2832_get_dvb_frontend;
	pdata->get_i2c_adapter = rtl2832_get_i2c_adapter_;
	pdata->get_private_i2c_adapter = rtl2832_get_private_i2c_adapter_;
	pdata->enable_slave_ts = rtl2832_enable_slave_ts;

	dev_info(&client->dev, "Realtek RTL2832 successfully attached\n");
	return 0;
err_i2c_del_mux_adapter:
+7 −0
Original line number Diff line number Diff line
@@ -58,6 +58,13 @@ struct rtl2832_platform_data {
	 * returned by driver
	 */
	struct dvb_frontend **dvb_frontend;

	/*
	 */
	struct dvb_frontend* (*get_dvb_frontend)(struct i2c_client *);
	struct i2c_adapter* (*get_i2c_adapter)(struct i2c_client *);
	struct i2c_adapter* (*get_private_i2c_adapter)(struct i2c_client *);
	int (*enable_slave_ts)(struct i2c_client *);
};

#if IS_ENABLED(CONFIG_DVB_RTL2832)