Hi folks,

Well, I spent a chunk of tonight researching the practical ways of
controlling CONFIG_USB_SUSPEND, or as we'll call it below: autosuspend.

Here are the results:

Kernels:
========

Version 2.6.21 behaves with autosuspend=0 meaning off, while 2.6.22
and higher needs autosuspend=-1 to turn it off.  In 2.6.22, a value
of 0 means "immediate" instead of "never".

Version 2.6.22 adds variables internal to the system called
autosuspend_disabled and autoresume_disabled.  These are controlled by the
/sys/class/usb_device/*/device/power/level file.  (See below)

Here's a summary of files under device/power.  These may or may not exist
on your system depending on your kernel version and configuration.


        autosuspend
                -1 or 0 means off, depending on kernel,
                otherwise it is the number of seconds to
                autosuspend

        level 
                with the settings:

                on      - suspend is disabled, device is fully powered
                auto    - suspend is controlled by the kernel (default)
                suspend - suspend is enabled permanently

                You can write these strings to the file to control
                behaviour on a per-device basis.

                echo on > /sys/usb_device/.../device/power/level

        state
                current state of device
                0 - fully powered
                2 - suspended

                You can write these numbers to control behaviour, but
                any change you make here might change automatically
                if autosuspend is on.

                echo -n 0 > /sys/usb_device/.../device/power/state

        wakeup
                unknown



Based on the feedback from Chuck Ebbert, it is possible to disable
autosuspend on a system wide basis as well.  This is either done on
the kernel boot command line if usbcore is compiled into the kernel,
or on the module command line, if not.

Here are some practical notes for various distros:


Debian / Ubuntu systems:
========================

Comes with usbcore (CONFIG_USB) compiled as a module and CONFIG_USB_SUSPEND
enabled (at least on Ubuntu).

Therefore, to disable autosuspend you either:

        - recompile kernel without CONFIG_USB_SUSPEND

        - configure /etc/modprobe.d/ with a file containing
                "options usbcore autosuspend=-1"
                or set to 0 depending on your kernel

If your system needs the modprobe configuration file above, and if your
system uses initrd (probably does) then you will need to rebuild the
initrd for your kernel for this to take effect.  For example:

        dpkg-reconfigure linux-image-2.6.22.1


Fedora 6 and 7 systems: 
=======================

Comes with usbcore (CONFIG_USB) compiled into the the kernel, and
CONFIG_USB_SUSPEND enabled on Fedora 7.

Therefore to disable autosuspend you either:

        - recompile kernel without CONFIG_USB_SUSPEND

        - boot with one of the following, depending
          on your kernel version (2.6.21 or 2.6.22 respectively):

                usbcore.autosuspend=0

                usbcore.autosuspend=-1


Summary:
========

It seems that bcharge could be coded to search for device/power/level,
device/power/autosuspend, and device/power/state and use some heuristics
to decide what best action to take.

Fortunately, the kernel gives an error if you write -1 to autosuspend
and the kernel doesn't support it, in which case writing 0 seems to be
the next step. :-)

Unfortunately, the files under device/power do not always exist, even
while autosuspend is enabled, from what I can tell.  I'll update bcharge
soon to try to handle this automatically, but I'm not sure it will
work in every case.

Anyway, I'm getting verbose, and it's late, so I thought I'd post this
in the meantime.  At least the info is out there and people can test. :-)

Good luck, and please send feedback if you have it.

- Chris


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Barry-devel mailing list
Barry-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/barry-devel

Reply via email to