a6f92f3dc8
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>
63 lines
1.4 KiB
C
63 lines
1.4 KiB
C
/*
|
|
* ATSTK1002 daughterboard-specific init code
|
|
*
|
|
* Copyright (C) 2005-2006 Atmel Corporation
|
|
*
|
|
* 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/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>
|
|
|
|
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(ð_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 */
|
|
at32_map_usart(2, 1); /* /dev/ttyS1 */
|
|
at32_map_usart(3, 2); /* /dev/ttyS2 */
|
|
|
|
at32_setup_serial_console(0);
|
|
}
|
|
|
|
static int __init atstk1002_init(void)
|
|
{
|
|
at32_add_system_devices();
|
|
|
|
at32_add_device_usart(0);
|
|
at32_add_device_usart(1);
|
|
at32_add_device_usart(2);
|
|
|
|
if (eth_data[0].valid)
|
|
at32_add_device_eth(0, ð_data[0]);
|
|
|
|
at32_add_device_spi(0);
|
|
at32_add_device_lcdc(0, &atstk1000_fb0_data);
|
|
|
|
return 0;
|
|
}
|
|
postcore_initcall(atstk1002_init);
|