OSEC

Neohapsis is currently accepting applications for employment. For more information, please visit our website www.neohapsis.com or email hr@neohapsis.com
Re: X41 ACPI suspend hints

From: Mark Kettenis (mark.kettenisxs4all.nl)
Date: Sat Aug 14 2010 - 09:29:09 CDT


> Date: Thu, 12 Aug 2010 00:08:57 +0200
> From: David Coppa <dcoppagmail.com>
>
> > > Date: Tue, 10 Aug 2010 23:15:32 +0200
> > > From: Mike Belopuhov <mkbcrypt.org.ru>
> > >
> > > Hi,
> > >
> > > I have a Thinkpad X41 which doesn't do ACPI suspend properly
> > > (it immediately wakes up after 'zzz'). So I wonder if anyone
> > > can give me hints what to look at, or if someone is willing
> > > to take a closer look at acpidump? I won't mind doing some
> > > debugging myself, but at the moment I'm clueless what to start
> > > looking at. As I said it tries to suspend, blinks the "moon",
> > > then it comes back as if something woke it up. I wasn't
> > > running X while doing that test.

Can you guys give the diff below a go?

Index: acpi.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/acpi.c,v
retrieving revision 1.209
diff -u -p -r1.209 acpi.c
--- acpi.c 8 Aug 2010 20:45:18 -0000 1.209
+++ acpi.c 14 Aug 2010 14:22:29 -0000
-108,6 +108,7 int acpi_foundhid(struct aml_node *, voi
 int acpi_foundec(struct aml_node *, void *);
 int acpi_foundtmp(struct aml_node *, void *);
 int acpi_foundprw(struct aml_node *, void *);
+int acpi_foundpsw(struct aml_node *, void *);
 int acpi_foundvideo(struct aml_node *, void *);
 int acpi_foundsony(struct aml_node *node, void *arg);
 
-1571,6 +1572,21 acpi_foundprw(struct aml_node *node, voi
         return 0;
 }
 
+int
+acpi_foundpsw(struct aml_node *node, void *arg)
+{
+ struct acpi_softc *sc = arg;
+ struct aml_value val;
+
+ bzero(&val, sizeof val);
+ val.type = AML_OBJTYPE_INTEGER;
+ val.v_integer = 0;
+ val.length = 1;
+
+ aml_evalnode(sc, node, 1, &val, NULL);
+ return 0;
+}
+
 struct gpe_block *
 acpi_find_gpe(struct acpi_softc *sc, int gpe)
 {
-1625,6 +1641,7 acpi_init_gpes(struct acpi_softc *sc)
                 }
         }
         aml_find_node(&aml_root, "_PRW", acpi_foundprw, sc);
+ aml_find_node(&aml_root, "_PSW", acpi_foundpsw, sc);
         sc->sc_maxgpe = ngpe;
 }