Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[pandora-kernel.git] / drivers / firewire / fw-topology.c
index d2c7a3d..213b0ff 100644 (file)
@@ -108,6 +108,7 @@ static struct fw_node *fw_node_create(u32 sid, int port_count, int color)
        node->node_id = LOCAL_BUS | SELF_ID_PHY_ID(sid);
        node->link_on = SELF_ID_LINK_ON(sid);
        node->phy_speed = SELF_ID_PHY_SPEED(sid);
+       node->initiated_reset = SELF_ID_PHY_INITIATOR(sid);
        node->port_count = port_count;
 
        atomic_set(&node->ref_count, 1);
@@ -289,12 +290,11 @@ static struct fw_node *build_tree(struct fw_card *card,
                        beta_repeaters_present = true;
 
                /*
-                * If all PHYs does not report the same gap count
-                * setting, we fall back to 63 which will force a gap
-                * count reconfiguration and a reset.
+                * If PHYs report different gap counts, set an invalid count
+                * which will force a gap count reconfiguration and a reset.
                 */
                if (SELF_ID_GAP_COUNT(q) != gap_count)
-                       gap_count = 63;
+                       gap_count = 0;
 
                update_hop_count(node);
 
@@ -431,6 +431,8 @@ update_tree(struct fw_card *card, struct fw_node *root)
                        event = FW_NODE_LINK_OFF;
                else if (!node0->link_on && node1->link_on)
                        event = FW_NODE_LINK_ON;
+               else if (node1->initiated_reset && node1->link_on)
+                       event = FW_NODE_INITIATED_RESET;
                else
                        event = FW_NODE_UPDATED;