json: Improve i2c and spi configuration.
Bus number no longer has to be the same as its id and all busses are disabled until a configuration entry is found. Signed-off-by: Henry Bruce <henry.bruce@intel.com> Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
committed by
Brendan Le Foll
parent
61d20c7266
commit
9de294b389
@@ -138,22 +138,27 @@ mraa_init_json_platform_platform(json_object* jobj_platform, mraa_board_t* board
|
||||
|
||||
// Check to see if they've provided a UART count
|
||||
ret = mraa_init_json_platform_get_index(jobj_platform, PLATFORM_KEY, UART_COUNT_KEY, index,
|
||||
&(board->uart_dev_count), 6);
|
||||
&(board->uart_dev_count), MAX_UART_COUNT);
|
||||
if (ret != MRAA_SUCCESS && ret != MRAA_ERROR_NO_DATA_AVAILABLE) {
|
||||
return ret;
|
||||
}
|
||||
// Check to see if they've provided a I2C count
|
||||
ret = mraa_init_json_platform_get_index(jobj_platform, PLATFORM_KEY, I2C_COUNT_KEY, index,
|
||||
&(board->i2c_bus_count), 12);
|
||||
&(board->i2c_bus_count), MAX_I2C_BUS_COUNT);
|
||||
if (ret != MRAA_SUCCESS && ret != MRAA_ERROR_NO_DATA_AVAILABLE) {
|
||||
return ret;
|
||||
}
|
||||
for (int i = 0; i < board->i2c_bus_count; ++i)
|
||||
board->i2c_bus[i].bus_id = -1;
|
||||
|
||||
// Check to see if they've provided a SPI count
|
||||
ret = mraa_init_json_platform_get_index(jobj_platform, PLATFORM_KEY, SPI_COUNT_KEY, index,
|
||||
&(board->spi_bus_count), 12);
|
||||
&(board->spi_bus_count), MAX_SPI_BUS_COUNT);
|
||||
if (ret != MRAA_SUCCESS && ret != MRAA_ERROR_NO_DATA_AVAILABLE) {
|
||||
return ret;
|
||||
}
|
||||
for (int i = 0; i < board->spi_bus_count; ++i)
|
||||
board->spi_bus[i].bus_id = -1;
|
||||
|
||||
// Set the PWM default numbers
|
||||
board->pwm_default_period = -1;
|
||||
@@ -278,23 +283,22 @@ mraa_init_json_platform_i2c(json_object* jobj_i2c, mraa_board_t* board, int inde
|
||||
{
|
||||
int pos = 0;
|
||||
int pin = 0;
|
||||
int sysfs_pin = 0;
|
||||
int bus = 0;
|
||||
// int sysfs_pin = 0;
|
||||
mraa_result_t ret = MRAA_SUCCESS;
|
||||
json_object* jobj_temp = NULL;
|
||||
|
||||
// disable bus if we error out
|
||||
board->i2c_bus[pos].bus_id = -1;
|
||||
// Default to no mux pins defined
|
||||
board->pins[pin].i2c.mux_total = 0;
|
||||
|
||||
// Get the I2C bus array index
|
||||
ret = mraa_init_json_platform_get_index(jobj_i2c, I2C_KEY, INDEX_KEY, index, &pos, board->i2c_bus_count - 1);
|
||||
if (ret != MRAA_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
// Get the sysfs pin
|
||||
ret = mraa_init_json_platform_get_pin(jobj_i2c, I2C_KEY, RAW_PIN_KEY, index, &sysfs_pin);
|
||||
if (ret != MRAA_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
// Get the bus number (e.g. 2 for /dev/i2c-2). If it doesn't exist, default to bus = pos
|
||||
bus = pos;
|
||||
ret = mraa_init_json_platform_get_pin(jobj_i2c, I2C_KEY, BUS_KEY, index, &bus);
|
||||
// Setup the sda pin
|
||||
ret = mraa_init_json_platform_get_index(jobj_i2c, I2C_KEY, SDAPIN_KEY, index, &pin,
|
||||
board->phy_pin_count - 1);
|
||||
@@ -302,7 +306,6 @@ mraa_init_json_platform_i2c(json_object* jobj_i2c, mraa_board_t* board, int inde
|
||||
board->i2c_bus[pos].sda = -1;
|
||||
} else if (ret == MRAA_SUCCESS) {
|
||||
board->pins[pin].capabilities.i2c = 1;
|
||||
board->pins[pin].i2c.pinmap = sysfs_pin;
|
||||
board->i2c_bus[pos].sda = pin;
|
||||
} else {
|
||||
return ret;
|
||||
@@ -314,13 +317,12 @@ mraa_init_json_platform_i2c(json_object* jobj_i2c, mraa_board_t* board, int inde
|
||||
board->i2c_bus[pos].scl = -1;
|
||||
} else if (ret == MRAA_SUCCESS) {
|
||||
board->pins[pin].capabilities.i2c = 1;
|
||||
board->pins[pin].i2c.pinmap = sysfs_pin;
|
||||
board->i2c_bus[pos].scl = pin;
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
|
||||
board->i2c_bus[pos].bus_id = pos;
|
||||
board->i2c_bus[pos].bus_id = bus;
|
||||
|
||||
// check to see if this i2c is the default one
|
||||
if (json_object_object_get_ex(jobj_i2c, DEFAULT_KEY, &jobj_temp)) {
|
||||
@@ -369,8 +371,9 @@ mraa_result_t
|
||||
mraa_init_json_platform_spi(json_object* jobj_spi, mraa_board_t* board, int index)
|
||||
{
|
||||
int pos = 0;
|
||||
int bus = 0;
|
||||
int ss = 0;
|
||||
int pin = 0;
|
||||
int parent_id = 0;
|
||||
json_object* jobj_temp = NULL;
|
||||
mraa_result_t ret = MRAA_SUCCESS;
|
||||
|
||||
@@ -380,19 +383,27 @@ mraa_init_json_platform_spi(json_object* jobj_spi, mraa_board_t* board, int inde
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Get the parent id
|
||||
ret = mraa_init_json_platform_get_pin(jobj_spi, SPI_KEY, CHIP_ID_KEY, index, &parent_id);
|
||||
// Get the bus
|
||||
ret = mraa_init_json_platform_get_pin(jobj_spi, SPI_KEY, BUS_KEY, index, &bus);
|
||||
if (ret != MRAA_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Get slave select
|
||||
ret = mraa_init_json_platform_get_pin(jobj_spi, SPI_KEY, SS_KEY, index, &ss);
|
||||
if (ret != MRAA_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
board->spi_bus[pos].bus_id = bus;
|
||||
board->spi_bus[pos].slave_s = ss;
|
||||
|
||||
// Setup the clock pin
|
||||
ret = mraa_init_json_platform_get_index(jobj_spi, SPI_KEY, CLOCK_KEY, index, &pin, board->phy_pin_count - 1);
|
||||
if (ret == MRAA_ERROR_NO_DATA_AVAILABLE) {
|
||||
board->spi_bus[pos].sclk = -1;
|
||||
} else if (ret == MRAA_SUCCESS) {
|
||||
board->pins[pin].capabilities.spi = 1;
|
||||
board->pins[pin].spi.parent_id = parent_id;
|
||||
board->spi_bus[pos].sclk = pin;
|
||||
} else {
|
||||
return ret;
|
||||
@@ -403,7 +414,6 @@ mraa_init_json_platform_spi(json_object* jobj_spi, mraa_board_t* board, int inde
|
||||
board->spi_bus[pos].miso = -1;
|
||||
} else if (ret == MRAA_SUCCESS) {
|
||||
board->pins[pin].capabilities.spi = 1;
|
||||
board->pins[pin].spi.parent_id = parent_id;
|
||||
board->spi_bus[pos].miso = pin;
|
||||
} else {
|
||||
return ret;
|
||||
@@ -414,7 +424,6 @@ mraa_init_json_platform_spi(json_object* jobj_spi, mraa_board_t* board, int inde
|
||||
board->spi_bus[pos].mosi = -1;
|
||||
} else if (ret == MRAA_SUCCESS) {
|
||||
board->pins[pin].capabilities.spi = 1;
|
||||
board->pins[pin].spi.parent_id = parent_id;
|
||||
board->spi_bus[pos].mosi = pin;
|
||||
} else {
|
||||
return ret;
|
||||
@@ -425,7 +434,6 @@ mraa_init_json_platform_spi(json_object* jobj_spi, mraa_board_t* board, int inde
|
||||
board->spi_bus[pos].cs = -1;
|
||||
} else if (ret == MRAA_SUCCESS) {
|
||||
board->pins[pin].capabilities.spi = 1;
|
||||
board->pins[pin].spi.parent_id = parent_id;
|
||||
board->spi_bus[pos].cs = pin;
|
||||
} else {
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user