diff --git a/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto.dts b/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto.dts index ba778786bab..34271d27789 100644 --- a/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto.dts +++ b/boards/arm/adafruit_feather_m0_basic_proto/adafruit_feather_m0_basic_proto.dts @@ -37,6 +37,8 @@ status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <115200>; + rxpo = <3>; + txpo = <1>; }; &sercom4 { diff --git a/boards/arm/adafruit_feather_m0_basic_proto/board.h b/boards/arm/adafruit_feather_m0_basic_proto/board.h index f30f95e549d..553bc9d2289 100644 --- a/boards/arm/adafruit_feather_m0_basic_proto/board.h +++ b/boards/arm/adafruit_feather_m0_basic_proto/board.h @@ -9,9 +9,6 @@ #include -#define CONFIG_UART_SAM0_SERCOM0_PADS \ - (SERCOM_USART_CTRLA_RXPO(3) | SERCOM_USART_CTRLA_TXPO(1)) - #define CONFIG_SPI_SAM0_SERCOM4_PADS \ (SERCOM_SPI_CTRLA_DIPO(0) | SERCOM_SPI_CTRLA_DOPO(1)) diff --git a/boards/arm/adafruit_trinket_m0/adafruit_trinket_m0.dts b/boards/arm/adafruit_trinket_m0/adafruit_trinket_m0.dts index 4dc28ce2df6..b380d048899 100644 --- a/boards/arm/adafruit_trinket_m0/adafruit_trinket_m0.dts +++ b/boards/arm/adafruit_trinket_m0/adafruit_trinket_m0.dts @@ -36,12 +36,16 @@ status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <115200>; + rxpo = <3>; + txpo = <1>; }; &sercom2 { status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <115200>; + rxpo = <1>; + txpo = <0>; }; /* Drives the on-board DotStar LED */ diff --git a/boards/arm/adafruit_trinket_m0/board.h b/boards/arm/adafruit_trinket_m0/board.h index 083dfa0e53c..549ad0ba970 100644 --- a/boards/arm/adafruit_trinket_m0/board.h +++ b/boards/arm/adafruit_trinket_m0/board.h @@ -9,11 +9,6 @@ #include -#define CONFIG_UART_SAM0_SERCOM0_PADS \ - (SERCOM_USART_CTRLA_RXPO(3) | SERCOM_USART_CTRLA_TXPO(1)) -#define CONFIG_UART_SAM0_SERCOM2_PADS \ - (SERCOM_USART_CTRLA_RXPO(1) | SERCOM_USART_CTRLA_TXPO(0)) - #define CONFIG_SPI_SAM0_SERCOM0_PADS \ (SERCOM_SPI_CTRLA_DIPO(0) | SERCOM_SPI_CTRLA_DOPO(1)) diff --git a/boards/arm/arduino_zero/arduino_zero.dts b/boards/arm/arduino_zero/arduino_zero.dts index 4b9742b0688..453fc49a1d8 100644 --- a/boards/arm/arduino_zero/arduino_zero.dts +++ b/boards/arm/arduino_zero/arduino_zero.dts @@ -46,12 +46,16 @@ status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <115200>; + rxpo = <3>; + txpo = <1>; }; &sercom5 { status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <115200>; + rxpo = <3>; + txpo = <1>; }; &sercom4 { diff --git a/boards/arm/arduino_zero/board.h b/boards/arm/arduino_zero/board.h index 520a0dc9dd8..a3587ae7687 100644 --- a/boards/arm/arduino_zero/board.h +++ b/boards/arm/arduino_zero/board.h @@ -9,11 +9,6 @@ #include -#define CONFIG_UART_SAM0_SERCOM0_PADS \ - (SERCOM_USART_CTRLA_RXPO(3) | SERCOM_USART_CTRLA_TXPO(1)) -#define CONFIG_UART_SAM0_SERCOM5_PADS \ - (SERCOM_USART_CTRLA_RXPO(3) | SERCOM_USART_CTRLA_TXPO(1)) - #define CONFIG_SPI_SAM0_SERCOM4_PADS \ (SERCOM_SPI_CTRLA_DIPO(0) | SERCOM_SPI_CTRLA_DOPO(1)) diff --git a/boards/arm/atsamd20_xpro/atsamd20_xpro.dts b/boards/arm/atsamd20_xpro/atsamd20_xpro.dts index b1ac7779671..6d93685a169 100644 --- a/boards/arm/atsamd20_xpro/atsamd20_xpro.dts +++ b/boards/arm/atsamd20_xpro/atsamd20_xpro.dts @@ -48,12 +48,16 @@ status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <115200>; + rxpo = <3>; + txpo = <2>; }; &sercom4 { status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <115200>; + rxpo = <1>; + txpo = <0>; }; &flash0 { diff --git a/boards/arm/atsamd20_xpro/board.h b/boards/arm/atsamd20_xpro/board.h index 55059bcd986..8c81c5d0c98 100644 --- a/boards/arm/atsamd20_xpro/board.h +++ b/boards/arm/atsamd20_xpro/board.h @@ -12,10 +12,4 @@ #define CONFIG_SPI_SAM0_SERCOM0_PADS \ (SERCOM_SPI_CTRLA_DIPO(0) | SERCOM_SPI_CTRLA_DOPO(2)) -#define CONFIG_UART_SAM0_SERCOM3_PADS \ - (SERCOM_USART_CTRLA_RXPO_PAD3 | SERCOM_USART_CTRLA_TXPO_PAD2) - -#define CONFIG_UART_SAM0_SERCOM4_PADS \ - (SERCOM_USART_CTRLA_TXPO_PAD0 | SERCOM_USART_CTRLA_RXPO_PAD1) - #endif /* __INC_BOARD_H */ diff --git a/boards/arm/atsamd21_xpro/atsamd21_xpro.dts b/boards/arm/atsamd21_xpro/atsamd21_xpro.dts index 5e66eef7566..e00e07e0a07 100644 --- a/boards/arm/atsamd21_xpro/atsamd21_xpro.dts +++ b/boards/arm/atsamd21_xpro/atsamd21_xpro.dts @@ -35,18 +35,24 @@ status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <9600>; + rxpo = <3>; + txpo = <2>; }; &sercom1 { status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <115200>; + rxpo = <3>; + txpo = <0>; }; &sercom3 { status = "ok"; compatible = "atmel,sam0-uart"; current-speed = <115200>; + rxpo = <1>; + txpo = <0>; }; &sercom5 { diff --git a/boards/arm/atsamd21_xpro/board.h b/boards/arm/atsamd21_xpro/board.h index ac4a15a7e11..e2fea90b313 100644 --- a/boards/arm/atsamd21_xpro/board.h +++ b/boards/arm/atsamd21_xpro/board.h @@ -9,18 +9,6 @@ #include -/* SERCOM0 on RX=PA11, TX=PA10 */ -#define CONFIG_UART_SAM0_SERCOM0_PADS \ - (SERCOM_USART_CTRLA_RXPO(3) | SERCOM_USART_CTRLA_TXPO(2)) - -/* SERCOM1 ON RX=PA19, TX=PA16 */ -#define CONFIG_UART_SAM0_SERCOM1_PADS \ - (SERCOM_USART_CTRLA_RXPO(3) | SERCOM_USART_CTRLA_TXPO(0)) - -/* SERCOM3 ON RX=PA23, TX=PA22 */ -#define CONFIG_UART_SAM0_SERCOM3_PADS \ - (SERCOM_USART_CTRLA_RXPO(1) | SERCOM_USART_CTRLA_TXPO(0)) - /* SPI SERCOM5 on MISO=PB16/pad 0, MOSI=PB22/pad 2, SCK=PB23/pad 3 */ #define CONFIG_SPI_SAM0_SERCOM5_PADS \ (SERCOM_SPI_CTRLA_DIPO(0) | SERCOM_SPI_CTRLA_DOPO(2)) diff --git a/drivers/serial/uart_sam0.c b/drivers/serial/uart_sam0.c index 5cd226e6dca..8e78c5d81cc 100644 --- a/drivers/serial/uart_sam0.c +++ b/drivers/serial/uart_sam0.c @@ -10,7 +10,6 @@ #include #include #include -#include /* Device constant configuration parameters */ struct uart_sam0_dev_cfg { @@ -289,13 +288,17 @@ static void uart_sam0_irq_config_##n(struct device *dev) \ #define UART_SAM0_IRQ_HANDLER(n) #endif +#define CONFIG_UART_SAM0_SERCOM_PADS(n) \ + (CONFIG_UART_SAM0_SERCOM##n##_RXPO << SERCOM_USART_CTRLA_RXPO_Pos) | \ + (CONFIG_UART_SAM0_SERCOM##n##_TXPO << SERCOM_USART_CTRLA_TXPO_Pos) + #define UART_SAM0_CONFIG_DEFN(n) \ static const struct uart_sam0_dev_cfg uart_sam0_config_##n = { \ .regs = (SercomUsart *)CONFIG_UART_SAM0_SERCOM##n##_BASE_ADDRESS, \ .baudrate = CONFIG_UART_SAM0_SERCOM##n##_CURRENT_SPEED, \ .pm_apbcmask = PM_APBCMASK_SERCOM##n, \ .gclk_clkctrl_id = GCLK_CLKCTRL_ID_SERCOM##n##_CORE, \ - .pads = CONFIG_UART_SAM0_SERCOM##n##_PADS, \ + .pads = CONFIG_UART_SAM0_SERCOM_PADS(n), \ UART_SAM0_IRQ_HANDLER_FUNC(n) \ } diff --git a/dts/bindings/serial/atmel,sam0-uart.yaml b/dts/bindings/serial/atmel,sam0-uart.yaml index 13b5c5e91d8..0d8577a486c 100644 --- a/dts/bindings/serial/atmel,sam0-uart.yaml +++ b/dts/bindings/serial/atmel,sam0-uart.yaml @@ -23,4 +23,16 @@ properties: category: required description: required interrupts generation: define + + rxpo: + type: int + category: required + description: Receive Data Pinout + generation: define + + txpo: + type: int + category: required + description: Transmit Data Pinout + generation: define ... diff --git a/soc/arm/atmel_sam0/samd20/dts_fixup.h b/soc/arm/atmel_sam0/samd20/dts_fixup.h index 42b1134d13f..1dafc48621f 100644 --- a/soc/arm/atmel_sam0/samd20/dts_fixup.h +++ b/soc/arm/atmel_sam0/samd20/dts_fixup.h @@ -14,36 +14,48 @@ #define CONFIG_UART_SAM0_SERCOM0_IRQ_PRIORITY ATMEL_SAM0_UART_42000800_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM0_LABEL ATMEL_SAM0_UART_42000800_LABEL #define CONFIG_UART_SAM0_SERCOM0_BASE_ADDRESS ATMEL_SAM0_UART_42000800_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM0_RXPO ATMEL_SAM0_UART_42000800_RXPO +#define CONFIG_UART_SAM0_SERCOM0_TXPO ATMEL_SAM0_UART_42000800_TXPO #define CONFIG_UART_SAM0_SERCOM1_CURRENT_SPEED ATMEL_SAM0_UART_42000C00_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM1_IRQ ATMEL_SAM0_UART_42000C00_IRQ_0 #define CONFIG_UART_SAM0_SERCOM1_IRQ_PRIORITY ATMEL_SAM0_UART_42000C00_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM1_LABEL ATMEL_SAM0_UART_42000C00_LABEL #define CONFIG_UART_SAM0_SERCOM1_BASE_ADDRESS ATMEL_SAM0_UART_42000C00_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM1_RXPO ATMEL_SAM0_UART_42000C00_RXPO +#define CONFIG_UART_SAM0_SERCOM1_TXPO ATMEL_SAM0_UART_42000C00_TXPO #define CONFIG_UART_SAM0_SERCOM2_CURRENT_SPEED ATMEL_SAM0_UART_42001000_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM2_IRQ ATMEL_SAM0_UART_42001000_IRQ_0 #define CONFIG_UART_SAM0_SERCOM2_IRQ_PRIORITY ATMEL_SAM0_UART_42001000_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM2_LABEL ATMEL_SAM0_UART_42001000_LABEL #define CONFIG_UART_SAM0_SERCOM2_BASE_ADDRESS ATMEL_SAM0_UART_42001000_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM2_RXPO ATMEL_SAM0_UART_42001000_RXPO +#define CONFIG_UART_SAM0_SERCOM2_TXPO ATMEL_SAM0_UART_42001000_TXPO #define CONFIG_UART_SAM0_SERCOM3_CURRENT_SPEED ATMEL_SAM0_UART_42001400_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM3_IRQ ATMEL_SAM0_UART_42001400_IRQ_0 #define CONFIG_UART_SAM0_SERCOM3_IRQ_PRIORITY ATMEL_SAM0_UART_42001400_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM3_LABEL ATMEL_SAM0_UART_42001400_LABEL #define CONFIG_UART_SAM0_SERCOM3_BASE_ADDRESS ATMEL_SAM0_UART_42001400_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM3_RXPO ATMEL_SAM0_UART_42001400_RXPO +#define CONFIG_UART_SAM0_SERCOM3_TXPO ATMEL_SAM0_UART_42001400_TXPO #define CONFIG_UART_SAM0_SERCOM4_CURRENT_SPEED ATMEL_SAM0_UART_42001800_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM4_IRQ ATMEL_SAM0_UART_42001800_IRQ_0 #define CONFIG_UART_SAM0_SERCOM4_IRQ_PRIORITY ATMEL_SAM0_UART_42001800_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM4_LABEL ATMEL_SAM0_UART_42001800_LABEL #define CONFIG_UART_SAM0_SERCOM4_BASE_ADDRESS ATMEL_SAM0_UART_42001800_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM4_RXPO ATMEL_SAM0_UART_42001800_RXPO +#define CONFIG_UART_SAM0_SERCOM4_TXPO ATMEL_SAM0_UART_42001800_TXPO #define CONFIG_UART_SAM0_SERCOM5_CURRENT_SPEED ATMEL_SAM0_UART_42001C00_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM5_IRQ ATMEL_SAM0_UART_42001C00_IRQ_0 #define CONFIG_UART_SAM0_SERCOM5_IRQ_PRIORITY ATMEL_SAM0_UART_42001C00_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM5_LABEL ATMEL_SAM0_UART_42001C00_LABEL #define CONFIG_UART_SAM0_SERCOM5_BASE_ADDRESS ATMEL_SAM0_UART_42001C00_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM5_RXPO ATMEL_SAM0_UART_42001C00_RXPO +#define CONFIG_UART_SAM0_SERCOM5_TXPO ATMEL_SAM0_UART_42001C00_TXPO #define CONFIG_SPI_SAM0_SERCOM0_LABEL ATMEL_SAM0_SPI_42000800_LABEL #define CONFIG_SPI_SAM0_SERCOM0_BASE_ADDRESS ATMEL_SAM0_SPI_42000800_BASE_ADDRESS diff --git a/soc/arm/atmel_sam0/samd21/dts_fixup.h b/soc/arm/atmel_sam0/samd21/dts_fixup.h index a2cef0ae226..7af34d37b1d 100644 --- a/soc/arm/atmel_sam0/samd21/dts_fixup.h +++ b/soc/arm/atmel_sam0/samd21/dts_fixup.h @@ -14,36 +14,48 @@ #define CONFIG_UART_SAM0_SERCOM0_IRQ_PRIORITY ATMEL_SAM0_UART_42000800_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM0_LABEL ATMEL_SAM0_UART_42000800_LABEL #define CONFIG_UART_SAM0_SERCOM0_BASE_ADDRESS ATMEL_SAM0_UART_42000800_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM0_RXPO ATMEL_SAM0_UART_42000800_RXPO +#define CONFIG_UART_SAM0_SERCOM0_TXPO ATMEL_SAM0_UART_42000800_TXPO #define CONFIG_UART_SAM0_SERCOM1_CURRENT_SPEED ATMEL_SAM0_UART_42000C00_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM1_IRQ ATMEL_SAM0_UART_42000C00_IRQ_0 #define CONFIG_UART_SAM0_SERCOM1_IRQ_PRIORITY ATMEL_SAM0_UART_42000C00_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM1_LABEL ATMEL_SAM0_UART_42000C00_LABEL #define CONFIG_UART_SAM0_SERCOM1_BASE_ADDRESS ATMEL_SAM0_UART_42000C00_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM1_RXPO ATMEL_SAM0_UART_42000C00_RXPO +#define CONFIG_UART_SAM0_SERCOM1_TXPO ATMEL_SAM0_UART_42000C00_TXPO #define CONFIG_UART_SAM0_SERCOM2_CURRENT_SPEED ATMEL_SAM0_UART_42001000_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM2_IRQ ATMEL_SAM0_UART_42001000_IRQ_0 #define CONFIG_UART_SAM0_SERCOM2_IRQ_PRIORITY ATMEL_SAM0_UART_42001000_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM2_LABEL ATMEL_SAM0_UART_42001000_LABEL #define CONFIG_UART_SAM0_SERCOM2_BASE_ADDRESS ATMEL_SAM0_UART_42001000_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM2_RXPO ATMEL_SAM0_UART_42001000_RXPO +#define CONFIG_UART_SAM0_SERCOM2_TXPO ATMEL_SAM0_UART_42001000_TXPO #define CONFIG_UART_SAM0_SERCOM3_CURRENT_SPEED ATMEL_SAM0_UART_42001400_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM3_IRQ ATMEL_SAM0_UART_42001400_IRQ_0 #define CONFIG_UART_SAM0_SERCOM3_IRQ_PRIORITY ATMEL_SAM0_UART_42001400_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM3_LABEL ATMEL_SAM0_UART_42001400_LABEL #define CONFIG_UART_SAM0_SERCOM3_BASE_ADDRESS ATMEL_SAM0_UART_42001400_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM3_RXPO ATMEL_SAM0_UART_42001400_RXPO +#define CONFIG_UART_SAM0_SERCOM3_TXPO ATMEL_SAM0_UART_42001400_TXPO #define CONFIG_UART_SAM0_SERCOM4_CURRENT_SPEED ATMEL_SAM0_UART_42001800_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM4_IRQ ATMEL_SAM0_UART_42001800_IRQ_0 #define CONFIG_UART_SAM0_SERCOM4_IRQ_PRIORITY ATMEL_SAM0_UART_42001800_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM4_LABEL ATMEL_SAM0_UART_42001800_LABEL #define CONFIG_UART_SAM0_SERCOM4_BASE_ADDRESS ATMEL_SAM0_UART_42001800_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM4_RXPO ATMEL_SAM0_UART_42001800_RXPO +#define CONFIG_UART_SAM0_SERCOM4_TXPO ATMEL_SAM0_UART_42001800_TXPO #define CONFIG_UART_SAM0_SERCOM5_CURRENT_SPEED ATMEL_SAM0_UART_42001C00_CURRENT_SPEED #define CONFIG_UART_SAM0_SERCOM5_IRQ ATMEL_SAM0_UART_42001C00_IRQ_0 #define CONFIG_UART_SAM0_SERCOM5_IRQ_PRIORITY ATMEL_SAM0_UART_42001C00_IRQ_0_PRIORITY #define CONFIG_UART_SAM0_SERCOM5_LABEL ATMEL_SAM0_UART_42001C00_LABEL #define CONFIG_UART_SAM0_SERCOM5_BASE_ADDRESS ATMEL_SAM0_UART_42001C00_BASE_ADDRESS +#define CONFIG_UART_SAM0_SERCOM5_RXPO ATMEL_SAM0_UART_42001C00_RXPO +#define CONFIG_UART_SAM0_SERCOM5_TXPO ATMEL_SAM0_UART_42001C00_TXPO #define CONFIG_SPI_SAM0_SERCOM0_LABEL ATMEL_SAM0_SPI_42000800_LABEL #define CONFIG_SPI_SAM0_SERCOM0_BASE_ADDRESS ATMEL_SAM0_SPI_42000800_BASE_ADDRESS