On Thu, Oct 13, 2016 at 09:04:42AM +0200, Heiko Stuebner wrote: > > > > +static int __init pwrseq_generic_register(void) > > > > +{ > > > > + struct pwrseq_generic *pwrseq_gen; > > > > + int i; > > > > + > > > > + for (i = 0; i < CONFIG_PWRSEQ_GENERIC_INSTANCE_NUMBER; i++) { > > > > + pwrseq_gen = kzalloc(sizeof(*pwrseq_gen), GFP_KERNEL); > > > > + if (!pwrseq_gen) > > > > + return -ENOMEM; > > > > + > > > > + pwrseq_gen->pwrseq.pwrseq_of_match_table = generic_id_table; > > > > + pwrseq_gen->pwrseq.get = pwrseq_generic_get; > > > > + pwrseq_gen->pwrseq.on = pwrseq_generic_on; > > > > + pwrseq_gen->pwrseq.off = pwrseq_generic_off; > > > > + pwrseq_gen->pwrseq.put = pwrseq_generic_put; > > > > + pwrseq_gen->pwrseq.free = pwrseq_generic_free; > > > > + > > > > + pwrseq_register(&pwrseq_gen->pwrseq); > > > > + } > > > > + > > > > + return 0; > > > > +} > > > > +postcore_initcall(pwrseq_generic_register) > > > > > > I see that you need to have it preallocated for the compatible matching, > > > but wouldn't it also work to either just register the type and allocate > > > dynamically or otherwise just allocate a new spare everytime > > > pwrseq_generic_get() picks up the previous spare? > > > > Before compatible matching, the host driver doesn't know which pwrseq type > > for its child node, then doesn't know which pwrseq instance needs to be > > allocated. From dts, we don't know which pwrseq type for the node. > > yes, that is why I was suggesting allocating one (or two) here in > pwrseq_generic_register() and every time pwrseq_generic_get() grabs the last > free sequence instance, you allocate a new free spare one in that function. Good idea. -- Best Regards, Peter Chen -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html