Add a fdt_set_node_status function that will set the specified
node's status to the value contained in "status". If the node
doesn't have "status" property that will be created.

Signed-off-by: Chunhe Lan <chunhe....@freescale.com>
---
 common/fdt_support.c  |   17 ++++++++++++++++-
 include/fdt_support.h |    3 +++
 2 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/common/fdt_support.c b/common/fdt_support.c
index 19b2ef6..384523b 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -2,7 +2,7 @@
  * (C) Copyright 2007
  * Gerald Van Baren, Custom IDEAS, vanba...@cideas.com
  *
- * Copyright 2010 Freescale Semiconductor, Inc.
+ * Copyright 2010-2011 Freescale Semiconductor, Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -904,6 +904,21 @@ void fdt_del_node_and_alias(void *blob, const char *alias)
        fdt_delprop(blob, off, alias);
 }
 
+/*
+ * Sets the specified node's status to the value contained in "status".
+ * If the first character of the specified path is "/" then we use
+ * alias as a path. Otherwise, we look for an alias of that name.
+ */
+void fdt_set_node_status(void *fdt, const char *alias, const char *status)
+{
+       const char *path = fdt_get_alias(fdt, alias);
+
+       if (!path)
+               path = alias;
+
+       do_fixup_by_path(fdt, path, "status", status, strlen(status) + 1, 1);
+}
+
 /* Helper to read a big number; size is in cells (not bytes) */
 static inline u64 of_read_number(const __be32 *cell, int size)
 {
diff --git a/include/fdt_support.h b/include/fdt_support.h
index 863024f..74d7c83 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -2,6 +2,8 @@
  * (C) Copyright 2007
  * Gerald Van Baren, Custom IDEAS, vanba...@cideas.com
  *
+ * Copyright (C) 2011 Freescale Semiconductor, Inc.
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
@@ -85,6 +87,7 @@ int fdt_fixup_nor_flash_size(void *blob);
 
 void fdt_fixup_mtdparts(void *fdt, void *node_info, int node_info_size);
 void fdt_del_node_and_alias(void *blob, const char *alias);
+void fdt_set_node_status(void *fdt, const char *alias, const char *status);
 u64 fdt_translate_address(void *blob, int node_offset, const u32 *in_addr);
 int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
                                        phys_addr_t compat_off);
-- 
1.5.6.5


_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to