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