about summary refs log tree commit diff
path: root/modules/hardware/t100ha/default.nix
blob: 0d615624f97660587b47a906079a8d0eb5be1cf3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
{ config, pkgs, lib, ... }:

let
  cfg = config.vuizvui.hardware.t100ha;
  desc = "hardware support for the ASUS T100HA convertible";

in {
  options.vuizvui.hardware.t100ha.enable = lib.mkEnableOption desc;

  config = lib.mkIf cfg.enable {
    hardware.firmware = lib.singleton (pkgs.runCommandLocal "t100ha-firmware" {
      params = ./brcmfmac43340-sdio.txt;
      fwpkg = pkgs.firmwareLinuxNonfree;
      install = "install -vD -m 0644";
    } ''
      for fw in brcm/brcmfmac43340-sdio intel/fw_sst_22a8; do
        $install "$fwpkg/lib/firmware/$fw.bin" "$out/lib/firmware/$fw.bin"
      done
      $install "$params" "$out/lib/firmware/brcm/brcmfmac43340-sdio.txt"
    '');

    boot.kernelPackages = let
      t100haKernel = pkgs.linux_4_19.override {
        # Missing device drivers:
        #
        #   808622B8 -> Intel(R) Imaging Signal Processor 2401
        #   808622D8 -> Intel(R) Integrated Sensor Solution
        #   HIMX2051 -> Camera Sensor Unicam hm2051
        #   IMPJ0003 -> Impinj RFID Device (MonzaX 8K)
        #   OVTI5670 -> Camera Sensor ov5670
        #
        extraConfig = ''
          # CPU
          MATOM y

          # MMC
          MMC y
          MMC_BLOCK y
          MMC_SDHCI y
          MMC_SDHCI_ACPI y

          # PMIC
          INTEL_PMC_IPC y
          INTEL_SOC_PMIC y
          MFD_AXP20X y
          MFD_AXP20X_I2C y

          # Backlight
          PWM y
          PWM_SYSFS y
          PWM_CRC y
          GPIO_CRYSTAL_COVE y

          # GPU
          AGP n
          DRM y
          DRM_I915 m

          # Thermal
          INT3406_THERMAL m
          INT340X_THERMAL m

          # GPIO
          PINCTRL_CHERRYVIEW y

          # I2C
          I2C_DESIGNWARE_BAYTRAIL y
          I2C_DESIGNWARE_PLATFORM y

          # HID
          INTEL_HID_EVENT y

          # MEI
          INTEL_MEI y
          INTEL_MEI_TXE y
        '';
      };
    in pkgs.linuxPackagesFor t100haKernel;

    # By default the console is rotated by 90 degrees to the right.
    boot.kernelParams = [ "fbcon=rotate:3" ];
    services.xserver.deviceSection = ''
      Option "monitor-DSI1" "Monitor[0]"
    '';
    services.xserver.monitorSection = ''
      Option "Rotate" "left"
    '';
    services.xserver.videoDriver = "intel";

    # The touch screen needs to be rotated as well:
    services.xserver.inputClassSections = lib.singleton ''
      Identifier "touchscreen"
      MatchProduct "SIS0457"
      Option "TransformationMatrix" "0 -1 1 1 0 0 0 0 1"
    '';
  };
}