1 /* 2 * Copyright (C) 2011 Ilya Yanok, Emcraft Systems 3 * 4 * Based on ti/evm/evm.c 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc. 19 */ 20 21 #include <common.h> 22 #include <asm/io.h> 23 #include <asm/arch/mem.h> 24 #include <asm/arch/mmc_host_def.h> 25 #include <asm/arch/mux.h> 26 #include <asm/arch/sys_proto.h> 27 #include <asm/mach-types.h> 28 #include <asm/gpio.h> 29 #include <asm/omap_gpio.h> 30 #include "errno.h" 31 #include <i2c.h> 32 #ifdef CONFIG_USB_EHCI 33 #include <usb.h> 34 #include <asm/ehci-omap.h> 35 #endif 36 #include "mcx.h" 37 38 DECLARE_GLOBAL_DATA_PTR; 39 40 #define HOT_WATER_BUTTON 38 41 42 #ifdef CONFIG_USB_EHCI 43 static struct omap_usbhs_board_data usbhs_bdata = { 44 .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, 45 .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, 46 .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, 47 }; 48 49 int ehci_hcd_init(int index, struct ehci_hccr **hccr, struct ehci_hcor **hcor) 50 { 51 return omap_ehci_hcd_init(&usbhs_bdata, hccr, hcor); 52 } 53 54 int ehci_hcd_stop(int index) 55 { 56 return omap_ehci_hcd_stop(); 57 } 58 #endif 59 60 /* 61 * Routine: board_init 62 * Description: Early hardware init. 63 */ 64 int board_init(void) 65 { 66 gpmc_init(); /* in SRAM or SDRAM, finish GPMC */ 67 /* boot param addr */ 68 gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100); 69 70 return 0; 71 } 72 73 #ifdef CONFIG_BOARD_LATE_INIT 74 int board_late_init(void) 75 { 76 if (gpio_request(HOT_WATER_BUTTON, "hot-water-button") < 0) { 77 puts("Failed to get hot-water-button pin\n"); 78 return -ENODEV; 79 } 80 gpio_direction_input(HOT_WATER_BUTTON); 81 82 /* 83 * if hot-water-button is pressed 84 * change bootcmd 85 */ 86 if (gpio_get_value(HOT_WATER_BUTTON)) 87 return 0; 88 89 setenv("bootcmd", "run swupdate"); 90 return 0; 91 } 92 #endif 93 94 /* 95 * Routine: set_muxconf_regs 96 * Description: Setting up the configuration Mux registers specific to the 97 * hardware. Many pins need to be moved from protect to primary 98 * mode. 99 */ 100 void set_muxconf_regs(void) 101 { 102 MUX_MCX(); 103 } 104 105 #if defined(CONFIG_OMAP_HSMMC) && !defined(CONFIG_SPL_BUILD) 106 int board_mmc_init(bd_t *bis) 107 { 108 return omap_mmc_init(0, 0, 0); 109 } 110 #endif 111 112 #ifdef CONFIG_USB_EHCI_OMAP 113 #define USB_HOST_PWR_EN 132 114 int board_usb_init(void) 115 { 116 if (gpio_request(USB_HOST_PWR_EN, "USB_HOST_PWR_EN") < 0) { 117 puts("Failed to get USB_HOST_PWR_EN pin\n"); 118 return -ENODEV; 119 } 120 gpio_direction_output(USB_HOST_PWR_EN, 1); 121 122 return 0; 123 } 124 #endif 125