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