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