1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Registration of Cobalt UART platform device. 4 * 5 * Copyright (C) 2007 Yoichi Yuasa <yuasa@linux-mips.org> 6 */ 7 #include <linux/errno.h> 8 #include <linux/init.h> 9 #include <linux/ioport.h> 10 #include <linux/platform_device.h> 11 #include <linux/serial_8250.h> 12 13 #include <cobalt.h> 14 #include <irq.h> 15 16 static struct resource cobalt_uart_resource[] __initdata = { 17 { 18 .start = 0x1c800000, 19 .end = 0x1c800007, 20 .flags = IORESOURCE_MEM, 21 }, 22 { 23 .start = SERIAL_IRQ, 24 .end = SERIAL_IRQ, 25 .flags = IORESOURCE_IRQ, 26 }, 27 }; 28 29 static struct plat_serial8250_port cobalt_serial8250_port[] = { 30 { 31 .irq = SERIAL_IRQ, 32 .uartclk = 18432000, 33 .iotype = UPIO_MEM, 34 .flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 35 .mapbase = 0x1c800000, 36 }, 37 {}, 38 }; 39 40 static __init int cobalt_uart_add(void) 41 { 42 struct platform_device *pdev; 43 int retval; 44 45 /* 46 * Cobalt Qube1 has no UART. 47 */ 48 if (cobalt_board_id == COBALT_BRD_ID_QUBE1) 49 return 0; 50 51 pdev = platform_device_alloc("serial8250", -1); 52 if (!pdev) 53 return -ENOMEM; 54 55 pdev->id = PLAT8250_DEV_PLATFORM; 56 pdev->dev.platform_data = cobalt_serial8250_port; 57 58 retval = platform_device_add_resources(pdev, cobalt_uart_resource, ARRAY_SIZE(cobalt_uart_resource)); 59 if (retval) 60 goto err_free_device; 61 62 retval = platform_device_add(pdev); 63 if (retval) 64 goto err_free_device; 65 66 return 0; 67 68 err_free_device: 69 platform_device_put(pdev); 70 71 return retval; 72 } 73 device_initcall(cobalt_uart_add); 74