mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-16 14:21:55 +00:00
In order to use its serial peripheral SERCOMs SAMD socs require their pins to be configured with pinmux. Currently pins are muxed only for the boards' default serial interfaces. The pinmux code is written to throw a compiler error if a user tries to use any sercom in a way it wasn't pre-defined to be used. This commit changes compiler errors to warnings so that user can provide custom pinmuxing code in their app. Fixes #23133 Signed-off-by: Kuba Sanak <contact@kuba.fyi>
73 lines
2.0 KiB
C
73 lines
2.0 KiB
C
/*
|
|
* Copyright (c) 2018 Henrik Brix Andersen <henrik@brixandersen.dk>
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <init.h>
|
|
#include <drivers/pinmux.h>
|
|
|
|
static int board_pinmux_init(struct device *dev)
|
|
{
|
|
struct device *muxa = device_get_binding(DT_ATMEL_SAM0_PINMUX_PINMUX_A_LABEL);
|
|
#if DT_ATMEL_SAM0_SPI_SERCOM_4_BASE_ADDRESS
|
|
struct device *muxb = device_get_binding(DT_ATMEL_SAM0_PINMUX_PINMUX_B_LABEL);
|
|
#endif
|
|
ARG_UNUSED(dev);
|
|
|
|
#if DT_ATMEL_SAM0_UART_SERCOM_0_BASE_ADDRESS
|
|
/* SERCOM0 on RX=PA11/pad 3, TX=PA10/pad 2 */
|
|
pinmux_pin_set(muxa, 11, PINMUX_FUNC_C);
|
|
pinmux_pin_set(muxa, 10, PINMUX_FUNC_C);
|
|
#endif
|
|
|
|
#if DT_ATMEL_SAM0_UART_SERCOM_1_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
#if DT_ATMEL_SAM0_UART_SERCOM_2_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
#if DT_ATMEL_SAM0_UART_SERCOM_3_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
#if DT_ATMEL_SAM0_UART_SERCOM_4_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
#if DT_ATMEL_SAM0_UART_SERCOM_5_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
|
|
#if DT_ATMEL_SAM0_SPI_SERCOM_4_BASE_ADDRESS
|
|
/* SPI SERCOM4 on MISO=PA12/pad 0, MOSI=PB10/pad 2, SCK=PB11/pad 3 */
|
|
pinmux_pin_set(muxa, 12, PINMUX_FUNC_D);
|
|
pinmux_pin_set(muxb, 10, PINMUX_FUNC_D);
|
|
pinmux_pin_set(muxb, 11, PINMUX_FUNC_D);
|
|
#endif
|
|
|
|
#if DT_ATMEL_SAM0_SPI_SERCOM_0_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
#if DT_ATMEL_SAM0_SPI_SERCOM_1_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
#if DT_ATMEL_SAM0_SPI_SERCOM_2_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
#if DT_ATMEL_SAM0_SPI_SERCOM_3_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
#if DT_ATMEL_SAM0_SPI_SERCOM_5_BASE_ADDRESS
|
|
#warning Pin mapping may not be configured
|
|
#endif
|
|
|
|
#ifdef CONFIG_USB_DC_SAM0
|
|
/* USB DP on PA25, USB DM on PA24 */
|
|
pinmux_pin_set(muxa, 25, PINMUX_FUNC_G);
|
|
pinmux_pin_set(muxa, 24, PINMUX_FUNC_G);
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
SYS_INIT(board_pinmux_init, PRE_KERNEL_1, CONFIG_PINMUX_INIT_PRIORITY);
|