| /* |
| * U-boot - main board file for BCT brettl2 |
| * |
| * Copyright (c) 2010 BCT Electronic GmbH |
| * |
| * Licensed under the GPL-2 or later. |
| */ |
| |
| #include <common.h> |
| #include <config.h> |
| #include <command.h> |
| #include <asm/blackfin.h> |
| #include <asm/portmux.h> |
| #include <asm/gpio.h> |
| #include <asm/net.h> |
| #include <net.h> |
| #include <netdev.h> |
| #include <miiphy.h> |
| |
| #include "../cm-bf537e/gpio_cfi_flash.h" |
| #include "smsc9303.h" |
| |
| DECLARE_GLOBAL_DATA_PTR; |
| |
| int checkboard(void) |
| { |
| printf("Board: bct-brettl2 board\n"); |
| printf(" Support: http://www.bct-electronic.com/\n"); |
| return 0; |
| } |
| |
| #ifdef CONFIG_BFIN_MAC |
| static void board_init_enetaddr(uchar *mac_addr) |
| { |
| puts("Warning: Generating 'random' MAC address\n"); |
| bfin_gen_rand_mac(mac_addr); |
| eth_setenv_enetaddr("ethaddr", mac_addr); |
| } |
| |
| int board_eth_init(bd_t *bis) |
| { |
| int retry = 3; |
| int ret; |
| |
| ret = bfin_EMAC_initialize(bis); |
| |
| uchar enetaddr[6]; |
| if (eth_getenv_enetaddr("ethaddr", enetaddr)) { |
| printf("setting MAC %pM\n", enetaddr); |
| } |
| puts(" "); |
| |
| puts("initialize SMSC LAN9303i ethernet switch\n"); |
| |
| while (retry-- > 0) { |
| if (init_smsc9303i_mii()) |
| return ret; |
| } |
| |
| return ret; |
| } |
| #endif |
| |
| static void init_tlv320aic31(void) |
| { |
| puts("Audio: setup TIMER0 to enable 16.384 MHz clock for tlv320aic31\n"); |
| peripheral_request(P_TMR0, "tlv320aic31 clock"); |
| bfin_write_TIMER0_CONFIG(0x020d); |
| bfin_write_TIMER0_PERIOD(0x0008); |
| bfin_write_TIMER0_WIDTH(0x0008/2); |
| bfin_write_TIMER_ENABLE(bfin_read_TIMER_ENABLE() | 1); |
| SSYNC(); |
| udelay(10000); |
| |
| puts(" resetting tlv320aic31\n"); |
| |
| gpio_request(GPIO_PF2, "tlv320aic31"); |
| gpio_direction_output(GPIO_PF2, 0); |
| udelay(10000); |
| gpio_direction_output(GPIO_PF2, 1); |
| udelay(10000); |
| gpio_free(GPIO_PF2); |
| } |
| |
| static void init_mute_pin(void) |
| { |
| printf(" unmute class D amplifier\n"); |
| |
| gpio_request(GPIO_PF5, "mute"); |
| gpio_direction_output(GPIO_PF5, 1); |
| gpio_free(GPIO_PF5); |
| } |
| |
| /* sometimes LEDs (speech, status) are still on after reboot, turn 'em off */ |
| static void turn_leds_off(void) |
| { |
| printf(" turn LEDs off\n"); |
| |
| gpio_request(GPIO_PF6, "led"); |
| gpio_direction_output(GPIO_PF6, 0); |
| gpio_free(GPIO_PF6); |
| |
| gpio_request(GPIO_PF15, "led"); |
| gpio_direction_output(GPIO_PF15, 0); |
| gpio_free(GPIO_PF15); |
| } |
| |
| /* miscellaneous platform dependent initialisations */ |
| int misc_init_r(void) |
| { |
| #ifdef CONFIG_BFIN_MAC |
| uchar enetaddr[6]; |
| if (!eth_getenv_enetaddr("ethaddr", enetaddr)) |
| board_init_enetaddr(enetaddr); |
| #endif |
| |
| gpio_cfi_flash_init(); |
| init_tlv320aic31(); |
| init_mute_pin(); |
| turn_leds_off(); |
| |
| return 0; |
| } |