123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org)
- */
- #include <linux/init.h>
- #include <linux/platform_device.h>
- #include <linux/serial_8250.h>
- #include <linux/rtc/ds1685.h>
- #include <asm/ip32/mace.h>
- #include <asm/ip32/ip32_ints.h>
- extern void ip32_prepare_poweroff(void);
- #define MACEISA_SERIAL1_OFFS offsetof(struct sgi_mace, isa.serial1)
- #define MACEISA_SERIAL2_OFFS offsetof(struct sgi_mace, isa.serial2)
- #define MACE_PORT(offset,_irq) \
- { \
- .mapbase = MACE_BASE + offset, \
- .irq = _irq, \
- .uartclk = 1843200, \
- .iotype = UPIO_MEM, \
- .flags = UPF_SKIP_TEST|UPF_IOREMAP, \
- .regshift = 8, \
- }
- static struct plat_serial8250_port uart8250_data[] = {
- MACE_PORT(MACEISA_SERIAL1_OFFS, MACEISA_SERIAL1_IRQ),
- MACE_PORT(MACEISA_SERIAL2_OFFS, MACEISA_SERIAL2_IRQ),
- { },
- };
- static struct platform_device uart8250_device = {
- .name = "serial8250",
- .id = PLAT8250_DEV_PLATFORM,
- .dev = {
- .platform_data = uart8250_data,
- },
- };
- static int __init uart8250_init(void)
- {
- return platform_device_register(&uart8250_device);
- }
- device_initcall(uart8250_init);
- static __init int meth_devinit(void)
- {
- struct platform_device *pd;
- int ret;
- pd = platform_device_alloc("meth", -1);
- if (!pd)
- return -ENOMEM;
- ret = platform_device_add(pd);
- if (ret)
- platform_device_put(pd);
- return ret;
- }
- device_initcall(meth_devinit);
- static __init int sgio2audio_devinit(void)
- {
- struct platform_device *pd;
- int ret;
- pd = platform_device_alloc("sgio2audio", -1);
- if (!pd)
- return -ENOMEM;
- ret = platform_device_add(pd);
- if (ret)
- platform_device_put(pd);
- return ret;
- }
- device_initcall(sgio2audio_devinit);
- static __init int sgio2btns_devinit(void)
- {
- return IS_ERR(platform_device_register_simple("sgibtns", -1, NULL, 0));
- }
- device_initcall(sgio2btns_devinit);
- #define MACE_RTC_RES_START (MACE_BASE + offsetof(struct sgi_mace, isa.rtc))
- #define MACE_RTC_RES_END (MACE_RTC_RES_START + 32767)
- static struct resource ip32_rtc_resources[] = {
- {
- .start = MACEISA_RTC_IRQ,
- .end = MACEISA_RTC_IRQ,
- .flags = IORESOURCE_IRQ
- }, {
- .start = MACE_RTC_RES_START,
- .end = MACE_RTC_RES_END,
- .flags = IORESOURCE_MEM,
- }
- };
- /* RTC registers on IP32 are each padded by 256 bytes (0x100). */
- static struct ds1685_rtc_platform_data
- ip32_rtc_platform_data[] = {
- {
- .regstep = 0x100,
- .bcd_mode = true,
- .no_irq = false,
- .uie_unsupported = false,
- .alloc_io_resources = true,
- .plat_prepare_poweroff = ip32_prepare_poweroff,
- },
- };
- struct platform_device ip32_rtc_device = {
- .name = "rtc-ds1685",
- .id = -1,
- .dev = {
- .platform_data = ip32_rtc_platform_data,
- },
- .num_resources = ARRAY_SIZE(ip32_rtc_resources),
- .resource = ip32_rtc_resources,
- };
- static __init int sgio2_rtc_devinit(void)
- {
- return platform_device_register(&ip32_rtc_device);
- }
- device_initcall(sgio2_rtc_devinit);
|