[PATCH v3 1/2] ohci-platform: Add support for devicetree instantiation
Alan Stern
stern at rowland.harvard.edu
Fri Jan 10 10:29:27 EST 2014
On Fri, 10 Jan 2014, Hans de Goede wrote:
> >> +static struct usb_ohci_pdata ohci_platform_defaults = {
> >> + .power_on = ohci_platform_power_on,
> >> + .power_suspend = ohci_platform_power_off,
> >> + .power_off = ohci_platform_power_off,
> >> };
> >
> > I wonder if these routines couldn't be shared with non-DT setups. We
> > could add an array of 3 struct clk pointers to the usb_ohci_pdata
> > structure. Then if any of them are set, store these routines in the
> > power_* pointers. (And likewise for ehci-platform.) Something to
> > consider for a future patch...
>
> I don't like automatically setting the power_ platform_data members much.
Me either.
> But I've already been thinking about moving the clks member to platform_data,
> and simply exporting ohci_platform_power_* so that other drivers can use them
> and put them in the platform_data members themselves. That is indeed something
> for another patch though.
It would require building ohci-platform into the kernel instead of
making it a separate module. That shouldn't matter much for
embedded/SoC systems, though. It seems like a good approach.
> >> if (!pdata) {
> >> - WARN_ON(1);
> >> - return -ENODEV;
> >> + pdata = dev->dev.platform_data = &ohci_platform_defaults;
> >
> > This has a subtle bug. Consider what will happen if ohci-platform is
> > loaded, then unloaded and loaded again.
>
> Right, so we need to add a "dev->dev.platform_data == &ohci_platform_defaults"
> check on remove an then set platform_data to NULL, good point, will fix in the
> next version.
Exactly.
> > The existing ehci-platform driver has this same bug. I definitely
> > remember discussing at once or twice in the past, but evidently it has
> > never been fixed.
>
> If you agree with the above fix I'll also throw it into the next revision
> of the ehci patch.
Thank you.
> Before I do a v4, one question:
>
> Ma Haijun does not like the use of OHCI_MAX_CLKS:
>
> >> +#define OHCI_MAX_CLKS 3
> >
> > I still recommend using of_count_phandle_with_args(np, "clocks",
> > "#clock-cells") to determine the number of clocks or the existence of clocks
> > property (-ENOENT)
>
> His suggestion would mean dynamically allocating the clks array and having
> clks_count variable. I still think this is a bit overkill, but I can do that for
> v4 if you want, so what do you prefer ?
Space isn't a big consideration, because we're not likely to see a
system with more a few controllers. I say keep it simple. If someone
comes up with a controller using more than 3 clocks, we can change to
dynamic allocation then.
Alan Stern
More information about the linux-arm-kernel
mailing list