Re: [PATCH v6 02/12] i3c: master: Use unified device property interface
Akhil R <[email protected]> Mon, 27 Jul 2026 08:26:52 +0000
| Newsgroups | org.infradead.lists.linux-i3c,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-hwmon,org.kernel.vger.linux-kernel,org.kernel.vger.linux-tegra |
|---|---|
| Message-ID | <[email protected]> |
Hi Adrian, On Wed, 22 Jul 2026 13:38:43 +0300 Adrian Hunter wrote: > On 21/07/2026 07:07, Akhil R wrote: >> Replace all OF-specific functions with unified device property functions >> as a prerequisite to support both ACPI and device tree. >> >> Reviewed-by: Frank Li <[email protected]> >> Signed-off-by: Akhil R <[email protected]> >> --- >> drivers/i3c/master.c | 77 +++++++++++++++++++++----------------- >> include/linux/i3c/master.h | 5 ++- >> 2 files changed, 46 insertions(+), 36 deletions(-) >> >> diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c >> index f1be38a640ca..4b3d9628bc39 100644 >> --- a/drivers/i3c/master.c >> +++ b/drivers/i3c/master.c >> @@ -13,10 +13,12 @@ >> #include <linux/dma-mapping.h> >> #include <linux/err.h> >> #include <linux/export.h> >> +#include <linux/i2c.h> >> #include <linux/kernel.h> >> #include <linux/list.h> >> #include <linux/of.h> >> #include <linux/pm_runtime.h> >> +#include <linux/property.h> >> #include <linux/slab.h> >> #include <linux/spinlock.h> >> #include <linux/workqueue.h> >> @@ -491,7 +493,7 @@ static void i3c_bus_cleanup(struct i3c_bus *i3cbus) >> mutex_unlock(&i3c_core_lock); >> } >> >> -static int i3c_bus_init(struct i3c_bus *i3cbus, struct device_node *np) >> +static int i3c_bus_init(struct i3c_bus *i3cbus, struct fwnode_handle *fwnode) >> { >> int ret, start, end, id = -1; >> >> @@ -501,8 +503,8 @@ static int i3c_bus_init(struct i3c_bus *i3cbus, struct device_node *np) >> i3c_bus_init_addrslots(i3cbus); >> i3cbus->mode = I3C_BUS_MODE_PURE; >> >> - if (np) >> - id = of_alias_get_id(np, "i3c"); >> + if (fwnode && is_of_node(fwnode)) >> + id = of_alias_get_id(to_of_node(fwnode), "i3c"); >> >> mutex_lock(&i3c_core_lock); >> if (id >= 0) { >> @@ -837,7 +839,7 @@ static void i3c_masterdev_release(struct device *dev) >> WARN_ON(!list_empty(&bus->devs.i2c) || !list_empty(&bus->devs.i3c)); >> i3c_bus_cleanup(bus); >> >> - of_node_put(dev->of_node); >> + fwnode_handle_put(dev->fwnode); >> } >> >> static const struct device_type i3c_masterdev_type = { >> @@ -1044,7 +1046,7 @@ static void i3c_device_release(struct device *dev) >> >> WARN_ON(i3cdev->desc); >> >> - of_node_put(i3cdev->dev.of_node); >> + fwnode_handle_put(dev->fwnode); >> kfree(i3cdev); >> } >> >> @@ -1928,7 +1930,7 @@ i3c_master_register_new_i3c_devs(struct i3c_master_controller *master) >> desc->info.pid); >> >> if (desc->boardinfo) >> - desc->dev->dev.of_node = desc->boardinfo->of_node; >> + device_set_node(&desc->dev->dev, desc->boardinfo->fwnode); > > i3c_device_release() "puts" the node so there should be a "get" here. > Should probably fix that before switching to device properties. > > Also seems like the of_node_get() for boardinfo for both i3c and i2c > has no balancing put. Again, it would be good to get that sorted out > before switching to device properties. Thanks for the review. I understand the issue of unbalanced get/put, but given the size and spread of this series, mixing it up with fixes may make it difficult to review and may dilute its intent. This patch is a 1:1 of_node -> fwnode conversion and keeps the exact same get/put balance, so it should not regress anything. If you agree, the fixes and pre-existing issues can be taken up separately. Best Regards, Akhil -- linux-i3c mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-i3c