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>
299aaa15a7SMarc Dietrich #include <linux/rfkill-gpio.h>
3065b935aaSMarc Dietrich 
3165b935aaSMarc Dietrich #include <asm/mach-types.h>
3265b935aaSMarc Dietrich #include <asm/mach/arch.h>
3365b935aaSMarc Dietrich #include <asm/mach/time.h>
3465b935aaSMarc Dietrich #include <asm/setup.h>
3565b935aaSMarc Dietrich 
3665b935aaSMarc Dietrich #include <mach/iomap.h>
3765b935aaSMarc Dietrich #include <mach/irqs.h>
3865b935aaSMarc Dietrich #include <mach/sdhci.h>
3913db7a7fSMarc Dietrich #include <mach/gpio.h>
4065b935aaSMarc Dietrich 
4165b935aaSMarc Dietrich #include "board.h"
4265b935aaSMarc Dietrich #include "board-paz00.h"
4365b935aaSMarc Dietrich #include "clock.h"
4465b935aaSMarc Dietrich #include "devices.h"
4565b935aaSMarc Dietrich #include "gpio-names.h"
4665b935aaSMarc Dietrich 
4765b935aaSMarc Dietrich static struct plat_serial8250_port debug_uart_platform_data[] = {
4865b935aaSMarc Dietrich 	{
49de7164dbSMarc Dietrich 		/* serial port on JP1 */
50de7164dbSMarc Dietrich 		.membase	= IO_ADDRESS(TEGRA_UARTA_BASE),
51de7164dbSMarc Dietrich 		.mapbase	= TEGRA_UARTA_BASE,
52de7164dbSMarc Dietrich 		.irq		= INT_UARTA,
53de7164dbSMarc Dietrich 		.flags		= UPF_BOOT_AUTOCONF,
54de7164dbSMarc Dietrich 		.iotype		= UPIO_MEM,
55de7164dbSMarc Dietrich 		.regshift	= 2,
56de7164dbSMarc Dietrich 		.uartclk	= 216000000,
57de7164dbSMarc Dietrich 	}, {
58de7164dbSMarc Dietrich 		/* serial port on mini-pcie */
5965b935aaSMarc Dietrich 		.membase	= IO_ADDRESS(TEGRA_UARTD_BASE),
6065b935aaSMarc Dietrich 		.mapbase	= TEGRA_UARTD_BASE,
6165b935aaSMarc Dietrich 		.irq		= INT_UARTD,
6265b935aaSMarc Dietrich 		.flags		= UPF_BOOT_AUTOCONF,
6365b935aaSMarc Dietrich 		.iotype		= UPIO_MEM,
6465b935aaSMarc Dietrich 		.regshift	= 2,
6565b935aaSMarc Dietrich 		.uartclk	= 216000000,
6665b935aaSMarc Dietrich 	}, {
6765b935aaSMarc Dietrich 		.flags		= 0
6865b935aaSMarc Dietrich 	}
6965b935aaSMarc Dietrich };
7065b935aaSMarc Dietrich 
7165b935aaSMarc Dietrich static struct platform_device debug_uart = {
7265b935aaSMarc Dietrich 	.name = "serial8250",
7365b935aaSMarc Dietrich 	.id = PLAT8250_DEV_PLATFORM,
7465b935aaSMarc Dietrich 	.dev = {
7565b935aaSMarc Dietrich 		.platform_data = debug_uart_platform_data,
7665b935aaSMarc Dietrich 	},
7765b935aaSMarc Dietrich };
7865b935aaSMarc Dietrich 
799aaa15a7SMarc Dietrich static struct rfkill_gpio_platform_data wifi_rfkill_platform_data = {
809aaa15a7SMarc Dietrich 	.name		= "wifi_rfkill",
819aaa15a7SMarc Dietrich 	.reset_gpio	= TEGRA_WIFI_RST,
829aaa15a7SMarc Dietrich 	.shutdown_gpio	= TEGRA_WIFI_PWRN,
839aaa15a7SMarc Dietrich 	.type	= RFKILL_TYPE_WLAN,
849aaa15a7SMarc Dietrich };
859aaa15a7SMarc Dietrich 
869aaa15a7SMarc Dietrich static struct platform_device wifi_rfkill_device = {
879aaa15a7SMarc Dietrich 	.name	= "rfkill_gpio",
889aaa15a7SMarc Dietrich 	.id	= -1,
899aaa15a7SMarc Dietrich 	.dev	= {
909aaa15a7SMarc Dietrich 		.platform_data = &wifi_rfkill_platform_data,
919aaa15a7SMarc Dietrich 	},
929aaa15a7SMarc Dietrich };
939aaa15a7SMarc Dietrich 
9465b935aaSMarc Dietrich static struct platform_device *paz00_devices[] __initdata = {
9565b935aaSMarc Dietrich 	&debug_uart,
9665b935aaSMarc Dietrich 	&tegra_sdhci_device1,
9765b935aaSMarc Dietrich 	&tegra_sdhci_device4,
989aaa15a7SMarc Dietrich 	&wifi_rfkill_device,
9965b935aaSMarc Dietrich };
10065b935aaSMarc Dietrich 
101dda9cd28SMarc Dietrich static void paz00_i2c_init(void)
102dda9cd28SMarc Dietrich {
103dda9cd28SMarc Dietrich 	platform_device_register(&tegra_i2c_device1);
104dda9cd28SMarc Dietrich 	platform_device_register(&tegra_i2c_device2);
105dda9cd28SMarc Dietrich 	platform_device_register(&tegra_i2c_device4);
106dda9cd28SMarc Dietrich }
107dda9cd28SMarc Dietrich 
10813db7a7fSMarc Dietrich static void paz00_usb_init(void)
10913db7a7fSMarc Dietrich {
11013db7a7fSMarc Dietrich 	platform_device_register(&tegra_ehci2_device);
11113db7a7fSMarc Dietrich 	platform_device_register(&tegra_ehci3_device);
11213db7a7fSMarc Dietrich }
11313db7a7fSMarc Dietrich 
11465b935aaSMarc Dietrich static void __init tegra_paz00_fixup(struct machine_desc *desc,
11565b935aaSMarc Dietrich 	struct tag *tags, char **cmdline, struct meminfo *mi)
11665b935aaSMarc Dietrich {
11765b935aaSMarc Dietrich 	mi->nr_banks = 1;
11865b935aaSMarc Dietrich 	mi->bank[0].start = PHYS_OFFSET;
11965b935aaSMarc Dietrich 	mi->bank[0].size = 448 * SZ_1M;
12065b935aaSMarc Dietrich }
12165b935aaSMarc Dietrich 
12265b935aaSMarc Dietrich static __initdata struct tegra_clk_init_table paz00_clk_init_table[] = {
12365b935aaSMarc Dietrich 	/* name		parent		rate		enabled */
124de7164dbSMarc Dietrich 	{ "uarta",	"pll_p",	216000000,	true },
12565b935aaSMarc Dietrich 	{ "uartd",	"pll_p",	216000000,	true },
12665b935aaSMarc Dietrich 	{ NULL,		NULL,		0,		0},
12765b935aaSMarc Dietrich };
12865b935aaSMarc Dietrich 
12965b935aaSMarc Dietrich static struct tegra_sdhci_platform_data sdhci_pdata1 = {
13065b935aaSMarc Dietrich 	.cd_gpio	= TEGRA_GPIO_SD1_CD,
13165b935aaSMarc Dietrich 	.wp_gpio	= TEGRA_GPIO_SD1_WP,
13265b935aaSMarc Dietrich 	.power_gpio	= TEGRA_GPIO_SD1_POWER,
13365b935aaSMarc Dietrich };
13465b935aaSMarc Dietrich 
13541cdc62eSMarc Dietrich static struct tegra_sdhci_platform_data sdhci_pdata4 = {
13665b935aaSMarc Dietrich 	.cd_gpio	= -1,
13765b935aaSMarc Dietrich 	.wp_gpio	= -1,
13865b935aaSMarc Dietrich 	.power_gpio	= -1,
13965b935aaSMarc Dietrich 	.is_8bit	= 1,
14065b935aaSMarc Dietrich };
14165b935aaSMarc Dietrich 
14265b935aaSMarc Dietrich static void __init tegra_paz00_init(void)
14365b935aaSMarc Dietrich {
14465b935aaSMarc Dietrich 	tegra_clk_init_from_table(paz00_clk_init_table);
14565b935aaSMarc Dietrich 
14665b935aaSMarc Dietrich 	paz00_pinmux_init();
14765b935aaSMarc Dietrich 
14865b935aaSMarc Dietrich 	tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1;
14965b935aaSMarc Dietrich 	tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4;
15065b935aaSMarc Dietrich 
15165b935aaSMarc Dietrich 	platform_add_devices(paz00_devices, ARRAY_SIZE(paz00_devices));
152dda9cd28SMarc Dietrich 
153dda9cd28SMarc Dietrich 	paz00_i2c_init();
15413db7a7fSMarc Dietrich 	paz00_usb_init();
15565b935aaSMarc Dietrich }
15665b935aaSMarc Dietrich 
157d1890d4dSMarc Dietrich MACHINE_START(PAZ00, "Toshiba AC100 / Dynabook AZ")
15865b935aaSMarc Dietrich 	.boot_params	= 0x00000100,
15965b935aaSMarc Dietrich 	.fixup		= tegra_paz00_fixup,
16065b935aaSMarc Dietrich 	.map_io         = tegra_map_common_io,
16165b935aaSMarc Dietrich 	.init_early	= tegra_init_early,
16265b935aaSMarc Dietrich 	.init_irq       = tegra_init_irq,
16365b935aaSMarc Dietrich 	.timer          = &tegra_timer,
16465b935aaSMarc Dietrich 	.init_machine   = tegra_paz00_init,
16565b935aaSMarc Dietrich MACHINE_END
166