On Wed, 2014-03-12 at 11:59 +0800, Chenhui Zhao wrote:
> On Tue, Mar 11, 2014 at 06:42:51PM -0500, Scott Wood wrote:
> > On Fri, 2014-03-07 at 12:57 +0800, Chenhui Zhao wrote:
> > > +int fsl_rcpm_init(void)
> > > +{
> > > + struct device_node *np;
> > > +
> > > + np = of_find_compatible_node(NULL, NULL, "fsl,qoriq-rcpm-2.0");
> > > + if (np) {
> > > +         rcpm_v2_regs = of_iomap(np, 0);
> > > +         of_node_put(np);
> > > +         if (!rcpm_v2_regs)
> > > +                 return -ENOMEM;
> > > +
> > > +         qoriq_pm_ops = &qoriq_rcpm_v2_ops;
> > > +
> > > + } else {
> > > +         np = of_find_compatible_node(NULL, NULL, "fsl,qoriq-rcpm-1.0");
> > > +         if (np) {
> > > +                 rcpm_v1_regs = of_iomap(np, 0);
> > > +                 of_node_put(np);
> > > +                 if (!rcpm_v1_regs)
> > > +                         return -ENOMEM;
> > > +
> > > +                 qoriq_pm_ops = &qoriq_rcpm_v1_ops;
> > > +
> > > +         } else {
> > > +                 pr_err("%s: can't find the rcpm node.\n", __func__);
> > > +                 return -EINVAL;
> > > +         }
> > > + }
> > > +
> > > + return 0;
> > > +}
> > 
> > Why isn't this a proper platform driver?
> > 
> > -Scott
> 
> The RCPM is not a single function IP block, instead it is a collection
> of device run control and power management. It would be called by other
> drivers and functions. For example, the callback .freeze_time_base()
> need to be called at early stage of kernel init. Therefore, it would be
> better to init it at early stage.

OK, but consider using of_find_matching_node_and_match().

-Scott


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to