blob: 82eaf3991bdf4eddf4a3906a5634fe4f70035ff8 [file] [log] [blame]
/*
*
* Copyright (c) 2022 Project CHIP Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* This file contains all the functions specific to the MG24 family for
* multiplexing the SPI port with WiFi NCP and other WSTK
* devices such as External Flash and LCD.
* That can be extended to other families as well.
*/
#pragma once
#ifndef SL_LCDCTRL_MUX
#define SL_LCDCTRL_MUX (EFR32MG24 && SL_WIFI && DISPLAY_ENABLED)
#endif // SL_LCDCTRL_MUX
#ifndef SL_UARTCTRL_MUX
#define SL_UARTCTRL_MUX (EFR32MG24 && WF200_WIFI && ENABLE_CHIP_SHELL)
#endif // SL_UARTCTRL_MUX
#ifndef SL_MX25CTRL_MUX
#define SL_MX25CTRL_MUX (EFR32MG24 && SL_WIFI && CONFIG_USE_EXTERNAL_FLASH)
#endif // SL_MX25CTRL_MUX
#ifndef SL_BTLCTRL_MUX
#define SL_BTLCTRL_MUX (EFR32MG24 && SL_WIFI && CONFIG_USE_EXTERNAL_FLASH)
#endif // SL_BTLCTRL_MUX
#ifndef SL_SPICTRL_MUX
#define SL_SPICTRL_MUX (EFR32MG24 && SL_WIFI && (SL_LCDCTRL_MUX || SL_UARTCTRL_MUX || SL_MX25CTRL_MUX || SL_BTLCTRL_MUX))
#endif // SL_SPICTRL_MUX
#if SL_SPICTRL_MUX
#ifdef __cplusplus
extern "C" {
#endif
#if SL_SPICTRL_MUX
/****************************************************************************
* @fn void SPIDRV_SetBaudrate()
* @brief
* Sets the SPI driver to required baudrate
* @param[in] None
* @return returns void
*****************************************************************************/
void SPIDRV_SetBaudrate(uint32_t);
#if defined(RS911X_WIFI)
/****************************************************************************
* @fn sl_status_t sl_wfx_host_spi_cs_assert()
* @brief
* Assert chip select.
* @param[in] None
* @return returns SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_spi_cs_assert(void);
/****************************************************************************
* @fn sl_status_t sl_wfx_host_spi_cs_deassert()
* @brief
* De-Assert chip select.
* @param[in] None
* @return returns SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_spi_cs_deassert(void);
#endif /* RS911X_WIFI */
#endif // SL_SPICTRL_MUX
#if SL_MUX25CTRL_MUX
/****************************************************************************
* @fn sl_status_t sl_wfx_host_spiflash_cs_assert()
* @brief
* Assert SPI flash chip select.
* @param[in] None
* @return returns SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_spiflash_cs_assert(void);
/****************************************************************************
* @fn sl_status_t sl_wfx_host_spiflash_cs_deassert()
* @brief
* De-Assert SPI flash chip select.
* @param[in] None
* @return returns SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_spiflash_cs_deassert(void);
#endif // SL_MUX25CTRL_MUX
#if SL_BTLCTRL_MUX
/****************************************************************************
* @fn sl_status_t sl_wfx_host_pre_bootloader_spi_transfer()
* @brief
* Take a semaphore and controlling CS pin for EXP header and SPI flash
* @param[in] None
* @return SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_pre_bootloader_spi_transfer(void);
/****************************************************************************
* @fn sl_status_t sl_wfx_host_post_bootloader_spi_transfer()
* @brief
* De-Assert EXT SPI flash CS pin and release semaphore
* @param[in] None
* @return SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_post_bootloader_spi_transfer(void);
#endif // SL_BTLCTRL_MUX
#if SL_LCDCTRL_MUX
/****************************************************************************
* @fn sl_status_t sl_wfx_host_pre_lcd_spi_transfer()
* @brief
* Take a semaphore and setting LCD baudrate
* @param[in] None
* @return SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_pre_lcd_spi_transfer(void);
/****************************************************************************
* @fn sl_status_t sl_wfx_host_post_lcd_spi_transfer()
* @brief
* Release semaphore
* @param[in] None
* @return SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_post_lcd_spi_transfer(void);
#endif // SL_LCDCTRL_MUX
#if SL_UARTCTRL_MUX
/****************************************************************************
* @fn sl_status_t sl_wfx_host_pre_uart_transfer()
* @brief
* Take a semaphore and setting GPIO, disable IRQ
* @param[in] None
* @return SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_pre_uart_transfer(void);
/****************************************************************************
* @fn sl_status_t sl_wfx_host_post_uart_transfer()
* @brief
* Reset GPIO, enabled IRQ, release semaphore
* @param[in] None
* @return SL_STATUS_OK
*****************************************************************************/
sl_status_t sl_wfx_host_post_uart_transfer(void);
#endif // SL_UARTCTRL_MUX
#ifdef __cplusplus
}
#endif
#endif // SL_SPICTRL_MUX