intel_edison_fab_c.c: added spi_lsbmode_replace to return proper status
Edison SPI driver doesn't support LSB_FIRST mode, we will now return _FEATURE_NOT_SUPPORTED instead of _INVALID_RESOURCE for attempts to enable it. Closes #22. Signed-off-by: Alex Tereschenko <alext.mkrs@gmail.com> Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
committed by
Brendan Le Foll
parent
41d71e6ce2
commit
ea31104db0
@@ -26,6 +26,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <linux/spi/spidev.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "x86/intel_edison_fab_c.h"
|
#include "x86/intel_edison_fab_c.h"
|
||||||
@@ -72,6 +74,29 @@ static int mmap_fd = 0;
|
|||||||
static int mmap_size;
|
static int mmap_size;
|
||||||
static unsigned int mmap_count = 0;
|
static unsigned int mmap_count = 0;
|
||||||
|
|
||||||
|
mraa_result_t
|
||||||
|
mraa_intel_edison_spi_lsbmode_replace(mraa_spi_context dev, mraa_boolean_t lsb)
|
||||||
|
{
|
||||||
|
uint8_t lsb_mode = (uint8_t) lsb;
|
||||||
|
|
||||||
|
// Edison doesn't support LSB_FIRST, we need to react appropriately
|
||||||
|
if (!lsb) {
|
||||||
|
if (ioctl(dev->devfd, SPI_IOC_WR_LSB_FIRST, &lsb_mode) < 0) {
|
||||||
|
syslog(LOG_ERR, "spi: Failed to set bit order");
|
||||||
|
return MRAA_ERROR_INVALID_RESOURCE;
|
||||||
|
}
|
||||||
|
if (ioctl(dev->devfd, SPI_IOC_RD_LSB_FIRST, &lsb_mode) < 0) {
|
||||||
|
syslog(LOG_ERR, "spi: Failed to set bit order");
|
||||||
|
return MRAA_ERROR_INVALID_RESOURCE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return MRAA_ERROR_FEATURE_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
dev->lsb = lsb;
|
||||||
|
return MRAA_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static mraa_result_t
|
static mraa_result_t
|
||||||
mraa_intel_edison_pinmode_change(int sysfs, int mode)
|
mraa_intel_edison_pinmode_change(int sysfs, int mode)
|
||||||
{
|
{
|
||||||
@@ -1122,6 +1147,7 @@ mraa_intel_edison_fab_c()
|
|||||||
advance_func->uart_init_pre = &mraa_intel_edison_uart_init_pre;
|
advance_func->uart_init_pre = &mraa_intel_edison_uart_init_pre;
|
||||||
advance_func->uart_init_post = &mraa_intel_edison_uart_init_post;
|
advance_func->uart_init_post = &mraa_intel_edison_uart_init_post;
|
||||||
advance_func->gpio_mmap_setup = &mraa_intel_edison_mmap_setup;
|
advance_func->gpio_mmap_setup = &mraa_intel_edison_mmap_setup;
|
||||||
|
advance_func->spi_lsbmode_replace = &mraa_intel_edison_spi_lsbmode_replace;
|
||||||
|
|
||||||
b->pins = (mraa_pininfo_t*) malloc(sizeof(mraa_pininfo_t) * MRAA_INTEL_EDISON_PINCOUNT);
|
b->pins = (mraa_pininfo_t*) malloc(sizeof(mraa_pininfo_t) * MRAA_INTEL_EDISON_PINCOUNT);
|
||||||
if (b->pins == NULL) {
|
if (b->pins == NULL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user