Index: uspace/srv/hid/input/input.c
===================================================================
--- uspace/srv/hid/input/input.c	(revision 0013065657b16bddf0998618663059c62a0bd427)
+++ uspace/srv/hid/input/input.c	(revision a79b42ab59c22d84c00310eb2b14a376e7eeb415)
@@ -95,4 +95,7 @@
 static bool active = true;
 
+/** Serial console specified by the user */
+static char *serial_console;
+
 /** List of keyboard devices */
 static list_t kbd_devs;
@@ -580,4 +583,6 @@
 static int serial_add_srldev(service_id_t service_id, serial_dev_t **sdevp)
 {
+	bool match = false;
+
 	serial_dev_t *sdev = serial_dev_new();
 	if (sdev == NULL)
@@ -585,25 +590,32 @@
 	
 	sdev->kdev->svc_id = service_id;
-	sdev->kdev->port_ops = NULL;
-	sdev->kdev->ctl_ops = &stty_ctl;
-	
-	sdev->sess = loc_service_connect(service_id, INTERFACE_DDF,
-	    IPC_FLAG_BLOCKING);
-
+	
 	int rc = loc_service_get_name(service_id, &sdev->kdev->svc_name);
-	if (rc != EOK) {
-		sdev->kdev->svc_name = NULL;
+	if (rc != EOK)
 		goto fail;
-	}
-
-	/* Initialize controller driver. */
-	if ((*sdev->kdev->ctl_ops->init)(sdev->kdev) != 0) {
-		goto fail;
-	}
-	
+
 	list_append(&sdev->link, &serial_devs);
 
-	fid_t fid = fibril_create(serial_consumer, sdev);
-	fibril_add_ready(fid);
+	/*
+	 * Is this the device the user wants to use as a serial console?
+	 */
+	match = (serial_console != NULL) &&
+	    !str_cmp(serial_console, sdev->kdev->svc_name);
+
+	if (match) {
+		sdev->kdev->ctl_ops = &stty_ctl;
+
+		/* Initialize controller driver. */
+		if ((*sdev->kdev->ctl_ops->init)(sdev->kdev) != 0) {
+			list_remove(&sdev->link);
+			goto fail;
+		}
+
+		sdev->sess = loc_service_connect(service_id, INTERFACE_DDF,
+		    IPC_FLAG_BLOCKING);
+
+		fid_t fid = fibril_create(serial_consumer, sdev);
+		fibril_add_ready(fid);
+	}
 	
 	*sdevp = sdev;
@@ -866,4 +878,6 @@
 int main(int argc, char **argv)
 {
+	int rc;
+
 	if (argc < 2) {
 		usage(argv[0]);
@@ -888,4 +902,21 @@
 			    INTERFACE_IRC, 0);
 	}
+
+	char *boot_args;
+	size_t size;
+
+	boot_args = sysinfo_get_data("boot_args", &size);
+	if (boot_args && size) {
+		char *args = boot_args;
+		char *arg;
+#define ARG_CONSOLE	"console="
+		while ((arg = str_tok(args, " ", &args)) != NULL) {
+			if (!str_lcmp(arg, ARG_CONSOLE,
+			    str_length(ARG_CONSOLE))) {
+				serial_console = arg + str_length(ARG_CONSOLE);
+				break;
+			}
+		}
+	}
 	
 	/* Add legacy keyboard devices. */
@@ -900,5 +931,5 @@
 	async_set_fallback_port_handler(client_connection, NULL);
 	
-	int rc = loc_server_register(NAME);
+	rc = loc_server_register(NAME);
 	if (rc != EOK) {
 		printf("%s: Unable to register server\n", NAME);
