123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2016, 2018, The Linux Foundation. All rights reserved.
- */
- #ifndef __AUDIO_NOTIFIER_H_
- #define __AUDIO_NOTIFIER_H_
- /* State of the notifier domain */
- enum {
- AUDIO_NOTIFIER_SERVICE_DOWN,
- AUDIO_NOTIFIER_SERVICE_UP
- };
- /* Service order determines connection priority
- * Highest number connected first
- */
- enum {
- AUDIO_NOTIFIER_SSR_SERVICE,
- AUDIO_NOTIFIER_PDR_SERVICE,
- AUDIO_NOTIFIER_MAX_SERVICES
- };
- enum {
- AUDIO_NOTIFIER_ADSP_DOMAIN,
- AUDIO_NOTIFIER_MODEM_DOMAIN,
- AUDIO_NOTIFIER_MAX_DOMAINS
- };
- /* Structure populated in void *data of nb function
- * callback used for audio_notifier_register
- */
- struct audio_notifier_cb_data {
- int service;
- int domain;
- };
- #if IS_ENABLED(CONFIG_MSM_QDSP6_NOTIFIER)
- /*
- * Use audio_notifier_register to register any audio
- * clients who need to be notified of a remote process.
- * This API will determine and register the client with
- * the best available subsystem (SSR or PDR) for that
- * domain (Adsp or Modem). When an event is sent from that
- * domain the notifier block callback function will be called.
- *
- * client_name - A unique user name defined by the client.
- * If the same name is used for multiple calls each will
- * be tracked & called back separately and a single call
- * to deregister will delete them all.
- * domain - Domain the client wants to get events from.
- * AUDIO_NOTIFIER_ADSP_DOMAIN
- * AUDIO_NOTIFIER_MODEM_DOMAIN
- * *nb - Pointer to a notifier block. Provide a callback function
- * to be notified of an even on that domain.
- *
- * nb_func(struct notifier_block *this, unsigned long opcode, void *data)
- * this - pointer to own nb
- * opcode - event from registered domain
- * AUDIO_NOTIFIER_SERVICE_DOWN
- * AUDIO_NOTIFIER_SERVICE_UP
- * *data - pointer to struct audio_notifier_cb_data
- *
- * Returns: Success: 0
- * Error: -#
- */
- int audio_notifier_register(char *client_name, int domain,
- struct notifier_block *nb);
- /*
- * Use audio_notifier_deregister to deregister the clients from
- * all domains registered using audio_notifier_register that
- * match the client name.
- *
- * client_name - Unique user name used in audio_notifier_register.
- * Returns: Success: 0
- * Error: -#
- */
- int audio_notifier_deregister(char *client_name);
- bool audio_notifier_probe_status(void);
- #else
- static inline int audio_notifier_register(char *client_name, int domain,
- struct notifier_block *nb)
- {
- return 0;
- }
- static inline int audio_notifier_deregister(char *client_name)
- {
- return 0;
- }
- static inline bool audio_notifier_probe_status(void)
- {
- return 0;
- }
- #endif /* CONFIG_MSM_QDSP6_NOTIFIER */
- #endif
|