/*
 * Copyright  2017- 2019 NXP
 * All rights reserved.
 *
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef _FSL_CODEC_ADAPTER_H_
#define _FSL_CODEC_ADAPTER_H_
#include "fsl_common.h"

#ifdef CODEC_WM8904_ENABLE
#include "fsl_wm8904_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_WM8904_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8904_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8904_HANDLER_SIZE
#endif
#endif /* CODEC_WM8904_ENABLE */

#ifdef CODEC_WM8960_ENABLE
#include "fsl_wm8960_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_WM8960_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8960_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8960_HANDLER_SIZE
#endif

#endif /* CODEC_WM8960_ENABLE */

#ifdef CODEC_WM8524_ENABLE
#include "fsl_wm8524_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_WM8524_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8524_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8524_HANDLER_SIZE
#endif

#endif /* CODEC_WM8524_ENABLE */

#ifdef CODEC_SGTL5000_ENABLE
#include "fsl_sgtl_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_SGTL_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_SGTL_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_SGTL_HANDLER_SIZE
#endif

#endif /* CODEC_SGTL5000_ENABLE */

#ifdef CODEC_DA7212_ENABLE
#include "fsl_da7212_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_DA7212_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_DA7212_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_DA7212_HANDLER_SIZE
#endif

#endif /* CODEC_DA7212_ENABLE */

#ifdef CODEC_CS42888_ENABLE
#include "fsl_cs42888_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_CS42888_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_CS42888_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_CS42888_HANDLER_SIZE
#endif

#endif /* CODEC_CS42888_ENABLE */

#ifdef CODEC_AK4497_ENABLE
#include "fsl_ak4497_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_AK4497_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_AK4497_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_AK4497_HANDLER_SIZE
#endif

#endif /* CODEC_AK4497_ENABLE */

#ifdef CODEC_AK4458_ENABLE
#include "fsl_ak4458_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_AK4458_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_AK4458_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_AK4458_HANDLER_SIZE
#endif

#endif /* CODEC_AK4458_ENABLE */

#ifdef CODEC_TFA9XXX_ENABLE
#include "fsl_tfa9xxx_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_TFA98XX_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_TFA98XX_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_TFA98XX_HANDLER_SIZE
#endif

#endif /* CODEC_TFA9XXX_ENABLE */

#ifdef CODEC_TFA9896_ENABLE
#include "fsl_tfa9896_adapter.h"

#if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_TFA9896_HANDLER_SIZE))
#undef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_TFA9896_HANDLER_SIZE
#endif

#if (!(defined HAL_CODEC_HANDLER_SIZE))
#define HAL_CODEC_HANDLER_SIZE HAL_CODEC_TFA9896_HANDLER_SIZE
#endif

#endif /* CODEC_TFA9896_ENABLE */

#ifndef HAL_CODEC_HANDLER_SIZE
#define HAL_CODEC_HANDLER_SIZE 128U
#endif
/*******************************************************************************
 * Definitions
 ******************************************************************************/
/*! @brief codec type */
enum _codec_type
{
    kCODEC_WM8904,   /*!< wm8904 */
    kCODEC_WM8960,   /*!< wm8960 */
    kCODEC_WM8524,   /*!< wm8524 */
    kCODEC_SGTL5000, /*!< sgtl5000 */
    kCODEC_DA7212,   /*!< da7212 */
    kCODEC_CS42888,  /*!< CS42888 */
    kCODEC_AK4497,   /*!< AK4497 */
    kCODEC_AK4458,   /*!< ak4458 */
    kCODEC_TFA9XXX,  /*!< tfa9xxx */
    kCODEC_TFA9896,  /*!< tfa9896 */
};
/*******************************************************************************
 * API
 ******************************************************************************/

