Consolidate of_device_is_compatible
The only difference here is that Sparc uses strncmp to match compatibility names while PowerPC uses strncasecmp. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Acked-by: Paul Mackerras <paulus@samba.org> Acked-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -1057,31 +1057,6 @@ void __init early_init_devtree(void *params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Checks if the given "compat" string matches one of the strings in
|
|
||||||
* the device's "compatible" property
|
|
||||||
*/
|
|
||||||
int of_device_is_compatible(const struct device_node *device,
|
|
||||||
const char *compat)
|
|
||||||
{
|
|
||||||
const char* cp;
|
|
||||||
int cplen, l;
|
|
||||||
|
|
||||||
cp = of_get_property(device, "compatible", &cplen);
|
|
||||||
if (cp == NULL)
|
|
||||||
return 0;
|
|
||||||
while (cplen > 0) {
|
|
||||||
if (strncasecmp(cp, compat, strlen(compat)) == 0)
|
|
||||||
return 1;
|
|
||||||
l = strlen(cp) + 1;
|
|
||||||
cp += l;
|
|
||||||
cplen -= l;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(of_device_is_compatible);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates whether the root node has a given value in its
|
* Indicates whether the root node has a given value in its
|
||||||
* compatible property.
|
* compatible property.
|
||||||
|
@@ -32,27 +32,6 @@ static struct device_node *allnodes;
|
|||||||
*/
|
*/
|
||||||
static DEFINE_RWLOCK(devtree_lock);
|
static DEFINE_RWLOCK(devtree_lock);
|
||||||
|
|
||||||
int of_device_is_compatible(const struct device_node *device,
|
|
||||||
const char *compat)
|
|
||||||
{
|
|
||||||
const char* cp;
|
|
||||||
int cplen, l;
|
|
||||||
|
|
||||||
cp = of_get_property(device, "compatible", &cplen);
|
|
||||||
if (cp == NULL)
|
|
||||||
return 0;
|
|
||||||
while (cplen > 0) {
|
|
||||||
if (strncmp(cp, compat, strlen(compat)) == 0)
|
|
||||||
return 1;
|
|
||||||
l = strlen(cp) + 1;
|
|
||||||
cp += l;
|
|
||||||
cplen -= l;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(of_device_is_compatible);
|
|
||||||
|
|
||||||
struct device_node *of_get_parent(const struct device_node *node)
|
struct device_node *of_get_parent(const struct device_node *node)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
@@ -37,27 +37,6 @@ static struct device_node *allnodes;
|
|||||||
*/
|
*/
|
||||||
static DEFINE_RWLOCK(devtree_lock);
|
static DEFINE_RWLOCK(devtree_lock);
|
||||||
|
|
||||||
int of_device_is_compatible(const struct device_node *device,
|
|
||||||
const char *compat)
|
|
||||||
{
|
|
||||||
const char* cp;
|
|
||||||
int cplen, l;
|
|
||||||
|
|
||||||
cp = of_get_property(device, "compatible", &cplen);
|
|
||||||
if (cp == NULL)
|
|
||||||
return 0;
|
|
||||||
while (cplen > 0) {
|
|
||||||
if (strncmp(cp, compat, strlen(compat)) == 0)
|
|
||||||
return 1;
|
|
||||||
l = strlen(cp) + 1;
|
|
||||||
cp += l;
|
|
||||||
cplen -= l;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(of_device_is_compatible);
|
|
||||||
|
|
||||||
struct device_node *of_get_parent(const struct device_node *node)
|
struct device_node *of_get_parent(const struct device_node *node)
|
||||||
{
|
{
|
||||||
struct device_node *np;
|
struct device_node *np;
|
||||||
|
@@ -63,3 +63,27 @@ const void *of_get_property(const struct device_node *np, const char *name,
|
|||||||
return pp ? pp->value : NULL;
|
return pp ? pp->value : NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(of_get_property);
|
EXPORT_SYMBOL(of_get_property);
|
||||||
|
|
||||||
|
/** Checks if the given "compat" string matches one of the strings in
|
||||||
|
* the device's "compatible" property
|
||||||
|
*/
|
||||||
|
int of_device_is_compatible(const struct device_node *device,
|
||||||
|
const char *compat)
|
||||||
|
{
|
||||||
|
const char* cp;
|
||||||
|
int cplen, l;
|
||||||
|
|
||||||
|
cp = of_get_property(device, "compatible", &cplen);
|
||||||
|
if (cp == NULL)
|
||||||
|
return 0;
|
||||||
|
while (cplen > 0) {
|
||||||
|
if (of_compat_cmp(cp, compat, strlen(compat)) == 0)
|
||||||
|
return 1;
|
||||||
|
l = strlen(cp) + 1;
|
||||||
|
cp += l;
|
||||||
|
cplen -= l;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(of_device_is_compatible);
|
||||||
|
@@ -24,6 +24,8 @@
|
|||||||
#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1
|
#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1
|
||||||
#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
|
#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
|
||||||
|
|
||||||
|
#define of_compat_cmp(s1, s2, l) strncasecmp((s1), (s2), (l))
|
||||||
|
|
||||||
/* Definitions used by the flattened device tree */
|
/* Definitions used by the flattened device tree */
|
||||||
#define OF_DT_HEADER 0xd00dfeed /* marker */
|
#define OF_DT_HEADER 0xd00dfeed /* marker */
|
||||||
#define OF_DT_BEGIN_NODE 0x1 /* Start of node, full name */
|
#define OF_DT_BEGIN_NODE 0x1 /* Start of node, full name */
|
||||||
|
@@ -23,6 +23,8 @@
|
|||||||
#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 2
|
#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 2
|
||||||
#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
|
#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
|
||||||
|
|
||||||
|
#define of_compat_cmp(s1, s2, l) strncmp((s1), (s2), (l))
|
||||||
|
|
||||||
typedef u32 phandle;
|
typedef u32 phandle;
|
||||||
typedef u32 ihandle;
|
typedef u32 ihandle;
|
||||||
|
|
||||||
|
@@ -23,6 +23,8 @@
|
|||||||
#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 2
|
#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 2
|
||||||
#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
|
#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
|
||||||
|
|
||||||
|
#define of_compat_cmp(s1, s2, l) strncmp((s1), (s2), (l))
|
||||||
|
|
||||||
typedef u32 phandle;
|
typedef u32 phandle;
|
||||||
typedef u32 ihandle;
|
typedef u32 ihandle;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user