Hi Boris,
On 05-09-2018 16:40, Boris Brezillon wrote:
+i3c_master_register_new_i3c_devs(struct i3c_master_controller *master)
+{
+ struct i3c_dev_desc *desc;
+ int ret;
+
+ if (!master->init_done)
+ return;
+
If you have a hot-join and call i3c_master_do_daa this function will
return without create the i3c_device.
+ i3c_bus_for_each_i3cdev(master->bus, desc) {
+ if (desc->dev || !desc->info.dyn_addr || desc == master->this)
+ continue;
+
+ desc->dev = kzalloc(sizeof(*desc->dev), GFP_KERNEL);
+ if (!desc->dev)
+ continue;
+
+ desc->dev->bus = master->bus;
+ desc->dev->desc = desc;
+ desc->dev->dev.parent = &master->bus->dev;
+ desc->dev->dev.type = &i3c_device_type;
+ desc->dev->dev.bus = &i3c_bus_type;
+ desc->dev->dev.release = i3c_device_release;
+ dev_set_name(&desc->dev->dev, "%d-%llx", master->bus->id,
+ desc->info.pid);
+
+ if (desc->boardinfo)
+ desc->dev->dev.of_node = desc->boardinfo->of_node;
+
+ ret = device_register(&desc->dev->dev);
+ if (ret)
+ dev_err(master->parent,
+ "Failed to add I3C device (err = %d)\n", ret);
+ }
+}
Best regards,
Vitor Soares