On Wed, Oct 24, 2018 at 06:01:16PM -0700, Nicolin Chen wrote:
On Thu, Oct 25, 2018 at 12:13:01AM +0000, linux@xxxxxxxxxxxx wrote:
> > + if (dev) {
> > + hdev->driver = dev->driver;
> > + hdev->power = dev->power;
> > + hdev->pm_domain = dev->pm_domain;
> > + hdev->of_node = dev->of_node;
> > + }
>
> We'l need to dig into this more; I suspect it may be inappropriate to do this.
> With this change, every hwmon driver supporting (runtime ?) suspend/resume
> will have the problem worked around in #5, and that just seems wrong.
Hmm..that's true...thanks for catching it.
Actually I am not sure the reason of having a child device in
the core, but could we use the parent dev pointer in the hwmon
core as hwmon_dev upon confirming parent dev pointer != NULL?
I just noticed that it is used to link to hwmon class. So this
won't work then. I guess it'd be safer to ignore the problem ofIt might be worthwhile looking up how other virtal devices handle
the power node, i.e. using parent dev pointer for pm runtime.
Thanks
Nicolin
The problem here is that the power directory under each hwmon
directory is tied to the hwmon_dev pointer, not to the parent
dev pointer, and the hwmon core creates all sysfs nodes based
on the child node. So those nodes under power directory won't
be valid unless we copy all pm information, especially PM ops.
There is an option of ignoring this problem though, while all
hwmon drivers will need to be careful of mixing using the dev
pointers. So it'd be a lot of easier if we could just use the
original dev pointer in the core since we mainly just need to
create sysfs nodes.
Another way of doing this might be to pass down the PM pointer
via _info structure instead of linking it to the parent driver,
which then will forbid all hwmon drivers having its own PM ops
callbacks -- the very opposite way of this patch, and it does
not sound fully reasonable and feasible to me...
What do you think about?
Thanks
Nicolin