dsp: add blocking call support in event notifier
Add support for blocking call events in event notifier to support functions which require waiting for events. Change-Id: I255c19bc956506ea5076bb5fb1f09327141611a6 Signed-off-by: Ramprasad Katkam <katkam@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
37e3245375
commit
b5528d39f2
@@ -13,6 +13,7 @@
|
|||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
|
||||||
static ATOMIC_NOTIFIER_HEAD(msm_aud_evt_notifier_list);
|
static ATOMIC_NOTIFIER_HEAD(msm_aud_evt_notifier_list);
|
||||||
|
static BLOCKING_NOTIFIER_HEAD(msm_aud_evt_blocking_notifier_list);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* msm_aud_evt_register_client - register a client notifier
|
* msm_aud_evt_register_client - register a client notifier
|
||||||
@@ -43,3 +44,38 @@ int msm_aud_evt_notifier_call_chain(unsigned long val, void *v)
|
|||||||
return atomic_notifier_call_chain(&msm_aud_evt_notifier_list, val, v);
|
return atomic_notifier_call_chain(&msm_aud_evt_notifier_list, val, v);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(msm_aud_evt_notifier_call_chain);
|
EXPORT_SYMBOL_GPL(msm_aud_evt_notifier_call_chain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* msm_aud_evt_blocking_register_client - register a client notifier
|
||||||
|
* @nb: notifier block to callback on events
|
||||||
|
*/
|
||||||
|
int msm_aud_evt_blocking_register_client(struct notifier_block *nb)
|
||||||
|
{
|
||||||
|
return blocking_notifier_chain_register(
|
||||||
|
&msm_aud_evt_blocking_notifier_list, nb);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(msm_aud_evt_blocking_register_client);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* msm_aud_evt_unregister_client - unregister a client notifier
|
||||||
|
* @nb: notifier block to callback on events
|
||||||
|
*/
|
||||||
|
int msm_aud_evt_blocking_unregister_client(struct notifier_block *nb)
|
||||||
|
{
|
||||||
|
return blocking_notifier_chain_unregister(
|
||||||
|
&msm_aud_evt_blocking_notifier_list, nb);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(msm_aud_evt_blocking_unregister_client);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* msm_aud_evt_notifier_call_chain - notify clients of fb_events
|
||||||
|
* @val: event or enum maintained by caller
|
||||||
|
* @v: private data pointer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
int msm_aud_evt_blocking_notifier_call_chain(unsigned long val, void *v)
|
||||||
|
{
|
||||||
|
return blocking_notifier_call_chain(
|
||||||
|
&msm_aud_evt_blocking_notifier_list, val, v);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(msm_aud_evt_blocking_notifier_call_chain);
|
||||||
|
@@ -20,6 +20,9 @@
|
|||||||
int msm_aud_evt_register_client(struct notifier_block *nb);
|
int msm_aud_evt_register_client(struct notifier_block *nb);
|
||||||
int msm_aud_evt_unregister_client(struct notifier_block *nb);
|
int msm_aud_evt_unregister_client(struct notifier_block *nb);
|
||||||
int msm_aud_evt_notifier_call_chain(unsigned long val, void *v);
|
int msm_aud_evt_notifier_call_chain(unsigned long val, void *v);
|
||||||
|
int msm_aud_evt_blocking_register_client(struct notifier_block *nb);
|
||||||
|
int msm_aud_evt_blocking_unregister_client(struct notifier_block *nb);
|
||||||
|
int msm_aud_evt_blocking_notifier_call_chain(unsigned long val, void *v);
|
||||||
#else
|
#else
|
||||||
static inline int msm_aud_evt_register_client(struct notifier_block *nb)
|
static inline int msm_aud_evt_register_client(struct notifier_block *nb)
|
||||||
{
|
{
|
||||||
@@ -35,10 +38,31 @@ static inline int msm_aud_evt_notifier_call_chain(unsigned long val, void *v)
|
|||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int msm_aud_evt_blocking_register_client(
|
||||||
|
struct notifier_block *nb)
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int msm_aud_evt_blocking_unregister_client(
|
||||||
|
struct notifier_block *nb)
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int msm_aud_evt_blocking_notifier_call_chain(
|
||||||
|
unsigned long val, void *v)
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MSM_AUD_DC_EVENT = 1,
|
MSM_AUD_DC_EVENT = 1,
|
||||||
|
SWR_WAKE_IRQ_REGISTER,
|
||||||
|
SWR_WAKE_IRQ_DEREGISTER,
|
||||||
|
SWR_WAKE_IRQ_EVENT,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user