create modalias file in sysfs for bus of_platform
Subsystems (2)
PATCH 1/1 create modalias file in sysfs for bus of_platform
Create /sys/bus/of_platform/devices/*/modalias file to allow autoloading of modules. modalias files are already present for many other bus types.
--- drivers/of/device.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
drivers/of/device.c +18 -0
@@ -86,7 +86,19 @@ static ssize_t dev_show_devspec(struct dreturn 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_devicereturn 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);
PATCH v2 1/1 create modalias file in sysfs for bus of_platform
Create /sys/bus/of_platform/devices/*/modalias file to allow autoloading of modules. modalias files are already present for many other bus types.
--- drivers/of/device.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
drivers/of/device.c +19 -0
@@ -86,7 +86,20 @@ static ssize_t dev_show_devspec(struct dreturn 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 ; + + len =of_device_get_modalias (ofdev, buf,PAGE_SIZE ); + buf[len] ='\n' ; + buf[len+1 ] =0 ; +return len+1 ; +} + 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 +129,11 @@ int of_device_register(struct of_devicereturn 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 +144,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);
Hi Olaf,
Thanks for doing this. Patches to drivers/of should also be cc'd to the Sparc guys as they share this stuff with is, now.
Also, drivers/macintosh/macio_sysfs.c does this for itself, so that should probably be removed.
Quoted 13 lines · On Tue, 22 Jan 2008 15:40:53 +0100 Olaf Hering <[email protected]> wrote:
Create
/sys/bus/of_platform/devices/*/modaliasfile 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 | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
drivers/of/device.c static ssize_t dev_show_devspec(struct d · line 95
Quoted 10 lines
drivers/of/device.c +7
-0@@ -86,7 +86,20 @@ static ssize_t dev_show_devspec(struct dreturn 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 ; + + len =of_device_get_modalias (ofdev, buf,PAGE_SIZE );
Should you pass (PAGE_SIZE - 1 (or 2)) here?
Quoted 30 lines
drivers/of/device.c +12
-0+ buf[len] ='\n' ; + buf[len+1 ] =0 ; +return len+1 ; +} + 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 +129,11 @@ int of_device_register(struct of_devicereturn 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 +144,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);
Signature · 3 lines
Cheers, Stephen Rothwell [email protected] http://www.canb.auug.org.au/~sfr/
PATCH v3 1/1 create modalias file in sysfs for bus of_platform
In reply to Olaf HeringCreate /sys/bus/of_platform/devices/*/modalias file to allow autoloading of modules. modalias files are already present for many other bus types.
--- drivers/of/device.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
drivers/of/device.c +19 -0
@@ -86,7 +86,20 @@ static ssize_t dev_show_devspec(struct dreturn 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 ; + + len =of_device_get_modalias (ofdev, buf,PAGE_SIZE -2 ); + buf[len] ='\n' ; + buf[len+1 ] =0 ; +return len+1 ; +} + 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 +129,11 @@ int of_device_register(struct of_devicereturn 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 +144,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);
[Adding sparclinux cc]
I withdraw the comment about drivers/macintosh/macio_sysfs.c, I didn't realise that it was a whole other bus.
Quoted 57 lines · On Tue, 22 Jan 2008 20:09:39 +0100 Olaf Hering <[email protected]> wrote:
Create
/sys/bus/of_platform/devices/*/modaliasfile 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 | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)drivers/of/device.c +19
-0@@ -86,7 +86,20 @@ static ssize_t dev_show_devspec(struct dreturn 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 ; + + len =of_device_get_modalias (ofdev, buf,PAGE_SIZE -2 ); + buf[len] ='\n' ; + buf[len+1 ] =0 ; +return len+1 ; +} + 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 +129,11 @@ int of_device_register(struct of_devicereturn 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 +144,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
[email protected]
https://ozlabs.org/mailman/listinfo/linuxppc-dev
Signature · 3 lines
Cheers, Stephen Rothwell [email protected] http://www.canb.auug.org.au/~sfr/
Quoted 2 lines · Olaf Hering
Create
/sys/bus/of_platform/devices/*/modaliasfile to allow autoloading of modules. modalias files are already present for many other bus types.
This one causes various oopses on boot for me, both on a dual G5 and on a tibook.
Paul.
PATCH v4 1/1 create modalias file in sysfs for bus of_platform
Create /sys/bus/of_platform/devices/*/modalias file to allow autoloading of modules. modalias files are already present for many other bus types.
--- drivers/of/device.c | 33 ++++++++++++++++++--------------- drivers/of/platform.c | 3 +++ 2 files changed, 21 insertions(+), 15 deletions(-)
drivers/of/device.c +18 -15
@@ -77,7 +77,7 @@ void of_dev_put(struct of_device *dev) }EXPORT_SYMBOL (of_dev_put); -static ssize_t dev_show_devspec (struct device *dev, +static ssize_t devspec_show (struct device *dev,struct device_attribute *attr,char *buf) {struct of_device *ofdev;
@@ -86,7 +86,22 @@ static ssize_t dev_show_devspec(struct dreturn sprintf (buf,"%s" , ofdev->node->full_name); } -static DEVICE_ATTR(devspec, S_IRUGO, dev_show_devspec, NULL); +static ssize_t modalias_show (struct device *dev, +struct device_attribute *attr,char *buf) +{ +ssize_t len; + + len =of_device_get_modalias (to_of_device (dev), buf,PAGE_SIZE -2 ); + buf[len] ='\n' ; + buf[len+1 ] =0 ; +return len+1 ; +} + +struct device_attribute of_platform_device_attrs[] = { +__ATTR_RO (devspec), +__ATTR_RO (modalias), + __ATTR_NULL +};/** * of_release_dev - free an of device structure when all users of it are finished.
@@ -107,25 +122,13 @@ EXPORT_SYMBOL(of_release_dev);int of_device_register (struct of_device *ofdev) { -int rc; -BUG_ON (ofdev->node ==NULL ); - - rc =device_register (&ofdev->dev); -if (rc) -return rc; - - rc =device_create_file (&ofdev->dev, &dev_attr_devspec); -if (rc) -device_unregister (&ofdev->dev); - -return rc; +return device_register (&ofdev->dev); }EXPORT_SYMBOL (of_device_register);void of_device_unregister (struct of_device *ofdev) { -device_remove_file (&ofdev->dev, &dev_attr_devspec);device_unregister (&ofdev->dev); }EXPORT_SYMBOL (of_device_unregister);
drivers/of/platform.c +3 -0
@@ -17,6 +17,8 @@#include <linux/of_device.h> #include <linux/of_platform.h> +extern struct device_attribute of_platform_device_attrs[]; +static int of_platform_bus_match (struct device *dev,struct device_driver *drv) {struct of_device *of_dev =to_of_device (dev);
@@ -93,6 +95,7 @@ int of_bus_type_init(struct bus_type *bu bus->remove = of_platform_device_remove; bus->suspend = of_platform_device_suspend; bus->resume = of_platform_device_resume; + bus->dev_attrs = of_platform_device_attrs;return bus_register (bus); }
PATCH v5 1/1 create modalias file in sysfs for bus of_platform
Create /sys/bus/of_platform/devices/*/modalias file to allow autoloading of modules. modalias files are already present for many other bus types. This adds also a newline to the devspec files.
Also create a devspec file for mac-io devices. They were created as a side effect. Use correct buffer size for mac-io modalias buffer.
Tested on iBook1 and Efika.
--- drivers/macintosh/macio_sysfs.c | 12 +++++++++++- drivers/of/device.c | 36 ++++++++++++++++++++---------------- drivers/of/platform.c | 3 +++ 3 files changed, 34 insertions(+), 17 deletions(-)
drivers/macintosh/macio_sysfs.c +11 -1
@@ -44,7 +44,7 @@ static ssize_t modalias_show (struct devstruct of_device *ofdev =to_of_device (dev);int len; - len =of_device_get_modalias (ofdev, buf,PAGE_SIZE ); + len =of_device_get_modalias (ofdev, buf,PAGE_SIZE -2 ); buf[len] ='\n' ; buf[len+1 ] =0 ;
@@ -52,6 +52,15 @@ static ssize_t modalias_show (struct devreturn 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->node->full_name); +} +macio_config_of_attr (name,"%s\n" );macio_config_of_attr (type,"%s\n" );
@@ -60,5 +69,6 @@ struct device_attribute macio_dev_attrs[__ATTR_RO (type),__ATTR_RO (compatible),__ATTR_RO (modalias), +__ATTR_RO (devspec), __ATTR_NULL };
drivers/of/device.c +20 -16
@@ -48,16 +48,32 @@ void of_dev_put(struct of_device *dev) }EXPORT_SYMBOL (of_dev_put); -static ssize_t dev_show_devspec (struct device *dev, +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" , ofdev->node->full_name); +return sprintf (buf,"%s\n" , ofdev->node->full_name); } -static DEVICE_ATTR(devspec, S_IRUGO, dev_show_devspec, NULL); +static ssize_t modalias_show (struct device *dev, +struct device_attribute *attr,char *buf) +{ +struct of_device *ofdev =to_of_device (dev); +ssize_t len =0 ; + + len =of_device_get_modalias (ofdev, buf,PAGE_SIZE -2 ); + buf[len] ='\n' ; + buf[len+1 ] =0 ; +return len+1 ; +} + +struct device_attribute of_platform_device_attrs[] = { +__ATTR_RO (devspec), +__ATTR_RO (modalias), + __ATTR_NULL +};/** * of_release_dev - free an of device structure when all users of it are finished.
@@ -78,25 +94,13 @@ EXPORT_SYMBOL(of_release_dev);int of_device_register (struct of_device *ofdev) { -int rc; -BUG_ON (ofdev->node =NULL ); - - rc =device_register (&ofdev->dev); -if (rc) -return rc; - - rc =device_create_file (&ofdev->dev, &dev_attr_devspec); -if (rc) -device_unregister (&ofdev->dev); - -return rc; +return device_register (&ofdev->dev); }EXPORT_SYMBOL (of_device_register);void of_device_unregister (struct of_device *ofdev) { -device_remove_file (&ofdev->dev, &dev_attr_devspec);device_unregister (&ofdev->dev); }EXPORT_SYMBOL (of_device_unregister);
drivers/of/platform.c +3 -0
@@ -17,6 +17,8 @@#include <linux/of_device.h> #include <linux/of_platform.h> +extern struct device_attribute of_platform_device_attrs[]; +static int of_platform_bus_match (struct device *dev,struct device_driver *drv) {struct of_device *of_dev =to_of_device (dev);
@@ -103,6 +105,7 @@ int of_bus_type_init(struct bus_type *bu bus->suspend = of_platform_device_suspend; bus->resume = of_platform_device_resume; bus->shutdown = of_platform_device_shutdown; + bus->dev_attrs = of_platform_device_attrs;return bus_register (bus); }
Quoted 8 lines · Olaf Hering
Create
/sys/bus/of_platform/devices/*/modaliasfile to allow autoloading of modules. modalias files are already present for many other bus types. This adds also a newline to the devspec files.Also create a devspec file for mac-io devices. They were created as a side effect. Use correct buffer size for mac-io modalias buffer.
Tested on iBook1 and Efika.
Did anyone test this on other systems, like sparc?