aboutsummaryrefslogtreecommitdiffstats
path: root/arch/avr32
diff options
context:
space:
mode:
authorHaavard Skinnemoen <hskinnemoen@atmel.com>2006-12-04 07:58:27 -0500
committerHaavard Skinnemoen <hskinnemoen@atmel.com>2006-12-08 07:06:19 -0500
commita6f92f3dc8e53185bae50d44b5042b9cddf7f475 (patch)
tree8fb91d7fc304e24393eb52d74b17f840dfdedb5d /arch/avr32
parentcfcb3a89d04144c064023bdc7d8dc600a88cc5c4 (diff)
[AVR32] Move ethernet tag parsing to board-specific code
By moving the ethernet tag parsing to the board-specific code we avoid the issue of figuring out which device we're supposed to attach the information to. The board specific code knows this because it's where the actual devices are instantiated. Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
Diffstat (limited to 'arch/avr32')
-rw-r--r--arch/avr32/boards/atstk1000/atstk1002.c31
-rw-r--r--arch/avr32/kernel/setup.c24
2 files changed, 23 insertions, 32 deletions
diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c
index cced73c58115..f65865cd9c3b 100644
--- a/arch/avr32/boards/atstk1000/atstk1002.c
+++ b/arch/avr32/boards/atstk1000/atstk1002.c
@@ -8,19 +8,32 @@
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10#include <linux/init.h> 10#include <linux/init.h>
11#include <linux/kernel.h>
12#include <linux/string.h>
13#include <linux/types.h>
11 14
15#include <asm/setup.h>
12#include <asm/arch/board.h> 16#include <asm/arch/board.h>
13#include <asm/arch/init.h> 17#include <asm/arch/init.h>
14 18
15struct eth_platform_data __initdata eth0_data = { 19static struct eth_platform_data __initdata eth_data[2];
16 .valid = 1,
17 .mii_phy_addr = 0x10,
18 .is_rmii = 0,
19 .hw_addr = { 0x6a, 0x87, 0x71, 0x14, 0xcd, 0xcb },
20};
21
22extern struct lcdc_platform_data atstk1000_fb0_data; 20extern struct lcdc_platform_data atstk1000_fb0_data;
23 21
22static int __init parse_tag_ethernet(struct tag *tag)
23{
24 int i;
25
26 i = tag->u.ethernet.mac_index;
27 if (i < ARRAY_SIZE(eth_data)) {
28 eth_data[i].mii_phy_addr = tag->u.ethernet.mii_phy_addr;
29 memcpy(&eth_data[i].hw_addr, tag->u.ethernet.hw_address,
30 sizeof(eth_data[i].hw_addr));
31 eth_data[i].valid = 1;
32 }
33 return 0;
34}
35__tagtable(ATAG_ETHERNET, parse_tag_ethernet);
36
24void __init setup_board(void) 37void __init setup_board(void)
25{ 38{
26 at32_map_usart(1, 0); /* /dev/ttyS0 */ 39 at32_map_usart(1, 0); /* /dev/ttyS0 */
@@ -38,7 +51,9 @@ static int __init atstk1002_init(void)
38 at32_add_device_usart(1); 51 at32_add_device_usart(1);
39 at32_add_device_usart(2); 52 at32_add_device_usart(2);
40 53
41 at32_add_device_eth(0, &eth0_data); 54 if (eth_data[0].valid)
55 at32_add_device_eth(0, &eth_data[0]);
56
42 at32_add_device_spi(0); 57 at32_add_device_spi(0);
43 at32_add_device_lcdc(0, &atstk1000_fb0_data); 58 at32_add_device_lcdc(0, &atstk1000_fb0_data);
44 59
diff --git a/arch/avr32/kernel/setup.c b/arch/avr32/kernel/setup.c
index ea2d1ffee478..a34211601008 100644
--- a/arch/avr32/kernel/setup.c
+++ b/arch/avr32/kernel/setup.c
@@ -229,30 +229,6 @@ static int __init parse_tag_rsvd_mem(struct tag *tag)
229} 229}
230__tagtable(ATAG_RSVD_MEM, parse_tag_rsvd_mem); 230__tagtable(ATAG_RSVD_MEM, parse_tag_rsvd_mem);
231 231
232static int __init parse_tag_ethernet(struct tag *tag)
233{
234#if 0
235 const struct platform_device *pdev;
236
237 /*
238 * We really need a bus type that supports "classes"...this
239 * will do for now (until we must handle other kinds of
240 * ethernet controllers)
241 */
242 pdev = platform_get_device("macb", tag->u.ethernet.mac_index);
243 if (pdev && pdev->dev.platform_data) {
244 struct eth_platform_data *data = pdev->dev.platform_data;
245
246 data->valid = 1;
247 data->mii_phy_addr = tag->u.ethernet.mii_phy_addr;
248 memcpy(data->hw_addr, tag->u.ethernet.hw_address,
249 sizeof(data->hw_addr));
250 }
251#endif
252 return 0;
253}
254__tagtable(ATAG_ETHERNET, parse_tag_ethernet);
255
256/* 232/*
257 * Scan the tag table for this tag, and call its parse function. The 233 * Scan the tag table for this tag, and call its parse function. The
258 * tag table is built by the linker from all the __tagtable 234 * tag table is built by the linker from all the __tagtable