165b935aaSMarc Dietrich /*
265b935aaSMarc Dietrich  * arch/arm/mach-tegra/board-paz00.c
365b935aaSMarc Dietrich  *
465b935aaSMarc Dietrich  * Copyright (C) 2011 Marc Dietrich <marvin24@gmx.de>
565b935aaSMarc Dietrich  *
665b935aaSMarc Dietrich  * Based on board-harmony.c
765b935aaSMarc Dietrich  * Copyright (C) 2010 Google, Inc.
865b935aaSMarc Dietrich  *
965b935aaSMarc Dietrich  * This software is licensed under the terms of the GNU General Public
1065b935aaSMarc Dietrich  * License version 2, as published by the Free Software Foundation, and
1165b935aaSMarc Dietrich  * may be copied, distributed, and modified under those terms.
1265b935aaSMarc Dietrich  *
1365b935aaSMarc Dietrich  * This program is distributed in the hope that it will be useful,
1465b935aaSMarc Dietrich  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1565b935aaSMarc Dietrich  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1665b935aaSMarc Dietrich  * GNU General Public License for more details.
1765b935aaSMarc Dietrich  *
1865b935aaSMarc Dietrich  */
1965b935aaSMarc Dietrich 
2065b935aaSMarc Dietrich #include <linux/kernel.h>
2165b935aaSMarc Dietrich #include <linux/init.h>
2265b935aaSMarc Dietrich #include <linux/platform_device.h>
2365b935aaSMarc Dietrich #include <linux/serial_8250.h>
2465b935aaSMarc Dietrich #include <linux/clk.h>
2565b935aaSMarc Dietrich #include <linux/dma-mapping.h>
2665b935aaSMarc Dietrich #include <linux/pda_power.h>
2765b935aaSMarc Dietrich #include <linux/io.h>
28dda9cd28SMarc Dietrich #include <linux/i2c.h>
2965b935aaSMarc Dietrich 
3065b935aaSMarc Dietrich #include <asm/mach-types.h>
3165b935aaSMarc Dietrich #include <asm/mach/arch.h>
3265b935aaSMarc Dietrich #include <asm/mach/time.h>
3365b935aaSMarc Dietrich #include <asm/setup.h>
3465b935aaSMarc Dietrich 
3565b935aaSMarc Dietrich #include <mach/iomap.h>
3665b935aaSMarc Dietrich #include <mach/irqs.h>
3765b935aaSMarc Dietrich #include <mach/sdhci.h>
3813db7a7fSMarc Dietrich #include <mach/gpio.h>
3965b935aaSMarc Dietrich 
4065b935aaSMarc Dietrich #include "board.h"
4165b935aaSMarc Dietrich #include "board-paz00.h"
4265b935aaSMarc Dietrich #include "clock.h"
4365b935aaSMarc Dietrich #include "devices.h"
4465b935aaSMarc Dietrich #include "gpio-names.h"
4565b935aaSMarc Dietrich 
4665b935aaSMarc Dietrich static struct plat_serial8250_port debug_uart_platform_data[] = {
4765b935aaSMarc Dietrich 	{
48de7164dbSMarc Dietrich 		/* serial port on JP1 */
49de7164dbSMarc Dietrich 		.membase	= IO_ADDRESS(TEGRA_UARTA_BASE),
50de7164dbSMarc Dietrich 		.mapbase	= TEGRA_UARTA_BASE,
51de7164dbSMarc Dietrich 		.irq		= INT_UARTA,
52de7164dbSMarc Dietrich 		.flags		= UPF_BOOT_AUTOCONF,
53de7164dbSMarc Dietrich 		.iotype		= UPIO_MEM,
54de7164dbSMarc Dietrich 		.regshift	= 2,
55de7164dbSMarc Dietrich 		.uartclk	= 216000000,
56de7164dbSMarc Dietrich 	}, {
57de7164dbSMarc Dietrich 		/* serial port on mini-pcie */
5865b935aaSMarc Dietrich 		.membase	= IO_ADDRESS(TEGRA_UARTD_BASE),
5965b935aaSMarc Dietrich 		.mapbase	= TEGRA_UARTD_BASE,
6065b935aaSMarc Dietrich 		.irq		= INT_UARTD,
6165b935aaSMarc Dietrich 		.flags		= UPF_BOOT_AUTOCONF,
6265b935aaSMarc Dietrich 		.iotype		= UPIO_MEM,
6365b935aaSMarc Dietrich 		.regshift	= 2,
6465b935aaSMarc Dietrich 		.uartclk	= 216000000,
6565b935aaSMarc Dietrich 	}, {
6665b935aaSMarc Dietrich 		.flags		= 0
6765b935aaSMarc Dietrich 	}
6865b935aaSMarc Dietrich };
6965b935aaSMarc Dietrich 
7065b935aaSMarc Dietrich static struct platform_device debug_uart = {
7165b935aaSMarc Dietrich 	.name = "serial8250",
7265b935aaSMarc Dietrich 	.id = PLAT8250_DEV_PLATFORM,
7365b935aaSMarc Dietrich 	.dev = {
7465b935aaSMarc Dietrich 		.platform_data = debug_uart_platform_data,
7565b935aaSMarc Dietrich 	},
7665b935aaSMarc Dietrich };
7765b935aaSMarc Dietrich 
7865b935aaSMarc Dietrich static struct platform_device *paz00_devices[] __initdata = {
7965b935aaSMarc Dietrich 	&debug_uart,
8065b935aaSMarc Dietrich 	&tegra_sdhci_device1,
8165b935aaSMarc Dietrich 	&tegra_sdhci_device4,
8265b935aaSMarc Dietrich };
8365b935aaSMarc Dietrich 
84dda9cd28SMarc Dietrich static void paz00_i2c_init(void)
85dda9cd28SMarc Dietrich {
86dda9cd28SMarc Dietrich 	platform_device_register(&tegra_i2c_device1);
87dda9cd28SMarc Dietrich 	platform_device_register(&tegra_i2c_device2);
88dda9cd28SMarc Dietrich 	platform_device_register(&tegra_i2c_device4);
89dda9cd28SMarc Dietrich }
90dda9cd28SMarc Dietrich 
9113db7a7fSMarc Dietrich static void paz00_usb_init(void)
9213db7a7fSMarc Dietrich {
9313db7a7fSMarc Dietrich 	platform_device_register(&tegra_ehci2_device);
9413db7a7fSMarc Dietrich 	platform_device_register(&tegra_ehci3_device);
9513db7a7fSMarc Dietrich }
9613db7a7fSMarc Dietrich 
9765b935aaSMarc Dietrich static void __init tegra_paz00_fixup(struct machine_desc *desc,
9865b935aaSMarc Dietrich 	struct tag *tags, char **cmdline, struct meminfo *mi)
9965b935aaSMarc Dietrich {
10065b935aaSMarc Dietrich 	mi->nr_banks = 1;
10165b935aaSMarc Dietrich 	mi->bank[0].start = PHYS_OFFSET;
10265b935aaSMarc Dietrich 	mi->bank[0].size = 448 * SZ_1M;
10365b935aaSMarc Dietrich }
10465b935aaSMarc Dietrich 
10565b935aaSMarc Dietrich static __initdata struct tegra_clk_init_table paz00_clk_init_table[] = {
10665b935aaSMarc Dietrich 	/* name		parent		rate		enabled */
107de7164dbSMarc Dietrich 	{ "uarta",	"pll_p",	216000000,	true },
10865b935aaSMarc Dietrich 	{ "uartd",	"pll_p",	216000000,	true },
10965b935aaSMarc Dietrich 	{ NULL,		NULL,		0,		0},
11065b935aaSMarc Dietrich };
11165b935aaSMarc Dietrich 
11265b935aaSMarc Dietrich static struct tegra_sdhci_platform_data sdhci_pdata1 = {
11365b935aaSMarc Dietrich 	.cd_gpio	= TEGRA_GPIO_SD1_CD,
11465b935aaSMarc Dietrich 	.wp_gpio	= TEGRA_GPIO_SD1_WP,
11565b935aaSMarc Dietrich 	.power_gpio	= TEGRA_GPIO_SD1_POWER,
11665b935aaSMarc Dietrich };
11765b935aaSMarc Dietrich 
11841cdc62eSMarc Dietrich static struct tegra_sdhci_platform_data sdhci_pdata4 = {
11965b935aaSMarc Dietrich 	.cd_gpio	= -1,
12065b935aaSMarc Dietrich 	.wp_gpio	= -1,
12165b935aaSMarc Dietrich 	.power_gpio	= -1,
12265b935aaSMarc Dietrich 	.is_8bit	= 1,
12365b935aaSMarc Dietrich };
12465b935aaSMarc Dietrich 
12565b935aaSMarc Dietrich static void __init tegra_paz00_init(void)
12665b935aaSMarc Dietrich {
12765b935aaSMarc Dietrich 	tegra_clk_init_from_table(paz00_clk_init_table);
12865b935aaSMarc Dietrich 
12965b935aaSMarc Dietrich 	paz00_pinmux_init();
13065b935aaSMarc Dietrich 
13165b935aaSMarc Dietrich 	tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1;
13265b935aaSMarc Dietrich 	tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4;
13365b935aaSMarc Dietrich 
13465b935aaSMarc Dietrich 	platform_add_devices(paz00_devices, ARRAY_SIZE(paz00_devices));
135dda9cd28SMarc Dietrich 
136dda9cd28SMarc Dietrich 	paz00_i2c_init();
13713db7a7fSMarc Dietrich 	paz00_usb_init();
13865b935aaSMarc Dietrich }
13965b935aaSMarc Dietrich 
140d1890d4dSMarc Dietrich MACHINE_START(PAZ00, "Toshiba AC100 / Dynabook AZ")
14165b935aaSMarc Dietrich 	.boot_params	= 0x00000100,
14265b935aaSMarc Dietrich 	.fixup		= tegra_paz00_fixup,
14365b935aaSMarc Dietrich 	.map_io         = tegra_map_common_io,
14465b935aaSMarc Dietrich 	.init_early	= tegra_init_early,
14565b935aaSMarc Dietrich 	.init_irq       = tegra_init_irq,
14665b935aaSMarc Dietrich 	.timer          = &tegra_timer,
14765b935aaSMarc Dietrich 	.init_machine   = tegra_paz00_init,
14865b935aaSMarc Dietrich MACHINE_END
149