diff options
author | Alex Maclean <monkeh@monkeh.net> | 2021-08-18 20:01:59 +0100 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2022-03-26 11:59:27 -0400 |
commit | 80492432210f1cf7817b7808245d196f3420021e (patch) | |
tree | a3c7f6222ce51c5a7f7ac2ab77dce1506a5ddfbf /src/atsam/spi.c | |
parent | 99c2bf0dede623264777812fd324499325babc48 (diff) | |
download | kutter-80492432210f1cf7817b7808245d196f3420021e.tar.gz kutter-80492432210f1cf7817b7808245d196f3420021e.tar.xz kutter-80492432210f1cf7817b7808245d196f3420021e.zip |
atsam: Add support for SAM E70
Signed-off-by: Alex Maclean <monkeh@monkeh.net>
Diffstat (limited to 'src/atsam/spi.c')
-rw-r--r-- | src/atsam/spi.c | 61 |
1 files changed, 48 insertions, 13 deletions
diff --git a/src/atsam/spi.c b/src/atsam/spi.c index e32085df..b6e7a1a3 100644 --- a/src/atsam/spi.c +++ b/src/atsam/spi.c @@ -11,6 +11,11 @@ #include "internal.h" // gpio_peripheral #include "sched.h" // sched_shutdown +#if CONFIG_MACH_SAME70 // Fixes for upstream header changes +#define US_MR_CHMODE_NORMAL US_MR_USART_CHMODE_NORMAL +#define US_MR_CPHA US_MR_SPI_CPHA +#define US_MR_CPOL US_MR_SPI_CPOL +#endif /**************************************************************** * SPI/USART buses and pins @@ -19,7 +24,7 @@ struct spi_info { void *dev; uint32_t dev_id; - uint8_t miso_pin, mosi_pin, sck_pin, rxtx_periph, sck_periph; + uint8_t miso_pin, mosi_pin, sck_pin, rx_periph, tx_periph, sck_periph; }; #if CONFIG_MACH_SAM3X @@ -41,22 +46,50 @@ DECL_ENUMERATION_RANGE("spi_bus", "usart0", 1, 2); DECL_CONSTANT_STR("BUS_PINS_spi", "PA12,PA13,PA14"); DECL_CONSTANT_STR("BUS_PINS_usart0", "PB0,PB1,PB13"); DECL_CONSTANT_STR("BUS_PINS_usart1", "PA21,PA22,PA23"); +#elif CONFIG_MACH_SAME70 +DECL_ENUMERATION_RANGE("spi_bus", "spi0", 0, 2); +DECL_ENUMERATION_RANGE("spi_bus", "usart0", 2, 3); +DECL_CONSTANT_STR("BUS_PINS_spi0", "PD20,PD21,PD22"); +DECL_CONSTANT_STR("BUS_PINS_usart0", "PB0,PB1,PB13"); +DECL_CONSTANT_STR("BUS_PINS_usart1", "PA21,PB4,PA23"); +DECL_CONSTANT_STR("BUS_PINS_usart2", "PD15,PD16,PD17"); #endif static const struct spi_info spi_bus[] = { #if CONFIG_MACH_SAM3X - { SPI0, ID_SPI0, GPIO('A', 25), GPIO('A', 26), GPIO('A', 27), 'A', 'A' }, - { USART0, ID_USART0, GPIO('A', 10), GPIO('A', 11), GPIO('A', 17), 'A', 'B'}, - { USART1, ID_USART1, GPIO('A', 12), GPIO('A', 13), GPIO('A', 16), 'A', 'A'}, - { USART2, ID_USART2, GPIO('B', 21), GPIO('B', 20), GPIO('B', 24), 'A', 'A'}, + { SPI0, ID_SPI0, + GPIO('A', 25), GPIO('A', 26), GPIO('A', 27), 'A', 'A', 'A'}, + { USART0, ID_USART0, + GPIO('A', 10), GPIO('A', 11), GPIO('A', 17), 'A', 'A', 'B'}, + { USART1, ID_USART1, + GPIO('A', 12), GPIO('A', 13), GPIO('A', 16), 'A', 'A', 'A'}, + { USART2, ID_USART2, + GPIO('B', 21), GPIO('B', 20), GPIO('B', 24), 'A', 'A', 'A'}, #elif CONFIG_MACH_SAM4S - { SPI, ID_SPI, GPIO('A', 12), GPIO('A', 13), GPIO('A', 14), 'A', 'A' }, - { USART0, ID_USART0, GPIO('A', 5), GPIO('A', 6), GPIO('A', 2), 'A', 'B' }, - { USART1, ID_USART1, GPIO('A', 21), GPIO('A', 22), GPIO('A', 23), 'A', 'A'}, + { SPI, ID_SPI, + GPIO('A', 12), GPIO('A', 13), GPIO('A', 14), 'A', 'A', 'A'}, + { USART0, ID_USART0, + GPIO('A', 5), GPIO('A', 6), GPIO('A', 2), 'A', 'A', 'B'}, + { USART1, ID_USART1, + GPIO('A', 21), GPIO('A', 22), GPIO('A', 23), 'A', 'A', 'A'}, #elif CONFIG_MACH_SAM4E - { SPI, ID_SPI, GPIO('A', 12), GPIO('A', 13), GPIO('A', 14), 'A', 'A' }, - { USART0, ID_USART0, GPIO('B', 0), GPIO('B', 1), GPIO('B', 13), 'C', 'C' }, - { USART1, ID_USART1, GPIO('A', 21), GPIO('A', 22), GPIO('A', 23), 'A', 'A'}, + { SPI, ID_SPI, + GPIO('A', 12), GPIO('A', 13), GPIO('A', 14), 'A', 'A', 'A'}, + { USART0, ID_USART0, + GPIO('B', 0), GPIO('B', 1), GPIO('B', 13), 'C', 'C', 'C'}, + { USART1, ID_USART1, + GPIO('A', 21), GPIO('A', 22), GPIO('A', 23), 'A', 'A', 'A'}, +#elif CONFIG_MACH_SAME70 + { SPI0, ID_SPI0, + GPIO('D', 20), GPIO('D', 21), GPIO('D', 22), 'B', 'B', 'B'}, + { SPI1, ID_SPI1, + GPIO('C', 26), GPIO('C', 27), GPIO('C', 24), 'C', 'C', 'C'}, + { USART0, ID_USART0, + GPIO('B', 0), GPIO('B', 1), GPIO('B', 13), 'C', 'C', 'C'}, + { USART1, ID_USART1, + GPIO('A', 21), GPIO('B', 4), GPIO('A', 23), 'A', 'D', 'A'}, + { USART2, ID_USART2, + GPIO('D', 15), GPIO('D', 16), GPIO('D', 17), 'B', 'B', 'B'}, #endif }; @@ -65,6 +98,8 @@ is_spihw(void *dev) { #if CONFIG_MACH_SAM3X return dev == SPI0; +#elif CONFIG_MACH_SAME70 + return (dev == SPI0) || (dev == SPI1); #else return dev == SPI; #endif @@ -75,8 +110,8 @@ init_pins(uint32_t bus) { const struct spi_info *si = &spi_bus[bus]; gpio_peripheral(si->sck_pin, si->sck_periph, 0); - gpio_peripheral(si->miso_pin, si->rxtx_periph, 1); - gpio_peripheral(si->mosi_pin, si->rxtx_periph, 0); + gpio_peripheral(si->miso_pin, si->rx_periph, 1); + gpio_peripheral(si->mosi_pin, si->tx_periph, 0); enable_pclock(si->dev_id); } |