Private
Public Access
2
0

i2c: mraa_i2c_init_raw fixed and sub-platform updates.

mraa_i2c_init_raw now works again without platfrorm defined.
More API calls now support sub-platform

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:
Henry Bruce
2015-08-04 12:27:57 -07:00
committed by Brendan Le Foll
parent 79e33890b6
commit b20a685b0c
2 changed files with 21 additions and 12 deletions

View File

@@ -146,6 +146,7 @@ mraa_i2c_init(int bus)
}
bus = mraa_get_sub_platform_index(bus);
}
syslog(LOG_NOTICE, "i2c: Selected bus %d", bus);
if (board->i2c_bus_count == 0) {
syslog(LOG_ERR, "No i2c buses defined in platform");
@@ -184,10 +185,7 @@ mraa_i2c_init(int bus)
mraa_i2c_context
mraa_i2c_init_raw(unsigned int bus)
{
if (plat == NULL)
return NULL;
else
return mraa_i2c_init_internal(plat->adv_func, bus);
return mraa_i2c_init_internal(plat == NULL ? NULL : plat->adv_func, bus);
}
@@ -229,8 +227,9 @@ mraa_i2c_read_byte(mraa_i2c_context dev)
uint8_t
mraa_i2c_read_byte_data(mraa_i2c_context dev, uint8_t command)
{
if (IS_FUNC_DEFINED(dev, i2c_read_byte_data_replace))
return dev->advance_func->i2c_read_byte_data_replace(dev, command);
i2c_smbus_data_t d;
if (mraa_i2c_smbus_access(dev->fh, I2C_SMBUS_READ, command, I2C_SMBUS_BYTE_DATA, &d) < 0) {
syslog(LOG_ERR, "i2c: Failed to write");
return 0;
@@ -309,8 +308,9 @@ mraa_i2c_write_byte(mraa_i2c_context dev, const uint8_t data)
mraa_result_t
mraa_i2c_write_byte_data(mraa_i2c_context dev, const uint8_t data, const uint8_t command)
{
if (IS_FUNC_DEFINED(dev, i2c_write_byte_data_replace))
return dev->advance_func->i2c_write_byte_data_replace(dev, data, command);
i2c_smbus_data_t d;
d.byte = data;
if (mraa_i2c_smbus_access(dev->fh, I2C_SMBUS_WRITE, command, I2C_SMBUS_BYTE_DATA, &d) < 0) {
syslog(LOG_ERR, "i2c: Failed to write");
@@ -322,8 +322,9 @@ mraa_i2c_write_byte_data(mraa_i2c_context dev, const uint8_t data, const uint8_t
mraa_result_t
mraa_i2c_write_word_data(mraa_i2c_context dev, const uint16_t data, const uint8_t command)
{
if (IS_FUNC_DEFINED(dev, i2c_write_word_data_replace))
return dev->advance_func->i2c_write_word_data_replace(dev, data, command);
i2c_smbus_data_t d;
d.word = data;
if (mraa_i2c_smbus_access(dev->fh, I2C_SMBUS_WRITE, command, I2C_SMBUS_WORD_DATA, &d) < 0) {
syslog(LOG_ERR, "i2c: Failed to write");

View File

@@ -306,11 +306,6 @@ mraa_ftdi_ft4222_i2c_read_byte(mraa_i2c_context dev)
return 0;
}
static uint8_t
mraa_ftdi_ft4222_i2c_read_byte_data(mraa_i2c_context dev, uint8_t command)
{
return 0;
}
static uint16_t
mraa_ftdi_ft4222_i2c_read_word_data(mraa_i2c_context dev, uint8_t command)
@@ -339,6 +334,19 @@ mraa_ftdi_ft4222_i2c_write_byte(mraa_i2c_context dev, uint8_t data)
return mraa_ftdi_ft4222_i2c_write(dev, &data, 1);
}
static uint8_t
mraa_ftdi_ft4222_i2c_read_byte_data(mraa_i2c_context dev, uint8_t command)
{
const uint8_t reg_addr = command;
uint8_t data;
if (mraa_ftdi_ft4222_i2c_write(dev, &reg_addr, 1) != MRAA_SUCCESS)
return 0;
if (mraa_ftdi_ft4222_i2c_read(dev, &data, 1) != 1)
return 0;
return data;
}
static mraa_result_t
mraa_ftdi_ft4222_i2c_write_byte_data(mraa_i2c_context dev, const uint8_t data, const uint8_t command)
{