1#include <linux/init.h>
2#include <linux/platform_device.h>
3#include <linux/leds.h>
4#include <linux/gpio.h>
5#include <linux/gpio_buttons.h>
6#include <linux/mtd/mtd.h>
7#include <linux/mtd/partitions.h>
8#include <linux/input.h>
9#include <linux/interrupt.h>
10#include <linux/spi/spi.h>
11#include <linux/spi/flash.h>
12
13#include <dev-gpio-leds.h>
14
15#include "../machtypes.h"
16#include "devices.h"
17
18#define EASY98020_GPIO_LED_0 9
19#define EASY98020_GPIO_LED_1 10
20#define EASY98020_GPIO_LED_2 11
21#define EASY98020_GPIO_LED_3 12
22#define EASY98020_GPIO_LED_GE0_ACT 110
23#define EASY98020_GPIO_LED_GE0_LINK 109
24#define EASY98020_GPIO_LED_GE1_ACT 106
25#define EASY98020_GPIO_LED_GE1_LINK 105
26
27static struct mtd_partition easy98020_spi_partitions[] =
28{
29	{
30		.name	= "uboot",
31		.offset	= 0x0,
32		.size	= 0x40000,
33	},
34	{
35		.name	= "uboot_env",
36		.offset	= 0x40000,
37		.size	= 0x40000,	/* 2 sectors for redundant env. */
38	},
39	{
40		.name	= "linux",
41		.offset	= 0x80000,
42		.size	= 0xF80000,	/* map only 16 MiB */
43	},
44};
45
46static struct flash_platform_data easy98020_spi_flash_platform_data = {
47	.name = "sflash",
48	.parts = easy98020_spi_partitions,
49	.nr_parts = ARRAY_SIZE(easy98020_spi_partitions)
50};
51
52static struct spi_board_info easy98020_spi_flash_data __initdata = {
53	.modalias		= "m25p80",
54	.bus_num		= 0,
55	.chip_select		= 0,
56	.max_speed_hz		= 10 * 1000 * 1000,
57	.mode			= SPI_MODE_3,
58	.platform_data		= &easy98020_spi_flash_platform_data
59};
60
61static struct gpio_led easy98020_gpio_leds[] __initdata = {
62	{
63		.name		= "easy98020:green:0",
64		.gpio		= EASY98020_GPIO_LED_0,
65		.active_low	= 0,
66	}, {
67		.name		= "easy98020:green:1",
68		.gpio		= EASY98020_GPIO_LED_1,
69		.active_low	= 0,
70	}, {
71		.name		= "easy98020:green:2",
72		.gpio		= EASY98020_GPIO_LED_2,
73		.active_low	= 0,
74	}, {
75		.name		= "easy98020:green:3",
76		.gpio		= EASY98020_GPIO_LED_3,
77		.active_low	= 0,
78	}, {
79		.name		= "easy98020:ge0_act",
80		.gpio		= EASY98020_GPIO_LED_GE0_ACT,
81		.active_low	= 0,
82	}, {
83		.name		= "easy98020:ge0_link",
84		.gpio		= EASY98020_GPIO_LED_GE0_LINK,
85		.active_low	= 0,
86	}, {
87		.name		= "easy98020:ge1_act",
88		.gpio		= EASY98020_GPIO_LED_GE1_ACT,
89		.active_low	= 0,
90	}, {
91		.name		= "easy98020:ge1_link",
92		.gpio		= EASY98020_GPIO_LED_GE1_LINK,
93		.active_low	= 0,
94	}
95};
96
97static void __init easy98020_init(void)
98{
99	falcon_register_i2c();
100	falcon_register_spi_flash(&easy98020_spi_flash_data);
101	ltq_add_device_gpio_leds(-1, ARRAY_SIZE(easy98020_gpio_leds),
102					easy98020_gpio_leds);
103}
104
105MIPS_MACHINE(LANTIQ_MACH_EASY98020,
106			"EASY98020",
107			"EASY98020 Eval Board",
108			easy98020_init);
109
110MIPS_MACHINE(LANTIQ_MACH_EASY98020_1LAN,
111			"EASY98020_1LAN",
112			"EASY98020 Eval Board (1 LAN port)",
113			easy98020_init);
114
115MIPS_MACHINE(LANTIQ_MACH_EASY98020_2LAN,
116			"EASY98020_2LAN",
117			"EASY98020 Eval Board (2 LAN ports)",
118			easy98020_init);
119