1ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen/* 2ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen * linux/arch/arm/mach-omap2/board-rx51.c 3ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen * 4ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen * Copyright (C) 2007, 2008 Nokia 5ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen * 6ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen * This program is free software; you can redistribute it and/or modify 7ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen * it under the terms of the GNU General Public License version 2 as 8ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen * published by the Free Software Foundation. 9ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen */ 10ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen 11ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <linux/kernel.h> 12ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <linux/init.h> 13ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <linux/platform_device.h> 14ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <linux/delay.h> 15ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <linux/err.h> 16ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <linux/clk.h> 17ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <linux/io.h> 18ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <linux/gpio.h> 19a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman#include <linux/leds.h> 20ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen 21ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <mach/hardware.h> 22ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <asm/mach-types.h> 23ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <asm/mach/arch.h> 24ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen#include <asm/mach/map.h> 25ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen 26ce491cf85466c3377228c5a852ea627ec5136956Tony Lindgren#include <plat/mcspi.h> 27ce491cf85466c3377228c5a852ea627ec5136956Tony Lindgren#include <plat/board.h> 284e65331c6bb4a777bd61a4dac0daa9fc47777b63Tony Lindgren#include "common.h" 29ce491cf85466c3377228c5a852ea627ec5136956Tony Lindgren#include <plat/dma.h> 30ce491cf85466c3377228c5a852ea627ec5136956Tony Lindgren#include <plat/gpmc.h> 31ce491cf85466c3377228c5a852ea627ec5136956Tony Lindgren#include <plat/usb.h> 32ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen 33ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgren#include "mux.h" 345a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi#include "pm.h" 35fcd8d84633902fd1717d80f36a38b8a4305ca3d4Aaro Koskinen#include "sdram-nokia.h" 36ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgren 37a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman#define RX51_GPIO_SLEEP_IND 162 38ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgren 3903e111045e362e16e97fdd79a49590a763fe5216Roger Quadrosextern void rx51_video_mem_init(void); 402000655ee7b44ef2816d565c62ae03de74333204Tero Kristo 41a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilmanstatic struct gpio_led gpio_leds[] = { 42a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman { 43a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman .name = "sleep_ind", 44a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman .gpio = RX51_GPIO_SLEEP_IND, 45a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman }, 46a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman}; 47a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman 48a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilmanstatic struct gpio_led_platform_data gpio_led_info = { 49a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman .leds = gpio_leds, 50a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman .num_leds = ARRAY_SIZE(gpio_leds), 51a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman}; 52a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman 53a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilmanstatic struct platform_device leds_gpio = { 54a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman .name = "leds-gpio", 55a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman .id = -1, 56a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman .dev = { 57a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman .platform_data = &gpio_led_info, 58a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman }, 59a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman}; 60a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman 61866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet/* 62866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet * cpuidle C-states definition override from the default values. 63866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet * The 'exit_latency' field is the sum of sleep and wake-up latencies. 64866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet */ 655a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemistatic struct cpuidle_params rx51_cpuidle_params[] = { 665a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi /* C1 */ 67866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet {110 + 162, 5 , 1}, 685a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi /* C2 */ 69866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet {106 + 180, 309, 1}, 705a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi /* C3 */ 71866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet {107 + 410, 46057, 0}, 725a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi /* C4 */ 73866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet {121 + 3374, 46057, 0}, 745a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi /* C5 */ 75866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet {855 + 1146, 46057, 1}, 765a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi /* C6 */ 77866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet {7580 + 4134, 484329, 0}, 785a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi /* C7 */ 79866ba0ef967c693dae952afafcb1582a390a82a0Jean Pihet {7505 + 15274, 484329, 1}, 805a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi}; 815a1b1d3a9efad6bd53d01ff02e86626d1a51d697Kalle Jokiniemi 82ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunenextern void __init rx51_peripherals_init(void); 83ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen 84ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgren#ifdef CONFIG_OMAP_MUX 85ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgrenstatic struct omap_board_mux board_mux[] __initdata = { 86ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgren { .reg_offset = OMAP_MUX_TERMINATOR }, 87ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgren}; 88ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgren#endif 89ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgren 90884b8369ee78c081b5e5a99d1d09a95815d13c28Maulik Mankadstatic struct omap_musb_board_data musb_board_data = { 91884b8369ee78c081b5e5a99d1d09a95815d13c28Maulik Mankad .interface_type = MUSB_INTERFACE_ULPI, 92884b8369ee78c081b5e5a99d1d09a95815d13c28Maulik Mankad .mode = MUSB_PERIPHERAL, 93884b8369ee78c081b5e5a99d1d09a95815d13c28Maulik Mankad .power = 0, 94884b8369ee78c081b5e5a99d1d09a95815d13c28Maulik Mankad}; 95884b8369ee78c081b5e5a99d1d09a95815d13c28Maulik Mankad 96ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunenstatic void __init rx51_init(void) 97ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen{ 98a4ca9dbe44a167d63545c7ac2b5a36d7b0b415b6Tony Lindgren struct omap_sdrc_params *sdrc_params; 99a4ca9dbe44a167d63545c7ac2b5a36d7b0b415b6Tony Lindgren 100ca5742bdb58ebb74499731855dccf8f8a858b2e4Tony Lindgren omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); 101e41cccfe794d188b0ae7f17f01692bcbc0e0dc87Tony Lindgren omap3_pm_init_cpuidle(rx51_cpuidle_params); 102ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen omap_serial_init(); 103a4ca9dbe44a167d63545c7ac2b5a36d7b0b415b6Tony Lindgren 104a4ca9dbe44a167d63545c7ac2b5a36d7b0b415b6Tony Lindgren sdrc_params = nokia_get_sdram_timings(); 105a4ca9dbe44a167d63545c7ac2b5a36d7b0b415b6Tony Lindgren omap_sdrc_init(sdrc_params, sdrc_params); 106a4ca9dbe44a167d63545c7ac2b5a36d7b0b415b6Tony Lindgren 107884b8369ee78c081b5e5a99d1d09a95815d13c28Maulik Mankad usb_musb_init(&musb_board_data); 108ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen rx51_peripherals_init(); 1099fb97412c3be5d0d1dd0e9d7c5268469e4c942aaJean Pihet 1109fb97412c3be5d0d1dd0e9d7c5268469e4c942aaJean Pihet /* Ensure SDRC pins are mux'd for self-refresh */ 1114896e3940a063fb03195d05806d28970dc3f102bTony Lindgren omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); 1124896e3940a063fb03195d05806d28970dc3f102bTony Lindgren omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); 113a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman 114a4b41d8ed805e90bd855ac572eaeb13901d4af32Kevin Hilman platform_device_register(&leds_gpio); 115ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen} 116ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen 11726a064d5246e8ac51241d6ec2792aebf24f3b41aFelipe Contrerasstatic void __init rx51_reserve(void) 11826a064d5246e8ac51241d6ec2792aebf24f3b41aFelipe Contreras{ 11926a064d5246e8ac51241d6ec2792aebf24f3b41aFelipe Contreras rx51_video_mem_init(); 12026a064d5246e8ac51241d6ec2792aebf24f3b41aFelipe Contreras omap_reserve(); 12126a064d5246e8ac51241d6ec2792aebf24f3b41aFelipe Contreras} 12226a064d5246e8ac51241d6ec2792aebf24f3b41aFelipe Contreras 123ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri LeukkunenMACHINE_START(NOKIA_RX51, "Nokia RX-51 board") 124ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen /* Maintainer: Lauri Leukkunen <lauri.leukkunen@nokia.com> */ 1255e52b435b7bf0a884c8c4ad938180da6561ed5c0Nicolas Pitre .atag_offset = 0x100, 12626a064d5246e8ac51241d6ec2792aebf24f3b41aFelipe Contreras .reserve = rx51_reserve, 127e990a4060fcb78a1576d36e7327db11c0d278a6bTony Lindgren .map_io = omap3_map_io, 1288f5b5a41ebc750ffcc2c410371b2b4998955709eTony Lindgren .init_early = omap3430_init_early, 129741e3a89dee8a17aa9373975d51f130a65e1683dTony Lindgren .init_irq = omap3_init_irq, 1306b2f55d7851aa358d3a99cff344c560c4967f042Marc Zyngier .handle_irq = omap3_intc_handle_irq, 131ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri Leukkunen .init_machine = rx51_init, 132e74984e46e899c22137a385869fb4f3ae756e3dfTony Lindgren .timer = &omap3_timer, 133baa9588344d35d751d6e2b1677ec67e7b32d2878Russell King .restart = omap_prcm_restart, 134ffe7f95bb1a4d1e9ca5d252445dc38476e1a208eLauri LeukkunenMACHINE_END 135