diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2025-12-04 12:26:36 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2025-12-04 12:26:36 -0800 |
| commit | 205f1a0d188658ff3043d91c988378d8a81344c2 (patch) | |
| tree | eea373060b451c83565875a57d69d46b34362ac3 /sound | |
| parent | 02892f90a9851f508e557b3c75e93fc178310d5f (diff) | |
| parent | 036176d9dba74e23e3ef358e171a77b75837fee0 (diff) | |
Merge tag 'firewire-updates-6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394
Pull firewire updates from Takashi Sakamoto:
"This includes two changes for core functions, which affects all use
cases of this subsystem:
- Handle per-device interoperability quirks
Some devices have quirks affecting interoperability. To identify
such quirks at an early stages of device detection, the step for
reading the configuration ROM contents has been changed. As a side
effect, the entire detection process is now performed at the basic
transaction speed (S100), without a trial to probe higher
supported speeds.
With this change, the following devices should now work with fewer
issues:
- TASCAM FW-1884, FW-1804, and FW-1082
- MOTU Audio Express
- Safer removals of host card
There was a race condition between host card removal and handling
of bus reset events in the workqueue. This appears to be a long
standing issue, and recent changes to use more workqueues escalate
it.
To solve it, a new callback has been added to the 1394 OHCI PCI
driver to unregister the interrupt sources and wait for workqueue
completions when removing a card instance"
* tag 'firewire-updates-6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394:
firewire: core: abort pending transactions at card removal
firewire: core: add WQ_UNBOUND to alloc_workqueue users
firewire: core: clear sources of hardware interrupt at card removal
firewire: core: code refactoring to find and pop transaction entry
firewire: core: code refactoring to remove transaction entry
firewire: core: use cleanup function to release cached configuration ROM
ALSA: firewire-tascam: reserve resources for transferred isochronous packets at S400
firewire: core: handle device quirk of TASCAM FW-1884/FW-1804/FW-1082
firewire: core: determine transaction speed after detecting quirks
firewire: core: code refactoring to compute transaction speed
firewire: core: handle device quirk of MOTU Audio Express
firewire: core: detect device quirk when reading configuration ROM
Diffstat (limited to 'sound')
| -rw-r--r-- | sound/firewire/tascam/tascam-stream.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/sound/firewire/tascam/tascam-stream.c b/sound/firewire/tascam/tascam-stream.c index 9c8fddd7dee1..4ecd151a46c1 100644 --- a/sound/firewire/tascam/tascam-stream.c +++ b/sound/firewire/tascam/tascam-stream.c @@ -282,20 +282,22 @@ static int keep_resources(struct snd_tscm *tscm, unsigned int rate, struct amdtp_stream *stream) { struct fw_iso_resources *resources; + int speed; int err; - if (stream == &tscm->tx_stream) + if (stream == &tscm->tx_stream) { resources = &tscm->tx_resources; - else + speed = fw_parent_device(tscm->unit)->max_speed; + } else { resources = &tscm->rx_resources; + speed = SCODE_400; + } err = amdtp_tscm_set_parameters(stream, rate); if (err < 0) return err; - return fw_iso_resources_allocate(resources, - amdtp_stream_get_max_payload(stream), - fw_parent_device(tscm->unit)->max_speed); + return fw_iso_resources_allocate(resources, amdtp_stream_get_max_payload(stream), speed); } static int init_stream(struct snd_tscm *tscm, struct amdtp_stream *s) @@ -455,7 +457,6 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate) } if (!amdtp_stream_running(&tscm->rx_stream)) { - int spd = fw_parent_device(tscm->unit)->max_speed; unsigned int tx_init_skip_cycles; err = set_stream_formats(tscm, rate); @@ -466,13 +467,13 @@ int snd_tscm_stream_start_duplex(struct snd_tscm *tscm, unsigned int rate) if (err < 0) goto error; - err = amdtp_domain_add_stream(&tscm->domain, &tscm->rx_stream, - tscm->rx_resources.channel, spd); + err = amdtp_domain_add_stream(&tscm->domain, &tscm->rx_stream, tscm->rx_resources.channel, + fw_parent_device(tscm->unit)->max_speed); if (err < 0) goto error; - err = amdtp_domain_add_stream(&tscm->domain, &tscm->tx_stream, - tscm->tx_resources.channel, spd); + err = amdtp_domain_add_stream(&tscm->domain, &tscm->tx_stream, tscm->tx_resources.channel, + SCODE_400); if (err < 0) goto error; |
