
From: Jeff Mahoney <jeffm@suse.com>

This patch adds sysfs nodes that the hotplug userspace can use to load the
appropriate modules.

In order for hotplug to work with macio devices, patches to module-init-tools
and hotplug must be applied.  Those patches are available at:

 ftp://ftp.suse.com/pub/people/jeffm/linux/macio-hotplug/

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 drivers/macintosh/Makefile      |    2 -
 drivers/macintosh/macio_asic.c  |    3 ++
 drivers/macintosh/macio_sysfs.c |   49 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 53 insertions(+), 1 deletion(-)

diff -puN drivers/macintosh/macio_asic.c~openfirmware-add-sysfs-nodes-for-open-firmware-devices drivers/macintosh/macio_asic.c
--- 25/drivers/macintosh/macio_asic.c~openfirmware-add-sysfs-nodes-for-open-firmware-devices	2005-06-28 22:42:47.000000000 -0700
+++ 25-akpm/drivers/macintosh/macio_asic.c	2005-06-28 22:42:47.000000000 -0700
@@ -126,11 +126,14 @@ static int macio_device_resume(struct de
 	return 0;
 }
 
+extern struct device_attribute macio_dev_attrs[];
+
 struct bus_type macio_bus_type = {
        .name	= "macio",
        .match	= macio_bus_match,
        .suspend	= macio_device_suspend,
        .resume	= macio_device_resume,
+       .dev_attrs = macio_dev_attrs,
 };
 
 static int __init macio_bus_driver_init(void)
diff -puN /dev/null drivers/macintosh/macio_sysfs.c
--- /dev/null	2003-09-15 06:40:47.000000000 -0700
+++ 25-akpm/drivers/macintosh/macio_sysfs.c	2005-06-28 22:42:47.000000000 -0700
@@ -0,0 +1,49 @@
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/stat.h>
+#include <asm/macio.h>
+
+
+#define macio_config_of_attr(field, format_string)			\
+static ssize_t								\
+field##_show (struct device *dev, char *buf)				\
+{									\
+	struct macio_dev *mdev = to_macio_device (dev);			\
+	return sprintf (buf, format_string, mdev->ofdev.node->field);	\
+}
+
+static ssize_t
+compatible_show (struct device *dev, char *buf)
+{
+	struct of_device *of;
+	char *compat;
+	int cplen;
+	int length = 0;
+
+	of = &to_macio_device (dev)->ofdev;
+	compat = (char *) get_property(of->node, "compatible", &cplen);
+	if (!compat) {
+		*buf = '\0';
+		return 0;
+	}
+	while (cplen > 0) {
+		int l;
+		length += sprintf (buf, "%s\n", compat);
+		buf += length;
+		l = strlen (compat) + 1;
+		compat += l;
+		cplen -= l;
+	}
+
+	return length;
+}
+
+macio_config_of_attr (name, "%s\n");
+macio_config_of_attr (type, "%s\n");
+
+struct device_attribute macio_dev_attrs[] = {
+	__ATTR_RO(name),
+	__ATTR_RO(type),
+	__ATTR_RO(compatible),
+	__ATTR_NULL
+};
diff -puN drivers/macintosh/Makefile~openfirmware-add-sysfs-nodes-for-open-firmware-devices drivers/macintosh/Makefile
--- 25/drivers/macintosh/Makefile~openfirmware-add-sysfs-nodes-for-open-firmware-devices	2005-06-28 22:42:47.000000000 -0700
+++ 25-akpm/drivers/macintosh/Makefile	2005-06-28 22:42:47.000000000 -0700
@@ -4,7 +4,7 @@
 
 # Each configuration option enables a list of files.
 
-obj-$(CONFIG_PPC_PMAC)		+= macio_asic.o
+obj-$(CONFIG_PPC_PMAC)		+= macio_asic.o macio_sysfs.o
 
 obj-$(CONFIG_PMAC_MEDIABAY)	+= mediabay.o
 obj-$(CONFIG_MAC_EMUMOUSEBTN)	+= mac_hid.o
_
