162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci//
362306a36Sopenharmony_ci// Copyright 2008 Simtec Electronics
462306a36Sopenharmony_ci// Copyright 2008 Simtec Electronics
562306a36Sopenharmony_ci//	Ben Dooks <ben@simtec.co.uk>
662306a36Sopenharmony_ci//	http://armlinux.simtec.co.uk/
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/*
962306a36Sopenharmony_ci * NOTE: Code in this file is not used when booting with Device Tree support.
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <linux/kernel.h>
1362306a36Sopenharmony_ci#include <linux/types.h>
1462306a36Sopenharmony_ci#include <linux/interrupt.h>
1562306a36Sopenharmony_ci#include <linux/list.h>
1662306a36Sopenharmony_ci#include <linux/timer.h>
1762306a36Sopenharmony_ci#include <linux/init.h>
1862306a36Sopenharmony_ci#include <linux/clk.h>
1962306a36Sopenharmony_ci#include <linux/io.h>
2062306a36Sopenharmony_ci#include <linux/device.h>
2162306a36Sopenharmony_ci#include <linux/serial_core.h>
2262306a36Sopenharmony_ci#include <linux/serial_s3c.h>
2362306a36Sopenharmony_ci#include <linux/platform_device.h>
2462306a36Sopenharmony_ci#include <linux/of.h>
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#include <asm/mach/arch.h>
2762306a36Sopenharmony_ci#include <asm/mach/map.h>
2862306a36Sopenharmony_ci#include <asm/mach/irq.h>
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#include <asm/irq.h>
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#include <linux/soc/samsung/s3c-pm.h>
3362306a36Sopenharmony_ci#include "regs-clock.h"
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#include "cpu.h"
3662306a36Sopenharmony_ci#include "devs.h"
3762306a36Sopenharmony_ci#include "sdhci.h"
3862306a36Sopenharmony_ci#include "iic-core.h"
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#include "s3c64xx.h"
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_civoid __init s3c6410_map_io(void)
4362306a36Sopenharmony_ci{
4462306a36Sopenharmony_ci	/* initialise device information early */
4562306a36Sopenharmony_ci	s3c6410_default_sdhci0();
4662306a36Sopenharmony_ci	s3c6410_default_sdhci1();
4762306a36Sopenharmony_ci	s3c6410_default_sdhci2();
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci	/* the i2c devices are directly compatible with s3c2440 */
5062306a36Sopenharmony_ci	s3c_i2c0_setname("s3c2440-i2c");
5162306a36Sopenharmony_ci	s3c_i2c1_setname("s3c2440-i2c");
5262306a36Sopenharmony_ci}
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_civoid __init s3c6410_init_irq(void)
5562306a36Sopenharmony_ci{
5662306a36Sopenharmony_ci	/* VIC0 is missing IRQ7, VIC1 is fully populated. */
5762306a36Sopenharmony_ci	s3c64xx_init_irq(~0 & ~(1 << 7), ~0);
5862306a36Sopenharmony_ci}
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistruct bus_type s3c6410_subsys = {
6162306a36Sopenharmony_ci	.name		= "s3c6410-core",
6262306a36Sopenharmony_ci	.dev_name	= "s3c6410-core",
6362306a36Sopenharmony_ci};
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_cistatic struct device s3c6410_dev = {
6662306a36Sopenharmony_ci	.bus	= &s3c6410_subsys,
6762306a36Sopenharmony_ci};
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_cistatic int __init s3c6410_core_init(void)
7062306a36Sopenharmony_ci{
7162306a36Sopenharmony_ci	/* Not applicable when using DT. */
7262306a36Sopenharmony_ci	if (of_have_populated_dt() || !soc_is_s3c64xx())
7362306a36Sopenharmony_ci		return 0;
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci	return subsys_system_register(&s3c6410_subsys, NULL);
7662306a36Sopenharmony_ci}
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_cicore_initcall(s3c6410_core_init);
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ciint __init s3c6410_init(void)
8162306a36Sopenharmony_ci{
8262306a36Sopenharmony_ci	printk("S3C6410: Initialising architecture\n");
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci	return device_register(&s3c6410_dev);
8562306a36Sopenharmony_ci}
86