[media] em28xx-dvb: fix PCTV 461e tuner I2C binding
Add missing m88ts2022 module reference counts as removing that module is not allowed when it is used by em28xx-dvb module. That same module was not unregistered correctly, fix it too. Error cases validated by returning errors from m88ds3103, m88ts2022 and a8293 probe(). Signed-off-by: Antti Palosaari <crope@iki.fi> Cc: stable@vger.kernel.org Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
418a97cbce
commit
37571b163c
|
@ -1602,6 +1602,7 @@ static int em28xx_dvb_suspend(struct em28xx *dev)
|
||||||
em28xx_info("Suspending DVB extension");
|
em28xx_info("Suspending DVB extension");
|
||||||
if (dev->dvb) {
|
if (dev->dvb) {
|
||||||
struct em28xx_dvb *dvb = dev->dvb;
|
struct em28xx_dvb *dvb = dev->dvb;
|
||||||
|
struct i2c_client *client = dvb->i2c_client_tuner;
|
||||||
|
|
||||||
if (dvb->fe[0]) {
|
if (dvb->fe[0]) {
|
||||||
ret = dvb_frontend_suspend(dvb->fe[0]);
|
ret = dvb_frontend_suspend(dvb->fe[0]);
|
||||||
|
@ -1639,6 +1640,15 @@ static int em28xx_dvb_resume(struct em28xx *dev)
|
||||||
ret = dvb_frontend_resume(dvb->fe[1]);
|
ret = dvb_frontend_resume(dvb->fe[1]);
|
||||||
em28xx_info("fe1 resume %d", ret);
|
em28xx_info("fe1 resume %d", ret);
|
||||||
}
|
}
|
||||||
|
/* remove I2C tuner */
|
||||||
|
if (client) {
|
||||||
|
module_put(client->dev.driver->owner);
|
||||||
|
i2c_unregister_device(client);
|
||||||
|
}
|
||||||
|
|
||||||
|
em28xx_unregister_dvb(dvb);
|
||||||
|
kfree(dvb);
|
||||||
|
dev->dvb = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue