Commit a0119159 authored by Peter Rosin's avatar Peter Rosin Committed by Wolfram Sang

[media] rtl2830: convert to use an explicit i2c mux core

Allocate an explicit i2c mux core to handle parent and child adapters
etc. Update the select op to be in terms of the i2c mux core instead
of the child adapter.
Tested-by: default avatarAntti Palosaari <crope@iki.fi>
Reviewed-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarPeter Rosin <peda@axentia.se>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
parent e00fed40
...@@ -677,9 +677,9 @@ static int rtl2830_pid_filter(struct dvb_frontend *fe, u8 index, u16 pid, int on ...@@ -677,9 +677,9 @@ static int rtl2830_pid_filter(struct dvb_frontend *fe, u8 index, u16 pid, int on
* adapter lock is already taken by tuner driver. * adapter lock is already taken by tuner driver.
* Gate is closed automatically after single I2C transfer. * Gate is closed automatically after single I2C transfer.
*/ */
static int rtl2830_select(struct i2c_adapter *adap, void *mux_priv, u32 chan_id) static int rtl2830_select(struct i2c_mux_core *muxc, u32 chan_id)
{ {
struct i2c_client *client = mux_priv; struct i2c_client *client = i2c_mux_priv(muxc);
struct rtl2830_dev *dev = i2c_get_clientdata(client); struct rtl2830_dev *dev = i2c_get_clientdata(client);
int ret; int ret;
...@@ -712,7 +712,7 @@ static struct i2c_adapter *rtl2830_get_i2c_adapter(struct i2c_client *client) ...@@ -712,7 +712,7 @@ static struct i2c_adapter *rtl2830_get_i2c_adapter(struct i2c_client *client)
dev_dbg(&client->dev, "\n"); dev_dbg(&client->dev, "\n");
return dev->adapter; return dev->muxc->adapter[0];
} }
/* /*
...@@ -865,12 +865,16 @@ static int rtl2830_probe(struct i2c_client *client, ...@@ -865,12 +865,16 @@ static int rtl2830_probe(struct i2c_client *client,
goto err_regmap_exit; goto err_regmap_exit;
/* create muxed i2c adapter for tuner */ /* create muxed i2c adapter for tuner */
dev->adapter = i2c_add_mux_adapter(client->adapter, &client->dev, dev->muxc = i2c_mux_alloc(client->adapter, &client->dev, 1, 0, 0,
client, 0, 0, 0, rtl2830_select, NULL); rtl2830_select, NULL);
if (dev->adapter == NULL) { if (!dev->muxc) {
ret = -ENODEV; ret = -ENOMEM;
goto err_regmap_exit; goto err_regmap_exit;
} }
dev->muxc->priv = client;
ret = i2c_mux_add_adapter(dev->muxc, 0, 0, 0);
if (ret)
goto err_regmap_exit;
/* create dvb frontend */ /* create dvb frontend */
memcpy(&dev->fe.ops, &rtl2830_ops, sizeof(dev->fe.ops)); memcpy(&dev->fe.ops, &rtl2830_ops, sizeof(dev->fe.ops));
...@@ -903,7 +907,7 @@ static int rtl2830_remove(struct i2c_client *client) ...@@ -903,7 +907,7 @@ static int rtl2830_remove(struct i2c_client *client)
/* stop statistics polling */ /* stop statistics polling */
cancel_delayed_work_sync(&dev->stat_work); cancel_delayed_work_sync(&dev->stat_work);
i2c_del_mux_adapter(dev->adapter); i2c_mux_del_adapters(dev->muxc);
regmap_exit(dev->regmap); regmap_exit(dev->regmap);
kfree(dev); kfree(dev);
......
...@@ -29,7 +29,7 @@ struct rtl2830_dev { ...@@ -29,7 +29,7 @@ struct rtl2830_dev {
struct rtl2830_platform_data *pdata; struct rtl2830_platform_data *pdata;
struct i2c_client *client; struct i2c_client *client;
struct regmap *regmap; struct regmap *regmap;
struct i2c_adapter *adapter; struct i2c_mux_core *muxc;
struct dvb_frontend fe; struct dvb_frontend fe;
bool sleeping; bool sleeping;
unsigned long filters; unsigned long filters;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment