Re: [RFC PATCH v4 7/8] pwm: Add dummy pwmchip for orphan pwms

From: jeffy
Date: Wed Oct 18 2017 - 01:16:30 EST


Hi guys,

On 10/18/2017 03:05 AM, Mark Brown wrote:
On Tue, Oct 17, 2017 at 11:53:01AM -0700, Brian Norris wrote:
On Tue, Oct 17, 2017 at 07:46:03PM +0100, Mark Brown wrote:

I would expect we can get a long way in the DT by doing a pass over the
tree and adding links between device nodes in cases where phandle
references exist. There is a potential issue with circular links which
I'm just going to handwave away right now but I'd expect that to help
otherwise.

But I didn't think FDTs encoded type info. So you don't really know
whether a phandle is a phandle -- it's just an int (which happens to
have a corresponding property in some other node). Are we trusting our
DT bindings well enough to say that, for example, we know that in any
given device node, a property like 'pwms' must be a phandle to a PWM
provider? OK, maybe 'pwms' is a bad example (it's unlikely to get
reused, and it has a companion '#pwm-cells' property), but grepping the
DT bindings directory shows a ton of one-off properties that contain
phandles.

If we're going with the 90% thing we can probably get a long way with a
whitelist of properties, and we'll be able to take that a lot further
with the validatable schemas if they ever happen.


so it looks like we are going to use device link in common code to fix this issue(and also other dependency issue), then i will drop this patch and the followed rockchip drm device link patch in next version :)


also the reason why i try to use dummy chip instead is that:

currently we have these devices: rockchip spi device(master) -> cros_ec_spi device(child) -> cros_ec_pwm(spi based pwm) -> pwm_bl

i added device link to cros_ec_pwm and pwm_bl, that works well for unbind/bind cros_ec_pwm device case, but there's a warning when i try to unbind cros_ec_spi:


static void device_links_purge(struct device *dev)
{
...
list_for_each_entry_safe_reverse(link, ln, &dev->links.consumers, s_node) {
WARN_ON(link->status != DL_STATE_DORMANT &&
link->status != DL_STATE_NONE); <--- hit warning here!
__device_link_del(link);
}


but i checked again, that could due to the way spi core unregester children devices. maybe it need to call device_release_driver