Refactor modules into nixos and home-manager
All checks were successful
Check flake / build-amd64-linux (push) Successful in 3m14s
All checks were successful
Check flake / build-amd64-linux (push) Successful in 3m14s
This commit is contained in:
@ -0,0 +1,71 @@
|
||||
From daebf42bd955f6f8d971af967c675e4e339cb0b2 Mon Sep 17 00:00:00 2001
|
||||
From: Jordan Holt <jordan@vimium.com>
|
||||
Date: Sun, 12 Nov 2023 12:13:39 +0000
|
||||
Subject: [PATCH] Update device ID for PreSonus 1824c
|
||||
|
||||
---
|
||||
sound/usb/format.c | 4 ++--
|
||||
sound/usb/mixer_quirks.c | 2 +-
|
||||
sound/usb/mixer_s1810c.c | 2 +-
|
||||
sound/usb/quirks.c | 4 ++--
|
||||
4 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/sound/usb/format.c b/sound/usb/format.c
|
||||
index ab5fed9f55b6..da50a4782414 100644
|
||||
--- a/sound/usb/format.c
|
||||
+++ b/sound/usb/format.c
|
||||
@@ -378,8 +378,8 @@ static int parse_uac2_sample_rate_range(struct snd_usb_audio *chip,
|
||||
|
||||
for (rate = min; rate <= max; rate += res) {
|
||||
|
||||
- /* Filter out invalid rates on Presonus Studio 1810c */
|
||||
- if (chip->usb_id == USB_ID(0x194f, 0x010c) &&
|
||||
+ /* Filter out invalid rates on Presonus Studio 1824c */
|
||||
+ if (chip->usb_id == USB_ID(0x194f, 0x010d) &&
|
||||
!s1810c_valid_sample_rate(fp, rate))
|
||||
goto skip_rate;
|
||||
|
||||
diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
|
||||
index 898bc3baca7b..c3135459c38c 100644
|
||||
--- a/sound/usb/mixer_quirks.c
|
||||
+++ b/sound/usb/mixer_quirks.c
|
||||
@@ -3445,7 +3445,7 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer)
|
||||
err = snd_rme_controls_create(mixer);
|
||||
break;
|
||||
|
||||
- case USB_ID(0x194f, 0x010c): /* Presonus Studio 1810c */
|
||||
+ case USB_ID(0x194f, 0x010d): /* Presonus Studio 1824c */
|
||||
err = snd_sc1810_init_mixer(mixer);
|
||||
break;
|
||||
case USB_ID(0x2a39, 0x3fb0): /* RME Babyface Pro FS */
|
||||
diff --git a/sound/usb/mixer_s1810c.c b/sound/usb/mixer_s1810c.c
|
||||
index fac4bbc6b275..5bc2e66d452c 100644
|
||||
--- a/sound/usb/mixer_s1810c.c
|
||||
+++ b/sound/usb/mixer_s1810c.c
|
||||
@@ -552,7 +552,7 @@ int snd_sc1810_init_mixer(struct usb_mixer_interface *mixer)
|
||||
return 0;
|
||||
|
||||
dev_info(&dev->dev,
|
||||
- "Presonus Studio 1810c, device_setup: %u\n", chip->setup);
|
||||
+ "Presonus Studio 1824c, device_setup: %u\n", chip->setup);
|
||||
if (chip->setup == 1)
|
||||
dev_info(&dev->dev, "(8out/18in @ 48kHz)\n");
|
||||
else if (chip->setup == 2)
|
||||
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
|
||||
index ab2b938502eb..b86832edaaa0 100644
|
||||
--- a/sound/usb/quirks.c
|
||||
+++ b/sound/usb/quirks.c
|
||||
@@ -1551,8 +1551,8 @@ int snd_usb_apply_interface_quirk(struct snd_usb_audio *chip,
|
||||
/* fasttrackpro usb: skip altsets incompatible with device_setup */
|
||||
if (chip->usb_id == USB_ID(0x0763, 0x2012))
|
||||
return fasttrackpro_skip_setting_quirk(chip, iface, altno);
|
||||
- /* presonus studio 1810c: skip altsets incompatible with device_setup */
|
||||
- if (chip->usb_id == USB_ID(0x194f, 0x010c))
|
||||
+ /* presonus studio 1824c: skip altsets incompatible with device_setup */
|
||||
+ if (chip->usb_id == USB_ID(0x194f, 0x010d))
|
||||
return s1810c_skip_setting_quirk(chip, iface, altno);
|
||||
|
||||
|
||||
--
|
||||
2.42.0
|
||||
|
88
modules/nixos/hardware/presonus-studio/default.nix
Normal file
88
modules/nixos/hardware/presonus-studio/default.nix
Normal file
@ -0,0 +1,88 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
cfg = config.modules.hardware.presonus-studio;
|
||||
snd-usb-audio-module = pkgs.callPackage ./snd-usb-audio.nix {
|
||||
kernel = config.boot.kernelPackages.kernel;
|
||||
};
|
||||
patched = snd-usb-audio-module.overrideAttrs (prev: {
|
||||
patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ];
|
||||
});
|
||||
upmixConfig = {
|
||||
"stream.properties" = {
|
||||
"channelmix.upmix" = true;
|
||||
"channelmix.upmix-method" = "psd";
|
||||
};
|
||||
};
|
||||
in {
|
||||
options.modules.hardware.presonus-studio = {
|
||||
enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
boot.kernelModules = [ "snd-usb-audio" ];
|
||||
boot.extraModulePackages = [
|
||||
(patched)
|
||||
];
|
||||
|
||||
# Workaround for mainline module loading instead of patched module
|
||||
systemd.services.reload-snd-usb-audio = {
|
||||
description = "Reload snd_usb_audio kernel module";
|
||||
wantedBy = [ "sound.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
path = with pkgs; [
|
||||
kmod
|
||||
];
|
||||
script = ''
|
||||
# Only reload if device hasn't been initialised
|
||||
if ! cat /proc/asound/card*/usbmixer | grep -q "Mute Main Out Switch"; then
|
||||
rmmod snd_usb_audio
|
||||
insmod /run/booted-system/kernel-modules/lib/modules/$(uname -r)/extra/snd-usb-audio.ko.xz
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
services.pipewire.extraConfig = {
|
||||
pipewire = {
|
||||
"10-network" = {
|
||||
"context.modules" = [
|
||||
{
|
||||
"name" = "libpipewire-module-rtp-session";
|
||||
"args" = {
|
||||
"stream.props" = {
|
||||
"node.name" = "rtp-source";
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
"surround" = {
|
||||
"context.modules" = [
|
||||
{
|
||||
"name" = "libpipewire-module-loopback";
|
||||
"args" = {
|
||||
"node.description" = "Genelec 4.1 Surround";
|
||||
"capture.props" = {
|
||||
"node.name" = "Genelec_Speakers";
|
||||
"media.class" = "Audio/Sink";
|
||||
"audio.position" = [ "FL" "FR" "SL" "SR" "LFE" ];
|
||||
};
|
||||
"playback.props" = {
|
||||
"node.name" = "playback.Genelec_Speakers";
|
||||
"audio.position" = [ "AUX0" "AUX1" "AUX3" "AUX4" "AUX5" ];
|
||||
"target.object" = "alsa_output.usb-PreSonus_Studio_1824c_SC4E21110775-00.multichannel-output";
|
||||
"stream.dont-remix" = true;
|
||||
"node.passive" = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
pipewire-pulse."40-upmix" = upmixConfig;
|
||||
client-rt."40-upmix" = upmixConfig;
|
||||
};
|
||||
};
|
||||
}
|
36
modules/nixos/hardware/presonus-studio/snd-usb-audio.nix
Normal file
36
modules/nixos/hardware/presonus-studio/snd-usb-audio.nix
Normal file
@ -0,0 +1,36 @@
|
||||
{ pkgs, lib, kernel ? pkgs.linuxPackages_latest.kernel }:
|
||||
|
||||
pkgs.stdenv.mkDerivation {
|
||||
pname = "snd-usb-audio";
|
||||
inherit (kernel) src version postPatch nativeBuildInputs;
|
||||
|
||||
kernel_dev = kernel.dev;
|
||||
kernelVersion = kernel.modDirVersion;
|
||||
|
||||
modulePath = "sound/usb";
|
||||
|
||||
buildPhase = ''
|
||||
BUILT_KERNEL=$kernel_dev/lib/modules/$kernelVersion/build
|
||||
|
||||
cp $BUILT_KERNEL/Module.symvers .
|
||||
cp $BUILT_KERNEL/.config .
|
||||
cp $kernel_dev/vmlinux .
|
||||
|
||||
make "-j$NIX_BUILD_CORES" modules_prepare
|
||||
make "-j$NIX_BUILD_CORES" M=$modulePath modules
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
make \
|
||||
INSTALL_MOD_PATH="$out" \
|
||||
XZ="xz -T$NIX_BUILD_CORES" \
|
||||
M="$modulePath" \
|
||||
modules_install
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "USB Sound kernel module";
|
||||
license = lib.licenses.gpl2;
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user