drm/i915: fix oops on single crtc devices.
[safe/jmp/linux-2.6] / drivers / macintosh / macio_sysfs.c
index 7f7d4ea..6999ce5 100644 (file)
@@ -1,4 +1,3 @@
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/stat.h>
 #include <asm/macio.h>
@@ -10,19 +9,19 @@ field##_show (struct device *dev, struct device_attribute *attr,     \
               char *buf)                                               \
 {                                                                      \
        struct macio_dev *mdev = to_macio_device (dev);                 \
-       return sprintf (buf, format_string, mdev->ofdev.node->field);   \
+       return sprintf (buf, format_string, mdev->ofdev.dev.of_node->field); \
 }
 
 static ssize_t
 compatible_show (struct device *dev, struct device_attribute *attr, char *buf)
 {
        struct of_device *of;
-       char *compat;
+       const char *compat;
        int cplen;
        int length = 0;
 
        of = &to_macio_device (dev)->ofdev;
-       compat = (char *) get_property(of->node, "compatible", &cplen);
+       compat = of_get_property(of->dev.of_node, "compatible", &cplen);
        if (!compat) {
                *buf = '\0';
                return 0;
@@ -42,26 +41,24 @@ compatible_show (struct device *dev, struct device_attribute *attr, char *buf)
 static ssize_t modalias_show (struct device *dev, struct device_attribute *attr,
                              char *buf)
 {
-       struct of_device *of;
-       char *compat;
-       int cplen;
-       int length;
+       struct of_device *ofdev = to_of_device(dev);
+       int len;
 
-       of = &to_macio_device (dev)->ofdev;
-       compat = (char *) get_property (of->node, "compatible", &cplen);
-       if (!compat) compat = "", cplen = 1;
-       length = sprintf (buf, "of:N%sT%s", of->node->name, of->node->type);
-       buf += length;
-       while (cplen > 0) {
-               int l;
-               length += sprintf (buf, "C%s", compat);
-               buf += length;
-               l = strlen (compat) + 1;
-               compat += l;
-               cplen -= l;
-       }
+       len = of_device_get_modalias(ofdev, buf, PAGE_SIZE - 2);
 
-       return length;
+       buf[len] = '\n';
+       buf[len+1] = 0;
+
+       return len+1;
+}
+
+static ssize_t devspec_show(struct device *dev,
+                               struct device_attribute *attr, char *buf)
+{
+       struct of_device *ofdev;
+
+       ofdev = to_of_device(dev);
+       return sprintf(buf, "%s\n", ofdev->dev.of_node->full_name);
 }
 
 macio_config_of_attr (name, "%s\n");
@@ -72,5 +69,6 @@ struct device_attribute macio_dev_attrs[] = {
        __ATTR_RO(type),
        __ATTR_RO(compatible),
        __ATTR_RO(modalias),
+       __ATTR_RO(devspec),
        __ATTR_NULL
 };