@ -595,6 +595,64 @@ struct device_node *of_find_node_by_phandle(phandle handle)
}
EXPORT_SYMBOL ( of_find_node_by_phandle ) ;
/**
* of_property_read_u32 - Find and read a 32 bit integer from a property
* @ np : device node from which the property value is to be read .
* @ propname : name of the property to be searched .
* @ out_value : pointer to return value , modified only if return value is 0.
*
* Search for a property in a device node and read a 32 - bit value from
* it . Returns 0 on success , - EINVAL if the property does not exist ,
* - ENODATA if property does not have a value , and - EOVERFLOW if the
* property data isn ' t large enough .
*
* The out_value is modified only if a valid u32 value can be decoded .
*/
int of_property_read_u32 ( struct device_node * np , char * propname , u32 * out_value )
{
struct property * prop = of_find_property ( np , propname , NULL ) ;
if ( ! prop )
return - EINVAL ;
if ( ! prop - > value )
return - ENODATA ;
if ( sizeof ( * out_value ) > prop - > length )
return - EOVERFLOW ;
* out_value = be32_to_cpup ( prop - > value ) ;
return 0 ;
}
EXPORT_SYMBOL_GPL ( of_property_read_u32 ) ;
/**
* of_property_read_string - Find and read a string from a property
* @ np : device node from which the property value is to be read .
* @ propname : name of the property to be searched .
* @ out_string : pointer to null terminated return string , modified only if
* return value is 0.
*
* Search for a property in a device tree node and retrieve a null
* terminated string value ( pointer to data , not a copy ) . Returns 0 on
* success , - EINVAL if the property does not exist , - ENODATA if property
* does not have a value , and - EILSEQ if the string is not null - terminated
* within the length of the property data .
*
* The out_string pointer is modified only if a valid string can be decoded .
*/
int of_property_read_string ( struct device_node * np , char * propname ,
char * * out_string )
{
struct property * prop = of_find_property ( np , propname , NULL ) ;
if ( ! prop )
return - EINVAL ;
if ( ! prop - > value )
return - ENODATA ;
if ( strnlen ( prop - > value , prop - > length ) > = prop - > length )
return - EILSEQ ;
* out_string = prop - > value ;
return 0 ;
}
EXPORT_SYMBOL_GPL ( of_property_read_string ) ;
/**
* of_parse_phandle - Resolve a phandle property to a device_node pointer
* @ np : Pointer to device node holding phandle property