diff options
-rw-r--r-- | drivers/i3c/master.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c index 5a089be7e072..a1d25c830eff 100644 --- a/drivers/i3c/master.c +++ b/drivers/i3c/master.c @@ -2088,11 +2088,16 @@ int i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master, ibireq.max_payload_len = olddev->ibi->max_payload_len; ibireq.num_slots = olddev->ibi->num_slots; - if (olddev->ibi->enabled) { + if (olddev->ibi->enabled) enable_ibi = true; - i3c_dev_disable_ibi_locked(olddev); - } - + /* + * The olddev should not receive any commands on the + * i3c bus as it does not exist and has been assigned + * a new address. This will result in NACK or timeout. + * So, update the olddev->ibi->enabled flag to false + * to avoid DISEC with OldAddr. + */ + olddev->ibi->enabled = false; i3c_dev_free_ibi_locked(olddev); } mutex_unlock(&olddev->ibi_lock); |