| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. |
| */ |
| |
| #ifndef __AUDIO_PDR_H_ |
| #define __AUDIO_PDR_H_ |
| |
| enum { |
| AUDIO_PDR_DOMAIN_ADSP, |
| AUDIO_PDR_DOMAIN_MAX |
| }; |
| |
| enum { |
| AUDIO_PDR_FRAMEWORK_DOWN, |
| AUDIO_PDR_FRAMEWORK_UP |
| }; |
| |
| #ifdef CONFIG_MSM_QDSP6_PDR |
| |
| /* |
| * Use audio_pdr_register to register with the PDR subsystem this |
| * should be done before module late init otherwise notification |
| * of the AUDIO_PDR_FRAMEWORK_UP cannot be guaranteed. |
| * |
| * *nb - Pointer to a notifier block. Provide a callback function |
| * to be notified once the PDR framework has been initialized. |
| * Callback will receive either the AUDIO_PDR_FRAMEWORK_DOWN |
| * or AUDIO_PDR_FRAMEWORK_UP ioctl depending on the state of |
| * the PDR framework. |
| * |
| * Returns: Success: 0 |
| * Failure: Error code |
| */ |
| int audio_pdr_register(struct notifier_block *nb); |
| int audio_pdr_deregister(struct notifier_block *nb); |
| |
| /* |
| * Use audio_pdr_service_register to register with a PDR service |
| * Function should be called after nb callback registered with |
| * audio_pdr_register has been called back with the |
| * AUDIO_PDR_FRAMEWORK_UP ioctl. |
| * |
| * domain_id - Domain to use, example: AUDIO_PDR_ADSP |
| * *nb - Pointer to a notifier block. Provide a callback function |
| * that will be notified of the state of the domain |
| * requested. The ioctls received by the callback are |
| * defined in service-notifier.h. |
| * |
| * Returns: Success: Client handle |
| * Failure: Pointer error code |
| */ |
| void *audio_pdr_service_register(int domain_id, |
| struct notifier_block *nb, int *curr_state); |
| |
| /* |
| * Use audio_pdr_service_deregister to deregister with a PDR |
| * service that was registered using the audio_pdr_service_register |
| * API. |
| * |
| * *service_handle - Service handle returned by audio_pdr_service_register |
| * *nb - Pointer to the notifier block. Used in the call to |
| * audio_pdr_service_register. |
| * |
| * Returns: Success: Client handle |
| * Failure: Error code |
| */ |
| int audio_pdr_service_deregister(void *service_handle, |
| struct notifier_block *nb); |
| |
| #else |
| |
| static inline int audio_pdr_register(struct notifier_block *nb) |
| { |
| return -ENODEV; |
| } |
| |
| static inline int audio_pdr_deregister(struct notifier_block *nb) |
| { |
| return -ENODEV; |
| } |
| |
| static inline void *audio_pdr_service_register(int domain_id, |
| struct notifier_block *nb, |
| int *curr_state) |
| { |
| return NULL; |
| } |
| |
| static inline int audio_pdr_service_deregister(void *service_handle, |
| struct notifier_block *nb) |
| { |
| return 0; |
| } |
| |
| #endif /* CONFIG_MSM_QDSP6_PDR */ |
| |
| #endif |