162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  linux/arch/arm/mach-footbridge/isa.c
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Copyright (C) 2004 Russell King.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci#include <linux/init.h>
862306a36Sopenharmony_ci#include <linux/serial_8250.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <asm/irq.h>
1162306a36Sopenharmony_ci#include <asm/hardware/dec21285.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include "common.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistatic struct resource rtc_resources[] = {
1662306a36Sopenharmony_ci	[0] = {
1762306a36Sopenharmony_ci		.start	= 0x70,
1862306a36Sopenharmony_ci		.end	= 0x73,
1962306a36Sopenharmony_ci		.flags	= IORESOURCE_IO,
2062306a36Sopenharmony_ci	},
2162306a36Sopenharmony_ci	[1] = {
2262306a36Sopenharmony_ci		.start	= IRQ_ISA_RTC_ALARM,
2362306a36Sopenharmony_ci		.end	= IRQ_ISA_RTC_ALARM,
2462306a36Sopenharmony_ci		.flags	= IORESOURCE_IRQ,
2562306a36Sopenharmony_ci	}
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cistatic struct platform_device rtc_device = {
2962306a36Sopenharmony_ci	.name		= "rtc_cmos",
3062306a36Sopenharmony_ci	.id		= -1,
3162306a36Sopenharmony_ci	.resource	= rtc_resources,
3262306a36Sopenharmony_ci	.num_resources	= ARRAY_SIZE(rtc_resources),
3362306a36Sopenharmony_ci};
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistatic struct resource serial_resources[] = {
3662306a36Sopenharmony_ci	[0] = {
3762306a36Sopenharmony_ci		.start	= 0x3f8,
3862306a36Sopenharmony_ci		.end	= 0x3ff,
3962306a36Sopenharmony_ci		.flags	= IORESOURCE_IO,
4062306a36Sopenharmony_ci	},
4162306a36Sopenharmony_ci	[1] = {
4262306a36Sopenharmony_ci		.start	= 0x2f8,
4362306a36Sopenharmony_ci		.end	= 0x2ff,
4462306a36Sopenharmony_ci		.flags	= IORESOURCE_IO,
4562306a36Sopenharmony_ci	},
4662306a36Sopenharmony_ci};
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cistatic struct plat_serial8250_port serial_platform_data[] = {
4962306a36Sopenharmony_ci	{
5062306a36Sopenharmony_ci		.iobase		= 0x3f8,
5162306a36Sopenharmony_ci		.irq		= IRQ_ISA_UART,
5262306a36Sopenharmony_ci		.uartclk	= 1843200,
5362306a36Sopenharmony_ci		.regshift	= 0,
5462306a36Sopenharmony_ci		.iotype		= UPIO_PORT,
5562306a36Sopenharmony_ci		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
5662306a36Sopenharmony_ci	},
5762306a36Sopenharmony_ci	{
5862306a36Sopenharmony_ci		.iobase		= 0x2f8,
5962306a36Sopenharmony_ci		.irq		= IRQ_ISA_UART2,
6062306a36Sopenharmony_ci		.uartclk	= 1843200,
6162306a36Sopenharmony_ci		.regshift	= 0,
6262306a36Sopenharmony_ci		.iotype		= UPIO_PORT,
6362306a36Sopenharmony_ci		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
6462306a36Sopenharmony_ci	},
6562306a36Sopenharmony_ci	{ },
6662306a36Sopenharmony_ci};
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_cistatic struct platform_device serial_device = {
6962306a36Sopenharmony_ci	.name			= "serial8250",
7062306a36Sopenharmony_ci	.id			= PLAT8250_DEV_PLATFORM,
7162306a36Sopenharmony_ci	.dev			= {
7262306a36Sopenharmony_ci		.platform_data	= serial_platform_data,
7362306a36Sopenharmony_ci	},
7462306a36Sopenharmony_ci	.resource		= serial_resources,
7562306a36Sopenharmony_ci	.num_resources		= ARRAY_SIZE(serial_resources),
7662306a36Sopenharmony_ci};
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_cistatic int __init footbridge_isa_init(void)
7962306a36Sopenharmony_ci{
8062306a36Sopenharmony_ci	int err = 0;
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci	/* Personal server doesn't have RTC */
8362306a36Sopenharmony_ci	isa_rtc_init();
8462306a36Sopenharmony_ci	err = platform_device_register(&rtc_device);
8562306a36Sopenharmony_ci	if (err)
8662306a36Sopenharmony_ci		printk(KERN_ERR "Unable to register RTC device: %d\n", err);
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci	err = platform_device_register(&serial_device);
8962306a36Sopenharmony_ci	if (err)
9062306a36Sopenharmony_ci		printk(KERN_ERR "Unable to register serial device: %d\n", err);
9162306a36Sopenharmony_ci	return 0;
9262306a36Sopenharmony_ci}
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ciarch_initcall(footbridge_isa_init);
95