1 /* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org) 7 */ 8 #include <linux/init.h> 9 #include <linux/platform_device.h> 10 #include <linux/serial_8250.h> 11 #include <linux/rtc/ds1685.h> 12 13 #include <asm/ip32/mace.h> 14 #include <asm/ip32/ip32_ints.h> 15 16 extern void ip32_prepare_poweroff(void); 17 18 #define MACEISA_SERIAL1_OFFS offsetof(struct sgi_mace, isa.serial1) 19 #define MACEISA_SERIAL2_OFFS offsetof(struct sgi_mace, isa.serial2) 20 21 #define MACE_PORT(offset,_irq) \ 22 { \ 23 .mapbase = MACE_BASE + offset, \ 24 .irq = _irq, \ 25 .uartclk = 1843200, \ 26 .iotype = UPIO_MEM, \ 27 .flags = UPF_SKIP_TEST|UPF_IOREMAP, \ 28 .regshift = 8, \ 29 } 30 31 static struct plat_serial8250_port uart8250_data[] = { 32 MACE_PORT(MACEISA_SERIAL1_OFFS, MACEISA_SERIAL1_IRQ), 33 MACE_PORT(MACEISA_SERIAL2_OFFS, MACEISA_SERIAL2_IRQ), 34 { }, 35 }; 36 37 static struct platform_device uart8250_device = { 38 .name = "serial8250", 39 .id = PLAT8250_DEV_PLATFORM, 40 .dev = { 41 .platform_data = uart8250_data, 42 }, 43 }; 44 45 static int __init uart8250_init(void) 46 { 47 return platform_device_register(&uart8250_device); 48 } 49 50 device_initcall(uart8250_init); 51 52 static __init int meth_devinit(void) 53 { 54 struct platform_device *pd; 55 int ret; 56 57 pd = platform_device_alloc("meth", -1); 58 if (!pd) 59 return -ENOMEM; 60 61 ret = platform_device_add(pd); 62 if (ret) 63 platform_device_put(pd); 64 65 return ret; 66 } 67 68 device_initcall(meth_devinit); 69 70 static __init int sgio2audio_devinit(void) 71 { 72 struct platform_device *pd; 73 int ret; 74 75 pd = platform_device_alloc("sgio2audio", -1); 76 if (!pd) 77 return -ENOMEM; 78 79 ret = platform_device_add(pd); 80 if (ret) 81 platform_device_put(pd); 82 83 return ret; 84 } 85 86 device_initcall(sgio2audio_devinit); 87 88 static __init int sgio2btns_devinit(void) 89 { 90 return IS_ERR(platform_device_register_simple("sgibtns", -1, NULL, 0)); 91 } 92 93 device_initcall(sgio2btns_devinit); 94 95 #define MACE_RTC_RES_START (MACE_BASE + offsetof(struct sgi_mace, isa.rtc)) 96 #define MACE_RTC_RES_END (MACE_RTC_RES_START + 32767) 97 98 static struct resource ip32_rtc_resources[] = { 99 { 100 .start = MACEISA_RTC_IRQ, 101 .end = MACEISA_RTC_IRQ, 102 .flags = IORESOURCE_IRQ 103 }, { 104 .start = MACE_RTC_RES_START, 105 .end = MACE_RTC_RES_END, 106 .flags = IORESOURCE_MEM, 107 } 108 }; 109 110 /* RTC registers on IP32 are each padded by 256 bytes (0x100). */ 111 static struct ds1685_rtc_platform_data 112 ip32_rtc_platform_data[] = { 113 { 114 .regstep = 0x100, 115 .bcd_mode = true, 116 .no_irq = false, 117 .uie_unsupported = false, 118 .access_type = ds1685_reg_direct, 119 .plat_prepare_poweroff = ip32_prepare_poweroff, 120 }, 121 }; 122 123 struct platform_device ip32_rtc_device = { 124 .name = "rtc-ds1685", 125 .id = -1, 126 .dev = { 127 .platform_data = ip32_rtc_platform_data, 128 }, 129 .num_resources = ARRAY_SIZE(ip32_rtc_resources), 130 .resource = ip32_rtc_resources, 131 }; 132 133 static __init int sgio2_rtc_devinit(void) 134 { 135 return platform_device_register(&ip32_rtc_device); 136 } 137 138 device_initcall(sgio2_rtc_devinit); 139
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.