Re: [PATCH 1/5] pinctrl: core: Use delayed work for hogs

From: Tony Lindgren
Date: Wed Jan 11 2017 - 13:31:28 EST


* Tony Lindgren <tony@xxxxxxxxxxx> [170111 08:29]:
> * Linus Walleij <linus.walleij@xxxxxxxxxx> [170111 07:34]:
> > On Tue, Jan 10, 2017 at 8:19 PM, Tony Lindgren <tony@xxxxxxxxxxx> wrote:
> >
> > > Below is an experimental fix to intorduce pinctrl_start() that I've
> > > tested with pinctrl-single. Then we should probably make all pin controller
> > > drivers call pinctrl_start() to properly fix the issue of struct pinctrl_dev
> > > handle not being initialized before driver functions are called.
> >
> > Hm I guess that could work, but can we keep pinctrl_register() with the old
> > semantics and add a separate pinctrl_register_and_defer()
> > for those who just wanna start it later by a separate call?
> >
> > Then we don't need any special flags.
>
> OK I'll take a look.
>
> > > Or do you guys have any better ideas?
> >
> > Not really. So you mean revert the previous patch and apply something
> > like this instead?
>
> Let me first take a look to see if we can fix it by making drivers using
> GENERIC_PINCTRL_GROUPS or GENERIC_PINMUX_FUNCTIONS register with
> pinctrl_register_and_defer(). I'll post a patch for that today.

Yeah we can fix this by reverting the late_init parts of the earlier
attempt and introducing a new pinctrl_register_and_init() for controllers
to use:

extern int pinctrl_register_and_init(struct pinctrl_desc *pctldesc,
struct device *dev, void *driver_data,
struct pinctrl_dev **pctldev);

> Then maybe for v4.12 we can attempt to move all pin controller drivers
> to using it so we can fix the problem for good.

And that will also make converting existing drivers to use it later on
trivial.

Will post a patch shortly after some more testing.

Regards,

Tony