Arthur Heymans has uploaded this change for review.

View Change

[UNTESTED]drivers/lenovo/wacom.c: Move DOCK SIO config to SIO code

This is not wacom specific code.

Change-Id: I2fbcb25e78f490a65ecf4e0c8e6c84cd759a6f55
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
---
M src/drivers/lenovo/lenovo.h
M src/drivers/lenovo/wacom.c
M src/mainboard/lenovo/x200/mainboard.c
M src/mainboard/lenovo/x201/mainboard.c
M src/mainboard/lenovo/x60/mainboard.c
M src/superio/nsc/pc87392/superio.c
6 files changed, 66 insertions(+), 32 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/88/33788/1
diff --git a/src/drivers/lenovo/lenovo.h b/src/drivers/lenovo/lenovo.h
index 4c44119..c7e1b8f 100644
--- a/src/drivers/lenovo/lenovo.h
+++ b/src/drivers/lenovo/lenovo.h
@@ -1,3 +1,2 @@
int drivers_lenovo_is_wacom_present(void);
-void drivers_lenovo_serial_ports_ssdt_generate(const char *scope,
- int have_dock_serial);
+void drivers_lenovo_serial_ports_ssdt_generate(const char *scope);
diff --git a/src/drivers/lenovo/wacom.c b/src/drivers/lenovo/wacom.c
index 9dcbf15..dfbd840 100644
--- a/src/drivers/lenovo/wacom.c
+++ b/src/drivers/lenovo/wacom.c
@@ -37,8 +37,7 @@
"2263", "2266",
};

-int
-drivers_lenovo_is_wacom_present(void)
+int drivers_lenovo_is_wacom_present(void)
{
const char *pn;
int i;
@@ -85,9 +84,7 @@
return (result = 0);
}

-void
-drivers_lenovo_serial_ports_ssdt_generate(const char *scope,
- int have_dock_serial)
+void drivers_lenovo_serial_ports_ssdt_generate(const char *scope)
{
acpigen_write_scope(scope);

@@ -110,27 +107,5 @@
acpigen_pop_len();
}

- if (have_dock_serial) {
- acpigen_write_device("COMA");
-
- acpigen_write_name("_HID");
- acpigen_emit_eisaid("PNP0501");
- acpigen_write_name("_UID");
- /* Byte */
- acpigen_write_byte(0x2);
-
- acpigen_write_name("_CRS");
-
- acpigen_write_resourcetemplate_header();
- acpigen_write_io16(0x3f8, 0x3f8, 1, 8, 1);
- acpigen_write_irq(1 << 4);
-
- acpigen_write_resourcetemplate_footer();
-
- acpigen_write_STA(0xf);
-
- acpigen_pop_len();
- }
-
acpigen_pop_len();
}
diff --git a/src/mainboard/lenovo/x200/mainboard.c b/src/mainboard/lenovo/x200/mainboard.c
index 1510ab7..bcb94b1 100644
--- a/src/mainboard/lenovo/x200/mainboard.c
+++ b/src/mainboard/lenovo/x200/mainboard.c
@@ -19,7 +19,7 @@

static void fill_ssdt(struct device *device)
{
- drivers_lenovo_serial_ports_ssdt_generate("\\_SB.PCI0.LPCB", 0);
+ drivers_lenovo_serial_ports_ssdt_generate("\\_SB.PCI0.LPCB");
}

static void mainboard_enable(struct device *dev)
diff --git a/src/mainboard/lenovo/x201/mainboard.c b/src/mainboard/lenovo/x201/mainboard.c
index 70b393cc..8cd87aa 100644
--- a/src/mainboard/lenovo/x201/mainboard.c
+++ b/src/mainboard/lenovo/x201/mainboard.c
@@ -58,7 +58,7 @@

static void fill_ssdt(struct device *device)
{
- drivers_lenovo_serial_ports_ssdt_generate("\\_SB.PCI0.LPCB", 0);
+ drivers_lenovo_serial_ports_ssdt_generate("\\_SB.PCI0.LPCB");
}

static void mainboard_enable(struct device *dev)
diff --git a/src/mainboard/lenovo/x60/mainboard.c b/src/mainboard/lenovo/x60/mainboard.c
index 964e9c0..9febea5 100644
--- a/src/mainboard/lenovo/x60/mainboard.c
+++ b/src/mainboard/lenovo/x60/mainboard.c
@@ -115,7 +115,7 @@

static void fill_ssdt(struct device *device)
{
- drivers_lenovo_serial_ports_ssdt_generate("\\_SB.PCI0.LPCB", 1);
+ drivers_lenovo_serial_ports_ssdt_generate("\\_SB.PCI0.LPCB");
}

static void mainboard_enable(struct device *dev)
diff --git a/src/superio/nsc/pc87392/superio.c b/src/superio/nsc/pc87392/superio.c
index a15d0a2..bf4ee54 100644
--- a/src/superio/nsc/pc87392/superio.c
+++ b/src/superio/nsc/pc87392/superio.c
@@ -14,6 +14,8 @@
* GNU General Public License for more details.
*/

+#include <arch/acpigen.h>
+#include <console/console.h>
#include <device/device.h>
#include <device/pnp.h>
#include <stdlib.h>
@@ -25,12 +27,70 @@
return;
}

+#if CONFIG(HAVE_ACPI_TABLES)
+static void pc87392_ssdt(struct device *dev)
+{
+ struct resource *io_res;
+ struct resource *irq_res;
+
+ const char *scope = acpi_device_path(dev);
+ if (!scope) {
+ printk(BIOS_ERR, "%s: Missing ACPI scope\n", dev_path(dev));
+ return;
+ }
+
+ switch (dev->path.pnp.device) {
+ case PC87392_SP2:
+ case PC87392_SP1:
+ io_res = find_resource(dev, PNP_IDX_IO0);
+ if (!io_res || !io_res->base) {
+ printk(BIOS_ERR, "PC87392: LDN%u IOBASE not set.\n",
+ dev->path.pnp.device);
+ break;
+ }
+ irq_res = find_resource(dev, PNP_IDX_IRQ0);
+ if (!irq_res || !irq_res->base) {
+ printk(BIOS_ERR, "PC87392: LDN%u IRQ not set.\n",
+ dev->path.pnp.device);
+ break;
+ }
+ acpigen_write_scope(scope);
+ const char *dev_name = dev->path.pnp.device == PC87392_SP1
+ ? "COMA" : "COMB";
+ acpigen_write_device(dev_name);
+
+ acpigen_write_name("_HID");
+ acpigen_emit_eisaid("PNP0501");
+ acpigen_write_name("_UID");
+ /* Byte */
+ acpigen_write_byte(0x2);
+
+ acpigen_write_name("_CRS");
+
+ acpigen_write_resourcetemplate_header();
+ acpigen_write_io16(io_res->base, io_res->base, io_res->align,
+ io_res->size, 1);
+ acpigen_write_irq(irq_res->base);
+ acpigen_write_resourcetemplate_footer();
+
+ /* TODO, This likely depends on dock status */
+ acpigen_write_STA(0xf);
+
+ acpigen_pop_len(); /* pop scope */
+ }
+}
+#endif
+
+
static struct device_operations ops = {
.read_resources = pnp_read_resources,
.set_resources = pnp_set_resources,
.enable_resources = pnp_enable_resources,
.enable = pnp_enable,
.init = init,
+#if CONFIG(HAVE_ACPI_TABLES)
+ .acpi_fill_ssdt_generator = pc87392_ssdt,
+#endif
};

static struct pnp_info pnp_dev_info[] = {

To view, visit change 33788. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I2fbcb25e78f490a65ecf4e0c8e6c84cd759a6f55
Gerrit-Change-Number: 33788
Gerrit-PatchSet: 1
Gerrit-Owner: Arthur Heymans <arthur@aheymans.xyz>
Gerrit-MessageType: newchange