@@ -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
7777static 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