about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--modules/hardware/t100ha/backlight.patch223
-rw-r--r--modules/hardware/t100ha/default.nix23
-rw-r--r--modules/hardware/t100ha/meta-keys.patch44
-rw-r--r--pkgs/default.nix2
-rw-r--r--pkgs/linux-4.12.nix23
5 files changed, 10 insertions, 305 deletions
diff --git a/modules/hardware/t100ha/backlight.patch b/modules/hardware/t100ha/backlight.patch
deleted file mode 100644
index a83d6659..00000000
--- a/modules/hardware/t100ha/backlight.patch
+++ /dev/null
@@ -1,223 +0,0 @@
-diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
-index fc0ef492252a..f9bf7290a2bb 100644
---- a/drivers/gpu/drm/i915/intel_dsi.c
-+++ b/drivers/gpu/drm/i915/intel_dsi.c
-@@ -644,6 +644,7 @@ static void intel_dsi_port_enable(struct intel_encoder *encoder)
- 	struct drm_i915_private *dev_priv = to_i915(dev);
- 	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
- 	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
-+	struct intel_connector *intel_connector = intel_dsi->attached_connector;
- 	enum port port;
- 
- 	if (intel_dsi->dual_link == DSI_DUAL_LINK_FRONT_BACK) {
-@@ -665,6 +666,8 @@ static void intel_dsi_port_enable(struct intel_encoder *encoder)
- 		}
- 	}
- 
-+	intel_panel_disable_backlight(intel_connector);
-+
- 	for_each_dsi_port(port, intel_dsi->ports) {
- 		i915_reg_t port_ctrl = IS_GEN9_LP(dev_priv) ?
- 			BXT_MIPI_PORT_CTRL(port) : MIPI_PORT_CTRL(port);
-@@ -1635,6 +1638,7 @@ static void intel_dsi_connector_destroy(struct drm_connector *connector)
- 
- 	DRM_DEBUG_KMS("\n");
- 	intel_panel_fini(&intel_connector->panel);
-+	intel_panel_destroy_backlight(connector);
- 	drm_connector_cleanup(connector);
- 	kfree(connector);
- }
-diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
-index cb50c527401f..0dae84db6303 100644
---- a/drivers/gpu/drm/i915/intel_panel.c
-+++ b/drivers/gpu/drm/i915/intel_panel.c
-@@ -32,6 +32,7 @@
- 
- #include <linux/kernel.h>
- #include <linux/moduleparam.h>
-+#include <linux/mfd/intel_soc_pmic.h>
- #include <linux/pwm.h>
- #include "intel_drv.h"
- 
-@@ -542,6 +543,11 @@ static u32 pwm_get_backlight(struct intel_connector *connector)
- 	return DIV_ROUND_UP(duty_ns * 100, CRC_PMIC_PWM_PERIOD_NS);
- }
- 
-+static u32 vlv_pmic_get_backlight(struct intel_connector *connector)
-+{
-+	return intel_soc_pmic_readb(0x4E);
-+}
-+
- static u32 intel_panel_get_backlight(struct intel_connector *connector)
- {
- 	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
-@@ -633,6 +639,11 @@ static void pwm_set_backlight(struct intel_connector *connector, u32 level)
- 	pwm_config(panel->backlight.pwm, duty_ns, CRC_PMIC_PWM_PERIOD_NS);
- }
- 
-+static void vlv_pmic_set_backlight(struct intel_connector *connector, u32 level)
-+{
-+	intel_soc_pmic_writeb(0x4E, level);
-+}
-+
- static void
- intel_panel_actually_set_backlight(struct intel_connector *connector, u32 level)
- {
-@@ -806,6 +817,14 @@ static void pwm_disable_backlight(struct intel_connector *connector)
- 	pwm_disable(panel->backlight.pwm);
- }
- 
-+static void vlv_pmic_disable_backlight(struct intel_connector *connector)
-+{
-+	intel_panel_actually_set_backlight(connector, 0);
-+
-+	intel_soc_pmic_writeb(0x51, 0x00);
-+	intel_soc_pmic_writeb(0x4B, 0x7F);
-+}
-+
- void intel_panel_disable_backlight(struct intel_connector *connector)
- {
- 	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
-@@ -1084,6 +1103,17 @@ static void pwm_enable_backlight(struct intel_connector *connector)
- 	intel_panel_actually_set_backlight(connector, panel->backlight.level);
- }
- 
-+static void vlv_pmic_enable_backlight(struct intel_connector *connector)
-+{
-+	struct intel_panel *panel = &connector->panel;
-+
-+	intel_soc_pmic_writeb(0x4B, 0xFF);
-+	intel_soc_pmic_writeb(0x4E, 0xFF);
-+	intel_soc_pmic_writeb(0x51, 0x01);
-+
-+	intel_panel_actually_set_backlight(connector, panel->backlight.level);
-+}
-+
- void intel_panel_enable_backlight(struct intel_connector *connector)
- {
- 	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
-@@ -1673,6 +1703,20 @@ static int pwm_setup_backlight(struct intel_connector *connector,
- 	return 0;
- }
- 
-+static int vlv_pmic_setup_backlight(struct intel_connector *connector,
-+		enum pipe unused)
-+{
-+	struct intel_panel *panel = &connector->panel;
-+
-+	panel->backlight.present = 1;
-+	panel->backlight.min = 0x00;
-+	panel->backlight.max = 0xFF;
-+	panel->backlight.level = 0x5A;
-+	panel->backlight.enabled = 1;
-+
-+	return 0;
-+}
-+
- int intel_panel_setup_backlight(struct drm_connector *connector, enum pipe pipe)
- {
- 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
-@@ -1680,6 +1724,8 @@ int intel_panel_setup_backlight(struct drm_connector *connector, enum pipe pipe)
- 	struct intel_panel *panel = &intel_connector->panel;
- 	int ret;
- 
-+	intel_backlight_device_register(intel_connector);
-+
- 	if (!dev_priv->vbt.backlight.present) {
- 		if (dev_priv->quirks & QUIRK_BACKLIGHT_PRESENT) {
- 			DRM_DEBUG_KMS("no backlight present per VBT, but present per quirk\n");
-@@ -1769,18 +1815,17 @@ intel_panel_init_backlight_funcs(struct intel_panel *panel)
- 		panel->backlight.hz_to_pwm = pch_hz_to_pwm;
- 	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
- 		if (connector->base.connector_type == DRM_MODE_CONNECTOR_DSI) {
--			panel->backlight.setup = pwm_setup_backlight;
--			panel->backlight.enable = pwm_enable_backlight;
--			panel->backlight.disable = pwm_disable_backlight;
--			panel->backlight.set = pwm_set_backlight;
--			panel->backlight.get = pwm_get_backlight;
-+			panel->backlight.setup = vlv_pmic_setup_backlight;
-+			panel->backlight.enable = vlv_pmic_enable_backlight;
-+			panel->backlight.disable = vlv_pmic_disable_backlight;
-+			panel->backlight.set = vlv_pmic_set_backlight;
-+			panel->backlight.get = vlv_pmic_get_backlight;
- 		} else {
- 			panel->backlight.setup = vlv_setup_backlight;
- 			panel->backlight.enable = vlv_enable_backlight;
- 			panel->backlight.disable = vlv_disable_backlight;
- 			panel->backlight.set = vlv_set_backlight;
- 			panel->backlight.get = vlv_get_backlight;
--			panel->backlight.hz_to_pwm = vlv_hz_to_pwm;
- 		}
- 	} else if (IS_GEN4(dev_priv)) {
- 		panel->backlight.setup = i965_setup_backlight;
-diff --git a/drivers/mfd/intel_soc_pmic_core.c b/drivers/mfd/intel_soc_pmic_core.c
-index 13737be6df35..60880fdbdccf 100644
---- a/drivers/mfd/intel_soc_pmic_core.c
-+++ b/drivers/mfd/intel_soc_pmic_core.c
-@@ -44,6 +44,8 @@ static struct pwm_lookup crc_pwm_lookup[] = {
- 	PWM_LOOKUP("crystal_cove_pwm", 0, "0000:00:02.0", "pwm_backlight", 0, PWM_POLARITY_NORMAL),
- };
- 
-+static struct intel_soc_pmic *pmic_hack = NULL;
-+
- static int intel_soc_pmic_i2c_probe(struct i2c_client *i2c,
- 				    const struct i2c_device_id *i2c_id)
- {
-@@ -60,6 +62,7 @@ static int intel_soc_pmic_i2c_probe(struct i2c_client *i2c,
- 	config = (struct intel_soc_pmic_config *)id->driver_data;
- 
- 	pmic = devm_kzalloc(dev, sizeof(*pmic), GFP_KERNEL);
-+	pmic_hack = pmic;
- 	if (!pmic)
- 		return -ENOMEM;
- 
-@@ -147,6 +150,37 @@ static int intel_soc_pmic_resume(struct device *dev)
- }
- #endif
- 
-+int intel_soc_pmic_readb(int reg)
-+{
-+	int ret;
-+	unsigned int val;
-+
-+	if (!pmic_hack) {
-+		ret = -EIO;
-+	} else {
-+		ret = regmap_read(pmic_hack->regmap, reg, &val);
-+		if (!ret) {
-+			ret = val;
-+		}
-+	}
-+
-+	return ret;
-+}
-+EXPORT_SYMBOL(intel_soc_pmic_readb);
-+
-+int intel_soc_pmic_writeb(int reg, u8 val)
-+{
-+	int ret;
-+
-+	if (!pmic_hack) {
-+		ret = -EIO;
-+	} else {
-+		ret = regmap_write(pmic_hack->regmap, reg, val);
-+	}
-+	return ret;
-+}
-+EXPORT_SYMBOL(intel_soc_pmic_writeb);
-+
- static SIMPLE_DEV_PM_OPS(intel_soc_pmic_pm_ops, intel_soc_pmic_suspend,
- 			 intel_soc_pmic_resume);
- 
-diff --git a/include/linux/mfd/intel_soc_pmic.h b/include/linux/mfd/intel_soc_pmic.h
-index 956caa0628f5..2adff16a60c3 100644
---- a/include/linux/mfd/intel_soc_pmic.h
-+++ b/include/linux/mfd/intel_soc_pmic.h
-@@ -30,4 +30,7 @@ struct intel_soc_pmic {
- 	struct device *dev;
- };
- 
-+int intel_soc_pmic_readb(int reg);
-+int intel_soc_pmic_writeb(int reg, u8 val);
-+
- #endif	/* __INTEL_SOC_PMIC_H__ */
diff --git a/modules/hardware/t100ha/default.nix b/modules/hardware/t100ha/default.nix
index 00c8a096..8d8756f4 100644
--- a/modules/hardware/t100ha/default.nix
+++ b/modules/hardware/t100ha/default.nix
@@ -19,18 +19,9 @@ in {
       $install "$params" "$out/lib/firmware/brcm/brcmfmac43340-sdio.txt"
     '');
 
-    boot.kernelPatches = [
-      { name = "backlight";
-        patch = ./backlight.patch;
-      }
-      { name = "meta-keys";
-        patch = ./meta-keys.patch;
-      }
-    ];
-
     boot.kernelPackages = let
       nixpkgs = import ../../../nixpkgs-path.nix;
-      t100haKernel = pkgs.vuizvui.linux_4_12.override {
+      t100haKernel = pkgs.linux_testing.override {
         # Missing device drivers:
         #
         #   808622B8 -> Intel(R) Imaging Signal Processor 2401
@@ -55,14 +46,20 @@ in {
           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 y
+          DRM_I915 m
 
           # Thermal
-          INT3406_THERMAL y
-          INT340X_THERMAL y
+          INT3406_THERMAL m
+          INT340X_THERMAL m
 
           # GPIO
           PINCTRL_CHERRYVIEW y
diff --git a/modules/hardware/t100ha/meta-keys.patch b/modules/hardware/t100ha/meta-keys.patch
deleted file mode 100644
index 26fd4fda..00000000
--- a/modules/hardware/t100ha/meta-keys.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
-index bcfaf32..c54cb28 100644
---- a/drivers/hid/hid-input.c
-+++ b/drivers/hid/hid-input.c
-@@ -502,7 +502,8 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
- 
- 	field->hidinput = hidinput;
- 
--	if (field->flags & HID_MAIN_ITEM_CONSTANT)
-+	if ((field->flags & HID_MAIN_ITEM_CONSTANT) &&
-+		(usage->hid & HID_USAGE_PAGE) != HID_UP_ASUSVENDOR)
- 		goto ignore;
- 
- 	/* Ignore if report count is out of bounds. */
-@@ -980,6 +981,17 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
- 		}
- 		break;
- 
-+	case HID_UP_ASUSVENDOR:
-+		switch (usage->hid & HID_USAGE) {
-+			case 0x06C: map_key_clear(KEY_SLEEP);           break; /* Fn+F1: Sleep */
-+			case 0x088: map_key_clear(KEY_WLAN);            break; /* Fn+F2: Wifi & BT */
-+			case 0x010: map_key_clear(KEY_BRIGHTNESSDOWN);  break; /* Fn+F5: Brightness down */
-+			case 0x020: map_key_clear(KEY_BRIGHTNESSUP);    break; /* Fn+F6: Brightness up */
-+			case 0x06B: map_key_clear(KEY_F24);             break; /* Fn+F9: Touchpad */
-+			default: goto ignore;
-+		}
-+		break;
-+
- 	default:
- 	unknown:
- 		if (field->report_size == 1) {
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 75b66ec..16a64fd 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -172,6 +172,7 @@ struct hid_item {
- #define HID_UP_LOGIVENDOR3   0xff430000
- #define HID_UP_LNVENDOR		0xffa00000
- #define HID_UP_SENSOR		0x00200000
-+#define HID_UP_ASUSVENDOR	0xff310000
- 
- #define HID_USAGE		0x0000ffff
- 
diff --git a/pkgs/default.nix b/pkgs/default.nix
index d8297464..ce39a5bc 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -24,7 +24,5 @@ let
     openlab = callPackageScope ./openlab;
     profpatsch = callPackageScope ./profpatsch;
     sternenseemann = callPackageScope ./sternenseemann;
-
-    linux_4_12 = callPackage ./linux-4.12.nix {};
   };
 in pkgs // self
diff --git a/pkgs/linux-4.12.nix b/pkgs/linux-4.12.nix
deleted file mode 100644
index 1ead6369..00000000
--- a/pkgs/linux-4.12.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ stdenv, hostPlatform, fetchurl, perl, pkgs, buildLinux, ... }@args:
-
-let
-  nixpkgs = import ../nixpkgs-path.nix;
-  generic = "${nixpkgs}/pkgs/os-specific/linux/kernel/generic.nix";
-in import generic (args // rec {
-  extraMeta.branch = "4.12";
-  version = "4.12.14";
-
-  src = fetchurl {
-    url = "mirror://kernel/linux/kernel/v4.x/linux-${version}.tar.xz";
-    sha256 = "09zxmknh6awhqmj8dyq95bdlwcasryy35hkjxjlzixdgn52kzaw6";
-  };
-
-  kernelPatches = (args.kernelPatches or []) ++ [
-    pkgs.kernelPatches.bridge_stp_helper
-    pkgs.kernelPatches.p9_fixes
-    pkgs.kernelPatches.cpu-cgroup-v2."4.11"
-    pkgs.kernelPatches.modinst_arg_list_too_long
-  ];
-
-  extraMeta.hydraPlatforms = [];
-} // (args.argsOverride or {}))