1/*
2 * CompuLab CM-T35/CM-T3730 modules support
3 *
4 * Copyright (C) 2009-2011 CompuLab, Ltd.
5 * Authors: Mike Rapoport <mike@compulab.co.il>
6 *	    Igor Grinberg <grinberg@compulab.co.il>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * version 2 as published by the Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * General Public License for more details.
16 *
17 */
18
19#include <linux/clk-provider.h>
20#include <linux/clkdev.h>
21#include <linux/kernel.h>
22#include <linux/init.h>
23#include <linux/platform_device.h>
24#include <linux/input.h>
25#include <linux/input/matrix_keypad.h>
26#include <linux/delay.h>
27#include <linux/gpio.h>
28#include <linux/omap-gpmc.h>
29#include <linux/platform_data/gpio-omap.h>
30
31#include <linux/platform_data/at24.h>
32#include <linux/i2c/twl.h>
33#include <linux/regulator/fixed.h>
34#include <linux/regulator/machine.h>
35#include <linux/mmc/host.h>
36#include <linux/usb/phy.h>
37
38#include <linux/spi/spi.h>
39#include <linux/spi/tdo24m.h>
40
41#include <asm/mach-types.h>
42#include <asm/mach/arch.h>
43#include <asm/mach/map.h>
44
45#include <linux/platform_data/mtd-nand-omap2.h>
46#include <video/omapdss.h>
47#include <video/omap-panel-data.h>
48#include <linux/platform_data/spi-omap2-mcspi.h>
49
50#include "common.h"
51#include "mux.h"
52#include "sdram-micron-mt46h32m32lf-6.h"
53#include "hsmmc.h"
54#include "common-board-devices.h"
55
56#define CM_T35_GPIO_PENDOWN		57
57#define SB_T35_USB_HUB_RESET_GPIO	167
58
59#define CM_T35_SMSC911X_CS	5
60#define CM_T35_SMSC911X_GPIO	163
61#define SB_T35_SMSC911X_CS	4
62#define SB_T35_SMSC911X_GPIO	65
63
64#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
65#include <linux/smsc911x.h>
66#include "gpmc-smsc911x.h"
67
68static struct omap_smsc911x_platform_data cm_t35_smsc911x_cfg = {
69	.id		= 0,
70	.cs             = CM_T35_SMSC911X_CS,
71	.gpio_irq       = CM_T35_SMSC911X_GPIO,
72	.gpio_reset     = -EINVAL,
73	.flags		= SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
74};
75
76static struct omap_smsc911x_platform_data sb_t35_smsc911x_cfg = {
77	.id		= 1,
78	.cs             = SB_T35_SMSC911X_CS,
79	.gpio_irq       = SB_T35_SMSC911X_GPIO,
80	.gpio_reset     = -EINVAL,
81	.flags		= SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
82};
83
84static struct regulator_consumer_supply cm_t35_smsc911x_supplies[] = {
85	REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
86	REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
87};
88
89static struct regulator_consumer_supply sb_t35_smsc911x_supplies[] = {
90	REGULATOR_SUPPLY("vddvario", "smsc911x.1"),
91	REGULATOR_SUPPLY("vdd33a", "smsc911x.1"),
92};
93
94static void __init cm_t35_init_ethernet(void)
95{
96	regulator_register_fixed(0, cm_t35_smsc911x_supplies,
97				 ARRAY_SIZE(cm_t35_smsc911x_supplies));
98	regulator_register_fixed(1, sb_t35_smsc911x_supplies,
99				 ARRAY_SIZE(sb_t35_smsc911x_supplies));
100
101	gpmc_smsc911x_init(&cm_t35_smsc911x_cfg);
102	gpmc_smsc911x_init(&sb_t35_smsc911x_cfg);
103}
104#else
105static inline void __init cm_t35_init_ethernet(void) { return; }
106#endif
107
108#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
109#include <linux/leds.h>
110
111static struct gpio_led cm_t35_leds[] = {
112	[0] = {
113		.gpio			= 186,
114		.name			= "cm-t35:green",
115		.default_trigger	= "heartbeat",
116		.active_low		= 0,
117	},
118};
119
120static struct gpio_led_platform_data cm_t35_led_pdata = {
121	.num_leds	= ARRAY_SIZE(cm_t35_leds),
122	.leds		= cm_t35_leds,
123};
124
125static struct platform_device cm_t35_led_device = {
126	.name		= "leds-gpio",
127	.id		= -1,
128	.dev		= {
129		.platform_data	= &cm_t35_led_pdata,
130	},
131};
132
133static void __init cm_t35_init_led(void)
134{
135	platform_device_register(&cm_t35_led_device);
136}
137#else
138static inline void cm_t35_init_led(void) {}
139#endif
140
141#if defined(CONFIG_MTD_NAND_OMAP2) || defined(CONFIG_MTD_NAND_OMAP2_MODULE)
142#include <linux/mtd/mtd.h>
143#include <linux/mtd/nand.h>
144#include <linux/mtd/partitions.h>
145
146static struct mtd_partition cm_t35_nand_partitions[] = {
147	{
148		.name           = "xloader",
149		.offset         = 0,			/* Offset = 0x00000 */
150		.size           = 4 * NAND_BLOCK_SIZE,
151		.mask_flags     = MTD_WRITEABLE
152	},
153	{
154		.name           = "uboot",
155		.offset         = MTDPART_OFS_APPEND,	/* Offset = 0x80000 */
156		.size           = 15 * NAND_BLOCK_SIZE,
157	},
158	{
159		.name           = "uboot environment",
160		.offset         = MTDPART_OFS_APPEND,	/* Offset = 0x260000 */
161		.size           = 2 * NAND_BLOCK_SIZE,
162	},
163	{
164		.name           = "linux",
165		.offset         = MTDPART_OFS_APPEND,	/* Offset = 0x2A0000 */
166		.size           = 32 * NAND_BLOCK_SIZE,
167	},
168	{
169		.name           = "rootfs",
170		.offset         = MTDPART_OFS_APPEND,	/* Offset = 0x6A0000 */
171		.size           = MTDPART_SIZ_FULL,
172	},
173};
174
175static struct omap_nand_platform_data cm_t35_nand_data = {
176	.parts			= cm_t35_nand_partitions,
177	.nr_parts		= ARRAY_SIZE(cm_t35_nand_partitions),
178	.cs			= 0,
179};
180
181static void __init cm_t35_init_nand(void)
182{
183	if (gpmc_nand_init(&cm_t35_nand_data, NULL) < 0)
184		pr_err("CM-T35: Unable to register NAND device\n");
185}
186#else
187static inline void cm_t35_init_nand(void) {}
188#endif
189
190#define CM_T35_LCD_EN_GPIO 157
191#define CM_T35_LCD_BL_GPIO 58
192#define CM_T35_DVI_EN_GPIO 54
193
194static const struct display_timing cm_t35_lcd_videomode = {
195	.pixelclock	= { 0, 26000000, 0 },
196
197	.hactive = { 0, 480, 0 },
198	.hfront_porch = { 0, 104, 0 },
199	.hback_porch = { 0, 8, 0 },
200	.hsync_len = { 0, 8, 0 },
201
202	.vactive = { 0, 640, 0 },
203	.vfront_porch = { 0, 4, 0 },
204	.vback_porch = { 0, 2, 0 },
205	.vsync_len = { 0, 2, 0 },
206
207	.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
208		DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_NEGEDGE,
209};
210
211static struct panel_dpi_platform_data cm_t35_lcd_pdata = {
212	.name                   = "lcd",
213	.source                 = "dpi.0",
214
215	.data_lines		= 18,
216
217	.display_timing		= &cm_t35_lcd_videomode,
218
219	.enable_gpio		= -1,
220	.backlight_gpio		= CM_T35_LCD_BL_GPIO,
221};
222
223static struct platform_device cm_t35_lcd_device = {
224	.name                   = "panel-dpi",
225	.id                     = 0,
226	.dev.platform_data      = &cm_t35_lcd_pdata,
227};
228
229static struct connector_dvi_platform_data cm_t35_dvi_connector_pdata = {
230	.name                   = "dvi",
231	.source                 = "tfp410.0",
232	.i2c_bus_num            = -1,
233};
234
235static struct platform_device cm_t35_dvi_connector_device = {
236	.name                   = "connector-dvi",
237	.id                     = 0,
238	.dev.platform_data      = &cm_t35_dvi_connector_pdata,
239};
240
241static struct encoder_tfp410_platform_data cm_t35_tfp410_pdata = {
242	.name                   = "tfp410.0",
243	.source                 = "dpi.0",
244	.data_lines             = 24,
245	.power_down_gpio        = CM_T35_DVI_EN_GPIO,
246};
247
248static struct platform_device cm_t35_tfp410_device = {
249	.name                   = "tfp410",
250	.id                     = 0,
251	.dev.platform_data      = &cm_t35_tfp410_pdata,
252};
253
254static struct connector_atv_platform_data cm_t35_tv_pdata = {
255	.name = "tv",
256	.source = "venc.0",
257	.connector_type = OMAP_DSS_VENC_TYPE_SVIDEO,
258	.invert_polarity = false,
259};
260
261static struct platform_device cm_t35_tv_connector_device = {
262	.name                   = "connector-analog-tv",
263	.id                     = 0,
264	.dev.platform_data      = &cm_t35_tv_pdata,
265};
266
267static struct omap_dss_board_info cm_t35_dss_data = {
268	.default_display_name = "dvi",
269};
270
271static struct omap2_mcspi_device_config tdo24m_mcspi_config = {
272	.turbo_mode	= 0,
273};
274
275static struct tdo24m_platform_data tdo24m_config = {
276	.model = TDO35S,
277};
278
279static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {
280	{
281		.modalias		= "tdo24m",
282		.bus_num		= 4,
283		.chip_select		= 0,
284		.max_speed_hz		= 1000000,
285		.controller_data	= &tdo24m_mcspi_config,
286		.platform_data		= &tdo24m_config,
287	},
288};
289
290static void __init cm_t35_init_display(void)
291{
292	int err;
293
294	spi_register_board_info(cm_t35_lcd_spi_board_info,
295				ARRAY_SIZE(cm_t35_lcd_spi_board_info));
296
297
298	err = gpio_request_one(CM_T35_LCD_EN_GPIO, GPIOF_OUT_INIT_LOW,
299			"lcd bl enable");
300	if (err) {
301		pr_err("CM-T35: failed to request LCD EN GPIO\n");
302		return;
303	}
304
305	msleep(50);
306	gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
307
308	err = omap_display_init(&cm_t35_dss_data);
309	if (err) {
310		pr_err("CM-T35: failed to register DSS device\n");
311		gpio_free(CM_T35_LCD_EN_GPIO);
312	}
313
314	platform_device_register(&cm_t35_tfp410_device);
315	platform_device_register(&cm_t35_dvi_connector_device);
316	platform_device_register(&cm_t35_lcd_device);
317	platform_device_register(&cm_t35_tv_connector_device);
318}
319
320static struct regulator_consumer_supply cm_t35_vmmc1_supply[] = {
321	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
322};
323
324static struct regulator_consumer_supply cm_t35_vsim_supply[] = {
325	REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"),
326};
327
328static struct regulator_consumer_supply cm_t35_vio_supplies[] = {
329	REGULATOR_SUPPLY("vcc", "spi1.0"),
330	REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
331	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dpi.0"),
332	REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.0"),
333};
334
335/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
336static struct regulator_init_data cm_t35_vmmc1 = {
337	.constraints = {
338		.min_uV			= 1850000,
339		.max_uV			= 3150000,
340		.valid_modes_mask	= REGULATOR_MODE_NORMAL
341					| REGULATOR_MODE_STANDBY,
342		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
343					| REGULATOR_CHANGE_MODE
344					| REGULATOR_CHANGE_STATUS,
345	},
346	.num_consumer_supplies	= ARRAY_SIZE(cm_t35_vmmc1_supply),
347	.consumer_supplies	= cm_t35_vmmc1_supply,
348};
349
350/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
351static struct regulator_init_data cm_t35_vsim = {
352	.constraints = {
353		.min_uV			= 1800000,
354		.max_uV			= 3000000,
355		.valid_modes_mask	= REGULATOR_MODE_NORMAL
356					| REGULATOR_MODE_STANDBY,
357		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
358					| REGULATOR_CHANGE_MODE
359					| REGULATOR_CHANGE_STATUS,
360	},
361	.num_consumer_supplies	= ARRAY_SIZE(cm_t35_vsim_supply),
362	.consumer_supplies	= cm_t35_vsim_supply,
363};
364
365static struct regulator_init_data cm_t35_vio = {
366	.constraints = {
367		.min_uV			= 1800000,
368		.max_uV			= 1800000,
369		.apply_uV		= true,
370		.valid_modes_mask	= REGULATOR_MODE_NORMAL
371					| REGULATOR_MODE_STANDBY,
372		.valid_ops_mask		= REGULATOR_CHANGE_MODE,
373	},
374	.num_consumer_supplies	= ARRAY_SIZE(cm_t35_vio_supplies),
375	.consumer_supplies	= cm_t35_vio_supplies,
376};
377
378static uint32_t cm_t35_keymap[] = {
379	KEY(0, 0, KEY_A),	KEY(0, 1, KEY_B),	KEY(0, 2, KEY_LEFT),
380	KEY(1, 0, KEY_UP),	KEY(1, 1, KEY_ENTER),	KEY(1, 2, KEY_DOWN),
381	KEY(2, 0, KEY_RIGHT),	KEY(2, 1, KEY_C),	KEY(2, 2, KEY_D),
382};
383
384static struct matrix_keymap_data cm_t35_keymap_data = {
385	.keymap			= cm_t35_keymap,
386	.keymap_size		= ARRAY_SIZE(cm_t35_keymap),
387};
388
389static struct twl4030_keypad_data cm_t35_kp_data = {
390	.keymap_data	= &cm_t35_keymap_data,
391	.rows		= 3,
392	.cols		= 3,
393	.rep		= 1,
394};
395
396static struct omap2_hsmmc_info mmc[] = {
397	{
398		.mmc		= 1,
399		.caps		= MMC_CAP_4_BIT_DATA,
400		.gpio_cd	= -EINVAL,
401		.gpio_wp	= -EINVAL,
402		.deferred	= true,
403	},
404	{
405		.mmc		= 2,
406		.caps		= MMC_CAP_4_BIT_DATA,
407		.transceiver	= 1,
408		.gpio_cd	= -EINVAL,
409		.gpio_wp	= -EINVAL,
410		.ocr_mask	= 0x00100000,	/* 3.3V */
411	},
412	{}	/* Terminator */
413};
414
415static struct usbhs_phy_data phy_data[] __initdata = {
416	{
417		.port = 1,
418		.reset_gpio = OMAP_MAX_GPIO_LINES + 6,
419		.vcc_gpio = -EINVAL,
420	},
421	{
422		.port = 2,
423		.reset_gpio = OMAP_MAX_GPIO_LINES + 7,
424		.vcc_gpio = -EINVAL,
425	},
426};
427
428static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
429	.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
430	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
431};
432
433static void  __init cm_t35_init_usbh(void)
434{
435	int err;
436
437	err = gpio_request_one(SB_T35_USB_HUB_RESET_GPIO,
438			       GPIOF_OUT_INIT_LOW, "usb hub rst");
439	if (err) {
440		pr_err("SB-T35: usb hub rst gpio request failed: %d\n", err);
441	} else {
442		udelay(10);
443		gpio_set_value(SB_T35_USB_HUB_RESET_GPIO, 1);
444		msleep(1);
445	}
446
447	usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data));
448	usbhs_init(&usbhs_bdata);
449}
450
451static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
452				 unsigned ngpio)
453{
454	int wlan_rst = gpio + 2;
455
456	if (gpio_request_one(wlan_rst, GPIOF_OUT_INIT_HIGH, "WLAN RST") == 0) {
457		gpio_export(wlan_rst, 0);
458		udelay(10);
459		gpio_set_value_cansleep(wlan_rst, 0);
460		udelay(10);
461		gpio_set_value_cansleep(wlan_rst, 1);
462	} else {
463		pr_err("CM-T35: could not obtain gpio for WiFi reset\n");
464	}
465
466	/* gpio + 0 is "mmc0_cd" (input/IRQ) */
467	mmc[0].gpio_cd = gpio + 0;
468	omap_hsmmc_late_init(mmc);
469
470	return 0;
471}
472
473static struct twl4030_gpio_platform_data cm_t35_gpio_data = {
474	.setup          = cm_t35_twl_gpio_setup,
475};
476
477static struct twl4030_power_data cm_t35_power_data = {
478	.use_poweroff	= true,
479};
480
481static struct twl4030_platform_data cm_t35_twldata = {
482	/* platform_data for children goes here */
483	.keypad		= &cm_t35_kp_data,
484	.gpio		= &cm_t35_gpio_data,
485	.vmmc1		= &cm_t35_vmmc1,
486	.vsim		= &cm_t35_vsim,
487	.vio		= &cm_t35_vio,
488	.power		= &cm_t35_power_data,
489};
490
491#if defined(CONFIG_VIDEO_OMAP3) || defined(CONFIG_VIDEO_OMAP3_MODULE)
492#include <media/omap3isp.h>
493#include "devices.h"
494
495static struct isp_platform_subdev cm_t35_isp_subdevs[] = {
496	{
497		.board_info = &(struct i2c_board_info){
498			I2C_BOARD_INFO("mt9t001", 0x5d)
499		},
500		.i2c_adapter_id = 3,
501		.bus = &(struct isp_bus_cfg){
502			.interface = ISP_INTERFACE_PARALLEL,
503			.bus = {
504				.parallel = {
505					.clk_pol = 1,
506				},
507			},
508		},
509	},
510	{
511		.board_info = &(struct i2c_board_info){
512			I2C_BOARD_INFO("tvp5150", 0x5c),
513		},
514		.i2c_adapter_id = 3,
515		.bus = &(struct isp_bus_cfg){
516			.interface = ISP_INTERFACE_PARALLEL,
517			.bus = {
518				.parallel = {
519					.clk_pol = 0,
520				},
521			},
522		},
523	},
524	{ 0 },
525};
526
527static struct isp_platform_data cm_t35_isp_pdata = {
528	.subdevs = cm_t35_isp_subdevs,
529};
530
531static struct regulator_consumer_supply cm_t35_camera_supplies[] = {
532	REGULATOR_SUPPLY("vaa", "3-005d"),
533	REGULATOR_SUPPLY("vdd", "3-005d"),
534};
535
536static void __init cm_t35_init_camera(void)
537{
538	struct clk *clk;
539
540	clk = clk_register_fixed_rate(NULL, "mt9t001-clkin", NULL, CLK_IS_ROOT,
541				      48000000);
542	clk_register_clkdev(clk, NULL, "3-005d");
543
544	regulator_register_fixed(2, cm_t35_camera_supplies,
545				 ARRAY_SIZE(cm_t35_camera_supplies));
546
547	if (omap3_init_camera(&cm_t35_isp_pdata) < 0)
548		pr_warn("CM-T3x: Failed registering camera device!\n");
549}
550
551#else
552static inline void cm_t35_init_camera(void) {}
553#endif /* CONFIG_VIDEO_OMAP3 */
554
555static void __init cm_t35_init_i2c(void)
556{
557	omap3_pmic_get_config(&cm_t35_twldata, TWL_COMMON_PDATA_USB,
558			      TWL_COMMON_REGULATOR_VDAC |
559			      TWL_COMMON_PDATA_AUDIO);
560
561	omap3_pmic_init("tps65930", &cm_t35_twldata);
562
563	omap_register_i2c_bus(3, 400, NULL, 0);
564}
565
566#ifdef CONFIG_OMAP_MUX
567static struct omap_board_mux board_mux[] __initdata = {
568	/* nCS and IRQ for CM-T35 ethernet */
569	OMAP3_MUX(GPMC_NCS5, OMAP_MUX_MODE0),
570	OMAP3_MUX(UART3_CTS_RCTX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
571
572	/* nCS and IRQ for SB-T35 ethernet */
573	OMAP3_MUX(GPMC_NCS4, OMAP_MUX_MODE0),
574	OMAP3_MUX(GPMC_WAIT3, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
575
576	/* PENDOWN GPIO */
577	OMAP3_MUX(GPMC_NCS6, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
578
579	/* mUSB */
580	OMAP3_MUX(HSUSB0_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
581	OMAP3_MUX(HSUSB0_STP, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
582	OMAP3_MUX(HSUSB0_DIR, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
583	OMAP3_MUX(HSUSB0_NXT, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
584	OMAP3_MUX(HSUSB0_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
585	OMAP3_MUX(HSUSB0_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
586	OMAP3_MUX(HSUSB0_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
587	OMAP3_MUX(HSUSB0_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
588	OMAP3_MUX(HSUSB0_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
589	OMAP3_MUX(HSUSB0_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
590	OMAP3_MUX(HSUSB0_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
591	OMAP3_MUX(HSUSB0_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
592
593	/* MMC 2 */
594	OMAP3_MUX(SDMMC2_DAT4, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
595	OMAP3_MUX(SDMMC2_DAT5, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
596	OMAP3_MUX(SDMMC2_DAT6, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
597	OMAP3_MUX(SDMMC2_DAT7, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
598
599	/* McSPI 1 */
600	OMAP3_MUX(MCSPI1_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
601	OMAP3_MUX(MCSPI1_SIMO, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
602	OMAP3_MUX(MCSPI1_SOMI, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
603	OMAP3_MUX(MCSPI1_CS0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
604
605	/* McSPI 4 */
606	OMAP3_MUX(MCBSP1_CLKR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
607	OMAP3_MUX(MCBSP1_DX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
608	OMAP3_MUX(MCBSP1_DR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
609	OMAP3_MUX(MCBSP1_FSX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT_PULLUP),
610
611	/* McBSP 2 */
612	OMAP3_MUX(MCBSP2_FSX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
613	OMAP3_MUX(MCBSP2_CLKX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
614	OMAP3_MUX(MCBSP2_DR, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
615	OMAP3_MUX(MCBSP2_DX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
616
617	/* serial ports */
618	OMAP3_MUX(MCBSP3_CLKX, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
619	OMAP3_MUX(MCBSP3_FSX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
620	OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
621	OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
622
623	/* common DSS */
624	OMAP3_MUX(DSS_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
625	OMAP3_MUX(DSS_HSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
626	OMAP3_MUX(DSS_VSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
627	OMAP3_MUX(DSS_ACBIAS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
628	OMAP3_MUX(DSS_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
629	OMAP3_MUX(DSS_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
630	OMAP3_MUX(DSS_DATA8, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
631	OMAP3_MUX(DSS_DATA9, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
632	OMAP3_MUX(DSS_DATA10, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
633	OMAP3_MUX(DSS_DATA11, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
634	OMAP3_MUX(DSS_DATA12, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
635	OMAP3_MUX(DSS_DATA13, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
636	OMAP3_MUX(DSS_DATA14, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
637	OMAP3_MUX(DSS_DATA15, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
638	OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
639	OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
640
641	/* Camera */
642	OMAP3_MUX(CAM_HS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
643	OMAP3_MUX(CAM_VS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
644	OMAP3_MUX(CAM_XCLKA, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
645	OMAP3_MUX(CAM_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
646	OMAP3_MUX(CAM_FLD, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
647	OMAP3_MUX(CAM_D0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
648	OMAP3_MUX(CAM_D1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
649	OMAP3_MUX(CAM_D2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
650	OMAP3_MUX(CAM_D3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
651	OMAP3_MUX(CAM_D4, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
652	OMAP3_MUX(CAM_D5, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
653	OMAP3_MUX(CAM_D6, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
654	OMAP3_MUX(CAM_D7, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
655	OMAP3_MUX(CAM_D8, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
656	OMAP3_MUX(CAM_D9, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
657	OMAP3_MUX(CAM_STROBE, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
658
659	OMAP3_MUX(CAM_D10, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),
660	OMAP3_MUX(CAM_D11, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLDOWN),
661
662	/* display controls */
663	OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
664	OMAP3_MUX(GPMC_NCS7, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
665	OMAP3_MUX(GPMC_NCS3, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
666
667	/* TPS IRQ */
668	OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_WAKEUP_EN | \
669		  OMAP_PIN_INPUT_PULLUP),
670
671	{ .reg_offset = OMAP_MUX_TERMINATOR },
672};
673
674static void __init cm_t3x_common_dss_mux_init(int mux_mode)
675{
676	omap_mux_init_signal("dss_data18", mux_mode);
677	omap_mux_init_signal("dss_data19", mux_mode);
678	omap_mux_init_signal("dss_data20", mux_mode);
679	omap_mux_init_signal("dss_data21", mux_mode);
680	omap_mux_init_signal("dss_data22", mux_mode);
681	omap_mux_init_signal("dss_data23", mux_mode);
682}
683
684static void __init cm_t35_init_mux(void)
685{
686	int mux_mode = OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT;
687
688	omap_mux_init_signal("dss_data0.dss_data0", mux_mode);
689	omap_mux_init_signal("dss_data1.dss_data1", mux_mode);
690	omap_mux_init_signal("dss_data2.dss_data2", mux_mode);
691	omap_mux_init_signal("dss_data3.dss_data3", mux_mode);
692	omap_mux_init_signal("dss_data4.dss_data4", mux_mode);
693	omap_mux_init_signal("dss_data5.dss_data5", mux_mode);
694	cm_t3x_common_dss_mux_init(mux_mode);
695}
696
697static void __init cm_t3730_init_mux(void)
698{
699	int mux_mode = OMAP_MUX_MODE3 | OMAP_PIN_OUTPUT;
700
701	omap_mux_init_signal("sys_boot0", mux_mode);
702	omap_mux_init_signal("sys_boot1", mux_mode);
703	omap_mux_init_signal("sys_boot3", mux_mode);
704	omap_mux_init_signal("sys_boot4", mux_mode);
705	omap_mux_init_signal("sys_boot5", mux_mode);
706	omap_mux_init_signal("sys_boot6", mux_mode);
707	cm_t3x_common_dss_mux_init(mux_mode);
708}
709#else
710static inline void cm_t35_init_mux(void) {}
711static inline void cm_t3730_init_mux(void) {}
712#endif
713
714static void __init cm_t3x_common_init(void)
715{
716	omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
717	omap_serial_init();
718	omap_sdrc_init(mt46h32m32lf6_sdrc_params,
719			     mt46h32m32lf6_sdrc_params);
720	omap_hsmmc_init(mmc);
721	cm_t35_init_i2c();
722	omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
723	cm_t35_init_ethernet();
724	cm_t35_init_led();
725	cm_t35_init_display();
726	omap_twl4030_audio_init("cm-t3x", NULL);
727
728	usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
729	usb_musb_init(NULL);
730	cm_t35_init_usbh();
731	cm_t35_init_camera();
732}
733
734static void __init cm_t35_init(void)
735{
736	cm_t3x_common_init();
737	cm_t35_init_mux();
738	cm_t35_init_nand();
739}
740
741static void __init cm_t3730_init(void)
742{
743	cm_t3x_common_init();
744	cm_t3730_init_mux();
745}
746
747MACHINE_START(CM_T35, "Compulab CM-T35")
748	.atag_offset	= 0x100,
749	.reserve	= omap_reserve,
750	.map_io		= omap3_map_io,
751	.init_early	= omap35xx_init_early,
752	.init_irq	= omap3_init_irq,
753	.init_machine	= cm_t35_init,
754	.init_late	= omap35xx_init_late,
755	.init_time	= omap3_sync32k_timer_init,
756	.restart	= omap3xxx_restart,
757MACHINE_END
758
759MACHINE_START(CM_T3730, "Compulab CM-T3730")
760	.atag_offset	= 0x100,
761	.reserve	= omap_reserve,
762	.map_io		= omap3_map_io,
763	.init_early	= omap3630_init_early,
764	.init_irq	= omap3_init_irq,
765	.init_machine	= cm_t3730_init,
766	.init_late     = omap3630_init_late,
767	.init_time	= omap3_sync32k_timer_init,
768	.restart	= omap3xxx_restart,
769MACHINE_END
770