Merge tag 'v3.14.25' into backport/v3.14.24-ltsi-rc1+v3.14.25/snapshot-merge.wip
[platform/adaptation/renesas_rcar/renesas_kernel.git] / arch / arm / mach-shmobile / board-lager-reference.c
index a6e271d..bc4b483 100644 (file)
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <linux/clk.h>
-#include <linux/clkdev.h>
+#include <linux/dma-mapping.h>
 #include <linux/init.h>
 #include <linux/of_platform.h>
-#include <mach/common.h>
-#include <mach/rcar-gen2.h>
-#include <mach/r8a7790.h>
+#include <linux/platform_data/rcar-du.h>
+
 #include <asm/mach/arch.h>
 
-static void __init lager_add_standard_devices(void)
+#include "clock.h"
+#include "common.h"
+#include "irqs.h"
+#include "r8a7790.h"
+#include "rcar-gen2.h"
+
+/* DU */
+static struct rcar_du_encoder_data lager_du_encoders[] = {
+       {
+               .type = RCAR_DU_ENCODER_VGA,
+               .output = RCAR_DU_OUTPUT_DPAD0,
+       }, {
+               .type = RCAR_DU_ENCODER_NONE,
+               .output = RCAR_DU_OUTPUT_LVDS1,
+               .connector.lvds.panel = {
+                       .width_mm = 210,
+                       .height_mm = 158,
+                       .mode = {
+                               .pixelclock = 65000000,
+                               .hactive = 1024,
+                               .hfront_porch = 20,
+                               .hback_porch = 160,
+                               .hsync_len = 136,
+                               .vactive = 768,
+                               .vfront_porch = 3,
+                               .vback_porch = 29,
+                               .vsync_len = 6,
+                       },
+               },
+       },
+};
+
+static struct rcar_du_platform_data lager_du_pdata = {
+       .encoders = lager_du_encoders,
+       .num_encoders = ARRAY_SIZE(lager_du_encoders),
+};
+
+static const struct resource du_resources[] __initconst = {
+       DEFINE_RES_MEM(0xfeb00000, 0x70000),
+       DEFINE_RES_MEM_NAMED(0xfeb90000, 0x1c, "lvds.0"),
+       DEFINE_RES_MEM_NAMED(0xfeb94000, 0x1c, "lvds.1"),
+       DEFINE_RES_IRQ(gic_spi(256)),
+       DEFINE_RES_IRQ(gic_spi(268)),
+       DEFINE_RES_IRQ(gic_spi(269)),
+};
+
+static void __init lager_add_du_device(void)
 {
-#ifdef CONFIG_COMMON_CLK
-       /*
-        * This is a really crude hack to provide clkdev support to the SCIF
-        * and CMT devices until they get moved to DT.
-        */
-       static const char * const scif_names[] = {
-               "scifa0", "scifa1", "scifb0", "scifb1",
-               "scifb2", "scifa2", "scif0", "scif1",
-               "hscif0", "hscif1",
+       struct platform_device_info info = {
+               .name = "rcar-du-r8a7790",
+               .id = -1,
+               .res = du_resources,
+               .num_res = ARRAY_SIZE(du_resources),
+               .data = &lager_du_pdata,
+               .size_data = sizeof(lager_du_pdata),
+               .dma_mask = DMA_BIT_MASK(32),
        };
-       struct clk *clk;
-       unsigned int i;
 
-       for (i = 0; i < ARRAY_SIZE(scif_names); ++i) {
-               clk = clk_get(NULL, scif_names[i]);
-               if (clk) {
-                       clk_register_clkdev(clk, NULL, "sh-sci.%u", i);
-                       clk_put(clk);
-               }
-       }
+       platform_device_register_full(&info);
+}
 
-       clk = clk_get(NULL, "cmt0");
-       if (clk) {
-               clk_register_clkdev(clk, NULL, "sh_cmt.0");
-               clk_put(clk);
-       }
-#else
-       r8a7790_clock_init();
-#endif
+/*
+ * This is a really crude hack to provide clkdev support to platform
+ * devices until they get moved to DT.
+ */
+static const struct clk_name clk_names[] __initconst = {
+       { "du0", "du.0", "rcar-du-r8a7790" },
+       { "du1", "du.1", "rcar-du-r8a7790" },
+       { "du2", "du.2", "rcar-du-r8a7790" },
+       { "lvds0", "lvds.0", "rcar-du-r8a7790" },
+       { "lvds1", "lvds.1", "rcar-du-r8a7790" },
+};
 
-       r8a7790_add_dt_devices();
+static void __init lager_add_standard_devices(void)
+{
+       shmobile_clk_workaround(clk_names, ARRAY_SIZE(clk_names), false);
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+
+       lager_add_du_device();
 }
 
 static const char *lager_boards_compat_dt[] __initdata = {
@@ -71,9 +114,10 @@ static const char *lager_boards_compat_dt[] __initdata = {
 
 DT_MACHINE_START(LAGER_DT, "lager")
        .smp            = smp_ops(r8a7790_smp_ops),
-       .init_early     = r8a7790_init_early,
+       .init_early     = shmobile_init_delay,
        .init_time      = rcar_gen2_timer_init,
        .init_machine   = lager_add_standard_devices,
        .init_late      = shmobile_init_late,
+       .reserve        = rcar_gen2_reserve,
        .dt_compat      = lager_boards_compat_dt,
 MACHINE_END