• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/sh/boards/mach-migor/
1/*
2 * Renesas System Solutions Asia Pte. Ltd - Migo-R
3 *
4 * Copyright (C) 2008 Magnus Damm
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License.  See the file "COPYING" in the main directory of this archive
8 * for more details.
9 */
10#include <linux/init.h>
11#include <linux/platform_device.h>
12#include <linux/interrupt.h>
13#include <linux/input.h>
14#include <linux/input/sh_keysc.h>
15#include <linux/mfd/sh_mobile_sdhi.h>
16#include <linux/mtd/physmap.h>
17#include <linux/mtd/nand.h>
18#include <linux/i2c.h>
19#include <linux/smc91x.h>
20#include <linux/delay.h>
21#include <linux/clk.h>
22#include <linux/gpio.h>
23#include <video/sh_mobile_lcdc.h>
24#include <media/sh_mobile_ceu.h>
25#include <media/ov772x.h>
26#include <media/tw9910.h>
27#include <asm/clock.h>
28#include <asm/machvec.h>
29#include <asm/io.h>
30#include <asm/suspend.h>
31#include <mach/migor.h>
32#include <cpu/sh7722.h>
33
34/* Address     IRQ  Size  Bus  Description
35 * 0x00000000       64MB  16   NOR Flash (SP29PL256N)
36 * 0x0c000000       64MB  64   SDRAM (2xK4M563233G)
37 * 0x10000000  IRQ0       16   Ethernet (SMC91C111)
38 * 0x14000000  IRQ4       16   USB 2.0 Host Controller (M66596)
39 * 0x18000000       8GB    8   NAND Flash (K9K8G08U0A)
40 */
41
42static struct smc91x_platdata smc91x_info = {
43	.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
44};
45
46static struct resource smc91x_eth_resources[] = {
47	[0] = {
48		.name   = "SMC91C111" ,
49		.start  = 0x10000300,
50		.end    = 0x1000030f,
51		.flags  = IORESOURCE_MEM,
52	},
53	[1] = {
54		.start  = 32, /* IRQ0 */
55		.flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
56	},
57};
58
59static struct platform_device smc91x_eth_device = {
60	.name           = "smc91x",
61	.num_resources  = ARRAY_SIZE(smc91x_eth_resources),
62	.resource       = smc91x_eth_resources,
63	.dev	= {
64		.platform_data	= &smc91x_info,
65	},
66};
67
68static struct sh_keysc_info sh_keysc_info = {
69	.mode = SH_KEYSC_MODE_2, /* KEYOUT0->4, KEYIN1->5 */
70	.scan_timing = 3,
71	.delay = 5,
72	.keycodes = {
73		0, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_ENTER,
74		0, KEY_F, KEY_C, KEY_D,	KEY_H, KEY_1,
75		0, KEY_2, KEY_3, KEY_4,	KEY_5, KEY_6,
76		0, KEY_7, KEY_8, KEY_9, KEY_S, KEY_0,
77		0, KEY_P, KEY_STOP, KEY_REWIND, KEY_PLAY, KEY_FASTFORWARD,
78	},
79};
80
81static struct resource sh_keysc_resources[] = {
82	[0] = {
83		.start  = 0x044b0000,
84		.end    = 0x044b000f,
85		.flags  = IORESOURCE_MEM,
86	},
87	[1] = {
88		.start  = 79,
89		.flags  = IORESOURCE_IRQ,
90	},
91};
92
93static struct platform_device sh_keysc_device = {
94	.name           = "sh_keysc",
95	.id             = 0, /* "keysc0" clock */
96	.num_resources  = ARRAY_SIZE(sh_keysc_resources),
97	.resource       = sh_keysc_resources,
98	.dev	= {
99		.platform_data	= &sh_keysc_info,
100	},
101	.archdata = {
102		.hwblk_id = HWBLK_KEYSC,
103	},
104};
105
106static struct mtd_partition migor_nor_flash_partitions[] =
107{
108	{
109		.name = "uboot",
110		.offset = 0,
111		.size = (1 * 1024 * 1024),
112		.mask_flags = MTD_WRITEABLE,	/* Read-only */
113	},
114	{
115		.name = "rootfs",
116		.offset = MTDPART_OFS_APPEND,
117		.size = (15 * 1024 * 1024),
118	},
119	{
120		.name = "other",
121		.offset = MTDPART_OFS_APPEND,
122		.size = MTDPART_SIZ_FULL,
123	},
124};
125
126static struct physmap_flash_data migor_nor_flash_data = {
127	.width		= 2,
128	.parts		= migor_nor_flash_partitions,
129	.nr_parts	= ARRAY_SIZE(migor_nor_flash_partitions),
130};
131
132static struct resource migor_nor_flash_resources[] = {
133	[0] = {
134		.name		= "NOR Flash",
135		.start		= 0x00000000,
136		.end		= 0x03ffffff,
137		.flags		= IORESOURCE_MEM,
138	}
139};
140
141static struct platform_device migor_nor_flash_device = {
142	.name		= "physmap-flash",
143	.resource	= migor_nor_flash_resources,
144	.num_resources	= ARRAY_SIZE(migor_nor_flash_resources),
145	.dev		= {
146		.platform_data = &migor_nor_flash_data,
147	},
148};
149
150static struct mtd_partition migor_nand_flash_partitions[] = {
151	{
152		.name		= "nanddata1",
153		.offset		= 0x0,
154		.size		= 512 * 1024 * 1024,
155	},
156	{
157		.name		= "nanddata2",
158		.offset		= MTDPART_OFS_APPEND,
159		.size		= 512 * 1024 * 1024,
160	},
161};
162
163static void migor_nand_flash_cmd_ctl(struct mtd_info *mtd, int cmd,
164				     unsigned int ctrl)
165{
166	struct nand_chip *chip = mtd->priv;
167
168	if (cmd == NAND_CMD_NONE)
169		return;
170
171	if (ctrl & NAND_CLE)
172		writeb(cmd, chip->IO_ADDR_W + 0x00400000);
173	else if (ctrl & NAND_ALE)
174		writeb(cmd, chip->IO_ADDR_W + 0x00800000);
175	else
176		writeb(cmd, chip->IO_ADDR_W);
177}
178
179static int migor_nand_flash_ready(struct mtd_info *mtd)
180{
181	return gpio_get_value(GPIO_PTA1); /* NAND_RBn */
182}
183
184static struct platform_nand_data migor_nand_flash_data = {
185	.chip = {
186		.nr_chips = 1,
187		.partitions = migor_nand_flash_partitions,
188		.nr_partitions = ARRAY_SIZE(migor_nand_flash_partitions),
189		.chip_delay = 20,
190		.part_probe_types = (const char *[]) { "cmdlinepart", NULL },
191	},
192	.ctrl = {
193		.dev_ready = migor_nand_flash_ready,
194		.cmd_ctrl = migor_nand_flash_cmd_ctl,
195	},
196};
197
198static struct resource migor_nand_flash_resources[] = {
199	[0] = {
200		.name		= "NAND Flash",
201		.start		= 0x18000000,
202		.end		= 0x18ffffff,
203		.flags		= IORESOURCE_MEM,
204	},
205};
206
207static struct platform_device migor_nand_flash_device = {
208	.name		= "gen_nand",
209	.resource	= migor_nand_flash_resources,
210	.num_resources	= ARRAY_SIZE(migor_nand_flash_resources),
211	.dev		= {
212		.platform_data = &migor_nand_flash_data,
213	}
214};
215
216static struct sh_mobile_lcdc_info sh_mobile_lcdc_info = {
217#ifdef CONFIG_SH_MIGOR_RTA_WVGA
218	.clock_source = LCDC_CLK_BUS,
219	.ch[0] = {
220		.chan = LCDC_CHAN_MAINLCD,
221		.bpp = 16,
222		.interface_type = RGB16,
223		.clock_divider = 2,
224		.lcd_cfg = {
225			.name = "LB070WV1",
226			.xres = 800,
227			.yres = 480,
228			.left_margin = 64,
229			.right_margin = 16,
230			.hsync_len = 120,
231			.upper_margin = 1,
232			.lower_margin = 17,
233			.vsync_len = 2,
234			.sync = 0,
235		},
236		.lcd_size_cfg = { /* 7.0 inch */
237			.width = 152,
238			.height = 91,
239		},
240	}
241#endif
242#ifdef CONFIG_SH_MIGOR_QVGA
243	.clock_source = LCDC_CLK_PERIPHERAL,
244	.ch[0] = {
245		.chan = LCDC_CHAN_MAINLCD,
246		.bpp = 16,
247		.interface_type = SYS16A,
248		.clock_divider = 10,
249		.lcd_cfg = {
250			.name = "PH240320T",
251			.xres = 320,
252			.yres = 240,
253			.left_margin = 0,
254			.right_margin = 16,
255			.hsync_len = 8,
256			.upper_margin = 1,
257			.lower_margin = 17,
258			.vsync_len = 2,
259			.sync = FB_SYNC_HOR_HIGH_ACT,
260		},
261		.lcd_size_cfg = { /* 2.4 inch */
262			.width = 49,
263			.height = 37,
264		},
265		.board_cfg = {
266			.setup_sys = migor_lcd_qvga_setup,
267		},
268		.sys_bus_cfg = {
269			.ldmt2r = 0x06000a09,
270			.ldmt3r = 0x180e3418,
271			/* set 1s delay to encourage fsync() */
272			.deferred_io_msec = 1000,
273		},
274	}
275#endif
276};
277
278static struct resource migor_lcdc_resources[] = {
279	[0] = {
280		.name	= "LCDC",
281		.start	= 0xfe940000, /* P4-only space */
282		.end	= 0xfe942fff,
283		.flags	= IORESOURCE_MEM,
284	},
285	[1] = {
286		.start	= 28,
287		.flags	= IORESOURCE_IRQ,
288	},
289};
290
291static struct platform_device migor_lcdc_device = {
292	.name		= "sh_mobile_lcdc_fb",
293	.num_resources	= ARRAY_SIZE(migor_lcdc_resources),
294	.resource	= migor_lcdc_resources,
295	.dev	= {
296		.platform_data	= &sh_mobile_lcdc_info,
297	},
298	.archdata = {
299		.hwblk_id = HWBLK_LCDC,
300	},
301};
302
303static struct clk *camera_clk;
304static DEFINE_MUTEX(camera_lock);
305
306static void camera_power_on(int is_tw)
307{
308	mutex_lock(&camera_lock);
309
310	/* Use 10 MHz VIO_CKO instead of 24 MHz to work
311	 * around signal quality issues on Panel Board V2.1.
312	 */
313	camera_clk = clk_get(NULL, "video_clk");
314	clk_set_rate(camera_clk, 10000000);
315	clk_enable(camera_clk);	/* start VIO_CKO */
316
317	/* use VIO_RST to take camera out of reset */
318	mdelay(10);
319	if (is_tw) {
320		gpio_set_value(GPIO_PTT2, 0);
321		gpio_set_value(GPIO_PTT0, 0);
322	} else {
323		gpio_set_value(GPIO_PTT0, 1);
324	}
325	gpio_set_value(GPIO_PTT3, 0);
326	mdelay(10);
327	gpio_set_value(GPIO_PTT3, 1);
328	mdelay(10); /* wait to let chip come out of reset */
329}
330
331static void camera_power_off(void)
332{
333	clk_disable(camera_clk); /* stop VIO_CKO */
334	clk_put(camera_clk);
335
336	gpio_set_value(GPIO_PTT3, 0);
337	mutex_unlock(&camera_lock);
338}
339
340static int ov7725_power(struct device *dev, int mode)
341{
342	if (mode)
343		camera_power_on(0);
344	else
345		camera_power_off();
346
347	return 0;
348}
349
350static int tw9910_power(struct device *dev, int mode)
351{
352	if (mode)
353		camera_power_on(1);
354	else
355		camera_power_off();
356
357	return 0;
358}
359
360static struct sh_mobile_ceu_info sh_mobile_ceu_info = {
361	.flags = SH_CEU_FLAG_USE_8BIT_BUS,
362};
363
364static struct resource migor_ceu_resources[] = {
365	[0] = {
366		.name	= "CEU",
367		.start	= 0xfe910000,
368		.end	= 0xfe91009f,
369		.flags	= IORESOURCE_MEM,
370	},
371	[1] = {
372		.start  = 52,
373		.flags  = IORESOURCE_IRQ,
374	},
375	[2] = {
376		/* place holder for contiguous memory */
377	},
378};
379
380static struct platform_device migor_ceu_device = {
381	.name		= "sh_mobile_ceu",
382	.id             = 0, /* "ceu0" clock */
383	.num_resources	= ARRAY_SIZE(migor_ceu_resources),
384	.resource	= migor_ceu_resources,
385	.dev	= {
386		.platform_data	= &sh_mobile_ceu_info,
387	},
388	.archdata = {
389		.hwblk_id = HWBLK_CEU,
390	},
391};
392
393static struct resource sdhi_cn9_resources[] = {
394	[0] = {
395		.name	= "SDHI",
396		.start	= 0x04ce0000,
397		.end	= 0x04ce01ff,
398		.flags	= IORESOURCE_MEM,
399	},
400	[1] = {
401		.start	= 100,
402		.flags  = IORESOURCE_IRQ,
403	},
404};
405
406static struct sh_mobile_sdhi_info sh7724_sdhi_data = {
407	.dma_slave_tx	= SHDMA_SLAVE_SDHI0_TX,
408	.dma_slave_rx	= SHDMA_SLAVE_SDHI0_RX,
409};
410
411static struct platform_device sdhi_cn9_device = {
412	.name		= "sh_mobile_sdhi",
413	.num_resources	= ARRAY_SIZE(sdhi_cn9_resources),
414	.resource	= sdhi_cn9_resources,
415	.dev = {
416		.platform_data	= &sh7724_sdhi_data,
417	},
418	.archdata = {
419		.hwblk_id = HWBLK_SDHI,
420	},
421};
422
423static struct i2c_board_info migor_i2c_devices[] = {
424	{
425		I2C_BOARD_INFO("rs5c372b", 0x32),
426	},
427	{
428		I2C_BOARD_INFO("migor_ts", 0x51),
429		.irq = 38, /* IRQ6 */
430	},
431	{
432		I2C_BOARD_INFO("wm8978", 0x1a),
433	},
434};
435
436static struct i2c_board_info migor_i2c_camera[] = {
437	{
438		I2C_BOARD_INFO("ov772x", 0x21),
439	},
440	{
441		I2C_BOARD_INFO("tw9910", 0x45),
442	},
443};
444
445static struct ov772x_camera_info ov7725_info = {
446	.flags		= OV772X_FLAG_8BIT,
447};
448
449static struct soc_camera_link ov7725_link = {
450	.power		= ov7725_power,
451	.board_info	= &migor_i2c_camera[0],
452	.i2c_adapter_id	= 0,
453	.module_name	= "ov772x",
454	.priv		= &ov7725_info,
455};
456
457static struct tw9910_video_info tw9910_info = {
458	.buswidth	= SOCAM_DATAWIDTH_8,
459	.mpout		= TW9910_MPO_FIELD,
460};
461
462static struct soc_camera_link tw9910_link = {
463	.power		= tw9910_power,
464	.board_info	= &migor_i2c_camera[1],
465	.i2c_adapter_id	= 0,
466	.module_name	= "tw9910",
467	.priv		= &tw9910_info,
468};
469
470static struct platform_device migor_camera[] = {
471	{
472		.name	= "soc-camera-pdrv",
473		.id	= 0,
474		.dev	= {
475			.platform_data = &ov7725_link,
476		},
477	}, {
478		.name	= "soc-camera-pdrv",
479		.id	= 1,
480		.dev	= {
481			.platform_data = &tw9910_link,
482		},
483	},
484};
485
486static struct platform_device *migor_devices[] __initdata = {
487	&smc91x_eth_device,
488	&sh_keysc_device,
489	&migor_lcdc_device,
490	&migor_ceu_device,
491	&migor_nor_flash_device,
492	&migor_nand_flash_device,
493	&sdhi_cn9_device,
494	&migor_camera[0],
495	&migor_camera[1],
496};
497
498extern char migor_sdram_enter_start;
499extern char migor_sdram_enter_end;
500extern char migor_sdram_leave_start;
501extern char migor_sdram_leave_end;
502
503static int __init migor_devices_setup(void)
504{
505	/* register board specific self-refresh code */
506	sh_mobile_register_self_refresh(SUSP_SH_STANDBY | SUSP_SH_SF,
507					&migor_sdram_enter_start,
508					&migor_sdram_enter_end,
509					&migor_sdram_leave_start,
510					&migor_sdram_leave_end);
511	/* Let D11 LED show STATUS0 */
512	gpio_request(GPIO_FN_STATUS0, NULL);
513
514	/* Lit D12 LED show PDSTATUS */
515	gpio_request(GPIO_FN_PDSTATUS, NULL);
516
517	/* SMC91C111 - Enable IRQ0, Setup CS4 for 16-bit fast access */
518	gpio_request(GPIO_FN_IRQ0, NULL);
519	__raw_writel(0x00003400, BSC_CS4BCR);
520	__raw_writel(0x00110080, BSC_CS4WCR);
521
522	/* KEYSC */
523	gpio_request(GPIO_FN_KEYOUT0, NULL);
524	gpio_request(GPIO_FN_KEYOUT1, NULL);
525	gpio_request(GPIO_FN_KEYOUT2, NULL);
526	gpio_request(GPIO_FN_KEYOUT3, NULL);
527	gpio_request(GPIO_FN_KEYOUT4_IN6, NULL);
528	gpio_request(GPIO_FN_KEYIN1, NULL);
529	gpio_request(GPIO_FN_KEYIN2, NULL);
530	gpio_request(GPIO_FN_KEYIN3, NULL);
531	gpio_request(GPIO_FN_KEYIN4, NULL);
532	gpio_request(GPIO_FN_KEYOUT5_IN5, NULL);
533
534	/* NAND Flash */
535	gpio_request(GPIO_FN_CS6A_CE2B, NULL);
536	__raw_writel((__raw_readl(BSC_CS6ABCR) & ~0x0600) | 0x0200, BSC_CS6ABCR);
537	gpio_request(GPIO_PTA1, NULL);
538	gpio_direction_input(GPIO_PTA1);
539
540	/* SDHI */
541	gpio_request(GPIO_FN_SDHICD, NULL);
542	gpio_request(GPIO_FN_SDHIWP, NULL);
543	gpio_request(GPIO_FN_SDHID3, NULL);
544	gpio_request(GPIO_FN_SDHID2, NULL);
545	gpio_request(GPIO_FN_SDHID1, NULL);
546	gpio_request(GPIO_FN_SDHID0, NULL);
547	gpio_request(GPIO_FN_SDHICMD, NULL);
548	gpio_request(GPIO_FN_SDHICLK, NULL);
549
550	/* Touch Panel */
551	gpio_request(GPIO_FN_IRQ6, NULL);
552
553	/* LCD Panel */
554#ifdef CONFIG_SH_MIGOR_QVGA     /* LCDC - QVGA - Enable SYS Interface signals */
555	gpio_request(GPIO_FN_LCDD17, NULL);
556	gpio_request(GPIO_FN_LCDD16, NULL);
557	gpio_request(GPIO_FN_LCDD15, NULL);
558	gpio_request(GPIO_FN_LCDD14, NULL);
559	gpio_request(GPIO_FN_LCDD13, NULL);
560	gpio_request(GPIO_FN_LCDD12, NULL);
561	gpio_request(GPIO_FN_LCDD11, NULL);
562	gpio_request(GPIO_FN_LCDD10, NULL);
563	gpio_request(GPIO_FN_LCDD8, NULL);
564	gpio_request(GPIO_FN_LCDD7, NULL);
565	gpio_request(GPIO_FN_LCDD6, NULL);
566	gpio_request(GPIO_FN_LCDD5, NULL);
567	gpio_request(GPIO_FN_LCDD4, NULL);
568	gpio_request(GPIO_FN_LCDD3, NULL);
569	gpio_request(GPIO_FN_LCDD2, NULL);
570	gpio_request(GPIO_FN_LCDD1, NULL);
571	gpio_request(GPIO_FN_LCDRS, NULL);
572	gpio_request(GPIO_FN_LCDCS, NULL);
573	gpio_request(GPIO_FN_LCDRD, NULL);
574	gpio_request(GPIO_FN_LCDWR, NULL);
575	gpio_request(GPIO_PTH2, NULL); /* LCD_DON */
576	gpio_direction_output(GPIO_PTH2, 1);
577#endif
578#ifdef CONFIG_SH_MIGOR_RTA_WVGA     /* LCDC - WVGA - Enable RGB Interface signals */
579	gpio_request(GPIO_FN_LCDD15, NULL);
580	gpio_request(GPIO_FN_LCDD14, NULL);
581	gpio_request(GPIO_FN_LCDD13, NULL);
582	gpio_request(GPIO_FN_LCDD12, NULL);
583	gpio_request(GPIO_FN_LCDD11, NULL);
584	gpio_request(GPIO_FN_LCDD10, NULL);
585	gpio_request(GPIO_FN_LCDD9, NULL);
586	gpio_request(GPIO_FN_LCDD8, NULL);
587	gpio_request(GPIO_FN_LCDD7, NULL);
588	gpio_request(GPIO_FN_LCDD6, NULL);
589	gpio_request(GPIO_FN_LCDD5, NULL);
590	gpio_request(GPIO_FN_LCDD4, NULL);
591	gpio_request(GPIO_FN_LCDD3, NULL);
592	gpio_request(GPIO_FN_LCDD2, NULL);
593	gpio_request(GPIO_FN_LCDD1, NULL);
594	gpio_request(GPIO_FN_LCDD0, NULL);
595	gpio_request(GPIO_FN_LCDLCLK, NULL);
596	gpio_request(GPIO_FN_LCDDCK, NULL);
597	gpio_request(GPIO_FN_LCDVEPWC, NULL);
598	gpio_request(GPIO_FN_LCDVCPWC, NULL);
599	gpio_request(GPIO_FN_LCDVSYN, NULL);
600	gpio_request(GPIO_FN_LCDHSYN, NULL);
601	gpio_request(GPIO_FN_LCDDISP, NULL);
602	gpio_request(GPIO_FN_LCDDON, NULL);
603#endif
604
605	/* CEU */
606	gpio_request(GPIO_FN_VIO_CLK2, NULL);
607	gpio_request(GPIO_FN_VIO_VD2, NULL);
608	gpio_request(GPIO_FN_VIO_HD2, NULL);
609	gpio_request(GPIO_FN_VIO_FLD, NULL);
610	gpio_request(GPIO_FN_VIO_CKO, NULL);
611	gpio_request(GPIO_FN_VIO_D15, NULL);
612	gpio_request(GPIO_FN_VIO_D14, NULL);
613	gpio_request(GPIO_FN_VIO_D13, NULL);
614	gpio_request(GPIO_FN_VIO_D12, NULL);
615	gpio_request(GPIO_FN_VIO_D11, NULL);
616	gpio_request(GPIO_FN_VIO_D10, NULL);
617	gpio_request(GPIO_FN_VIO_D9, NULL);
618	gpio_request(GPIO_FN_VIO_D8, NULL);
619
620	gpio_request(GPIO_PTT3, NULL); /* VIO_RST */
621	gpio_direction_output(GPIO_PTT3, 0);
622	gpio_request(GPIO_PTT2, NULL); /* TV_IN_EN */
623	gpio_direction_output(GPIO_PTT2, 1);
624	gpio_request(GPIO_PTT0, NULL); /* CAM_EN */
625#ifdef CONFIG_SH_MIGOR_RTA_WVGA
626	gpio_direction_output(GPIO_PTT0, 0);
627#else
628	gpio_direction_output(GPIO_PTT0, 1);
629#endif
630	__raw_writew(__raw_readw(PORT_MSELCRB) | 0x2000, PORT_MSELCRB); /* D15->D8 */
631
632	platform_resource_setup_memory(&migor_ceu_device, "ceu", 4 << 20);
633
634	/* SIU: Port B */
635	gpio_request(GPIO_FN_SIUBOLR, NULL);
636	gpio_request(GPIO_FN_SIUBOBT, NULL);
637	gpio_request(GPIO_FN_SIUBISLD, NULL);
638	gpio_request(GPIO_FN_SIUBOSLD, NULL);
639	gpio_request(GPIO_FN_SIUMCKB, NULL);
640
641	/*
642	 * The original driver sets SIUB OLR/OBT, ILR/IBT, and SIUA OLR/OBT to
643	 * output. Need only SIUB, set to output for master mode (table 34.2)
644	 */
645	__raw_writew(__raw_readw(PORT_MSELCRA) | 1, PORT_MSELCRA);
646
647	i2c_register_board_info(0, migor_i2c_devices,
648				ARRAY_SIZE(migor_i2c_devices));
649
650	return platform_add_devices(migor_devices, ARRAY_SIZE(migor_devices));
651}
652arch_initcall(migor_devices_setup);
653
654/* Return the board specific boot mode pin configuration */
655static int migor_mode_pins(void)
656{
657	/* MD0=1, MD1=1, MD2=0: Clock Mode 3
658	 * MD3=0: 16-bit Area0 Bus Width
659	 * MD5=1: Little Endian
660	 * TSTMD=1, MD8=0: Test Mode Disabled
661	 */
662	return MODE_PIN0 | MODE_PIN1 | MODE_PIN5;
663}
664
665/*
666 * The Machine Vector
667 */
668static struct sh_machine_vector mv_migor __initmv = {
669	.mv_name		= "Migo-R",
670	.mv_mode_pins		= migor_mode_pins,
671};
672