blob: 87f5011dae05cd11d7b2aa26970c1109703e8888 (
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
{ 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 {
# It's a CherryTrail SoC, so we want to have the latest and greatest with a
# few additional patches:
boot.kernelPackages = let
nixpkgs = import ../../../nixpkgs-path.nix;
mkKernel = import "${nixpkgs}/pkgs/os-specific/linux/kernel/generic.nix";
t100haKernel = mkKernel rec {
version = "4.7";
modDirVersion = "4.7.0";
extraMeta.branch = "4.7";
src = pkgs.fetchurl {
url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
sha256 = "042z53ik3mqaqlfrn5b70kw882fwd42zanqld10s1vcs438w742i";
};
kernelPatches = [
{ name = "backlight";
patch = ./backlight.patch;
}
{ name = "meta-keys";
patch = ./meta-keys.patch;
}
];
# 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
# GPU
AGP n
DRM y
DRM_I915 y
# Thermal
INT3406_THERMAL y
INT340X_THERMAL y
# 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
'';
features.iwlwifi = true;
features.efiBootStub = true;
features.needsCifsUtils = true;
features.canDisableNetfilterConntrackHelpers = true;
features.netfilterRPFilter = true;
inherit (pkgs) stdenv perl buildLinux;
};
self = pkgs.linuxPackagesFor t100haKernel self;
in self;
# 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"
'';
# XXX: Workaround for a vblank issue that causes the display to stay blank
# until the next subsequent vblank (usually on no activity for a while until
# the monitor gets powered down).
#
# I know this is very ugly, but another mitigation would be to disable power
# management entirely, which I think is even uglier.
boot.initrd.preDeviceCommands = "fix-vblank";
boot.initrd.extraUtilsCommands = ''
cc -Wall -o "$out/bin/fix-vblank" "${pkgs.writeText "fix-vblank.c" ''
#include <sys/ioctl.h>
int main(void) {
char cmd = 14;
ioctl(0, TIOCLINUX, &cmd);
cmd = 4;
ioctl(0, TIOCLINUX, &cmd);
}
''}"
'';
};
}
|