diff options
| author | Shengzhou Liu <Shengzhou.Liu@freescale.com> | 2011-10-14 16:26:05 +0800 | 
|---|---|---|
| committer | Kumar Gala <galak@kernel.crashing.org> | 2011-10-18 00:36:55 -0500 | 
| commit | 2a523f524090d7fc5600ece9f12d7c955db567d7 (patch) | |
| tree | 5c7e51b81be51bae4f7ef571861dab675652bb4d /common/fdt_support.c | |
| parent | 4d28db8a1e8b90e1e3ffd95d7f949b849e33fa2f (diff) | |
| download | olio-uboot-2014.01-2a523f524090d7fc5600ece9f12d7c955db567d7.tar.xz olio-uboot-2014.01-2a523f524090d7fc5600ece9f12d7c955db567d7.zip | |
fdt: Add new fdt_set_node_status & fdt_set_status_by_alias helpers
Add common function fdt_set_node_status() to assist in various locations
that we set a nodes status.  This function utilizes the status values
that are part of the EPAPR spec (on power.org).
fdt_set_status_by_alias() is based on fdt_set_node_status() but uses an
alias string to identify the node to update.
We also add some shortcut functions to help the common cases of setting
"okay" and "disabled":
	fdt_status_okay()
	fdt_status_disabled()
	fdt_status_okay_by_alias()
	fdt_status_disabled_by_alias()
Finally, we fixup the corenet_ds ethernet code which previously had
a function by the same name that can be replaced with the new helpers.
Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Acked-by: Gerald Van Baren <vanbaren@cideas.com>
Diffstat (limited to 'common/fdt_support.c')
| -rw-r--r-- | common/fdt_support.c | 60 | 
1 files changed, 59 insertions, 1 deletions
| diff --git a/common/fdt_support.c b/common/fdt_support.c index e0d3fe33e..bdda64d2d 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -2,7 +2,7 @@   * (C) Copyright 2007   * Gerald Van Baren, Custom IDEAS, vanbaren@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. @@ -1259,6 +1259,64 @@ unsigned int fdt_create_phandle(void *fdt, int nodeoffset)  	return phandle;  } +/* + * fdt_set_node_status: Set status for the given node + * + * @fdt: ptr to device tree + * @nodeoffset: node to update + * @status: FDT_STATUS_OKAY, FDT_STATUS_DISABLED, + *	    FDT_STATUS_FAIL, FDT_STATUS_FAIL_ERROR_CODE + * @error_code: optional, only used if status is FDT_STATUS_FAIL_ERROR_CODE + */ +int fdt_set_node_status(void *fdt, int nodeoffset, +			enum fdt_status status, unsigned int error_code) +{ +	char buf[16]; +	int ret = 0; + +	if (nodeoffset < 0) +		return nodeoffset; + +	switch (status) { +	case FDT_STATUS_OKAY: +		ret = fdt_setprop_string(fdt, nodeoffset, "status", "okay"); +		break; +	case FDT_STATUS_DISABLED: +		ret = fdt_setprop_string(fdt, nodeoffset, "status", "disabled"); +		break; +	case FDT_STATUS_FAIL: +		ret = fdt_setprop_string(fdt, nodeoffset, "status", "fail"); +		break; +	case FDT_STATUS_FAIL_ERROR_CODE: +		sprintf(buf, "fail-%d", error_code); +		ret = fdt_setprop_string(fdt, nodeoffset, "status", buf); +		break; +	default: +		printf("Invalid fdt status: %x\n", status); +		ret = -1; +		break; +	} + +	return ret; +} + +/* + * fdt_set_status_by_alias: Set status for the given node given an alias + * + * @fdt: ptr to device tree + * @alias: alias of node to update + * @status: FDT_STATUS_OKAY, FDT_STATUS_DISABLED, + *	    FDT_STATUS_FAIL, FDT_STATUS_FAIL_ERROR_CODE + * @error_code: optional, only used if status is FDT_STATUS_FAIL_ERROR_CODE + */ +int fdt_set_status_by_alias(void *fdt, const char* alias, +			    enum fdt_status status, unsigned int error_code) +{ +	int offset = fdt_path_offset(fdt, alias); + +	return fdt_set_node_status(fdt, offset, status, error_code); +} +  #if defined(CONFIG_VIDEO)  int fdt_add_edid(void *blob, const char *compat, unsigned char *edid_buf)  { |