Index: uspace/drv/platform/icp/icp.c
===================================================================
--- uspace/drv/platform/icp/icp.c	(revision 312e5ff64a7e4151a05801b65b38da2bbe914da0)
+++ uspace/drv/platform/icp/icp.c	(revision 4b334fd67169af5de794ce1053c6124e2ea71cd4)
@@ -51,5 +51,7 @@
 enum {
 	icp_kbd_base = 0x18000000,
-	icp_kbd_irq = 3
+	icp_kbd_irq = 3,
+	icp_mouse_base = 0x19000000,
+	icp_mouse_irq = 4
 };
 
@@ -69,5 +71,5 @@
 };
 
-static hw_resource_t icp_pl050_res[] = {
+static hw_resource_t icp_kbd_res[] = {
 	{
 		.type = MEM_RANGE,
@@ -87,4 +89,22 @@
 };
 
+static hw_resource_t icp_mouse_res[] = {
+	{
+		.type = MEM_RANGE,
+		.res.mem_range = {
+			.address = icp_mouse_base,
+			.size = 9,
+			.relative = false,
+			.endianness = LITTLE_ENDIAN
+		}
+	},
+	{
+		.type = INTERRUPT,
+		.res.interrupt = {
+			.irq = icp_mouse_irq
+		}
+	}
+};
+
 static pio_window_t icp_pio_window = {
 	.mem = {
@@ -94,8 +114,15 @@
 };
 
-static icp_fun_t icp_pl050_fun_proto = {
+static icp_fun_t icp_kbd_fun_proto = {
 	.hw_resources = {
-		sizeof(icp_pl050_res) / sizeof(icp_pl050_res[0]),
-		icp_pl050_res
+		sizeof(icp_kbd_res) / sizeof(icp_kbd_res[0]),
+		icp_kbd_res
+	},
+};
+
+static icp_fun_t icp_mouse_fun_proto = {
+	.hw_resources = {
+		sizeof(icp_mouse_res) / sizeof(icp_mouse_res[0]),
+		icp_mouse_res
 	},
 };
@@ -188,5 +215,15 @@
 static int icp_add_functions(ddf_dev_t *dev)
 {
-	return icp_add_fun(dev, "pl050", "arm/pl050", &icp_pl050_fun_proto);
+	int rc;
+
+	rc = icp_add_fun(dev, "kbd", "arm/pl050", &icp_kbd_fun_proto);
+	if (rc != EOK)
+		return rc;
+
+	rc = icp_add_fun(dev, "mouse", "arm/pl050", &icp_mouse_fun_proto);
+	if (rc != EOK)
+		return rc;
+
+	return EOK;
 }
 
