Linux Audio

Check our new training course

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