+ INIT_S5P_SERIAL_STRUCTURE(3, "s5pser3");
+
+#ifdef CONFIG_OF_CONTROL
+int fdtdec_decode_console(int *index, struct fdt_serial *uart)
+{
+ const void *blob = gd->fdt_blob;
+ int node;
+
+ node = fdt_path_offset(blob, "console");
+ if (node < 0)
+ return node;
+
+ uart->base_addr = fdtdec_get_addr(blob, node, "reg");
+ if (uart->base_addr == FDT_ADDR_T_NONE)
+ return -FDT_ERR_NOTFOUND;
+
+ uart->port_id = fdtdec_get_int(blob, node, "id", -1);
+ uart->enabled = fdtdec_get_is_enabled(blob, node);
+
+ return 0;
+}
+#endif
+
+__weak struct serial_device *default_serial_console(void)
+{
+#ifdef CONFIG_OF_CONTROL
+ int index = 0;
+
+ if ((!config.base_addr) && (fdtdec_decode_console(&index, &config))) {
+ debug("Cannot decode default console node\n");
+ return NULL;
+ }
+
+ switch (config.port_id) {
+ case 0:
+ return &s5p_serial0_device;
+ case 1:
+ return &s5p_serial1_device;
+ case 2:
+ return &s5p_serial2_device;
+ case 3:
+ return &s5p_serial3_device;
+ default:
+ debug("Unknown config.port_id: %d", config.port_id);
+ break;
+ }
+
+ return NULL;
+#else
+ config.enabled = 1;
+#if defined(CONFIG_SERIAL0)
+ return &s5p_serial0_device;
+#elif defined(CONFIG_SERIAL1)
+ return &s5p_serial1_device;
+#elif defined(CONFIG_SERIAL2)
+ return &s5p_serial2_device;
+#elif defined(CONFIG_SERIAL3)
+ return &s5p_serial3_device;
+#else
+#error "CONFIG_SERIAL? missing."
+#endif
+#endif
+}
+
+void s5p_serial_initialize(void)
+{
+ serial_register(&s5p_serial0_device);
+ serial_register(&s5p_serial1_device);
+ serial_register(&s5p_serial2_device);
+ serial_register(&s5p_serial3_device);
+}