Index: kernel/arch/sparc64/src/drivers/kbd.c
===================================================================
--- kernel/arch/sparc64/src/drivers/kbd.c	(revision 7dcf22a389ae4373e29fc2686bf9bae2ac3a8d39)
+++ kernel/arch/sparc64/src/drivers/kbd.c	(revision 5f9b4d9af46404a0fa7382a0a6d74b1fbf1e2334)
@@ -50,9 +50,5 @@
 #include <print.h>
 
-volatile uint8_t *kbd_virt_address = NULL;
-
 kbd_type_t kbd_type = KBD_UNKNOWN;
-
-static irq_t kbd_irq;
 
 /** Initialize keyboard.
@@ -103,7 +99,6 @@
 	uintptr_t pa;
 	size_t size;
-	int inr;
-	
-	irq_initialize(&kbd_irq);
+	inr_t inr;
+	devno_t devno = device_assign_devno();
 	
 	switch (kbd_type) {
@@ -117,11 +112,4 @@
 			printf("Failed to determine keyboard interrupt.\n");
 			return;
-		} else {
-			kbd_irq.inr = inr;
-			kbd_irq.devno = device_assign_devno();
-			kbd_irq.trigger = IRQ_TRIGGER_LEVEL;
-			kbd_irq.claim = z8530_claim;
-			kbd_irq.handler = z8530_irq_handler;
-			irq_register(&kbd_irq);
 		}
 		break;
@@ -136,12 +124,5 @@
 			printf("Failed to determine keyboard interrupt.\n");
 			return;
-		} else {
-			kbd_irq.inr = inr;
-			kbd_irq.devno = device_assign_devno();
-			kbd_irq.trigger = IRQ_TRIGGER_LEVEL;
-			kbd_irq.claim = ns16550_claim;
-			kbd_irq.handler = ns16550_irq_handler;
-			irq_register(&kbd_irq);
-		}
+		};
 		break;
 
@@ -158,15 +139,15 @@
 	aligned_addr = ALIGN_DOWN(pa, PAGE_SIZE);
 	offset = pa - aligned_addr;
-	kbd_virt_address = (uint8_t *) hw_map(aligned_addr, offset + size) + offset;
+	uintptr_t vaddr = hw_map(aligned_addr, offset + size) + offset;
 
 	switch (kbd_type) {
 #ifdef CONFIG_Z8530
 	case KBD_Z8530:
-		z8530_init();
+		z8530_init(devno, inr, vaddr);
 		break;
 #endif
 #ifdef CONFIG_NS16550
 	case KBD_NS16550:
-		ns16550_init();
+		ns16550_init(devno, inr, vaddr);
 		break;
 #endif
