Skip to content

Commit faa5fa1

Browse files
AlessandroLuonashif
authored andcommitted
drivers: i2c: bugfix for ambiq i2c driver
Added k_sem_give for error return case. Changed enabled interrupt bits. Signed-off-by: Hao Luo <[email protected]>
1 parent 3dac7cb commit faa5fa1

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

drivers/i2c/i2c_ambiq.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ static void i2c_ambiq_callback(void *callback_ctxt, uint32_t status)
6060
data->callback(dev, status, data->callback_data);
6161
}
6262
data->transfer_status = status;
63-
k_sem_give(&data->transfer_sem);
6463
}
6564
#endif
6665

@@ -72,6 +71,7 @@ static void i2c_ambiq_isr(const struct device *dev)
7271
am_hal_iom_interrupt_status_get(data->iom_handler, false, &ui32Status);
7372
am_hal_iom_interrupt_clear(data->iom_handler, ui32Status);
7473
am_hal_iom_interrupt_service(data->iom_handler, ui32Status);
74+
k_sem_give(&data->transfer_sem);
7575
}
7676

7777
static int i2c_ambiq_read(const struct device *dev, struct i2c_msg *msg, uint16_t addr)
@@ -197,6 +197,7 @@ static int i2c_ambiq_transfer(const struct device *dev, struct i2c_msg *msgs, ui
197197
}
198198

199199
if (ret != 0) {
200+
k_sem_give(&data->bus_sem);
200201
return ret;
201202
}
202203
}
@@ -237,8 +238,8 @@ static int i2c_ambiq_init(const struct device *dev)
237238
}
238239

239240
#ifdef CONFIG_I2C_AMBIQ_DMA
240-
am_hal_iom_interrupt_clear(data->iom_handler, AM_HAL_IOM_INT_CQUPD | AM_HAL_IOM_INT_ERR);
241-
am_hal_iom_interrupt_enable(data->iom_handler, AM_HAL_IOM_INT_CQUPD | AM_HAL_IOM_INT_ERR);
241+
am_hal_iom_interrupt_clear(data->iom_handler, AM_HAL_IOM_INT_DCMP | AM_HAL_IOM_INT_CMDCMP);
242+
am_hal_iom_interrupt_enable(data->iom_handler, AM_HAL_IOM_INT_DCMP | AM_HAL_IOM_INT_CMDCMP);
242243
config->irq_config_func();
243244
#endif
244245

0 commit comments

Comments
 (0)