On Wed, Nov 21, 2012 at 04:57:05PM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote: > From: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> > > devicetrees may have a linux,stdout-path or stdout-path property > in the chosen node describing the console device. This adds a helper > function to match a device against this property and retrieve the options > so a driver can call add_preferred_console for a matching device. > > Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@xxxxxxxxxxxx> > Cc: linux-serial@xxxxxxxxxxxxxxx > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: kernel@xxxxxxxxxxxxxx > Cc: Alan Cox <alan@xxxxxxxxxxxxxxx> > Cc: Grant Likely <grant.likely@xxxxxxxxxxxx> > Cc: Nicolas Ferre <nicolas.ferre@xxxxxxxxx> > --- > drivers/of/base.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > include/linux/of.h | 7 +++++++ > 2 files changed, 53 insertions(+) > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index f2f63c8..72c49ce 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -1470,3 +1470,49 @@ const char *of_prop_next_string(struct property *prop, const char *cur) > return curv; > } > EXPORT_SYMBOL_GPL(of_prop_next_string); > + > +/** > + * of_device_is_stdout_path - check if a device node matches the > + * linux,stdout-path property > + * @np: Pointer to the given device_node > + * @option: parsed option > + * > + * Check if this device node matches the linux,stdout-path property > + * in the chosen node. return true if yes, false otherwise. > + */ > +int of_device_is_stdout_path(struct device_node *dn, char **option) > +{ > + const char *name; > + struct device_node *dn_stdout; > + bool is_stdout = 0; > + const char *tmp; > + const char *tmp_option; > + > + name = of_get_property(of_chosen, "linux,stdout-path", NULL); > + if (name == NULL) > + name = of_get_property(of_chosen, "stdout-path", NULL); > + > + if (name == NULL) > + return 0; > + > + tmp_option = strchr(name, ':'); > + > + tmp = kstrndup(name, strlen(name) - strlen(tmp_option), GFP_KERNEL); tmp_option may be NULL. > + if (!tmp) > + return 0; > + > + dn_stdout = of_find_node_by_path(tmp); > + > + if (dn_stdout && dn_stdout == dn) { > + is_stdout = 1; > + tmp_option++; > + *option = kstrdup(tmp_option, GFP_KERNEL); > + } > + > + of_node_put(dn_stdout); dn_stdout may be NULL aswell. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html