diff options
author | Angela Stegmaier <angelabaker@ti.com> | 2010-07-27 16:06:49 -0500 |
---|---|---|
committer | Ricardo Perez Olivares <x0081762@ti.com> | 2010-09-14 19:27:03 -0500 |
commit | c18840e0bfd0c8b15754e58a4c7f8cd1071ec712 (patch) | |
tree | 6f7310d167a2e88d8870af8bcc75bd177cbdee73 /drivers/media | |
parent | 9c89e8f9984073a63b920829923195871d94d10a (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.c | 29 |
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: |