Commit Graph

38 Commits

Author SHA1 Message Date
Marvin ef73de30ec us144mkii: fix moderate bugs - capture robustness, ghost pointer, MIDI cleanup
BUG-09: Buffer partial 64-byte frame remainders across URB completions
to prevent silent data loss when USB bulk transfers return incomplete
chunks. Adds remainder and combined buffers to tascam_card struct.

BUG-10: Distinguish transient USB errors (-EOVERFLOW, -ENOENT, -EPIPE)
from fatal ones in capture completion. Resubmit URB on transient errors
instead of dropping it, preventing capture stream death on transient
USB bandwidth contention or controller glitches.

BUG-11: Return playback_frames_consumed from pointer callback during
ghost playback instead of always returning 0, providing correct
semantics when the callback is queried indirectly.

BUG-12: Unanchor MIDI output URB before returning on error path in
tascam_midi_out_complete to prevent the URB from remaining stuck in
the anchor's pending list.
2026-04-22 20:22:26 -03:00
Marvin f6c59c4f9f Fix significant bugs: probe abort, license mismatch, pause flags, work handler race
- BUG-05: Abort probe with -EIO if device rate initialization fails
  instead of registering a non-functional card.
- BUG-06: Remove SNDRV_PCM_INFO_PAUSE and SNDRV_PCM_INFO_RESUME from
  both capture and playback hw info since true pause is not implemented.
- BUG-07: Change MODULE_LICENSE to 'GPL v2' to match SPDX identifier.
- BUG-08: Hold tascam->lock when reading substream pointers in
  stop_pcm_work_handler to prevent use-after-free on concurrent close.
2026-04-22 19:31:11 -03:00
Marvin 57cbd3d53f Fix critical bugs: MIDI byte order, trigger error handling, playback race condition
- BUG-01: Fix MIDI output packet format - header 0xE0 must be at index 0
  per spec, not index 8. Shift payload to indices 1-8.
- BUG-02: Skip header byte (index 0) when parsing incoming MIDI packets
  so ALSA does not receive spurious Active Sensing events.
- BUG-03: Check return values of submit_urbs in playback trigger;
  report -EIO to ALSA if URB submission fails.
- BUG-04: Cache runtime->dma_area and buffer size under spinlock before
  releasing it, eliminating race condition on concurrent close/hw_params.
2026-04-22 19:26:32 -03:00
Marvin 4c9ff01806 Fix all critical, high, and medium audit issues
Critical fixes:
- Add error_free_urbs cleanup path in tascam_alloc_urbs() to prevent memory leaks on partial URB allocation failure
- Fix tascam_create_midi() with individual cleanup for each failed allocation step

High fixes:
- Check usb_set_interface() return values in probe and resume, log errors with dev_warn()
- Validate handshake_result after retry loop exhaustion; return -EIO if all retries fail
- Stop capture_substream in tascam_stop_pcm_work_handler() to prevent use-after-free during disconnect
- Re-prepare URB descriptors on ghost-to-real takeover to ensure correct sizes
- Add NULL checks before usb_free_coherent() calls in tascam_free_urbs()

Medium fixes:
- Move us144mkii_maybe_start_stream() call after successful URB submission in tascam_midi_open() to prevent stream_refs race condition
- Add cancel_work_sync() calls in probe error path (free_card label)
- Add clarifying comments for error handling flow and ghost-to-real takeover mechanism
- Increment stream_refs only after successful URB submission in maybe_start_stream()

