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