|
@@ -67,6 +67,7 @@ struct cx231xx_dvb {
|
|
|
struct dmx_frontend fe_hw;
|
|
|
struct dmx_frontend fe_mem;
|
|
|
struct dvb_net net;
|
|
|
+ struct i2c_client *i2c_client_tuner;
|
|
|
};
|
|
|
|
|
|
static struct s5h1432_config dvico_s5h1432_config = {
|
|
@@ -549,11 +550,18 @@ fail_adapter:
|
|
|
|
|
|
static void unregister_dvb(struct cx231xx_dvb *dvb)
|
|
|
{
|
|
|
+ struct i2c_client *client;
|
|
|
dvb_net_release(&dvb->net);
|
|
|
dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_mem);
|
|
|
dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, &dvb->fe_hw);
|
|
|
dvb_dmxdev_release(&dvb->dmxdev);
|
|
|
dvb_dmx_release(&dvb->demux);
|
|
|
+ client = dvb->i2c_client_tuner;
|
|
|
+ /* remove I2C tuner */
|
|
|
+ if (client) {
|
|
|
+ module_put(client->dev.driver->owner);
|
|
|
+ i2c_unregister_device(client);
|
|
|
+ }
|
|
|
dvb_unregister_frontend(dvb->frontend);
|
|
|
dvb_frontend_detach(dvb->frontend);
|
|
|
dvb_unregister_adapter(&dvb->adapter);
|