2010-02-25 02:47:58 +03:00
/*
* Copyright ( C ) 2007 Google , Inc .
* Copyright ( c ) 2008 - 2009 , Code Aurora Forum . All rights reserved .
* Author : Brian Swetland < swetland @ google . com >
*
* This software is licensed under the terms of the GNU General Public
* License version 2 , as published by the Free Software Foundation , and
* may be copied , distributed , and modified under those terms .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
*/
# include <linux/kernel.h>
# include <linux/init.h>
# include <linux/platform_device.h>
# include <linux/input.h>
# include <linux/io.h>
# include <linux/delay.h>
# include <linux/power_supply.h>
# include <mach/hardware.h>
# include <asm/mach-types.h>
# include <asm/mach/arch.h>
# include <asm/mach/map.h>
# include <asm/mach/flash.h>
# include <asm/setup.h>
# ifdef CONFIG_CACHE_L2X0
# include <asm/hardware/cache-l2x0.h>
# endif
# include <mach/vreg.h>
# include <mach/mpp.h>
# include <mach/gpio.h>
# include <mach/board.h>
# include <mach/msm_iomap.h>
# include <linux/mtd/nand.h>
# include <linux/mtd/partitions.h>
# include "devices.h"
# include "socinfo.h"
# include "clock.h"
static struct resource smc91x_resources [ ] = {
[ 0 ] = {
. start = 0x9C004300 ,
. end = 0x9C0043ff ,
. flags = IORESOURCE_MEM ,
} ,
[ 1 ] = {
. start = MSM_GPIO_TO_INT ( 132 ) ,
. end = MSM_GPIO_TO_INT ( 132 ) ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct platform_device smc91x_device = {
. name = " smc91x " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( smc91x_resources ) ,
. resource = smc91x_resources ,
} ;
static struct platform_device * devices [ ] __initdata = {
& msm_device_uart3 ,
& msm_device_smd ,
& msm_device_dmov ,
& msm_device_nand ,
& smc91x_device ,
} ;
extern struct sys_timer msm_timer ;
static void __init msm7x2x_init_irq ( void )
{
msm_init_irq ( ) ;
}
static void __init msm7x2x_init ( void )
{
if ( socinfo_init ( ) < 0 )
BUG ( ) ;
if ( machine_is_msm7x25_ffa ( ) | | machine_is_msm7x27_ffa ( ) ) {
smc91x_resources [ 0 ] . start = 0x98000300 ;
smc91x_resources [ 0 ] . end = 0x980003ff ;
smc91x_resources [ 1 ] . start = MSM_GPIO_TO_INT ( 85 ) ;
smc91x_resources [ 1 ] . end = MSM_GPIO_TO_INT ( 85 ) ;
if ( gpio_tlmm_config ( GPIO_CFG ( 85 , 0 ,
GPIO_INPUT ,
GPIO_PULL_DOWN ,
GPIO_2MA ) ,
GPIO_ENABLE ) ) {
printk ( KERN_ERR
" %s: Err: Config GPIO-85 INT \n " ,
__func__ ) ;
}
}
platform_add_devices ( devices , ARRAY_SIZE ( devices ) ) ;
}
static void __init msm7x2x_map_io ( void )
{
msm_map_common_io ( ) ;
/* Technically dependent on the SoC but using machine_is
* macros since socinfo is not available this early and there
* are plans to restructure the code which will eliminate the
* need for socinfo .
*/
if ( machine_is_msm7x27_surf ( ) | | machine_is_msm7x27_ffa ( ) )
msm_clock_init ( msm_clocks_7x27 , msm_num_clocks_7x27 ) ;
if ( machine_is_msm7x25_surf ( ) | | machine_is_msm7x25_ffa ( ) )
msm_clock_init ( msm_clocks_7x25 , msm_num_clocks_7x25 ) ;
# ifdef CONFIG_CACHE_L2X0
if ( machine_is_msm7x27_surf ( ) | | machine_is_msm7x27_ffa ( ) ) {
/* 7x27 has 256KB L2 cache:
64 Kb / Way and 4 - Way Associativity ;
R / W latency : 3 cycles ;
evmon / parity / share disabled . */
l2x0_init ( MSM_L2CC_BASE , 0x00068012 , 0xfe000000 ) ;
}
# endif
}
MACHINE_START ( MSM7X27_SURF , " QCT MSM7x27 SURF " )
2011-01-04 22:03:16 +03:00
. boot_params = PLAT_PHYS_OFFSET + 0x100 ,
2010-02-25 02:47:58 +03:00
. map_io = msm7x2x_map_io ,
. init_irq = msm7x2x_init_irq ,
. init_machine = msm7x2x_init ,
. timer = & msm_timer ,
MACHINE_END
MACHINE_START ( MSM7X27_FFA , " QCT MSM7x27 FFA " )
2011-01-04 22:03:16 +03:00
. boot_params = PLAT_PHYS_OFFSET + 0x100 ,
2010-02-25 02:47:58 +03:00
. map_io = msm7x2x_map_io ,
. init_irq = msm7x2x_init_irq ,
. init_machine = msm7x2x_init ,
. timer = & msm_timer ,
MACHINE_END
MACHINE_START ( MSM7X25_SURF , " QCT MSM7x25 SURF " )
2011-01-04 22:03:16 +03:00
. boot_params = PLAT_PHYS_OFFSET + 0x100 ,
2010-02-25 02:47:58 +03:00
. map_io = msm7x2x_map_io ,
. init_irq = msm7x2x_init_irq ,
. init_machine = msm7x2x_init ,
. timer = & msm_timer ,
MACHINE_END
MACHINE_START ( MSM7X25_FFA , " QCT MSM7x25 FFA " )
2011-01-04 22:03:16 +03:00
. boot_params = PLAT_PHYS_OFFSET + 0x100 ,
2010-02-25 02:47:58 +03:00
. map_io = msm7x2x_map_io ,
. init_irq = msm7x2x_init_irq ,
. init_machine = msm7x2x_init ,
. timer = & msm_timer ,
MACHINE_END