GPD Pocket

From NixOS Wiki
Jump to: navigation, search

The following configuration bits are required for a GPD Pocket device.

let
  dummy_firmware = pkgs.writeTextFile {
    name        = "brcmfmac4356-pcie.txt";
    text        = builtins.readFile "brcmfmac4356-pcie.txt";
    destination = "/lib/firmware/brcm/brcmfmac4356-pcie.txt";
  };
in
{
  imports = [
    # generated by nixos-generate-config on installation
    <nixpkgs/nixos/modules/installer/scan/not-detected.nix>

    # Device specific
    "${configDir}/etc/gpd/kernel.nix"
  ];

  boot = {
    kernelPackages = pkgs.linuxPackages_4_14;

    kernelParams = [
      "gpd-pocket-fan.speed_on_ac=0"
      "fbcon=rotate:1"
    ];

    kernelModules = [ "btusb" "kvm-intel" ]; # bluetooth

    initrd.kernelModules = [
      "pwm-lpss" "pwm-lpss-platform" # for brightness control
      "g_serial" # be a serial device via OTG
      "bq24190_charger"
      "i915"
      "fusb302"
    ];

    initrd.availableKernelModules = [
      "xhci_pci"
      "dm_mod"
      "btrfs"
      "crc23c"
      "nvme"
      "usbhid"
      "usb_storage"
      "sd_mod"
      "sdhci_acpi"
      "sdhci_pci"
      "rtsx_pci_sdmmc"
    ];

    loader.systemd-boot.enable = true;
    loader.efi.canTouchEfiVariables = true;
  };

  services.tlp = {
    enable = true;
    extraConfig = 
      DISK_DEVICES="mmcblk0"
      DISK_IOSCHED="deadline"
      WIFI_PWR_ON_AC=off
      WIFI_PWR_ON_BAT=off
    ;
  };

 hardware = {
    firmware = [ dummy_firmware ];
    enableRedistributableFirmware = true;

    bluetooth.enable = true;
    pulseaudio = {
      package     = pkgs.pulseaudioFull;
      extraConfig = 
        set-card-profile alsa_card.platform-cht-bsw-rt5645 HiFi
        set-default-sink alsa_output.platform-cht-bsw-rt5645.HiFi__hw_chtrt5645_0__sink
        set-sink-port alsa_output.platform-cht-bsw-rt5645.HiFi__hw_chtrt5645_0__sink [Out] Speaker
      ;

      daemon.config = {
        "realtime-scheduling" = "no";
      };
    };
  };

  # on resume the i2c bus complains, reloading the module helps
  powerManagement = {
    enable = true;
    powerUpCommands = 
      modprobe goodix
    ;
    powerDownCommands = 
      modprobe -r goodix
    ;
    resumeCommands = 
      modprobe goodix
    ;
  };

  # more config
}


Firmware file:

# Sample variables file for BCM94356Z NGFF 22x30mm iPA, iLNA board with PCIe for production package
NVRAMRev=$Rev: 492104 $
#4356 chip = 4354 A2 chip
sromrev=11
boardrev=0x1102
boardtype=0x073e
boardflags=0x02400201
#0x2000 enable 2G spur WAR
boardflags2=0x00802000
boardflags3=0x0000000a
#boardflags3 0x00000100 /* to read swctrlmap from nvram*/
#define BFL3_5G_SPUR_WAR   0x00080000   /* enable spur WAR in 5G band */
#define BFL3_AvVim   0x40000000   /* load AvVim from nvram */
macaddr=00:90:4c:1a:10:01
ccode=0x5854
regrev=205
antswitch=0
pdgain5g=4
pdgain2g=4
tworangetssi2g=0
tworangetssi5g=0
paprdis=0
femctrl=10
vendid=0x14e4
devid=0x43ec
manfid=0x2d0
#prodid=0x052e
nocrc=1
otpimagesize=502
xtalfreq=37400
rxgains2gelnagaina0=0
rxgains2gtrisoa0=7
rxgains2gtrelnabypa0=0
rxgains5gelnagaina0=0
rxgains5gtrisoa0=11
rxgains5gtrelnabypa0=0
rxgains5gmelnagaina0=0
rxgains5gmtrisoa0=13
rxgains5gmtrelnabypa0=0
rxgains5ghelnagaina0=0
rxgains5ghtrisoa0=12
rxgains5ghtrelnabypa0=0
rxgains2gelnagaina1=0
rxgains2gtrisoa1=7
rxgains2gtrelnabypa1=0
rxgains5gelnagaina1=0
rxgains5gtrisoa1=10
rxgains5gtrelnabypa1=0
rxgains5gmelnagaina1=0
rxgains5gmtrisoa1=11
rxgains5gmtrelnabypa1=0
rxgains5ghelnagaina1=0
rxgains5ghtrisoa1=11
rxgains5ghtrelnabypa1=0
rxchain=3
txchain=3
aa2g=3
aa5g=3
agbg0=2
agbg1=2
aga0=2
aga1=2
tssipos2g=1
extpagain2g=2
tssipos5g=1
extpagain5g=2
tempthresh=255
tempoffset=255
rawtempsense=0x1ff
pa2ga0=-147,6192,-705
pa2ga1=-161,6041,-701
pa5ga0=-194,6069,-739,-188,6137,-743,-185,5931,-725,-171,5898,-715
pa5ga1=-190,6248,-757,-190,6275,-759,-190,6225,-757,-184,6131,-746
subband5gver=0x4
pdoffsetcckma0=0x4
pdoffsetcckma1=0x4
pdoffset40ma0=0x0000
pdoffset80ma0=0x0000
pdoffset40ma1=0x0000
pdoffset80ma1=0x0000
maxp2ga0=76
maxp5ga0=74,74,74,74
maxp2ga1=76
maxp5ga1=74,74,74,74
cckbw202gpo=0x0000
cckbw20ul2gpo=0x0000
mcsbw202gpo=0x99644422
mcsbw402gpo=0x99644422
dot11agofdmhrbw202gpo=0x6666
ofdmlrbw202gpo=0x0022
mcsbw205glpo=0x88766663
mcsbw405glpo=0x88666663
mcsbw805glpo=0xbb666665
mcsbw205gmpo=0xd8666663
mcsbw405gmpo=0x88666663
mcsbw805gmpo=0xcc666665
mcsbw205ghpo=0xdc666663
mcsbw405ghpo=0xaa666663
mcsbw805ghpo=0xdd666665
mcslr5glpo=0x0000
mcslr5gmpo=0x0000
mcslr5ghpo=0x0000
sb20in40hrpo=0x0
sb20in80and160hr5glpo=0x0
sb40and80hr5glpo=0x0
sb20in80and160hr5gmpo=0x0
sb40and80hr5gmpo=0x0
sb20in80and160hr5ghpo=0x0
sb40and80hr5ghpo=0x0
sb20in40lrpo=0x0
sb20in80and160lr5glpo=0x0
sb40and80lr5glpo=0x0
sb20in80and160lr5gmpo=0x0
sb40and80lr5gmpo=0x0
sb20in80and160lr5ghpo=0x0
sb40and80lr5ghpo=0x0
dot11agduphrpo=0x0
dot11agduplrpo=0x0
phycal_tempdelta=255
temps_period=15
temps_hysteresis=15
rssicorrnorm_c0=4,4
rssicorrnorm_c1=4,4
rssicorrnorm5g_c0=1,2,3,1,2,3,6,6,8,6,6,8
rssicorrnorm5g_c1=1,2,3,2,2,2,7,7,8,7,7,8