chiark / gitweb /
[PATCH] add "serio" to bus list
[elogind.git] / udev_sysfs.c
index a4f293ef1395a6ee622d7845d1335dbd7de29635..94c0164dec4ba54d725f066203e5e59ffc34d698 100644 (file)
@@ -54,9 +54,28 @@ static const struct subsystem_file {
        { .subsystem = "ieee1394_node", .file = NULL },
        { .subsystem = "fc_transport",  .file = "port_id" },
        { .subsystem = "fc_host",       .file = "port_id" },
+       { .subsystem = "spi_transport", .file = "width" },
+       { .subsystem = "spi_host",      .file = "width" },
        { NULL, NULL }
 };
 
+dev_t get_devt(struct sysfs_class_device *class_dev)
+{
+       struct sysfs_attribute *attr = NULL;
+       unsigned int major, minor;
+
+       attr = sysfs_get_classdev_attr(class_dev, "dev");
+       if (attr == NULL)
+               return 0;
+       dbg("dev='%s'", attr->value);
+
+       if (sscanf(attr->value, "%u:%u", &major, &minor) != 2)
+               return 0;
+       dbg("found major=%d, minor=%d", major, minor);
+
+       return makedev(major, minor);
+}
+
 int subsystem_expect_no_dev(const char *subsystem)
 {
        const struct subsystem_file *file;
@@ -209,7 +228,7 @@ static int class_device_expect_no_device_link(struct sysfs_class_device *class_d
                { NULL, NULL }
        };
        const struct class_device *classdevice;
-       int len;
+       unsigned int len;
 
        /* the kernel may tell us what to wait for */
        if (kernel_release_satisfactory(2,6,10) > 0)
@@ -288,6 +307,7 @@ int wait_for_devices_device(struct sysfs_device *devices_dev,
                { .bus = "bttv-sub",    .file = NULL },
                { .bus = "pnp",         .file = "detach_state" },
                { .bus = "eisa",        .file = "detach_state" },
+               { .bus = "serio",       .file = "detach_state" },
                { .bus = "pseudo",      .file = "detach_state" },
                { .bus = "mmc",         .file = "detach_state" },
                { .bus = "macio",       .file = "detach_state" },
@@ -379,7 +399,7 @@ int wait_for_devices_device(struct sysfs_device *devices_dev,
 
 struct sysfs_class_device *wait_class_device_open(const char *path)
 {
-       struct sysfs_class_device *class_dev;
+       struct sysfs_class_device *class_dev = NULL;
        int loop;
 
        loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
@@ -391,7 +411,7 @@ struct sysfs_class_device *wait_class_device_open(const char *path)
                usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
        }
 
-       return (class_dev);
+       return class_dev;
 }
 
 int wait_for_class_device(struct sysfs_class_device *class_dev,
@@ -448,7 +468,7 @@ int wait_for_class_device(struct sysfs_class_device *class_dev,
 
 struct sysfs_device *wait_devices_device_open(const char *path)
 {
-       struct sysfs_device *devices_dev;
+       struct sysfs_device *devices_dev = NULL;
        int loop;
 
        loop = WAIT_MAX_SECONDS * WAIT_LOOP_PER_SECOND;
@@ -460,5 +480,5 @@ struct sysfs_device *wait_devices_device_open(const char *path)
                usleep(1000 * 1000 / WAIT_LOOP_PER_SECOND);
        }
 
-       return(devices_dev);
+       return devices_dev;
 }