1/* 2 * 3 * QNAP TS-11x/TS-21x Turbo NAS Board Setup 4 * 5 * Copyright (C) 2009 Martin Michlmayr <tbm@cyrius.com> 6 * Copyright (C) 2008 Byron Bradley <byron.bbradley@gmail.com> 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License 10 * as published by the Free Software Foundation; either version 11 * 2 of the License, or (at your option) any later version. 12 */ 13 14#include <linux/kernel.h> 15#include <linux/init.h> 16#include <linux/platform_device.h> 17#include <linux/i2c.h> 18#include <linux/mv643xx_eth.h> 19#include <linux/ata_platform.h> 20#include <linux/gpio_keys.h> 21#include <linux/input.h> 22#include <asm/mach-types.h> 23#include <asm/mach/arch.h> 24#include <mach/kirkwood.h> 25#include "common.h" 26#include "mpp.h" 27#include "tsx1x-common.h" 28 29static struct i2c_board_info __initdata qnap_ts219_i2c_rtc = { 30 I2C_BOARD_INFO("s35390a", 0x30), 31}; 32 33static struct mv643xx_eth_platform_data qnap_ts219_ge00_data = { 34 .phy_addr = MV643XX_ETH_PHY_ADDR(8), 35}; 36 37static struct mv_sata_platform_data qnap_ts219_sata_data = { 38 .n_ports = 2, 39}; 40 41static struct gpio_keys_button qnap_ts219_buttons[] = { 42 { 43 .code = KEY_COPY, 44 .gpio = 15, 45 .desc = "USB Copy", 46 .active_low = 1, 47 }, 48 { 49 .code = KEY_RESTART, 50 .gpio = 16, 51 .desc = "Reset", 52 .active_low = 1, 53 }, 54}; 55 56static struct gpio_keys_platform_data qnap_ts219_button_data = { 57 .buttons = qnap_ts219_buttons, 58 .nbuttons = ARRAY_SIZE(qnap_ts219_buttons), 59}; 60 61static struct platform_device qnap_ts219_button_device = { 62 .name = "gpio-keys", 63 .id = -1, 64 .num_resources = 0, 65 .dev = { 66 .platform_data = &qnap_ts219_button_data, 67 } 68}; 69 70static unsigned int qnap_ts219_mpp_config[] __initdata = { 71 MPP0_SPI_SCn, 72 MPP1_SPI_MOSI, 73 MPP2_SPI_SCK, 74 MPP3_SPI_MISO, 75 MPP4_SATA1_ACTn, 76 MPP5_SATA0_ACTn, 77 MPP8_TW0_SDA, 78 MPP9_TW0_SCK, 79 MPP10_UART0_TXD, 80 MPP11_UART0_RXD, 81 MPP13_UART1_TXD, /* PIC controller */ 82 MPP14_UART1_RXD, /* PIC controller */ 83 MPP15_GPIO, /* USB Copy button */ 84 MPP16_GPIO, /* Reset button */ 85 MPP36_GPIO, /* RAM: 0: 256 MB, 1: 512 MB */ 86 MPP44_GPIO, /* Board ID: 0: TS-11x, 1: TS-21x */ 87 0 88}; 89 90static void __init qnap_ts219_init(void) 91{ 92 /* 93 * Basic setup. Needs to be called early. 94 */ 95 kirkwood_init(); 96 kirkwood_mpp_conf(qnap_ts219_mpp_config); 97 98 kirkwood_uart0_init(); 99 kirkwood_uart1_init(); /* A PIC controller is connected here. */ 100 qnap_tsx1x_register_flash(); 101 kirkwood_i2c_init(); 102 i2c_register_board_info(0, &qnap_ts219_i2c_rtc, 1); 103 kirkwood_ge00_init(&qnap_ts219_ge00_data); 104 kirkwood_sata_init(&qnap_ts219_sata_data); 105 kirkwood_ehci_init(); 106 platform_device_register(&qnap_ts219_button_device); 107 108 pm_power_off = qnap_tsx1x_power_off; 109 110} 111 112static int __init ts219_pci_init(void) 113{ 114 if (machine_is_ts219()) 115 kirkwood_pcie_init(KW_PCIE0); 116 117 return 0; 118} 119subsys_initcall(ts219_pci_init); 120 121MACHINE_START(TS219, "QNAP TS-119/TS-219") 122 /* Maintainer: Martin Michlmayr <tbm@cyrius.com> */ 123 .phys_io = KIRKWOOD_REGS_PHYS_BASE, 124 .io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc, 125 .boot_params = 0x00000100, 126 .init_machine = qnap_ts219_init, 127 .map_io = kirkwood_map_io, 128 .init_irq = kirkwood_init_irq, 129 .timer = &kirkwood_timer, 130MACHINE_END 131