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> 214a858cfc9af87cc60b3113c3b7b377a4305eac6aKay Sievers#include <linux/device.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> 4150e9769ad5cfdcfefcfdf99236a3c962e82ebc09Naveen Krishna Ch#include <plat/adc-core.h> 424f507d19ca9e2d703527072f7d8eeb0f0241d6b9Ben Dooks#include <plat/iic-core.h> 43999304be1177d42d16bc59c546228c6ac5a3e76aMarek Szyprowski#include <plat/onenand-core.h> 44b024043b6d0d3feecb1de350de9762a00a79eda1Kukjin Kim 45b024043b6d0d3feecb1de350de9762a00a79eda1Kukjin Kim#include "common.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 5850e9769ad5cfdcfefcfdf99236a3c962e82ebc09Naveen Krishna Ch s3c_adc_setname("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); 69b024043b6d0d3feecb1de350de9762a00a79eda1Kukjin Kim s3c64xx_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 784a858cfc9af87cc60b3113c3b7b377a4305eac6aKay Sieversstruct bus_type s3c6410_subsys = { 794a858cfc9af87cc60b3113c3b7b377a4305eac6aKay Sievers .name = "s3c6410-core", 804a858cfc9af87cc60b3113c3b7b377a4305eac6aKay Sievers .dev_name = "s3c6410-core", 81d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks}; 82d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks 834a858cfc9af87cc60b3113c3b7b377a4305eac6aKay Sieversstatic struct device s3c6410_dev = { 844a858cfc9af87cc60b3113c3b7b377a4305eac6aKay Sievers .bus = &s3c6410_subsys, 85d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks}; 86d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks 87d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooksstatic int __init s3c6410_core_init(void) 88d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks{ 894a858cfc9af87cc60b3113c3b7b377a4305eac6aKay Sievers return subsys_system_register(&s3c6410_subsys, NULL); 90d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks} 91d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks 92d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dookscore_initcall(s3c6410_core_init); 93d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks 94d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooksint __init s3c6410_init(void) 95d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks{ 96d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks printk("S3C6410: Initialising architecture\n"); 97d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks 984a858cfc9af87cc60b3113c3b7b377a4305eac6aKay Sievers return device_register(&s3c6410_dev); 99d626aeedc96e21a048f1a300cd6360f3a7be10f2Ben Dooks} 100