//#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.
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 */
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;
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)