Commit 59fd2c8b authored by Prarit Bhargava's avatar Prarit Bhargava Committed by Greg Kroah-Hartman

drivers, staging, unisys Add modalias files to visorbus devices

This patch adds modalias files that export the device UUID type to sysfs
so that udev can autoload the appropriate device driver on demand.  Note
that is required a minor name change to the channel device sysfs files
which are currently named visorbus_dev_groups, and are now named
visorbus_channel_groups.
Signed-off-by: default avatarPrarit Bhargava <prarit@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f93b0cbf
...@@ -69,6 +69,38 @@ static const struct attribute_group *visorbus_bus_groups[] = { ...@@ -69,6 +69,38 @@ static const struct attribute_group *visorbus_bus_groups[] = {
NULL, NULL,
}; };
/*
* DEVICE type attributes
*
* The modalias file will contain the guid of the device.
*/
static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
char *buf)
{
struct visor_device *vdev;
uuid_le guid;
vdev = to_visor_device(dev);
guid = visorchannel_get_uuid(vdev->visorchannel);
return snprintf(buf, PAGE_SIZE, "visorbus:%pUl\n", &guid);
}
static DEVICE_ATTR_RO(modalias);
static struct attribute *visorbus_dev_attrs[] = {
&dev_attr_modalias.attr,
NULL,
};
/* sysfs example for bridge-only sysfs files using device_type's */
static const struct attribute_group visorbus_dev_group = {
.attrs = visorbus_dev_attrs,
};
const struct attribute_group *visorbus_dev_groups[] = {
&visorbus_dev_group,
NULL,
};
/** This describes the TYPE of bus. /** This describes the TYPE of bus.
* (Don't confuse this with an INSTANCE of the bus.) * (Don't confuse this with an INSTANCE of the bus.)
*/ */
...@@ -76,6 +108,7 @@ struct bus_type visorbus_type = { ...@@ -76,6 +108,7 @@ struct bus_type visorbus_type = {
.name = "visorbus", .name = "visorbus",
.match = visorbus_match, .match = visorbus_match,
.uevent = visorbus_uevent, .uevent = visorbus_uevent,
.dev_groups = visorbus_dev_groups,
.bus_groups = visorbus_bus_groups, .bus_groups = visorbus_bus_groups,
}; };
...@@ -128,7 +161,13 @@ static LIST_HEAD(list_all_device_instances); ...@@ -128,7 +161,13 @@ static LIST_HEAD(list_all_device_instances);
static int static int
visorbus_uevent(struct device *xdev, struct kobj_uevent_env *env) visorbus_uevent(struct device *xdev, struct kobj_uevent_env *env)
{ {
if (add_uevent_var(env, "VERSION=%s", VERSION)) struct visor_device *dev;
uuid_le guid;
dev = to_visor_device(xdev);
guid = visorchannel_get_uuid(dev->visorchannel);
if (add_uevent_var(env, "MODALIAS=visorbus:%pUl", &guid))
return -ENOMEM; return -ENOMEM;
return 0; return 0;
} }
...@@ -477,7 +516,7 @@ static struct attribute_group channel_attr_grp = { ...@@ -477,7 +516,7 @@ static struct attribute_group channel_attr_grp = {
.attrs = channel_attrs, .attrs = channel_attrs,
}; };
static const struct attribute_group *visorbus_dev_groups[] = { static const struct attribute_group *visorbus_channel_groups[] = {
&channel_attr_grp, &channel_attr_grp,
NULL NULL
}; };
...@@ -936,7 +975,7 @@ create_visor_device(struct visor_device *dev) ...@@ -936,7 +975,7 @@ create_visor_device(struct visor_device *dev)
sema_init(&dev->visordriver_callback_lock, 1); /* unlocked */ sema_init(&dev->visordriver_callback_lock, 1); /* unlocked */
dev->device.bus = &visorbus_type; dev->device.bus = &visorbus_type;
dev->device.groups = visorbus_dev_groups; dev->device.groups = visorbus_channel_groups;
device_initialize(&dev->device); device_initialize(&dev->device);
dev->device.release = visorbus_release_device; dev->device.release = visorbus_release_device;
/* keep a reference just for us (now 2) */ /* keep a reference just for us (now 2) */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment