Skip to content

Commit 156d00d

Browse files
fimohamejhedberg
authored andcommitted
simplicity_sdk: Patch to handle callbacks in IRQ
Updated the IRQ handler in sl_i2c.c to manage callbacks within the SiSDK layer. In Zephyr, the driver utilizes dispatch functions, and callbacks should not be invoked directly within these functions, as Zephyr handles callback execution in its own IRQ handler. The callback logic has therefore been moved to the SiSDK-specific handler to align with Zephyr's interrupt and callback management practices. Upstream-Status: Pending Signed-off-by: S Mohamed Fiaz <[email protected]>
1 parent c81e675 commit 156d00d

File tree

1 file changed

+5
-6
lines changed
  • simplicity_sdk/platform/driver/i2c/src

1 file changed

+5
-6
lines changed

simplicity_sdk/platform/driver/i2c/src/sl_i2c.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,9 +1597,6 @@ void sli_i2c_leader_dispatch_interrupt(sli_i2c_instance_t *sl_i2c_instance)
15971597
if (sl_i2c_instance->transfer_event == SL_I2C_EVENT_IN_PROGRESS) {
15981598
sl_i2c_instance->transfer_event = SL_I2C_EVENT_COMPLETED;
15991599
}
1600-
if (sl_i2c_instance->callback) {
1601-
sl_i2c_instance->callback(sl_i2c_instance->transfer_event, sl_i2c_instance->context);
1602-
}
16031600
} else if (pending_irq & I2C_IF_NACK) {
16041601
sl_hal_i2c_clear_interrupts(i2c_base_addr, I2C_IF_NACK);
16051602
switch (sl_i2c_instance->state) {
@@ -1688,9 +1685,6 @@ void sli_i2c_follower_dispatch_interrupt(sli_i2c_instance_t *sl_i2c_instance)
16881685
if (sl_i2c_instance->transfer_event == SL_I2C_EVENT_IN_PROGRESS) {
16891686
sl_i2c_instance->transfer_event = SL_I2C_EVENT_COMPLETED;
16901687
}
1691-
if (sl_i2c_instance->callback) {
1692-
sl_i2c_instance->callback(sl_i2c_instance->transfer_event, sl_i2c_instance->context);
1693-
}
16941688
} else if (pending_irq & I2C_IF_ADDR) {
16951689
(i2c_base_addr)->CTRL_SET = I2C_CTRL_AUTOACK;
16961690
sl_hal_i2c_clear_interrupts(i2c_base_addr, _I2C_IF_MASK);
@@ -1763,6 +1757,11 @@ static void i2c_common_irq_handler(sli_i2c_instance_t *sl_i2c_instance)
17631757
} else { // Follower mode
17641758
sli_i2c_follower_dispatch_interrupt(sl_i2c_instance);
17651759
}
1760+
if (sl_i2c_instance->transfer_event != SL_I2C_EVENT_IN_PROGRESS) {
1761+
if (sl_i2c_instance->callback) {
1762+
sl_i2c_instance->callback(sl_i2c_instance->transfer_event, sl_i2c_instance->context);
1763+
}
1764+
}
17661765
}
17671766
}
17681767

0 commit comments

Comments
 (0)