Merge commit '8700c95adb03' into timers/nohz
[pandora-kernel.git] / arch / arm / mach-shmobile / board-armadillo800eva.c
1 /*
2  * armadillo 800 eva board support
3  *
4  * Copyright (C) 2012 Renesas Solutions Corp.
5  * Copyright (C) 2012 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; version 2 of the License.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU 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  02110-1301  USA
19  *
20  */
21
22 #include <linux/clk.h>
23 #include <linux/delay.h>
24 #include <linux/err.h>
25 #include <linux/kernel.h>
26 #include <linux/input.h>
27 #include <linux/irq.h>
28 #include <linux/platform_device.h>
29 #include <linux/gpio.h>
30 #include <linux/gpio_keys.h>
31 #include <linux/regulator/fixed.h>
32 #include <linux/regulator/machine.h>
33 #include <linux/sh_eth.h>
34 #include <linux/videodev2.h>
35 #include <linux/usb/renesas_usbhs.h>
36 #include <linux/mfd/tmio.h>
37 #include <linux/mmc/host.h>
38 #include <linux/mmc/sh_mmcif.h>
39 #include <linux/mmc/sh_mobile_sdhi.h>
40 #include <linux/i2c-gpio.h>
41 #include <mach/common.h>
42 #include <mach/irqs.h>
43 #include <mach/r8a7740.h>
44 #include <media/mt9t112.h>
45 #include <media/sh_mobile_ceu.h>
46 #include <media/soc_camera.h>
47 #include <asm/page.h>
48 #include <asm/mach-types.h>
49 #include <asm/mach/arch.h>
50 #include <asm/mach/map.h>
51 #include <asm/mach/time.h>
52 #include <asm/hardware/cache-l2x0.h>
53 #include <video/sh_mobile_lcdc.h>
54 #include <video/sh_mobile_hdmi.h>
55 #include <sound/sh_fsi.h>
56 #include <sound/simple_card.h>
57
58 #include "sh-gpio.h"
59
60 /*
61  * CON1         Camera Module
62  * CON2         Extension Bus
63  * CON3         HDMI Output
64  * CON4         Composite Video Output
65  * CON5         H-UDI JTAG
66  * CON6         ARM JTAG
67  * CON7         SD1
68  * CON8         SD2
69  * CON9         RTC BackUp
70  * CON10        Monaural Mic Input
71  * CON11        Stereo Headphone Output
72  * CON12        Audio Line Output(L)
73  * CON13        Audio Line Output(R)
74  * CON14        AWL13 Module
75  * CON15        Extension
76  * CON16        LCD1
77  * CON17        LCD2
78  * CON19        Power Input
79  * CON20        USB1
80  * CON21        USB2
81  * CON22        Serial
82  * CON23        LAN
83  * CON24        USB3
84  * LED1         Camera LED(Yellow)
85  * LED2         Power LED (Green)
86  * ED3-LED6     User LED(Yellow)
87  * LED7         LAN link LED(Green)
88  * LED8         LAN activity LED(Yellow)
89  */
90
91 /*
92  * DipSwitch
93  *
94  *                    SW1
95  *
96  * -12345678-+---------------+----------------------------
97  *  1        | boot          | hermit
98  *  0        | boot          | OS auto boot
99  * -12345678-+---------------+----------------------------
100  *   00      | boot device   | eMMC
101  *   10      | boot device   | SDHI0 (CON7)
102  *   01      | boot device   | -
103  *   11      | boot device   | Extension Buss (CS0)
104  * -12345678-+---------------+----------------------------
105  *     0     | Extension Bus | D8-D15 disable, eMMC enable
106  *     1     | Extension Bus | D8-D15 enable,  eMMC disable
107  * -12345678-+---------------+----------------------------
108  *      0    | SDHI1         | COM8 disable, COM14 enable
109  *      1    | SDHI1         | COM8 enable,  COM14 disable
110  * -12345678-+---------------+----------------------------
111  *       0   | USB0          | COM20 enable,  COM24 disable
112  *       1   | USB0          | COM20 disable, COM24 enable
113  * -12345678-+---------------+----------------------------
114  *        00 | JTAG          | SH-X2
115  *        10 | JTAG          | ARM
116  *        01 | JTAG          | -
117  *        11 | JTAG          | Boundary Scan
118  *-----------+---------------+----------------------------
119  */
120
121 /*
122  * FSI-WM8978
123  *
124  * this command is required when playback.
125  *
126  * # amixer set "Headphone" 50
127  *
128  * this command is required when capture.
129  *
130  * # amixer set "Input PGA" 15
131  * # amixer set "Left Input Mixer MicP" on
132  * # amixer set "Left Input Mixer MicN" on
133  * # amixer set "Right Input Mixer MicN" on
134  * # amixer set "Right Input Mixer MicP" on
135  */
136
137 /*
138  * USB function
139  *
140  * When you use USB Function,
141  * set SW1.6 ON, and connect cable to CN24.
142  *
143  * USBF needs workaround on R8A7740 chip.
144  * These are a little bit complex.
145  * see
146  *      usbhsf_power_ctrl()
147  */
148 #define IRQ7            evt2irq(0x02e0)
149 #define USBCR1          IOMEM(0xe605810a)
150 #define USBH            0xC6700000
151 #define USBH_USBCTR     0x10834
152
153 struct usbhsf_private {
154         struct clk *phy;
155         struct clk *usb24;
156         struct clk *pci;
157         struct clk *func;
158         struct clk *host;
159         void __iomem *usbh_base;
160         struct renesas_usbhs_platform_info info;
161 };
162
163 #define usbhsf_get_priv(pdev)                           \
164         container_of(renesas_usbhs_get_info(pdev),      \
165                      struct usbhsf_private, info)
166
167 static int usbhsf_get_id(struct platform_device *pdev)
168 {
169         return USBHS_GADGET;
170 }
171
172 static int usbhsf_power_ctrl(struct platform_device *pdev,
173                               void __iomem *base, int enable)
174 {
175         struct usbhsf_private *priv = usbhsf_get_priv(pdev);
176
177         /*
178          * Work around for USB Function.
179          * It needs USB host clock, and settings
180          */
181         if (enable) {
182                 /*
183                  * enable all the related usb clocks
184                  * for usb workaround
185                  */
186                 clk_enable(priv->usb24);
187                 clk_enable(priv->pci);
188                 clk_enable(priv->host);
189                 clk_enable(priv->func);
190                 clk_enable(priv->phy);
191
192                 /*
193                  * set USBCR1
194                  *
195                  * Port1 is driven by USB function,
196                  * Port2 is driven by USB HOST
197                  * One HOST (Port1 or Port2 is HOST)
198                  * USB PLL input clock = 24MHz
199                  */
200                 __raw_writew(0xd750, USBCR1);
201                 mdelay(1);
202
203                 /*
204                  * start USB Host
205                  */
206                 __raw_writel(0x0000000c, priv->usbh_base + USBH_USBCTR);
207                 __raw_writel(0x00000008, priv->usbh_base + USBH_USBCTR);
208                 mdelay(10);
209
210                 /*
211                  * USB PHY Power ON
212                  */
213                 __raw_writew(0xd770, USBCR1);
214                 __raw_writew(0x4000, base + 0x102); /* USBF :: SUSPMODE */
215
216         } else {
217                 __raw_writel(0x0000010f, priv->usbh_base + USBH_USBCTR);
218                 __raw_writew(0xd7c0, USBCR1); /* GPIO */
219
220                 clk_disable(priv->phy);
221                 clk_disable(priv->func);        /* usb work around */
222                 clk_disable(priv->host);        /* usb work around */
223                 clk_disable(priv->pci);         /* usb work around */
224                 clk_disable(priv->usb24);       /* usb work around */
225         }
226
227         return 0;
228 }
229
230 static int usbhsf_get_vbus(struct platform_device *pdev)
231 {
232         return gpio_get_value(GPIO_PORT209);
233 }
234
235 static irqreturn_t usbhsf_interrupt(int irq, void *data)
236 {
237         struct platform_device *pdev = data;
238
239         renesas_usbhs_call_notify_hotplug(pdev);
240
241         return IRQ_HANDLED;
242 }
243
244 static int usbhsf_hardware_exit(struct platform_device *pdev)
245 {
246         struct usbhsf_private *priv = usbhsf_get_priv(pdev);
247
248         if (!IS_ERR(priv->phy))
249                 clk_put(priv->phy);
250         if (!IS_ERR(priv->usb24))
251                 clk_put(priv->usb24);
252         if (!IS_ERR(priv->pci))
253                 clk_put(priv->pci);
254         if (!IS_ERR(priv->host))
255                 clk_put(priv->host);
256         if (!IS_ERR(priv->func))
257                 clk_put(priv->func);
258         if (priv->usbh_base)
259                 iounmap(priv->usbh_base);
260
261         priv->phy       = NULL;
262         priv->usb24     = NULL;
263         priv->pci       = NULL;
264         priv->host      = NULL;
265         priv->func      = NULL;
266         priv->usbh_base = NULL;
267
268         free_irq(IRQ7, pdev);
269
270         return 0;
271 }
272
273 static int usbhsf_hardware_init(struct platform_device *pdev)
274 {
275         struct usbhsf_private *priv = usbhsf_get_priv(pdev);
276         int ret;
277
278         priv->phy       = clk_get(&pdev->dev, "phy");
279         priv->usb24     = clk_get(&pdev->dev, "usb24");
280         priv->pci       = clk_get(&pdev->dev, "pci");
281         priv->func      = clk_get(&pdev->dev, "func");
282         priv->host      = clk_get(&pdev->dev, "host");
283         priv->usbh_base = ioremap_nocache(USBH, 0x20000);
284
285         if (IS_ERR(priv->phy)           ||
286             IS_ERR(priv->usb24)         ||
287             IS_ERR(priv->pci)           ||
288             IS_ERR(priv->host)          ||
289             IS_ERR(priv->func)          ||
290             !priv->usbh_base) {
291                 dev_err(&pdev->dev, "USB clock setting failed\n");
292                 usbhsf_hardware_exit(pdev);
293                 return -EIO;
294         }
295
296         ret = request_irq(IRQ7, usbhsf_interrupt, IRQF_TRIGGER_NONE,
297                           dev_name(&pdev->dev), pdev);
298         if (ret) {
299                 dev_err(&pdev->dev, "request_irq err\n");
300                 return ret;
301         }
302         irq_set_irq_type(IRQ7, IRQ_TYPE_EDGE_BOTH);
303
304         /* usb24 use 1/1 of parent clock (= usb24s = 24MHz) */
305         clk_set_rate(priv->usb24,
306                      clk_get_rate(clk_get_parent(priv->usb24)));
307
308         return 0;
309 }
310
311 static struct usbhsf_private usbhsf_private = {
312         .info = {
313                 .platform_callback = {
314                         .get_id         = usbhsf_get_id,
315                         .get_vbus       = usbhsf_get_vbus,
316                         .hardware_init  = usbhsf_hardware_init,
317                         .hardware_exit  = usbhsf_hardware_exit,
318                         .power_ctrl     = usbhsf_power_ctrl,
319                 },
320                 .driver_param = {
321                         .buswait_bwait          = 5,
322                         .detection_delay        = 5,
323                         .d0_rx_id       = SHDMA_SLAVE_USBHS_RX,
324                         .d1_tx_id       = SHDMA_SLAVE_USBHS_TX,
325                 },
326         }
327 };
328
329 static struct resource usbhsf_resources[] = {
330         {
331                 .name   = "USBHS",
332                 .start  = 0xe6890000,
333                 .end    = 0xe6890104 - 1,
334                 .flags  = IORESOURCE_MEM,
335         },
336         {
337                 .start  = evt2irq(0x0A20),
338                 .flags  = IORESOURCE_IRQ,
339         },
340 };
341
342 static struct platform_device usbhsf_device = {
343         .name   = "renesas_usbhs",
344         .dev = {
345                 .platform_data = &usbhsf_private.info,
346         },
347         .id = -1,
348         .num_resources  = ARRAY_SIZE(usbhsf_resources),
349         .resource       = usbhsf_resources,
350 };
351
352 /* Ether */
353 static struct sh_eth_plat_data sh_eth_platdata = {
354         .phy                    = 0x00, /* LAN8710A */
355         .edmac_endian           = EDMAC_LITTLE_ENDIAN,
356         .register_type          = SH_ETH_REG_GIGABIT,
357         .phy_interface          = PHY_INTERFACE_MODE_MII,
358 };
359
360 static struct resource sh_eth_resources[] = {
361         {
362                 .start  = 0xe9a00000,
363                 .end    = 0xe9a00800 - 1,
364                 .flags  = IORESOURCE_MEM,
365         }, {
366                 .start  = 0xe9a01800,
367                 .end    = 0xe9a02000 - 1,
368                 .flags  = IORESOURCE_MEM,
369         }, {
370                 .start  = evt2irq(0x0500),
371                 .flags  = IORESOURCE_IRQ,
372         },
373 };
374
375 static struct platform_device sh_eth_device = {
376         .name = "sh-eth",
377         .id = -1,
378         .dev = {
379                 .platform_data = &sh_eth_platdata,
380         },
381         .resource = sh_eth_resources,
382         .num_resources = ARRAY_SIZE(sh_eth_resources),
383 };
384
385 /* LCDC */
386 static struct fb_videomode lcdc0_mode = {
387         .name           = "AMPIER/AM-800480",
388         .xres           = 800,
389         .yres           = 480,
390         .left_margin    = 88,
391         .right_margin   = 40,
392         .hsync_len      = 128,
393         .upper_margin   = 20,
394         .lower_margin   = 5,
395         .vsync_len      = 5,
396         .sync           = 0,
397 };
398
399 static struct sh_mobile_lcdc_info lcdc0_info = {
400         .clock_source   = LCDC_CLK_BUS,
401         .ch[0] = {
402                 .chan           = LCDC_CHAN_MAINLCD,
403                 .fourcc         = V4L2_PIX_FMT_RGB565,
404                 .interface_type = RGB24,
405                 .clock_divider  = 5,
406                 .flags          = 0,
407                 .lcd_modes      = &lcdc0_mode,
408                 .num_modes      = 1,
409                 .panel_cfg = {
410                         .width  = 111,
411                         .height = 68,
412                 },
413         },
414 };
415
416 static struct resource lcdc0_resources[] = {
417         [0] = {
418                 .name   = "LCD0",
419                 .start  = 0xfe940000,
420                 .end    = 0xfe943fff,
421                 .flags  = IORESOURCE_MEM,
422         },
423         [1] = {
424                 .start  = intcs_evt2irq(0x580),
425                 .flags  = IORESOURCE_IRQ,
426         },
427 };
428
429 static struct platform_device lcdc0_device = {
430         .name           = "sh_mobile_lcdc_fb",
431         .num_resources  = ARRAY_SIZE(lcdc0_resources),
432         .resource       = lcdc0_resources,
433         .id             = 0,
434         .dev    = {
435                 .platform_data  = &lcdc0_info,
436                 .coherent_dma_mask = ~0,
437         },
438 };
439
440 /*
441  * LCDC1/HDMI
442  */
443 static struct sh_mobile_hdmi_info hdmi_info = {
444         .flags          = HDMI_OUTPUT_PUSH_PULL |
445                           HDMI_OUTPUT_POLARITY_HI |
446                           HDMI_32BIT_REG |
447                           HDMI_HAS_HTOP1 |
448                           HDMI_SND_SRC_SPDIF,
449 };
450
451 static struct resource hdmi_resources[] = {
452         [0] = {
453                 .name   = "HDMI",
454                 .start  = 0xe6be0000,
455                 .end    = 0xe6be03ff,
456                 .flags  = IORESOURCE_MEM,
457         },
458         [1] = {
459                 .start  = evt2irq(0x1700),
460                 .flags  = IORESOURCE_IRQ,
461         },
462         [2] = {
463                 .name   = "HDMI emma3pf",
464                 .start  = 0xe6be4000,
465                 .end    = 0xe6be43ff,
466                 .flags  = IORESOURCE_MEM,
467         },
468 };
469
470 static struct platform_device hdmi_device = {
471         .name           = "sh-mobile-hdmi",
472         .num_resources  = ARRAY_SIZE(hdmi_resources),
473         .resource       = hdmi_resources,
474         .id             = -1,
475         .dev    = {
476                 .platform_data  = &hdmi_info,
477         },
478 };
479
480 static const struct fb_videomode lcdc1_mode = {
481         .name           = "HDMI 720p",
482         .xres           = 1280,
483         .yres           = 720,
484         .pixclock       = 13468,
485         .left_margin    = 220,
486         .right_margin   = 110,
487         .hsync_len      = 40,
488         .upper_margin   = 20,
489         .lower_margin   = 5,
490         .vsync_len      = 5,
491         .refresh        = 60,
492         .sync           = FB_SYNC_VERT_HIGH_ACT | FB_SYNC_HOR_HIGH_ACT,
493 };
494
495 static struct sh_mobile_lcdc_info hdmi_lcdc_info = {
496         .clock_source   = LCDC_CLK_PERIPHERAL, /* HDMI clock */
497         .ch[0] = {
498                 .chan                   = LCDC_CHAN_MAINLCD,
499                 .fourcc                 = V4L2_PIX_FMT_RGB565,
500                 .interface_type         = RGB24,
501                 .clock_divider          = 1,
502                 .flags                  = LCDC_FLAGS_DWPOL,
503                 .lcd_modes              = &lcdc1_mode,
504                 .num_modes              = 1,
505                 .tx_dev                 = &hdmi_device,
506                 .panel_cfg = {
507                         .width  = 1280,
508                         .height = 720,
509                 },
510         },
511 };
512
513 static struct resource hdmi_lcdc_resources[] = {
514         [0] = {
515                 .name   = "LCDC1",
516                 .start  = 0xfe944000,
517                 .end    = 0xfe948000 - 1,
518                 .flags  = IORESOURCE_MEM,
519         },
520         [1] = {
521                 .start  = intcs_evt2irq(0x1780),
522                 .flags  = IORESOURCE_IRQ,
523         },
524 };
525
526 static struct platform_device hdmi_lcdc_device = {
527         .name           = "sh_mobile_lcdc_fb",
528         .num_resources  = ARRAY_SIZE(hdmi_lcdc_resources),
529         .resource       = hdmi_lcdc_resources,
530         .id             = 1,
531         .dev    = {
532                 .platform_data  = &hdmi_lcdc_info,
533                 .coherent_dma_mask = ~0,
534         },
535 };
536
537 /* GPIO KEY */
538 #define GPIO_KEY(c, g, d, ...) \
539         { .code = c, .gpio = g, .desc = d, .active_low = 1, __VA_ARGS__ }
540
541 static struct gpio_keys_button gpio_buttons[] = {
542         GPIO_KEY(KEY_POWER,     GPIO_PORT99,    "SW3", .wakeup = 1),
543         GPIO_KEY(KEY_BACK,      GPIO_PORT100,   "SW4"),
544         GPIO_KEY(KEY_MENU,      GPIO_PORT97,    "SW5"),
545         GPIO_KEY(KEY_HOME,      GPIO_PORT98,    "SW6"),
546 };
547
548 static struct gpio_keys_platform_data gpio_key_info = {
549         .buttons        = gpio_buttons,
550         .nbuttons       = ARRAY_SIZE(gpio_buttons),
551 };
552
553 static struct platform_device gpio_keys_device = {
554         .name   = "gpio-keys",
555         .id     = -1,
556         .dev    = {
557                 .platform_data  = &gpio_key_info,
558         },
559 };
560
561 /* Fixed 3.3V regulator to be used by SDHI0, SDHI1, MMCIF */
562 static struct regulator_consumer_supply fixed3v3_power_consumers[] =
563 {
564         REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
565         REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
566         REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
567         REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
568         REGULATOR_SUPPLY("vmmc", "sh_mmcif"),
569         REGULATOR_SUPPLY("vqmmc", "sh_mmcif"),
570 };
571
572 /* SDHI0 */
573 /*
574  * FIXME
575  *
576  * It use polling mode here, since
577  * CD (= Card Detect) pin is not connected to SDHI0_CD.
578  * We can use IRQ31 as card detect irq,
579  * but it needs chattering removal operation
580  */
581 #define IRQ31   evt2irq(0x33E0)
582 static struct sh_mobile_sdhi_info sdhi0_info = {
583         .dma_slave_tx   = SHDMA_SLAVE_SDHI0_TX,
584         .dma_slave_rx   = SHDMA_SLAVE_SDHI0_RX,
585         .tmio_caps      = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |\
586                           MMC_CAP_NEEDS_POLL,
587         .tmio_ocr_mask  = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
588         .tmio_flags     = TMIO_MMC_HAS_IDLE_WAIT,
589 };
590
591 static struct resource sdhi0_resources[] = {
592         {
593                 .name   = "SDHI0",
594                 .start  = 0xe6850000,
595                 .end    = 0xe6850100 - 1,
596                 .flags  = IORESOURCE_MEM,
597         },
598         /*
599          * no SH_MOBILE_SDHI_IRQ_CARD_DETECT here
600          */
601         {
602                 .name   = SH_MOBILE_SDHI_IRQ_SDCARD,
603                 .start  = evt2irq(0x0E20),
604                 .flags  = IORESOURCE_IRQ,
605         },
606         {
607                 .name   = SH_MOBILE_SDHI_IRQ_SDIO,
608                 .start  = evt2irq(0x0E40),
609                 .flags  = IORESOURCE_IRQ,
610         },
611 };
612
613 static struct platform_device sdhi0_device = {
614         .name           = "sh_mobile_sdhi",
615         .id             = 0,
616         .dev            = {
617                 .platform_data  = &sdhi0_info,
618         },
619         .num_resources  = ARRAY_SIZE(sdhi0_resources),
620         .resource       = sdhi0_resources,
621 };
622
623 /* SDHI1 */
624 static struct sh_mobile_sdhi_info sdhi1_info = {
625         .dma_slave_tx   = SHDMA_SLAVE_SDHI1_TX,
626         .dma_slave_rx   = SHDMA_SLAVE_SDHI1_RX,
627         .tmio_caps      = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ,
628         .tmio_ocr_mask  = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
629         .tmio_flags     = TMIO_MMC_HAS_IDLE_WAIT,
630 };
631
632 static struct resource sdhi1_resources[] = {
633         [0] = {
634                 .name   = "SDHI1",
635                 .start  = 0xe6860000,
636                 .end    = 0xe6860100 - 1,
637                 .flags  = IORESOURCE_MEM,
638         },
639         [1] = {
640                 .start  = evt2irq(0x0E80),
641                 .flags  = IORESOURCE_IRQ,
642         },
643         [2] = {
644                 .start  = evt2irq(0x0EA0),
645                 .flags  = IORESOURCE_IRQ,
646         },
647         [3] = {
648                 .start  = evt2irq(0x0EC0),
649                 .flags  = IORESOURCE_IRQ,
650         },
651 };
652
653 static struct platform_device sdhi1_device = {
654         .name           = "sh_mobile_sdhi",
655         .id             = 1,
656         .dev            = {
657                 .platform_data  = &sdhi1_info,
658         },
659         .num_resources  = ARRAY_SIZE(sdhi1_resources),
660         .resource       = sdhi1_resources,
661 };
662
663 /* MMCIF */
664 static struct sh_mmcif_plat_data sh_mmcif_plat = {
665         .sup_pclk       = 0,
666         .ocr            = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34,
667         .caps           = MMC_CAP_4_BIT_DATA |
668                           MMC_CAP_8_BIT_DATA |
669                           MMC_CAP_NONREMOVABLE,
670 };
671
672 static struct resource sh_mmcif_resources[] = {
673         [0] = {
674                 .name   = "MMCIF",
675                 .start  = 0xe6bd0000,
676                 .end    = 0xe6bd0100 - 1,
677                 .flags  = IORESOURCE_MEM,
678         },
679         [1] = {
680                 /* MMC ERR */
681                 .start  = evt2irq(0x1AC0),
682                 .flags  = IORESOURCE_IRQ,
683         },
684         [2] = {
685                 /* MMC NOR */
686                 .start  = evt2irq(0x1AE0),
687                 .flags  = IORESOURCE_IRQ,
688         },
689 };
690
691 static struct platform_device sh_mmcif_device = {
692         .name           = "sh_mmcif",
693         .id             = -1,
694         .dev            = {
695                 .platform_data  = &sh_mmcif_plat,
696         },
697         .num_resources  = ARRAY_SIZE(sh_mmcif_resources),
698         .resource       = sh_mmcif_resources,
699 };
700
701 /* Camera */
702 static int mt9t111_power(struct device *dev, int mode)
703 {
704         struct clk *mclk = clk_get(NULL, "video1");
705
706         if (IS_ERR(mclk)) {
707                 dev_err(dev, "can't get video1 clock\n");
708                 return -EINVAL;
709         }
710
711         if (mode) {
712                 /* video1 (= CON1 camera) expect 24MHz */
713                 clk_set_rate(mclk, clk_round_rate(mclk, 24000000));
714                 clk_enable(mclk);
715                 gpio_set_value(GPIO_PORT158, 1);
716         } else {
717                 gpio_set_value(GPIO_PORT158, 0);
718                 clk_disable(mclk);
719         }
720
721         clk_put(mclk);
722
723         return 0;
724 }
725
726 static struct i2c_board_info i2c_camera_mt9t111 = {
727         I2C_BOARD_INFO("mt9t112", 0x3d),
728 };
729
730 static struct mt9t112_camera_info mt9t111_info = {
731         .divider = { 16, 0, 0, 7, 0, 10, 14, 7, 7 },
732 };
733
734 static struct soc_camera_link mt9t111_link = {
735         .i2c_adapter_id = 0,
736         .bus_id         = 0,
737         .board_info     = &i2c_camera_mt9t111,
738         .power          = mt9t111_power,
739         .priv           = &mt9t111_info,
740 };
741
742 static struct platform_device camera_device = {
743         .name   = "soc-camera-pdrv",
744         .id     = 0,
745         .dev    = {
746                 .platform_data = &mt9t111_link,
747         },
748 };
749
750 /* CEU0 */
751 static struct sh_mobile_ceu_info sh_mobile_ceu0_info = {
752         .flags = SH_CEU_FLAG_LOWER_8BIT,
753 };
754
755 static struct resource ceu0_resources[] = {
756         [0] = {
757                 .name   = "CEU",
758                 .start  = 0xfe910000,
759                 .end    = 0xfe91009f,
760                 .flags  = IORESOURCE_MEM,
761         },
762         [1] = {
763                 .start  = intcs_evt2irq(0x0500),
764                 .flags  = IORESOURCE_IRQ,
765         },
766         [2] = {
767                 /* place holder for contiguous memory */
768         },
769 };
770
771 static struct platform_device ceu0_device = {
772         .name           = "sh_mobile_ceu",
773         .id             = 0,
774         .num_resources  = ARRAY_SIZE(ceu0_resources),
775         .resource       = ceu0_resources,
776         .dev    = {
777                 .platform_data          = &sh_mobile_ceu0_info,
778                 .coherent_dma_mask      = 0xffffffff,
779         },
780 };
781
782 /* FSI */
783 static struct sh_fsi_platform_info fsi_info = {
784         /* FSI-WM8978 */
785         .port_a = {
786                 .tx_id = SHDMA_SLAVE_FSIA_TX,
787         },
788         /* FSI-HDMI */
789         .port_b = {
790                 .flags          = SH_FSI_FMT_SPDIF |
791                                   SH_FSI_ENABLE_STREAM_MODE |
792                                   SH_FSI_CLK_CPG,
793                 .tx_id          = SHDMA_SLAVE_FSIB_TX,
794         }
795 };
796
797 static struct resource fsi_resources[] = {
798         [0] = {
799                 .name   = "FSI",
800                 .start  = 0xfe1f0000,
801                 .end    = 0xfe1f8400 - 1,
802                 .flags  = IORESOURCE_MEM,
803         },
804         [1] = {
805                 .start  = evt2irq(0x1840),
806                 .flags  = IORESOURCE_IRQ,
807         },
808 };
809
810 static struct platform_device fsi_device = {
811         .name           = "sh_fsi2",
812         .id             = -1,
813         .num_resources  = ARRAY_SIZE(fsi_resources),
814         .resource       = fsi_resources,
815         .dev    = {
816                 .platform_data  = &fsi_info,
817         },
818 };
819
820 /* FSI-WM8978 */
821 static struct asoc_simple_card_info fsi_wm8978_info = {
822         .name           = "wm8978",
823         .card           = "FSI2A-WM8978",
824         .codec          = "wm8978.0-001a",
825         .platform       = "sh_fsi2",
826         .daifmt         = SND_SOC_DAIFMT_I2S,
827         .cpu_dai = {
828                 .name   = "fsia-dai",
829                 .fmt    = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_IB_NF,
830         },
831         .codec_dai = {
832                 .name   = "wm8978-hifi",
833                 .fmt    = SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_NB_NF,
834                 .sysclk = 12288000,
835         },
836 };
837
838 static struct platform_device fsi_wm8978_device = {
839         .name   = "asoc-simple-card",
840         .id     = 0,
841         .dev    = {
842                 .platform_data  = &fsi_wm8978_info,
843         },
844 };
845
846 /* FSI-HDMI */
847 static struct asoc_simple_card_info fsi2_hdmi_info = {
848         .name           = "HDMI",
849         .card           = "FSI2B-HDMI",
850         .codec          = "sh-mobile-hdmi",
851         .platform       = "sh_fsi2",
852         .cpu_dai = {
853                 .name   = "fsib-dai",
854                 .fmt    = SND_SOC_DAIFMT_CBM_CFM,
855         },
856         .codec_dai = {
857                 .name = "sh_mobile_hdmi-hifi",
858         },
859 };
860
861 static struct platform_device fsi_hdmi_device = {
862         .name   = "asoc-simple-card",
863         .id     = 1,
864         .dev    = {
865                 .platform_data  = &fsi2_hdmi_info,
866         },
867 };
868
869 /* RTC: RTC connects i2c-gpio. */
870 static struct i2c_gpio_platform_data i2c_gpio_data = {
871         .sda_pin        = GPIO_PORT208,
872         .scl_pin        = GPIO_PORT91,
873         .udelay         = 5, /* 100 kHz */
874 };
875
876 static struct platform_device i2c_gpio_device = {
877         .name = "i2c-gpio",
878         .id = 2,
879         .dev = {
880                 .platform_data = &i2c_gpio_data,
881         },
882 };
883
884 /* I2C */
885 static struct i2c_board_info i2c0_devices[] = {
886         {
887                 I2C_BOARD_INFO("st1232-ts", 0x55),
888                 .irq = evt2irq(0x0340),
889         },
890         {
891                 I2C_BOARD_INFO("wm8978", 0x1a),
892         },
893 };
894
895 static struct i2c_board_info i2c2_devices[] = {
896         {
897                 I2C_BOARD_INFO("s35390a", 0x30),
898                 .type = "s35390a",
899         },
900 };
901
902 /*
903  * board devices
904  */
905 static struct platform_device *eva_devices[] __initdata = {
906         &lcdc0_device,
907         &gpio_keys_device,
908         &sh_eth_device,
909         &sdhi0_device,
910         &sh_mmcif_device,
911         &hdmi_device,
912         &hdmi_lcdc_device,
913         &camera_device,
914         &ceu0_device,
915         &fsi_device,
916         &fsi_wm8978_device,
917         &fsi_hdmi_device,
918         &i2c_gpio_device,
919 };
920
921 static void __init eva_clock_init(void)
922 {
923         struct clk *system      = clk_get(NULL, "system_clk");
924         struct clk *xtal1       = clk_get(NULL, "extal1");
925         struct clk *usb24s      = clk_get(NULL, "usb24s");
926         struct clk *fsibck      = clk_get(NULL, "fsibck");
927
928         if (IS_ERR(system)      ||
929             IS_ERR(xtal1)       ||
930             IS_ERR(usb24s)      ||
931             IS_ERR(fsibck)) {
932                 pr_err("armadillo800eva board clock init failed\n");
933                 goto clock_error;
934         }
935
936         /* armadillo 800 eva extal1 is 24MHz */
937         clk_set_rate(xtal1, 24000000);
938
939         /* usb24s use extal1 (= system) clock (= 24MHz) */
940         clk_set_parent(usb24s, system);
941
942         /* FSIBCK is 12.288MHz, and it is parent of FSI-B */
943         clk_set_rate(fsibck, 12288000);
944
945 clock_error:
946         if (!IS_ERR(system))
947                 clk_put(system);
948         if (!IS_ERR(xtal1))
949                 clk_put(xtal1);
950         if (!IS_ERR(usb24s))
951                 clk_put(usb24s);
952         if (!IS_ERR(fsibck))
953                 clk_put(fsibck);
954 }
955
956 /*
957  * board init
958  */
959 #define GPIO_PORT7CR    IOMEM(0xe6050007)
960 #define GPIO_PORT8CR    IOMEM(0xe6050008)
961 static void __init eva_init(void)
962 {
963         struct platform_device *usb = NULL;
964
965         regulator_register_always_on(0, "fixed-3.3V", fixed3v3_power_consumers,
966                                      ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
967
968         r8a7740_pinmux_init();
969         r8a7740_meram_workaround();
970
971         /* SCIFA1 */
972         gpio_request(GPIO_FN_SCIFA1_RXD, NULL);
973         gpio_request(GPIO_FN_SCIFA1_TXD, NULL);
974
975         /* LCDC0 */
976         gpio_request(GPIO_FN_LCDC0_SELECT,      NULL);
977         gpio_request(GPIO_FN_LCD0_D0,           NULL);
978         gpio_request(GPIO_FN_LCD0_D1,           NULL);
979         gpio_request(GPIO_FN_LCD0_D2,           NULL);
980         gpio_request(GPIO_FN_LCD0_D3,           NULL);
981         gpio_request(GPIO_FN_LCD0_D4,           NULL);
982         gpio_request(GPIO_FN_LCD0_D5,           NULL);
983         gpio_request(GPIO_FN_LCD0_D6,           NULL);
984         gpio_request(GPIO_FN_LCD0_D7,           NULL);
985         gpio_request(GPIO_FN_LCD0_D8,           NULL);
986         gpio_request(GPIO_FN_LCD0_D9,           NULL);
987         gpio_request(GPIO_FN_LCD0_D10,          NULL);
988         gpio_request(GPIO_FN_LCD0_D11,          NULL);
989         gpio_request(GPIO_FN_LCD0_D12,          NULL);
990         gpio_request(GPIO_FN_LCD0_D13,          NULL);
991         gpio_request(GPIO_FN_LCD0_D14,          NULL);
992         gpio_request(GPIO_FN_LCD0_D15,          NULL);
993         gpio_request(GPIO_FN_LCD0_D16,          NULL);
994         gpio_request(GPIO_FN_LCD0_D17,          NULL);
995         gpio_request(GPIO_FN_LCD0_D18_PORT40,   NULL);
996         gpio_request(GPIO_FN_LCD0_D19_PORT4,    NULL);
997         gpio_request(GPIO_FN_LCD0_D20_PORT3,    NULL);
998         gpio_request(GPIO_FN_LCD0_D21_PORT2,    NULL);
999         gpio_request(GPIO_FN_LCD0_D22_PORT0,    NULL);
1000         gpio_request(GPIO_FN_LCD0_D23_PORT1,    NULL);
1001         gpio_request(GPIO_FN_LCD0_DCK,          NULL);
1002         gpio_request(GPIO_FN_LCD0_VSYN,         NULL);
1003         gpio_request(GPIO_FN_LCD0_HSYN,         NULL);
1004         gpio_request(GPIO_FN_LCD0_DISP,         NULL);
1005         gpio_request(GPIO_FN_LCD0_LCLK_PORT165, NULL);
1006
1007         gpio_request_one(GPIO_PORT61, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */
1008         gpio_request_one(GPIO_PORT202, GPIOF_OUT_INIT_LOW, NULL); /* LCD0_LED_CONT */
1009
1010         /* Touchscreen */
1011         gpio_request(GPIO_FN_IRQ10,     NULL); /* TP_INT */
1012         gpio_request_one(GPIO_PORT166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */
1013
1014         /* GETHER */
1015         gpio_request(GPIO_FN_ET_CRS,            NULL);
1016         gpio_request(GPIO_FN_ET_MDC,            NULL);
1017         gpio_request(GPIO_FN_ET_MDIO,           NULL);
1018         gpio_request(GPIO_FN_ET_TX_ER,          NULL);
1019         gpio_request(GPIO_FN_ET_RX_ER,          NULL);
1020         gpio_request(GPIO_FN_ET_ERXD0,          NULL);
1021         gpio_request(GPIO_FN_ET_ERXD1,          NULL);
1022         gpio_request(GPIO_FN_ET_ERXD2,          NULL);
1023         gpio_request(GPIO_FN_ET_ERXD3,          NULL);
1024         gpio_request(GPIO_FN_ET_TX_CLK,         NULL);
1025         gpio_request(GPIO_FN_ET_TX_EN,          NULL);
1026         gpio_request(GPIO_FN_ET_ETXD0,          NULL);
1027         gpio_request(GPIO_FN_ET_ETXD1,          NULL);
1028         gpio_request(GPIO_FN_ET_ETXD2,          NULL);
1029         gpio_request(GPIO_FN_ET_ETXD3,          NULL);
1030         gpio_request(GPIO_FN_ET_PHY_INT,        NULL);
1031         gpio_request(GPIO_FN_ET_COL,            NULL);
1032         gpio_request(GPIO_FN_ET_RX_DV,          NULL);
1033         gpio_request(GPIO_FN_ET_RX_CLK,         NULL);
1034
1035         gpio_request_one(GPIO_PORT18, GPIOF_OUT_INIT_HIGH, NULL); /* PHY_RST */
1036
1037         /* USB */
1038         gpio_request_one(GPIO_PORT159, GPIOF_IN, NULL); /* USB_DEVICE_MODE */
1039
1040         if (gpio_get_value(GPIO_PORT159)) {
1041                 /* USB Host */
1042         } else {
1043                 /* USB Func */
1044                 /*
1045                  * A1 chip has 2 IRQ7 pin and it was controled by MSEL register.
1046                  * OTOH, usbhs interrupt needs its value (HI/LOW) to decide
1047                  * USB connection/disconnection (usbhsf_get_vbus()).
1048                  * This means we needs to select GPIO_FN_IRQ7_PORT209 first,
1049                  * and select GPIO_PORT209 here
1050                  */
1051                 gpio_request(GPIO_FN_IRQ7_PORT209, NULL);
1052                 gpio_request_one(GPIO_PORT209, GPIOF_IN, NULL);
1053
1054                 platform_device_register(&usbhsf_device);
1055                 usb = &usbhsf_device;
1056         }
1057
1058         /* SDHI0 */
1059         gpio_request(GPIO_FN_SDHI0_CMD, NULL);
1060         gpio_request(GPIO_FN_SDHI0_CLK, NULL);
1061         gpio_request(GPIO_FN_SDHI0_D0, NULL);
1062         gpio_request(GPIO_FN_SDHI0_D1, NULL);
1063         gpio_request(GPIO_FN_SDHI0_D2, NULL);
1064         gpio_request(GPIO_FN_SDHI0_D3, NULL);
1065         gpio_request(GPIO_FN_SDHI0_WP, NULL);
1066
1067         gpio_request_one(GPIO_PORT17, GPIOF_OUT_INIT_LOW, NULL);  /* SDHI0_18/33_B */
1068         gpio_request_one(GPIO_PORT74, GPIOF_OUT_INIT_HIGH, NULL); /* SDHI0_PON */
1069         gpio_request_one(GPIO_PORT75, GPIOF_OUT_INIT_HIGH, NULL); /* SDSLOT1_PON */
1070
1071         /* we can use GPIO_FN_IRQ31_PORT167 here for SDHI0 CD irq */
1072
1073         /*
1074          * MMCIF
1075          *
1076          * Here doesn't care SW1.4 status,
1077          * since CON2 is not mounted.
1078          */
1079         gpio_request(GPIO_FN_MMC1_CLK_PORT103,  NULL);
1080         gpio_request(GPIO_FN_MMC1_CMD_PORT104,  NULL);
1081         gpio_request(GPIO_FN_MMC1_D0_PORT149,   NULL);
1082         gpio_request(GPIO_FN_MMC1_D1_PORT148,   NULL);
1083         gpio_request(GPIO_FN_MMC1_D2_PORT147,   NULL);
1084         gpio_request(GPIO_FN_MMC1_D3_PORT146,   NULL);
1085         gpio_request(GPIO_FN_MMC1_D4_PORT145,   NULL);
1086         gpio_request(GPIO_FN_MMC1_D5_PORT144,   NULL);
1087         gpio_request(GPIO_FN_MMC1_D6_PORT143,   NULL);
1088         gpio_request(GPIO_FN_MMC1_D7_PORT142,   NULL);
1089
1090         /* CEU0 */
1091         gpio_request(GPIO_FN_VIO0_D7,           NULL);
1092         gpio_request(GPIO_FN_VIO0_D6,           NULL);
1093         gpio_request(GPIO_FN_VIO0_D5,           NULL);
1094         gpio_request(GPIO_FN_VIO0_D4,           NULL);
1095         gpio_request(GPIO_FN_VIO0_D3,           NULL);
1096         gpio_request(GPIO_FN_VIO0_D2,           NULL);
1097         gpio_request(GPIO_FN_VIO0_D1,           NULL);
1098         gpio_request(GPIO_FN_VIO0_D0,           NULL);
1099         gpio_request(GPIO_FN_VIO0_CLK,          NULL);
1100         gpio_request(GPIO_FN_VIO0_HD,           NULL);
1101         gpio_request(GPIO_FN_VIO0_VD,           NULL);
1102         gpio_request(GPIO_FN_VIO0_FIELD,        NULL);
1103         gpio_request(GPIO_FN_VIO_CKO,           NULL);
1104
1105         /* CON1/CON15 Camera */
1106         gpio_request_one(GPIO_PORT173, GPIOF_OUT_INIT_LOW, NULL);  /* STANDBY */
1107         gpio_request_one(GPIO_PORT172, GPIOF_OUT_INIT_HIGH, NULL); /* RST */
1108         /* see mt9t111_power() */
1109         gpio_request_one(GPIO_PORT158, GPIOF_OUT_INIT_LOW, NULL);  /* CAM_PON */
1110
1111         /* FSI-WM8978 */
1112         gpio_request(GPIO_FN_FSIAIBT,           NULL);
1113         gpio_request(GPIO_FN_FSIAILR,           NULL);
1114         gpio_request(GPIO_FN_FSIAOMC,           NULL);
1115         gpio_request(GPIO_FN_FSIAOSLD,          NULL);
1116         gpio_request(GPIO_FN_FSIAISLD_PORT5,    NULL);
1117
1118         gpio_request(GPIO_PORT7, NULL);
1119         gpio_request(GPIO_PORT8, NULL);
1120         gpio_direction_none(GPIO_PORT7CR); /* FSIAOBT needs no direction */
1121         gpio_direction_none(GPIO_PORT8CR); /* FSIAOLR needs no direction */
1122
1123         /* FSI-HDMI */
1124         gpio_request(GPIO_FN_FSIBCK,            NULL);
1125
1126         /* HDMI */
1127         gpio_request(GPIO_FN_HDMI_HPD,          NULL);
1128         gpio_request(GPIO_FN_HDMI_CEC,          NULL);
1129
1130         /*
1131          * CAUTION
1132          *
1133          * DBGMD/LCDC0/FSIA MUX
1134          * DBGMD_SELECT_B should be set after setting PFC Function.
1135          */
1136         gpio_request_one(GPIO_PORT176, GPIOF_OUT_INIT_HIGH, NULL);
1137
1138         /*
1139          * We can switch CON8/CON14 by SW1.5,
1140          * but it needs after DBGMD_SELECT_B
1141          */
1142         gpio_request_one(GPIO_PORT6, GPIOF_IN, NULL);
1143         if (gpio_get_value(GPIO_PORT6)) {
1144                 /* CON14 enable */
1145         } else {
1146                 /* CON8 (SDHI1) enable */
1147                 gpio_request(GPIO_FN_SDHI1_CLK, NULL);
1148                 gpio_request(GPIO_FN_SDHI1_CMD, NULL);
1149                 gpio_request(GPIO_FN_SDHI1_D0,  NULL);
1150                 gpio_request(GPIO_FN_SDHI1_D1,  NULL);
1151                 gpio_request(GPIO_FN_SDHI1_D2,  NULL);
1152                 gpio_request(GPIO_FN_SDHI1_D3,  NULL);
1153                 gpio_request(GPIO_FN_SDHI1_CD,  NULL);
1154                 gpio_request(GPIO_FN_SDHI1_WP,  NULL);
1155
1156                 /* SDSLOT2_PON */
1157                 gpio_request_one(GPIO_PORT16, GPIOF_OUT_INIT_HIGH, NULL);
1158
1159                 platform_device_register(&sdhi1_device);
1160         }
1161
1162
1163 #ifdef CONFIG_CACHE_L2X0
1164         /* Early BRESP enable, Shared attribute override enable, 32K*8way */
1165         l2x0_init(IOMEM(0xf0002000), 0x40440000, 0x82000fff);
1166 #endif
1167
1168         i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices));
1169         i2c_register_board_info(2, i2c2_devices, ARRAY_SIZE(i2c2_devices));
1170
1171         r8a7740_add_standard_devices();
1172
1173         platform_add_devices(eva_devices,
1174                              ARRAY_SIZE(eva_devices));
1175
1176         rmobile_add_device_to_domain("A4LC", &lcdc0_device);
1177         rmobile_add_device_to_domain("A4LC", &hdmi_lcdc_device);
1178         if (usb)
1179                 rmobile_add_device_to_domain("A3SP", usb);
1180
1181         r8a7740_pm_init();
1182 }
1183
1184 static void __init eva_earlytimer_init(void)
1185 {
1186         r8a7740_clock_init(MD_CK0 | MD_CK2);
1187         shmobile_earlytimer_init();
1188
1189         /* the rate of extal1 clock must be set before late_time_init */
1190         eva_clock_init();
1191 }
1192
1193 static void __init eva_add_early_devices(void)
1194 {
1195         r8a7740_add_early_devices();
1196 }
1197
1198 #define RESCNT2 IOMEM(0xe6188020)
1199 static void eva_restart(char mode, const char *cmd)
1200 {
1201         /* Do soft power on reset */
1202         writel((1 << 31), RESCNT2);
1203 }
1204
1205 static const char *eva_boards_compat_dt[] __initdata = {
1206         "renesas,armadillo800eva",
1207         NULL,
1208 };
1209
1210 DT_MACHINE_START(ARMADILLO800EVA_DT, "armadillo800eva")
1211         .map_io         = r8a7740_map_io,
1212         .init_early     = eva_add_early_devices,
1213         .init_irq       = r8a7740_init_irq,
1214         .handle_irq     = shmobile_handle_irq_intc,
1215         .init_machine   = eva_init,
1216         .init_late      = shmobile_init_late,
1217         .init_time      = eva_earlytimer_init,
1218         .dt_compat      = eva_boards_compat_dt,
1219         .restart        = eva_restart,
1220 MACHINE_END