1cb165c52SRabin Vincent /* 2cb165c52SRabin Vincent * Copyright (C) 2008-2009 ST-Ericsson 3cb165c52SRabin Vincent * 4cb165c52SRabin Vincent * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com> 5cb165c52SRabin Vincent * 6cb165c52SRabin Vincent * This program is free software; you can redistribute it and/or modify 7cb165c52SRabin Vincent * it under the terms of the GNU General Public License version 2, as 8cb165c52SRabin Vincent * published by the Free Software Foundation. 9cb165c52SRabin Vincent * 10cb165c52SRabin Vincent */ 11cb165c52SRabin Vincent #include <linux/types.h> 12cb165c52SRabin Vincent #include <linux/init.h> 13cb165c52SRabin Vincent #include <linux/device.h> 14cb165c52SRabin Vincent #include <linux/amba/bus.h> 15cb165c52SRabin Vincent #include <linux/irq.h> 16cb165c52SRabin Vincent #include <linux/gpio.h> 17cb165c52SRabin Vincent #include <linux/platform_device.h> 18cb165c52SRabin Vincent #include <linux/io.h> 19cb165c52SRabin Vincent 20cb165c52SRabin Vincent #include <asm/mach/map.h> 21cb165c52SRabin Vincent #include <mach/hardware.h> 22cb165c52SRabin Vincent #include <mach/setup.h> 23cb165c52SRabin Vincent #include <mach/devices.h> 24cb165c52SRabin Vincent 25cb165c52SRabin Vincent static struct platform_device *platform_devs[] __initdata = { 26cb165c52SRabin Vincent &u8500_gpio_devs[0], 27cb165c52SRabin Vincent &u8500_gpio_devs[1], 28cb165c52SRabin Vincent &u8500_gpio_devs[2], 29cb165c52SRabin Vincent &u8500_gpio_devs[3], 30cb165c52SRabin Vincent &u8500_gpio_devs[4], 31cb165c52SRabin Vincent &u8500_gpio_devs[5], 32cb165c52SRabin Vincent &u8500_gpio_devs[6], 33cb165c52SRabin Vincent &u8500_gpio_devs[7], 34cb165c52SRabin Vincent &u8500_gpio_devs[8], 357b8ddb06SLinus Walleij &u8500_dma40_device, 36cb165c52SRabin Vincent }; 37cb165c52SRabin Vincent 38cb165c52SRabin Vincent /* minimum static i/o mapping required to boot U8500 platforms */ 39cb165c52SRabin Vincent static struct map_desc u8500_io_desc[] __initdata = { 40cb165c52SRabin Vincent __IO_DEV_DESC(U8500_PRCMU_BASE, SZ_4K), 41cb165c52SRabin Vincent __IO_DEV_DESC(U8500_GPIO0_BASE, SZ_4K), 42cb165c52SRabin Vincent __IO_DEV_DESC(U8500_GPIO1_BASE, SZ_4K), 43cb165c52SRabin Vincent __IO_DEV_DESC(U8500_GPIO2_BASE, SZ_4K), 44cb165c52SRabin Vincent __IO_DEV_DESC(U8500_GPIO3_BASE, SZ_4K), 45cb165c52SRabin Vincent }; 46cb165c52SRabin Vincent 47cb165c52SRabin Vincent static struct map_desc u8500ed_io_desc[] __initdata = { 48cb165c52SRabin Vincent __IO_DEV_DESC(U8500_MTU0_BASE_ED, SZ_4K), 49cb165c52SRabin Vincent __IO_DEV_DESC(U8500_CLKRST7_BASE_ED, SZ_8K), 50cb165c52SRabin Vincent }; 51cb165c52SRabin Vincent 52cb165c52SRabin Vincent static struct map_desc u8500v1_io_desc[] __initdata = { 53cb165c52SRabin Vincent __IO_DEV_DESC(U8500_MTU0_BASE, SZ_4K), 54cb165c52SRabin Vincent }; 55cb165c52SRabin Vincent 56cb165c52SRabin Vincent void __init u8500_map_io(void) 57cb165c52SRabin Vincent { 58cb165c52SRabin Vincent ux500_map_io(); 59cb165c52SRabin Vincent 60cb165c52SRabin Vincent iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc)); 61cb165c52SRabin Vincent 62cb165c52SRabin Vincent if (cpu_is_u8500ed()) 63cb165c52SRabin Vincent iotable_init(u8500ed_io_desc, ARRAY_SIZE(u8500ed_io_desc)); 64cb165c52SRabin Vincent else 65cb165c52SRabin Vincent iotable_init(u8500v1_io_desc, ARRAY_SIZE(u8500v1_io_desc)); 66cb165c52SRabin Vincent } 67cb165c52SRabin Vincent 68cb165c52SRabin Vincent /* 69cb165c52SRabin Vincent * This function is called from the board init 70cb165c52SRabin Vincent */ 71cb165c52SRabin Vincent void __init u8500_init_devices(void) 72cb165c52SRabin Vincent { 73cb165c52SRabin Vincent ux500_init_devices(); 74cb165c52SRabin Vincent 757b8ddb06SLinus Walleij if (cpu_is_u8500ed()) 767b8ddb06SLinus Walleij dma40_u8500ed_fixup(); 777b8ddb06SLinus Walleij 78cb165c52SRabin Vincent /* Register the platform devices */ 79cb165c52SRabin Vincent platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); 80cb165c52SRabin Vincent 81cb165c52SRabin Vincent return ; 82cb165c52SRabin Vincent } 83