ec/acpi: make ACPI register pair configurable
authorSven Schnelle <svens@stackframe.org>
Mon, 14 Mar 2011 08:18:27 +0000 (08:18 +0000)
committerSven Schnelle <svens@stackframe.org>
Mon, 14 Mar 2011 08:18:27 +0000 (08:18 +0000)
Signed-off-by: Sven Schnelle <svens@stackframe.org>
Acked-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6442 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

src/ec/acpi/ec.c
src/ec/acpi/ec.h

index e353260c30e15c4a449d5686f3c390d052de7b96..1d4ffb82585ca58a9ab60142b81becbd9c505a56 100644 (file)
 #include <delay.h>
 #include "ec.h"
 
+static int ec_cmd_reg = EC_SC;
+static int ec_data_reg = EC_DATA;
+
 int send_ec_command(u8 command)
 {
        int timeout;
 
        timeout = 0x7ff;
-       while ((inb(EC_SC) & EC_IBF) && --timeout) {
+       while ((inb(ec_cmd_reg) & EC_IBF) && --timeout) {
                udelay(10);
                if ((timeout & 0xff) == 0)
                        printk(BIOS_SPEW, ".");
@@ -41,7 +44,7 @@ int send_ec_command(u8 command)
                // return -1;
        }
 
-       outb(command, EC_SC);
+       outb(command, ec_cmd_reg);
        return 0;
 }
 
@@ -50,7 +53,7 @@ int send_ec_data(u8 data)
        int timeout;
 
        timeout = 0x7ff;
-       while ((inb(EC_SC) & EC_IBF) && --timeout) { // wait for IBF = 0
+       while ((inb(ec_cmd_reg) & EC_IBF) && --timeout) { // wait for IBF = 0
                udelay(10);
                if ((timeout & 0xff) == 0)
                        printk(BIOS_SPEW, ".");
@@ -61,14 +64,14 @@ int send_ec_data(u8 data)
                // return -1;
        }
 
-       outb(data, EC_DATA);
+       outb(data, ec_data_reg);
 
        return 0;
 }
 
 int send_ec_data_nowait(u8 data)
 {
-       outb(data, EC_DATA);
+       outb(data, ec_data_reg);
 
        return 0;
 }
@@ -80,7 +83,7 @@ u8 recv_ec_data(void)
 
        timeout = 0x7fff;
        while (--timeout) { // Wait for OBF = 1
-               if (inb(EC_SC) & EC_OBF) {
+               if (inb(ec_cmd_reg) & EC_OBF) {
                        break;
                }
                udelay(10);
@@ -92,7 +95,7 @@ u8 recv_ec_data(void)
                // return -1;
        }
 
-       data = inb(EC_DATA);
+       data = inb(ec_data_reg);
        printk(BIOS_DEBUG, "recv_ec_data: 0x%02x\n", data);
 
        return data;
@@ -123,6 +126,12 @@ void ec_clr_bit(u8 addr, u8 bit)
        ec_write(addr, ec_read(addr) &  ~(1 << bit));
 }
 
+void ec_set_ports(u16 cmd_reg, u16 data_reg)
+{
+       ec_cmd_reg = cmd_reg;
+       ec_data_reg = data_reg;
+}
+
 struct chip_operations ec_acpi_ops = {
        CHIP_NAME("ACPI Embedded Controller")
 };
index cabbfeaacd82ed30c5d77574ca98cf8ec7359b49..b5a1197e766eb7928200f73f283e04ca2bdcbccb 100644 (file)
@@ -46,6 +46,7 @@ u8 ec_read(u8 addr);
 int ec_write(u8 addr, u8 data);
 void ec_set_bit(u8 addr, u8 bit);
 void ec_clr_bit(u8 addr, u8 bit);
+void ec_set_ports(u16 cmd_reg, u16 data_reg);
 
 #endif