i386/136008: [acpi] Dell Vostro 1310 will not shutdown (Requires
user intervention)
Sevan / Venture37
venture37 at gmail.com
Mon Jan 11 20:20:04 UTC 2010
The following reply was made to PR i386/136008; it has been noted by GNATS.
From: Sevan / Venture37 <venture37 at gmail.com>
To: bug-followup at FreeBSD.org, dan at dburkland.com
Cc:
Subject: Re: i386/136008: [acpi] Dell Vostro 1310 will not shutdown (Requires
user intervention)
Date: Mon, 11 Jan 2010 20:08:40 +0000
This is a multi-part message in MIME format.
--------------010201010104070900050707
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Unmangled version of the diff attached for the 8.0-RELEASE source, I've
been using this diff on 8.0-RELEASE AMD64 for the past few month & it
kind of works (issuing halt -p when running off battery works, but not
if I'm running from the mains, there are lots of errors when switching
power sources aswell)
Sevan / Venture37
--------------010201010104070900050707
Content-Type: text/plain;
name="acpi_ec.c.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="acpi_ec.c.txt"
--- sys/dev/acpica/acpi_ec.c.orig 2009-12-16 03:21:36.283295223 +0000
+++ sys/dev/acpica/acpi_ec.c 2009-12-16 03:38:44.410426185 +0000
@@ -197,6 +197,10 @@
SYSCTL_INT(_debug_acpi_ec, OID_AUTO, timeout, CTLFLAG_RW, &ec_timeout,
EC_TIMEOUT, "Total time spent waiting for a response (poll+sleep)");
+static int ec_disable_polling;
+SYSCTL_INT(_debug_acpi_ec, OID_AUTO, disable_polling, CTLFLAG_RW, &ec_disable_polling, 0,
+ "Totally disable use of polled mode (Dell EC problem workaround)");
+
static ACPI_STATUS
EcLock(struct acpi_ec_softc *sc)
{
@@ -577,7 +581,9 @@
/* Disable the GPE so we don't get EC events during shutdown. */
sc = device_get_softc(dev);
- AcpiDisableGpe(sc->ec_gpehandle, sc->ec_gpebit, ACPI_NOT_ISR);
+ if (!ec_disable_polling){
+ AcpiDisableGpe(sc->ec_gpehandle,sc->ec_gpebit,ACPI_NOT_ISR);
+ }
return (0);
}
@@ -814,7 +820,7 @@
ACPI_SERIAL_ASSERT(ec);
Status = AE_NO_HARDWARE_RESPONSE;
- int need_poll = cold || rebooting || ec_polled_mode || sc->ec_suspending;
+ int need_poll = ( cold || rebooting || ec_polled_mode || sc->ec_suspending ) && !ec_disable_polling;
/*
* The main CPU should be much faster than the EC. So the status should
* be "not ready" when we start waiting. But if the main CPU is really
@@ -894,7 +900,11 @@
device_printf(sc->ec_dev,
"wait timed out (%sresponse), forcing polled mode\n",
Status == AE_OK ? "" : "no ");
+ if (ec_disable_polling) {
+ device_printf(sc->ec_dev,"Polling explicitily disabled! Continue waiting for generated GPEs...\n");
+ } else {
ec_polled_mode = TRUE;
+ }
}
}
if (Status != AE_OK)
--------------010201010104070900050707--
More information about the freebsd-acpi
mailing list