#!/bin/sh # # Copyright 2008 Victor Lowther # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. . "${PM_FUNCTIONS}" remove_all_video_quirks() { remove_parameters --quirk-dpms-on \ --quirk-dpms-suspend \ --quirk-s3-mode \ --quirk-s3-bios \ --quirk-vbe-post \ --quirk-vbe-post \ --quirk-vga-mode3 \ --quirk-vbemode-restore \ --quirk-vbestate-restore \ --quirk-reset-brightness \ --quirk-radeon-off \ --quirk-no-fb \ --quirk-pci-save } # Test to see if the kernel has a video driver that is smart enough to # handle quirks without external assistance. If it is, remove the quirks. have_kms() { # if we are running with a KMS-enabled video driver, we should not # attempt to run any quirks [ -d /sys/class/drm/card0/device/graphics/fb0 ] || return 1 remove_all_video_quirks add_parameters --quirk-no-chvt } have_nvidia() { # despite the bad rep the nvidia driver has, it is miles better than # any other video driver when it comes to handling power managment and # suspend/resume in a quirk-free manner. [ -d /sys/module/nvidia ] || return 1 remove_all_video_quirks } have_fglrx() { # the ATI driver is pretty good about it, too. [ -d /sys/module/fglrx ] || return 1 remove_all_video_quirks } have_smart_intel() { # currently, intel kernel modesetting is not quite smart enough # we still need acpi s3 kernel modesetting hooks, so don't remove those # options if they were passed. [ -d /sys/module/i915 ] || return 1 local kernel_rev="$(uname -r |awk -F '[_-]' '{print $1}')" [ "$kernel_rev" \> "2.6.26" -o "$kernel_rev" = "2.6.26" ] || return 1 remove_parameters --quirk-dpms-on \ --quirk-dpms-suspend \ --quirk-vbe-post \ --quirk-vbe-post \ --quirk-vga-mode3 \ --quirk-vbemode-restore \ --quirk-vbestate-restore \ --quirk-reset-brightness \ --quirk-radeon-off \ --quirk-no-fb \ --quirk-pci-save } smart_kernel_video() { have_kms || have_nvidia || have_fglrx || have_smart_intel || return $NA } case $1 in suspend|hibernate) smart_kernel_video ;; *) exit 0 ;; esac