[PATCH] driver core: replace "hotplug" by "uevent"
[linux-2.6-block.git] / drivers / pcmcia / ds.c
index 398146e3823e1b1632e426de67158972b60bd3f9..6fb76399547e8095ce31d223d6fcea940bf78623 100644 (file)
@@ -354,6 +354,7 @@ static void pcmcia_release_dev(struct device *dev)
        struct pcmcia_device *p_dev = to_pcmcia_dev(dev);
        ds_dbg(1, "releasing dev %p\n", p_dev);
        pcmcia_put_socket(p_dev->socket);
+       kfree(p_dev->devname);
        kfree(p_dev);
 }
 
@@ -504,6 +505,7 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
 {
        struct pcmcia_device *p_dev;
        unsigned long flags;
+       int bus_id_len;
 
        s = pcmcia_get_socket(s);
        if (!s)
@@ -527,7 +529,12 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
        p_dev->dev.bus = &pcmcia_bus_type;
        p_dev->dev.parent = s->dev.dev;
        p_dev->dev.release = pcmcia_release_dev;
-       sprintf (p_dev->dev.bus_id, "%d.%d", p_dev->socket->sock, p_dev->device_no);
+       bus_id_len = sprintf (p_dev->dev.bus_id, "%d.%d", p_dev->socket->sock, p_dev->device_no);
+
+       p_dev->devname = kmalloc(6 + bus_id_len + 1, GFP_KERNEL);
+       if (!p_dev->devname)
+               goto err_free;
+       sprintf (p_dev->devname, "pcmcia%s", p_dev->dev.bus_id);
 
        /* compat */
        p_dev->state = CLIENT_UNBOUND;
@@ -537,6 +544,9 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
        list_add_tail(&p_dev->socket_device_list, &s->devices_list);
        spin_unlock_irqrestore(&pcmcia_dev_list_lock, flags);
 
+       printk(KERN_NOTICE "pcmcia: registering new device %s\n",
+              p_dev->devname);
+
        pcmcia_device_query(p_dev);
 
        if (device_register(&p_dev->dev)) {
@@ -552,6 +562,7 @@ struct pcmcia_device * pcmcia_device_add(struct pcmcia_socket *s, unsigned int f
        return p_dev;
 
  err_free:
+       kfree(p_dev->devname);
        kfree(p_dev);
        s->device_count--;
  err_put:
@@ -768,8 +779,8 @@ static int pcmcia_bus_match(struct device * dev, struct device_driver * drv) {
 
 #ifdef CONFIG_HOTPLUG
 
-static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
-                             char *buffer, int buffer_size)
+static int pcmcia_bus_uevent(struct device *dev, char **envp, int num_envp,
+                            char *buffer, int buffer_size)
 {
        struct pcmcia_device *p_dev;
        int i, length = 0;
@@ -789,31 +800,31 @@ static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
 
        i = 0;
 
-       if (add_hotplug_env_var(envp, num_envp, &i,
-                               buffer, buffer_size, &length,
-                               "SOCKET_NO=%u",
-                               p_dev->socket->sock))
+       if (add_uevent_var(envp, num_envp, &i,
+                          buffer, buffer_size, &length,
+                          "SOCKET_NO=%u",
+                          p_dev->socket->sock))
                return -ENOMEM;
 
-       if (add_hotplug_env_var(envp, num_envp, &i,
-                               buffer, buffer_size, &length,
-                               "DEVICE_NO=%02X",
-                               p_dev->device_no))
+       if (add_uevent_var(envp, num_envp, &i,
+                          buffer, buffer_size, &length,
+                          "DEVICE_NO=%02X",
+                          p_dev->device_no))
                return -ENOMEM;
 
-       if (add_hotplug_env_var(envp, num_envp, &i,
-                               buffer, buffer_size, &length,
-                               "MODALIAS=pcmcia:m%04Xc%04Xf%02Xfn%02Xpfn%02X"
-                               "pa%08Xpb%08Xpc%08Xpd%08X",
-                               p_dev->has_manf_id ? p_dev->manf_id : 0,
-                               p_dev->has_card_id ? p_dev->card_id : 0,
-                               p_dev->has_func_id ? p_dev->func_id : 0,
-                               p_dev->func,
-                               p_dev->device_no,
-                               hash[0],
-                               hash[1],
-                               hash[2],
-                               hash[3]))
+       if (add_uevent_var(envp, num_envp, &i,
+                          buffer, buffer_size, &length,
+                          "MODALIAS=pcmcia:m%04Xc%04Xf%02Xfn%02Xpfn%02X"
+                          "pa%08Xpb%08Xpc%08Xpd%08X",
+                          p_dev->has_manf_id ? p_dev->manf_id : 0,
+                          p_dev->has_card_id ? p_dev->card_id : 0,
+                          p_dev->has_func_id ? p_dev->func_id : 0,
+                          p_dev->func,
+                          p_dev->device_no,
+                          hash[0],
+                          hash[1],
+                          hash[2],
+                          hash[3]))
                return -ENOMEM;
 
        envp[i] = NULL;
@@ -823,7 +834,7 @@ static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
 
 #else
 
-static int pcmcia_bus_hotplug(struct device *dev, char **envp, int num_envp,
+static int pcmcia_bus_uevent(struct device *dev, char **envp, int num_envp,
                              char *buffer, int buffer_size)
 {
        return -ENODEV;
@@ -1149,7 +1160,8 @@ static struct pcmcia_callback pcmcia_bus_callback = {
        .requery = pcmcia_bus_rescan,
 };
 
-static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev)
+static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev,
+                                          struct class_interface *class_intf)
 {
        struct pcmcia_socket *socket = class_get_devdata(class_dev);
        int ret;
@@ -1184,7 +1196,8 @@ static int __devinit pcmcia_bus_add_socket(struct class_device *class_dev)
        return 0;
 }
 
-static void pcmcia_bus_remove_socket(struct class_device *class_dev)
+static void pcmcia_bus_remove_socket(struct class_device *class_dev,
+                                    struct class_interface *class_intf)
 {
        struct pcmcia_socket *socket = class_get_devdata(class_dev);
 
@@ -1210,7 +1223,7 @@ static struct class_interface pcmcia_bus_interface = {
 
 struct bus_type pcmcia_bus_type = {
        .name = "pcmcia",
-       .hotplug = pcmcia_bus_hotplug,
+       .uevent = pcmcia_bus_uevent,
        .match = pcmcia_bus_match,
        .dev_attrs = pcmcia_dev_attrs,
 };