+ /* check for matching bus value */
+ if (dev->bus[0] != '\0') {
+ if (sysfs_device == NULL) {
+ dbg("device has no bus");
+ goto try_parent;
+ }
+ dbg("check for " FIELD_BUS " dev->bus='%s' sysfs_device->bus='%s'",
+ dev->bus, sysfs_device->bus);
+ if (strcmp_pattern(dev->bus, sysfs_device->bus) != 0) {
+ dbg(FIELD_BUS " is not matching");
+ goto try_parent;
+ }
+ dbg(FIELD_BUS " matches");
+ }
+
+ /* check for matching bus id */
+ if (dev->id[0] != '\0') {
+ dbg("check " FIELD_ID);
+ if (match_id(dev, class_dev, sysfs_device) != 0) {
+ dbg(FIELD_ID " is not matching");
+ goto try_parent;
+ }
+ dbg(FIELD_ID " matches");
+ }
+
+ /* check for matching place of device */
+ if (dev->place[0] != '\0') {
+ dbg("check " FIELD_PLACE);
+ if (match_place(dev, class_dev, sysfs_device) != 0) {
+ dbg(FIELD_PLACE " is not matching");
+ goto try_parent;
+ }
+ dbg(FIELD_PLACE " matches");
+ }
+
+ /* check for matching sysfs pairs */
+ if (dev->sysfs_pair[0].file[0] != '\0') {
+ dbg("check " FIELD_SYSFS " pairs");
+ if (match_sysfs_pairs(dev, class_dev, sysfs_device) != 0) {
+ dbg(FIELD_SYSFS " is not matching");
+ goto try_parent;
+ }
+ dbg(FIELD_SYSFS " matches");
+ }
+
+ /* found matching physical device */
+ break;
+try_parent:
+ dbg("try parent sysfs device");
+ sysfs_device = sysfs_get_device_parent(sysfs_device);
+ if (sysfs_device == NULL)
+ goto exit;
+ dbg("sysfs_device->path='%s'", sysfs_device->path);
+ dbg("sysfs_device->bus_id='%s'", sysfs_device->bus_id);