aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/atsam/gpio.h6
-rw-r--r--src/atsam/i2c.c9
-rw-r--r--src/atsamd/gpio.h6
-rw-r--r--src/atsamd/i2c.c9
-rw-r--r--src/avr/gpio.h4
-rw-r--r--src/avr/i2c.c9
-rw-r--r--src/hc32f460/gpio.h6
-rw-r--r--src/i2c_software.c8
-rw-r--r--src/i2c_software.h10
-rw-r--r--src/i2ccmds.c29
-rw-r--r--src/i2ccmds.h9
-rw-r--r--src/linux/gpio.h4
-rw-r--r--src/linux/i2c.c9
-rw-r--r--src/lpc176x/gpio.h6
-rw-r--r--src/lpc176x/i2c.c9
-rw-r--r--src/rp2040/gpio.h6
-rw-r--r--src/rp2040/i2c.c9
-rw-r--r--src/stm32/gpio.h6
-rw-r--r--src/stm32/i2c.c9
-rw-r--r--src/stm32/stm32f0_i2c.c9
20 files changed, 123 insertions, 49 deletions
diff --git a/src/atsam/gpio.h b/src/atsam/gpio.h
index e9fc4c3e..638d02da 100644
--- a/src/atsam/gpio.h
+++ b/src/atsam/gpio.h
@@ -50,8 +50,8 @@ struct i2c_config {
};
struct i2c_config i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr);
-void i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
-void i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
- , uint8_t read_len, uint8_t *read);
+int i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
+int i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
+ , uint8_t read_len, uint8_t *read);
#endif // gpio.h
diff --git a/src/atsam/i2c.c b/src/atsam/i2c.c
index 0661727c..8c3dc8ad 100644
--- a/src/atsam/i2c.c
+++ b/src/atsam/i2c.c
@@ -10,6 +10,7 @@
#include "gpio.h" // i2c_setup
#include "internal.h" // gpio_peripheral
#include "sched.h" // sched_shutdown
+#include "i2ccmds.h" // I2C_BUS_SUCCESS
#if CONFIG_MACH_SAME70
#include "same70_i2c.h" // Fixes for upstream header changes
@@ -126,7 +127,7 @@ i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr)
return (struct i2c_config){ .twi=p_twi, .addr=addr};
}
-void
+int
i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
{
Twi *p_twi = config.twi;
@@ -150,9 +151,11 @@ i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
p_twi->TWI_CR = TWI_CR_STOP;
while (!(p_twi->TWI_SR & TWI_SR_TXCOMP))
;
+
+ return I2C_BUS_SUCCESS;
}
-void
+int
i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read)
{
@@ -192,4 +195,6 @@ i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
while (!(p_twi->TWI_SR & TWI_SR_TXCOMP))
;
(void)p_twi->TWI_SR;
+
+ return I2C_BUS_SUCCESS;
}
diff --git a/src/atsamd/gpio.h b/src/atsamd/gpio.h
index b8cb3e86..d29071dc 100644
--- a/src/atsamd/gpio.h
+++ b/src/atsamd/gpio.h
@@ -51,8 +51,8 @@ struct i2c_config {
};
struct i2c_config i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr);
-void i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
-void i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
- , uint8_t read_len, uint8_t *read);
+int i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
+int i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
+ , uint8_t read_len, uint8_t *read);
#endif // gpio.h
diff --git a/src/atsamd/i2c.c b/src/atsamd/i2c.c
index 3c316142..18506a27 100644
--- a/src/atsamd/i2c.c
+++ b/src/atsamd/i2c.c
@@ -9,6 +9,7 @@
#include "command.h" // shutdown
#include "gpio.h" // i2c_setup
#include "sched.h" // sched_shutdown
+#include "i2ccmds.h" // I2C_BUS_SUCCESS
#define TIME_RISE 125ULL // 125 nanoseconds
#define I2C_FREQ 100000
@@ -86,7 +87,7 @@ i2c_stop(SercomI2cm *si)
si->CTRLB.reg = SERCOM_I2CM_CTRLB_CMD(3);
}
-void
+int
i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
{
SercomI2cm *si = (SercomI2cm *)config.si;
@@ -94,9 +95,11 @@ i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
while (write_len--)
i2c_send_byte(si, *write++);
i2c_stop(si);
+
+ return I2C_BUS_SUCCESS;
}
-void
+int
i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read)
{
@@ -143,4 +146,6 @@ i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
// read received data byte
*read++ = si->DATA.reg;
}
+
+ return I2C_BUS_SUCCESS;
}
diff --git a/src/avr/gpio.h b/src/avr/gpio.h
index 9d98ee70..9f28a30a 100644
--- a/src/avr/gpio.h
+++ b/src/avr/gpio.h
@@ -50,8 +50,8 @@ struct i2c_config {
};
struct i2c_config i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr);
-void i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
-void i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
+int i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
+int i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read);
#endif // gpio.h
diff --git a/src/avr/i2c.c b/src/avr/i2c.c
index 658a30a1..e8febfba 100644
--- a/src/avr/i2c.c
+++ b/src/avr/i2c.c
@@ -11,6 +11,7 @@
#include "gpio.h" // i2c_setup
#include "internal.h" // GPIO
#include "sched.h" // sched_shutdown
+#include "i2ccmds.h" // I2C_BUS_SUCCESS
DECL_ENUMERATION("i2c_bus", "twi", 0);
@@ -94,7 +95,7 @@ i2c_stop(uint32_t timeout)
TWCR = (1<<TWEN) | (1<<TWINT) | (1<<TWSTO);
}
-void
+int
i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
{
uint32_t timeout = timer_read_time() + timer_from_us(5000);
@@ -104,9 +105,11 @@ i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
while (write_len--)
i2c_send_byte(*write++, timeout);
i2c_stop(timeout);
+
+ return I2C_BUS_SUCCESS;
}
-void
+int
i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read)
{
@@ -120,4 +123,6 @@ i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
while (read_len--)
i2c_receive_byte(read++, timeout, read_len);
i2c_stop(timeout);
+
+ return I2C_BUS_SUCCESS;
}
diff --git a/src/hc32f460/gpio.h b/src/hc32f460/gpio.h
index 5e88a234..3ac74d9a 100644
--- a/src/hc32f460/gpio.h
+++ b/src/hc32f460/gpio.h
@@ -55,8 +55,8 @@ struct i2c_config {
};
struct i2c_config i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr);
-void i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
-void i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
- , uint8_t read_len, uint8_t *read);
+int i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
+int i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
+ , uint8_t read_len, uint8_t *read);
#endif // gpio.h
diff --git a/src/i2c_software.c b/src/i2c_software.c
index ed0efe53..6a884819 100644
--- a/src/i2c_software.c
+++ b/src/i2c_software.c
@@ -150,16 +150,18 @@ i2c_software_stop(struct i2c_software *is)
gpio_in_reset(is->sda_in, 1);
}
-void
+int
i2c_software_write(struct i2c_software *is, uint8_t write_len, uint8_t *write)
{
i2c_software_start(is, is->addr);
while (write_len--)
i2c_software_send_byte(is, *write++);
i2c_software_stop(is);
+
+ return I2C_BUS_SUCCESS;
}
-void
+int
i2c_software_read(struct i2c_software *is, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read)
{
@@ -178,4 +180,6 @@ i2c_software_read(struct i2c_software *is, uint8_t reg_len, uint8_t *reg
read++;
}
i2c_software_stop(is);
+
+ return I2C_BUS_SUCCESS;
}
diff --git a/src/i2c_software.h b/src/i2c_software.h
index 9bd54f29..843ab461 100644
--- a/src/i2c_software.h
+++ b/src/i2c_software.h
@@ -4,10 +4,10 @@
#include <stdint.h> // uint8_t
struct i2c_software *i2c_software_oid_lookup(uint8_t oid);
-void i2c_software_write(struct i2c_software *sw_i2c
- , uint8_t write_len, uint8_t *write);
-void i2c_software_read(struct i2c_software *sw_i2c
- , uint8_t reg_len, uint8_t *reg
- , uint8_t read_len, uint8_t *read);
+int i2c_software_write(struct i2c_software *sw_i2c
+ , uint8_t write_len, uint8_t *write);
+int i2c_software_read(struct i2c_software *sw_i2c
+ , uint8_t reg_len, uint8_t *reg
+ , uint8_t read_len, uint8_t *read);
#endif // i2c_software.h
diff --git a/src/i2ccmds.c b/src/i2ccmds.c
index c3465b5d..dfe5ccb3 100644
--- a/src/i2ccmds.c
+++ b/src/i2ccmds.c
@@ -52,10 +52,20 @@ i2cdev_set_software_bus(struct i2cdev_s *i2c, struct i2c_software *is)
void i2c_dev_write(struct i2cdev_s *i2c, uint8_t write_len, uint8_t *data)
{
uint_fast8_t flags = i2c->flags;
+ int ret;
if (CONFIG_WANT_SOFTWARE_I2C && flags & IF_SOFTWARE)
- i2c_software_write(i2c->i2c_sw, write_len, data);
+ ret = i2c_software_write(i2c->i2c_sw, write_len, data);
else
- i2c_write(i2c->i2c_hw, write_len, data);
+ ret = i2c_write(i2c->i2c_hw, write_len, data);
+
+ switch (ret) {
+ case I2C_BUS_NACK:
+ shutdown("I2C NACK");
+ case I2C_BUS_START_NACK:
+ shutdown("I2C_START_NACK");
+ case I2C_BUS_TIMEOUT:
+ shutdown("I2C Timeout");
+ }
}
void command_i2c_write(uint32_t *args)
@@ -72,10 +82,21 @@ void i2c_dev_read(struct i2cdev_s *i2c, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read)
{
uint_fast8_t flags = i2c->flags;
+ int ret;
if (CONFIG_WANT_SOFTWARE_I2C && flags & IF_SOFTWARE)
- i2c_software_read(i2c->i2c_sw, reg_len, reg, read_len, read);
+ ret = i2c_software_read(i2c->i2c_sw, reg_len, reg, read_len, read);
else
- i2c_read(i2c->i2c_hw, reg_len, reg, read_len, read);
+ ret = i2c_read(i2c->i2c_hw, reg_len, reg, read_len, read);
+ switch (ret) {
+ case I2C_BUS_NACK:
+ shutdown("I2C NACK");
+ case I2C_BUS_START_NACK:
+ shutdown("I2C START NACK");
+ case I2C_BUS_START_READ_NACK:
+ shutdown("I2C START READ NACK");
+ case I2C_BUS_TIMEOUT:
+ shutdown("I2C Timeout");
+ }
}
void command_i2c_read(uint32_t *args)
diff --git a/src/i2ccmds.h b/src/i2ccmds.h
index 477cee02..ed110bd3 100644
--- a/src/i2ccmds.h
+++ b/src/i2ccmds.h
@@ -4,6 +4,15 @@
#include <inttypes.h>
#include "board/gpio.h" // i2c_config
+// I2C ERROR Codes
+enum {
+ I2C_BUS_SUCCESS,
+ I2C_BUS_NACK,
+ I2C_BUS_TIMEOUT,
+ I2C_BUS_START_NACK,
+ I2C_BUS_START_READ_NACK,
+};
+
struct i2cdev_s {
union {
struct i2c_config i2c_hw;
diff --git a/src/linux/gpio.h b/src/linux/gpio.h
index df9de752..d72007c2 100644
--- a/src/linux/gpio.h
+++ b/src/linux/gpio.h
@@ -49,8 +49,8 @@ struct i2c_config {
};
struct i2c_config i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr);
-void i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
-void i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
+int i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
+int i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read);
#endif // gpio.h
diff --git a/src/linux/i2c.c b/src/linux/i2c.c
index b328dc56..2b8a7988 100644
--- a/src/linux/i2c.c
+++ b/src/linux/i2c.c
@@ -13,6 +13,7 @@
#include "command.h" // shutdown
#include "internal.h" // report_errno
#include "sched.h" // sched_shutdown
+#include "i2ccmds.h" // I2C_BUS_SUCCESS
DECL_ENUMERATION_RANGE("i2c_bus", "i2c.0", 0, 15);
@@ -84,7 +85,7 @@ i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr)
return (struct i2c_config){.fd=fd, .addr=addr};
}
-void
+int
i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *data)
{
int ret = write(config.fd, data, write_len);
@@ -93,9 +94,11 @@ i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *data)
report_errno("write value i2c", ret);
try_shutdown("Unable write i2c device");
}
+
+ return I2C_BUS_SUCCESS;
}
-void
+int
i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *data)
{
@@ -124,4 +127,6 @@ i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
if(ret < 0) {
try_shutdown("Unable to read i2c device");
}
+
+ return I2C_BUS_SUCCESS;
}
diff --git a/src/lpc176x/gpio.h b/src/lpc176x/gpio.h
index e03afbb4..c1507c64 100644
--- a/src/lpc176x/gpio.h
+++ b/src/lpc176x/gpio.h
@@ -51,8 +51,8 @@ struct i2c_config {
};
struct i2c_config i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr);
-void i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
-void i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
- , uint8_t read_len, uint8_t *read);
+int i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
+int i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
+ , uint8_t read_len, uint8_t *read);
#endif // gpio.h
diff --git a/src/lpc176x/i2c.c b/src/lpc176x/i2c.c
index 7ed631af..519dd504 100644
--- a/src/lpc176x/i2c.c
+++ b/src/lpc176x/i2c.c
@@ -9,6 +9,7 @@
#include "gpio.h" // i2c_setup
#include "internal.h" // gpio_peripheral
#include "sched.h" // sched_shutdown
+#include "i2ccmds.h" // I2C_BUS_SUCCESS
struct i2c_info {
LPC_I2C_TypeDef *i2c;
@@ -122,7 +123,7 @@ i2c_stop(LPC_I2C_TypeDef *i2c, uint32_t timeout)
i2c_wait(i2c, IF_STOP, timeout);
}
-void
+int
i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
{
LPC_I2C_TypeDef *i2c = config.i2c;
@@ -133,9 +134,11 @@ i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
while (write_len--)
i2c_send_byte(i2c, *write++, timeout);
i2c_stop(i2c, timeout);
+
+ return I2C_BUS_SUCCESS;
}
-void
+int
i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read)
{
@@ -159,4 +162,6 @@ i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
read++;
}
i2c_stop(i2c, timeout);
+
+ return I2C_BUS_SUCCESS;
}
diff --git a/src/rp2040/gpio.h b/src/rp2040/gpio.h
index ae608378..0dd393bf 100644
--- a/src/rp2040/gpio.h
+++ b/src/rp2040/gpio.h
@@ -50,8 +50,8 @@ struct i2c_config {
};
struct i2c_config i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr);
-void i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
-void i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
- , uint8_t read_len, uint8_t *read);
+int i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
+int i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
+ , uint8_t read_len, uint8_t *read);
#endif // gpio.h
diff --git a/src/rp2040/i2c.c b/src/rp2040/i2c.c
index 84b627ce..81e2dab6 100644
--- a/src/rp2040/i2c.c
+++ b/src/rp2040/i2c.c
@@ -11,6 +11,7 @@
#include "internal.h" // pclock, gpio_peripheral
#include "hardware/regs/resets.h" // RESETS_RESET_I2C*_BITS
#include "hardware/structs/i2c.h"
+#include "i2ccmds.h" // I2C_BUS_SUCCESS
struct i2c_info {
i2c_hw_t *i2c;
@@ -211,7 +212,7 @@ i2c_do_read(i2c_hw_t *i2c, uint8_t addr, uint8_t read_len, uint8_t *read
}
}
-void
+int
i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
{
i2c_hw_t *i2c = (i2c_hw_t*)config.i2c;
@@ -220,9 +221,11 @@ i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
i2c_start(i2c, config.addr);
i2c_do_write(i2c, config.addr, write_len, write, 1, timeout);
i2c_stop(i2c);
+
+ return I2C_BUS_SUCCESS;
}
-void
+int
i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read)
{
@@ -234,4 +237,6 @@ i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
i2c_do_write(i2c, config.addr, reg_len, reg, 0, timeout);
i2c_do_read(i2c, config.addr, read_len, read, timeout);
i2c_stop(i2c);
+
+ return I2C_BUS_SUCCESS;
}
diff --git a/src/stm32/gpio.h b/src/stm32/gpio.h
index 281e3a8d..78f567b8 100644
--- a/src/stm32/gpio.h
+++ b/src/stm32/gpio.h
@@ -51,8 +51,8 @@ struct i2c_config {
};
struct i2c_config i2c_setup(uint32_t bus, uint32_t rate, uint8_t addr);
-void i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
-void i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
- , uint8_t read_len, uint8_t *read);
+int i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write);
+int i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
+ , uint8_t read_len, uint8_t *read);
#endif // gpio.h
diff --git a/src/stm32/i2c.c b/src/stm32/i2c.c
index 4bb8b105..441f611a 100644
--- a/src/stm32/i2c.c
+++ b/src/stm32/i2c.c
@@ -11,6 +11,7 @@
#include "internal.h" // GPIO
#include "sched.h" // sched_shutdown
#include "board/irq.h" //irq_disable
+#include "i2ccmds.h" // I2C_BUS_SUCCESS
struct i2c_info {
I2C_TypeDef *i2c;
@@ -149,7 +150,7 @@ i2c_stop(I2C_TypeDef *i2c, uint32_t timeout)
i2c_wait(i2c, 0, I2C_SR1_TXE, timeout);
}
-void
+int
i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
{
I2C_TypeDef *i2c = config.i2c;
@@ -159,9 +160,11 @@ i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
while (write_len--)
i2c_send_byte(i2c, *write++, timeout);
i2c_stop(i2c, timeout);
+
+ return I2C_BUS_SUCCESS;
}
-void
+int
i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read)
{
@@ -182,4 +185,6 @@ i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
read++;
}
i2c_wait(i2c, 0, I2C_SR1_RXNE, timeout);
+
+ return I2C_BUS_SUCCESS;
}
diff --git a/src/stm32/stm32f0_i2c.c b/src/stm32/stm32f0_i2c.c
index b83ceb0f..1baa28a9 100644
--- a/src/stm32/stm32f0_i2c.c
+++ b/src/stm32/stm32f0_i2c.c
@@ -9,6 +9,7 @@
#include "gpio.h" // i2c_setup
#include "internal.h" // GPIO
#include "sched.h" // sched_shutdown
+#include "i2ccmds.h" // I2C_BUS_SUCCESS
struct i2c_info {
I2C_TypeDef *i2c;
@@ -188,7 +189,7 @@ i2c_wait(I2C_TypeDef *i2c, uint32_t set, uint32_t timeout)
}
}
-void
+int
i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
{
I2C_TypeDef *i2c = config.i2c;
@@ -202,9 +203,11 @@ i2c_write(struct i2c_config config, uint8_t write_len, uint8_t *write)
i2c->TXDR = *write++;
}
i2c_wait(i2c, I2C_ISR_TXE, timeout);
+
+ return I2C_BUS_SUCCESS;
}
-void
+int
i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
, uint8_t read_len, uint8_t *read)
{
@@ -228,4 +231,6 @@ i2c_read(struct i2c_config config, uint8_t reg_len, uint8_t *reg
*read++ = i2c->RXDR;
}
i2c_wait(i2c, I2C_ISR_STOPF, timeout);
+
+ return I2C_BUS_SUCCESS;
}