Suspend problem in Ubuntu 10.10 on ASUS N73JF (and others)

Update 26th August 2011: Solution tested and working with Debian Squeeze (my new main distro). A commenter reported it works on Mint, so I guess it works on most Debian-based distros. Another commenter had success on a Gigabyte motherboard, which is very interesting indeed.

After 3.5 years I finally caved in and got a new laptop. Screen resolution, lagging editors and general sloppyness where the major factors for ditching the old one. I have been quite pleased with the quality on my ASUS eeePC 1015PE, so I decided to go for another ASUS computer. As I am to use this machine for development, I’d like to have a large screen; the old one left me frustrated at the lack of screen estate and the crappy resolution. I therefore got me a 17,3″ ASUS N73JF, with enough power to last me just as long as the old one, I hope!

Since the new laptop has a somewhat decent graphics card, I decided to let the Windows install it came with stay, to be used for games and the likes. I of course installed Ubuntu 10.10 64-bit right away after booting the laptop to Windows 7 to check it out. It took longer booting to the preinstalled Windows 7, than it took installing Ubuntu from scratch! In addition to this, the Windows install was defiled with crapware. No wonder people buy Macs. Enough rambling; over to the problem at hand.

I did encounter a problem with getting the Suspend working in Ubuntu. After checking the fantastic ubuntuforums.org, I found people with similar issues. This thread holds the answers, but it seems the fix is more technical than it should be. However it will probably get included in some patch in the future.

At least for the N73JF, you need to create two files.

sudo touch /etc/pm/sleep.d/20_custom-ehci_hcd  
sudo touch /etc/pm/sleep.d/20_custom-xhci_hcd

To open a GUI editor like gedit, with root privileges, you can use the following command:

gksudo gedit

Keep in mind this is dangerous if you edit the wrong files, so only open the ones we created with the touch-command. If you want to open the file directly, you can append the path to the filename onto the gedit command like so:

gksudo gedit /etc/pm/sleep.d/20_custom-ehci_hcd

When you have opened the files in your favorite editor, we need to enter some scripts. In 20_custom-ehci-hcd put in:

#!/bin/sh
# File: "/etc/pm/sleep.d/20_custom-ehci_hcd".
TMPLIST=/tmp/ehci-dev-list

case "${1}" in
        hibernate|suspend)
    echo -n '' > $TMPLIST
          for i in `ls /sys/bus/pci/drivers/ehci_hcd/ | egrep '[0-9a-z]+\:[0-9a-z]+\:.*$'`; do
              # Unbind ehci_hcd for first device XXXX:XX:XX.X:
               echo -n "$i" | tee /sys/bus/pci/drivers/ehci_hcd/unbind
           echo "$i" >> $TMPLIST
          done
        ;;
        resume|thaw)
    for i in `cat $TMPLIST`; do
              # Bind ehci_hcd for first device XXXX:XX:XX.X:
              echo -n "$i" | tee /sys/bus/pci/drivers/ehci_hcd/bind
    done
    rm $TMPLIST
        ;;
esac

In 20_custom-xhci_hcd put in:

#!/bin/sh
# File: "/etc/pm/sleep.d/20_custom-xhci_hcd".
TMPLIST=/tmp/xhci-dev-list

case "${1}" in
        hibernate|suspend)
    echo -n '' > $TMPLIST
          for i in `ls /sys/bus/pci/drivers/xhci_hcd/ | egrep '[0-9a-z]+\:[0-9a-z]+\:.*$'`; do
              # Unbind ehci_hcd for first device XXXX:XX:XX.X:
               echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/unbind
           echo "$i" >> $TMPLIST
          done
        ;;
        resume|thaw)
    for i in `cat $TMPLIST`; do
              # Bind ehci_hcd for first device XXXX:XX:XX.X:
              echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/bind
    done
    rm $TMPLIST
        ;;
esac

Now you must make these files executable with these two commands:

chmod +x /etc/pm/sleep.d/20_custom-ehci_hcd  
chmod +x /etc/pm/sleep.d/20_custom-xhci_hcd

A user on the forum reported he didn’t need the extra file as proposed in the first solution. I did not test without this file, as it wasn’t working until I added the xhci-related file. I suggest you try the steps outlined here first, and attempt these last steps only if it doesn’t work.

Make this file:

sudo touch /etc/pm/config.d/usb3-suspend-workaround

Open the file, and put this in:

#File: "/etc/pm/config.d/usb3-suspend-workaround".
SUSPEND_MODULES="xhci"

He didn’t say if it needs to be executable, I’m assuming it should and that it couldn’t hurt:

chmod +x /etc/pm/config.d/usb3-suspend-workaround

I hope you get it working :) You should also check out the source for this post, as pointed out earlier. The forum might contain new information, after this is published.

15 Responses to “Suspend problem in Ubuntu 10.10 on ASUS N73JF (and others)”

  1. Francesco

    It worked for me on my ASUS N82JQ using the first two files
    /etc/pm/sleep.d/20_custom-ehci_hcd
    /etc/pm/sleep.d/20_custom-xhci_hcd

    Thank you very much

  2. Antoine

    My Asus B53 finally suspends and Hibernates!
    I like your script better than the ones of the reference!

    Thanks!

  3. Brian Doe

    Just wanted to mention that this solution worked for my G73JH running Mint 11. I have been struggling with suspend/hibernation issues in Linux ever since I bought this otherwise-awesome laptop last year, but now it works perfectly! Thank you!

  4. Arne Saknussem

    Not only for Asus motherboads but also for others!
    I have a Gigabyte GA-790FXTA-UD5 and Nvidia GeForce 7950 GT as a graphics card, with Kubuntu 11.04.
    The solution here proposed works very well.
    Go ahead! (It made my day!)

  5. Brian Doe

    Your solution is even farther-reaching than you’d believe! I just recently switched over to OpenSUSE on my G73JH and, wouldn’t you know it, it had exactly the same suspend/hibernation issues in OpenSUSE as it had in Ubuntu and Mint. Your solution fixed these issues even in OpenSUSE. I have to assume that it would also work for Fedora users as well.

  6. pcnoproblem

    Work in Kubuntu 11.10 on Asus X54C with the three files, thank you.

  7. Jester6

    You Sir are a GENIUS

    It worked like a charm for me on my ASUS V7SX (Ubuntu 12.04LTS)using the first two files only (No need for step 2)

    Just added
    /etc/pm/sleep.d/20_custom-ehci_hcd
    /etc/pm/sleep.d/20_custom-xhci_hcd
    I have been scouring the web for this fix for days and none worked, this solution did work and took only a couple of minutes to complete

    Thank you very much

  8. mathieu

    Worked on my Asus K54C (X54C) with Linux Mint 13. Thanks a lot!

  9. lordkpl

    Asus N73Jn – WORKS!!!! Tried hundreds of different solution but nothing worked. THANKS!

Leave a Reply

  • (will not be published)

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>