diff options
| -rw-r--r-- | sound/firewire/cmp.c | 5 | ||||
| -rw-r--r-- | sound/firewire/iso-resources.c | 10 | ||||
| -rw-r--r-- | sound/firewire/iso-resources.h | 6 |
3 files changed, 16 insertions, 5 deletions
diff --git a/sound/firewire/cmp.c b/sound/firewire/cmp.c index c992dab4bb95..4a37f3a6fab9 100644 --- a/sound/firewire/cmp.c +++ b/sound/firewire/cmp.c | |||
| @@ -117,9 +117,12 @@ int cmp_connection_init(struct cmp_connection *c, | |||
| 117 | if (ipcr_index >= (impr & IMPR_PLUGS_MASK)) | 117 | if (ipcr_index >= (impr & IMPR_PLUGS_MASK)) |
| 118 | return -EINVAL; | 118 | return -EINVAL; |
| 119 | 119 | ||
| 120 | err = fw_iso_resources_init(&c->resources, unit); | ||
| 121 | if (err < 0) | ||
| 122 | return err; | ||
| 123 | |||
| 120 | c->connected = false; | 124 | c->connected = false; |
| 121 | mutex_init(&c->mutex); | 125 | mutex_init(&c->mutex); |
| 122 | fw_iso_resources_init(&c->resources, unit); | ||
| 123 | c->last_pcr_value = cpu_to_be32(0x80000000); | 126 | c->last_pcr_value = cpu_to_be32(0x80000000); |
| 124 | c->pcr_index = ipcr_index; | 127 | c->pcr_index = ipcr_index; |
| 125 | c->max_speed = (impr & IMPR_SPEED_MASK) >> IMPR_SPEED_SHIFT; | 128 | c->max_speed = (impr & IMPR_SPEED_MASK) >> IMPR_SPEED_SHIFT; |
diff --git a/sound/firewire/iso-resources.c b/sound/firewire/iso-resources.c index 6f2b5f8651fd..775dbd5f3445 100644 --- a/sound/firewire/iso-resources.c +++ b/sound/firewire/iso-resources.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/jiffies.h> | 11 | #include <linux/jiffies.h> |
| 12 | #include <linux/mutex.h> | 12 | #include <linux/mutex.h> |
| 13 | #include <linux/sched.h> | 13 | #include <linux/sched.h> |
| 14 | #include <linux/slab.h> | ||
| 14 | #include <linux/spinlock.h> | 15 | #include <linux/spinlock.h> |
| 15 | #include "iso-resources.h" | 16 | #include "iso-resources.h" |
| 16 | 17 | ||
| @@ -22,12 +23,18 @@ | |||
| 22 | * If the device does not support all channel numbers, change @r->channels_mask | 23 | * If the device does not support all channel numbers, change @r->channels_mask |
| 23 | * after calling this function. | 24 | * after calling this function. |
| 24 | */ | 25 | */ |
| 25 | void fw_iso_resources_init(struct fw_iso_resources *r, struct fw_unit *unit) | 26 | int fw_iso_resources_init(struct fw_iso_resources *r, struct fw_unit *unit) |
| 26 | { | 27 | { |
| 28 | r->buffer = kmalloc(2 * 4, GFP_KERNEL); | ||
| 29 | if (!r->buffer) | ||
| 30 | return -ENOMEM; | ||
| 31 | |||
| 27 | r->channels_mask = ~0uLL; | 32 | r->channels_mask = ~0uLL; |
| 28 | r->unit = fw_unit_get(unit); | 33 | r->unit = fw_unit_get(unit); |
| 29 | mutex_init(&r->mutex); | 34 | mutex_init(&r->mutex); |
| 30 | r->allocated = false; | 35 | r->allocated = false; |
| 36 | |||
| 37 | return 0; | ||
| 31 | } | 38 | } |
| 32 | 39 | ||
| 33 | /** | 40 | /** |
| @@ -37,6 +44,7 @@ void fw_iso_resources_init(struct fw_iso_resources *r, struct fw_unit *unit) | |||
| 37 | void fw_iso_resources_destroy(struct fw_iso_resources *r) | 44 | void fw_iso_resources_destroy(struct fw_iso_resources *r) |
| 38 | { | 45 | { |
| 39 | WARN_ON(r->allocated); | 46 | WARN_ON(r->allocated); |
| 47 | kfree(r->buffer); | ||
| 40 | mutex_destroy(&r->mutex); | 48 | mutex_destroy(&r->mutex); |
| 41 | fw_unit_put(r->unit); | 49 | fw_unit_put(r->unit); |
| 42 | } | 50 | } |
diff --git a/sound/firewire/iso-resources.h b/sound/firewire/iso-resources.h index 9feb9f8d4745..3f0730e4d841 100644 --- a/sound/firewire/iso-resources.h +++ b/sound/firewire/iso-resources.h | |||
| @@ -24,11 +24,11 @@ struct fw_iso_resources { | |||
| 24 | unsigned int bandwidth_overhead; | 24 | unsigned int bandwidth_overhead; |
| 25 | int generation; /* in which allocation is valid */ | 25 | int generation; /* in which allocation is valid */ |
| 26 | bool allocated; | 26 | bool allocated; |
| 27 | __be32 buffer[2]; | 27 | __be32 *buffer; |
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | void fw_iso_resources_init(struct fw_iso_resources *r, | 30 | int fw_iso_resources_init(struct fw_iso_resources *r, |
| 31 | struct fw_unit *unit); | 31 | struct fw_unit *unit); |
| 32 | void fw_iso_resources_destroy(struct fw_iso_resources *r); | 32 | void fw_iso_resources_destroy(struct fw_iso_resources *r); |
| 33 | 33 | ||
| 34 | int fw_iso_resources_allocate(struct fw_iso_resources *r, | 34 | int fw_iso_resources_allocate(struct fw_iso_resources *r, |
