blob: 5498ca036fb09412cde6904f8057981abd0fd99f [file] [log] [blame]
/*
* Copyright (c) 2022 Silicon Labs
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_GECKO_PINCTRL_H_
#define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_GECKO_PINCTRL_H_
/*
* The whole GECKO_pin configuration information is encoded in a 32-bit bitfield
* organized as follows:
*
* - 31..24: Pin function.
* - 23..16: Reserved.
* - 15..8: Port for UART_RX/UART_TX functions.
* - 7..0: Pin number for UART_RX/UART_TX functions.
* - 15..8: Reserved for UART_LOC function.
* - 7..0: Loc for UART_LOC function.
*/
/**
* @name GECKO_pin configuration bit field positions and masks.
* @{
*/
/** Position of the function field. */
#define GECKO_FUN_POS 24U
/** Mask for the function field. */
#define GECKO_FUN_MSK 0xFFFU
/** Position of the pin field. */
#define GECKO_PIN_POS 0U
/** Mask for the pin field. */
#define GECKO_PIN_MSK 0xFFU
/** Position of the port field. */
#define GECKO_PORT_POS 8U
/** Mask for the port field. */
#define GECKO_PORT_MSK 0xFFU
/** Position of the loc field. */
#define GECKO_LOC_POS 0U
/** Mask for the pin field. */
#define GECKO_LOC_MSK 0xFFU
/** @} */
/**
* @name GECKO_pinctrl pin functions.
* @{
*/
/** UART TX */
#define GECKO_FUN_UART_TX 0U
/** UART RX */
#define GECKO_FUN_UART_RX 1U
/** UART RTS */
#define GECKO_FUN_UART_RTS 2U
/** UART CTS */
#define GECKO_FUN_UART_CTS 3U
/** UART LOCATION */
#define GECKO_FUN_UART_LOC 4U
#define GECKO_FUN_SPI_MISO 5U
#define GECKO_FUN_SPI_MOSI 6U
#define GECKO_FUN_SPI_CSN 7U
#define GECKO_FUN_SPI_SCK 8U
/** @} */
/**
* @brief Utility macro to build GECKO psels property entry.
*
* @param fun Pin function configuration (see GECKO_FUNC_{name} macros).
* @param port Port (0 or 1).
* @param pin Pin (0..31).
*/
#define GECKO_PSEL(fun, port, pin) \
(((GECKO_PORT_##port & GECKO_PORT_MSK) << GECKO_PORT_POS) | \
((GECKO_PIN(##pin##) & GECKO_PIN_MSK) << GECKO_PIN_POS) | \
((GECKO_FUN_##fun & GECKO_FUN_MSK) << GECKO_FUN_POS))
/**
* @brief Utility macro to build GECKO_psels property entry.
*
* @param fun Pin function configuration (see GECKO_FUNC_{name} macros).
* @param loc Location.
*/
#define GECKO_LOC(fun, loc) \
(((GECKO_LOCATION(##loc##) & GECKO_LOC_MSK) << GECKO_LOC_POS) | \
((GECKO_FUN_##fun##_LOC & GECKO_FUN_MSK) << GECKO_FUN_POS))
#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_GECKO_PINCTRL_H_ */