2008-08-30 22:42:26

by Steven King

[permalink] [raw]
Subject: 2.6.26.[1-3] + x61 tablet + x6ultrabase: no resume after undocking

While 2.6.26 made my x61t work with the x6ultrabase, I find that once I have
docked the x61t, I can only resume after a suspend2ram if the x61t is docked.
That is:

Never have been docked: suspend & resume works fine.
Docked: suspend & resume works fine.
Docked, undocked, re-docked: suspend & resume works fine.

Docked, then undocked: never finishes resuming (the disk seems to spin up and
the sleep led goes off, but the system doesnt seem to get any further).

Any suggestions?

attached is my .config
--
Steven King -- sfking at fdwdc dot com


Attachments:
(No filename) (553.00 B)
config (78.72 kB)
Download all attachments

2008-09-01 03:18:28

by Zhang, Rui

[permalink] [raw]
Subject: Re: 2.6.26.[1-3] + x61 tablet + x6ultrabase: no resume after undocking

On Sat, 2008-08-30 at 15:35 -0700, Steven King wrote:
> While 2.6.26 made my x61t work with the x6ultrabase, I find that once I have
> docked the x61t, I can only resume after a suspend2ram if the x61t is docked.
> That is:
>
> Never have been docked: suspend & resume works fine.
> Docked: suspend & resume works fine.
> Docked, undocked, re-docked: suspend & resume works fine.
>
> Docked, then undocked: never finishes resuming (the disk seems to spin up and
> the sleep led goes off, but the system doesnt seem to get any further).
>
> Any suggestions?
>
I have an acpidump of a X61, and it may also send notifications in _STA
method.
Please please try the following patch and see if it helps.
and it would be great if you can attach the acpidump of your laptop.

In some BIOSes, every _STA method call will send a notification again,
this cause freeze. And in some BIOSes, it appears _STA should be called
after _DCK. This tries to avoid calls _STA, and still keep the device
present check.
http://bugzilla.kernel.org/show_bug.cgi?id=10431

Signed-off-by: Shaohua Li <[email protected]>
---
drivers/acpi/dock.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

Index: linux/drivers/acpi/dock.c
===================================================================
--- linux.orig/drivers/acpi/dock.c 2008-08-27 14:38:44.000000000 +0800
+++ linux/drivers/acpi/dock.c 2008-08-28 09:33:02.000000000 +0800
@@ -604,14 +604,17 @@ static int handle_eject_request(struct d
static void dock_notify(acpi_handle handle, u32 event, void *data)
{
struct dock_station *ds = data;
+ struct acpi_device *tmp;

switch (event) {
case ACPI_NOTIFY_BUS_CHECK:
- if (!dock_in_progress(ds) && dock_present(ds)) {
+ if (!dock_in_progress(ds) && acpi_bus_get_device(ds->handle,
+ &tmp)) {
begin_dock(ds);
dock(ds);
if (!dock_present(ds)) {
printk(KERN_ERR PREFIX "Unable to dock!\n");
+ complete_dock(ds);
break;
}
atomic_notifier_call_chain(&dock_notifier_list,