summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/atsam
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-12-14 07:37:49 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-12-14 13:09:28 +0100
commit62e1e0ff03c366c09f70ac2e1f11cea6620987ac (patch)
tree19cbaa467fd6b9211865c520e0071d9191e6dde4 /c/src/lib/libbsp/arm/atsam
parentbsp/atsam: Hide details of SPI driver (diff)
downloadrtems-62e1e0ff03c366c09f70ac2e1f11cea6620987ac.tar.bz2
bsp/atsam: Simplify SPI initialization
Diffstat (limited to 'c/src/lib/libbsp/arm/atsam')
-rw-r--r--c/src/lib/libbsp/arm/atsam/include/atsam-spi.h8
-rw-r--r--c/src/lib/libbsp/arm/atsam/spi/atsam_spi_bus.c47
-rw-r--r--c/src/lib/libbsp/arm/atsam/spi/atsam_spi_init.c4
3 files changed, 23 insertions, 36 deletions
diff --git a/c/src/lib/libbsp/arm/atsam/include/atsam-spi.h b/c/src/lib/libbsp/arm/atsam/include/atsam-spi.h
index 3d02c514c9..548dd544f4 100644
--- a/c/src/lib/libbsp/arm/atsam/include/atsam-spi.h
+++ b/c/src/lib/libbsp/arm/atsam/include/atsam-spi.h
@@ -23,10 +23,10 @@ extern "C" {
int spi_bus_register_atsam(
const char *bus_path,
- Spi *register_base,
- rtems_vector_number irq,
- const Pin *pins,
- size_t pin_count
+ uint8_t spi_peripheral_id,
+ Spi *spi_regs,
+ const Pin *pins,
+ size_t pin_count
);
#ifdef __cplusplus
diff --git a/c/src/lib/libbsp/arm/atsam/spi/atsam_spi_bus.c b/c/src/lib/libbsp/arm/atsam/spi/atsam_spi_bus.c
index 468e4eca9a..99df45e0f5 100644
--- a/c/src/lib/libbsp/arm/atsam/spi/atsam_spi_bus.c
+++ b/c/src/lib/libbsp/arm/atsam/spi/atsam_spi_bus.c
@@ -40,7 +40,6 @@ typedef struct {
spi_bus base;
Spi *regs;
rtems_vector_number irq;
- uint32_t board_id;
uint32_t msg_todo;
const spi_ioc_transfer *msgs;
rtems_id task_id;
@@ -170,7 +169,7 @@ static void atsam_configure_spi(atsam_spi_bus *bus)
SPID_Configure(
&bus->SpiDma,
bus->regs,
- bus->board_id,
+ bus->SpiDma.spiId,
(SPI_MR_DLYBCS(delay_cs) |
SPI_MR_MSTR |
SPI_MR_MODFDIS |
@@ -512,47 +511,35 @@ static int atsam_spi_setup(spi_bus *base)
return 0;
}
-static void atsam_spi_init(
- atsam_spi_bus *bus,
- const Pin *pins,
- size_t pin_count
-)
-{
- PIO_Configure(pins, pin_count);
- ENABLE_PERIPHERAL(bus->board_id);
- XDMAD_Initialize(&bus->Dma, 0);
- bus->base.mode = 0;
- bus->base.bits_per_word = 8;
- bus->base.speed_hz = bus->base.max_speed_hz;
- bus->base.delay_usecs = 1;
- bus->base.cs = 1;
-
- atsam_configure_spi(bus);
- atsam_set_dmac(bus);
-}
-
int spi_bus_register_atsam(
- const char *bus_path,
- Spi *register_base,
- rtems_vector_number irq,
- const Pin *pins,
- size_t pin_count
+ const char *bus_path,
+ uint8_t spi_peripheral_id,
+ Spi *spi_regs,
+ const Pin *pins,
+ size_t pin_count
)
{
atsam_spi_bus *bus;
rtems_status_code sc;
- uint32_t board_id = (uint32_t) irq;
bus = (atsam_spi_bus *) spi_bus_alloc_and_init(sizeof(*bus));
if (bus == NULL) {
return -1;
}
- bus->regs = register_base;
- bus->board_id = board_id;
+ bus->base.bits_per_word = 8;
+ bus->base.speed_hz = bus->base.max_speed_hz;
+ bus->base.delay_usecs = 1;
+ bus->base.cs = 1;
+ bus->regs = spi_regs;
bus->irq = ID_XDMAC;
+ bus->SpiDma.spiId = spi_peripheral_id;
- atsam_spi_init(bus, pins, pin_count);
+ PIO_Configure(pins, pin_count);
+ PMC_EnablePeripheral(spi_peripheral_id);
+ XDMAD_Initialize(&bus->Dma, 0);
+ atsam_configure_spi(bus);
+ atsam_set_dmac(bus);
sc = rtems_interrupt_handler_install(
bus->irq,
diff --git a/c/src/lib/libbsp/arm/atsam/spi/atsam_spi_init.c b/c/src/lib/libbsp/arm/atsam/spi/atsam_spi_init.c
index 71e86586a4..09440f263f 100644
--- a/c/src/lib/libbsp/arm/atsam/spi/atsam_spi_init.c
+++ b/c/src/lib/libbsp/arm/atsam/spi/atsam_spi_init.c
@@ -68,8 +68,8 @@ int atsam_register_spi_0(void)
return spi_bus_register_atsam(
ATSAM_SPI_0_BUS_PATH,
- SPI0,
ID_SPI0,
+ SPI0,
pins,
RTEMS_ARRAY_SIZE(pins)
);
@@ -92,8 +92,8 @@ int atsam_register_spi_1(void)
return spi_bus_register_atsam(
ATSAM_SPI_1_BUS_PATH,
- SPI1,
ID_SPI1,
+ SPI1,
pins,
RTEMS_ARRAY_SIZE(pins)
);