Skip to content

Commit

Permalink
[AVR32] Move ethernet tag parsing to board-specific code
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Haavard Skinnemoen committed Dec 8, 2006
1 parent cfcb3a8 commit a6f92f3
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 32 deletions.
31 changes: 23 additions & 8 deletions arch/avr32/boards/atstk1000/atstk1002.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,32 @@
* published by the Free Software Foundation.
*/
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/types.h>

#include <asm/setup.h>
#include <asm/arch/board.h>
#include <asm/arch/init.h>

struct eth_platform_data __initdata eth0_data = {
.valid = 1,
.mii_phy_addr = 0x10,
.is_rmii = 0,
.hw_addr = { 0x6a, 0x87, 0x71, 0x14, 0xcd, 0xcb },
};

static struct eth_platform_data __initdata eth_data[2];
extern struct lcdc_platform_data atstk1000_fb0_data;

static int __init parse_tag_ethernet(struct tag *tag)
{
int i;

i = tag->u.ethernet.mac_index;
if (i < ARRAY_SIZE(eth_data)) {
eth_data[i].mii_phy_addr = tag->u.ethernet.mii_phy_addr;
memcpy(&eth_data[i].hw_addr, tag->u.ethernet.hw_address,
sizeof(eth_data[i].hw_addr));
eth_data[i].valid = 1;
}
return 0;
}
__tagtable(ATAG_ETHERNET, parse_tag_ethernet);

void __init setup_board(void)
{
at32_map_usart(1, 0); /* /dev/ttyS0 */
Expand All @@ -38,7 +51,9 @@ static int __init atstk1002_init(void)
at32_add_device_usart(1);
at32_add_device_usart(2);

at32_add_device_eth(0, &eth0_data);
if (eth_data[0].valid)
at32_add_device_eth(0, &eth_data[0]);

at32_add_device_spi(0);
at32_add_device_lcdc(0, &atstk1000_fb0_data);

Expand Down
24 changes: 0 additions & 24 deletions arch/avr32/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,30 +229,6 @@ static int __init parse_tag_rsvd_mem(struct tag *tag)
}
__tagtable(ATAG_RSVD_MEM, parse_tag_rsvd_mem);

static int __init parse_tag_ethernet(struct tag *tag)
{
#if 0
const struct platform_device *pdev;

/*
* We really need a bus type that supports "classes"...this
* will do for now (until we must handle other kinds of
* ethernet controllers)
*/
pdev = platform_get_device("macb", tag->u.ethernet.mac_index);
if (pdev && pdev->dev.platform_data) {
struct eth_platform_data *data = pdev->dev.platform_data;

data->valid = 1;
data->mii_phy_addr = tag->u.ethernet.mii_phy_addr;
memcpy(data->hw_addr, tag->u.ethernet.hw_address,
sizeof(data->hw_addr));
}
#endif
return 0;
}
__tagtable(ATAG_ETHERNET, parse_tag_ethernet);

/*
* Scan the tag table for this tag, and call its parse function. The
* tag table is built by the linker from all the __tagtable
Expand Down

0 comments on commit a6f92f3

Please sign in to comment.