/* * Copyright (c) 2021 Huawei Device Co., Ltd. * * HDF is dual licensed: you can use it either under the terms of * the GPL, or the BSD license, at your option. * See the LICENSE file in the root of this repository for complete details. */ #ifndef AUDIO_CODEC_IF_H #define AUDIO_CODEC_IF_H #include "audio_host.h" #include "audio_control.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* __cplusplus */ /** * @brief Defines Codec device name and data. * * @since 1.0 * @version 1.0 */ struct CodecDevice { const char *devCodecName; /**< Codec device name */ struct CodecData *devData; /**< Codec module private data */ struct HdfDeviceObject *device; /**< HDF device */ struct DListHead list; /**< Codec list */ struct OsalMutex mutex; /**< Codec mutex */ }; /** * @brief Defines Codec private data. * * @since 1.0 * @version 1.0 */ struct CodecData { const char *drvCodecName; /**< Codec driver name */ /** * @brief Defines Codec device init. * * @param audioCard Indicates a audio card device. * @param codec Indicates a codec device. * * @return Returns 0 if codec device init success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*Init)(struct AudioCard *audioCard, const struct CodecDevice *codec); /** * @brief Defines Codec device reg read. * * @param virtualAddress Indicates base reg IoRemap address. * @param reg Indicates reg offset. * @param value Indicates read reg value. * * @return Returns 0 if codec device read reg success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*Read)(unsigned long virtualAddress, uint32_t reg, uint32_t *value); /** * @brief Defines Codec device reg write. * * @param virtualAddress Indicates base reg IoRemap address. * @param reg Indicates reg offset. * @param value Indicates write reg value. * * @return Returns 0 if codec device write reg success; returns a non-zero value otherwise. * * @since 1.0 * @version 1.0 */ int32_t (*Write)(unsigned long virtualAddress, uint32_t reg, uint32_t value); struct AudioKcontrol *controls; /**< Codec control structure array pointer */ int numControls; /**< Number of array elements of Codec controls */ struct AudioSapmComponent *sapmComponents; /**< Codec power management component array pointer */ int numSapmComponent; /**< Number of array elements of codec power management component */ const struct AudioSapmRoute *sapmRoutes; /**< Codec power management route array pointer */ int numSapmRoutes; /**< Number of power management route array elements */ unsigned long virtualAddress; /**< Codec base reg IoRemap address */ struct AudioRegCfgData *regConfig; /**< Codec registers configured in HCS */ struct AudioRegCfgGroupNode **regCfgGroup; /**< Codec register group configured in HCS */ }; /** * @brief Defines Codec host in audio driver. * * @since 1.0 * @version 1.0 */ struct CodecHost { struct IDeviceIoService service; /**< Services provided by codec */ struct HdfDeviceObject *device; /**< HDF device */ void *priv; /**< Codec private data interface */ }; #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif /* CODEC_CORE_H */