/*
 * Copyright (c) 2016, Freescale Semiconductor, Inc.
 * Copyright 2016-2019 NXP
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */
#ifndef _FSL_FLEXCOMM_H_
#define _FSL_FLEXCOMM_H_

#include "fsl_common.h"

/*!
 * @addtogroup flexcomm_driver
 * @{
 */

/*! @name Driver version */
/*@{*/
/*! @brief FlexCOMM driver version 2.0.2. */
#define FSL_FLEXCOMM_DRIVER_VERSION (MAKE_VERSION(2, 0, 2))
/*@}*/

/*! @brief FLEXCOMM peripheral modes. */
typedef enum
{
    FLEXCOMM_PERIPH_NONE,   /*!< No peripheral */
    FLEXCOMM_PERIPH_USART,  /*!< USART peripheral */
    FLEXCOMM_PERIPH_SPI,    /*!< SPI Peripheral */
    FLEXCOMM_PERIPH_I2C,    /*!< I2C Peripheral */
    FLEXCOMM_PERIPH_I2S_TX, /*!< I2S TX Peripheral */
    FLEXCOMM_PERIPH_I2S_RX, /*!< I2S RX Peripheral */
} FLEXCOMM_PERIPH_T;

/*! @brief Typedef for interrupt handler. */
typedef void (*flexcomm_irq_handler_t)(void *base, void *handle);

/*! @brief Array with IRQ number for each FLEXCOMM module. */
extern IRQn_Type const kFlexcommIrqs[];

/*******************************************************************************
 * API
 ******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif

/*! @brief Returns instance number for FLEXCOMM module with given base address. */
uint32_t FLEXCOMM_GetInstance(void *base);

/*! @brief Initializes FLEXCOMM and selects peripheral mode according to the second parameter. */
status_t FLEXCOMM_Init(void *base, FLEXCOMM_PERIPH_T periph);

/*! @brief Sets IRQ handler for given FLEXCOMM module. It is used by drivers register IRQ handler according to FLEXCOMM
 * mode */
void FLEXCOMM_SetIRQHandler(void *base, flexcomm_irq_handler_t handler, void *handle);

#if defined(__cplusplus)
}
#endif

/*@}*/

#endif /* _FSL_FLEXCOMM_H_*/
