/* 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