PageRenderTime 16ms CodeModel.GetById 10ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/arm/mach-ep93xx/micro9.c

https://github.com/AICP/kernel_google_msm
C | 129 lines | 83 code | 18 blank | 28 comment | 6 complexity | 570ac5c53f099b97af65c59a1ebc3690 MD5 | raw file
  1/*
  2 *  linux/arch/arm/mach-ep93xx/micro9.c
  3 *
  4 * Copyright (C) 2006 Contec Steuerungstechnik & Automation GmbH
  5 *                    Manfred Gruber <m.gruber@tirol.com>
  6 * Copyright (C) 2009 Contec Steuerungstechnik & Automation GmbH
  7 *                    Hubert Feurstein <hubert.feurstein@contec.at>
  8 *
  9 * This program is free software; you can redistribute it and/or modify
 10 * it under the terms of the GNU General Public License version 2 as
 11 * published by the Free Software Foundation.
 12 */
 13
 14#include <linux/kernel.h>
 15#include <linux/init.h>
 16#include <linux/platform_device.h>
 17#include <linux/io.h>
 18
 19#include <mach/hardware.h>
 20
 21#include <asm/hardware/vic.h>
 22#include <asm/mach-types.h>
 23#include <asm/mach/arch.h>
 24
 25#include "soc.h"
 26
 27/*************************************************************************
 28 * Micro9 NOR Flash
 29 *
 30 * Micro9-High has up to 64MB of 32-bit flash on CS1
 31 * Micro9-Mid has up to 64MB of either 32-bit or 16-bit flash on CS1
 32 * Micro9-Lite uses a separate MTD map driver for flash support
 33 * Micro9-Slim has up to 64MB of either 32-bit or 16-bit flash on CS1
 34 *************************************************************************/
 35static unsigned int __init micro9_detect_bootwidth(void)
 36{
 37	u32 v;
 38
 39	/* Detect the bus width of the external flash memory */
 40	v = __raw_readl(EP93XX_SYSCON_SYSCFG);
 41	if (v & EP93XX_SYSCON_SYSCFG_LCSN7)
 42		return 4; /* 32-bit */
 43	else
 44		return 2; /* 16-bit */
 45}
 46
 47static void __init micro9_register_flash(void)
 48{
 49	unsigned int width;
 50
 51	if (machine_is_micro9())
 52		width = 4;
 53	else if (machine_is_micro9m() || machine_is_micro9s())
 54		width = micro9_detect_bootwidth();
 55	else
 56		width = 0;
 57
 58	if (width)
 59		ep93xx_register_flash(width, EP93XX_CS1_PHYS_BASE, SZ_64M);
 60}
 61
 62
 63/*************************************************************************
 64 * Micro9 Ethernet
 65 *************************************************************************/
 66static struct ep93xx_eth_data __initdata micro9_eth_data = {
 67	.phy_id		= 0x1f,
 68};
 69
 70
 71static void __init micro9_init_machine(void)
 72{
 73	ep93xx_init_devices();
 74	ep93xx_register_eth(&micro9_eth_data, 1);
 75	micro9_register_flash();
 76}
 77
 78
 79#ifdef CONFIG_MACH_MICRO9H
 80MACHINE_START(MICRO9, "Contec Micro9-High")
 81	/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
 82	.atag_offset	= 0x100,
 83	.map_io		= ep93xx_map_io,
 84	.init_irq	= ep93xx_init_irq,
 85	.handle_irq	= vic_handle_irq,
 86	.timer		= &ep93xx_timer,
 87	.init_machine	= micro9_init_machine,
 88	.restart	= ep93xx_restart,
 89MACHINE_END
 90#endif
 91
 92#ifdef CONFIG_MACH_MICRO9M
 93MACHINE_START(MICRO9M, "Contec Micro9-Mid")
 94	/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
 95	.atag_offset	= 0x100,
 96	.map_io		= ep93xx_map_io,
 97	.init_irq	= ep93xx_init_irq,
 98	.handle_irq	= vic_handle_irq,
 99	.timer		= &ep93xx_timer,
100	.init_machine	= micro9_init_machine,
101	.restart	= ep93xx_restart,
102MACHINE_END
103#endif
104
105#ifdef CONFIG_MACH_MICRO9L
106MACHINE_START(MICRO9L, "Contec Micro9-Lite")
107	/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
108	.atag_offset	= 0x100,
109	.map_io		= ep93xx_map_io,
110	.init_irq	= ep93xx_init_irq,
111	.handle_irq	= vic_handle_irq,
112	.timer		= &ep93xx_timer,
113	.init_machine	= micro9_init_machine,
114	.restart	= ep93xx_restart,
115MACHINE_END
116#endif
117
118#ifdef CONFIG_MACH_MICRO9S
119MACHINE_START(MICRO9S, "Contec Micro9-Slim")
120	/* Maintainer: Hubert Feurstein <hubert.feurstein@contec.at> */
121	.atag_offset	= 0x100,
122	.map_io		= ep93xx_map_io,
123	.init_irq	= ep93xx_init_irq,
124	.handle_irq	= vic_handle_irq,
125	.timer		= &ep93xx_timer,
126	.init_machine	= micro9_init_machine,
127	.restart	= ep93xx_restart,
128MACHINE_END
129#endif