]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lib.git/blobdiff - rpp/src/drv/spi_tms570.c
Make configuration of SPI devices target dependent
[pes-rpp/rpp-lib.git] / rpp / src / drv / spi_tms570.c
index 64f94a1b3e8633bea8dfd8845c735f52688764b5..f2565b0ca5f146c4b4d4bd04d15f650c33599205 100644 (file)
 //#include "sys_common.h"
 //#include "ti_drv_dmm.h"
 #include "sys/ti_drv_dmm.h"
+#include "drv/spi_def.h"
 
 static int spi_tms570_ctrl_fnc(spi_drv_t *ifc, int ctrl, void *p);
 
-
-/* Each SPI interface has its own static spi_tms570_drv_t struct
-   Index to this array is "SPI Interface ID -1" */
-spi_tms570_drv_t spi_tms570_ifcs[4];
-
-/* Addresses of SPI devices (=chips) bound to particular interfaces */
-enum spi_ifc1_devices {
-       SPIDEV_MC33972 = 0, SPIDEV_NCV7608_2x
-};
-enum spi_ifc2_devices {
-       SPIDEV_SDCARD = 0
-};
-enum spi_ifc3_devices {
-       SPIDEV_MCP4922_1 = 0, SPIDEV_MCP4922_2, SPIDEV_MCP4922_3
-};
-enum spi_ifc4_devices {
-       SPIDEV_L99H01 = 0, SPIDEV_TJA1082_1, SPIDEV_TJA1082_2
-};
-
-spi_dev_t spi_ifc1_devs[] = {
-       [SPIDEV_MC33972] = {
-               .cs = SPI_CS_3,
-               .dfsel = 0,
-               .wdel = 0,
-               .cshold = 1,
-               .dlen = 0
-       },
-       [SPIDEV_NCV7608_2x] = {
-               .cs = SPI_CS_4,
-               .dfsel = 0,
-               .wdel = 0,
-               .cshold = 1,
-               .dlen = 0
-       }
-};
-
-spi_dev_t spi_ifc2_devs[] = {
-       [SPIDEV_SDCARD] = {
-               .cs = SPI_CS_0,
-               .dfsel = 0,
-               .wdel = 0,
-               .cshold = 1,
-               .dlen = 0
-       }
-};
-
-spi_dev_t spi_ifc3_devs[] = {
-       [SPIDEV_MCP4922_1] = {
-               .cs = SPI_CS_0,
-               .dfsel = 1,
-               .wdel = 0,
-               .cshold = 1,
-               .dlen = 0
-       },
-       [SPIDEV_MCP4922_2] = {
-               .cs = SPI_CS_4,
-               .dfsel = 1,
-               .wdel = 0,
-               .cshold = 1,
-               .dlen = 0
-       },
-       [SPIDEV_MCP4922_3] = {
-               .cs = SPI_CS_5,
-               .dfsel = 1,
-               .wdel = 0,
-               .cshold = 1,
-               .dlen = 0
-       }
-};
-
-spi_dev_t spi_ifc4_devs[] = {
-       [SPIDEV_L99H01] = {
-               .cs = SPI_CS_0 | SPI_CS_DMM0,
-               .dfsel = 1,
-               .wdel = 0,
-               .cshold = 1,
-               .dlen = 0
-       },
-       [SPIDEV_TJA1082_1] = {
-               .cs = SPI_CS_0 | SPI_CS_DMM1,
-               .dfsel = 0,
-               .wdel = 0,
-               .cshold = 1,
-               .dlen = 0
-       },
-       [SPIDEV_TJA1082_2] = {
-               .cs = SPI_CS_0 | SPI_CS_DMM2,
-               .dfsel = 0,
-               .wdel = 0,
-               .cshold = 1,
-               .dlen = 0
-       }
-};
-
 /*
    Universal piece of code initializing SPI or MibSPI
    devices in "compatibility" mode.
@@ -305,30 +212,19 @@ void spiInit(spiBASE_compat_t *spiREG)
 
 static boolean_t spi_initialized = FALSE;
 
-int spi_tms570_init(void)
+int spi_tms570_init(spi_tms570_drv_t *ifcs, int count)
 {
        if (spi_initialized == TRUE)
                return FAILURE;
        spi_initialized = TRUE;
        int i;
 
-       spi_tms570_ifcs[0].spi = mibspi_compat_REG1;
-       spi_tms570_ifcs[1].spi = spi_compat_REG2;
-       spi_tms570_ifcs[2].spi = mibspi_compat_REG3;
-       spi_tms570_ifcs[3].spi = spi_compat_REG4;
-
-       spi_tms570_ifcs[0].spi_devs = spi_ifc1_devs;
-       spi_tms570_ifcs[1].spi_devs = spi_ifc2_devs;
-       spi_tms570_ifcs[2].spi_devs = spi_ifc3_devs;
-       spi_tms570_ifcs[3].spi_devs = spi_ifc4_devs;
-
-
-       for (i = 0; i <= 3; i++) {
-               spiInit(spi_tms570_ifcs[i].spi);
-               spi_tms570_ifcs[i].spi_drv.ctrl_fnc = spi_tms570_ctrl_fnc;
-               spi_rq_queue_init_head(&(spi_tms570_ifcs[i].spi_drv));
-               spi_tms570_ifcs[i].spi_drv.msg_act = NULL;
-               spi_tms570_ifcs[i].spi_drv.flags = SPI_IFC_ON;
+       for (i = 0; i < count; i++) {
+               spiInit(ifcs[i].spi);
+               ifcs[i].spi_drv.ctrl_fnc = spi_tms570_ctrl_fnc;
+               spi_rq_queue_init_head(&(ifcs[i].spi_drv));
+               ifcs[i].spi_drv.msg_act = NULL;
+               ifcs[i].spi_drv.flags = SPI_IFC_ON;
        }
 
        //dmmREG->PC5 = (1 << DMM_DATA5); /* Set to L */
@@ -375,9 +271,7 @@ static int spi_tms570_ctrl_fnc(spi_drv_t *ifc, int ctrl, void *p)
 void spi_tms570_isr(int spi_ifc, uint32_t flags)
 {
        spi_msg_head_t *msg;
-       spi_tms570_drv_t *spi_tms570_drv;
-
-       spi_tms570_drv = &spi_tms570_ifcs[spi_ifc];
+       spi_tms570_drv_t *spi_tms570_drv = &spi_ifcs[spi_ifc];
        spi_isr_lock_level_t saveif;
        uint8_t val_to_wr;
        uint32_t cs;
@@ -509,10 +403,10 @@ void spi_tms570_isr(int spi_ifc, uint32_t flags)
 
 spi_drv_t *spi_find_drv(char *name, int number)
 {
-       if (number < 1 || number > (sizeof(spi_tms570_ifcs)/sizeof(spi_tms570_ifcs[0])))
+       if (number < 1 || number > ARRAY_SIZE(spi_ifcs))
                return NULL;
 
-       return &spi_tms570_ifcs[number - 1].spi_drv;
+       return &spi_ifcs[number - 1].spi_drv;
 }
 
 #pragma INTERRUPT(spi2LowLevelInterrupt, IRQ)