Snail/sbin/snail.nv_pwr_on

130 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
TRIES=8
lsmod | grep '^nouveau ' >/dev/null && modprobe -rf nouveau &>/dev/null
# Trying bbswitch method
if [ -f /proc/acpi/bbswitch ]; then
let tries=$TRIES
while [ 0 -lt $tries ]; do
echo 'ON' > /proc/acpi/bbswitch \
&& modprobe nvidia \
&& exit 0
sleep 0.1
let tries--
echo "tries left: $tries"
done
fi
# Trying acpi_call method
if [ -f /proc/acpi/call ]; then
model=`dmidecode $@ -s system-product-name`
tries=$TRIES
while [ 0 -lt $tries ]; do
case "$model" in
M11XR2)
echo '\_SB.PCI0.P0P2.PEGP._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
1015PN)
echo '\_SB.PCI0.P0P4.DGPU.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
1215N)
echo '\_SB.PCI0.P0P4.GFX0._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt)
echo '\_SB.PCI0.PEG1.GFX0.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
N53Sn|U41Sv|N53Sv)
echo '\_SB.PCI0.PEG0.GFX0.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
N61Jv|N73Sv)
echo '\_SB.PCI0.PEGR.GFX0.DON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
P31Jg)
echo '\_SB.PCI0.PEG1.GFX0._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
U43Jc)
echo '\_SB.PCI0.RP00.VGA._PS0' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
UL30Vt)
echo '\_SB.PCI0.P0P1.VGA._ON' > /proc/acpi/call \
&& modprobe nvidia \
&& exit 0
;;
E6420)
echo '\_SB.PCI0.PEG0.VID._ON' > /proc/acpi/call \
&& 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
let tries--
echo "tries left: $tries"
done
fi
# Trying vgaswitcheroo method
if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then
let tries=$TRIES
while [ 0 -lt $tries ]; do
echo 'ON' > /sys/kernel/debug/vgaswitcheroo/switch \
&& modprobe nvidia \
&& exit 0
sleep 0.1
let tries--
echo "tries left: $tries"
done
fi
echo "Cann't power on nVidia chip"
exit -1