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