From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-vk1-f175.google.com (mail-vk1-f175.google.com [209.85.221.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 280E4230BD5 for ; Mon, 22 Jun 2026 01:11:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782090706; cv=none; b=Q+XYp6GAAglziNrKebqer2N78vME5CCiixTI9IaUxTygkopOiW5rDIBQdppsKnRBF7rdoef6pZV/53TMA1qz+fSRmulGK1ZlRN/vyPpHgYAd/5OUAlN5o1xHEUPA1k/iOihUW4smxPmK/m9XmgQUBp6rvdaejwU6cyxp1WXigt4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782090706; c=relaxed/simple; bh=bhYa3oR1eQtfKri0GB4VMSTZ6Wd5Xx1VCPx3GKfb/f8=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=quWgntP79VSwi5g7j4s5qQaIYPFo0doCqYUASADPqyPZtsrS8f+uf/OIuigC6NQNQiNvVkYb5zVLtMk9IcbTA3zLVxgltmvirvisiA1jgUi5RYvNqHxhBTIlq+FBBoNn428nOaXz0G4ErkLpaKbyePEKFzyqgD+eNv46u7QvdtA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FSWTAPdr; arc=none smtp.client-ip=209.85.221.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FSWTAPdr" Received: by mail-vk1-f175.google.com with SMTP id 71dfb90a1353d-5bbc6c99b5cso1061612e0c.1 for ; Sun, 21 Jun 2026 18:11:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782090704; x=1782695504; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=9F8+t8tVMzZNVqkJ15N14A2UHZfVIaONdOq77ZMmdPk=; b=FSWTAPdrCjqCMPf1fKun+xTZXpX9ays8yKXWKFPnYwGbel9huHmmAw5ADE+8Tk7rgG sB/STx8t8ke89eQDk5rwlEgcSvXBXaF8AEAVSeUDOZCiQg3qqvmoSk0DL+dviXQv8fld XTRHfDNxmNC8GIueDlpzri71R3Zw4frRjULZkxDf6G4R7YK3osGptQIHVVKejwqLpjnj JwXhbTVCh5/QdF0paWjRdDE8hoJlv1wiit0PnKFf/BpJyJEJc0tV1ouDpw2RyCiqqQNR G2xwjBefjHxruo2tMauzLBto8POB4ZWCalP2VTR2+MVBlEZWiWLmEWt4h+b06M6Hc7uD uf6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782090704; x=1782695504; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9F8+t8tVMzZNVqkJ15N14A2UHZfVIaONdOq77ZMmdPk=; b=sV9SJLRVCVfNnkdqTFQp6/aZuyS7hjt+ozAIeagS7zYeZHAi4EB55DY1wUiTfihvIt oCaZHFg7wFJpcrUQdOIv8Ks3/PwuM1qlnSeDUp50pLKoQZHv+ZRROw2SNr60X6QWGiS1 bs9RZAOFqTwwDRBxZvhy7fvgnwJA2WUP3bFEV0MGOujNXhmmvLboynO9Pv/fKScopkH5 rMpej+pcWSpCKg6/Uglyj+PBpegkhMnEc9OeF/dgccbZnRyMb7Q4oobD11ObYqMEgQ3A deRGwkRDViqsPGUdp5tV2phgREQPd07TEjY5dTJwbsPtwM40ncNHXMx/VKGCkhMvZKfC A7hA== X-Forwarded-Encrypted: i=1; AFNElJ8AlCvVjSDp2MoTJiZfNkVqn5GQRbx6th/Ow7iaoFbTvILCMKPRpy/0d0k6nMPSMbmRKVI1i/zrUiWlkOE=@vger.kernel.org X-Gm-Message-State: AOJu0YyoFR3YPEbdPE9U87IPfSEfB59YgG/8eP4vVaBYcF8+zEW2XmOL 5zE7fXUtR38KsIjANEzJQtDocFXaXpj0j/a0eSlWnHewO7917SqxKLIs X-Gm-Gg: AfdE7ckhGJGvbKNsuIzfwWcqrdf7vx/2Mo7M1SwX4VHgM302YmHADiZAUdBB851syc3 IKXM7tKSFzJ4QerJ2I3Nsqfnv+W5EoJRQqmOih8NQPNMQCvAsIppedpVNoEIb05Iqq+QibNQf3S ejazJ+/olQxBiM0ClNM9ud+af3NeIjFg5SLhuhHI0+iEkW8XNM5tqxIuQhVSLaOoTwzWhc4jfHm ccnvT6Q6yeuLymihhnnjUtWKEE4YbePtthmGZ4AyUGsZde7ZV2ofDKTivAprawsJWh9XZz9DaKO UQTaTo2esa5/I/JUYl8TA22L9mvHY4pUuLTGmDdxjP67IZ+EDdt1TxC7b3TE26brY1H7jRH0Umj 9YqYHn2mKla0SYpjh2vnM/VSvh8WTpAcsFAOzHsOy61Ohs0fu05OXmi0DR68tTTWBhC6pGiXvn5 W5KgXQnjbcadmBGM4ciSziSU82Z5Jkul9YNihi6WDlZTqgW7xdQC4yg0dbbJztPf136islHZh/T aJoxZ3hDrZMd7BB X-Received: by 2002:a05:6122:d22:b0:575:352f:eac0 with SMTP id 71dfb90a1353d-5bbebb8debcmr5880380e0c.7.1782090704010; Sun, 21 Jun 2026 18:11:44 -0700 (PDT) Received: from alsa-dev.int.suenodeluz.com.do ([74.244.193.74]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-5bbfba48c1bsm5595977e0c.12.2026.06.21.18.11.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Jun 2026 18:11:43 -0700 (PDT) From: Frank van de Pol To: tiwai@suse.de, perex@perex.cz Cc: fvdpol@gmail.com, ramiserifpersia@gmail.com, rmxpzlb@gmail.com, linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 0/1] ALSA: usb: Add support for Reloop Jockey 3 DJ controllers Date: Sun, 21 Jun 2026 21:11:29 -0400 Message-ID: <20260622011131.1748298-1-fvdpol@gmail.com> X-Mailer: git-send-email 2.47.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Hi Takashi, Jaroslav, and the ALSA community, After being away from active ALSA development for some 25 years or so, I am happy to submit this patch to introduce a dedicated driver supporting the Jockey 3 series of DJ Controllers made by Reloop (specifically covering the Master Edition and the Remix variants). I initially evaluated the feasibility of integrating the required logic to handle the non-standard proprietary Ploytec framing protocol into the standard USB-audio driver via quirks. However, doing so would require introducing numerous hardware-specific exceptions throughout the core layout, adding significant complexity. A clean, isolated driver subdirectory provides much better long-term maintainability without cluttering the existing class-compliant architecture. Following up on the feedback received from the v1 and v2 submissions of my driver, I have made several updates to the code to improve locking consistency, lifecycle safety, and the general readability and maintainability of the code. Changes v1 -> v2: - Migrated URB lifecycle management to use standard usb_anchors. - Revised and hardened URB buffer memory allocation constraints. - Addressed locking consistency, scoping issues, and static analysis warnings raised by Takashi and the Sashiko automated review. - Implemented dynamic PCM rate constraints when a stream is active. - Implemented full MIDI Running Status support for the control surface. - Refactored several large code blocks to improve overall readability. - Added clarifications on hardware-specific quirks and codec format. - Optimized struct jockey3_chip layout for padding and locality. Changes v2 -> v3: - Removed redundant dependencies and defaults from Kconfig. - Fixed an AB-BA deadlock condition highlighted by Sashiko review. - Corrected an URB resubmission race condition. - Implemented explicit USB endpoint validation during initialization. - Added Sample Rate verification and post-reset recovery handling. - Abstracted disconnect and stopping status checks out into helper functions. - Moved substream registration safely under the chip spinlock. - Implemented native suspend/resume power management triggers and callbacks. - Refactored jockey3_probe() and jockey3_pcm_trigger() for cleaner state tracking. - Further refined the internal MIDI Running Status state parser logic. I have successfully validated and stress-tested this driver across three distinct hardware architectures to ensure robustness regarding DMA, timing, and memory alignment: - x86_64 (Standard PC desktop environment) - armhf (32-bit on a Raspberry Pi 1B -- functional, though tight at 96 kHz) - arm64 (64-bit modern SoC environment on a Raspberry Pi 4) I look forward to your review and feedback, and I am more than happy to make further architectural adjustments as required. Best regards, Frank Frank van de Pol (1): ALSA: usb: Add support for Reloop Jockey 3 DJ controllers MAINTAINERS | 7 + sound/usb/Kconfig | 1 + sound/usb/Makefile | 1 + sound/usb/jockey3/Kconfig | 17 + sound/usb/jockey3/Makefile | 3 + sound/usb/jockey3/jockey3.c | 1188 +++++++++++++++++++++++++++++ sound/usb/jockey3/ploytec_proto.c | 330 ++++++++ sound/usb/jockey3/ploytec_proto.h | 66 ++ 8 files changed, 1613 insertions(+) create mode 100644 sound/usb/jockey3/Kconfig create mode 100644 sound/usb/jockey3/Makefile create mode 100644 sound/usb/jockey3/jockey3.c create mode 100644 sound/usb/jockey3/ploytec_proto.c create mode 100644 sound/usb/jockey3/ploytec_proto.h -- 2.47.3