Private
Public Access
2
0

spi: add mraa_spi_init_raw

This lets you access a spidev device directly without any checking in the style
of mraa_i2c_init_raw

Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
Brendan Le Foll
2015-01-13 17:20:54 +00:00
parent 16fc50bc31
commit 5af11978ca
2 changed files with 25 additions and 10 deletions

View File

@@ -70,6 +70,15 @@ typedef struct _spi* mraa_spi_context;
*/
mraa_spi_context mraa_spi_init(int bus);
/**
* Initialise SPI_context without any board configuration, selects a bus and a mux.
*
* @param bus Bus to use as listed by spidev
* @param cs Chip select to use as listed in spidev
* @return Spi context or NULL
*/
mraa_spi_context mraa_spi_init_raw(unsigned int bus, unsigned int cs);
/**
* Set the SPI device mode. see spidev 0-3.
*

View File

@@ -103,7 +103,22 @@ mraa_spi_init(int bus)
return NULL;
}
}
mraa_spi_context dev = mraa_spi_init_raw(plat->spi_bus[bus].bus_id, plat->spi_bus[bus].slave_s);
if (advance_func->spi_init_post != NULL) {
mraa_result_t ret = advance_func->spi_init_post(dev);
if (ret != MRAA_SUCCESS) {
free(dev);
return NULL;
}
}
return dev;
}
mraa_spi_context
mraa_spi_init_raw(unsigned int bus, unsigned int cs)
{
mraa_spi_context dev = (mraa_spi_context) malloc(sizeof(struct _spi));
if (dev == NULL) {
syslog(LOG_CRIT, "spi: Failed to allocate memory for context");
@@ -112,8 +127,7 @@ mraa_spi_init(int bus)
memset(dev, 0, sizeof(struct _spi));
char path[MAX_SIZE];
sprintf(path, "/dev/spidev%u.%u",
plat->spi_bus[bus].bus_id, plat->spi_bus[bus].slave_s);
sprintf(path, "/dev/spidev%u.%u", bus, cs);
dev->devfd = open(path, O_RDWR);
if (dev->devfd < 0) {
@@ -126,14 +140,6 @@ mraa_spi_init(int bus)
dev->lsb = 0;
dev->mode = 0;
if (advance_func->spi_init_post != NULL) {
mraa_result_t ret = advance_func->spi_init_post(dev);
if (ret != MRAA_SUCCESS) {
free(dev);
return NULL;
}
}
return dev;
}