linux/arch/arm/mach-footbridge/isa.c
<<
>>
Prefs
   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
  15static 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
  28static 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
  35static 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
  48static 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
  68static 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
  78static 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
  98arch_initcall(footbridge_isa_init);
  99