Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-omap2/board-cm-t35.c
10817 views
1
/*
2
* board-cm-t35.c (CompuLab CM-T35 module)
3
*
4
* Copyright (C) 2009 CompuLab, Ltd.
5
* Author: Mike Rapoport <[email protected]>
6
*
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public License
9
* version 2 as published by the Free Software Foundation.
10
*
11
* This program is distributed in the hope that it will be useful, but
12
* WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19
* 02110-1301 USA
20
*
21
*/
22
23
#include <linux/kernel.h>
24
#include <linux/init.h>
25
#include <linux/platform_device.h>
26
#include <linux/input.h>
27
#include <linux/input/matrix_keypad.h>
28
#include <linux/delay.h>
29
#include <linux/gpio.h>
30
31
#include <linux/i2c/at24.h>
32
#include <linux/i2c/twl.h>
33
#include <linux/regulator/machine.h>
34
#include <linux/mmc/host.h>
35
36
#include <linux/spi/spi.h>
37
#include <linux/spi/tdo24m.h>
38
39
#include <asm/mach-types.h>
40
#include <asm/mach/arch.h>
41
#include <asm/mach/map.h>
42
43
#include <plat/board.h>
44
#include <plat/common.h>
45
#include <plat/nand.h>
46
#include <plat/gpmc.h>
47
#include <plat/usb.h>
48
#include <video/omapdss.h>
49
#include <video/omap-panel-generic-dpi.h>
50
#include <plat/mcspi.h>
51
52
#include <mach/hardware.h>
53
54
#include "mux.h"
55
#include "sdram-micron-mt46h32m32lf-6.h"
56
#include "hsmmc.h"
57
#include "common-board-devices.h"
58
59
#define CM_T35_GPIO_PENDOWN 57
60
61
#define CM_T35_SMSC911X_CS 5
62
#define CM_T35_SMSC911X_GPIO 163
63
#define SB_T35_SMSC911X_CS 4
64
#define SB_T35_SMSC911X_GPIO 65
65
66
#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
67
#include <linux/smsc911x.h>
68
#include <plat/gpmc-smsc911x.h>
69
70
static struct omap_smsc911x_platform_data cm_t35_smsc911x_cfg = {
71
.id = 0,
72
.cs = CM_T35_SMSC911X_CS,
73
.gpio_irq = CM_T35_SMSC911X_GPIO,
74
.gpio_reset = -EINVAL,
75
.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
76
};
77
78
static struct omap_smsc911x_platform_data sb_t35_smsc911x_cfg = {
79
.id = 1,
80
.cs = SB_T35_SMSC911X_CS,
81
.gpio_irq = SB_T35_SMSC911X_GPIO,
82
.gpio_reset = -EINVAL,
83
.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
84
};
85
86
static void __init cm_t35_init_ethernet(void)
87
{
88
gpmc_smsc911x_init(&cm_t35_smsc911x_cfg);
89
gpmc_smsc911x_init(&sb_t35_smsc911x_cfg);
90
}
91
#else
92
static inline void __init cm_t35_init_ethernet(void) { return; }
93
#endif
94
95
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
96
#include <linux/leds.h>
97
98
static struct gpio_led cm_t35_leds[] = {
99
[0] = {
100
.gpio = 186,
101
.name = "cm-t35:green",
102
.default_trigger = "heartbeat",
103
.active_low = 0,
104
},
105
};
106
107
static struct gpio_led_platform_data cm_t35_led_pdata = {
108
.num_leds = ARRAY_SIZE(cm_t35_leds),
109
.leds = cm_t35_leds,
110
};
111
112
static struct platform_device cm_t35_led_device = {
113
.name = "leds-gpio",
114
.id = -1,
115
.dev = {
116
.platform_data = &cm_t35_led_pdata,
117
},
118
};
119
120
static void __init cm_t35_init_led(void)
121
{
122
platform_device_register(&cm_t35_led_device);
123
}
124
#else
125
static inline void cm_t35_init_led(void) {}
126
#endif
127
128
#if defined(CONFIG_MTD_NAND_OMAP2) || defined(CONFIG_MTD_NAND_OMAP2_MODULE)
129
#include <linux/mtd/mtd.h>
130
#include <linux/mtd/nand.h>
131
#include <linux/mtd/partitions.h>
132
133
static struct mtd_partition cm_t35_nand_partitions[] = {
134
{
135
.name = "xloader",
136
.offset = 0, /* Offset = 0x00000 */
137
.size = 4 * NAND_BLOCK_SIZE,
138
.mask_flags = MTD_WRITEABLE
139
},
140
{
141
.name = "uboot",
142
.offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */
143
.size = 15 * NAND_BLOCK_SIZE,
144
},
145
{
146
.name = "uboot environment",
147
.offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */
148
.size = 2 * NAND_BLOCK_SIZE,
149
},
150
{
151
.name = "linux",
152
.offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */
153
.size = 32 * NAND_BLOCK_SIZE,
154
},
155
{
156
.name = "rootfs",
157
.offset = MTDPART_OFS_APPEND, /* Offset = 0x680000 */
158
.size = MTDPART_SIZ_FULL,
159
},
160
};
161
162
static struct omap_nand_platform_data cm_t35_nand_data = {
163
.parts = cm_t35_nand_partitions,
164
.nr_parts = ARRAY_SIZE(cm_t35_nand_partitions),
165
.dma_channel = -1, /* disable DMA in OMAP NAND driver */
166
.cs = 0,
167
168
};
169
170
static void __init cm_t35_init_nand(void)
171
{
172
if (gpmc_nand_init(&cm_t35_nand_data) < 0)
173
pr_err("CM-T35: Unable to register NAND device\n");
174
}
175
#else
176
static inline void cm_t35_init_nand(void) {}
177
#endif
178
179
#define CM_T35_LCD_EN_GPIO 157
180
#define CM_T35_LCD_BL_GPIO 58
181
#define CM_T35_DVI_EN_GPIO 54
182
183
static int lcd_enabled;
184
static int dvi_enabled;
185
186
static int cm_t35_panel_enable_lcd(struct omap_dss_device *dssdev)
187
{
188
if (dvi_enabled) {
189
printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
190
return -EINVAL;
191
}
192
193
gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
194
gpio_set_value(CM_T35_LCD_BL_GPIO, 1);
195
196
lcd_enabled = 1;
197
198
return 0;
199
}
200
201
static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev)
202
{
203
lcd_enabled = 0;
204
205
gpio_set_value(CM_T35_LCD_BL_GPIO, 0);
206
gpio_set_value(CM_T35_LCD_EN_GPIO, 0);
207
}
208
209
static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
210
{
211
if (lcd_enabled) {
212
printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
213
return -EINVAL;
214
}
215
216
gpio_set_value(CM_T35_DVI_EN_GPIO, 0);
217
dvi_enabled = 1;
218
219
return 0;
220
}
221
222
static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev)
223
{
224
gpio_set_value(CM_T35_DVI_EN_GPIO, 1);
225
dvi_enabled = 0;
226
}
227
228
static int cm_t35_panel_enable_tv(struct omap_dss_device *dssdev)
229
{
230
return 0;
231
}
232
233
static void cm_t35_panel_disable_tv(struct omap_dss_device *dssdev)
234
{
235
}
236
237
static struct panel_generic_dpi_data lcd_panel = {
238
.name = "toppoly_tdo35s",
239
.platform_enable = cm_t35_panel_enable_lcd,
240
.platform_disable = cm_t35_panel_disable_lcd,
241
};
242
243
static struct omap_dss_device cm_t35_lcd_device = {
244
.name = "lcd",
245
.type = OMAP_DISPLAY_TYPE_DPI,
246
.driver_name = "generic_dpi_panel",
247
.data = &lcd_panel,
248
.phy.dpi.data_lines = 18,
249
};
250
251
static struct panel_generic_dpi_data dvi_panel = {
252
.name = "generic",
253
.platform_enable = cm_t35_panel_enable_dvi,
254
.platform_disable = cm_t35_panel_disable_dvi,
255
};
256
257
static struct omap_dss_device cm_t35_dvi_device = {
258
.name = "dvi",
259
.type = OMAP_DISPLAY_TYPE_DPI,
260
.driver_name = "generic_dpi_panel",
261
.data = &dvi_panel,
262
.phy.dpi.data_lines = 24,
263
};
264
265
static struct omap_dss_device cm_t35_tv_device = {
266
.name = "tv",
267
.driver_name = "venc",
268
.type = OMAP_DISPLAY_TYPE_VENC,
269
.phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
270
.platform_enable = cm_t35_panel_enable_tv,
271
.platform_disable = cm_t35_panel_disable_tv,
272
};
273
274
static struct omap_dss_device *cm_t35_dss_devices[] = {
275
&cm_t35_lcd_device,
276
&cm_t35_dvi_device,
277
&cm_t35_tv_device,
278
};
279
280
static struct omap_dss_board_info cm_t35_dss_data = {
281
.num_devices = ARRAY_SIZE(cm_t35_dss_devices),
282
.devices = cm_t35_dss_devices,
283
.default_device = &cm_t35_dvi_device,
284
};
285
286
static struct omap2_mcspi_device_config tdo24m_mcspi_config = {
287
.turbo_mode = 0,
288
.single_channel = 1, /* 0: slave, 1: master */
289
};
290
291
static struct tdo24m_platform_data tdo24m_config = {
292
.model = TDO35S,
293
};
294
295
static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {
296
{
297
.modalias = "tdo24m",
298
.bus_num = 4,
299
.chip_select = 0,
300
.max_speed_hz = 1000000,
301
.controller_data = &tdo24m_mcspi_config,
302
.platform_data = &tdo24m_config,
303
},
304
};
305
306
static struct gpio cm_t35_dss_gpios[] __initdata = {
307
{ CM_T35_LCD_EN_GPIO, GPIOF_OUT_INIT_LOW, "lcd enable" },
308
{ CM_T35_LCD_BL_GPIO, GPIOF_OUT_INIT_LOW, "lcd bl enable" },
309
{ CM_T35_DVI_EN_GPIO, GPIOF_OUT_INIT_HIGH, "dvi enable" },
310
};
311
312
static void __init cm_t35_init_display(void)
313
{
314
int err;
315
316
spi_register_board_info(cm_t35_lcd_spi_board_info,
317
ARRAY_SIZE(cm_t35_lcd_spi_board_info));
318
319
err = gpio_request_array(cm_t35_dss_gpios,
320
ARRAY_SIZE(cm_t35_dss_gpios));
321
if (err) {
322
pr_err("CM-T35: failed to request DSS control GPIOs\n");
323
return;
324
}
325
326
gpio_export(CM_T35_LCD_EN_GPIO, 0);
327
gpio_export(CM_T35_LCD_BL_GPIO, 0);
328
gpio_export(CM_T35_DVI_EN_GPIO, 0);
329
330
msleep(50);
331
gpio_set_value(CM_T35_LCD_EN_GPIO, 1);
332
333
err = omap_display_init(&cm_t35_dss_data);
334
if (err) {
335
pr_err("CM-T35: failed to register DSS device\n");
336
gpio_free_array(cm_t35_dss_gpios, ARRAY_SIZE(cm_t35_dss_gpios));
337
}
338
}
339
340
static struct regulator_consumer_supply cm_t35_vmmc1_supply = {
341
.supply = "vmmc",
342
};
343
344
static struct regulator_consumer_supply cm_t35_vsim_supply = {
345
.supply = "vmmc_aux",
346
};
347
348
static struct regulator_consumer_supply cm_t35_vdac_supply =
349
REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");
350
351
static struct regulator_consumer_supply cm_t35_vdvi_supply =
352
REGULATOR_SUPPLY("vdvi", "omapdss");
353
354
/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
355
static struct regulator_init_data cm_t35_vmmc1 = {
356
.constraints = {
357
.min_uV = 1850000,
358
.max_uV = 3150000,
359
.valid_modes_mask = REGULATOR_MODE_NORMAL
360
| REGULATOR_MODE_STANDBY,
361
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
362
| REGULATOR_CHANGE_MODE
363
| REGULATOR_CHANGE_STATUS,
364
},
365
.num_consumer_supplies = 1,
366
.consumer_supplies = &cm_t35_vmmc1_supply,
367
};
368
369
/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
370
static struct regulator_init_data cm_t35_vsim = {
371
.constraints = {
372
.min_uV = 1800000,
373
.max_uV = 3000000,
374
.valid_modes_mask = REGULATOR_MODE_NORMAL
375
| REGULATOR_MODE_STANDBY,
376
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
377
| REGULATOR_CHANGE_MODE
378
| REGULATOR_CHANGE_STATUS,
379
},
380
.num_consumer_supplies = 1,
381
.consumer_supplies = &cm_t35_vsim_supply,
382
};
383
384
/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */
385
static struct regulator_init_data cm_t35_vdac = {
386
.constraints = {
387
.min_uV = 1800000,
388
.max_uV = 1800000,
389
.valid_modes_mask = REGULATOR_MODE_NORMAL
390
| REGULATOR_MODE_STANDBY,
391
.valid_ops_mask = REGULATOR_CHANGE_MODE
392
| REGULATOR_CHANGE_STATUS,
393
},
394
.num_consumer_supplies = 1,
395
.consumer_supplies = &cm_t35_vdac_supply,
396
};
397
398
/* VPLL2 for digital video outputs */
399
static struct regulator_init_data cm_t35_vpll2 = {
400
.constraints = {
401
.name = "VDVI",
402
.min_uV = 1800000,
403
.max_uV = 1800000,
404
.valid_modes_mask = REGULATOR_MODE_NORMAL
405
| REGULATOR_MODE_STANDBY,
406
.valid_ops_mask = REGULATOR_CHANGE_MODE
407
| REGULATOR_CHANGE_STATUS,
408
},
409
.num_consumer_supplies = 1,
410
.consumer_supplies = &cm_t35_vdvi_supply,
411
};
412
413
static struct twl4030_usb_data cm_t35_usb_data = {
414
.usb_mode = T2_USB_MODE_ULPI,
415
};
416
417
static uint32_t cm_t35_keymap[] = {
418
KEY(0, 0, KEY_A), KEY(0, 1, KEY_B), KEY(0, 2, KEY_LEFT),
419
KEY(1, 0, KEY_UP), KEY(1, 1, KEY_ENTER), KEY(1, 2, KEY_DOWN),
420
KEY(2, 0, KEY_RIGHT), KEY(2, 1, KEY_C), KEY(2, 2, KEY_D),
421
};
422
423
static struct matrix_keymap_data cm_t35_keymap_data = {
424
.keymap = cm_t35_keymap,
425
.keymap_size = ARRAY_SIZE(cm_t35_keymap),
426
};
427
428
static struct twl4030_keypad_data cm_t35_kp_data = {
429
.keymap_data = &cm_t35_keymap_data,
430
.rows = 3,
431
.cols = 3,
432
.rep = 1,
433
};
434
435
static struct omap2_hsmmc_info mmc[] = {
436
{
437
.mmc = 1,
438
.caps = MMC_CAP_4_BIT_DATA,
439
.gpio_cd = -EINVAL,
440
.gpio_wp = -EINVAL,
441
442
},
443
{
444
.mmc = 2,
445
.caps = MMC_CAP_4_BIT_DATA,
446
.transceiver = 1,
447
.gpio_cd = -EINVAL,
448
.gpio_wp = -EINVAL,
449
.ocr_mask = 0x00100000, /* 3.3V */
450
},
451
{} /* Terminator */
452
};
453
454
static struct usbhs_omap_board_data usbhs_bdata __initdata = {
455
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
456
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
457
.port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
458
459
.phy_reset = true,
460
.reset_gpio_port[0] = OMAP_MAX_GPIO_LINES + 6,
461
.reset_gpio_port[1] = OMAP_MAX_GPIO_LINES + 7,
462
.reset_gpio_port[2] = -EINVAL
463
};
464
465
static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
466
unsigned ngpio)
467
{
468
int wlan_rst = gpio + 2;
469
470
if (gpio_request_one(wlan_rst, GPIOF_OUT_INIT_HIGH, "WLAN RST") == 0) {
471
gpio_export(wlan_rst, 0);
472
udelay(10);
473
gpio_set_value(wlan_rst, 0);
474
udelay(10);
475
gpio_set_value(wlan_rst, 1);
476
} else {
477
pr_err("CM-T35: could not obtain gpio for WiFi reset\n");
478
}
479
480
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
481
mmc[0].gpio_cd = gpio + 0;
482
omap2_hsmmc_init(mmc);
483
484
/* link regulators to MMC adapters */
485
cm_t35_vmmc1_supply.dev = mmc[0].dev;
486
cm_t35_vsim_supply.dev = mmc[0].dev;
487
488
return 0;
489
}
490
491
static struct twl4030_gpio_platform_data cm_t35_gpio_data = {
492
.gpio_base = OMAP_MAX_GPIO_LINES,
493
.irq_base = TWL4030_GPIO_IRQ_BASE,
494
.irq_end = TWL4030_GPIO_IRQ_END,
495
.setup = cm_t35_twl_gpio_setup,
496
};
497
498
static struct twl4030_platform_data cm_t35_twldata = {
499
.irq_base = TWL4030_IRQ_BASE,
500
.irq_end = TWL4030_IRQ_END,
501
502
/* platform_data for children goes here */
503
.keypad = &cm_t35_kp_data,
504
.usb = &cm_t35_usb_data,
505
.gpio = &cm_t35_gpio_data,
506
.vmmc1 = &cm_t35_vmmc1,
507
.vsim = &cm_t35_vsim,
508
.vdac = &cm_t35_vdac,
509
.vpll2 = &cm_t35_vpll2,
510
};
511
512
static void __init cm_t35_init_i2c(void)
513
{
514
omap3_pmic_init("tps65930", &cm_t35_twldata);
515
}
516
517
static void __init cm_t35_init_early(void)
518
{
519
omap2_init_common_infrastructure();
520
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
521
mt46h32m32lf6_sdrc_params);
522
}
523
524
#ifdef CONFIG_OMAP_MUX
525
static struct omap_board_mux board_mux[] __initdata = {
526
/* nCS and IRQ for CM-T35 ethernet */
527
OMAP3_MUX(GPMC_NCS5, OMAP_MUX_MODE0),
528
OMAP3_MUX(UART3_CTS_RCTX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
529
530
/* nCS and IRQ for SB-T35 ethernet */
531
OMAP3_MUX(GPMC_NCS4, OMAP_MUX_MODE0),
532
OMAP3_MUX(GPMC_WAIT3, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
533
534
/* PENDOWN GPIO */
535
OMAP3_MUX(GPMC_NCS6, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
536
537
/* mUSB */
538
OMAP3_MUX(HSUSB0_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
539
OMAP3_MUX(HSUSB0_STP, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
540
OMAP3_MUX(HSUSB0_DIR, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
541
OMAP3_MUX(HSUSB0_NXT, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
542
OMAP3_MUX(HSUSB0_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
543
OMAP3_MUX(HSUSB0_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
544
OMAP3_MUX(HSUSB0_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
545
OMAP3_MUX(HSUSB0_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
546
OMAP3_MUX(HSUSB0_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
547
OMAP3_MUX(HSUSB0_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
548
OMAP3_MUX(HSUSB0_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
549
OMAP3_MUX(HSUSB0_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
550
551
/* MMC 2 */
552
OMAP3_MUX(SDMMC2_DAT4, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
553
OMAP3_MUX(SDMMC2_DAT5, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
554
OMAP3_MUX(SDMMC2_DAT6, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
555
OMAP3_MUX(SDMMC2_DAT7, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
556
557
/* McSPI 1 */
558
OMAP3_MUX(MCSPI1_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
559
OMAP3_MUX(MCSPI1_SIMO, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
560
OMAP3_MUX(MCSPI1_SOMI, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
561
OMAP3_MUX(MCSPI1_CS0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
562
563
/* McSPI 4 */
564
OMAP3_MUX(MCBSP1_CLKR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
565
OMAP3_MUX(MCBSP1_DX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
566
OMAP3_MUX(MCBSP1_DR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
567
OMAP3_MUX(MCBSP1_FSX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT_PULLUP),
568
569
/* McBSP 2 */
570
OMAP3_MUX(MCBSP2_FSX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
571
OMAP3_MUX(MCBSP2_CLKX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
572
OMAP3_MUX(MCBSP2_DR, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
573
OMAP3_MUX(MCBSP2_DX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
574
575
/* serial ports */
576
OMAP3_MUX(MCBSP3_CLKX, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
577
OMAP3_MUX(MCBSP3_FSX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
578
OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
579
OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
580
581
/* DSS */
582
OMAP3_MUX(DSS_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
583
OMAP3_MUX(DSS_HSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
584
OMAP3_MUX(DSS_VSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
585
OMAP3_MUX(DSS_ACBIAS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
586
OMAP3_MUX(DSS_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
587
OMAP3_MUX(DSS_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
588
OMAP3_MUX(DSS_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
589
OMAP3_MUX(DSS_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
590
OMAP3_MUX(DSS_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
591
OMAP3_MUX(DSS_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
592
OMAP3_MUX(DSS_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
593
OMAP3_MUX(DSS_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
594
OMAP3_MUX(DSS_DATA8, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
595
OMAP3_MUX(DSS_DATA9, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
596
OMAP3_MUX(DSS_DATA10, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
597
OMAP3_MUX(DSS_DATA11, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
598
OMAP3_MUX(DSS_DATA12, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
599
OMAP3_MUX(DSS_DATA13, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
600
OMAP3_MUX(DSS_DATA14, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
601
OMAP3_MUX(DSS_DATA15, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
602
OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
603
OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
604
OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
605
OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
606
OMAP3_MUX(DSS_DATA20, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
607
OMAP3_MUX(DSS_DATA21, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
608
OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
609
OMAP3_MUX(DSS_DATA23, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
610
611
/* display controls */
612
OMAP3_MUX(MCBSP1_FSR, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
613
OMAP3_MUX(GPMC_NCS7, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
614
OMAP3_MUX(GPMC_NCS3, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
615
616
/* TPS IRQ */
617
OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_WAKEUP_EN | \
618
OMAP_PIN_INPUT_PULLUP),
619
620
{ .reg_offset = OMAP_MUX_TERMINATOR },
621
};
622
#endif
623
624
static struct omap_board_config_kernel cm_t35_config[] __initdata = {
625
};
626
627
static void __init cm_t35_init(void)
628
{
629
omap_board_config = cm_t35_config;
630
omap_board_config_size = ARRAY_SIZE(cm_t35_config);
631
omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
632
omap_serial_init();
633
cm_t35_init_i2c();
634
cm_t35_init_nand();
635
omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
636
cm_t35_init_ethernet();
637
cm_t35_init_led();
638
cm_t35_init_display();
639
640
usb_musb_init(NULL);
641
usbhs_init(&usbhs_bdata);
642
}
643
644
MACHINE_START(CM_T35, "Compulab CM-T35")
645
.boot_params = 0x80000100,
646
.reserve = omap_reserve,
647
.map_io = omap3_map_io,
648
.init_early = cm_t35_init_early,
649
.init_irq = omap_init_irq,
650
.init_machine = cm_t35_init,
651
.timer = &omap_timer,
652
MACHINE_END
653
654