2013-10-08 10:30:18 +04:00
/*
* Koelsch board support - Reference DT implementation
*
* Copyright ( C ) 2013 Renesas Electronics Corporation
* Copyright ( C ) 2013 Renesas Solutions Corp .
* Copyright ( C ) 2013 Magnus Damm
*
* 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
* the Free Software Foundation ; version 2 of the License .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
2014-02-17 01:32:01 +04:00
# include <linux/dma-mapping.h>
2013-10-08 10:30:18 +04:00
# include <linux/kernel.h>
# include <linux/of_platform.h>
2014-02-17 01:32:01 +04:00
# include <linux/platform_data/rcar-du.h>
2014-03-13 03:36:35 +04:00
# include <mach/clock.h>
2013-11-20 07:54:34 +04:00
# include <mach/common.h>
2014-02-17 01:32:01 +04:00
# include <mach/irqs.h>
2013-10-08 10:30:18 +04:00
# include <mach/rcar-gen2.h>
# include <mach/r8a7791.h>
# include <asm/mach/arch.h>
2014-02-17 01:32:01 +04:00
/* DU */
static struct rcar_du_encoder_data koelsch_du_encoders [ ] = {
{
. type = RCAR_DU_ENCODER_NONE ,
. output = RCAR_DU_OUTPUT_LVDS0 ,
. connector . lvds . panel = {
. width_mm = 210 ,
. height_mm = 158 ,
. mode = {
. clock = 65000 ,
. hdisplay = 1024 ,
. hsync_start = 1048 ,
. hsync_end = 1184 ,
. htotal = 1344 ,
. vdisplay = 768 ,
. vsync_start = 771 ,
. vsync_end = 777 ,
. vtotal = 806 ,
. flags = 0 ,
} ,
} ,
} ,
} ;
static struct rcar_du_platform_data koelsch_du_pdata = {
. encoders = koelsch_du_encoders ,
. num_encoders = ARRAY_SIZE ( koelsch_du_encoders ) ,
} ;
static const struct resource du_resources [ ] __initconst = {
DEFINE_RES_MEM ( 0xfeb00000 , 0x40000 ) ,
DEFINE_RES_MEM_NAMED ( 0xfeb90000 , 0x1c , " lvds.0 " ) ,
DEFINE_RES_IRQ ( gic_spi ( 256 ) ) ,
DEFINE_RES_IRQ ( gic_spi ( 268 ) ) ,
} ;
static void __init koelsch_add_du_device ( void )
{
struct platform_device_info info = {
. name = " rcar-du-r8a7791 " ,
. id = - 1 ,
. res = du_resources ,
. num_res = ARRAY_SIZE ( du_resources ) ,
. data = & koelsch_du_pdata ,
. size_data = sizeof ( koelsch_du_pdata ) ,
. dma_mask = DMA_BIT_MASK ( 32 ) ,
} ;
platform_device_register_full ( & info ) ;
}
2014-03-13 03:36:35 +04:00
/*
* This is a really crude hack to provide clkdev support to platform
* devices until they get moved to DT .
*/
2014-03-13 10:29:57 +04:00
static const struct clk_name clk_names [ ] __initconst = {
2014-04-23 15:15:14 +04:00
{ " cmt0 " , " fck " , " sh-cmt-48-gen2.0 " } ,
2014-03-13 03:36:35 +04:00
{ " du0 " , " du.0 " , " rcar-du-r8a7791 " } ,
{ " du1 " , " du.1 " , " rcar-du-r8a7791 " } ,
{ " lvds0 " , " lvds.0 " , " rcar-du-r8a7791 " } ,
} ;
2013-12-11 18:13:55 +04:00
2014-03-13 18:29:30 +04:00
/*
* This is a really crude hack to work around core platform clock issues
*/
2014-03-17 06:19:56 +04:00
static const struct clk_name clk_enables [ ] __initconst = {
2014-03-13 18:29:30 +04:00
{ " ether " , NULL , " ee700000.ethernet " } ,
{ " i2c2 " , NULL , " e6530000.i2c " } ,
{ " msiof0 " , NULL , " e6e20000.spi " } ,
{ " qspi_mod " , NULL , " e6b10000.spi " } ,
2014-03-18 16:54:34 +04:00
{ " sdhi0 " , NULL , " ee100000.sd " } ,
{ " sdhi1 " , NULL , " ee140000.sd " } ,
{ " sdhi2 " , NULL , " ee160000.sd " } ,
2014-03-13 18:29:30 +04:00
{ " thermal " , NULL , " e61f0000.thermal " } ,
} ;
2014-02-17 11:21:28 +04:00
2013-10-08 10:30:18 +04:00
static void __init koelsch_add_standard_devices ( void )
{
2014-03-13 03:36:35 +04:00
shmobile_clk_workaround ( clk_names , ARRAY_SIZE ( clk_names ) , false ) ;
2014-03-13 18:29:30 +04:00
shmobile_clk_workaround ( clk_enables , ARRAY_SIZE ( clk_enables ) , true ) ;
2013-10-08 10:30:18 +04:00
r8a7791_add_dt_devices ( ) ;
of_platform_populate ( NULL , of_default_bus_match_table , NULL , NULL ) ;
2014-02-17 01:32:01 +04:00
koelsch_add_du_device ( ) ;
2013-10-08 10:30:18 +04:00
}
static const char * const koelsch_boards_compat_dt [ ] __initconst = {
2013-12-11 18:13:59 +04:00
" renesas,koelsch " ,
2013-10-08 10:30:18 +04:00
" renesas,koelsch-reference " ,
NULL ,
} ;
DT_MACHINE_START ( KOELSCH_DT , " koelsch " )
. smp = smp_ops ( r8a7791_smp_ops ) ,
2014-05-12 03:25:27 +04:00
. init_early = shmobile_init_delay ,
2013-10-08 10:30:18 +04:00
. init_time = rcar_gen2_timer_init ,
. init_machine = koelsch_add_standard_devices ,
2013-11-20 07:54:34 +04:00
. init_late = shmobile_init_late ,
2013-10-08 10:30:18 +04:00
. dt_compat = koelsch_boards_compat_dt ,
MACHINE_END