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