1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#include <linux/delay.h>
21#include <linux/gpio.h>
22#include <linux/gpio_keys.h>
23#include <linux/io.h>
24#include <linux/irq.h>
25#include <linux/i2c.h>
26#include <linux/i2c/pcf857x.h>
27#include <linux/input.h>
28#include <linux/mmc/host.h>
29#include <linux/mmc/sh_mmcif.h>
30#include <linux/mmc/sh_mobile_sdhi.h>
31#include <linux/mfd/tmio.h>
32#include <linux/platform_device.h>
33#include <linux/regulator/fixed.h>
34#include <linux/regulator/machine.h>
35#include <linux/smsc911x.h>
36#include <linux/usb/r8a66597.h>
37#include <linux/usb/renesas_usbhs.h>
38#include <linux/videodev2.h>
39#include <sound/sh_fsi.h>
40#include <sound/simple_card.h>
41#include <mach/irqs.h>
42#include <mach/sh73a0.h>
43#include <mach/common.h>
44#include <asm/hardware/cache-l2x0.h>
45#include <asm/hardware/gic.h>
46#include <asm/mach-types.h>
47#include <asm/mach/arch.h>
48#include <video/sh_mobile_lcdc.h>
49
50
51
52
53#define GPIO_PCF8575_BASE (GPIO_NR)
54#define GPIO_PCF8575_PORT10 (GPIO_NR + 8)
55#define GPIO_PCF8575_PORT11 (GPIO_NR + 9)
56#define GPIO_PCF8575_PORT12 (GPIO_NR + 10)
57#define GPIO_PCF8575_PORT13 (GPIO_NR + 11)
58#define GPIO_PCF8575_PORT14 (GPIO_NR + 12)
59#define GPIO_PCF8575_PORT15 (GPIO_NR + 13)
60#define GPIO_PCF8575_PORT16 (GPIO_NR + 14)
61
62
63static struct regulator_consumer_supply dummy_supplies[] = {
64 REGULATOR_SUPPLY("vddvario", "smsc911x"),
65 REGULATOR_SUPPLY("vdd33a", "smsc911x"),
66};
67
68
69
70
71
72
73
74
75
76
77static struct resource smsc9221_resources[] = {
78 [0] = {
79 .start = 0x10000000,
80 .end = 0x100000ff,
81 .flags = IORESOURCE_MEM,
82 },
83 [1] = {
84 .start = intcs_evt2irq(0x260),
85 .flags = IORESOURCE_IRQ,
86 },
87};
88
89static struct smsc911x_platform_config smsc9221_platdata = {
90 .flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
91 .phy_interface = PHY_INTERFACE_MODE_MII,
92 .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
93 .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
94};
95
96static struct platform_device smsc_device = {
97 .name = "smsc911x",
98 .dev = {
99 .platform_data = &smsc9221_platdata,
100 },
101 .resource = smsc9221_resources,
102 .num_resources = ARRAY_SIZE(smsc9221_resources),
103};
104
105
106static struct r8a66597_platdata usb_host_data = {
107 .on_chip = 0,
108 .xtal = R8A66597_PLATDATA_XTAL_48MHZ,
109};
110
111static struct resource usb_resources[] = {
112 [0] = {
113 .start = 0x10010000,
114 .end = 0x1001ffff - 1,
115 .flags = IORESOURCE_MEM,
116 },
117 [1] = {
118 .start = intcs_evt2irq(0x220),
119 .flags = IORESOURCE_IRQ,
120 },
121};
122
123static struct platform_device usb_host_device = {
124 .name = "r8a66597_hcd",
125 .dev = {
126 .platform_data = &usb_host_data,
127 .dma_mask = NULL,
128 .coherent_dma_mask = 0xffffffff,
129 },
130 .num_resources = ARRAY_SIZE(usb_resources),
131 .resource = usb_resources,
132};
133
134
135struct usbhs_private {
136 void __iomem *phy;
137 void __iomem *cr2;
138 struct renesas_usbhs_platform_info info;
139};
140
141#define IRQ15 intcs_evt2irq(0x03e0)
142#define USB_PHY_MODE (1 << 4)
143#define USB_PHY_INT_EN ((1 << 3) | (1 << 2))
144#define USB_PHY_ON (1 << 1)
145#define USB_PHY_OFF (1 << 0)
146#define USB_PHY_INT_CLR (USB_PHY_ON | USB_PHY_OFF)
147
148#define usbhs_get_priv(pdev) \
149 container_of(renesas_usbhs_get_info(pdev), struct usbhs_private, info)
150
151static int usbhs_get_vbus(struct platform_device *pdev)
152{
153 struct usbhs_private *priv = usbhs_get_priv(pdev);
154
155 return !((1 << 7) & __raw_readw(priv->cr2));
156}
157
158static void usbhs_phy_reset(struct platform_device *pdev)
159{
160 struct usbhs_private *priv = usbhs_get_priv(pdev);
161
162
163 __raw_writew(0x8a0a, priv->cr2);
164}
165
166static int usbhs_get_id(struct platform_device *pdev)
167{
168 return USBHS_GADGET;
169}
170
171static irqreturn_t usbhs_interrupt(int irq, void *data)
172{
173 struct platform_device *pdev = data;
174 struct usbhs_private *priv = usbhs_get_priv(pdev);
175
176 renesas_usbhs_call_notify_hotplug(pdev);
177
178
179 __raw_writew(__raw_readw(priv->phy) | USB_PHY_INT_CLR, priv->phy);
180
181 return IRQ_HANDLED;
182}
183
184static int usbhs_hardware_init(struct platform_device *pdev)
185{
186 struct usbhs_private *priv = usbhs_get_priv(pdev);
187 int ret;
188
189
190 __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->phy);
191
192 ret = request_irq(IRQ15, usbhs_interrupt, IRQF_TRIGGER_HIGH,
193 dev_name(&pdev->dev), pdev);
194 if (ret) {
195 dev_err(&pdev->dev, "request_irq err\n");
196 return ret;
197 }
198
199
200 __raw_writew(USB_PHY_MODE | USB_PHY_INT_EN, priv->phy);
201
202 return 0;
203}
204
205static void usbhs_hardware_exit(struct platform_device *pdev)
206{
207 struct usbhs_private *priv = usbhs_get_priv(pdev);
208
209
210 __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->phy);
211
212 free_irq(IRQ15, pdev);
213}
214
215static u32 usbhs_pipe_cfg[] = {
216 USB_ENDPOINT_XFER_CONTROL,
217 USB_ENDPOINT_XFER_ISOC,
218 USB_ENDPOINT_XFER_ISOC,
219 USB_ENDPOINT_XFER_BULK,
220 USB_ENDPOINT_XFER_BULK,
221 USB_ENDPOINT_XFER_BULK,
222 USB_ENDPOINT_XFER_INT,
223 USB_ENDPOINT_XFER_INT,
224 USB_ENDPOINT_XFER_INT,
225 USB_ENDPOINT_XFER_BULK,
226 USB_ENDPOINT_XFER_BULK,
227 USB_ENDPOINT_XFER_BULK,
228 USB_ENDPOINT_XFER_BULK,
229 USB_ENDPOINT_XFER_BULK,
230 USB_ENDPOINT_XFER_BULK,
231 USB_ENDPOINT_XFER_BULK,
232};
233
234static struct usbhs_private usbhs_private = {
235 .phy = IOMEM(0xe60781e0),
236 .cr2 = IOMEM(0xe605810c),
237 .info = {
238 .platform_callback = {
239 .hardware_init = usbhs_hardware_init,
240 .hardware_exit = usbhs_hardware_exit,
241 .get_id = usbhs_get_id,
242 .phy_reset = usbhs_phy_reset,
243 .get_vbus = usbhs_get_vbus,
244 },
245 .driver_param = {
246 .buswait_bwait = 4,
247 .has_otg = 1,
248 .pipe_type = usbhs_pipe_cfg,
249 .pipe_size = ARRAY_SIZE(usbhs_pipe_cfg),
250 },
251 },
252};
253
254static struct resource usbhs_resources[] = {
255 [0] = {
256 .start = 0xE6890000,
257 .end = 0xE68900e6 - 1,
258 .flags = IORESOURCE_MEM,
259 },
260 [1] = {
261 .start = gic_spi(62),
262 .end = gic_spi(62),
263 .flags = IORESOURCE_IRQ,
264 },
265};
266
267static struct platform_device usbhs_device = {
268 .name = "renesas_usbhs",
269 .id = -1,
270 .dev = {
271 .dma_mask = NULL,
272 .coherent_dma_mask = 0xffffffff,
273 .platform_data = &usbhs_private.info,
274 },
275 .num_resources = ARRAY_SIZE(usbhs_resources),
276 .resource = usbhs_resources,
277};
278
279
280static struct fb_videomode kzm_lcdc_mode = {
281 .name = "WVGA Panel",
282 .xres = 800,
283 .yres = 480,
284 .left_margin = 220,
285 .right_margin = 110,
286 .hsync_len = 70,
287 .upper_margin = 20,
288 .lower_margin = 5,
289 .vsync_len = 5,
290 .sync = 0,
291};
292
293static struct sh_mobile_lcdc_info lcdc_info = {
294 .clock_source = LCDC_CLK_BUS,
295 .ch[0] = {
296 .chan = LCDC_CHAN_MAINLCD,
297 .fourcc = V4L2_PIX_FMT_RGB565,
298 .interface_type = RGB24,
299 .lcd_modes = &kzm_lcdc_mode,
300 .num_modes = 1,
301 .clock_divider = 5,
302 .flags = 0,
303 .panel_cfg = {
304 .width = 152,
305 .height = 91,
306 },
307 }
308};
309
310static struct resource lcdc_resources[] = {
311 [0] = {
312 .name = "LCDC",
313 .start = 0xfe940000,
314 .end = 0xfe943fff,
315 .flags = IORESOURCE_MEM,
316 },
317 [1] = {
318 .start = intcs_evt2irq(0x580),
319 .flags = IORESOURCE_IRQ,
320 },
321};
322
323static struct platform_device lcdc_device = {
324 .name = "sh_mobile_lcdc_fb",
325 .num_resources = ARRAY_SIZE(lcdc_resources),
326 .resource = lcdc_resources,
327 .dev = {
328 .platform_data = &lcdc_info,
329 .coherent_dma_mask = ~0,
330 },
331};
332
333
334static struct regulator_consumer_supply fixed1v8_power_consumers[] =
335{
336 REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"),
337 REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"),
338};
339
340
341static struct resource sh_mmcif_resources[] = {
342 [0] = {
343 .name = "MMCIF",
344 .start = 0xe6bd0000,
345 .end = 0xe6bd00ff,
346 .flags = IORESOURCE_MEM,
347 },
348 [1] = {
349 .start = gic_spi(140),
350 .flags = IORESOURCE_IRQ,
351 },
352 [2] = {
353 .start = gic_spi(141),
354 .flags = IORESOURCE_IRQ,
355 },
356};
357
358static struct sh_mmcif_plat_data sh_mmcif_platdata = {
359 .ocr = MMC_VDD_165_195,
360 .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE,
361 .slave_id_tx = SHDMA_SLAVE_MMCIF_TX,
362 .slave_id_rx = SHDMA_SLAVE_MMCIF_RX,
363};
364
365static struct platform_device mmc_device = {
366 .name = "sh_mmcif",
367 .dev = {
368 .dma_mask = NULL,
369 .coherent_dma_mask = 0xffffffff,
370 .platform_data = &sh_mmcif_platdata,
371 },
372 .num_resources = ARRAY_SIZE(sh_mmcif_resources),
373 .resource = sh_mmcif_resources,
374};
375
376
377static struct regulator_consumer_supply fixed2v8_power_consumers[] =
378{
379 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
380 REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
381 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.2"),
382 REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.2"),
383};
384
385
386static struct sh_mobile_sdhi_info sdhi0_info = {
387 .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT,
388 .tmio_caps = MMC_CAP_SD_HIGHSPEED,
389 .tmio_ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29,
390};
391
392static struct resource sdhi0_resources[] = {
393 [0] = {
394 .name = "SDHI0",
395 .start = 0xee100000,
396 .end = 0xee1000ff,
397 .flags = IORESOURCE_MEM,
398 },
399 [1] = {
400 .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT,
401 .start = gic_spi(83),
402 .flags = IORESOURCE_IRQ,
403 },
404 [2] = {
405 .name = SH_MOBILE_SDHI_IRQ_SDCARD,
406 .start = gic_spi(84),
407 .flags = IORESOURCE_IRQ,
408 },
409 [3] = {
410 .name = SH_MOBILE_SDHI_IRQ_SDIO,
411 .start = gic_spi(85),
412 .flags = IORESOURCE_IRQ,
413 },
414};
415
416static struct platform_device sdhi0_device = {
417 .name = "sh_mobile_sdhi",
418 .num_resources = ARRAY_SIZE(sdhi0_resources),
419 .resource = sdhi0_resources,
420 .dev = {
421 .platform_data = &sdhi0_info,
422 },
423};
424
425
426static struct sh_mobile_sdhi_info sdhi2_info = {
427 .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT |
428 TMIO_MMC_USE_GPIO_CD |
429 TMIO_MMC_WRPROTECT_DISABLE,
430 .tmio_caps = MMC_CAP_SD_HIGHSPEED,
431 .tmio_ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29,
432 .cd_gpio = GPIO_PORT13,
433};
434
435static struct resource sdhi2_resources[] = {
436 [0] = {
437 .name = "SDHI2",
438 .start = 0xee140000,
439 .end = 0xee1400ff,
440 .flags = IORESOURCE_MEM,
441 },
442 [1] = {
443 .name = SH_MOBILE_SDHI_IRQ_CARD_DETECT,
444 .start = gic_spi(103),
445 .flags = IORESOURCE_IRQ,
446 },
447 [2] = {
448 .name = SH_MOBILE_SDHI_IRQ_SDCARD,
449 .start = gic_spi(104),
450 .flags = IORESOURCE_IRQ,
451 },
452 [3] = {
453 .name = SH_MOBILE_SDHI_IRQ_SDIO,
454 .start = gic_spi(105),
455 .flags = IORESOURCE_IRQ,
456 },
457};
458
459static struct platform_device sdhi2_device = {
460 .name = "sh_mobile_sdhi",
461 .id = 2,
462 .num_resources = ARRAY_SIZE(sdhi2_resources),
463 .resource = sdhi2_resources,
464 .dev = {
465 .platform_data = &sdhi2_info,
466 },
467};
468
469
470#define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 }
471
472static struct gpio_keys_button gpio_buttons[] = {
473 GPIO_KEY(KEY_BACK, GPIO_PCF8575_PORT10, "SW3"),
474 GPIO_KEY(KEY_RIGHT, GPIO_PCF8575_PORT11, "SW2-R"),
475 GPIO_KEY(KEY_LEFT, GPIO_PCF8575_PORT12, "SW2-L"),
476 GPIO_KEY(KEY_ENTER, GPIO_PCF8575_PORT13, "SW2-P"),
477 GPIO_KEY(KEY_UP, GPIO_PCF8575_PORT14, "SW2-U"),
478 GPIO_KEY(KEY_DOWN, GPIO_PCF8575_PORT15, "SW2-D"),
479 GPIO_KEY(KEY_HOME, GPIO_PCF8575_PORT16, "SW1"),
480};
481
482static struct gpio_keys_platform_data gpio_key_info = {
483 .buttons = gpio_buttons,
484 .nbuttons = ARRAY_SIZE(gpio_buttons),
485};
486
487static struct platform_device gpio_keys_device = {
488 .name = "gpio-keys",
489 .dev = {
490 .platform_data = &gpio_key_info,
491 },
492};
493
494
495static struct sh_fsi_platform_info fsi_info = {
496 .port_a = {
497 .tx_id = SHDMA_SLAVE_FSI2A_TX,
498 },
499};
500
501static struct resource fsi_resources[] = {
502 [0] = {
503 .name = "FSI",
504 .start = 0xEC230000,
505 .end = 0xEC230400 - 1,
506 .flags = IORESOURCE_MEM,
507 },
508 [1] = {
509 .start = gic_spi(146),
510 .flags = IORESOURCE_IRQ,
511 },
512};
513
514static struct platform_device fsi_device = {
515 .name = "sh_fsi2",
516 .id = -1,
517 .num_resources = ARRAY_SIZE(fsi_resources),
518 .resource = fsi_resources,
519 .dev = {
520 .platform_data = &fsi_info,
521 },
522};
523
524static struct asoc_simple_dai_init_info fsi2_ak4648_init_info = {
525 .fmt = SND_SOC_DAIFMT_LEFT_J,
526 .codec_daifmt = SND_SOC_DAIFMT_CBM_CFM,
527 .cpu_daifmt = SND_SOC_DAIFMT_CBS_CFS,
528 .sysclk = 11289600,
529};
530
531static struct asoc_simple_card_info fsi2_ak4648_info = {
532 .name = "AK4648",
533 .card = "FSI2A-AK4648",
534 .cpu_dai = "fsia-dai",
535 .codec = "ak4642-codec.0-0012",
536 .platform = "sh_fsi2",
537 .codec_dai = "ak4642-hifi",
538 .init = &fsi2_ak4648_init_info,
539};
540
541static struct platform_device fsi_ak4648_device = {
542 .name = "asoc-simple-card",
543 .dev = {
544 .platform_data = &fsi2_ak4648_info,
545 },
546};
547
548
549static struct pcf857x_platform_data pcf8575_pdata = {
550 .gpio_base = GPIO_PCF8575_BASE,
551 .irq = intcs_evt2irq(0x3260),
552};
553
554static struct i2c_board_info i2c0_devices[] = {
555 {
556 I2C_BOARD_INFO("ak4648", 0x12),
557 },
558 {
559 I2C_BOARD_INFO("r2025sd", 0x32),
560 }
561};
562
563static struct i2c_board_info i2c1_devices[] = {
564 {
565 I2C_BOARD_INFO("st1232-ts", 0x55),
566 .irq = intcs_evt2irq(0x300),
567 },
568};
569
570static struct i2c_board_info i2c3_devices[] = {
571 {
572 I2C_BOARD_INFO("pcf8575", 0x20),
573 .platform_data = &pcf8575_pdata,
574 },
575};
576
577static struct platform_device *kzm_devices[] __initdata = {
578 &smsc_device,
579 &usb_host_device,
580 &usbhs_device,
581 &lcdc_device,
582 &mmc_device,
583 &sdhi0_device,
584 &sdhi2_device,
585 &gpio_keys_device,
586 &fsi_device,
587 &fsi_ak4648_device,
588};
589
590
591
592
593
594
595static int __init as3711_enable_lcdc_backlight(void)
596{
597 struct i2c_adapter *a = i2c_get_adapter(0);
598 struct i2c_msg msg;
599 int i, ret;
600 __u8 magic[] = {
601 0x40, 0x2a,
602 0x43, 0x3c,
603 0x44, 0x3c,
604 0x45, 0x3c,
605 0x54, 0x03,
606 0x51, 0x00,
607 0x51, 0x01,
608 0xff, 0x00,
609 0x43, 0xf0,
610 0x44, 0xf0,
611 0x45, 0xf0,
612 };
613
614 if (!machine_is_kzm9g())
615 return 0;
616
617 if (!a)
618 return 0;
619
620 msg.addr = 0x40;
621 msg.len = 2;
622 msg.flags = 0;
623
624 for (i = 0; i < ARRAY_SIZE(magic); i += 2) {
625 msg.buf = magic + i;
626
627 if (0xff == msg.buf[0]) {
628 udelay(500);
629 continue;
630 }
631
632 ret = i2c_transfer(a, &msg, 1);
633 if (ret < 0) {
634 pr_err("i2c transfer fail\n");
635 break;
636 }
637 }
638
639 return 0;
640}
641device_initcall(as3711_enable_lcdc_backlight);
642
643static void __init kzm_init(void)
644{
645 regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
646 ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
647 regulator_register_always_on(1, "fixed-2.8V", fixed2v8_power_consumers,
648 ARRAY_SIZE(fixed2v8_power_consumers), 2800000);
649 regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
650
651 sh73a0_pinmux_init();
652
653
654 gpio_request(GPIO_FN_SCIFA4_TXD, NULL);
655 gpio_request(GPIO_FN_SCIFA4_RXD, NULL);
656 gpio_request(GPIO_FN_SCIFA4_RTS_, NULL);
657 gpio_request(GPIO_FN_SCIFA4_CTS_, NULL);
658
659
660 gpio_request(GPIO_FN_CS4_, NULL);
661
662
663 gpio_request(GPIO_PORT224, NULL);
664 gpio_direction_input(GPIO_PORT224);
665
666
667 gpio_request(GPIO_FN_LCDD23, NULL);
668 gpio_request(GPIO_FN_LCDD22, NULL);
669 gpio_request(GPIO_FN_LCDD21, NULL);
670 gpio_request(GPIO_FN_LCDD20, NULL);
671 gpio_request(GPIO_FN_LCDD19, NULL);
672 gpio_request(GPIO_FN_LCDD18, NULL);
673 gpio_request(GPIO_FN_LCDD17, NULL);
674 gpio_request(GPIO_FN_LCDD16, NULL);
675 gpio_request(GPIO_FN_LCDD15, NULL);
676 gpio_request(GPIO_FN_LCDD14, NULL);
677 gpio_request(GPIO_FN_LCDD13, NULL);
678 gpio_request(GPIO_FN_LCDD12, NULL);
679 gpio_request(GPIO_FN_LCDD11, NULL);
680 gpio_request(GPIO_FN_LCDD10, NULL);
681 gpio_request(GPIO_FN_LCDD9, NULL);
682 gpio_request(GPIO_FN_LCDD8, NULL);
683 gpio_request(GPIO_FN_LCDD7, NULL);
684 gpio_request(GPIO_FN_LCDD6, NULL);
685 gpio_request(GPIO_FN_LCDD5, NULL);
686 gpio_request(GPIO_FN_LCDD4, NULL);
687 gpio_request(GPIO_FN_LCDD3, NULL);
688 gpio_request(GPIO_FN_LCDD2, NULL);
689 gpio_request(GPIO_FN_LCDD1, NULL);
690 gpio_request(GPIO_FN_LCDD0, NULL);
691 gpio_request(GPIO_FN_LCDDISP, NULL);
692 gpio_request(GPIO_FN_LCDDCK, NULL);
693
694 gpio_request(GPIO_PORT222, NULL);
695 gpio_request(GPIO_PORT226, NULL);
696 gpio_direction_output(GPIO_PORT222, 1);
697 gpio_direction_output(GPIO_PORT226, 1);
698
699
700 gpio_request(GPIO_PORT223, NULL);
701 gpio_direction_input(GPIO_PORT223);
702
703
704 gpio_request(GPIO_FN_MMCCLK0, NULL);
705 gpio_request(GPIO_FN_MMCCMD0_PU, NULL);
706 gpio_request(GPIO_FN_MMCD0_0_PU, NULL);
707 gpio_request(GPIO_FN_MMCD0_1_PU, NULL);
708 gpio_request(GPIO_FN_MMCD0_2_PU, NULL);
709 gpio_request(GPIO_FN_MMCD0_3_PU, NULL);
710 gpio_request(GPIO_FN_MMCD0_4_PU, NULL);
711 gpio_request(GPIO_FN_MMCD0_5_PU, NULL);
712 gpio_request(GPIO_FN_MMCD0_6_PU, NULL);
713 gpio_request(GPIO_FN_MMCD0_7_PU, NULL);
714
715
716 gpio_request(GPIO_FN_SDHIWP0, NULL);
717 gpio_request(GPIO_FN_SDHICD0, NULL);
718 gpio_request(GPIO_FN_SDHICMD0, NULL);
719 gpio_request(GPIO_FN_SDHICLK0, NULL);
720 gpio_request(GPIO_FN_SDHID0_3, NULL);
721 gpio_request(GPIO_FN_SDHID0_2, NULL);
722 gpio_request(GPIO_FN_SDHID0_1, NULL);
723 gpio_request(GPIO_FN_SDHID0_0, NULL);
724 gpio_request(GPIO_FN_SDHI0_VCCQ_MC0_ON, NULL);
725 gpio_request(GPIO_PORT15, NULL);
726 gpio_direction_output(GPIO_PORT15, 1);
727
728
729 gpio_request(GPIO_FN_SDHID2_0, NULL);
730 gpio_request(GPIO_FN_SDHID2_1, NULL);
731 gpio_request(GPIO_FN_SDHID2_2, NULL);
732 gpio_request(GPIO_FN_SDHID2_3, NULL);
733 gpio_request(GPIO_FN_SDHICMD2, NULL);
734 gpio_request(GPIO_FN_SDHICLK2, NULL);
735 gpio_request(GPIO_PORT14, NULL);
736 gpio_direction_output(GPIO_PORT14, 1);
737
738
739 gpio_request(GPIO_FN_PORT27_I2C_SCL3, NULL);
740 gpio_request(GPIO_FN_PORT28_I2C_SDA3, NULL);
741
742
743 gpio_request(GPIO_FN_FSIACK, NULL);
744 gpio_request(GPIO_FN_FSIAILR, NULL);
745 gpio_request(GPIO_FN_FSIAIBT, NULL);
746 gpio_request(GPIO_FN_FSIAISLD, NULL);
747 gpio_request(GPIO_FN_FSIAOSLD, NULL);
748
749
750 gpio_request(GPIO_FN_VBUS_0, NULL);
751
752#ifdef CONFIG_CACHE_L2X0
753
754 l2x0_init(IOMEM(0xf0100000), 0x40460000, 0x82000fff);
755#endif
756
757 i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices));
758 i2c_register_board_info(1, i2c1_devices, ARRAY_SIZE(i2c1_devices));
759 i2c_register_board_info(3, i2c3_devices, ARRAY_SIZE(i2c3_devices));
760
761 sh73a0_add_standard_devices();
762 platform_add_devices(kzm_devices, ARRAY_SIZE(kzm_devices));
763}
764
765static void kzm9g_restart(char mode, const char *cmd)
766{
767#define RESCNT2 IOMEM(0xe6188020)
768
769 writel((1 << 31), RESCNT2);
770}
771
772static const char *kzm9g_boards_compat_dt[] __initdata = {
773 "renesas,kzm9g",
774 NULL,
775};
776
777DT_MACHINE_START(KZM9G_DT, "kzm9g")
778 .smp = smp_ops(sh73a0_smp_ops),
779 .map_io = sh73a0_map_io,
780 .init_early = sh73a0_add_early_devices,
781 .nr_irqs = NR_IRQS_LEGACY,
782 .init_irq = sh73a0_init_irq,
783 .handle_irq = gic_handle_irq,
784 .init_machine = kzm_init,
785 .init_late = shmobile_init_late,
786 .timer = &shmobile_timer,
787 .restart = kzm9g_restart,
788 .dt_compat = kzm9g_boards_compat_dt,
789MACHINE_END
790