提交 1dbbdcee 编写于 作者: A Antti Palosaari 提交者: Mauro Carvalho Chehab

[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: NAntti Palosaari <crope@iki.fi>
Signed-off-by: NMauro Carvalho Chehab <mchehab@osg.samsung.com>
上级 a08c3781
...@@ -740,8 +740,23 @@ static int rtl2832u_tuner_callback(struct dvb_usb_device *d, int cmd, int arg) ...@@ -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, static int rtl2832u_frontend_callback(void *adapter_priv, int component,
int cmd, int arg) int cmd, int arg)
{ {
struct i2c_adapter *adap = adapter_priv; struct i2c_adapter *adapter = adapter_priv;
struct dvb_usb_device *d = i2c_get_adapdata(adap); 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", dev_dbg(&d->udev->dev, "%s: component=%d cmd=%d arg=%d\n",
__func__, component, cmd, arg); __func__, component, cmd, arg);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册