Add fingerprint acpi rules & pre-6.9 power patches
Signed-off-by: ahuston-0 <aliceghuston@gmail.com>
This commit is contained in:
parent
38d8b593f2
commit
dd296c65a1
@ -38,4 +38,23 @@
|
|||||||
security.pam.services.runuser-l.rules.auth.fprintd.order = 11501;
|
security.pam.services.runuser-l.rules.auth.fprintd.order = 11501;
|
||||||
security.pam.services.groupmod.rules.auth.fprintd.order = 11501;
|
security.pam.services.groupmod.rules.auth.fprintd.order = 11501;
|
||||||
security.pam.services.runuser.rules.auth.fprintd.order = 11501;
|
security.pam.services.runuser.rules.auth.fprintd.order = 11501;
|
||||||
|
|
||||||
|
# to auto-flip to password when the laptop lid is closed (ie. docked)
|
||||||
|
services.acpid = {
|
||||||
|
enable = true;
|
||||||
|
lidEventCommands = ''
|
||||||
|
export PATH=$PATH:/run/current-system/sw/bin
|
||||||
|
|
||||||
|
if grep -Fq closed /proc/acpi/button/lid/LID0/state; then
|
||||||
|
${pkgs.systemd}/bin/systemctl stop fprintd.service
|
||||||
|
${pkgs.coreutils}/bin/ln -s /dev/null /run/systemd/transient/fprintd.service
|
||||||
|
${pkgs.systemd}/bin/systemctl daemon-reload
|
||||||
|
else
|
||||||
|
${pkgs.coreutils}/bin/rm -f /run/systemd/transient/fprintd.service
|
||||||
|
${pkgs.systemd}/bin/systemctl daemon-reload
|
||||||
|
${pkgs.systemd}/bin/systemctlstart fprintd.service
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,21 @@
|
|||||||
];
|
];
|
||||||
boot.kernelModules = [ "kvm-amd" ];
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
boot.kernelParams = [
|
||||||
|
"amdgpu.sg_display=0"
|
||||||
|
"amdgpu.graphics_sg=0"
|
||||||
|
"amdgpu.abmlevel=3"
|
||||||
|
];
|
||||||
|
boot.kernelPatches = lib.mkIf (lib.versionOlder pkgs.linux.version "6.9") [
|
||||||
|
{
|
||||||
|
name = "add panel_power_savings sysfs entry to eDP connectors";
|
||||||
|
patch = ./kernel-patches/panel_power_savings.patch;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "respect the abmlevel module parameter value if it is set";
|
||||||
|
patch = ./kernel-patches/respect_abmlevel.patch;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
fileSystems."/" = {
|
fileSystems."/" = {
|
||||||
device = "/dev/disk/by-uuid/f3c11d62-37f4-495e-b668-1ff49e0d3a47";
|
device = "/dev/disk/by-uuid/f3c11d62-37f4-495e-b668-1ff49e0d3a47";
|
||||||
|
@ -0,0 +1,100 @@
|
|||||||
|
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||||
|
index 3c826a9a593ed88c5ec4e6e6c2dd448812199e8c..5fe8dc6536966ce0bc9017dbec5445833b80ae92 100644
|
||||||
|
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||||
|
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||||
|
@@ -6437,10 +6437,81 @@ int amdgpu_dm_connector_atomic_get_property(struct drm_connector *connector,
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * DOC: panel power savings
|
||||||
|
+ *
|
||||||
|
+ * The display manager allows you to set your desired **panel power savings**
|
||||||
|
+ * level (between 0-4, with 0 representing off), e.g. using the following::
|
||||||
|
+ *
|
||||||
|
+ * # echo 3 > /sys/class/drm/card0-eDP-1/amdgpu/panel_power_savings
|
||||||
|
+ *
|
||||||
|
+ * Modifying this value can have implications on color accuracy, so tread
|
||||||
|
+ * carefully.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+static ssize_t panel_power_savings_show(struct device *device,
|
||||||
|
+ struct device_attribute *attr,
|
||||||
|
+ char *buf)
|
||||||
|
+{
|
||||||
|
+ struct drm_connector *connector = dev_get_drvdata(device);
|
||||||
|
+ struct drm_device *dev = connector->dev;
|
||||||
|
+ u8 val;
|
||||||
|
+
|
||||||
|
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
|
||||||
|
+ val = to_dm_connector_state(connector->state)->abm_level ==
|
||||||
|
+ ABM_LEVEL_IMMEDIATE_DISABLE ? 0 :
|
||||||
|
+ to_dm_connector_state(connector->state)->abm_level;
|
||||||
|
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
|
||||||
|
+
|
||||||
|
+ return sysfs_emit(buf, "%u\n", val);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static ssize_t panel_power_savings_store(struct device *device,
|
||||||
|
+ struct device_attribute *attr,
|
||||||
|
+ const char *buf, size_t count)
|
||||||
|
+{
|
||||||
|
+ struct drm_connector *connector = dev_get_drvdata(device);
|
||||||
|
+ struct drm_device *dev = connector->dev;
|
||||||
|
+ long val;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ ret = kstrtol(buf, 0, &val);
|
||||||
|
+
|
||||||
|
+ if (ret)
|
||||||
|
+ return ret;
|
||||||
|
+
|
||||||
|
+ if (val < 0 || val > 4)
|
||||||
|
+ return -EINVAL;
|
||||||
|
+
|
||||||
|
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
|
||||||
|
+ to_dm_connector_state(connector->state)->abm_level = val ?:
|
||||||
|
+ ABM_LEVEL_IMMEDIATE_DISABLE;
|
||||||
|
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
|
||||||
|
+
|
||||||
|
+ drm_kms_helper_hotplug_event(dev);
|
||||||
|
+
|
||||||
|
+ return count;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static DEVICE_ATTR_RW(panel_power_savings);
|
||||||
|
+
|
||||||
|
+static struct attribute *amdgpu_attrs[] = {
|
||||||
|
+ &dev_attr_panel_power_savings.attr,
|
||||||
|
+ NULL
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct attribute_group amdgpu_group = {
|
||||||
|
+ .name = "amdgpu",
|
||||||
|
+ .attrs = amdgpu_attrs
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
static void amdgpu_dm_connector_unregister(struct drm_connector *connector)
|
||||||
|
{
|
||||||
|
struct amdgpu_dm_connector *amdgpu_dm_connector = to_amdgpu_dm_connector(connector);
|
||||||
|
|
||||||
|
+ if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
|
||||||
|
+ sysfs_remove_group(&connector->kdev->kobj, &amdgpu_group);
|
||||||
|
+
|
||||||
|
drm_dp_aux_unregister(&amdgpu_dm_connector->dm_dp_aux.aux);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -6542,6 +6613,13 @@ amdgpu_dm_connector_late_register(struct drm_connector *connector)
|
||||||
|
to_amdgpu_dm_connector(connector);
|
||||||
|
int r;
|
||||||
|
|
||||||
|
+ if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
|
||||||
|
+ r = sysfs_create_group(&connector->kdev->kobj,
|
||||||
|
+ &amdgpu_group);
|
||||||
|
+ if (r)
|
||||||
|
+ return r;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
amdgpu_dm_register_backlight_device(amdgpu_dm_connector);
|
||||||
|
|
||||||
|
if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
|
@ -0,0 +1,86 @@
|
|||||||
|
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
||||||
|
index 1291b8eb9dffa3cfa0209d26e9fa3271eb8973cc..f5c8187e0d5829399463933719c0b0cd51cfce89 100644
|
||||||
|
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
||||||
|
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
|
||||||
|
@@ -196,7 +196,7 @@ extern int amdgpu_smu_pptable_id;
|
||||||
|
extern uint amdgpu_dc_feature_mask;
|
||||||
|
extern uint amdgpu_dc_debug_mask;
|
||||||
|
extern uint amdgpu_dc_visual_confirm;
|
||||||
|
-extern uint amdgpu_dm_abm_level;
|
||||||
|
+extern int amdgpu_dm_abm_level;
|
||||||
|
extern int amdgpu_backlight;
|
||||||
|
extern int amdgpu_damage_clips;
|
||||||
|
extern struct amdgpu_mgpu_info mgpu_info;
|
||||||
|
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||||
|
index 6ef7f22c1152c163f106cac24954ec2550595401..af7fae7907d71ed9efb771f50acdf483b4230113 100644
|
||||||
|
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||||
|
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||||
|
@@ -849,12 +849,13 @@ module_param_named(visualconfirm, amdgpu_dc_visual_confirm, uint, 0444);
|
||||||
|
* the ABM algorithm, with 1 being the least reduction and 4 being the most
|
||||||
|
* reduction.
|
||||||
|
*
|
||||||
|
- * Defaults to 0, or disabled. Userspace can still override this level later
|
||||||
|
- * after boot.
|
||||||
|
+ * Defaults to -1, or disabled. Userspace can only override this level after
|
||||||
|
+ * boot if it's set to auto.
|
||||||
|
*/
|
||||||
|
-uint amdgpu_dm_abm_level;
|
||||||
|
-MODULE_PARM_DESC(abmlevel, "ABM level (0 = off (default), 1-4 = backlight reduction level) ");
|
||||||
|
-module_param_named(abmlevel, amdgpu_dm_abm_level, uint, 0444);
|
||||||
|
+int amdgpu_dm_abm_level = -1;
|
||||||
|
+MODULE_PARM_DESC(abmlevel,
|
||||||
|
+ "ABM level (0 = off, 1-4 = backlight reduction level, -1 auto (default))");
|
||||||
|
+module_param_named(abmlevel, amdgpu_dm_abm_level, int, 0444);
|
||||||
|
|
||||||
|
int amdgpu_backlight = -1;
|
||||||
|
MODULE_PARM_DESC(backlight, "Backlight control (0 = pwm, 1 = aux, -1 auto (default))");
|
||||||
|
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||||
|
index ede6469c80afb2a399a40c427e8cfecb194bd089..367868ad20d7783e09028713b468f38c24d7a20d 100644
|
||||||
|
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||||
|
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||||
|
@@ -6512,7 +6512,8 @@ static void amdgpu_dm_connector_unregister(struct drm_connector *connector)
|
||||||
|
{
|
||||||
|
struct amdgpu_dm_connector *amdgpu_dm_connector = to_amdgpu_dm_connector(connector);
|
||||||
|
|
||||||
|
- if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
|
||||||
|
+ if (connector->connector_type == DRM_MODE_CONNECTOR_eDP &&
|
||||||
|
+ amdgpu_dm_abm_level < 0)
|
||||||
|
sysfs_remove_group(&connector->kdev->kobj, &amdgpu_group);
|
||||||
|
|
||||||
|
drm_dp_aux_unregister(&amdgpu_dm_connector->dm_dp_aux.aux);
|
||||||
|
@@ -6576,9 +6577,12 @@ void amdgpu_dm_connector_funcs_reset(struct drm_connector *connector)
|
||||||
|
state->vcpi_slots = 0;
|
||||||
|
state->pbn = 0;
|
||||||
|
|
||||||
|
- if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
|
||||||
|
- state->abm_level = amdgpu_dm_abm_level ?:
|
||||||
|
- ABM_LEVEL_IMMEDIATE_DISABLE;
|
||||||
|
+ if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
|
||||||
|
+ if (amdgpu_dm_abm_level <= 0)
|
||||||
|
+ state->abm_level = ABM_LEVEL_IMMEDIATE_DISABLE;
|
||||||
|
+ else
|
||||||
|
+ state->abm_level = amdgpu_dm_abm_level;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
__drm_atomic_helper_connector_reset(connector, &state->base);
|
||||||
|
}
|
||||||
|
@@ -6616,7 +6620,8 @@ amdgpu_dm_connector_late_register(struct drm_connector *connector)
|
||||||
|
to_amdgpu_dm_connector(connector);
|
||||||
|
int r;
|
||||||
|
|
||||||
|
- if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
|
||||||
|
+ if (connector->connector_type == DRM_MODE_CONNECTOR_eDP &&
|
||||||
|
+ amdgpu_dm_abm_level < 0) {
|
||||||
|
r = sysfs_create_group(&connector->kdev->kobj,
|
||||||
|
&amdgpu_group);
|
||||||
|
if (r)
|
||||||
|
@@ -7646,7 +7651,8 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
|
||||||
|
aconnector->base.state->max_requested_bpc = aconnector->base.state->max_bpc;
|
||||||
|
|
||||||
|
if (connector_type == DRM_MODE_CONNECTOR_eDP &&
|
||||||
|
- (dc_is_dmcu_initialized(adev->dm.dc) || adev->dm.dc->ctx->dmub_srv)) {
|
||||||
|
+ (dc_is_dmcu_initialized(adev->dm.dc) ||
|
||||||
|
+ adev->dm.dc->ctx->dmub_srv) && amdgpu_dm_abm_level < 0) {
|
||||||
|
drm_object_attach_property(&aconnector->base.base,
|
||||||
|
adev->mode_info.abm_level_property, 0);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user