linux/arch/mips/sgi-ip32/ip32-platform.c
<<
>>
Prefs
   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/module.h>
   9#include <linux/init.h>
  10#include <linux/platform_device.h>
  11#include <linux/serial_8250.h>
  12
  13#include <asm/ip32/mace.h>
  14#include <asm/ip32/ip32_ints.h>
  15
  16#define MACEISA_SERIAL1_OFFS   offsetof(struct sgi_mace, isa.serial1)
  17#define MACEISA_SERIAL2_OFFS   offsetof(struct sgi_mace, isa.serial2)
  18
  19#define MACE_PORT(offset,_irq)                                          \
  20{                                                                       \
  21        .mapbase        = MACE_BASE + offset,                           \
  22        .irq            = _irq,                                         \
  23        .uartclk        = 1843200,                                      \
  24        .iotype         = UPIO_MEM,                                     \
  25        .flags          = UPF_SKIP_TEST|UPF_IOREMAP,                    \
  26        .regshift       = 8,                                            \
  27}
  28
  29static struct plat_serial8250_port uart8250_data[] = {
  30        MACE_PORT(MACEISA_SERIAL1_OFFS, MACEISA_SERIAL1_IRQ),
  31        MACE_PORT(MACEISA_SERIAL2_OFFS, MACEISA_SERIAL2_IRQ),
  32        { },
  33};
  34
  35static struct platform_device uart8250_device = {
  36        .name                   = "serial8250",
  37        .id                     = PLAT8250_DEV_PLATFORM,
  38        .dev                    = {
  39                .platform_data  = uart8250_data,
  40        },
  41};
  42
  43static int __init uart8250_init(void)
  44{
  45        return platform_device_register(&uart8250_device);
  46}
  47
  48device_initcall(uart8250_init);
  49
  50static __init int meth_devinit(void)
  51{
  52        struct platform_device *pd;
  53        int ret;
  54
  55        pd = platform_device_alloc("meth", -1);
  56        if (!pd)
  57                return -ENOMEM;
  58
  59        ret = platform_device_add(pd);
  60        if (ret)
  61                platform_device_put(pd);
  62
  63        return ret;
  64}
  65
  66device_initcall(meth_devinit);
  67
  68static __init int sgio2audio_devinit(void)
  69{
  70        struct platform_device *pd;
  71        int ret;
  72
  73        pd = platform_device_alloc("sgio2audio", -1);
  74        if (!pd)
  75                return -ENOMEM;
  76
  77        ret = platform_device_add(pd);
  78        if (ret)
  79                platform_device_put(pd);
  80
  81        return ret;
  82}
  83
  84device_initcall(sgio2audio_devinit);
  85
  86static __init int sgio2btns_devinit(void)
  87{
  88        return IS_ERR(platform_device_register_simple("sgibtns", -1, NULL, 0));
  89}
  90
  91device_initcall(sgio2btns_devinit);
  92
  93static struct resource sgio2_cmos_rsrc[] = {
  94        {
  95                .start = 0x70,
  96                .end   = 0x71,
  97                .flags = IORESOURCE_IO
  98        }
  99};
 100
 101static __init int sgio2_cmos_devinit(void)
 102{
 103        return IS_ERR(platform_device_register_simple("rtc_cmos", -1,
 104                                                      sgio2_cmos_rsrc, 1));
 105}
 106
 107device_initcall(sgio2_cmos_devinit);
 108
 109MODULE_AUTHOR("Ralf Baechle <ralf@linux-mips.org>");
 110MODULE_LICENSE("GPL");
 111MODULE_DESCRIPTION("8250 UART probe driver for SGI IP32 aka O2");
 112