mxm8x10.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * linux/arch/arm/mach-pxa/mxm8x10.c
  4. *
  5. * Support for the Embedian MXM-8x10 Computer on Module
  6. *
  7. * Copyright (C) 2006 Marvell International Ltd.
  8. * Copyright (C) 2009 Embedian Inc.
  9. * Copyright (C) 2009 TMT Services & Supplies (Pty) Ltd.
  10. *
  11. * 2007-09-04: eric miao <[email protected]>
  12. * rewrite to align with latest kernel
  13. *
  14. * 2010-01-09: Edwin Peer <[email protected]>
  15. * Hennie van der Merwe <[email protected]>
  16. * rework for upstream merge
  17. */
  18. #include <linux/serial_8250.h>
  19. #include <linux/dm9000.h>
  20. #include <linux/gpio/machine.h>
  21. #include <linux/platform_data/i2c-pxa.h>
  22. #include <linux/platform_data/mtd-nand-pxa3xx.h>
  23. #include <linux/platform_data/video-pxafb.h>
  24. #include <linux/platform_data/mmc-pxamci.h>
  25. #include <linux/platform_data/usb-ohci-pxa27x.h>
  26. #include <linux/platform_data/asoc-pxa.h>
  27. #include "pxa320.h"
  28. #include "mxm8x10.h"
  29. #include "devices.h"
  30. #include "generic.h"
  31. /* GPIO pin definition
  32. External device stuff - Leave unconfigured for now...
  33. ---------------------
  34. GPIO0 - DREQ (External DMA Request)
  35. GPIO3 - nGCS2 (External Chip Select) Where is nGCS0; nGCS1; nGCS4; nGCS5 ?
  36. GPIO4 - nGCS3
  37. GPIO15 - EXT_GPIO1
  38. GPIO16 - EXT_GPIO2
  39. GPIO17 - EXT_GPIO3
  40. GPIO24 - EXT_GPIO4
  41. GPIO25 - EXT_GPIO5
  42. GPIO26 - EXT_GPIO6
  43. GPIO27 - EXT_GPIO7
  44. GPIO28 - EXT_GPIO8
  45. GPIO29 - EXT_GPIO9
  46. GPIO30 - EXT_GPIO10
  47. GPIO31 - EXT_GPIO11
  48. GPIO57 - EXT_GPIO12
  49. GPIO74 - EXT_IRQ1
  50. GPIO75 - EXT_IRQ2
  51. GPIO76 - EXT_IRQ3
  52. GPIO77 - EXT_IRQ4
  53. GPIO78 - EXT_IRQ5
  54. GPIO79 - EXT_IRQ6
  55. GPIO80 - EXT_IRQ7
  56. GPIO81 - EXT_IRQ8
  57. GPIO87 - VCCIO_PWREN (External Device PWREN)
  58. Dallas 1-Wire - Leave unconfigured for now...
  59. -------------
  60. GPIO0_2 - DS - 1Wire
  61. Ethernet
  62. --------
  63. GPIO1 - DM9000 PWR
  64. GPIO9 - DM9K_nIRQ
  65. GPIO36 - DM9K_RESET
  66. Keypad - Leave unconfigured by for now...
  67. ------
  68. GPIO1_2 - KP_DKIN0
  69. GPIO5_2 - KP_MKOUT7
  70. GPIO82 - KP_DKIN1
  71. GPIO85 - KP_DKIN2
  72. GPIO86 - KP_DKIN3
  73. GPIO113 - KP_MKIN0
  74. GPIO114 - KP_MKIN1
  75. GPIO115 - KP_MKIN2
  76. GPIO116 - KP_MKIN3
  77. GPIO117 - KP_MKIN4
  78. GPIO118 - KP_MKIN5
  79. GPIO119 - KP_MKIN6
  80. GPIO120 - KP_MKIN7
  81. GPIO121 - KP_MKOUT0
  82. GPIO122 - KP_MKOUT1
  83. GPIO122 - KP_MKOUT2
  84. GPIO123 - KP_MKOUT3
  85. GPIO124 - KP_MKOUT4
  86. GPIO125 - KP_MKOUT5
  87. GPIO127 - KP_MKOUT6
  88. Data Bus - Leave unconfigured for now...
  89. --------
  90. GPIO2 - nWait (Data Bus)
  91. USB Device
  92. ----------
  93. GPIO4_2 - USBD_PULLUP
  94. GPIO10 - UTM_CLK (USB Device UTM Clk)
  95. GPIO49 - USB 2.0 Device UTM_DATA0
  96. GPIO50 - USB 2.0 Device UTM_DATA1
  97. GPIO51 - USB 2.0 Device UTM_DATA2
  98. GPIO52 - USB 2.0 Device UTM_DATA3
  99. GPIO53 - USB 2.0 Device UTM_DATA4
  100. GPIO54 - USB 2.0 Device UTM_DATA5
  101. GPIO55 - USB 2.0 Device UTM_DATA6
  102. GPIO56 - USB 2.0 Device UTM_DATA7
  103. GPIO58 - UTM_RXVALID (USB 2.0 Device)
  104. GPIO59 - UTM_RXACTIVE (USB 2.0 Device)
  105. GPIO60 - UTM_RXERROR
  106. GPIO61 - UTM_OPMODE0
  107. GPIO62 - UTM_OPMODE1
  108. GPIO71 - USBD_INT (USB Device?)
  109. GPIO73 - UTM_TXREADY (USB 2.0 Device)
  110. GPIO83 - UTM_TXVALID (USB 2.0 Device)
  111. GPIO98 - UTM_RESET (USB 2.0 device)
  112. GPIO99 - UTM_XCVR_SELECT
  113. GPIO100 - UTM_TERM_SELECT
  114. GPIO101 - UTM_SUSPENDM_X
  115. GPIO102 - UTM_LINESTATE0
  116. GPIO103 - UTM_LINESTATE1
  117. Card-Bus Interface - Leave unconfigured for now...
  118. ------------------
  119. GPIO5 - nPIOR (I/O space output enable)
  120. GPIO6 - nPIOW (I/O space write enable)
  121. GPIO7 - nIOS16 (Input from I/O space telling size of data bus)
  122. GPIO8 - nPWAIT (Input for inserting wait states)
  123. LCD
  124. ---
  125. GPIO6_2 - LDD0
  126. GPIO7_2 - LDD1
  127. GPIO8_2 - LDD2
  128. GPIO9_2 - LDD3
  129. GPIO11_2 - LDD5
  130. GPIO12_2 - LDD6
  131. GPIO13_2 - LDD7
  132. GPIO14_2 - VSYNC
  133. GPIO15_2 - HSYNC
  134. GPIO16_2 - VCLK
  135. GPIO17_2 - HCLK
  136. GPIO18_2 - VDEN
  137. GPIO63 - LDD8 (CPU LCD)
  138. GPIO64 - LDD9 (CPU LCD)
  139. GPIO65 - LDD10 (CPU LCD)
  140. GPIO66 - LDD11 (CPU LCD)
  141. GPIO67 - LDD12 (CPU LCD)
  142. GPIO68 - LDD13 (CPU LCD)
  143. GPIO69 - LDD14 (CPU LCD)
  144. GPIO70 - LDD15 (CPU LCD)
  145. GPIO88 - VCCLCD_PWREN (LCD Panel PWREN)
  146. GPIO97 - BACKLIGHT_EN
  147. GPIO104 - LCD_PWREN
  148. PWM - Leave unconfigured for now...
  149. ---
  150. GPIO11 - PWM0
  151. GPIO12 - PWM1
  152. GPIO13 - PWM2
  153. GPIO14 - PWM3
  154. SD-CARD
  155. -------
  156. GPIO18 - SDDATA0
  157. GPIO19 - SDDATA1
  158. GPIO20 - SDDATA2
  159. GPIO21 - SDDATA3
  160. GPIO22 - SDCLK
  161. GPIO23 - SDCMD
  162. GPIO72 - SD_WP
  163. GPIO84 - SD_nIRQ_CD (SD-Card)
  164. I2C
  165. ---
  166. GPIO32 - I2CSCL
  167. GPIO33 - I2CSDA
  168. AC97
  169. ----
  170. GPIO35 - AC97_SDATA_IN
  171. GPIO37 - AC97_SDATA_OUT
  172. GPIO38 - AC97_SYNC
  173. GPIO39 - AC97_BITCLK
  174. GPIO40 - AC97_nRESET
  175. UART1
  176. -----
  177. GPIO41 - UART_RXD1
  178. GPIO42 - UART_TXD1
  179. GPIO43 - UART_CTS1
  180. GPIO44 - UART_DCD1
  181. GPIO45 - UART_DSR1
  182. GPIO46 - UART_nRI1
  183. GPIO47 - UART_DTR1
  184. GPIO48 - UART_RTS1
  185. UART2
  186. -----
  187. GPIO109 - RTS2
  188. GPIO110 - RXD2
  189. GPIO111 - TXD2
  190. GPIO112 - nCTS2
  191. UART3
  192. -----
  193. GPIO105 - nCTS3
  194. GPIO106 - nRTS3
  195. GPIO107 - TXD3
  196. GPIO108 - RXD3
  197. SSP3 - Leave unconfigured for now...
  198. ----
  199. GPIO89 - SSP3_CLK
  200. GPIO90 - SSP3_SFRM
  201. GPIO91 - SSP3_TXD
  202. GPIO92 - SSP3_RXD
  203. SSP4
  204. GPIO93 - SSP4_CLK
  205. GPIO94 - SSP4_SFRM
  206. GPIO95 - SSP4_TXD
  207. GPIO96 - SSP4_RXD
  208. */
  209. static mfp_cfg_t mfp_cfg[] __initdata = {
  210. /* USB */
  211. GPIO10_UTM_CLK,
  212. GPIO49_U2D_PHYDATA_0,
  213. GPIO50_U2D_PHYDATA_1,
  214. GPIO51_U2D_PHYDATA_2,
  215. GPIO52_U2D_PHYDATA_3,
  216. GPIO53_U2D_PHYDATA_4,
  217. GPIO54_U2D_PHYDATA_5,
  218. GPIO55_U2D_PHYDATA_6,
  219. GPIO56_U2D_PHYDATA_7,
  220. GPIO58_UTM_RXVALID,
  221. GPIO59_UTM_RXACTIVE,
  222. GPIO60_U2D_RXERROR,
  223. GPIO61_U2D_OPMODE0,
  224. GPIO62_U2D_OPMODE1,
  225. GPIO71_GPIO, /* USBD_INT */
  226. GPIO73_UTM_TXREADY,
  227. GPIO83_U2D_TXVALID,
  228. GPIO98_U2D_RESET,
  229. GPIO99_U2D_XCVR_SEL,
  230. GPIO100_U2D_TERM_SEL,
  231. GPIO101_U2D_SUSPEND,
  232. GPIO102_UTM_LINESTATE_0,
  233. GPIO103_UTM_LINESTATE_1,
  234. GPIO4_2_GPIO | MFP_PULL_HIGH, /* UTM_PULLUP */
  235. /* DM9000 */
  236. GPIO1_GPIO,
  237. GPIO9_GPIO,
  238. GPIO36_GPIO,
  239. /* AC97 */
  240. GPIO35_AC97_SDATA_IN_0,
  241. GPIO37_AC97_SDATA_OUT,
  242. GPIO38_AC97_SYNC,
  243. GPIO39_AC97_BITCLK,
  244. GPIO40_AC97_nACRESET,
  245. /* UARTS */
  246. GPIO41_UART1_RXD,
  247. GPIO42_UART1_TXD,
  248. GPIO43_UART1_CTS,
  249. GPIO44_UART1_DCD,
  250. GPIO45_UART1_DSR,
  251. GPIO46_UART1_RI,
  252. GPIO47_UART1_DTR,
  253. GPIO48_UART1_RTS,
  254. GPIO109_UART2_RTS,
  255. GPIO110_UART2_RXD,
  256. GPIO111_UART2_TXD,
  257. GPIO112_UART2_CTS,
  258. GPIO105_UART3_CTS,
  259. GPIO106_UART3_RTS,
  260. GPIO107_UART3_TXD,
  261. GPIO108_UART3_RXD,
  262. GPIO78_GPIO,
  263. GPIO79_GPIO,
  264. GPIO80_GPIO,
  265. GPIO81_GPIO,
  266. /* I2C */
  267. GPIO32_I2C_SCL,
  268. GPIO33_I2C_SDA,
  269. /* MMC */
  270. GPIO18_MMC1_DAT0,
  271. GPIO19_MMC1_DAT1,
  272. GPIO20_MMC1_DAT2,
  273. GPIO21_MMC1_DAT3,
  274. GPIO22_MMC1_CLK,
  275. GPIO23_MMC1_CMD,
  276. GPIO72_GPIO | MFP_PULL_HIGH, /* Card Detect */
  277. GPIO84_GPIO | MFP_PULL_LOW, /* Write Protect */
  278. /* IRQ */
  279. GPIO74_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ1 */
  280. GPIO75_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ2 */
  281. GPIO76_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ3 */
  282. GPIO77_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ4 */
  283. GPIO78_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ5 */
  284. GPIO79_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ6 */
  285. GPIO80_GPIO | MFP_LPM_EDGE_RISE, /* EXT_IRQ7 */
  286. GPIO81_GPIO | MFP_LPM_EDGE_RISE /* EXT_IRQ8 */
  287. };
  288. /* MMC/MCI Support */
  289. #if defined(CONFIG_MMC)
  290. static struct pxamci_platform_data mxm_8x10_mci_platform_data = {
  291. .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
  292. .detect_delay_ms = 10,
  293. };
  294. static struct gpiod_lookup_table mxm_8x10_mci_gpio_table = {
  295. .dev_id = "pxa2xx-mci.0",
  296. .table = {
  297. /* Card detect on GPIO 72 */
  298. GPIO_LOOKUP("gpio-pxa", MXM_8X10_SD_nCD,
  299. "cd", GPIO_ACTIVE_LOW),
  300. /* Write protect on GPIO 84 */
  301. GPIO_LOOKUP("gpio-pxa", MXM_8X10_SD_WP,
  302. "wp", GPIO_ACTIVE_LOW),
  303. { },
  304. },
  305. };
  306. void __init mxm_8x10_mmc_init(void)
  307. {
  308. gpiod_add_lookup_table(&mxm_8x10_mci_gpio_table);
  309. pxa_set_mci_info(&mxm_8x10_mci_platform_data);
  310. }
  311. #endif
  312. /* USB Open Host Controller Interface */
  313. static struct pxaohci_platform_data mxm_8x10_ohci_platform_data = {
  314. .port_mode = PMM_NPS_MODE,
  315. .flags = ENABLE_PORT_ALL
  316. };
  317. void __init mxm_8x10_usb_host_init(void)
  318. {
  319. pxa_set_ohci_info(&mxm_8x10_ohci_platform_data);
  320. }
  321. void __init mxm_8x10_ac97_init(void)
  322. {
  323. pxa_set_ac97_info(NULL);
  324. }
  325. /* NAND flash Support */
  326. #if IS_ENABLED(CONFIG_MTD_NAND_MARVELL)
  327. #define NAND_BLOCK_SIZE SZ_128K
  328. #define NB(x) (NAND_BLOCK_SIZE * (x))
  329. static struct mtd_partition mxm_8x10_nand_partitions[] = {
  330. [0] = {
  331. .name = "boot",
  332. .size = NB(0x002),
  333. .offset = NB(0x000),
  334. .mask_flags = MTD_WRITEABLE
  335. },
  336. [1] = {
  337. .name = "kernel",
  338. .size = NB(0x010),
  339. .offset = NB(0x002),
  340. .mask_flags = MTD_WRITEABLE
  341. },
  342. [2] = {
  343. .name = "root",
  344. .size = NB(0x36c),
  345. .offset = NB(0x012)
  346. },
  347. [3] = {
  348. .name = "bbt",
  349. .size = NB(0x082),
  350. .offset = NB(0x37e),
  351. .mask_flags = MTD_WRITEABLE
  352. }
  353. };
  354. static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = {
  355. .keep_config = 1,
  356. .parts = mxm_8x10_nand_partitions,
  357. .nr_parts = ARRAY_SIZE(mxm_8x10_nand_partitions)
  358. };
  359. static void __init mxm_8x10_nand_init(void)
  360. {
  361. pxa3xx_set_nand_info(&mxm_8x10_nand_info);
  362. }
  363. #else
  364. static inline void mxm_8x10_nand_init(void) {}
  365. #endif /* IS_ENABLED(CONFIG_MTD_NAND_MARVELL) */
  366. /* Ethernet support: Davicom DM9000 */
  367. static struct resource dm9k_resources[] = {
  368. [0] = {
  369. .start = MXM_8X10_ETH_PHYS + 0x300,
  370. .end = MXM_8X10_ETH_PHYS + 0x300,
  371. .flags = IORESOURCE_MEM
  372. },
  373. [1] = {
  374. .start = MXM_8X10_ETH_PHYS + 0x308,
  375. .end = MXM_8X10_ETH_PHYS + 0x308,
  376. .flags = IORESOURCE_MEM
  377. },
  378. [2] = {
  379. .start = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO9)),
  380. .end = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO9)),
  381. .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE
  382. }
  383. };
  384. static struct dm9000_plat_data dm9k_plat_data = {
  385. .flags = DM9000_PLATF_16BITONLY
  386. };
  387. static struct platform_device dm9k_device = {
  388. .name = "dm9000",
  389. .id = 0,
  390. .num_resources = ARRAY_SIZE(dm9k_resources),
  391. .resource = dm9k_resources,
  392. .dev = {
  393. .platform_data = &dm9k_plat_data
  394. }
  395. };
  396. static void __init mxm_8x10_ethernet_init(void)
  397. {
  398. platform_device_register(&dm9k_device);
  399. }
  400. /* PXA UARTs */
  401. static void __init mxm_8x10_uarts_init(void)
  402. {
  403. pxa_set_ffuart_info(NULL);
  404. pxa_set_btuart_info(NULL);
  405. pxa_set_stuart_info(NULL);
  406. }
  407. /* I2C and Real Time Clock */
  408. static struct i2c_board_info __initdata mxm_8x10_i2c_devices[] = {
  409. {
  410. I2C_BOARD_INFO("ds1337", 0x68)
  411. }
  412. };
  413. static void __init mxm_8x10_i2c_init(void)
  414. {
  415. i2c_register_board_info(0, mxm_8x10_i2c_devices,
  416. ARRAY_SIZE(mxm_8x10_i2c_devices));
  417. pxa_set_i2c_info(NULL);
  418. }
  419. void __init mxm_8x10_barebones_init(void)
  420. {
  421. pxa3xx_mfp_config(ARRAY_AND_SIZE(mfp_cfg));
  422. mxm_8x10_uarts_init();
  423. mxm_8x10_nand_init();
  424. mxm_8x10_i2c_init();
  425. mxm_8x10_ethernet_init();
  426. }