From b20a685b0c7a4196f670ee0e261f68585150f499 Mon Sep 17 00:00:00 2001 From: Henry Bruce Date: Tue, 4 Aug 2015 12:27:57 -0700 Subject: [PATCH] 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 Signed-off-by: Brendan Le Foll --- src/i2c/i2c.c | 15 ++++++++------- src/usb/ftdi_ft4222.c | 18 +++++++++++++----- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/i2c/i2c.c b/src/i2c/i2c.c index 914ea48..061124c 100644 --- a/src/i2c/i2c.c +++ b/src/i2c/i2c.c @@ -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"); diff --git a/src/usb/ftdi_ft4222.c b/src/usb/ftdi_ft4222.c index 4f1e751..ba41ed5 100644 --- a/src/usb/ftdi_ft4222.c +++ b/src/usb/ftdi_ft4222.c @@ -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, ®_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) { -- 2.7.4