• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/arm/mach-kirkwood/
1/*
2 *
3 * HP t5325 Thin Client setup
4 *
5 * Copyright (C) 2010  Martin Michlmayr <tbm@cyrius.com>
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 */
12
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/platform_device.h>
16#include <linux/mtd/physmap.h>
17#include <linux/spi/flash.h>
18#include <linux/spi/spi.h>
19#include <linux/spi/orion_spi.h>
20#include <linux/i2c.h>
21#include <linux/mv643xx_eth.h>
22#include <linux/ata_platform.h>
23#include <linux/gpio.h>
24#include <linux/gpio_keys.h>
25#include <linux/input.h>
26#include <asm/mach-types.h>
27#include <asm/mach/arch.h>
28#include <mach/kirkwood.h>
29#include "common.h"
30#include "mpp.h"
31
32struct mtd_partition hp_t5325_partitions[] = {
33	{
34		.name		= "u-boot env",
35		.size		= SZ_64K,
36		.offset		= SZ_512K + SZ_256K,
37	},
38	{
39		.name		= "permanent u-boot env",
40		.size		= SZ_64K,
41		.offset		= MTDPART_OFS_APPEND,
42		.mask_flags	= MTD_WRITEABLE,
43	},
44	{
45		.name		= "HP env",
46		.size		= SZ_64K,
47		.offset		= MTDPART_OFS_APPEND,
48	},
49	{
50		.name		= "u-boot",
51		.size		= SZ_512K,
52		.offset		= 0,
53		.mask_flags	= MTD_WRITEABLE,
54	},
55	{
56		.name		= "SSD firmware",
57		.size		= SZ_256K,
58		.offset		= SZ_512K,
59	},
60};
61
62const struct flash_platform_data hp_t5325_flash = {
63	.type		= "mx25l8005",
64	.name		= "spi_flash",
65	.parts		= hp_t5325_partitions,
66	.nr_parts	= ARRAY_SIZE(hp_t5325_partitions),
67};
68
69struct spi_board_info __initdata hp_t5325_spi_slave_info[] = {
70	{
71		.modalias	= "m25p80",
72		.platform_data	= &hp_t5325_flash,
73		.irq		= -1,
74	},
75};
76
77static struct mv643xx_eth_platform_data hp_t5325_ge00_data = {
78	.phy_addr	= MV643XX_ETH_PHY_ADDR(8),
79};
80
81static struct mv_sata_platform_data hp_t5325_sata_data = {
82	.n_ports	= 2,
83};
84
85static struct gpio_keys_button hp_t5325_buttons[] = {
86	{
87		.code		= KEY_POWER,
88		.gpio		= 45,
89		.desc		= "Power",
90		.active_low	= 1,
91	},
92};
93
94static struct gpio_keys_platform_data hp_t5325_button_data = {
95	.buttons	= hp_t5325_buttons,
96	.nbuttons	= ARRAY_SIZE(hp_t5325_buttons),
97};
98
99static struct platform_device hp_t5325_button_device = {
100	.name		= "gpio-keys",
101	.id		= -1,
102	.num_resources	= 0,
103	.dev		= {
104		.platform_data	= &hp_t5325_button_data,
105	}
106};
107
108static unsigned int hp_t5325_mpp_config[] __initdata = {
109	MPP0_NF_IO2,
110	MPP1_SPI_MOSI,
111	MPP2_SPI_SCK,
112	MPP3_SPI_MISO,
113	MPP4_NF_IO6,
114	MPP5_NF_IO7,
115	MPP6_SYSRST_OUTn,
116	MPP7_SPI_SCn,
117	MPP8_TW0_SDA,
118	MPP9_TW0_SCK,
119	MPP10_UART0_TXD,
120	MPP11_UART0_RXD,
121	MPP12_SD_CLK,
122	MPP13_GPIO,
123	MPP14_GPIO,
124	MPP15_GPIO,
125	MPP16_GPIO,
126	MPP17_GPIO,
127	MPP18_NF_IO0,
128	MPP19_NF_IO1,
129	MPP20_GPIO,
130	MPP21_GPIO,
131	MPP22_GPIO,
132	MPP23_GPIO,
133	MPP32_GPIO,
134	MPP33_GE1_TXCTL,
135	MPP39_AU_I2SBCLK,
136	MPP40_AU_I2SDO,
137	MPP41_AU_I2SLRCLK,
138	MPP42_AU_I2SMCLK,
139	MPP45_GPIO,		/* Power button */
140	MPP48_GPIO,		/* Board power off */
141	0
142};
143
144#define HP_T5325_GPIO_POWER_OFF		48
145
146static void hp_t5325_power_off(void)
147{
148	gpio_set_value(HP_T5325_GPIO_POWER_OFF, 1);
149}
150
151static void __init hp_t5325_init(void)
152{
153	/*
154	 * Basic setup. Needs to be called early.
155	 */
156	kirkwood_init();
157	kirkwood_mpp_conf(hp_t5325_mpp_config);
158
159	kirkwood_uart0_init();
160	spi_register_board_info(hp_t5325_spi_slave_info,
161				ARRAY_SIZE(hp_t5325_spi_slave_info));
162	kirkwood_spi_init();
163	kirkwood_i2c_init();
164	kirkwood_ge00_init(&hp_t5325_ge00_data);
165	kirkwood_sata_init(&hp_t5325_sata_data);
166	kirkwood_ehci_init();
167	platform_device_register(&hp_t5325_button_device);
168
169	if (gpio_request(HP_T5325_GPIO_POWER_OFF, "power-off") == 0 &&
170	    gpio_direction_output(HP_T5325_GPIO_POWER_OFF, 0) == 0)
171		pm_power_off = hp_t5325_power_off;
172	else
173		pr_err("t5325: failed to configure power-off GPIO\n");
174}
175
176static int __init hp_t5325_pci_init(void)
177{
178	if (machine_is_t5325())
179		kirkwood_pcie_init(KW_PCIE0);
180
181	return 0;
182}
183subsys_initcall(hp_t5325_pci_init);
184
185MACHINE_START(T5325, "HP t5325 Thin Client")
186	/* Maintainer: Martin Michlmayr <tbm@cyrius.com> */
187	.phys_io	= KIRKWOOD_REGS_PHYS_BASE,
188	.io_pg_offst	= ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc,
189	.boot_params	= 0x00000100,
190	.init_machine	= hp_t5325_init,
191	.map_io		= kirkwood_map_io,
192	.init_irq	= kirkwood_init_irq,
193	.timer		= &kirkwood_timer,
194MACHINE_END
195