summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorAngela Stegmaier <angelabaker@ti.com>2010-07-27 16:06:49 -0500
committerRicardo Perez Olivares <x0081762@ti.com>2010-09-14 19:27:03 -0500
commitc18840e0bfd0c8b15754e58a4c7f8cd1071ec712 (patch)
tree6f7310d167a2e88d8870af8bcc75bd177cbdee73 /drivers/media
parent9c89e8f9984073a63b920829923195871d94d10a (diff)
TILER: notifier callback mechanism for events
This patch adds a tiler notifier callback mechanism for events. This covers file close events. Signed-off-by: Angela Stegmaier <angelabaker@ti.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/tiler/tiler.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/drivers/media/video/tiler/tiler.c b/drivers/media/video/tiler/tiler.c
index 2b8292da4467..567e62073d38 100644
--- a/drivers/media/video/tiler/tiler.c
+++ b/drivers/media/video/tiler/tiler.c
@@ -42,6 +42,8 @@
struct tiler_dev {
struct cdev cdev;
+
+ struct blocking_notifier_head notifier;
};
struct platform_driver tiler_driver_ldm = {
@@ -1402,6 +1404,28 @@ s32 tiler_reserve(u32 n, struct tiler_buf_info *b)
}
EXPORT_SYMBOL(tiler_reserve);
+static int tiler_notify_event(int event, void *data)
+{
+ return blocking_notifier_call_chain(&tiler_device->notifier,
+ event, data);
+}
+
+int tiler_reg_notifier(struct notifier_block *nb)
+{
+ if (!nb)
+ return -EINVAL;
+ return blocking_notifier_chain_register(&tiler_device->notifier, nb);
+}
+EXPORT_SYMBOL(tiler_reg_notifier);
+
+int tiler_unreg_notifier(struct notifier_block *nb)
+{
+ if (!nb)
+ return -EINVAL;
+ return blocking_notifier_chain_unregister(&tiler_device->notifier, nb);
+}
+EXPORT_SYMBOL(tiler_unreg_notifier);
+
static void __exit tiler_exit(void)
{
struct process_info *pi = NULL, *pi_ = NULL;
@@ -1462,8 +1486,10 @@ static s32 tiler_release(struct inode *ip, struct file *filp)
mutex_lock(&mtx);
/* free resources if last device in this process */
- if (0 == --pi->refs)
+ if (0 == --pi->refs) {
+ tiler_notify_event(TILER_DEVICE_CLOSE, NULL);
_m_free_process_info(pi);
+ }
mutex_unlock(&mtx);
@@ -1553,6 +1579,7 @@ static s32 __init tiler_init(void)
INIT_LIST_HEAD(&procs);
INIT_LIST_HEAD(&orphan_areas);
INIT_LIST_HEAD(&orphan_onedim);
+ BLOCKING_INIT_NOTIFIER_HEAD(&tiler_device->notifier);
id = 0xda7a000;
error: