aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/olpc/rev_a/mainboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/olpc/rev_a/mainboard.c')
-rw-r--r--src/mainboard/olpc/rev_a/mainboard.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/mainboard/olpc/rev_a/mainboard.c b/src/mainboard/olpc/rev_a/mainboard.c
index 0d5170d871..b4e7eba93f 100644
--- a/src/mainboard/olpc/rev_a/mainboard.c
+++ b/src/mainboard/olpc/rev_a/mainboard.c
@@ -6,7 +6,38 @@
#include <arch/io.h>
#include "chip.h"
+
+
+static void init(struct device *dev) {
+ unsigned bus = 0;
+ unsigned devfn = PCI_DEVFN(0xf, 4);
+ device_t usb = NULL;
+ unsigned char usbirq = 0xa;
+
+ printk_debug("OLPC REVA ENTER %s\n", __FUNCTION__);
+
+ /* I can't think of any reason NOT to just set this. If it turns out we want this to be
+ * conditional we can make it a config variable later.
+ */
+
+ printk_debug("%s (%x,%x)SET USB PCI interrupt line to %d\n",
+ __FUNCTION__, bus, devfn, usbirq);
+ usb = dev_find_slot(bus, devfn);
+ if (! usb){
+ printk_err("Could not find USB\n");
+ } else {
+ pci_write_config8(usb, PCI_INTERRUPT_LINE, usbirq);
+ }
+ printk_debug("OLPC REVA EXIT %s\n", __FUNCTION__);
+}
+
+static void enable_dev(struct device *dev)
+{
+ dev->ops->init = init;
+}
+
struct chip_operations mainboard_olpc_rev_a_ops = {
CHIP_NAME("olpc rev_a mainboard ")
-};
+ .enable_dev = enable_dev,
+};