[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