Thread (25 messages) 25 messages, 3 authors, 2024-05-29

Re: [PATCH v2 3/4] gpio: adp5585: Add Analog Devices ADP5585 support

From: Andy Shevchenko <hidden>
Date: 2024-05-29 15:00:57
Also in: linux-gpio, linux-pwm, lkml

On Wed, May 29, 2024 at 5:35 PM Laurent Pinchart
[off-list ref] wrote:
On Wed, May 29, 2024 at 05:24:03PM +0300, Andy Shevchenko wrote:
quoted
On Wed, May 29, 2024 at 12:48 PM Laurent Pinchart wrote:
quoted
On Wed, May 29, 2024 at 09:16:43AM +0300, Andy Shevchenko wrote:
quoted
On Tue, May 28, 2024 at 11:20 PM Laurent Pinchart wrote:
quoted
On Tue, May 28, 2024 at 10:36:06PM +0300, Andy Shevchenko wrote:
...
quoted
quoted
quoted
quoted
quoted
quoted
+   device_set_of_node_from_dev(dev, dev->parent);
Why not device_set_node()?
Because device_set_of_node_from_dev() is meant for this exact use case,
where the same node is used for multiple devices. It also puts any
previous dev->of_node, ensuring proper refcounting when devices are
unbound and rebound, without being deleted.
When will the refcount be dropped (in case of removal of this device)?
Or you mean it shouldn't?
Any refcount taken on the OF node needs to be dropped. The device core
only drops the refcount when the device is being deleted, not when
there's an unbind-rebind cycle without deletion of the device (as
happens for instance when the module is unloaded and reloaded).
Under "device" you meant the real hardware, as Linux device (instance
of the struct device object) is being rebuilt AFAIK)?
I mean struct device. The driver core will drop the reference in
platform_device_release(), called when the last reference to the
platform device is released, just before freeing the platform_device
instance. This happens after the device is removed from the system (e.g.
hot-unplug), but not when a device is unbound from a driver and rebound
(e.g. module unload and reload).
This is something I need to refresh in my memory. Any pointers (the
links to the exact code lines are also okay) where I can find the
proof of what you are saying. (It's not that I untrust you, it's just
that I take my time on studying it.)
quoted
quoted
This has
to be handled by the driver. device_set_of_node_from_dev() handles it.
But why do you need to keep a parent node reference bumped?
Only very few drivers in the kernel use this API and I believe either
s/very/a/ (sorry for the confusion)
quoted
nobody knows what they are doing and you are right, or you are doing
something which is not needed.
I need to set the of_node and fwnode fields of struct device to enable
OF-based lookups of GPIOs and PWMs. The of_node field is meant to be
populated by the driver core when the device is created, with a
reference to the OF node. When populated directly by driver, this needs
to be taken into account, and drivers need to ensure the reference will
be released correctly. device_set_of_node_from_dev() is meant for that.
What you are doing is sharing the parent node with the child, but at
the same time you bump the parent's reference count. As this is a
child of MFD I don't think you need this as MFD already takes care of
it via parent -> child natural dependencies. Is it incorrect
understanding?

-- 
With Best Regards,
Andy Shevchenko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help