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 34271d27789..968fbed44ad 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 @@ -46,6 +46,8 @@ compatible = "atmel,sam0-spi"; #address-cells = <1>; #size-cells = <0>; + dipo = <0>; + dopo = <1>; }; &flash0 { diff --git a/boards/arm/adafruit_feather_m0_basic_proto/board.h b/boards/arm/adafruit_feather_m0_basic_proto/board.h index 553bc9d2289..cca82a79869 100644 --- a/boards/arm/adafruit_feather_m0_basic_proto/board.h +++ b/boards/arm/adafruit_feather_m0_basic_proto/board.h @@ -9,7 +9,4 @@ #include -#define CONFIG_SPI_SAM0_SERCOM4_PADS \ - (SERCOM_SPI_CTRLA_DIPO(0) | SERCOM_SPI_CTRLA_DOPO(1)) - #endif /* __INC_BOARD_H */ diff --git a/boards/arm/adafruit_trinket_m0/adafruit_trinket_m0.dts b/boards/arm/adafruit_trinket_m0/adafruit_trinket_m0.dts index b380d048899..bcd8b4f79a8 100644 --- a/boards/arm/adafruit_trinket_m0/adafruit_trinket_m0.dts +++ b/boards/arm/adafruit_trinket_m0/adafruit_trinket_m0.dts @@ -52,6 +52,8 @@ &sercom1 { status = "ok"; compatible = "atmel,sam0-spi"; + dipo = <2>; + dopo = <0>; #address-cells = <1>; #size-cells = <0>; diff --git a/boards/arm/adafruit_trinket_m0/board.h b/boards/arm/adafruit_trinket_m0/board.h index 549ad0ba970..a9afd5387a0 100644 --- a/boards/arm/adafruit_trinket_m0/board.h +++ b/boards/arm/adafruit_trinket_m0/board.h @@ -9,10 +9,4 @@ #include -#define CONFIG_SPI_SAM0_SERCOM0_PADS \ - (SERCOM_SPI_CTRLA_DIPO(0) | SERCOM_SPI_CTRLA_DOPO(1)) - -#define CONFIG_SPI_SAM0_SERCOM1_PADS \ - (SERCOM_SPI_CTRLA_DIPO(2) | SERCOM_SPI_CTRLA_DOPO(0)) - #endif /* __INC_BOARD_H */ diff --git a/boards/arm/arduino_zero/arduino_zero.dts b/boards/arm/arduino_zero/arduino_zero.dts index 453fc49a1d8..b79c688aef0 100644 --- a/boards/arm/arduino_zero/arduino_zero.dts +++ b/boards/arm/arduino_zero/arduino_zero.dts @@ -61,6 +61,8 @@ &sercom4 { status = "ok"; compatible = "atmel,sam0-spi"; + dipo = <0>; + dopo = <1>; }; &flash0 { diff --git a/boards/arm/arduino_zero/board.h b/boards/arm/arduino_zero/board.h index a3587ae7687..645bf1e3d52 100644 --- a/boards/arm/arduino_zero/board.h +++ b/boards/arm/arduino_zero/board.h @@ -9,7 +9,4 @@ #include -#define CONFIG_SPI_SAM0_SERCOM4_PADS \ - (SERCOM_SPI_CTRLA_DIPO(0) | SERCOM_SPI_CTRLA_DOPO(1)) - #endif /* __INC_BOARD_H */ diff --git a/boards/arm/atsamd20_xpro/atsamd20_xpro.dts b/boards/arm/atsamd20_xpro/atsamd20_xpro.dts index 6d93685a169..eb1319b4d02 100644 --- a/boards/arm/atsamd20_xpro/atsamd20_xpro.dts +++ b/boards/arm/atsamd20_xpro/atsamd20_xpro.dts @@ -42,6 +42,8 @@ &sercom0 { status = "ok"; compatible = "atmel,sam0-spi"; + dipo = <0>; + dopo = <2>; }; &sercom3 { diff --git a/boards/arm/atsamd20_xpro/board.h b/boards/arm/atsamd20_xpro/board.h index 8c81c5d0c98..e4933a9d69a 100644 --- a/boards/arm/atsamd20_xpro/board.h +++ b/boards/arm/atsamd20_xpro/board.h @@ -9,7 +9,4 @@ #include -#define CONFIG_SPI_SAM0_SERCOM0_PADS \ - (SERCOM_SPI_CTRLA_DIPO(0) | SERCOM_SPI_CTRLA_DOPO(2)) - #endif /* __INC_BOARD_H */ diff --git a/boards/arm/atsamd21_xpro/atsamd21_xpro.dts b/boards/arm/atsamd21_xpro/atsamd21_xpro.dts index e00e07e0a07..802ca72971f 100644 --- a/boards/arm/atsamd21_xpro/atsamd21_xpro.dts +++ b/boards/arm/atsamd21_xpro/atsamd21_xpro.dts @@ -58,4 +58,6 @@ &sercom5 { status = "ok"; compatible = "atmel,sam0-spi"; + dipo = <0>; + dopo = <2>; }; diff --git a/boards/arm/atsamd21_xpro/board.h b/boards/arm/atsamd21_xpro/board.h index e2fea90b313..95266df4d9f 100644 --- a/boards/arm/atsamd21_xpro/board.h +++ b/boards/arm/atsamd21_xpro/board.h @@ -9,8 +9,4 @@ #include -/* 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)) - #endif /* __INC_BOARD_H */ diff --git a/drivers/spi/spi_sam0.c b/drivers/spi/spi_sam0.c index 6986f4fe78b..61dc295326e 100644 --- a/drivers/spi/spi_sam0.c +++ b/drivers/spi/spi_sam0.c @@ -13,7 +13,6 @@ LOG_MODULE_REGISTER(spi_sam0); #include #include #include -#include /* Device constant configuration parameters */ struct spi_sam0_config { @@ -452,12 +451,16 @@ static const struct spi_driver_api spi_sam0_driver_api = { .release = spi_sam0_release, }; +#define CONFIG_SPI_SAM0_SERCOM_PADS(n) \ + SERCOM_SPI_CTRLA_DIPO(CONFIG_SPI_SAM0_SERCOM##n##_DIPO) | \ + SERCOM_SPI_CTRLA_DOPO(CONFIG_SPI_SAM0_SERCOM##n##_DOPO) + #define SPI_SAM0_DEFINE_CONFIG(n) \ static const struct spi_sam0_config spi_sam0_config_##n = { \ .regs = (SercomSpi *)CONFIG_SPI_SAM0_SERCOM##n##_BASE_ADDRESS, \ .pm_apbcmask = PM_APBCMASK_SERCOM##n, \ .gclk_clkctrl_id = GCLK_CLKCTRL_ID_SERCOM##n##_CORE, \ - .pads = CONFIG_SPI_SAM0_SERCOM##n##_PADS \ + .pads = CONFIG_SPI_SAM0_SERCOM_PADS(n) \ } #define SPI_SAM0_DEVICE_INIT(n) \ diff --git a/dts/bindings/spi/atmel,sam0-spi.yaml b/dts/bindings/spi/atmel,sam0-spi.yaml index a8881bc49b8..cfc757f23d3 100644 --- a/dts/bindings/spi/atmel,sam0-spi.yaml +++ b/dts/bindings/spi/atmel,sam0-spi.yaml @@ -22,4 +22,16 @@ properties: description: mmio register space generation: define category: required + + dipo: + type: int + category: required + description: Data In Pinout + generation: define + + dopo: + type: int + category: required + description: Data Out Pinout + generation: define ... diff --git a/soc/arm/atmel_sam0/samd20/dts_fixup.h b/soc/arm/atmel_sam0/samd20/dts_fixup.h index 1dafc48621f..b182408a3ce 100644 --- a/soc/arm/atmel_sam0/samd20/dts_fixup.h +++ b/soc/arm/atmel_sam0/samd20/dts_fixup.h @@ -59,21 +59,33 @@ #define CONFIG_SPI_SAM0_SERCOM0_LABEL ATMEL_SAM0_SPI_42000800_LABEL #define CONFIG_SPI_SAM0_SERCOM0_BASE_ADDRESS ATMEL_SAM0_SPI_42000800_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM0_DIPO ATMEL_SAM0_SPI_42000800_DIPO +#define CONFIG_SPI_SAM0_SERCOM0_DOPO ATMEL_SAM0_SPI_42000800_DOPO #define CONFIG_SPI_SAM0_SERCOM1_LABEL ATMEL_SAM0_SPI_42000C00_LABEL #define CONFIG_SPI_SAM0_SERCOM1_BASE_ADDRESS ATMEL_SAM0_SPI_42000C00_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM1_DIPO ATMEL_SAM0_SPI_42000C00_DIPO +#define CONFIG_SPI_SAM0_SERCOM1_DOPO ATMEL_SAM0_SPI_42000C00_DOPO #define CONFIG_SPI_SAM0_SERCOM2_LABEL ATMEL_SAM0_SPI_42001000_LABEL #define CONFIG_SPI_SAM0_SERCOM2_BASE_ADDRESS ATMEL_SAM0_SPI_42001000_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM2_DIPO ATMEL_SAM0_SPI_42001000_DIPO +#define CONFIG_SPI_SAM0_SERCOM2_DOPO ATMEL_SAM0_SPI_42001000_DOPO #define CONFIG_SPI_SAM0_SERCOM3_LABEL ATMEL_SAM0_SPI_42001400_LABEL #define CONFIG_SPI_SAM0_SERCOM3_BASE_ADDRESS ATMEL_SAM0_SPI_42001400_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM3_DIPO ATMEL_SAM0_SPI_42001400_DIPO +#define CONFIG_SPI_SAM0_SERCOM3_DOPO ATMEL_SAM0_SPI_42001400_DOPO #define CONFIG_SPI_SAM0_SERCOM4_LABEL ATMEL_SAM0_SPI_42001800_LABEL #define CONFIG_SPI_SAM0_SERCOM4_BASE_ADDRESS ATMEL_SAM0_SPI_42001800_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM4_DIPO ATMEL_SAM0_SPI_42001800_DIPO +#define CONFIG_SPI_SAM0_SERCOM4_DOPO ATMEL_SAM0_SPI_42001800_DOPO #define CONFIG_SPI_SAM0_SERCOM5_LABEL ATMEL_SAM0_SPI_42001C00_LABEL #define CONFIG_SPI_SAM0_SERCOM5_BASE_ADDRESS ATMEL_SAM0_SPI_42001C00_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM5_DIPO ATMEL_SAM0_SPI_42001C00_DIPO +#define CONFIG_SPI_SAM0_SERCOM5_DOPO ATMEL_SAM0_SPI_42001C00_DOPO #define CONFIG_WDT_SAM0_IRQ ATMEL_SAM0_WATCHDOG_40001000_IRQ_0 #define CONFIG_WDT_SAM0_IRQ_PRIORITY ATMEL_SAM0_WATCHDOG_40001000_IRQ_0_PRIORITY diff --git a/soc/arm/atmel_sam0/samd21/dts_fixup.h b/soc/arm/atmel_sam0/samd21/dts_fixup.h index 7af34d37b1d..83489107ee2 100644 --- a/soc/arm/atmel_sam0/samd21/dts_fixup.h +++ b/soc/arm/atmel_sam0/samd21/dts_fixup.h @@ -59,21 +59,33 @@ #define CONFIG_SPI_SAM0_SERCOM0_LABEL ATMEL_SAM0_SPI_42000800_LABEL #define CONFIG_SPI_SAM0_SERCOM0_BASE_ADDRESS ATMEL_SAM0_SPI_42000800_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM0_DIPO ATMEL_SAM0_SPI_42000800_DIPO +#define CONFIG_SPI_SAM0_SERCOM0_DOPO ATMEL_SAM0_SPI_42000800_DOPO #define CONFIG_SPI_SAM0_SERCOM1_LABEL ATMEL_SAM0_SPI_42000C00_LABEL #define CONFIG_SPI_SAM0_SERCOM1_BASE_ADDRESS ATMEL_SAM0_SPI_42000C00_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM1_DIPO ATMEL_SAM0_SPI_42000C00_DIPO +#define CONFIG_SPI_SAM0_SERCOM1_DOPO ATMEL_SAM0_SPI_42000C00_DOPO #define CONFIG_SPI_SAM0_SERCOM2_LABEL ATMEL_SAM0_SPI_42001000_LABEL #define CONFIG_SPI_SAM0_SERCOM2_BASE_ADDRESS ATMEL_SAM0_SPI_42001000_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM2_DIPO ATMEL_SAM0_SPI_42001000_DIPO +#define CONFIG_SPI_SAM0_SERCOM2_DOPO ATMEL_SAM0_SPI_42001000_DOPO #define CONFIG_SPI_SAM0_SERCOM3_LABEL ATMEL_SAM0_SPI_42001400_LABEL #define CONFIG_SPI_SAM0_SERCOM3_BASE_ADDRESS ATMEL_SAM0_SPI_42001400_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM3_DIPO ATMEL_SAM0_SPI_42001400_DIPO +#define CONFIG_SPI_SAM0_SERCOM3_DOPO ATMEL_SAM0_SPI_42001400_DOPO #define CONFIG_SPI_SAM0_SERCOM4_LABEL ATMEL_SAM0_SPI_42001800_LABEL #define CONFIG_SPI_SAM0_SERCOM4_BASE_ADDRESS ATMEL_SAM0_SPI_42001800_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM4_DIPO ATMEL_SAM0_SPI_42001800_DIPO +#define CONFIG_SPI_SAM0_SERCOM4_DOPO ATMEL_SAM0_SPI_42001800_DOPO #define CONFIG_SPI_SAM0_SERCOM5_LABEL ATMEL_SAM0_SPI_42001C00_LABEL #define CONFIG_SPI_SAM0_SERCOM5_BASE_ADDRESS ATMEL_SAM0_SPI_42001C00_BASE_ADDRESS +#define CONFIG_SPI_SAM0_SERCOM5_DIPO ATMEL_SAM0_SPI_42001C00_DIPO +#define CONFIG_SPI_SAM0_SERCOM5_DOPO ATMEL_SAM0_SPI_42001C00_DOPO #define CONFIG_WDT_SAM0_IRQ ATMEL_SAM0_WATCHDOG_40001000_IRQ_0 #define CONFIG_WDT_SAM0_IRQ_PRIORITY ATMEL_SAM0_WATCHDOG_40001000_IRQ_0_PRIORITY