synchronousMemoryDatabase.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * linux/arch/arm/mach-omap2/board-omap3beagle.c
  3. *
  4. * Copyright (C) 2008 Texas Instruments
  5. *
  6. * Modified from mach-omap2/board-3430sdp.c
  7. *
  8. * Initial code: Syed Mohammed Khasim
  9. *
  10. * This program is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License version 2 as
  12. * published by the Free Software Foundation.
  13. */
  14. #include <linux/kernel.h>
  15. #include <linux/init.h>
  16. #include <linux/platform_device.h>
  17. #include <linux/delay.h>
  18. #include <linux/err.h>
  19. #include <linux/clk.h>
  20. #include <linux/io.h>
  21. #include <linux/leds.h>
  22. #include <linux/gpio.h>
  23. #include <linux/input.h>
  24. #include <linux/gpio_keys.h>
  25. #include <linux/opp.h>
  26. #include <linux/cpu.h>
  27. #include <linux/mtd/mtd.h>
  28. #include <linux/mtd/partitions.h>
  29. #include <linux/mtd/nand.h>
  30. #include <linux/mmc/host.h>
  31. #include <linux/regulator/machine.h>
  32. #include <linux/i2c/twl.h>
  33. #include <asm/mach-types.h>
  34. #include <asm/mach/arch.h>
  35. #include <asm/mach/map.h>
  36. #include <asm/mach/flash.h>
  37. #include <video/omapdss.h>
  38. #include <video/omap-panel-tfp410.h>
  39. #include <linux/platform_data/mtd-nand-omap2.h>
  40. #include "common.h"
  41. #include "omap_device.h"
  42. #include "gpmc.h"
  43. #include "soc.h"
  44. #include "mux.h"
  45. #include "hsmmc.h"
  46. #include "pm.h"
  47. #include "board-flash.h"
  48. #include "common-board-devices.h"
  49. #define NAND_CS 0
  50. /*
  51. * OMAP3 Beagle revision
  52. * Run time detection of Beagle revision is done by reading GPIO.
  53. * GPIO ID -
  54. * AXBX = GPIO173, GPIO172, GPIO171: 1 1 1
  55. * C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0
  56. * C4 = GPIO173, GPIO172, GPIO171: 1 0 1
  57. * XMA/XMB = GPIO173, GPIO172, GPIO171: 0 0 0
  58. * XMC = GPIO173, GPIO172, GPIO171: 0 1 0
  59. */
  60. enum {
  61. OMAP3BEAGLE_BOARD_UNKN = 0,
  62. OMAP3BEAGLE_BOARD_AXBX,
  63. OMAP3BEAGLE_BOARD_C1_3,
  64. OMAP3BEAGLE_BOARD_C4,
  65. OMAP3BEAGLE_BOARD_XM,
  66. OMAP3BEAGLE_BOARD_XMC,
  67. };
  68. static u8 omap3_beagle_version;
  69. /*
  70. * Board-specific configuration
  71. * Defaults to BeagleBoard-xMC
  72. */
  73. static struct {
  74. int mmc1_gpio_wp;
  75. int usb_pwr_level;
  76. int dvi_pd_gpio;
  77. int usr_button_gpio;
  78. int mmc_caps;
  79. } beagle_config = {
  80. .mmc1_gpio_wp = -EINVAL,
  81. .usb_pwr_level = GPIOF_OUT_INIT_LOW,
  82. .dvi_pd_gpio = -EINVAL,
  83. .usr_button_gpio = 4,
  84. .mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
  85. };
  86. static struct gpio omap3_beagle_rev_gpios[] __initdata = {
  87. { 171, GPIOF_IN, "rev_id_0" },
  88. { 172, GPIOF_IN, "rev_id_1" },
  89. { 173, GPIOF_IN, "rev_id_2" },
  90. };
  91. static void __init omap3_beagle_init_rev(void)
  92. {
  93. int ret;
  94. u16 beagle_rev = 0;
  95. omap_mux_init_gpio(171, OMAP_PIN_INPUT_PULLUP);
  96. omap_mux_init_gpio(172, OMAP_PIN_INPUT_PULLUP);
  97. omap_mux_init_gpio(173, OMAP_PIN_INPUT_PULLUP);
  98. ret = gpio_request_array(omap3_beagle_rev_gpios,
  99. ARRAY_SIZE(omap3_beagle_rev_gpios));
  100. if (ret < 0) {
  101. printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
  102. omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
  103. return;
  104. }
  105. beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
  106. | (gpio_get_value(173) << 2);
  107. gpio_free_array(omap3_beagle_rev_gpios,
  108. ARRAY_SIZE(omap3_beagle_rev_gpios));
  109. switch (beagle_rev) {
  110. case 7:
  111. printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
  112. omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
  113. beagle_config.mmc1_gpio_wp = 29;
  114. beagle_config.dvi_pd_gpio = 170;
  115. beagle_config.usr_button_gpio = 7;
  116. break;
  117. case 6:
  118. printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
  119. omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
  120. beagle_config.mmc1_gpio_wp = 23;
  121. beagle_config.dvi_pd_gpio = 170;
  122. beagle_config.usr_button_gpio = 7;
  123. break;
  124. case 5:
  125. printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
  126. omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
  127. beagle_config.mmc1_gpio_wp = 23;
  128. beagle_config.dvi_pd_gpio = 170;
  129. beagle_config.usr_button_gpio = 7;
  130. break;
  131. case 0:
  132. printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n");
  133. omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
  134. beagle_config.usb_pwr_level = GPIOF_OUT_INIT_HIGH;
  135. beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA;
  136. break;
  137. case 2:
  138. printk(KERN_INFO "OMAP3 Beagle Rev: xM C\n");
  139. omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
  140. beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA;
  141. break;
  142. default:
  143. printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
  144. omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
  145. }
  146. }
  147. static struct mtd_partition omap3beagle_nand_partitions[] = {
  148. /* All the partition sizes are listed in terms of NAND block size */
  149. {
  150. .name = "X-Loader",
  151. .offset = 0,
  152. .size = 4 * NAND_BLOCK_SIZE,
  153. .mask_flags = MTD_WRITEABLE, /* force read-only */
  154. },
  155. {
  156. .name = "U-Boot",
  157. .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */
  158. .size = 15 * NAND_BLOCK_SIZE,
  159. .mask_flags = MTD_WRITEABLE, /* force read-only */
  160. },
  161. {