Index: kernel/genarch/src/drivers/dsrln/dsrlnin.c
===================================================================
--- kernel/genarch/src/drivers/dsrln/dsrlnin.c	(revision c8bf88d737f715dd3bf256ec6f8bf31e0d3be7e1)
+++ kernel/genarch/src/drivers/dsrln/dsrlnin.c	(revision f2d2c7ba676ff1a37b6198b134c840dd09e1d11b)
@@ -41,8 +41,4 @@
 #include <ddi/device.h>
 
-static indev_operations_t kbrdin_ops = {
-	.poll = NULL
-};
-
 static irq_ownership_t dsrlnin_claim(irq_t *irq)
 {
@@ -55,27 +51,33 @@
 	dsrlnin_t *dev = instance->dsrlnin;
 	
-	indev_push_character(&instance->kbrdin, pio_read_8(&dev->data));
+	indev_push_character(instance->srlnin, pio_read_8(&dev->data));
 }
 
-indev_t *dsrlnin_init(dsrlnin_t *dev, inr_t inr)
+dsrlnin_instance_t *dsrlnin_init(dsrlnin_t *dev, inr_t inr)
 {
 	dsrlnin_instance_t *instance
 	    = malloc(sizeof(dsrlnin_instance_t), FRAME_ATOMIC);
-	if (!instance)
-		return NULL;
+	if (instance) {
+		instance->dsrlnin = dev;
+		instance->srlnin = NULL;
+		
+		irq_initialize(&instance->irq);
+		instance->irq.devno = device_assign_devno();
+		instance->irq.inr = inr;
+		instance->irq.claim = dsrlnin_claim;
+		instance->irq.handler = dsrlnin_irq_handler;
+		instance->irq.instance = instance;
+	}
 	
-	indev_initialize("dsrlnin", &instance->kbrdin, &kbrdin_ops);
+	return instance;
+}
+
+void dsrlnin_wire(dsrlnin_instance_t *instance, indev_t *srlnin)
+{
+	ASSERT(instance);
+	ASSERT(srlnin);
 	
-	instance->dsrlnin = dev;
-	
-	irq_initialize(&instance->irq);
-	instance->irq.devno = device_assign_devno();
-	instance->irq.inr = inr;
-	instance->irq.claim = dsrlnin_claim;
-	instance->irq.handler = dsrlnin_irq_handler;
-	instance->irq.instance = instance;
+	instance->srlnin = srlnin;
 	irq_register(&instance->irq);
-	
-	return &instance->kbrdin;
 }
 
