diff options
Diffstat (limited to 'drivers/firewire/core-card.c')
-rw-r--r-- | drivers/firewire/core-card.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/firewire/core-card.c b/drivers/firewire/core-card.c index 7c4cf6cfa74..faf2eee473b 100644 --- a/drivers/firewire/core-card.c +++ b/drivers/firewire/core-card.c | |||
@@ -208,13 +208,19 @@ static void allocate_broadcast_channel(struct fw_card *card, int generation) | |||
208 | { | 208 | { |
209 | int channel, bandwidth = 0; | 209 | int channel, bandwidth = 0; |
210 | 210 | ||
211 | fw_iso_resource_manage(card, generation, 1ULL << 31, &channel, | 211 | if (!card->broadcast_channel_allocated) { |
212 | &bandwidth, true, card->bm_transaction_data); | 212 | fw_iso_resource_manage(card, generation, 1ULL << 31, |
213 | if (channel == 31) { | 213 | &channel, &bandwidth, true, |
214 | card->bm_transaction_data); | ||
215 | if (channel != 31) { | ||
216 | fw_notify("failed to allocate broadcast channel\n"); | ||
217 | return; | ||
218 | } | ||
214 | card->broadcast_channel_allocated = true; | 219 | card->broadcast_channel_allocated = true; |
215 | device_for_each_child(card->device, (void *)(long)generation, | ||
216 | fw_device_set_broadcast_channel); | ||
217 | } | 220 | } |
221 | |||
222 | device_for_each_child(card->device, (void *)(long)generation, | ||
223 | fw_device_set_broadcast_channel); | ||
218 | } | 224 | } |
219 | 225 | ||
220 | static const char gap_count_table[] = { | 226 | static const char gap_count_table[] = { |