new config for getting hibernate to work on asus g74s.
authorChris Koeritz <fred@gruntose.com>
Mon, 12 Mar 2012 12:38:43 +0000 (08:38 -0400)
committerChris Koeritz <fred@gruntose.com>
Mon, 12 Mar 2012 12:38:43 +0000 (08:38 -0400)
database/configuration/machine/asus_g74s/20_custom-ehci_hcd [new file with mode: 0755]
database/configuration/machine/asus_g74s/readme.txt [new file with mode: 0644]

diff --git a/database/configuration/machine/asus_g74s/20_custom-ehci_hcd b/database/configuration/machine/asus_g74s/20_custom-ehci_hcd
new file mode 100755 (executable)
index 0000000..abde34f
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/sh
+#inspired by http://art.ubuntuforums.org/showpost.php?p=9744970&postcount=19
+#...and http://thecodecentral.com/2011/01/18/fix-ubuntu-10-10-suspendhibernate-not-working-bug    
+# tidied by tqzzaa :)
+
+VERSION=1.1
+DEV_LIST=/tmp/usb-dev-list
+DRIVERS_DIR=/sys/bus/pci/drivers
+DRIVERS="ehci xhci" # ehci_hcd, xhci_hcd
+HEX="[[:xdigit:]]"
+MAX_BIND_ATTEMPTS=2
+BIND_WAIT=0.1
+
+unbindDev() {
+  echo -n > $DEV_LIST 2>/dev/null
+  for driver in $DRIVERS; do
+    DDIR=$DRIVERS_DIR/${driver}_hcd
+    for dev in `ls $DDIR 2>/dev/null | egrep "^$HEX+:$HEX+:$HEX"`; do
+      echo -n "$dev" > $DDIR/unbind
+      echo "$driver $dev" >> $DEV_LIST
+    done
+  done
+}
+
+bindDev() {
+  if [ -s $DEV_LIST ]; then
+    while read driver dev; do
+      DDIR=$DRIVERS_DIR/${driver}_hcd
+      while [ $((MAX_BIND_ATTEMPTS)) -gt 0 ]; do
+          echo -n "$dev" > $DDIR/bind
+          if [ ! -L "$DDIR/$dev" ]; then
+            sleep $BIND_WAIT
+          else
+            break
+          fi
+          MAX_BIND_ATTEMPTS=$((MAX_BIND_ATTEMPTS-1))
+      done  
+    done < $DEV_LIST
+  fi
+  rm $DEV_LIST 2>/dev/null
+}
+
+case "$1" in
+  hibernate|suspend) unbindDev;;
+  resume|thaw)       bindDev;;
+esac
diff --git a/database/configuration/machine/asus_g74s/readme.txt b/database/configuration/machine/asus_g74s/readme.txt
new file mode 100644 (file)
index 0000000..0703ed0
--- /dev/null
@@ -0,0 +1,4 @@
+
+
+this file goes in /etc/pm/sleep.d as described in this article:
+http://thecodecentral.com/2011/01/18/fix-ubuntu-10-10-suspendhibernate-not-working-bug