| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | /* linux/arch/arm/mach-s3c2443/s3c2443.c
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (c) 2007 Simtec Electronics | 
					
						
							|  |  |  |  *   Ben Dooks <ben@simtec.co.uk> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Samsung S3C2443 Mobile CPU support | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License version 2 as | 
					
						
							|  |  |  |  * published by the Free Software Foundation. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/kernel.h>
 | 
					
						
							|  |  |  | #include <linux/types.h>
 | 
					
						
							|  |  |  | #include <linux/interrupt.h>
 | 
					
						
							|  |  |  | #include <linux/list.h>
 | 
					
						
							|  |  |  | #include <linux/timer.h>
 | 
					
						
							|  |  |  | #include <linux/init.h>
 | 
					
						
							| 
									
										
										
										
											2011-01-06 13:04:33 +09:00
										 |  |  | #include <linux/gpio.h>
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | #include <linux/platform_device.h>
 | 
					
						
							|  |  |  | #include <linux/serial_core.h>
 | 
					
						
							| 
									
										
										
										
											2011-12-21 16:01:38 -08:00
										 |  |  | #include <linux/device.h>
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | #include <linux/clk.h>
 | 
					
						
							| 
									
										
										
										
											2008-09-06 12:10:45 +01:00
										 |  |  | #include <linux/io.h>
 | 
					
						
							| 
									
										
										
										
											2013-07-08 16:01:40 -07:00
										 |  |  | #include <linux/reboot.h>
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <asm/mach/arch.h>
 | 
					
						
							|  |  |  | #include <asm/mach/map.h>
 | 
					
						
							|  |  |  | #include <asm/mach/irq.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-05 16:14:15 +01:00
										 |  |  | #include <mach/hardware.h>
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | #include <asm/irq.h>
 | 
					
						
							| 
									
										
										
										
											2012-03-28 18:30:01 +01:00
										 |  |  | #include <asm/system_misc.h>
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-05 16:14:15 +01:00
										 |  |  | #include <mach/regs-s3c2443-clock.h>
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-06 13:04:33 +09:00
										 |  |  | #include <plat/gpio-core.h>
 | 
					
						
							|  |  |  | #include <plat/gpio-cfg.h>
 | 
					
						
							|  |  |  | #include <plat/gpio-cfg-helpers.h>
 | 
					
						
							| 
									
										
										
										
											2008-10-07 22:26:09 +01:00
										 |  |  | #include <plat/devs.h>
 | 
					
						
							|  |  |  | #include <plat/cpu.h>
 | 
					
						
							| 
									
										
										
										
											2010-08-10 18:02:37 -07:00
										 |  |  | #include <plat/fb-core.h>
 | 
					
						
							| 
									
										
										
										
											2010-10-18 19:56:45 +09:00
										 |  |  | #include <plat/nand-core.h>
 | 
					
						
							| 
									
										
										
										
											2011-10-12 21:34:12 +09:00
										 |  |  | #include <plat/adc-core.h>
 | 
					
						
							| 
									
										
										
										
											2011-12-24 10:52:23 +09:00
										 |  |  | #include <plat/rtc-core.h>
 | 
					
						
							| 
									
										
										
										
											2012-10-17 16:47:11 +09:00
										 |  |  | #include <plat/spi-core.h>
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | static struct map_desc s3c2443_iodesc[] __initdata = { | 
					
						
							|  |  |  | 	IODESC_ENT(WATCHDOG), | 
					
						
							|  |  |  | 	IODESC_ENT(CLKPWR), | 
					
						
							|  |  |  | 	IODESC_ENT(TIMER), | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-21 16:01:38 -08:00
										 |  |  | struct bus_type s3c2443_subsys = { | 
					
						
							| 
									
										
										
										
											2007-12-20 02:09:39 +01:00
										 |  |  | 	.name = "s3c2443-core", | 
					
						
							| 
									
										
										
										
											2011-12-21 16:01:38 -08:00
										 |  |  | 	.dev_name = "s3c2443-core", | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-21 16:01:38 -08:00
										 |  |  | static struct device s3c2443_dev = { | 
					
						
							|  |  |  | 	.bus		= &s3c2443_subsys, | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-08 16:01:40 -07:00
										 |  |  | void s3c2443_restart(enum reboot_mode mode, const char *cmd) | 
					
						
							| 
									
										
										
										
											2007-02-15 22:53:52 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2013-07-08 16:01:40 -07:00
										 |  |  | 	if (mode == REBOOT_SOFT) | 
					
						
							| 
									
										
										
										
											2011-12-22 23:37:44 +01:00
										 |  |  | 		soft_restart(0); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-15 22:53:52 +01:00
										 |  |  | 	__raw_writel(S3C2443_SWRST_RESET, S3C2443_SWRST); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | int __init s3c2443_init(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	printk("S3C2443: Initialising architecture\n"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-18 19:56:45 +09:00
										 |  |  | 	s3c_nand_setname("s3c2412-nand"); | 
					
						
							| 
									
										
										
										
											2010-08-10 18:02:37 -07:00
										 |  |  | 	s3c_fb_setname("s3c2443-fb"); | 
					
						
							| 
									
										
										
										
											2007-02-15 22:29:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-12 21:34:12 +09:00
										 |  |  | 	s3c_adc_setname("s3c2443-adc"); | 
					
						
							| 
									
										
										
										
											2011-12-24 10:52:23 +09:00
										 |  |  | 	s3c_rtc_setname("s3c2443-rtc"); | 
					
						
							| 
									
										
										
										
											2011-10-12 21:34:12 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-05-20 18:02:50 +01:00
										 |  |  | 	/* change WDT IRQ number */ | 
					
						
							|  |  |  | 	s3c_device_wdt.resource[1].start = IRQ_S3C2443_WDT; | 
					
						
							|  |  |  | 	s3c_device_wdt.resource[1].end   = IRQ_S3C2443_WDT; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-21 16:01:38 -08:00
										 |  |  | 	return device_register(&s3c2443_dev); | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void __init s3c2443_init_uarts(struct s3c2410_uartcfg *cfg, int no) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	s3c24xx_init_uartdevs("s3c2440-uart", s3c2410_uart_resources, cfg, no); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* s3c2443_map_io
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * register the standard cpu IO areas, and any passed in from the | 
					
						
							|  |  |  |  * machine specific initialisation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-10-21 14:06:31 +01:00
										 |  |  | void __init s3c2443_map_io(void) | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-08-30 20:47:32 +09:00
										 |  |  | 	s3c24xx_gpiocfg_default.set_pull = s3c2443_gpio_setpull; | 
					
						
							|  |  |  | 	s3c24xx_gpiocfg_default.get_pull = s3c2443_gpio_getpull; | 
					
						
							| 
									
										
										
										
											2011-01-06 13:04:33 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-17 16:47:11 +09:00
										 |  |  | 	/* initialize device information early */ | 
					
						
							|  |  |  | 	s3c64xx_spi_setname("s3c2443-spi"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | 	iotable_init(s3c2443_iodesc, ARRAY_SIZE(s3c2443_iodesc)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-21 16:01:38 -08:00
										 |  |  | /* need to register the subsystem before we actually register the device, and
 | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  |  * we also need to ensure that it has been initialised before any of the | 
					
						
							|  |  |  |  * drivers even try to use it (even if not on an s3c2443 based system) | 
					
						
							|  |  |  |  * as a driver which may support both 2443 and 2440 may try and use it. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int __init s3c2443_core_init(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-12-21 16:01:38 -08:00
										 |  |  | 	return subsys_system_register(&s3c2443_subsys, NULL); | 
					
						
							| 
									
										
										
										
											2007-02-16 12:12:31 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | core_initcall(s3c2443_core_init); |