1127f9ae5SJean-Christophe PLAGNIOL-VILLARD /*
2127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Maintainer : Steve Sakoman <steve@sakoman.com>
3127f9ae5SJean-Christophe PLAGNIOL-VILLARD *
4127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Derived from Beagle Board, 3430 SDP, and OMAP3EVM code by
5127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Richard Woodruff <r-woodruff2@ti.com>
6127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Syed Mohammed Khasim <khasim@ti.com>
7127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Sunil Kumar <sunilsaini05@gmail.com>
8127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Shashi Ranjan <shashiranjanmca05@gmail.com>
9127f9ae5SJean-Christophe PLAGNIOL-VILLARD *
10127f9ae5SJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2004-2008
11127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Texas Instruments, <www.ti.com>
12127f9ae5SJean-Christophe PLAGNIOL-VILLARD *
131a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+
14127f9ae5SJean-Christophe PLAGNIOL-VILLARD */
15127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <common.h>
16b3f4ca11SSimon Glass #include <dm.h>
17b3f4ca11SSimon Glass #include <ns16550.h>
18df382626SOlof Johansson #include <netdev.h>
19127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <twl4030.h>
20*331c2375SMasahiro Yamada #include <linux/mtd/rawnand.h>
21127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <asm/io.h>
22cd7c5726SSteve Sakoman #include <asm/arch/mmc_host_def.h>
23127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/mux.h>
24df382626SOlof Johansson #include <asm/arch/mem.h>
25127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <asm/arch/sys_proto.h>
2684c3b631SSanjeev Premi #include <asm/gpio.h>
27127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include <asm/mach-types.h>
28127f9ae5SJean-Christophe PLAGNIOL-VILLARD #include "overo.h"
29127f9ae5SJean-Christophe PLAGNIOL-VILLARD
308850c5d5STom Rini #ifdef CONFIG_USB_EHCI_HCD
31f5c30c1bSStefan Herbrechtsmeier #include <usb.h>
32f5c30c1bSStefan Herbrechtsmeier #include <asm/ehci-omap.h>
33f5c30c1bSStefan Herbrechtsmeier #endif
34f5c30c1bSStefan Herbrechtsmeier
3529565326SJohn Rigby DECLARE_GLOBAL_DATA_PTR;
3629565326SJohn Rigby
37d64b5b89SSteve Sakoman #define TWL4030_I2C_BUS 0
38d64b5b89SSteve Sakoman #define EXPANSION_EEPROM_I2C_BUS 2
39d64b5b89SSteve Sakoman #define EXPANSION_EEPROM_I2C_ADDRESS 0x51
40d64b5b89SSteve Sakoman
414ed914a2SStefan Herbrechtsmeier #define GUMSTIX_EMPTY_EEPROM 0x0
424ed914a2SStefan Herbrechtsmeier
43d64b5b89SSteve Sakoman #define GUMSTIX_SUMMIT 0x01000200
44d64b5b89SSteve Sakoman #define GUMSTIX_TOBI 0x02000200
45d64b5b89SSteve Sakoman #define GUMSTIX_TOBI_DUO 0x03000200
46d64b5b89SSteve Sakoman #define GUMSTIX_PALO35 0x04000200
47d64b5b89SSteve Sakoman #define GUMSTIX_PALO43 0x05000200
48d64b5b89SSteve Sakoman #define GUMSTIX_CHESTNUT43 0x06000200
49d64b5b89SSteve Sakoman #define GUMSTIX_PINTO 0x07000200
50d64b5b89SSteve Sakoman #define GUMSTIX_GALLOP43 0x08000200
51ea5940e9SAsh Charles #define GUMSTIX_ALTO35 0x09000200
52ea5940e9SAsh Charles #define GUMSTIX_STAGECOACH 0x0A000200
53ea5940e9SAsh Charles #define GUMSTIX_THUMBO 0x0B000200
54ea5940e9SAsh Charles #define GUMSTIX_TURTLECORE 0x0C000200
55ea5940e9SAsh Charles #define GUMSTIX_ARBOR43C 0x0D000200
56d64b5b89SSteve Sakoman
57d64b5b89SSteve Sakoman #define ETTUS_USRP_E 0x01000300
58d64b5b89SSteve Sakoman
59d64b5b89SSteve Sakoman #define GUMSTIX_NO_EEPROM 0xffffffff
60d64b5b89SSteve Sakoman
61d64b5b89SSteve Sakoman static struct {
62d64b5b89SSteve Sakoman unsigned int device_vendor;
63d64b5b89SSteve Sakoman unsigned char revision;
64d64b5b89SSteve Sakoman unsigned char content;
65d64b5b89SSteve Sakoman char fab_revision[8];
66d64b5b89SSteve Sakoman char env_var[16];
67d64b5b89SSteve Sakoman char env_setting[64];
684ed914a2SStefan Herbrechtsmeier } expansion_config = {0x0};
69ba9a11e4SSteve Sakoman
70b3f4ca11SSimon Glass static const struct ns16550_platdata overo_serial = {
712f6ed3b8SAdam Ford .base = OMAP34XX_UART3,
722f6ed3b8SAdam Ford .reg_shift = 2,
7317fa0326SHeiko Schocher .clock = V_NS16550_CLK,
7417fa0326SHeiko Schocher .fcr = UART_FCR_DEFVAL,
75b3f4ca11SSimon Glass };
76b3f4ca11SSimon Glass
77b3f4ca11SSimon Glass U_BOOT_DEVICE(overo_uart) = {
78c7b9686dSThomas Chou "ns16550_serial",
79b3f4ca11SSimon Glass &overo_serial
80b3f4ca11SSimon Glass };
81b3f4ca11SSimon Glass
82127f9ae5SJean-Christophe PLAGNIOL-VILLARD /*
83a06e1629SSteve Sakoman * Routine: get_sdio2_config
84a06e1629SSteve Sakoman * Description: Return information about the wifi module connection
85a06e1629SSteve Sakoman * Returns 0 if the module connects though a level translator
86a06e1629SSteve Sakoman * Returns 1 if the module connects directly
87a06e1629SSteve Sakoman */
get_sdio2_config(void)88a06e1629SSteve Sakoman int get_sdio2_config(void)
89a06e1629SSteve Sakoman {
90a06e1629SSteve Sakoman int sdio_direct;
91a06e1629SSteve Sakoman
9284c3b631SSanjeev Premi if (!gpio_request(130, "") && !gpio_request(139, "")) {
93a06e1629SSteve Sakoman
9484c3b631SSanjeev Premi gpio_direction_output(130, 0);
9584c3b631SSanjeev Premi gpio_direction_input(139);
96a06e1629SSteve Sakoman
97a06e1629SSteve Sakoman sdio_direct = 1;
9884c3b631SSanjeev Premi gpio_set_value(130, 0);
9984c3b631SSanjeev Premi if (gpio_get_value(139) == 0) {
10084c3b631SSanjeev Premi gpio_set_value(130, 1);
10184c3b631SSanjeev Premi if (gpio_get_value(139) == 1)
102a06e1629SSteve Sakoman sdio_direct = 0;
103a06e1629SSteve Sakoman }
104a06e1629SSteve Sakoman
105b5db0a06SJoe Hershberger gpio_direction_input(130);
106a06e1629SSteve Sakoman } else {
107bae485dbSAndreas Müller puts("Error: unable to acquire sdio2 clk GPIOs\n");
108a06e1629SSteve Sakoman sdio_direct = -1;
109a06e1629SSteve Sakoman }
110a06e1629SSteve Sakoman
111a06e1629SSteve Sakoman return sdio_direct;
112a06e1629SSteve Sakoman }
113a06e1629SSteve Sakoman
114a06e1629SSteve Sakoman /*
115d64b5b89SSteve Sakoman * Routine: get_expansion_id
116d64b5b89SSteve Sakoman * Description: This function checks for expansion board by checking I2C
117d64b5b89SSteve Sakoman * bus 2 for the availability of an AT24C01B serial EEPROM.
118d64b5b89SSteve Sakoman * returns the device_vendor field from the EEPROM
119d64b5b89SSteve Sakoman */
get_expansion_id(void)120d64b5b89SSteve Sakoman unsigned int get_expansion_id(void)
121d64b5b89SSteve Sakoman {
1224ed914a2SStefan Herbrechtsmeier if (expansion_config.device_vendor != 0x0)
1234ed914a2SStefan Herbrechtsmeier return expansion_config.device_vendor;
1244ed914a2SStefan Herbrechtsmeier
125d64b5b89SSteve Sakoman i2c_set_bus_num(EXPANSION_EEPROM_I2C_BUS);
126d64b5b89SSteve Sakoman
127d64b5b89SSteve Sakoman /* return GUMSTIX_NO_EEPROM if eeprom doesn't respond */
128d64b5b89SSteve Sakoman if (i2c_probe(EXPANSION_EEPROM_I2C_ADDRESS) == 1) {
129d64b5b89SSteve Sakoman i2c_set_bus_num(TWL4030_I2C_BUS);
130d64b5b89SSteve Sakoman return GUMSTIX_NO_EEPROM;
131d64b5b89SSteve Sakoman }
132d64b5b89SSteve Sakoman
133d64b5b89SSteve Sakoman /* read configuration data */
134d64b5b89SSteve Sakoman i2c_read(EXPANSION_EEPROM_I2C_ADDRESS, 0, 1, (u8 *)&expansion_config,
135d64b5b89SSteve Sakoman sizeof(expansion_config));
136d64b5b89SSteve Sakoman
137d64b5b89SSteve Sakoman i2c_set_bus_num(TWL4030_I2C_BUS);
138d64b5b89SSteve Sakoman
139d64b5b89SSteve Sakoman return expansion_config.device_vendor;
140d64b5b89SSteve Sakoman }
141d64b5b89SSteve Sakoman
142d64b5b89SSteve Sakoman /*
143127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Routine: misc_init_r
144127f9ae5SJean-Christophe PLAGNIOL-VILLARD * Description: Configure board specific parts
145127f9ae5SJean-Christophe PLAGNIOL-VILLARD */
misc_init_r(void)146127f9ae5SJean-Christophe PLAGNIOL-VILLARD int misc_init_r(void)
147127f9ae5SJean-Christophe PLAGNIOL-VILLARD {
148ea5940e9SAsh Charles unsigned int expansion_id;
149ea5940e9SAsh Charles
150127f9ae5SJean-Christophe PLAGNIOL-VILLARD twl4030_power_init();
151ead39d7aSGrazvydas Ignotas twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON);
152127f9ae5SJean-Christophe PLAGNIOL-VILLARD
153c2d5b341SSteve Sakoman printf("Board revision: %d\n", get_board_revision());
154a06e1629SSteve Sakoman
155a06e1629SSteve Sakoman switch (get_sdio2_config()) {
156a06e1629SSteve Sakoman case 0:
157bae485dbSAndreas Müller puts("Tranceiver detected on mmc2\n");
158a06e1629SSteve Sakoman MUX_OVERO_SDIO2_TRANSCEIVER();
159a06e1629SSteve Sakoman break;
160a06e1629SSteve Sakoman case 1:
161bae485dbSAndreas Müller puts("Direct connection on mmc2\n");
162a06e1629SSteve Sakoman MUX_OVERO_SDIO2_DIRECT();
163a06e1629SSteve Sakoman break;
164a06e1629SSteve Sakoman default:
165bae485dbSAndreas Müller puts("Unable to detect mmc2 connection type\n");
166a06e1629SSteve Sakoman }
167a06e1629SSteve Sakoman
168ea5940e9SAsh Charles expansion_id = get_expansion_id();
169ea5940e9SAsh Charles switch (expansion_id) {
170d64b5b89SSteve Sakoman case GUMSTIX_SUMMIT:
171d64b5b89SSteve Sakoman printf("Recognized Summit expansion board (rev %d %s)\n",
172d64b5b89SSteve Sakoman expansion_config.revision,
173d64b5b89SSteve Sakoman expansion_config.fab_revision);
1744ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
175382bee57SSimon Glass env_set("defaultdisplay", "dvi");
176382bee57SSimon Glass env_set("expansionname", "summit");
177d64b5b89SSteve Sakoman break;
178d64b5b89SSteve Sakoman case GUMSTIX_TOBI:
179d64b5b89SSteve Sakoman printf("Recognized Tobi expansion board (rev %d %s)\n",
180d64b5b89SSteve Sakoman expansion_config.revision,
181d64b5b89SSteve Sakoman expansion_config.fab_revision);
1824ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
183382bee57SSimon Glass env_set("defaultdisplay", "dvi");
184382bee57SSimon Glass env_set("expansionname", "tobi");
185d64b5b89SSteve Sakoman break;
186d64b5b89SSteve Sakoman case GUMSTIX_TOBI_DUO:
187d64b5b89SSteve Sakoman printf("Recognized Tobi Duo expansion board (rev %d %s)\n",
188d64b5b89SSteve Sakoman expansion_config.revision,
189d64b5b89SSteve Sakoman expansion_config.fab_revision);
1904ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
191382bee57SSimon Glass env_set("expansionname", "tobiduo");
192d64b5b89SSteve Sakoman break;
193d64b5b89SSteve Sakoman case GUMSTIX_PALO35:
194d64b5b89SSteve Sakoman printf("Recognized Palo35 expansion board (rev %d %s)\n",
195d64b5b89SSteve Sakoman expansion_config.revision,
196d64b5b89SSteve Sakoman expansion_config.fab_revision);
1974ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
198382bee57SSimon Glass env_set("defaultdisplay", "lcd35");
199382bee57SSimon Glass env_set("expansionname", "palo35");
200d64b5b89SSteve Sakoman break;
201d64b5b89SSteve Sakoman case GUMSTIX_PALO43:
202d64b5b89SSteve Sakoman printf("Recognized Palo43 expansion board (rev %d %s)\n",
203d64b5b89SSteve Sakoman expansion_config.revision,
204d64b5b89SSteve Sakoman expansion_config.fab_revision);
2054ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
206382bee57SSimon Glass env_set("defaultdisplay", "lcd43");
207382bee57SSimon Glass env_set("expansionname", "palo43");
208d64b5b89SSteve Sakoman break;
209d64b5b89SSteve Sakoman case GUMSTIX_CHESTNUT43:
210d64b5b89SSteve Sakoman printf("Recognized Chestnut43 expansion board (rev %d %s)\n",
211d64b5b89SSteve Sakoman expansion_config.revision,
212d64b5b89SSteve Sakoman expansion_config.fab_revision);
2134ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
214382bee57SSimon Glass env_set("defaultdisplay", "lcd43");
215382bee57SSimon Glass env_set("expansionname", "chestnut43");
216d64b5b89SSteve Sakoman break;
217d64b5b89SSteve Sakoman case GUMSTIX_PINTO:
218d64b5b89SSteve Sakoman printf("Recognized Pinto expansion board (rev %d %s)\n",
219d64b5b89SSteve Sakoman expansion_config.revision,
220d64b5b89SSteve Sakoman expansion_config.fab_revision);
2214ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
222d64b5b89SSteve Sakoman break;
223d64b5b89SSteve Sakoman case GUMSTIX_GALLOP43:
224d64b5b89SSteve Sakoman printf("Recognized Gallop43 expansion board (rev %d %s)\n",
225d64b5b89SSteve Sakoman expansion_config.revision,
226d64b5b89SSteve Sakoman expansion_config.fab_revision);
2274ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
228382bee57SSimon Glass env_set("defaultdisplay", "lcd43");
229382bee57SSimon Glass env_set("expansionname", "gallop43");
230d64b5b89SSteve Sakoman break;
231ea5940e9SAsh Charles case GUMSTIX_ALTO35:
232ea5940e9SAsh Charles printf("Recognized Alto35 expansion board (rev %d %s)\n",
233ea5940e9SAsh Charles expansion_config.revision,
234ea5940e9SAsh Charles expansion_config.fab_revision);
2354ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
236ea5940e9SAsh Charles MUX_ALTO35();
237382bee57SSimon Glass env_set("defaultdisplay", "lcd35");
238382bee57SSimon Glass env_set("expansionname", "alto35");
239ea5940e9SAsh Charles break;
240ea5940e9SAsh Charles case GUMSTIX_STAGECOACH:
241ea5940e9SAsh Charles printf("Recognized Stagecoach expansion board (rev %d %s)\n",
242ea5940e9SAsh Charles expansion_config.revision,
243ea5940e9SAsh Charles expansion_config.fab_revision);
2444ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
245ea5940e9SAsh Charles break;
246ea5940e9SAsh Charles case GUMSTIX_THUMBO:
247ea5940e9SAsh Charles printf("Recognized Thumbo expansion board (rev %d %s)\n",
248ea5940e9SAsh Charles expansion_config.revision,
249ea5940e9SAsh Charles expansion_config.fab_revision);
2504ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
251ea5940e9SAsh Charles break;
252ea5940e9SAsh Charles case GUMSTIX_TURTLECORE:
253ea5940e9SAsh Charles printf("Recognized Turtlecore expansion board (rev %d %s)\n",
254ea5940e9SAsh Charles expansion_config.revision,
255ea5940e9SAsh Charles expansion_config.fab_revision);
2564ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
257ea5940e9SAsh Charles break;
258ea5940e9SAsh Charles case GUMSTIX_ARBOR43C:
259ea5940e9SAsh Charles printf("Recognized Arbor43C expansion board (rev %d %s)\n",
260ea5940e9SAsh Charles expansion_config.revision,
261ea5940e9SAsh Charles expansion_config.fab_revision);
2624ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
263ea5940e9SAsh Charles MUX_ARBOR43C();
264382bee57SSimon Glass env_set("defaultdisplay", "lcd43");
265382bee57SSimon Glass env_set("expansionname", "arbor43c");
266ea5940e9SAsh Charles break;
267d64b5b89SSteve Sakoman case ETTUS_USRP_E:
268d64b5b89SSteve Sakoman printf("Recognized Ettus Research USRP-E (rev %d %s)\n",
269d64b5b89SSteve Sakoman expansion_config.revision,
270d64b5b89SSteve Sakoman expansion_config.fab_revision);
2714ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
272d64b5b89SSteve Sakoman MUX_USRP_E();
273382bee57SSimon Glass env_set("defaultdisplay", "dvi");
274d64b5b89SSteve Sakoman break;
275d64b5b89SSteve Sakoman case GUMSTIX_NO_EEPROM:
2764ed914a2SStefan Herbrechtsmeier case GUMSTIX_EMPTY_EEPROM:
2774ed914a2SStefan Herbrechtsmeier puts("No or empty EEPROM on expansion board\n");
2784ed914a2SStefan Herbrechtsmeier MUX_GUMSTIX();
279382bee57SSimon Glass env_set("expansionname", "tobi");
280d64b5b89SSteve Sakoman break;
281d64b5b89SSteve Sakoman default:
282ea5940e9SAsh Charles printf("Unrecognized expansion board 0x%08x\n", expansion_id);
283ea5940e9SAsh Charles break;
284d64b5b89SSteve Sakoman }
285d64b5b89SSteve Sakoman
286d64b5b89SSteve Sakoman if (expansion_config.content == 1)
287382bee57SSimon Glass env_set(expansion_config.env_var, expansion_config.env_setting);
288d64b5b89SSteve Sakoman
289679f82c3SPaul Kocialkowski omap_die_id_display();
290127f9ae5SJean-Christophe PLAGNIOL-VILLARD
29112cc5437SAsh Charles if (get_cpu_family() == CPU_OMAP34XX)
292382bee57SSimon Glass env_set("boardname", "overo");
29312cc5437SAsh Charles else
294382bee57SSimon Glass env_set("boardname", "overo-storm");
29512cc5437SAsh Charles
296127f9ae5SJean-Christophe PLAGNIOL-VILLARD return 0;
297127f9ae5SJean-Christophe PLAGNIOL-VILLARD }
298127f9ae5SJean-Christophe PLAGNIOL-VILLARD
299fe5d488fSArun Bharadwaj #if defined(CONFIG_CMD_NET)
300113429a2SStefan Herbrechtsmeier /* GPMC definitions for LAN9221 chips on Tobi expansion boards */
301113429a2SStefan Herbrechtsmeier static const u32 gpmc_lan_config[] = {
302113429a2SStefan Herbrechtsmeier NET_LAN9221_GPMC_CONFIG1,
303113429a2SStefan Herbrechtsmeier NET_LAN9221_GPMC_CONFIG2,
304113429a2SStefan Herbrechtsmeier NET_LAN9221_GPMC_CONFIG3,
305113429a2SStefan Herbrechtsmeier NET_LAN9221_GPMC_CONFIG4,
306113429a2SStefan Herbrechtsmeier NET_LAN9221_GPMC_CONFIG5,
307113429a2SStefan Herbrechtsmeier NET_LAN9221_GPMC_CONFIG6,
308113429a2SStefan Herbrechtsmeier /*CONFIG7- computed as params */
309113429a2SStefan Herbrechtsmeier };
310113429a2SStefan Herbrechtsmeier
311df382626SOlof Johansson /*
312df382626SOlof Johansson * Routine: setup_net_chip
313df382626SOlof Johansson * Description: Setting up the configuration GPMC registers specific to the
314df382626SOlof Johansson * Ethernet hardware.
315df382626SOlof Johansson */
setup_net_chip(void)316df382626SOlof Johansson static void setup_net_chip(void)
317df382626SOlof Johansson {
318df382626SOlof Johansson struct ctrl *ctrl_base = (struct ctrl *)OMAP34XX_CTRL_BASE;
319df382626SOlof Johansson
320df382626SOlof Johansson /* Enable off mode for NWE in PADCONF_GPMC_NWE register */
321df382626SOlof Johansson writew(readw(&ctrl_base ->gpmc_nwe) | 0x0E00, &ctrl_base->gpmc_nwe);
322df382626SOlof Johansson /* Enable off mode for NOE in PADCONF_GPMC_NADV_ALE register */
323df382626SOlof Johansson writew(readw(&ctrl_base->gpmc_noe) | 0x0E00, &ctrl_base->gpmc_noe);
324df382626SOlof Johansson /* Enable off mode for ALE in PADCONF_GPMC_NADV_ALE register */
325df382626SOlof Johansson writew(readw(&ctrl_base->gpmc_nadv_ale) | 0x0E00,
326df382626SOlof Johansson &ctrl_base->gpmc_nadv_ale);
327113429a2SStefan Herbrechtsmeier }
328df382626SOlof Johansson
329113429a2SStefan Herbrechtsmeier /*
330113429a2SStefan Herbrechtsmeier * Routine: reset_net_chip
331113429a2SStefan Herbrechtsmeier * Description: Reset the Ethernet hardware.
332113429a2SStefan Herbrechtsmeier */
reset_net_chip(void)333113429a2SStefan Herbrechtsmeier static void reset_net_chip(void)
334113429a2SStefan Herbrechtsmeier {
335df382626SOlof Johansson /* Make GPIO 64 as output pin and send a magic pulse through it */
33684c3b631SSanjeev Premi if (!gpio_request(64, "")) {
33784c3b631SSanjeev Premi gpio_direction_output(64, 0);
33884c3b631SSanjeev Premi gpio_set_value(64, 1);
339df382626SOlof Johansson udelay(1);
34084c3b631SSanjeev Premi gpio_set_value(64, 0);
341df382626SOlof Johansson udelay(1);
34284c3b631SSanjeev Premi gpio_set_value(64, 1);
343df382626SOlof Johansson }
344df382626SOlof Johansson }
345df382626SOlof Johansson
board_eth_init(bd_t * bis)346df382626SOlof Johansson int board_eth_init(bd_t *bis)
347df382626SOlof Johansson {
348113429a2SStefan Herbrechtsmeier unsigned int expansion_id;
349df382626SOlof Johansson int rc = 0;
350113429a2SStefan Herbrechtsmeier
351df382626SOlof Johansson #ifdef CONFIG_SMC911X
352113429a2SStefan Herbrechtsmeier expansion_id = get_expansion_id();
353113429a2SStefan Herbrechtsmeier switch (expansion_id) {
354113429a2SStefan Herbrechtsmeier case GUMSTIX_TOBI_DUO:
355113429a2SStefan Herbrechtsmeier /* second lan chip */
356113429a2SStefan Herbrechtsmeier enable_gpmc_cs_config(gpmc_lan_config, &gpmc_cfg->cs[4],
357113429a2SStefan Herbrechtsmeier 0x2B000000, GPMC_SIZE_16M);
358113429a2SStefan Herbrechtsmeier /* no break */
359113429a2SStefan Herbrechtsmeier case GUMSTIX_TOBI:
360113429a2SStefan Herbrechtsmeier case GUMSTIX_CHESTNUT43:
361113429a2SStefan Herbrechtsmeier case GUMSTIX_STAGECOACH:
362113429a2SStefan Herbrechtsmeier case GUMSTIX_NO_EEPROM:
363113429a2SStefan Herbrechtsmeier case GUMSTIX_EMPTY_EEPROM:
364113429a2SStefan Herbrechtsmeier /* first lan chip */
365113429a2SStefan Herbrechtsmeier enable_gpmc_cs_config(gpmc_lan_config, &gpmc_cfg->cs[5],
366113429a2SStefan Herbrechtsmeier 0x2C000000, GPMC_SIZE_16M);
367113429a2SStefan Herbrechtsmeier
368113429a2SStefan Herbrechtsmeier setup_net_chip();
369113429a2SStefan Herbrechtsmeier reset_net_chip();
370113429a2SStefan Herbrechtsmeier
371df382626SOlof Johansson rc = smc911x_initialize(0, CONFIG_SMC911X_BASE);
372113429a2SStefan Herbrechtsmeier break;
373113429a2SStefan Herbrechtsmeier default:
374113429a2SStefan Herbrechtsmeier break;
375113429a2SStefan Herbrechtsmeier }
376df382626SOlof Johansson #endif
377113429a2SStefan Herbrechtsmeier
378df382626SOlof Johansson return rc;
379df382626SOlof Johansson }
380113429a2SStefan Herbrechtsmeier #endif
381cd7c5726SSteve Sakoman
3824aa2ba3aSMasahiro Yamada #if defined(CONFIG_MMC)
board_mmc_init(bd_t * bis)383cd7c5726SSteve Sakoman int board_mmc_init(bd_t *bis)
384cd7c5726SSteve Sakoman {
385e3913f56SNikita Kiryanov return omap_mmc_init(0, 0, 0, -1, -1);
386cd7c5726SSteve Sakoman }
387cd7c5726SSteve Sakoman #endif
388f5c30c1bSStefan Herbrechtsmeier
3894aa2ba3aSMasahiro Yamada #if defined(CONFIG_MMC)
board_mmc_power_init(void)390aac5450eSPaul Kocialkowski void board_mmc_power_init(void)
391aac5450eSPaul Kocialkowski {
392aac5450eSPaul Kocialkowski twl4030_power_mmc_init(0);
393aac5450eSPaul Kocialkowski }
394aac5450eSPaul Kocialkowski #endif
395aac5450eSPaul Kocialkowski
3968850c5d5STom Rini #if defined(CONFIG_USB_EHCI_HCD)
397f5c30c1bSStefan Herbrechtsmeier static struct omap_usbhs_board_data usbhs_bdata = {
398f5c30c1bSStefan Herbrechtsmeier .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
399f5c30c1bSStefan Herbrechtsmeier .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
400f5c30c1bSStefan Herbrechtsmeier .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED
401f5c30c1bSStefan Herbrechtsmeier };
402f5c30c1bSStefan Herbrechtsmeier
403f5c30c1bSStefan Herbrechtsmeier #define GUMSTIX_GPIO_USBH_CPEN 168
ehci_hcd_init(int index,enum usb_init_type init,struct ehci_hccr ** hccr,struct ehci_hcor ** hcor)404f5c30c1bSStefan Herbrechtsmeier int ehci_hcd_init(int index, enum usb_init_type init,
405f5c30c1bSStefan Herbrechtsmeier struct ehci_hccr **hccr, struct ehci_hcor **hcor)
406f5c30c1bSStefan Herbrechtsmeier {
407f5c30c1bSStefan Herbrechtsmeier /* Enable USB power */
408f5c30c1bSStefan Herbrechtsmeier if (!gpio_request(GUMSTIX_GPIO_USBH_CPEN, "usbh_cpen"))
409f5c30c1bSStefan Herbrechtsmeier gpio_direction_output(GUMSTIX_GPIO_USBH_CPEN, 1);
410f5c30c1bSStefan Herbrechtsmeier
411f5c30c1bSStefan Herbrechtsmeier return omap_ehci_hcd_init(index, &usbhs_bdata, hccr, hcor);
412f5c30c1bSStefan Herbrechtsmeier }
413f5c30c1bSStefan Herbrechtsmeier
ehci_hcd_stop(void)414f5c30c1bSStefan Herbrechtsmeier int ehci_hcd_stop(void)
415f5c30c1bSStefan Herbrechtsmeier {
416f5c30c1bSStefan Herbrechtsmeier /* Disable USB power */
417f5c30c1bSStefan Herbrechtsmeier gpio_set_value(GUMSTIX_GPIO_USBH_CPEN, 0);
418f5c30c1bSStefan Herbrechtsmeier gpio_free(GUMSTIX_GPIO_USBH_CPEN);
419f5c30c1bSStefan Herbrechtsmeier
420f5c30c1bSStefan Herbrechtsmeier return omap_ehci_hcd_stop();
421f5c30c1bSStefan Herbrechtsmeier }
422f5c30c1bSStefan Herbrechtsmeier
4238850c5d5STom Rini #endif /* CONFIG_USB_EHCI_HCD */
424