media: dvb-frontends/dvb-pll: fix module ref-counting
authorAkihiro Tsukada <tskd08@gmail.com>
Sun, 10 Jun 2018 14:49:15 +0000 (10:49 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 30 Jul 2018 12:51:06 +0000 (08:51 -0400)
dvb-pll module was 'put' twice on exit:
once by dvb_frontend_detach() and another by dvb_module_release().

Signed-off-by: Akihiro Tsukada <tskd08@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/dvb-frontends/dvb-pll.c

index e3894ff..4a66342 100644 (file)
@@ -884,6 +884,17 @@ dvb_pll_probe(struct i2c_client *client, const struct i2c_device_id *id)
        if (!dvb_pll_attach(fe, client->addr, client->adapter, desc_id))
                return -ENOMEM;
 
+       /*
+        * Unset tuner_ops.release (== dvb_pll_release)
+        * which has been just set in the above dvb_pll_attach(),
+        * because if tuner_ops.release was left defined,
+        * this module would be 'put' twice on exit:
+        * once by dvb_frontend_detach() and another by dvb_module_release().
+        *
+        * dvb_pll_release is instead executed in the i2c driver's .remove(),
+        * keeping dvb_pll_attach untouched for legacy (dvb_attach) drivers.
+        */
+       fe->ops.tuner_ops.release = NULL;
        dev_info(&client->dev, "DVB Simple Tuner attached.\n");
        return 0;
 }