s3c6410.c revision 0ab0b6d226caa4a0268ecbce76a7376c3f40ee6b
1431107ea5b680a24a4d01fbd3a178a3eb932f378Ben Dooks/* linux/arch/arm/mach-s3c64xx/s3c6410.c
2d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks *
3d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks * Copyright 2008 Simtec Electronics
4d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks * Copyright 2008 Simtec Electronics
5d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks *	Ben Dooks <ben@simtec.co.uk>
6d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks *	http://armlinux.simtec.co.uk/
7d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks *
8d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks * This program is free software; you can redistribute it and/or modify
9d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks * it under the terms of the GNU General Public License version 2 as
10d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks * published by the Free Software Foundation.
11d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks*/
12d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
13d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/kernel.h>
14d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/types.h>
15d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/interrupt.h>
16d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/list.h>
17d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/timer.h>
18d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/init.h>
19d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/clk.h>
20d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/io.h>
21d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/sysdev.h>
22d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/serial_core.h>
23d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <linux/platform_device.h>
24d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
25d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <asm/mach/arch.h>
26d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <asm/mach/map.h>
27d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <asm/mach/irq.h>
28d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
29d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <mach/hardware.h>
30d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <asm/irq.h>
31d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
32d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <plat/cpu-freq.h>
33d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <plat/regs-serial.h>
343501c9ae9fc5414d09c9a8d3a5452d2b167db916Ben Dooks#include <mach/regs-clock.h>
35d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
36d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <plat/cpu.h>
37d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <plat/devs.h>
38d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks#include <plat/clock.h>
395cc7fd88fc96072c333184ff359c818665ce2506Ben Dooks#include <plat/sdhci.h>
400ab0b6d226caa4a0268ecbce76a7376c3f40ee6bAbhilash Kesavan#include <plat/ata-core.h>
414f507d19ca9e2d703527072f7d8eeb0f0241d6b9Ben Dooks#include <plat/iic-core.h>
424f7cdc38c000deba82479205f4c99f4c1e7c6d1fNaveen Krishna#include <plat/adc.h>
43999304be1177d42d16bc59c546228c6ac5a3e76aMarek Szyprowski#include <plat/onenand-core.h>
44f7be9abaa5f4a64fdcca6808bb7eacb3547e574eBen Dooks#include <mach/s3c6400.h>
45f7be9abaa5f4a64fdcca6808bb7eacb3547e574eBen Dooks#include <mach/s3c6410.h>
46d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
47d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooksvoid __init s3c6410_map_io(void)
48d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks{
495cc7fd88fc96072c333184ff359c818665ce2506Ben Dooks	/* initialise device information early */
505cc7fd88fc96072c333184ff359c818665ce2506Ben Dooks	s3c6410_default_sdhci0();
51a2205cd2cbfb8fb217e6036f08773a09d1b6d75eBen Dooks	s3c6410_default_sdhci1();
5292b118f6968ae0788ac659af47b464acd9a754a1Maurus Cuelenaere	s3c6410_default_sdhci2();
534f507d19ca9e2d703527072f7d8eeb0f0241d6b9Ben Dooks
544f507d19ca9e2d703527072f7d8eeb0f0241d6b9Ben Dooks	/* the i2c devices are directly compatible with s3c2440 */
554f507d19ca9e2d703527072f7d8eeb0f0241d6b9Ben Dooks	s3c_i2c0_setname("s3c2440-i2c");
564f507d19ca9e2d703527072f7d8eeb0f0241d6b9Ben Dooks	s3c_i2c1_setname("s3c2440-i2c");
5714077ea63b5aea1db0142c1085d24aa0d11b9d36Peter Korsgaard
584f7cdc38c000deba82479205f4c99f4c1e7c6d1fNaveen Krishna	s3c_device_adc.name	= "s3c64xx-adc";
5914077ea63b5aea1db0142c1085d24aa0d11b9d36Peter Korsgaard	s3c_device_nand.name = "s3c6400-nand";
60999304be1177d42d16bc59c546228c6ac5a3e76aMarek Szyprowski	s3c_onenand_setname("s3c6410-onenand");
61999304be1177d42d16bc59c546228c6ac5a3e76aMarek Szyprowski	s3c64xx_onenand1_setname("s3c6410-onenand");
620ab0b6d226caa4a0268ecbce76a7376c3f40ee6bAbhilash Kesavan	s3c_cfcon_setname("s3c64xx-pata");
63d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks}
64d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
65d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooksvoid __init s3c6410_init_clocks(int xtal)
66d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks{
6739669f594e75997db6a893c1e4a1c05312661fe2Ben Dooks	printk(KERN_DEBUG "%s: initialising clocks\n", __func__);
6855bf9267dd628c9369674ca75f5b00e275529289Ben Dooks	s3c64xx_register_clocks(xtal, S3C6410_CLKDIV0_ARM_MASK);
69cf18acf0e04260ff8ffa46dc245d3d2324ed41b0Ben Dooks	s3c6400_setup_clocks();
70d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks}
71d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
72d9b79fb56829de34eaddb01b405216eddd0d3b10Ben Dooksvoid __init s3c6410_init_irq(void)
73d9b79fb56829de34eaddb01b405216eddd0d3b10Ben Dooks{
74d9b79fb56829de34eaddb01b405216eddd0d3b10Ben Dooks	/* VIC0 is missing IRQ7, VIC1 is fully populated. */
75d9b79fb56829de34eaddb01b405216eddd0d3b10Ben Dooks	s3c64xx_init_irq(~0 & ~(1 << 7), ~0);
76d9b79fb56829de34eaddb01b405216eddd0d3b10Ben Dooks}
77d9b79fb56829de34eaddb01b405216eddd0d3b10Ben Dooks
78d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooksstruct sysdev_class s3c6410_sysclass = {
79d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks	.name	= "s3c6410-core",
80d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks};
81d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
82d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooksstatic struct sys_device s3c6410_sysdev = {
83d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks	.cls	= &s3c6410_sysclass,
84d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks};
85d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
86d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooksstatic int __init s3c6410_core_init(void)
87d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks{
88d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks	return sysdev_class_register(&s3c6410_sysclass);
89d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks}
90d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
91d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dookscore_initcall(s3c6410_core_init);
92d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
93d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooksint __init s3c6410_init(void)
94d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks{
95d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks	printk("S3C6410: Initialising architecture\n");
96d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks
97d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks	return sysdev_register(&s3c6410_sysdev);
98d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks}
99