Merge tag 'backport/v3.14.24-ltsi-rc1/xhci-plat-to-v3.18-rc1' into backport/v3.14...
[platform/adaptation/renesas_rcar/renesas_kernel.git] / arch / arm / mach-shmobile / board-bockw.c
index c475220..eada12e 100644 (file)
@@ -1,9 +1,9 @@
 /*
  * Bock-W board support
  *
- * Copyright (C) 2013  Renesas Solutions Corp.
+ * Copyright (C) 2013-2014  Renesas Solutions Corp.
  * Copyright (C) 2013  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
- * Copyright (C) 2013  Cogent Embedded, Inc.
+ * Copyright (C) 2013-2014  Cogent Embedded, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
 #include <linux/usb/renesas_usbhs.h>
+
 #include <media/soc_camera.h>
-#include <mach/common.h>
-#include <mach/irqs.h>
-#include <mach/r8a7778.h>
 #include <asm/mach/arch.h>
 #include <sound/rcar_snd.h>
 #include <sound/simple_card.h>
 
+#include "common.h"
+#include "irqs.h"
+#include "r8a7778.h"
+
 #define FPGA   0x18200000
 #define IRQ0MR 0x30
 #define COMCTLR        0x101c
@@ -168,6 +170,8 @@ static struct renesas_usbhs_platform_info usbhs_info __initdata = {
        },
        .driver_param = {
                .buswait_bwait  = 4,
+               .d0_tx_id       = HPBDMA_SLAVE_USBFUNC_TX,
+               .d1_rx_id       = HPBDMA_SLAVE_USBFUNC_RX,
        },
 };
 
@@ -233,6 +237,17 @@ static struct sh_eth_plat_data ether_platform_data __initdata = {
        .no_ether_link  = 1,
 };
 
+static struct platform_device_info ether_info __initdata = {
+       .parent         = &platform_bus,
+       .name           = "r8a777x-ether",
+       .id             = -1,
+       .res            = ether_resources,
+       .num_res        = ARRAY_SIZE(ether_resources),
+       .data           = &ether_platform_data,
+       .size_data      = sizeof(ether_platform_data),
+       .dma_mask       = DMA_BIT_MASK(32),
+};
+
 /* I2C */
 static struct i2c_board_info i2c0_devices[] = {
        {
@@ -332,16 +347,39 @@ static struct rsnd_ssi_platform_info rsnd_ssi[] = {
        RSND_SSI_UNUSED, /* SSI 0 */
        RSND_SSI_UNUSED, /* SSI 1 */
        RSND_SSI_UNUSED, /* SSI 2 */
-       RSND_SSI_SET(1, 0, gic_iid(0x85), RSND_SSI_PLAY),
-       RSND_SSI_SET(2, 0, gic_iid(0x85), RSND_SSI_CLK_PIN_SHARE),
-       RSND_SSI_SET(0, 0, gic_iid(0x86), RSND_SSI_PLAY),
-       RSND_SSI_SET(0, 0, gic_iid(0x86), 0),
-       RSND_SSI_SET(3, 0, gic_iid(0x86), RSND_SSI_PLAY),
-       RSND_SSI_SET(4, 0, gic_iid(0x86), RSND_SSI_CLK_PIN_SHARE),
+       RSND_SSI(HPBDMA_SLAVE_HPBIF3_TX, gic_iid(0x85), 0),
+       RSND_SSI(HPBDMA_SLAVE_HPBIF4_RX, gic_iid(0x85), RSND_SSI_CLK_PIN_SHARE),
+       RSND_SSI(HPBDMA_SLAVE_HPBIF5_TX, gic_iid(0x86), 0),
+       RSND_SSI(HPBDMA_SLAVE_HPBIF6_RX, gic_iid(0x86), 0),
+       RSND_SSI(HPBDMA_SLAVE_HPBIF7_TX, gic_iid(0x86), 0),
+       RSND_SSI(HPBDMA_SLAVE_HPBIF8_RX, gic_iid(0x86), RSND_SSI_CLK_PIN_SHARE),
 };
 
-static struct rsnd_scu_platform_info rsnd_scu[9] = {
-       /* no member at this point */
+static struct rsnd_src_platform_info rsnd_src[9] = {
+       RSND_SRC_UNUSED, /* SRU 0 */
+       RSND_SRC_UNUSED, /* SRU 1 */
+       RSND_SRC_UNUSED, /* SRU 2 */
+       RSND_SRC(0, 0),
+       RSND_SRC(0, 0),
+       RSND_SRC(0, 0),
+       RSND_SRC(0, 0),
+       RSND_SRC(0, 0),
+       RSND_SRC(0, 0),
+};
+
+static struct rsnd_dai_platform_info rsnd_dai[] = {
+       {
+               .playback = { .ssi = &rsnd_ssi[5], .src = &rsnd_src[5] },
+               .capture  = { .ssi = &rsnd_ssi[6], .src = &rsnd_src[6] },
+       }, {
+               .playback = { .ssi = &rsnd_ssi[3], .src = &rsnd_src[3] },
+       }, {
+               .capture  = { .ssi = &rsnd_ssi[4], .src = &rsnd_src[4] },
+       }, {
+               .playback = { .ssi = &rsnd_ssi[7], .src = &rsnd_src[7] },
+       }, {
+               .capture  = { .ssi = &rsnd_ssi[8], .src = &rsnd_src[8] },
+       },
 };
 
 enum {
@@ -416,8 +454,10 @@ static struct rcar_snd_info rsnd_info = {
        .flags          = RSND_GEN1,
        .ssi_info       = rsnd_ssi,
        .ssi_info_nr    = ARRAY_SIZE(rsnd_ssi),
-       .scu_info       = rsnd_scu,
-       .scu_info_nr    = ARRAY_SIZE(rsnd_scu),
+       .src_info       = rsnd_src,
+       .src_info_nr    = ARRAY_SIZE(rsnd_src),
+       .dai_info       = rsnd_dai,
+       .dai_info_nr    = ARRAY_SIZE(rsnd_dai),
        .start          = rsnd_start,
        .stop           = rsnd_stop,
 };
@@ -429,14 +469,12 @@ static struct asoc_simple_card_info rsnd_card_info[] = {
                .card           = "SSI56-AK4643",
                .codec          = "ak4642-codec.0-0012",
                .platform       = "rcar_sound",
-               .daifmt         = SND_SOC_DAIFMT_LEFT_J,
+               .daifmt         = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_CBM_CFM,
                .cpu_dai = {
                        .name   = "rsnd-dai.0",
-                       .fmt    = SND_SOC_DAIFMT_CBS_CFS,
                },
                .codec_dai = {
                        .name   = "ak4642-hifi",
-                       .fmt    = SND_SOC_DAIFMT_CBM_CFM,
                        .sysclk = 11289600,
                },
        },
@@ -446,10 +484,9 @@ static struct asoc_simple_card_info rsnd_card_info[] = {
                .card           = "SSI3-AK4554(playback)",
                .codec          = "ak4554-adc-dac.0",
                .platform       = "rcar_sound",
+               .daifmt         = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_RIGHT_J,
                .cpu_dai = {
                        .name   = "rsnd-dai.1",
-                       .fmt    = SND_SOC_DAIFMT_CBM_CFM |
-                                 SND_SOC_DAIFMT_RIGHT_J,
                },
                .codec_dai = {
                        .name   = "ak4554-hifi",
@@ -461,10 +498,9 @@ static struct asoc_simple_card_info rsnd_card_info[] = {
                .card           = "SSI4-AK4554(capture)",
                .codec          = "ak4554-adc-dac.0",
                .platform       = "rcar_sound",
+               .daifmt         = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_LEFT_J,
                .cpu_dai = {
                        .name   = "rsnd-dai.2",
-                       .fmt    = SND_SOC_DAIFMT_CBM_CFM |
-                                 SND_SOC_DAIFMT_LEFT_J,
                },
                .codec_dai = {
                        .name   = "ak4554-hifi",
@@ -476,10 +512,9 @@ static struct asoc_simple_card_info rsnd_card_info[] = {
                .card           = "SSI7-AK4554(playback)",
                .codec          = "ak4554-adc-dac.1",
                .platform       = "rcar_sound",
+               .daifmt         = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_RIGHT_J,
                .cpu_dai = {
                        .name   = "rsnd-dai.3",
-                       .fmt    = SND_SOC_DAIFMT_CBM_CFM |
-                                 SND_SOC_DAIFMT_RIGHT_J,
                },
                .codec_dai = {
                        .name   = "ak4554-hifi",
@@ -491,10 +526,9 @@ static struct asoc_simple_card_info rsnd_card_info[] = {
                .card           = "SSI8-AK4554(capture)",
                .codec          = "ak4554-adc-dac.1",
                .platform       = "rcar_sound",
+               .daifmt         = SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_LEFT_J,
                .cpu_dai = {
                        .name   = "rsnd-dai.4",
-                       .fmt    = SND_SOC_DAIFMT_CBM_CFM |
-                                 SND_SOC_DAIFMT_LEFT_J,
                },
                .codec_dai = {
                        .name   = "ak4554-hifi",
@@ -576,17 +610,14 @@ static void __init bockw_init(void)
 {
        void __iomem *base;
        struct clk *clk;
+       struct platform_device *pdev;
        int i;
 
        r8a7778_clock_init();
        r8a7778_init_irq_extpin(1);
        r8a7778_add_standard_devices();
 
-       platform_device_register_resndata(&platform_bus, "r8a777x-ether", -1,
-                                         ether_resources,
-                                         ARRAY_SIZE(ether_resources),
-                                         &ether_platform_data,
-                                         sizeof(ether_platform_data));
+       platform_device_register_full(&ether_info);
 
        platform_device_register_full(&vin0_info);
        /* VIN1 has a pin conflict with Ether */
@@ -662,9 +693,6 @@ static void __init bockw_init(void)
        }
 
        /* for Audio */
-       clk = clk_get(NULL, "audio_clk_b");
-       clk_set_rate(clk, 24576000);
-       clk_put(clk);
        rsnd_codec_power(5, 1); /* enable ak4642 */
 
        platform_device_register_simple(
@@ -673,11 +701,15 @@ static void __init bockw_init(void)
        platform_device_register_simple(
                "ak4554-adc-dac", 1, NULL, 0);
 
-       platform_device_register_resndata(
+       pdev = platform_device_register_resndata(
                &platform_bus, "rcar_sound", -1,
                rsnd_resources, ARRAY_SIZE(rsnd_resources),
                &rsnd_info, sizeof(rsnd_info));
 
+       clk = clk_get(&pdev->dev, "clk_b");
+       clk_set_rate(clk, 24576000);
+       clk_put(clk);
+
        for (i = 0; i < ARRAY_SIZE(rsnd_card_info); i++) {
                struct platform_device_info cardinfo = {
                        .parent         = &platform_bus,
@@ -704,7 +736,7 @@ static const char *bockw_boards_compat_dt[] __initdata = {
 };
 
 DT_MACHINE_START(BOCKW_DT, "bockw")
-       .init_early     = r8a7778_init_delay,
+       .init_early     = shmobile_init_delay,
        .init_irq       = r8a7778_init_irq_dt,
        .init_machine   = bockw_init,
        .dt_compat      = bockw_boards_compat_dt,