board-am3517crane.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /*
  2. * Support for AM3517/05 Craneboard
  3. * http://www.mistralsolutions.com/products/craneboard.php
  4. *
  5. * Copyright (C) 2010 Mistral Solutions Pvt Ltd. <www.mistralsolutions.com>
  6. * Author: R.Srinath <srinath@mistralsolutions.com>
  7. *
  8. * Based on mach-omap2/board-am3517evm.c
  9. *
  10. * This program is free software; you can redistribute it and/or modify it
  11. * under the terms of the GNU General Public License as published by the
  12. * Free Software Foundation version 2.
  13. *
  14. * This program is distributed "as is" WITHOUT ANY WARRANTY of any kind,
  15. * whether express or implied; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  17. * General Public License for more details.
  18. */
  19. #include <linux/kernel.h>
  20. #include <linux/init.h>
  21. #include <linux/gpio.h>
  22. #include <linux/mfd/tps65910.h>
  23. #include <linux/mtd/mtd.h>
  24. #include <linux/mtd/nand.h>
  25. #include <linux/mtd/partitions.h>
  26. #include <asm/mach-types.h>
  27. #include <asm/mach/arch.h>
  28. #include <asm/mach/map.h>
  29. #include "common.h"
  30. #include "common-board-devices.h"
  31. #include "board-flash.h"
  32. #include "am35xx-emac.h"
  33. #include "mux.h"
  34. #include "control.h"
  35. #define GPIO_USB_POWER 35
  36. #define GPIO_USB_NRESET 38
  37. #ifdef CONFIG_OMAP_MUX
  38. static struct omap_board_mux board_mux[] __initdata = {
  39. OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
  40. { .reg_offset = OMAP_MUX_TERMINATOR },
  41. };
  42. #endif
  43. static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
  44. .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
  45. .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
  46. .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
  47. .phy_reset = true,
  48. .reset_gpio_port[0] = GPIO_USB_NRESET,
  49. .reset_gpio_port[1] = -EINVAL,
  50. .reset_gpio_port[2] = -EINVAL
  51. };
  52. static struct mtd_partition crane_nand_partitions[] = {
  53. {
  54. .name = "X-Loader",
  55. .offset = 0,
  56. .size = 4 * NAND_BLOCK_SIZE,
  57. .mask_flags = MTD_WRITEABLE,
  58. },
  59. {
  60. .name = "U-Boot",
  61. .offset = MTDPART_OFS_APPEND,
  62. .size = 14 * NAND_BLOCK_SIZE,
  63. .mask_flags = MTD_WRITEABLE,
  64. },
  65. {
  66. .name = "U-Boot Env",
  67. .offset = MTDPART_OFS_APPEND,
  68. .size = 2 * NAND_BLOCK_SIZE,
  69. },
  70. {
  71. .name = "Kernel",
  72. .offset = MTDPART_OFS_APPEND,
  73. .size = 40 * NAND_BLOCK_SIZE,
  74. },
  75. {
  76. .name = "File System",
  77. .offset = MTDPART_OFS_APPEND,
  78. .size = MTDPART_SIZ_FULL,
  79. },
  80. };
  81. static struct tps65910_board tps65910_pdata = {
  82. .irq = 7 + OMAP_INTC_START,
  83. .en_ck32k_xtal = true,
  84. };
  85. static struct i2c_board_info __initdata tps65910_board_info[] = {
  86. {
  87. I2C_BOARD_INFO("tps65910", 0x2d),
  88. .platform_data = &tps65910_pdata,
  89. },
  90. };
  91. static void __init am3517_crane_i2c_init(void)
  92. {
  93. omap_register_i2c_bus(1, 2600, tps65910_board_info,
  94. ARRAY_SIZE(tps65910_board_info));
  95. }
  96. static void __init am3517_crane_init(void)
  97. {
  98. int ret;
  99. omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
  100. omap_serial_init();
  101. omap_sdrc_init(NULL, NULL);
  102. board_nand_init(crane_nand_partitions,
  103. ARRAY_SIZE(crane_nand_partitions), 0,
  104. NAND_BUSWIDTH_16, NULL);
  105. am3517_crane_i2c_init();
  106. /* Configure GPIO for EHCI port */
  107. if (omap_mux_init_gpio(GPIO_USB_NRESET, OMAP_PIN_OUTPUT)) {
  108. pr_err("Can not configure mux for GPIO_USB_NRESET %d\n",
  109. GPIO_USB_NRESET);
  110. return;
  111. }
  112. if (omap_mux_init_gpio(GPIO_USB_POWER, OMAP_PIN_OUTPUT)) {
  113. pr_err("Can not configure mux for GPIO_USB_POWER %d\n",
  114. GPIO_USB_POWER);
  115. return;
  116. }
  117. ret = gpio_request_one(GPIO_USB_POWER, GPIOF_OUT_INIT_HIGH,
  118. "usb_ehci_enable");
  119. if (ret < 0) {
  120. pr_err("Can not request GPIO %d\n", GPIO_USB_POWER);
  121. return;
  122. }
  123. usbhs_init(&usbhs_bdata);
  124. am35xx_emac_init(AM35XX_DEFAULT_MDIO_FREQUENCY, 1);
  125. }
  126. MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")
  127. .atag_offset = 0x100,
  128. .reserve = omap_reserve,
  129. .map_io = omap3_map_io,
  130. .init_early = am35xx_init_early,
  131. .init_irq = omap3_init_irq,
  132. .handle_irq = omap3_intc_handle_irq,
  133. .init_machine = am3517_crane_init,
  134. .init_late = am35xx_init_late,
  135. .init_time = omap3_sync32k_timer_init,
  136. .restart = omap3xxx_restart,
  137. MACHINE_END