[Haiku-commits] r31215 - haiku/trunk/src/add-ons/kernel/drivers/power/acpi_embedded_controller
czeidler at mail.berlios.de
czeidler at mail.berlios.de
Tue Jun 23 23:08:46 CEST 2009
Author: czeidler
Date: 2009-06-23 23:08:40 +0200 (Tue, 23 Jun 2009)
New Revision: 31215
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=31215&view=rev
Modified:
haiku/trunk/src/add-ons/kernel/drivers/power/acpi_embedded_controller/acpi_embedded_controller.cpp
haiku/trunk/src/add-ons/kernel/drivers/power/acpi_embedded_controller/acpi_embedded_controller.h
Log:
- Forgot to set a timeout in Wait.
- Fix build if TRACE is enabled.
Modified: haiku/trunk/src/add-ons/kernel/drivers/power/acpi_embedded_controller/acpi_embedded_controller.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/power/acpi_embedded_controller/acpi_embedded_controller.cpp 2009-06-23 21:03:57 UTC (rev 31214)
+++ haiku/trunk/src/add-ons/kernel/drivers/power/acpi_embedded_controller/acpi_embedded_controller.cpp 2009-06-23 21:08:40 UTC (rev 31215)
@@ -52,10 +52,12 @@
#define ACPI_EC_PATHID_GENERATOR "embedded_controller/path_id"
device_manager_info *gDeviceManager = NULL;
-
pci_module_info *gPCIManager = NULL;
+// cpu frequency
+int64 gHz;
+
uint8
bus_space_read_1(int address)
{
@@ -259,6 +261,13 @@
embedded_controller_init_driver(device_node *dev, void **_driverCookie)
{
TRACE("init driver\n");
+ // first get the cpu speed, needed to calculate a timeout
+ // ToDo: catch frequency changes
+ system_info systemInfo;
+ if (get_system_info(&systemInfo) != B_OK)
+ return B_ERROR;
+ gHz = systemInfo.cpu_clock_speed;
+
acpi_ec_softc *sc;
sc = (acpi_ec_softc*)malloc(sizeof(acpi_ec_softc));
memset(sc, 0, sizeof(acpi_ec_softc));
@@ -428,6 +437,8 @@
free(sc);
put_module(B_ACPI_MODULE_NAME);
put_module(B_DPC_MODULE_NAME);
+ gDPC = NULL;
+ gDPCHandle = NULL;
}
@@ -560,7 +571,7 @@
EcUnlock(sc);
/* Ignore the value for "no outstanding event". (13.3.5) */
- TRACE("ec query ok,%s running _Q%02X\n", Data ? "" : " not", data);
+ TRACE("ec query ok,%s running _Q%02X\n", data ? "" : " not", data);
if (data == 0)
return;
@@ -753,7 +764,15 @@
spin(EC_POLL_DELAY);
}
} else {
- // ToDo: scale timeout for slow cpu see BSD code...
+ bigtime_t slp_ival = gHz / 1000;
+ if (slp_ival != 0) {
+ count = ec_timeout;
+ } else {
+ /* hz has less than 1 ms resolution so scale timeout. */
+ slp_ival = 1;
+ count = ec_timeout / (1000 / gHz);
+ }
+
count = ec_timeout;
/*
@@ -775,7 +794,7 @@
if (status == B_OK)
break;
}
- sc->ec_condition_var.Wait();
+ sc->ec_condition_var.Wait(0, slp_ival);
}
/*
@@ -787,7 +806,7 @@
if (status != B_OK) {
status = EcCheckStatus(sc, "sleep_end", event);
TRACE("wait timed out (%sresponse), forcing polled mode\n",
- Status == B_OK ? "" : "no ");
+ status == B_OK ? "" : "no ");
ec_polled_mode = TRUE;
}
}
@@ -850,7 +869,7 @@
uint8 data;
u_int gen_count;
- TRACE("ec read from %#x\n", Address);
+ TRACE("ec read from %#x\n", address);
/* If we can't start burst mode, continue anyway. */
status = EcCommand(sc, EC_COMMAND_BURST_ENABLE);
Modified: haiku/trunk/src/add-ons/kernel/drivers/power/acpi_embedded_controller/acpi_embedded_controller.h
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/power/acpi_embedded_controller/acpi_embedded_controller.h 2009-06-23 21:03:57 UTC (rev 31214)
+++ haiku/trunk/src/add-ons/kernel/drivers/power/acpi_embedded_controller/acpi_embedded_controller.h 2009-06-23 21:08:40 UTC (rev 31215)
@@ -48,7 +48,7 @@
dpc_module_info *gDPC = NULL;
-void *gDPCHandle;
+void *gDPCHandle = NULL;
#define ACPI_GPE_EDGE_TRIGGERED (uint8) 0x00
More information about the Haiku-commits
mailing list