Create /sys/bus/of_platform/devices/*/modalias file to allow autoloading
of modules. modalias files are already present for many other bus types.

Signed-off-by: Olaf Hering <[EMAIL PROTECTED]>

---
 drivers/of/device.c |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

--- a/drivers/of/device.c
+++ b/drivers/of/device.c
@@ -86,7 +86,19 @@ static ssize_t dev_show_devspec(struct d
        return sprintf(buf, "%s", ofdev->node->full_name);
 }
 
+static ssize_t dev_show_modalias(struct device *dev,
+                               struct device_attribute *attr, char *buf)
+{
+       struct of_device *ofdev = to_of_device(dev);
+       ssize_t len = 0;
+
+       if (ofdev)
+               len = of_device_get_modalias(ofdev, buf, PAGE_SIZE);
+       return len;
+}
+
 static DEVICE_ATTR(devspec, S_IRUGO, dev_show_devspec, NULL);
+static DEVICE_ATTR(modalias, S_IRUGO, dev_show_modalias, NULL);
 
 /**
  * of_release_dev - free an of device structure when all users of it are 
finished.
@@ -116,6 +128,11 @@ int of_device_register(struct of_device 
                return rc;
 
        rc = device_create_file(&ofdev->dev, &dev_attr_devspec);
+       if (rc) {
+               device_unregister(&ofdev->dev);
+               return rc;
+       }
+       rc = device_create_file(&ofdev->dev, &dev_attr_modalias);
        if (rc)
                device_unregister(&ofdev->dev);
 
@@ -126,6 +143,7 @@ EXPORT_SYMBOL(of_device_register);
 void of_device_unregister(struct of_device *ofdev)
 {
        device_remove_file(&ofdev->dev, &dev_attr_devspec);
+       device_remove_file(&ofdev->dev, &dev_attr_modalias);
        device_unregister(&ofdev->dev);
 }
 EXPORT_SYMBOL(of_device_unregister);
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to