i3c: mipi-i3c-hci: Support SETDASA CCC
authorBilly Tsai <billy_tsai@aspeedtech.com>
Wed, 13 Nov 2024 03:58:26 +0000 (11:58 +0800)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Mon, 18 Nov 2024 13:28:01 +0000 (14:28 +0100)
When the I3C subsystem wants to assign a dynamic address using the SETDASA
CCC, it needs to attach the I3C device with device info that includes only
the static address. In the HCI, if the driver want to send this SETDASA
CCC, a DAT entry is required to temporarily fill the device's static
address into the dynamic address field. Afterward, the reattach API will
be executed to update the DAT with the correct dynamic addrees value.

Signed-off-by: Billy Tsai <billy_tsai@aspeedtech.com>
Reviewed-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Link: https://lore.kernel.org/r/20241113035826.923918-1-billy_tsai@aspeedtech.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
drivers/i3c/master/mipi-i3c-hci/core.c

index b190401..e6e482a 100644 (file)
@@ -436,7 +436,8 @@ static int i3c_hci_attach_i3c_dev(struct i3c_dev_desc *dev)
                        kfree(dev_data);
                        return ret;
                }
-               mipi_i3c_hci_dat_v1.set_dynamic_addr(hci, ret, dev->info.dyn_addr);
+               mipi_i3c_hci_dat_v1.set_dynamic_addr(hci, ret,
+                                                    dev->info.dyn_addr ?: dev->info.static_addr);
                dev_data->dat_idx = ret;
        }
        i3c_dev_set_master_data(dev, dev_data);