board-harmony.c revision 986afbe493b09846dffbe5c1bf9a428a839b6ca2
17768a13c252a97e13a552f88f642962768de1fa4Komal Shah/* 27768a13c252a97e13a552f88f642962768de1fa4Komal Shah * arch/arm/mach-tegra/board-harmony.c 37768a13c252a97e13a552f88f642962768de1fa4Komal Shah * 47768a13c252a97e13a552f88f642962768de1fa4Komal Shah * Copyright (C) 2010 Google, Inc. 57768a13c252a97e13a552f88f642962768de1fa4Komal Shah * 67768a13c252a97e13a552f88f642962768de1fa4Komal Shah * This software is licensed under the terms of the GNU General Public 77768a13c252a97e13a552f88f642962768de1fa4Komal Shah * License version 2, as published by the Free Software Foundation, and 87768a13c252a97e13a552f88f642962768de1fa4Komal Shah * may be copied, distributed, and modified under those terms. 97768a13c252a97e13a552f88f642962768de1fa4Komal Shah * 107768a13c252a97e13a552f88f642962768de1fa4Komal Shah * This program is distributed in the hope that it will be useful, 117768a13c252a97e13a552f88f642962768de1fa4Komal Shah * but WITHOUT ANY WARRANTY; without even the implied warranty of 127768a13c252a97e13a552f88f642962768de1fa4Komal Shah * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 137768a13c252a97e13a552f88f642962768de1fa4Komal Shah * GNU General Public License for more details. 147768a13c252a97e13a552f88f642962768de1fa4Komal Shah * 157768a13c252a97e13a552f88f642962768de1fa4Komal Shah */ 167768a13c252a97e13a552f88f642962768de1fa4Komal Shah 177768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <linux/kernel.h> 187768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <linux/init.h> 197768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <linux/platform_device.h> 207768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <linux/serial_8250.h> 217768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <linux/clk.h> 227768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <linux/dma-mapping.h> 237768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <linux/pda_power.h> 247768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <linux/io.h> 257768a13c252a97e13a552f88f642962768de1fa4Komal Shah 267768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <asm/mach-types.h> 277768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <asm/mach/arch.h> 287768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <asm/mach/time.h> 297768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <asm/setup.h> 307768a13c252a97e13a552f88f642962768de1fa4Komal Shah 317768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <mach/iomap.h> 327768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <mach/irqs.h> 337768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include <mach/sdhci.h> 347768a13c252a97e13a552f88f642962768de1fa4Komal Shah 357768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include "board.h" 367768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include "board-harmony.h" 377768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include "clock.h" 387768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include "devices.h" 397768a13c252a97e13a552f88f642962768de1fa4Komal Shah#include "gpio-names.h" 407768a13c252a97e13a552f88f642962768de1fa4Komal Shah 417768a13c252a97e13a552f88f642962768de1fa4Komal Shahstatic struct plat_serial8250_port debug_uart_platform_data[] = { 421977f032722c27ee3730284582fd3991ad9ac81bJiri Slaby { 437768a13c252a97e13a552f88f642962768de1fa4Komal Shah .membase = IO_ADDRESS(TEGRA_UARTD_BASE), 447768a13c252a97e13a552f88f642962768de1fa4Komal Shah .mapbase = TEGRA_UARTD_BASE, 457768a13c252a97e13a552f88f642962768de1fa4Komal Shah .irq = INT_UARTD, 46a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King .flags = UPF_BOOT_AUTOCONF, 477768a13c252a97e13a552f88f642962768de1fa4Komal Shah .iotype = UPIO_MEM, 48a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King .regshift = 2, 497768a13c252a97e13a552f88f642962768de1fa4Komal Shah .uartclk = 216000000, 507768a13c252a97e13a552f88f642962768de1fa4Komal Shah }, { 517768a13c252a97e13a552f88f642962768de1fa4Komal Shah .flags = 0 527768a13c252a97e13a552f88f642962768de1fa4Komal Shah } 537768a13c252a97e13a552f88f642962768de1fa4Komal Shah}; 547768a13c252a97e13a552f88f642962768de1fa4Komal Shah 557768a13c252a97e13a552f88f642962768de1fa4Komal Shahstatic struct platform_device debug_uart = { 567768a13c252a97e13a552f88f642962768de1fa4Komal Shah .name = "serial8250", 577768a13c252a97e13a552f88f642962768de1fa4Komal Shah .id = PLAT8250_DEV_PLATFORM, 587768a13c252a97e13a552f88f642962768de1fa4Komal Shah .dev = { 597768a13c252a97e13a552f88f642962768de1fa4Komal Shah .platform_data = debug_uart_platform_data, 607768a13c252a97e13a552f88f642962768de1fa4Komal Shah }, 617768a13c252a97e13a552f88f642962768de1fa4Komal Shah}; 627768a13c252a97e13a552f88f642962768de1fa4Komal Shah 637768a13c252a97e13a552f88f642962768de1fa4Komal Shahstatic struct platform_device *harmony_devices[] __initdata = { 647768a13c252a97e13a552f88f642962768de1fa4Komal Shah &debug_uart, 657768a13c252a97e13a552f88f642962768de1fa4Komal Shah &tegra_sdhci_device1, 667768a13c252a97e13a552f88f642962768de1fa4Komal Shah &tegra_sdhci_device2, 677768a13c252a97e13a552f88f642962768de1fa4Komal Shah &tegra_sdhci_device4, 687768a13c252a97e13a552f88f642962768de1fa4Komal Shah}; 697768a13c252a97e13a552f88f642962768de1fa4Komal Shah 707768a13c252a97e13a552f88f642962768de1fa4Komal Shahstatic void __init tegra_harmony_fixup(struct machine_desc *desc, 717768a13c252a97e13a552f88f642962768de1fa4Komal Shah struct tag *tags, char **cmdline, struct meminfo *mi) 727768a13c252a97e13a552f88f642962768de1fa4Komal Shah{ 737768a13c252a97e13a552f88f642962768de1fa4Komal Shah mi->nr_banks = 2; 747768a13c252a97e13a552f88f642962768de1fa4Komal Shah mi->bank[0].start = PHYS_OFFSET; 757768a13c252a97e13a552f88f642962768de1fa4Komal Shah mi->bank[0].size = 448 * SZ_1M; 767768a13c252a97e13a552f88f642962768de1fa4Komal Shah mi->bank[1].start = SZ_512M; 777768a13c252a97e13a552f88f642962768de1fa4Komal Shah mi->bank[1].size = SZ_512M; 787768a13c252a97e13a552f88f642962768de1fa4Komal Shah} 797768a13c252a97e13a552f88f642962768de1fa4Komal Shah 807768a13c252a97e13a552f88f642962768de1fa4Komal Shahstatic __initdata struct tegra_clk_init_table harmony_clk_init_table[] = { 817768a13c252a97e13a552f88f642962768de1fa4Komal Shah /* name parent rate enabled */ 827768a13c252a97e13a552f88f642962768de1fa4Komal Shah { "uartd", "pll_p", 216000000, true }, 837768a13c252a97e13a552f88f642962768de1fa4Komal Shah { NULL, NULL, 0, 0}, 847768a13c252a97e13a552f88f642962768de1fa4Komal Shah}; 857768a13c252a97e13a552f88f642962768de1fa4Komal Shah 867768a13c252a97e13a552f88f642962768de1fa4Komal Shah 877768a13c252a97e13a552f88f642962768de1fa4Komal Shahstatic struct tegra_sdhci_platform_data sdhci_pdata1 = { 887768a13c252a97e13a552f88f642962768de1fa4Komal Shah .cd_gpio = -1, 897768a13c252a97e13a552f88f642962768de1fa4Komal Shah .wp_gpio = -1, 907768a13c252a97e13a552f88f642962768de1fa4Komal Shah .power_gpio = -1, 917768a13c252a97e13a552f88f642962768de1fa4Komal Shah}; 927768a13c252a97e13a552f88f642962768de1fa4Komal Shah 937768a13c252a97e13a552f88f642962768de1fa4Komal Shahstatic struct tegra_sdhci_platform_data sdhci_pdata2 = { 947768a13c252a97e13a552f88f642962768de1fa4Komal Shah .cd_gpio = TEGRA_GPIO_SD2_CD, 957768a13c252a97e13a552f88f642962768de1fa4Komal Shah .wp_gpio = TEGRA_GPIO_SD2_WP, 967768a13c252a97e13a552f88f642962768de1fa4Komal Shah .power_gpio = TEGRA_GPIO_SD2_POWER, 977768a13c252a97e13a552f88f642962768de1fa4Komal Shah}; 987768a13c252a97e13a552f88f642962768de1fa4Komal Shah 997768a13c252a97e13a552f88f642962768de1fa4Komal Shahstatic struct tegra_sdhci_platform_data sdhci_pdata4 = { 1007768a13c252a97e13a552f88f642962768de1fa4Komal Shah .cd_gpio = TEGRA_GPIO_SD4_CD, 1017768a13c252a97e13a552f88f642962768de1fa4Komal Shah .wp_gpio = TEGRA_GPIO_SD4_WP, 1027768a13c252a97e13a552f88f642962768de1fa4Komal Shah .power_gpio = TEGRA_GPIO_SD4_POWER, 1037768a13c252a97e13a552f88f642962768de1fa4Komal Shah .is_8bit = 1, 1047768a13c252a97e13a552f88f642962768de1fa4Komal Shah}; 1057768a13c252a97e13a552f88f642962768de1fa4Komal Shah 1067768a13c252a97e13a552f88f642962768de1fa4Komal Shahstatic void __init tegra_harmony_init(void) 1077768a13c252a97e13a552f88f642962768de1fa4Komal Shah{ 1087768a13c252a97e13a552f88f642962768de1fa4Komal Shah tegra_clk_init_from_table(harmony_clk_init_table); 1097768a13c252a97e13a552f88f642962768de1fa4Komal Shah 1107768a13c252a97e13a552f88f642962768de1fa4Komal Shah harmony_pinmux_init(); 1117768a13c252a97e13a552f88f642962768de1fa4Komal Shah 1127768a13c252a97e13a552f88f642962768de1fa4Komal Shah tegra_sdhci_device1.dev.platform_data = &sdhci_pdata1; 1137768a13c252a97e13a552f88f642962768de1fa4Komal Shah tegra_sdhci_device2.dev.platform_data = &sdhci_pdata2; 1147768a13c252a97e13a552f88f642962768de1fa4Komal Shah tegra_sdhci_device4.dev.platform_data = &sdhci_pdata4; 1157768a13c252a97e13a552f88f642962768de1fa4Komal Shah 1167768a13c252a97e13a552f88f642962768de1fa4Komal Shah platform_add_devices(harmony_devices, ARRAY_SIZE(harmony_devices)); 1177768a13c252a97e13a552f88f642962768de1fa4Komal Shah} 1187768a13c252a97e13a552f88f642962768de1fa4Komal Shah 1197768a13c252a97e13a552f88f642962768de1fa4Komal ShahMACHINE_START(HARMONY, "harmony") 1207768a13c252a97e13a552f88f642962768de1fa4Komal Shah .boot_params = 0x00000100, 1217768a13c252a97e13a552f88f642962768de1fa4Komal Shah .fixup = tegra_harmony_fixup, 1227768a13c252a97e13a552f88f642962768de1fa4Komal Shah .map_io = tegra_map_common_io, 1237768a13c252a97e13a552f88f642962768de1fa4Komal Shah .init_early = tegra_init_early, 1247768a13c252a97e13a552f88f642962768de1fa4Komal Shah .init_irq = tegra_init_irq, 1257768a13c252a97e13a552f88f642962768de1fa4Komal Shah .timer = &tegra_timer, 1267768a13c252a97e13a552f88f642962768de1fa4Komal Shah .init_machine = tegra_harmony_init, 1277768a13c252a97e13a552f88f642962768de1fa4Komal ShahMACHINE_END 1287768a13c252a97e13a552f88f642962768de1fa4Komal Shah