Private
Public Access
2
0

spi.c: Initialization of spi is necessary on Beaglebone Black

Signed-off-by: Michael Ring <mail@michael-ring.org>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
Michael Ring
2015-02-14 18:14:55 +01:00
committed by Brendan Le Foll
parent 78fe6f4270
commit 3a5b992524

View File

@@ -56,7 +56,7 @@ mraa_spi_init(int bus)
syslog(LOG_ERR, "spi: Platform Not Initialised");
return NULL;
}
if (plat->spi_bus_count == 0) {
if (plat->spi_bus_count == 0) {
syslog(LOG_ERR, "spi: no spi buses defined in platform");
return NULL;
}
@@ -135,10 +135,29 @@ mraa_spi_init_raw(unsigned int bus, unsigned int cs)
free(dev);
return NULL;
}
dev->bpw = 8;
dev->clock = 4000000;
dev->lsb = 0;
dev->mode = 0;
int speed = 0;
if ((ioctl(dev->devfd, SPI_IOC_RD_MAX_SPEED_HZ, &speed) != -1) && (speed < 4000000)) {
dev->clock = speed;
}
else {
dev->clock = 4000000;
}
if (mraa_spi_mode(dev, MRAA_SPI_MODE0) != MRAA_SUCCESS) {
free(dev);
return NULL;
};
if (mraa_spi_lsbmode(dev, 0) != MRAA_SUCCESS) {
free(dev);
return NULL;
};
if (mraa_spi_bit_per_word(dev, 8) != MRAA_SUCCESS) {
free(dev);
return NULL;
};
return dev;
}
@@ -177,7 +196,14 @@ mraa_spi_mode(mraa_spi_context dev, mraa_spi_mode_t mode)
mraa_result_t
mraa_spi_frequency(mraa_spi_context dev, int hz)
{
int speed = 0;
dev->clock = hz;
if (ioctl(dev->devfd, SPI_IOC_RD_MAX_SPEED_HZ, &speed) != -1) {
if (speed < hz) {
dev->clock = speed;
syslog(LOG_WARNING, "spi: Selected speed reduced to max allowed speed");
}
}
return MRAA_SUCCESS;
}