1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * linux/arch/arm/mach-footbridge/isa.c 4 * 5 * Copyright (C) 2004 Russell King. 6 */ 7 #include <linux/init.h> 8 #include <linux/serial_8250.h> 9 10 #include <asm/irq.h> 11 #include <asm/hardware/dec21285.h> 12 13 #include "common.h" 14 15 static struct resource rtc_resources[] = { 16 [0] = { 17 .start = 0x70, 18 .end = 0x73, 19 .flags = IORESOURCE_IO, 20 }, 21 [1] = { 22 .start = IRQ_ISA_RTC_ALARM, 23 .end = IRQ_ISA_RTC_ALARM, 24 .flags = IORESOURCE_IRQ, 25 } 26 }; 27 28 static struct platform_device rtc_device = { 29 .name = "rtc_cmos", 30 .id = -1, 31 .resource = rtc_resources, 32 .num_resources = ARRAY_SIZE(rtc_resources), 33 }; 34 35 static struct resource serial_resources[] = { 36 [0] = { 37 .start = 0x3f8, 38 .end = 0x3ff, 39 .flags = IORESOURCE_IO, 40 }, 41 [1] = { 42 .start = 0x2f8, 43 .end = 0x2ff, 44 .flags = IORESOURCE_IO, 45 }, 46 }; 47 48 static struct plat_serial8250_port serial_platform_data[] = { 49 { 50 .iobase = 0x3f8, 51 .irq = IRQ_ISA_UART, 52 .uartclk = 1843200, 53 .regshift = 0, 54 .iotype = UPIO_PORT, 55 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 56 }, 57 { 58 .iobase = 0x2f8, 59 .irq = IRQ_ISA_UART2, 60 .uartclk = 1843200, 61 .regshift = 0, 62 .iotype = UPIO_PORT, 63 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, 64 }, 65 { }, 66 }; 67 68 static struct platform_device serial_device = { 69 .name = "serial8250", 70 .id = PLAT8250_DEV_PLATFORM, 71 .dev = { 72 .platform_data = serial_platform_data, 73 }, 74 .resource = serial_resources, 75 .num_resources = ARRAY_SIZE(serial_resources), 76 }; 77 78 static int __init footbridge_isa_init(void) 79 { 80 int err = 0; 81 82 if (!footbridge_cfn_mode()) 83 return 0; 84 85 /* Personal server doesn't have RTC */ 86 if (!machine_is_personal_server()) { 87 isa_rtc_init(); 88 err = platform_device_register(&rtc_device); 89 if (err) 90 printk(KERN_ERR "Unable to register RTC device: %d\n", err); 91 } 92 err = platform_device_register(&serial_device); 93 if (err) 94 printk(KERN_ERR "Unable to register serial device: %d\n", err); 95 return 0; 96 } 97 98 arch_initcall(footbridge_isa_init); 99