]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/firewire/core-device.c
usb: chipidea: remove previous MODULE_ALIAS
[karo-tx-linux.git] / drivers / firewire / core-device.c
index 664a6ff0a82363b9846ed00679e8b434e765d4d2..de4aa409abe2988d8dc5b421e969ab5256fb4009 100644 (file)
@@ -165,25 +165,44 @@ static bool match_ids(const struct ieee1394_device_id *id_table, int *id)
        return (match & id_table->match_flags) == id_table->match_flags;
 }
 
-static bool is_fw_unit(struct device *dev);
-
-static int fw_unit_match(struct device *dev, struct device_driver *drv)
+static const struct ieee1394_device_id *unit_match(struct device *dev,
+                                                  struct device_driver *drv)
 {
        const struct ieee1394_device_id *id_table =
                        container_of(drv, struct fw_driver, driver)->id_table;
        int id[] = {0, 0, 0, 0};
 
-       /* We only allow binding to fw_units. */
-       if (!is_fw_unit(dev))
-               return 0;
-
        get_modalias_ids(fw_unit(dev), id);
 
        for (; id_table->match_flags != 0; id_table++)
                if (match_ids(id_table, id))
-                       return 1;
+                       return id_table;
 
-       return 0;
+       return NULL;
+}
+
+static bool is_fw_unit(struct device *dev);
+
+static int fw_unit_match(struct device *dev, struct device_driver *drv)
+{
+       /* We only allow binding to fw_units. */
+       return is_fw_unit(dev) && unit_match(dev, drv) != NULL;
+}
+
+static int fw_unit_probe(struct device *dev)
+{
+       struct fw_driver *driver =
+                       container_of(dev->driver, struct fw_driver, driver);
+
+       return driver->probe(fw_unit(dev), unit_match(dev, dev->driver));
+}
+
+static int fw_unit_remove(struct device *dev)
+{
+       struct fw_driver *driver =
+                       container_of(dev->driver, struct fw_driver, driver);
+
+       return driver->remove(fw_unit(dev)), 0;
 }
 
 static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size)
@@ -213,6 +232,8 @@ static int fw_unit_uevent(struct device *dev, struct kobj_uevent_env *env)
 struct bus_type fw_bus_type = {
        .name = "firewire",
        .match = fw_unit_match,
+       .probe = fw_unit_probe,
+       .remove = fw_unit_remove,
 };
 EXPORT_SYMBOL(fw_bus_type);