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