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