summaryrefslogtreecommitdiff
path: root/target/linux/adm5120/files/arch/mips/adm5120/boards/infineon.c
blob: c8680d6c4aada984f82466f83ae3be35f7f41baa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 *  $Id$
 *
 *  Infineon boards
 *
 *  Copyright (C) 2007 OpenWrt.org
 *  Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
 *
 *  This program is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License version 2 as published
 *  by the Free Software Foundation.
 *
 */

#include <linux/kernel.h>
#include <linux/init.h>

#include <asm/bootinfo.h>
#include <asm/gpio.h>

#include <adm5120_defs.h>
#include <adm5120_irq.h>
#include <adm5120_board.h>
#include <adm5120_platform.h>
#include <adm5120_info.h>

#define EASY_PQFP_GPIO_DEV_MASK	(1 << ADM5120_GPIO_PIN3)
#define EASY_BGA_GPIO_DEV_MASK	(1 << ADM5120_GPIO_PIN5)

static void switch_bank_gpio3(unsigned bank)
{
	switch (bank) {
	case 0:
		gpio_set_value(ADM5120_GPIO_PIN3, 0);
		break;
	case 1:
		gpio_set_value(ADM5120_GPIO_PIN3, 1);
		break;
	}
}

static void switch_bank_gpio5(unsigned bank)
{
	switch (bank) {
	case 0:
		gpio_set_value(ADM5120_GPIO_PIN5, 0);
		break;
	case 1:
		gpio_set_value(ADM5120_GPIO_PIN5, 1);
		break;
	}
}

static struct mtd_partition easy_partitions[] = {
	{
		.name	= "admboot",
		.offset	= 0,
		.size	= 64*1024,
		.mask_flags = MTD_WRITEABLE,
	} , {
		.name	= "boardcfg",
		.offset	= MTDPART_OFS_APPEND,
		.size	= 64*1024,
	} , {
		.name	= "firmware",
		.offset	= MTDPART_OFS_APPEND,
		.size	= MTDPART_SIZ_FULL,
	}
};

static struct adm5120_pci_irq easy5120rt_pci_irqs[] __initdata = {
	PCIIRQ(2, 0, 1, ADM5120_IRQ_PCI0),
};

static struct platform_device *easy5120pata_devices[] __initdata = {
	&adm5120_flash0_device,
	/* TODO: add VINETIC2 device? */
};

static struct platform_device *easy5120rt_devices[] __initdata = {
	&adm5120_flash0_device,
	&adm5120_hcd_device,
};

static struct platform_device *easy5120wvoip_devices[] __initdata = {
	&adm5120_flash0_device,
	/* TODO: add VINETIC2 device? */
};

static struct platform_device *easy83000_devices[] __initdata = {
	&adm5120_flash0_device,
	/* TODO: add VINAX device? */
};

static void __init easy_setup_pqfp(void)
{
	gpio_request(ADM5120_GPIO_PIN3, NULL); /* for flash A20 line */
	gpio_direction_output(ADM5120_GPIO_PIN3, 0);

	/* setup data for flash0 device */
	adm5120_flash0_data.switch_bank = switch_bank_gpio3;
	adm5120_flash0_data.nr_parts = ARRAY_SIZE(easy_partitions);
	adm5120_flash0_data.parts = easy_partitions;

	adm5120_gpiodev_resource.start &= ~EASY_PQFP_GPIO_DEV_MASK;

	/* TODO: setup mac addresses */
}

static void __init easy_setup_bga(void)
{
	gpio_request(ADM5120_GPIO_PIN5, NULL); /* for flash A20 line */
	gpio_direction_output(ADM5120_GPIO_PIN5, 0);

	/* setup data for flash0 device */
	adm5120_flash0_data.switch_bank = switch_bank_gpio5;
	adm5120_flash0_data.nr_parts = ARRAY_SIZE(easy_partitions);
	adm5120_flash0_data.parts = easy_partitions;

	adm5120_gpiodev_resource.start &= ~EASY_BGA_GPIO_DEV_MASK;

	/* TODO: setup mac addresses */
}

unsigned char easy5120rt_vlans[6] = {
	0x41, 0x42, 0x44, 0x48, 0x50, 0x00
};

/*--------------------------------------------------------------------------*/

ADM5120_BOARD_START(EASY5120PATA, "Infineon EASY 5120P-ATA Reference Board")
	.board_setup	= easy_setup_pqfp,
	.eth_num_ports	= 6,
	.num_devices	= ARRAY_SIZE(easy5120pata_devices),
	.devices	= easy5120pata_devices,
ADM5120_BOARD_END

ADM5120_BOARD_START(EASY5120RT, "Infineon EASY 5120-RT Reference Board")
	.board_setup	= easy_setup_bga,
	.eth_num_ports	= 5,
	.eth_vlans	= easy5120rt_vlans,
	.num_devices	= ARRAY_SIZE(easy5120rt_devices),
	.devices	= easy5120rt_devices,
	.pci_nr_irqs	= ARRAY_SIZE(easy5120rt_pci_irqs),
	.pci_irq_map	= easy5120rt_pci_irqs,
ADM5120_BOARD_END

ADM5120_BOARD_START(EASY5120WVOIP, "Infineon EASY 5120-WVoIP Reference Board")
	.board_setup	= easy_setup_bga,
	.eth_num_ports	= 6,
	.num_devices	= ARRAY_SIZE(easy5120wvoip_devices),
	.devices	= easy5120wvoip_devices,
ADM5120_BOARD_END

ADM5120_BOARD_START(EASY83000, "Infineon EASY 83000 Reference Board")
	.board_setup	= easy_setup_pqfp,
	.eth_num_ports	= 6,
	.num_devices	= ARRAY_SIZE(easy83000_devices),
	.devices	= easy83000_devices,
ADM5120_BOARD_END