123 lines
3.1 KiB
Nix
123 lines
3.1 KiB
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
let
|
||
|
seeed-voicecard = (pkgs.callPackage ../../5pkgs/seeed-voicecard { kernel = config.boot.kernelPackages.kernel; });
|
||
|
in
|
||
|
{
|
||
|
hardware.raspberry-pi."4".i2c1.enable = true;
|
||
|
hardware.raspberry-pi."4".audio.enable = true;
|
||
|
hardware.raspberry-pi."4".apply-overlays-dtmerge.enable = true;
|
||
|
hardware.deviceTree.filter = lib.mkForce "bcm2711-rpi-4-b.dtb";
|
||
|
|
||
|
security.rtkit.enable = true;
|
||
|
|
||
|
environment.systemPackages = with pkgs; [
|
||
|
alsaUtils
|
||
|
i2c-tools
|
||
|
ponymix
|
||
|
];
|
||
|
|
||
|
sound.enable = true;
|
||
|
hardware.pulseaudio.enable = lib.mkForce false;
|
||
|
services.pipewire = {
|
||
|
enable = true;
|
||
|
systemWide = true;
|
||
|
alsa.enable = true;
|
||
|
alsa.support32Bit = true;
|
||
|
pulse.enable = true;
|
||
|
};
|
||
|
|
||
|
services.pipewire.config.pipewire-pulse = {
|
||
|
"pulse.properties"."server.address" = [ "unix:native" "tcp:4713" ];
|
||
|
};
|
||
|
|
||
|
sound.extraConfig = ''
|
||
|
pcm.!default {
|
||
|
type asym
|
||
|
playback.pcm "playback"
|
||
|
capture.pcm "ac108"
|
||
|
}
|
||
|
|
||
|
pcm.ac108 {
|
||
|
type plug
|
||
|
slave.pcm "hw:seeed4micvoicec"
|
||
|
}
|
||
|
'' ;
|
||
|
|
||
|
|
||
|
boot.extraModulePackages = [
|
||
|
seeed-voicecard
|
||
|
];
|
||
|
boot.initrd.kernelModules = [
|
||
|
"snd-soc-seeed-voicecard"
|
||
|
"snd-soc-ac108"
|
||
|
"i2c-dev"
|
||
|
#"i2c-bcm2708"
|
||
|
#"snd-soc-wm8960"
|
||
|
];
|
||
|
|
||
|
boot.loader.raspberryPi.firmwareConfig = [
|
||
|
"dtparam=i2c_arm=on"
|
||
|
"dtparam=i2s=on"
|
||
|
"dtparam=spi=on"
|
||
|
"dtparam=i2c1=on"
|
||
|
# dtoverlay=seeeed-8mic-voicecard not required because we use hardware.deviceTree
|
||
|
];
|
||
|
hardware.deviceTree = {
|
||
|
enable = true;
|
||
|
overlays = [
|
||
|
{ name = "respeaker-4mic"; dtsFile = "${seeed-voicecard}/lib/dts/seeed-4mic-voicecard-overlay.dts";}
|
||
|
{ name = "spi"; dtsText = ''
|
||
|
/dts-v1/;
|
||
|
/plugin/;
|
||
|
|
||
|
/ {
|
||
|
compatible = "raspberrypi";
|
||
|
fragment@0 {
|
||
|
target = <&spi>;
|
||
|
__overlay__ {
|
||
|
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
|
||
|
status = "okay";
|
||
|
pinctrl-names = "default";
|
||
|
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
spidev@0 {
|
||
|
reg = <0>; // CE0
|
||
|
spi-max-frequency = <500000>;
|
||
|
compatible = "spidev";
|
||
|
};
|
||
|
|
||
|
spidev@1 {
|
||
|
reg = <1>; // CE1
|
||
|
spi-max-frequency = <500000>;
|
||
|
compatible = "spidev";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
fragment@1 {
|
||
|
target = <&alt0>;
|
||
|
__overlay__ {
|
||
|
// Drop GPIO 7, SPI 8-11
|
||
|
brcm,pins = <4 5>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
fragment@2 {
|
||
|
target = <&gpio>;
|
||
|
__overlay__ {
|
||
|
spi0_pins: spi0_pins {
|
||
|
brcm,pins = <9 10 11>;
|
||
|
brcm,function = <4>; // alt0
|
||
|
};
|
||
|
spi0_cs_pins: spi0_cs_pins {
|
||
|
brcm,pins = <8 7>;
|
||
|
brcm,function = <1>; // out
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
'';}
|
||
|
];
|
||
|
};
|
||
|
}
|