1 /* 2 * (C) Copyright 2004-2008 3 * Texas Instruments, <www.ti.com> 4 * 5 * Author : 6 * Sunil Kumar <sunilsaini05@gmail.com> 7 * Shashi Ranjan <shashiranjanmca05@gmail.com> 8 * 9 * Derived from Beagle Board and 3430 SDP code by 10 * Richard Woodruff <r-woodruff2@ti.com> 11 * Syed Mohammed Khasim <khasim@ti.com> 12 * 13 * 14 * See file CREDITS for list of people who contributed to this 15 * project. 16 * 17 * This program is free software; you can redistribute it and/or 18 * modify it under the terms of the GNU General Public License as 19 * published by the Free Software Foundation; either version 2 of 20 * the License, or (at your option) any later version. 21 * 22 * This program is distributed in the hope that it will be useful, 23 * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 * GNU General Public License for more details. 26 * 27 * You should have received a copy of the GNU General Public License 28 * along with this program; if not, write to the Free Software 29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 30 * MA 02111-1307 USA 31 */ 32 #include <common.h> 33 #include <twl4030.h> 34 #include <asm/io.h> 35 #include <asm/arch/mux.h> 36 #include <asm/arch/sys_proto.h> 37 #include <asm/arch/gpio.h> 38 #include <asm/mach-types.h> 39 #include "beagle.h" 40 41 static int beagle_revision_c; 42 43 /* 44 * Routine: board_init 45 * Description: Early hardware init. 46 */ 47 int board_init(void) 48 { 49 DECLARE_GLOBAL_DATA_PTR; 50 51 gpmc_init(); /* in SRAM or SDRAM, finish GPMC */ 52 /* board id for Linux */ 53 gd->bd->bi_arch_number = MACH_TYPE_OMAP3_BEAGLE; 54 /* boot param addr */ 55 gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100); 56 57 return 0; 58 } 59 60 /* 61 * Routine: beagle_get_revision 62 * Description: Return the revision of the BeagleBoard this code is running on. 63 * If it is a revision Ax/Bx board, this function returns 0, 64 * on a revision C board you will get a 1. 65 */ 66 int beagle_get_revision(void) 67 { 68 return beagle_revision_c; 69 } 70 71 /* 72 * Routine: beagle_identify 73 * Description: Detect if we are running on a Beagle revision Ax/Bx or 74 * Cx. This can be done by GPIO_171. If this is low, we are 75 * running on a revision C board. 76 */ 77 void beagle_identify(void) 78 { 79 beagle_revision_c = 0; 80 if (!omap_request_gpio(171)) { 81 unsigned int val; 82 83 omap_set_gpio_direction(171, 1); 84 val = omap_get_gpio_datain(171); 85 omap_free_gpio(171); 86 87 if (val) 88 beagle_revision_c = 0; 89 else 90 beagle_revision_c = 1; 91 } 92 93 printf("Board revision "); 94 if (beagle_revision_c) 95 printf("C\n"); 96 else 97 printf("Ax/Bx\n"); 98 } 99 100 /* 101 * Routine: misc_init_r 102 * Description: Configure board specific parts 103 */ 104 int misc_init_r(void) 105 { 106 struct gpio *gpio5_base = (struct gpio *)OMAP34XX_GPIO5_BASE; 107 struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE; 108 109 twl4030_power_init(); 110 twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON); 111 112 /* Configure GPIOs to output */ 113 writel(~(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1), &gpio6_base->oe); 114 writel(~(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 | 115 GPIO15 | GPIO14 | GPIO13 | GPIO12), &gpio5_base->oe); 116 117 /* Set GPIOs */ 118 writel(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1, 119 &gpio6_base->setdataout); 120 writel(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 | 121 GPIO15 | GPIO14 | GPIO13 | GPIO12, &gpio5_base->setdataout); 122 123 beagle_identify(); 124 125 dieid_num_r(); 126 127 return 0; 128 } 129 130 /* 131 * Routine: set_muxconf_regs 132 * Description: Setting up the configuration Mux registers specific to the 133 * hardware. Many pins need to be moved from protect to primary 134 * mode. 135 */ 136 void set_muxconf_regs(void) 137 { 138 MUX_BEAGLE(); 139 140 if (beagle_revision_c) { 141 MUX_BEAGLE_C(); 142 } 143 } 144