Power ON/OFF methodics improved.

This commit is contained in:
Kolan Sh 2012-05-16 01:44:16 +04:00
parent 5b59f169e3
commit 4d6bf1b256
2 changed files with 126 additions and 228 deletions

View File

@ -1,134 +1,85 @@
#!/bin/bash #!/bin/bash
TRIES=48 rmmod -w nvidia &>/dev/null
lsmod | grep '^nouveau ' >/dev/null && rmmod -f nouveau &>/dev/null
# Trying bbswitch method # Trying bbswitch method
if [ -f /proc/acpi/bbswitch ]; then if [ -f /proc/acpi/bbswitch ]; then
let tries=$TRIES echo 'OFF' > /proc/acpi/bbswitch \
while [ 0 -lt $tries ]; do && a=`cat /proc/acpi/bbswitch` \
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && [ OFF == ${a##* } ] \
&& echo 'OFF' > /proc/acpi/bbswitch \ && echo "nVidia chip powered off using bbswitch" \
&& exit 0 && exit 0
sleep 0.2 echo "Cann't power off nVidia chip using bbswitch"
let tries--
# echo "tries left: $tries"
done
echo "Cann't power off nVidia chip"
exit -1 exit -1
fi fi
# Trying acpi_call method # Trying acpi_call method
if [ -f /proc/acpi/call ]; then if [ -f /proc/acpi/call ]; then
model=`dmidecode $@ -s system-product-name` model=`dmidecode $@ -s system-product-name`
tries=$TRIES case "$model" in
while [ 0 -lt $tries ]; do M11XR2)
case "$model" in echo '\_SB.PCI0.P0P2.PEGP.NVOP 0 0x100 0x1A {255,255,255,255}' > /proc/acpi/call \
M11XR2) && echo '\_SB.PCI0.P0P2.PEGP._PS3' > /proc/acpi/call
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ ;;
&& echo '\_SB.PCI0.P0P2.PEGP.NVOP 0 0x100 0x1A {255,255,255,255}' > /proc/acpi/call \ 1015PN)
&& echo '\_SB.PCI0.P0P2.PEGP._PS3' > /proc/acpi/call \ echo '\OSGS 0x03' > /proc/acpi/call
&& exit 0 ;;
;; 1215N)
1015PN) echo '\_SB.PCI0.P0P4.GFX0._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.P0P4.GFX0._PS3' > /proc/acpi/call
&& echo '\OSGS 0x03' > /proc/acpi/call \ ;;
&& exit 0 K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt)
;; echo '\_SB.PCI0.PEG1.GFX0.DOFF' > /proc/acpi/call
1215N) ;;
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ N61Jv|N73Sv)
&& echo '\_SB.PCI0.P0P4.GFX0._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \ echo '\_SB.PCI0.PEGR.GFX0.DOFF' > /proc/acpi/call
&& echo '\_SB.PCI0.P0P4.GFX0._PS3' > /proc/acpi/call \ ;;
&& exit 0 P31Jg)
;; echo '\_SB.PCI0.PEG1.GFX0._PS3' > /proc/acpi/call
K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt) ;;
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ U43Jc)
&& echo '\_SB.PCI0.PEG1.GFX0.DOFF' > /proc/acpi/call \ echo '\_SB.PCI0.RP00.VGA._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& exit 0 && echo '\_SB.PCI0.RP00.VGA._PS3' > /proc/acpi/call
;; ;;
N61Jv|N73Sv) UL30Vt)
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ echo '\_SB.PCI0.P0P1.VGA._OFF' > /proc/acpi/call
&& echo '\_SB.PCI0.PEGR.GFX0.DOFF' > /proc/acpi/call \ ;;
&& exit 0 E6420)
;; echo '\_SB.PCI0.PEG0.VID._OFF' > /proc/acpi/call
P31Jg) ;;
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ InspironN5110|XPSL702X)
&& echo '\_SB.PCI0.PEG1.GFX0._PS3' > /proc/acpi/call \ echo '\_SB.PCI0.PEG0.PEGP._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& exit 0 && echo '\_SB.PCI0.PEG0.PEGP._PS3' > /proc/acpi/call
;; ;;
U43Jc) Vostro3300|Vostro3500)
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ echo '\_SB.PCI0.P0P1.PEGP._OFF' > /proc/acpi/call
&& echo '\_SB.PCI0.RP00.VGA._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \ ;;
&& echo '\_SB.PCI0.RP00.VGA._PS3' > /proc/acpi/call \ XPS15)
&& exit 0 echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call
;; ;;
UL30Vt) ThinkPadT410)
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \
&& echo '\_SB.PCI0.P0P1.VGA._OFF' > /proc/acpi/call \ && echo '\_SB.PCI0.PEG.VID._OFF' > /proc/acpi/call
&& exit 0 ;;
;; ThinkPadT420)
E6420) echo '\_SB.PCI0.PEG.VID._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call
&& echo '\_SB.PCI0.PEG0.VID._OFF' > /proc/acpi/call \ ;;
&& exit 0 *) echo "Snail: unknown Notebook model: $model"; exit -1
;; ;;
InspironN5110|XPSL702X) esac
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \
&& echo '\_SB.PCI0.PEG0.PEGP._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG0.PEGP._PS3' > /proc/acpi/call \
&& exit 0
;;
Vostro3300|Vostro3500)
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \
&& echo '\_SB.PCI0.P0P1.PEGP._OFF' > /proc/acpi/call \
&& exit 0
;;
XPS15)
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \
&& echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call \
&& exit 0
;;
ThinkPadT410)
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \
&& echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._OFF' > /proc/acpi/call \
&& exit 0
;;
ThinkPadT420)
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \
&& echo '\_SB.PCI0.PEG.VID._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \
&& exit 0
;;
*) echo "Snail: unknown Notebook model: $model"; exit -1
;;
esac
sleep 0.2 echo "acpi_call used to power OFF nVidia chip"
let tries-- exit 0
# echo "tries left: $tries"
done
echo "Cann't power off nVidia chip"
exit -1
fi fi
# Trying vgaswitcheroo method # Trying vgaswitcheroo method
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
let tries=$TRIES echo 'OFF' > /sys/kernel/debug/vgaswitcheroo/switch \
while [ 0 -lt $tries ]; do && echo "nVidia chip powered off using vgaswitcheroo" \
(! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && exit 0
&& echo 'OFF' > /sys/kernel/debug/vgaswitcheroo/switch \
&& exit 0
sleep 0.2 echo "Cann't power off nVidia chip using vgaswitcheroo"
let tries--
echo "tries left: $tries"
done
echo "Cann't power off nVidia chip"
exit -1 exit -1
fi fi

View File

@ -1,134 +1,81 @@
#!/bin/bash #!/bin/bash
TRIES=8 # lsmod | grep '^nouveau ' >/dev/null && modprobe -rf nouveau &>/dev/null
lsmod | grep '^nouveau ' >/dev/null && modprobe -rf nouveau &>/dev/null
# Trying bbswitch method # Trying bbswitch method
if [ -f /proc/acpi/bbswitch ]; then if [ -f /proc/acpi/bbswitch ]; then
let tries=$TRIES echo 'ON' > /proc/acpi/bbswitch
while [ 0 -lt $tries ]; do a=`cat /proc/acpi/bbswitch`
echo 'ON' > /proc/acpi/bbswitch \ [ ON == ${a##* } ] && echo "nVidia chip powered ON using bbswitch" && exit 0
&& modprobe nvidia \
&& exit 0
sleep 0.1 echo "Cann't power on nVidia chip using bbswitch"
let tries--
echo "tries left: $tries"
done
echo "Cann't power on nVidia chip"
exit -1 exit -1
fi fi
# Trying acpi_call method # Trying acpi_call method
if [ -f /proc/acpi/call ]; then if [ -f /proc/acpi/call ]; then
model=`dmidecode $@ -s system-product-name` model=`dmidecode $@ -s system-product-name`
tries=$TRIES case "$model" in
while [ 0 -lt $tries ]; do M11XR2)
case "$model" in echo '\_SB.PCI0.P0P2.PEGP._PS0' > /proc/acpi/call
M11XR2) ;;
echo '\_SB.PCI0.P0P2.PEGP._PS0' > /proc/acpi/call \ 1015PN)
&& modprobe nvidia \ echo '\_SB.PCI0.P0P4.DGPU.DON' > /proc/acpi/call
&& exit 0 ;;
;; 1215N)
1015PN) echo '\_SB.PCI0.P0P4.GFX0._PS0' > /proc/acpi/call
echo '\_SB.PCI0.P0P4.DGPU.DON' > /proc/acpi/call \ ;;
&& modprobe nvidia \ K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt)
&& exit 0 echo '\_SB.PCI0.PEG1.GFX0.DON' > /proc/acpi/call
;; ;;
1215N) N53Sn|U41Sv|N53Sv)
echo '\_SB.PCI0.P0P4.GFX0._PS0' > /proc/acpi/call \ echo '\_SB.PCI0.PEG0.GFX0.DON' > /proc/acpi/call
&& modprobe nvidia \ ;;
&& exit 0 N61Jv|N73Sv)
;; echo '\_SB.PCI0.PEGR.GFX0.DON' > /proc/acpi/call
K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt) ;;
echo '\_SB.PCI0.PEG1.GFX0.DON' > /proc/acpi/call \ P31Jg)
&& modprobe nvidia \ echo '\_SB.PCI0.PEG1.GFX0._PS0' > /proc/acpi/call
&& exit 0 ;;
;; U43Jc)
N53Sn|U41Sv|N53Sv) echo '\_SB.PCI0.RP00.VGA._PS0' > /proc/acpi/call
echo '\_SB.PCI0.PEG0.GFX0.DON' > /proc/acpi/call \ ;;
&& modprobe nvidia \ UL30Vt)
&& exit 0 echo '\_SB.PCI0.P0P1.VGA._ON' > /proc/acpi/call
;; ;;
N61Jv|N73Sv) E6420)
echo '\_SB.PCI0.PEGR.GFX0.DON' > /proc/acpi/call \ echo '\_SB.PCI0.PEG0.VID._ON' > /proc/acpi/call
&& modprobe nvidia \ ;;
&& exit 0 InspironN5110|XPSL702X)
;; echo '\_SB.PCI0.PEG0.PEGP._PS0' > /proc/acpi/call
P31Jg) ;;
echo '\_SB.PCI0.PEG1.GFX0._PS0' > /proc/acpi/call \ Vostro3300|Vostro3500)
&& modprobe nvidia \ echo '\_SB.PCI0.P0P1.PEGP._ON' > /proc/acpi/call
&& exit 0 ;;
;; XPS15)
U43Jc) echo '\_SB.PCI0.PEG0.PEGP._ON' > /proc/acpi/call
echo '\_SB.PCI0.RP00.VGA._PS0' > /proc/acpi/call \ ;;
&& modprobe nvidia \ ThinkPadT410)
&& exit 0 echo '\_SB.PCI0.PEG.VID._ON' > /proc/acpi/call \
;; && echo '\_SB.PCI0.PEG.VID._PS0' > /proc/acpi/call
UL30Vt) ;;
echo '\_SB.PCI0.P0P1.VGA._ON' > /proc/acpi/call \ ThinkPadT420)
&& modprobe nvidia \ echo '\_SB.PCI0.PEG.VID._PS0' > /proc/acpi/call
&& exit 0 ;;
;; *) echo "Snail (acpi_call method): unknown Notebook model: $model"; exit -1
E6420) ;;
echo '\_SB.PCI0.PEG0.VID._ON' > /proc/acpi/call \ esac
&& modprobe nvidia \
&& exit 0
;;
InspironN5110|XPSL702X)
echo '\_SB.PCI0.PEG0.PEGP._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
Vostro3300|Vostro3500)
echo '\_SB.PCI0.P0P1.PEGP._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
XPS15)
echo '\_SB.PCI0.PEG0.PEGP._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
ThinkPadT410)
echo '\_SB.PCI0.PEG.VID._ON' > /proc/acpi/call \
&& echo '\_SB.PCI0.PEG.VID._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
ThinkPadT420)
echo '\_SB.PCI0.PEG.VID._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
*) echo "Snail: unknown Notebook model: $model"; exit -1
;;
esac
sleep 0.1 echo "acpi_call used to power ON nVidia chip"
let tries-- exit 0
echo "tries left: $tries"
done
echo "Cann't power on nVidia chip"
exit -1
fi fi
# Trying vgaswitcheroo method # Trying vgaswitcheroo method
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
let tries=$TRIES echo 'ON' > /sys/kernel/debug/vgaswitcheroo/switch \
while [ 0 -lt $tries ]; do && echo "nVidia chip powered ON using vgaswitcheroo" \
echo 'ON' > /sys/kernel/debug/vgaswitcheroo/switch \ && exit 0
&& modprobe nvidia \
&& exit 0
sleep 0.1 echo "Cann't power on nVidia chip using vgaswitcheroo"
let tries--
echo "tries left: $tries"
done
echo "Cann't power on nVidia chip"
exit -1 exit -1
fi fi