mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
[media] rtl28xxu: fix DVB FE callback
DVB FE callback functionality went broken after I moved tuners to demod muxed I2C adapter. That happens because driver state was carried by I2C adapter and when mux is used there is one adapter more in a chain. USB adapter <-> I2C adapter <-> muxed I2C adapter Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
a08c378119
commit
1dbbdceeb6
1 changed files with 17 additions and 2 deletions
|
@ -740,8 +740,23 @@ static int rtl2832u_tuner_callback(struct dvb_usb_device *d, int cmd, int arg)
|
|||
static int rtl2832u_frontend_callback(void *adapter_priv, int component,
|
||||
int cmd, int arg)
|
||||
{
|
||||
struct i2c_adapter *adap = adapter_priv;
|
||||
struct dvb_usb_device *d = i2c_get_adapdata(adap);
|
||||
struct i2c_adapter *adapter = adapter_priv;
|
||||
struct device *parent = adapter->dev.parent;
|
||||
struct i2c_adapter *parent_adapter;
|
||||
struct dvb_usb_device *d;
|
||||
|
||||
/*
|
||||
* All tuners are connected to demod muxed I2C adapter. We have to
|
||||
* resolve its parent adapter in order to get handle for this driver
|
||||
* private data. That is a bit hackish solution, GPIO or direct driver
|
||||
* callback would be better...
|
||||
*/
|
||||
if (parent != NULL && parent->type == &i2c_adapter_type)
|
||||
parent_adapter = to_i2c_adapter(parent);
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
d = i2c_get_adapdata(parent_adapter);
|
||||
|
||||
dev_dbg(&d->udev->dev, "%s: component=%d cmd=%d arg=%d\n",
|
||||
__func__, component, cmd, arg);
|
||||
|
|
Loading…
Reference in a new issue