]> err.no Git - linux-2.6/blobdiff - arch/powerpc/boot/libfdt-wrapper.c
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzi...
[linux-2.6] / arch / powerpc / boot / libfdt-wrapper.c
index 868c5049a80b71eef96a0da0f6626c86c019eef9..c541fd8a95d4966369aa79fbc3557122fd7a36d8 100644 (file)
@@ -35,7 +35,7 @@
 #define check_err(err) \
        ({ \
                if (BAD_ERROR(err) || ((err < 0) && DEBUG)) \
-                       printf("%s():%d  %s\n\r", __FUNCTION__, __LINE__, \
+                       printf("%s():%d  %s\n\r", __func__, __LINE__, \
                               fdt_strerror(err)); \
                if (BAD_ERROR(err)) \
                        exit(); \
@@ -48,7 +48,8 @@
                check_err(_offset) ? NULL : (void *)(_offset+1); \
        })
 
-#define devp_offset(devp)      (((int)(devp))-1)
+#define devp_offset_find(devp) (((int)(devp))-1)
+#define devp_offset(devp)      (devp ? ((int)(devp))-1 : 0)
 
 static void *fdt;
 static void *buf; /* = NULL */
@@ -127,8 +128,17 @@ static void *fdt_wrapper_find_node_by_prop_value(const void *prev,
                                                 const char *val,
                                                 int len)
 {
-       return offset_devp(fdt_node_offset_by_prop_value(fdt, devp_offset(prev),
-                                                        name, val, len));
+       int offset = fdt_node_offset_by_prop_value(fdt, devp_offset_find(prev),
+                                                  name, val, len);
+       return offset_devp(offset);
+}
+
+static void *fdt_wrapper_find_node_by_compatible(const void *prev,
+                                                const char *val)
+{
+       int offset = fdt_node_offset_by_compatible(fdt, devp_offset_find(prev),
+                                                  val);
+       return offset_devp(offset);
 }
 
 static char *fdt_wrapper_get_path(const void *devp, char *buf, int len)
@@ -162,6 +172,7 @@ void fdt_init(void *blob)
        dt_ops.get_parent = fdt_wrapper_get_parent;
        dt_ops.create_node = fdt_wrapper_create_node;
        dt_ops.find_node_by_prop_value = fdt_wrapper_find_node_by_prop_value;
+       dt_ops.find_node_by_compatible = fdt_wrapper_find_node_by_compatible;
        dt_ops.get_path = fdt_wrapper_get_path;
        dt_ops.finalize = fdt_wrapper_finalize;