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> 29dda9cd28SMarc Dietrich #include <linux/i2c-tegra.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> 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 { 4865b935aaSMarc Dietrich .membase = IO_ADDRESS(TEGRA_UARTD_BASE), 4965b935aaSMarc Dietrich .mapbase = TEGRA_UARTD_BASE, 5065b935aaSMarc Dietrich .irq = INT_UARTD, 5165b935aaSMarc Dietrich .flags = UPF_BOOT_AUTOCONF, 5265b935aaSMarc Dietrich .iotype = UPIO_MEM, 5365b935aaSMarc Dietrich .regshift = 2, 5465b935aaSMarc Dietrich .uartclk = 216000000, 5565b935aaSMarc Dietrich }, { 5665b935aaSMarc Dietrich .flags = 0 5765b935aaSMarc Dietrich } 5865b935aaSMarc Dietrich }; 5965b935aaSMarc Dietrich 6065b935aaSMarc Dietrich static struct platform_device debug_uart = { 6165b935aaSMarc Dietrich .name = "serial8250", 6265b935aaSMarc Dietrich .id = PLAT8250_DEV_PLATFORM, 6365b935aaSMarc Dietrich .dev = { 6465b935aaSMarc Dietrich .platform_data = debug_uart_platform_data, 6565b935aaSMarc Dietrich }, 6665b935aaSMarc Dietrich }; 6765b935aaSMarc Dietrich 6865b935aaSMarc Dietrich static struct platform_device *paz00_devices[] __initdata = { 6965b935aaSMarc Dietrich &debug_uart, 7065b935aaSMarc Dietrich &tegra_sdhci_device1, 7165b935aaSMarc Dietrich &tegra_sdhci_device2, 7265b935aaSMarc Dietrich &tegra_sdhci_device4, 7365b935aaSMarc Dietrich }; 7465b935aaSMarc Dietrich 75dda9cd28SMarc Dietrich static struct tegra_i2c_platform_data paz00_i2c1_platform_data = { 76dda9cd28SMarc Dietrich .bus_clk_rate = 400000, 77dda9cd28SMarc Dietrich }; 78dda9cd28SMarc Dietrich 79dda9cd28SMarc Dietrich static struct tegra_i2c_platform_data paz00_i2c2_platform_data = { 80dda9cd28SMarc Dietrich .bus_clk_rate = 400000, 81dda9cd28SMarc Dietrich }; 82dda9cd28SMarc Dietrich 83dda9cd28SMarc Dietrich static struct tegra_i2c_platform_data paz00_dvc_platform_data = { 84dda9cd28SMarc Dietrich .bus_clk_rate = 400000, 85dda9cd28SMarc Dietrich }; 86dda9cd28SMarc Dietrich 87dda9cd28SMarc Dietrich static void paz00_i2c_init(void) 88dda9cd28SMarc Dietrich { 89dda9cd28SMarc Dietrich tegra_i2c_device1.dev.platform_data = &paz00_i2c1_platform_data; 90dda9cd28SMarc Dietrich tegra_i2c_device2.dev.platform_data = &paz00_i2c2_platform_data; 91dda9cd28SMarc Dietrich tegra_i2c_device4.dev.platform_data = &paz00_dvc_platform_data; 92dda9cd28SMarc Dietrich 93dda9cd28SMarc Dietrich platform_device_register(&tegra_i2c_device1); 94dda9cd28SMarc Dietrich platform_device_register(&tegra_i2c_device2); 95dda9cd28SMarc Dietrich platform_device_register(&tegra_i2c_device4); 96dda9cd28SMarc Dietrich } 97dda9cd28SMarc Dietrich 9865b935aaSMarc Dietrich static void __init tegra_paz00_fixup(struct machine_desc *desc, 9965b935aaSMarc Dietrich struct tag *tags, char **cmdline, struct meminfo *mi) 10065b935aaSMarc Dietrich { 10165b935aaSMarc Dietrich mi->nr_banks = 1; 10265b935aaSMarc Dietrich mi->bank[0].start = PHYS_OFFSET; 10365b935aaSMarc Dietrich mi->bank[0].size = 448 * SZ_1M; 10465b935aaSMarc Dietrich } 10565b935aaSMarc Dietrich 10665b935aaSMarc Dietrich static __initdata struct tegra_clk_init_table paz00_clk_init_table[] = { 10765b935aaSMarc Dietrich /* name parent rate enabled */ 10865b935aaSMarc Dietrich { "uartd", "pll_p", 216000000, true }, 10965b935aaSMarc Dietrich { NULL, NULL, 0, 0}, 11065b935aaSMarc Dietrich }; 11165b935aaSMarc Dietrich 11265b935aaSMarc Dietrich 11365b935aaSMarc Dietrich static struct tegra_sdhci_platform_data sdhci_pdata1 = { 11465b935aaSMarc Dietrich .cd_gpio = TEGRA_GPIO_SD1_CD, 11565b935aaSMarc Dietrich .wp_gpio = TEGRA_GPIO_SD1_WP, 11665b935aaSMarc Dietrich .power_gpio = TEGRA_GPIO_SD1_POWER, 11765b935aaSMarc Dietrich }; 11865b935aaSMarc Dietrich 11965b935aaSMarc Dietrich static struct tegra_sdhci_platform_data sdhci_pdata2 = { 12065b935aaSMarc Dietrich .cd_gpio = -1, 12165b935aaSMarc Dietrich .wp_gpio = -1, 12265b935aaSMarc Dietrich .power_gpio = -1, 12365b935aaSMarc Dietrich }; 12465b935aaSMarc Dietrich 12565b935aaSMarc Dietrich static struct tegra_sdhci_platform_data sdhci_pdata4 = { 12665b935aaSMarc Dietrich .cd_gpio = TEGRA_GPIO_SD4_CD, 12765b935aaSMarc Dietrich .wp_gpio = TEGRA_GPIO_SD4_WP, 12865b935aaSMarc Dietrich .power_gpio = TEGRA_GPIO_SD4_POWER, 12965b935aaSMarc Dietrich .is_8bit = 1, 13065b935aaSMarc Dietrich }; 13165b935aaSMarc Dietrich 13265b935aaSMarc Dietrich static void __init tegra_paz00_init(void) 13365b935aaSMarc Dietrich { 13465b935aaSMarc Dietrich tegra_clk_init_from_table(paz00_clk_init_table); 13565b935aaSMarc Dietrich 13665b935aaSMarc Dietrich paz00_pinmux_init(); 13765b935aaSMarc Dietrich 13865b935aaSMarc Dietrich tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; 13965b935aaSMarc Dietrich tegra_sdhci_device2.dev.platform_data = &sdhci_pdata2; 14065b935aaSMarc Dietrich tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; 14165b935aaSMarc Dietrich 14265b935aaSMarc Dietrich platform_add_devices(paz00_devices, ARRAY_SIZE(paz00_devices)); 143dda9cd28SMarc Dietrich 144dda9cd28SMarc Dietrich paz00_i2c_init(); 14565b935aaSMarc Dietrich } 14665b935aaSMarc Dietrich 14765b935aaSMarc Dietrich MACHINE_START(PAZ00, "paz00") 14865b935aaSMarc Dietrich .boot_params = 0x00000100, 14965b935aaSMarc Dietrich .fixup = tegra_paz00_fixup, 15065b935aaSMarc Dietrich .map_io = tegra_map_common_io, 15165b935aaSMarc Dietrich .init_early = tegra_init_early, 15265b935aaSMarc Dietrich .init_irq = tegra_init_irq, 15365b935aaSMarc Dietrich .timer = &tegra_timer, 15465b935aaSMarc Dietrich .init_machine = tegra_paz00_init, 15565b935aaSMarc Dietrich MACHINE_END 156