Low fixes:
- Add NULL checks for urb->transfer_buffer in playback_urb_complete() and feedback_urb_complete()
2026-04-21 16:43:31 -03:00
Šerif Rami 8299661b7b codebase refactor & cleanup
- MIDI working without active audio streaming
- overall refactor and cleanup
- card & devices naming fixes
2026-01-19 17:34:06 +01:00
Šerif Rami 6a39e6fd6d driver safety & efficiency improvements
- implement MIDI input batching for reduced ALSA core overhead
- minimize playback spinlock scope by moving memcpy outside the lock
- optimize capture bit-transposition using 8x8 Butterfly algorithm
- use put_unaligned_le32 for safe capture DMA writes
- add defensive checks for stream validity in URB completion handlers
2026-01-19 14:57:47 +01:00
Šerif Rami 2f53fd05bc fix recording while using different playback device 2026-01-19 12:21:42 +01:00
Šerif Rami dd9e2f8b81 efficiency & stability improvements 2026-01-11 20:51:30 +01:00
Šerif Rami e12821f31c frame size fixes 2026-01-07 13:46:09 +01:00
Šerif Rami c379dc65c1 improvements 2026-01-06 20:01:07 +01:00
Šerif Rami 7716f17b21 kernel safety fixes 2025-12-05 23:29:07 +01:00
Šerif Rami d199e9ccaf more fixes & formatting 2025-12-02 16:18:33 +01:00
Šerif Rami 557c55d56b style: Fix checkpatch.pl issues and add Kdocs
Fixed all coding style issues reported by checkpatch.pl.
This includes:
- Trailing statements on new lines.
- Added missing blank lines after declarations.
- Corrected indentation of switch/case statements and labels.
- Added comments for memory barriers.
- Removed unnecessary braces.

Added Kdocs to all public functions and data structures to
improve code documentation.
2025-12-01 09:49:35 +01:00
Šerif Rami 63053cac3f important performance, stability & safety fixes 2025-12-01 09:17:25 +01:00
Šerif Rami d05f560d71 Complete driver refactor 2025-12-01 00:39:35 +01:00
Šerif Rami b013e2e0f8 revert back to stable 2025-11-28 11:59:40 +01:00
Serif fd32af5022 Improve stream management and synchronization 2025-11-17 10:46:43 +01:00
Šerif Rami d708eb3f65 v6 patch series fixes 2025-08-14 19:32:57 +02:00
Šerif Rami a3f45537b6 v5 patch series fixes 2025-08-14 16:48:11 +02:00
Šerif Rami beaa28b590 v4 patch series fixes 2025-08-13 15:45:08 +02:00
Šerif Rami f50b96f459 improvements 2025-08-09 20:42:29 +02:00
Šerif Rami 9862f9da7f 3/5 2025-08-09 14:13:58 +02:00
Šerif Rami c8eb8e1adf 2/5 2025-08-09 14:01:39 +02:00
Šerif Rami 7fd61770fc 1/5 2025-08-09 13:55:57 +02:00
Šerif Rami 9ccbea0f11 more stability fixes 2025-08-08 18:40:02 +02:00
Šerif Rami 196cd55787 midi parsing fixes 2025-08-08 16:37:17 +02:00
Šerif Rami f4b17d24c8 code safety improvements 2025-08-08 15:57:06 +02:00
Šerif Rami ba4e73b926 stability and midi fixes 2025-08-08 09:17:05 +02:00
Šerif Rami cc31e81f60 feat: Implement dynamic feedback and align URB configuration 2025-08-07 19:21:49 +02:00
Šerif Rami d35da0e547 feat: Refactor and optimize TASCAM US-144MKII driver
This commit includes:
- Reverted audio stream decoupling to restore original behavior.
- Implemented SysEx state machine and error retry for MIDI handling.
- Performed memory leak audit and confirmed no obvious leaks.
- Optimized playback and capture data copying for efficiency.
- Reordered `tascam_card` structure for improved cache locality.
- Fixed `active_urbs` counter management to prevent "URBs still active" errors.
2025-08-06 17:35:22 +02:00
Šerif Rami db5df99677 Merge branch 'main' of https://github.com/serifpersia/us144mkii 2025-08-06 13:48:31 +02:00
Šerif Rami fcfad9bfc2 proper kernel code formatting 2025-08-06 13:40:07 +02:00
Šerif Rami f44b75094c proper kernel code formatting 2025-08-06 13:25:01 +02:00
Šerif Rami 5777265466 Reapply "GUI fixes"
This reverts commit f861106f1b22a2819f88389742569e99ff646f27.
2025-08-06 13:24:59 +02:00
Šerif Rami 8c047e6f7e Revert "GUI fixes"
This reverts commit 8b522452ed8bda17033d02620b72a406adb248ec. Driver logic caused capture regression.
2025-08-06 13:24:59 +02:00
serifpersia 81c133fb52 GUI fixes 2025-08-06 13:24:59 +02:00
Šerif Rami 1f8b9c3fd9 potential support for US-144 2025-08-06 13:24:43 +02:00
serifpersia b06eca1e68 rename & cleanup for ALSA submission candidate 2025-08-02 15:25:09 +02:00