#!/bin/bash
#
# Copyright 2007 Red Hat, Inc.
#
# 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.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

help_options() {
	echo "pm-is-supported [--suspend | --hibernate | --suspend-hybrid ]"
	echo
}

get_video_type() {
        vendor=""
        vendor=$(/sbin/lspci -mn|awk '{if ($2 ~ /^"0300"$/ ) {print $3;exit;}}')
        vendor=$(eval echo $vendor)
        [ -z "$vendor" ] && return 1
        case "$vendor" in
                1002)
                        echo ATI
                        return 0
                        ;;
                10de)
                        echo nVidia
                        return 0
                        ;;
                8086)
                        echo Intel
                        return 0
                        ;;
                *)
                        echo $vendor
                        return 0
                        ;;
        esac
}

export LC_COLLATE=C

ARG=${1#--}

[ -f /sys/power/state ] || exit 1

. /usr/lib/pm-utils/functions

case "$ARG" in
	suspend)
		grep -q mem /sys/power/state || exit 1
		videovendor=$(get_video_type)
		if [ "$videovendor" = "nVidia" -a "$(grep "Driver.*nvidia" /etc/X11/xorg.conf)" = "" -a -z "$ALLOW_NV_SUSPEND" ]; then
			exit 1
		fi
		;;
	hibernate)
		[ -f /sys/power/disk ] || exit 1
		grep -q disk /sys/power/state || exit 1
		;;
	suspend-hybrid)
		# grep -q mem /sys/power/state || exit 1
		# grep -q disk /sys/power/state || exit 1
		exit 1
		;;
	help)
		help_options
		;;
	*)
		help_options 1>&2
		exit 1
		;;
esac

exit 0
