From patchwork Tue Feb 1 08:08:38 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v2] Add Lenovo PMH7 Date: Tue, 01 Feb 2011 08:08:38 -0000 From: Sven Schnelle X-Patchwork-Id: 2589 Message-Id: <87k4hknkhr.fsf@begreifnix.stackframe.org> To: coreboot@coreboot.org Hi List, this patch adds support for the Lenovo PMH7 (Power Management Hardware Hub) found in most recent (starting with X60/T60 AFAIK) Lenovo/IBM Laptops. Please ignore the previous version, as it missed the src/ec/Kconfig file. Signed-off-by: Sven Schnelle Acked-by: Patrick Georgi Index: src/ec/Kconfig =================================================================== --- src/ec/Kconfig (revision 6304) +++ src/ec/Kconfig (working copy) @@ -1 +1,2 @@ source src/ec/acpi/Kconfig +source src/ec/lenovo/Kconfig Index: src/ec/lenovo/Kconfig =================================================================== --- src/ec/lenovo/Kconfig (revision 0) +++ src/ec/lenovo/Kconfig (revision 0) @@ -0,0 +1 @@ +source src/ec/lenovo/pmh7/Kconfig Index: src/ec/lenovo/Makefile.inc =================================================================== --- src/ec/lenovo/Makefile.inc (revision 0) +++ src/ec/lenovo/Makefile.inc (revision 0) @@ -0,0 +1 @@ +subdirs-$(CONFIG_EC_LENOVO_PMH7) += pmh7 Index: src/ec/lenovo/pmh7/Kconfig =================================================================== --- src/ec/lenovo/pmh7/Kconfig (revision 0) +++ src/ec/lenovo/pmh7/Kconfig (revision 0) @@ -0,0 +1,2 @@ +config EC_LENOVO_PMH7 + bool Index: src/ec/lenovo/pmh7/pmh7.h =================================================================== --- src/ec/lenovo/pmh7/pmh7.h (revision 0) +++ src/ec/lenovo/pmh7/pmh7.h (revision 0) @@ -0,0 +1,15 @@ +#ifndef EC_LENOVO_PMH7_H +#define EC_LENOVO_PMH7_H + +#define EC_LENOVO_PMH7_INDEX 0x77 + +#define EC_LENOVO_PMH7_BASE 0x15e0 +#define EC_LENOVO_PMH7_ADDR (EC_LENOVO_PMH7_BASE + 0x0c) +#define EC_LENOVO_PMH7_DATA (EC_LENOVO_PMH7_BASE + 0x0e) + +void pmh7_register_set_bit(int reg, int bit); +void pmh7_register_clear_bit(int reg, int bit); +char pmh7_register_read(int reg); +void pmh7_register_write(int reg, int val); + +#endif Index: src/ec/lenovo/pmh7/Makefile.inc =================================================================== --- src/ec/lenovo/pmh7/Makefile.inc (revision 0) +++ src/ec/lenovo/pmh7/Makefile.inc (revision 0) @@ -0,0 +1 @@ +driver-y += pmh7.c Index: src/ec/lenovo/pmh7/pmh7.c =================================================================== --- src/ec/lenovo/pmh7/pmh7.c (revision 0) +++ src/ec/lenovo/pmh7/pmh7.c (revision 0) @@ -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, +};