[media] dvb_frontend: add "detach" callback
authorMax Kellermann <max.kellermann@gmail.com>
Tue, 9 Aug 2016 21:32:41 +0000 (18:32 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 18 Nov 2016 17:09:41 +0000 (15:09 -0200)
Prepare for making "release" asynchronous (via kref).  Some operations
may need to be run synchronously in dvb_frontend_detach(), and that's
why we need a "detach" callback.

Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/dvb-core/dvb_frontend.c
drivers/media/dvb-core/dvb_frontend.h

index 2465b0d..667c5e7 100644 (file)
@@ -2756,6 +2756,7 @@ void dvb_frontend_detach(struct dvb_frontend* fe)
        dvb_frontend_invoke_release(fe, fe->ops.release_sec);
        dvb_frontend_invoke_release(fe, fe->ops.tuner_ops.release);
        dvb_frontend_invoke_release(fe, fe->ops.analog_ops.release);
+       dvb_frontend_invoke_release(fe, fe->ops.detach);
        dvb_frontend_invoke_release(fe, fe->ops.release);
 }
 EXPORT_SYMBOL(dvb_frontend_detach);
index 5bfb16b..d535571 100644 (file)
@@ -330,7 +330,11 @@ struct dtv_frontend_properties;
  *
  * @info:              embedded struct dvb_tuner_info with tuner properties
  * @delsys:            Delivery systems supported by the frontend
- * @release:           callback function called when frontend is dettached.
+ * @detach:            callback function called when frontend is detached.
+ *                     drivers should clean up, but not yet free the struct
+ *                     dvb_frontend allocation.
+ * @release:           callback function called when frontend is ready to be
+ *                     freed.
  *                     drivers should free any allocated memory.
  * @release_sec:       callback function requesting that the Satelite Equipment
  *                     Control (SEC) driver to release and free any memory
@@ -415,6 +419,7 @@ struct dvb_frontend_ops {
 
        u8 delsys[MAX_DELSYS];
 
+       void (*detach)(struct dvb_frontend *fe);
        void (*release)(struct dvb_frontend* fe);
        void (*release_sec)(struct dvb_frontend* fe);