Index: uspace/drv/platform/icp/icp.c
===================================================================
--- uspace/drv/platform/icp/icp.c	(revision cccd60c3524a3bb23ce0db2ce5c33c181326931e)
+++ uspace/drv/platform/icp/icp.c	(revision d51838f190d8e49cb00493b84858f7ad93996014)
@@ -39,4 +39,5 @@
 #include <stdio.h>
 #include <errno.h>
+#include <irc.h>
 #include <stdbool.h>
 #include <stdlib.h>
@@ -142,8 +143,27 @@
 }
 
-static int icp_enable_interrupt(ddf_fun_t *fun, int irq)
-{
-	/* TODO */
+static bool icp_fun_owns_interrupt(icp_fun_t *fun, int irq)
+{
+	const hw_resource_list_t *res = &fun->hw_resources;
+
+	/* Check that specified irq really belongs to the function */
+	for (size_t i = 0; i < res->count; ++i) {
+		if (res->resources[i].type == INTERRUPT &&
+		    res->resources[i].res.interrupt.irq == irq) {
+			return true;
+		}
+	}
+
 	return false;
+}
+
+static int icp_fun_enable_interrupt(ddf_fun_t *fnode, int irq)
+{
+	icp_fun_t *fun = icp_fun(fnode);
+
+	if (!icp_fun_owns_interrupt(fun, irq))
+		return EINVAL;
+
+	return irc_enable_interrupt(irq);
 }
 
@@ -155,5 +175,5 @@
 static hw_res_ops_t icp_hw_res_ops = {
 	.get_resource_list = &icp_get_resources,
-	.enable_interrupt = &icp_enable_interrupt,
+	.enable_interrupt = &icp_fun_enable_interrupt,
 };
 
