Skip to content

Commit 657d90d

Browse files
committed
[NUC472/M453] Fix I2C issues
1. Fix error on return of i2c_byte_write(). 2. Fix error in zero-length transfer corner case.
1 parent f4007e2 commit 657d90d

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ int i2c_byte_read(i2c_t *obj, int last)
221221

222222
int i2c_byte_write(i2c_t *obj, int data)
223223
{
224-
return i2c_do_write(obj, (data & 0xFF), 0);
224+
return i2c_do_write(obj, (data & 0xFF), 0) == 0 ? 1 : 0;
225225
}
226226

227227
#if DEVICE_I2CSLAVE
@@ -352,6 +352,10 @@ int i2c_allow_powerdown(void)
352352

353353
static int i2c_do_tran(i2c_t *obj, char *buf, int length, int read, int naklastdata)
354354
{
355+
if (! buf || ! length) {
356+
return 0;
357+
}
358+
355359
int tran_len = 0;
356360

357361
i2c_disable_int(obj);

targets/TARGET_NUVOTON/TARGET_NUC472/i2c_api.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ int i2c_byte_read(i2c_t *obj, int last)
238238

239239
int i2c_byte_write(i2c_t *obj, int data)
240240
{
241-
return i2c_do_write(obj, (data & 0xFF), 0);
241+
return i2c_do_write(obj, (data & 0xFF), 0) == 0 ? 1 : 0;
242242
}
243243

244244
#if DEVICE_I2CSLAVE
@@ -369,6 +369,10 @@ int i2c_allow_powerdown(void)
369369

370370
static int i2c_do_tran(i2c_t *obj, char *buf, int length, int read, int naklastdata)
371371
{
372+
if (! buf || ! length) {
373+
return 0;
374+
}
375+
372376
int tran_len = 0;
373377

374378
i2c_disable_int(obj);

0 commit comments

Comments
 (0)