From 4a6c9d159c38ed52397fa7b98b57d48e8c53c427 Mon Sep 17 00:00:00 2001 From: Sven Schnelle Date: Tue, 1 Feb 2011 10:44:26 +0000 Subject: Add support for the Lenovo PMH7 embedded controller Lenovo PMH7 (Power Management Hardware Hub) is found in most recent (starting with X60/T60 AFAIK) Lenovo/IBM Laptops. Signed-off-by: Sven Schnelle Acked-by: Patrick Georgi git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6325 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/ec/lenovo/pmh7/pmh7.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/ec/lenovo/pmh7/pmh7.c (limited to 'src/ec/lenovo/pmh7/pmh7.c') diff --git a/src/ec/lenovo/pmh7/pmh7.c b/src/ec/lenovo/pmh7/pmh7.c new file mode 100644 index 0000000000..c9cf1925cf --- /dev/null +++ b/src/ec/lenovo/pmh7/pmh7.c @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include + +#include "pmh7.h" + +void pmh7_register_set_bit(int reg, int bit) +{ + char val; + + outb(reg, EC_LENOVO_PMH7_ADDR); + val = inb(EC_LENOVO_PMH7_DATA); + outb(reg, EC_LENOVO_PMH7_ADDR); + outb(val | (1 << bit), EC_LENOVO_PMH7_DATA); +} + +void pmh7_register_clear_bit(int reg, int bit) +{ + char val; + + outb(reg, EC_LENOVO_PMH7_ADDR); + val = inb(EC_LENOVO_PMH7_DATA); + outb(reg, EC_LENOVO_PMH7_ADDR); + outb(val &= ~(1 << bit), EC_LENOVO_PMH7_DATA); +} + +char pmh7_register_read(int reg) +{ + outb(reg, EC_LENOVO_PMH7_ADDR); + return inb(EC_LENOVO_PMH7_DATA); +} + +void pmh7_register_write(int reg, int val) +{ + outb(reg, EC_LENOVO_PMH7_ADDR); + outb(val, EC_LENOVO_PMH7_DATA); +} + +static void enable_dev(device_t dev) +{ + struct resource *resource; + resource = new_resource(dev, EC_LENOVO_PMH7_INDEX); + resource->flags = IORESOURCE_IO | IORESOURCE_FIXED; + resource->base = EC_LENOVO_PMH7_BASE; + resource->size = 16; + resource->align = 5; + resource->gran = 5; + +} + +struct chip_operations ec_lenovo_pmh7_ops = { + CHIP_NAME("Lenovo Power Management Hardware Hub 7") + .enable_dev = enable_dev, +}; -- cgit v1.2.3