#if defined(__cplusplus)
extern "C" {
#endif
/*!
 * @brief Codec initilization.
 *
 * @param handle codec handle.
 * @param config codec configuration.
 * @return kStatus_Success is success, else initial failed.
 */
status_t HAL_CODEC_Init(void *handle, void *config);

/*!
 * @brief Codec de-initilization.
 *
 * @param handle codec handle.
 * @return kStatus_Success is success, else de-initial failed.
 */
status_t HAL_CODEC_Deinit(void *handle);

/*!
 * @brief set audio data format.
 *
 * @param handle codec handle.
 * @param mclk master clock frequency in HZ.
 * @param sampleRate sample rate in HZ.
 * @param bitWidth bit width.
 * @return kStatus_Success is success, else configure failed.
 */
status_t HAL_CODEC_SetFormat(void *handle, uint32_t mclk, uint32_t sampleRate, uint32_t bitWidth);

/*!
 * @brief set audio codec module volume.
 *
 * @param handle codec handle.
 * @param playChannel audio codec play channel, can be a value or combine value of _codec_play_channel.
 * @param volume volume value, support 0 ~ 100, 0 is mute, 100 is the maximum volume value.
 * @return kStatus_Success is success, else configure failed.
 */
status_t HAL_CODEC_SetVolume(void *handle, uint32_t playChannel, uint32_t volume);

/*!
 * @brief set audio codec module mute.
 *
 * @param handle codec handle.
 * @param playChannel audio codec play channel, can be a value or combine value of _codec_play_channel.
 * @param isMute true is mute, false is unmute.
 * @return kStatus_Success is success, else configure failed.
 */
status_t HAL_CODEC_SetMute(void *handle, uint32_t playChannel, bool isMute);

/*!
 * @brief set audio codec module power.
 *
 * @param handle codec handle.
 * @param module audio codec module.
 * @param powerOn true is power on, false is power down.
 * @return kStatus_Success is success, else configure failed.
 */
status_t HAL_CODEC_SetPower(void *handle, uint32_t module, bool powerOn);

/*!
 * @brief codec set record source.
 *
 * @param handle codec handle.
 * @param recordSource audio codec record source, can be a value or combine value of _codec_record_source.
 *
 * @return kStatus_Success is success, else configure failed.
 */
status_t HAL_CODEC_SetRecord(void *handle, uint32_t recordSource);

/*!
 * @brief codec set record channel.
 *
 * @param handle codec handle.
 * @param leftRecordChannel audio codec record channel, reference _codec_record_channel, can be a value or combine value
 of member in _codec_record_channel.
 * @param rightRecordChannel audio codec record channel, reference _codec_record_channel, can be a value combine of
 member in _codec_record_channel.

 * @return kStatus_Success is success, else configure failed.
 */
status_t HAL_CODEC_SetRecordChannel(void *handle, uint32_t leftRecordChannel, uint32_t rightRecordChannel);

/*!
 * @brief codec set play source.
 *
 * @param handle codec handle.
 * @param playSource audio codec play source, can be a value or combine value of _codec_play_source.
 *
 * @return kStatus_Success is success, else configure failed.
 */
status_t HAL_CODEC_SetPlay(void *handle, uint32_t playSource);

/*!
 * @brief codec module control.
 *
 * This function is used for codec module control, support switch digital interface cmd, can be expand to support codec
 * module specific feature
 *
 * @param handle codec handle.
 * @param cmd module control cmd, reference _codec_module_ctrl_cmd.
 * @param data value to write, when cmd is kCODEC_ModuleRecordSourceChannel, the data should be a value combine
 *  of channel and source, please reference macro CODEC_MODULE_RECORD_SOURCE_CHANNEL(source, LP, LN, RP, RN), reference
 *  codec specific driver for detail configurations.
 * @return kStatus_Success is success, else configure failed.
 */
status_t HAL_CODEC_ModuleControl(void *handle, uint32_t cmd, uint32_t data);

#if defined(__cplusplus)
}
#endif

#endif /* _FSL_CODEC_ADAPTER_H_ */
