2017-01-09 12:55:29 -08:00
/*
* Legacy platform_data quirks
*
* Copyright ( C ) 2016 BayLibre , Inc
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/kernel.h>
# include <linux/of_platform.h>
2017-02-28 17:01:58 +01:00
# include <media/i2c/tvp514x.h>
2017-02-28 17:02:00 +01:00
# include <media/i2c/adv7343.h>
2017-02-28 17:01:58 +01:00
2017-01-09 12:55:29 -08:00
# include <mach/common.h>
2017-02-28 17:01:58 +01:00
# include <mach/da8xx.h>
2017-01-09 12:55:29 -08:00
struct pdata_init {
const char * compatible ;
void ( * fn ) ( void ) ;
} ;
2017-02-28 17:01:58 +01:00
# define TVP5147_CH0 "tvp514x-0"
# define TVP5147_CH1 "tvp514x-1"
/* VPIF capture configuration */
static struct tvp514x_platform_data tvp5146_pdata = {
. clk_polarity = 0 ,
. hs_polarity = 1 ,
. vs_polarity = 1 ,
} ;
# define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
static const struct vpif_input da850_ch0_inputs [ ] = {
{
. input = {
. index = 0 ,
. name = " Composite " ,
. type = V4L2_INPUT_TYPE_CAMERA ,
. capabilities = V4L2_IN_CAP_STD ,
. std = TVP514X_STD_ALL ,
} ,
. input_route = INPUT_CVBS_VI2B ,
. output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC ,
. subdev_name = TVP5147_CH0 ,
} ,
} ;
static const struct vpif_input da850_ch1_inputs [ ] = {
{
. input = {
. index = 0 ,
. name = " S-Video " ,
. type = V4L2_INPUT_TYPE_CAMERA ,
. capabilities = V4L2_IN_CAP_STD ,
. std = TVP514X_STD_ALL ,
} ,
. input_route = INPUT_SVIDEO_VI2C_VI1C ,
. output_route = OUTPUT_10BIT_422_EMBEDDED_SYNC ,
. subdev_name = TVP5147_CH1 ,
} ,
} ;
static struct vpif_subdev_info da850_vpif_capture_sdev_info [ ] = {
{
. name = TVP5147_CH0 ,
. board_info = {
I2C_BOARD_INFO ( " tvp5146 " , 0x5d ) ,
. platform_data = & tvp5146_pdata ,
} ,
} ,
{
. name = TVP5147_CH1 ,
. board_info = {
I2C_BOARD_INFO ( " tvp5146 " , 0x5c ) ,
. platform_data = & tvp5146_pdata ,
} ,
} ,
} ;
static struct vpif_capture_config da850_vpif_capture_config = {
. subdev_info = da850_vpif_capture_sdev_info ,
. subdev_count = ARRAY_SIZE ( da850_vpif_capture_sdev_info ) ,
. chan_config [ 0 ] = {
. inputs = da850_ch0_inputs ,
. input_count = ARRAY_SIZE ( da850_ch0_inputs ) ,
. vpif_if = {
. if_type = VPIF_IF_BT656 ,
. hd_pol = 1 ,
. vd_pol = 1 ,
. fid_pol = 0 ,
} ,
} ,
. chan_config [ 1 ] = {
. inputs = da850_ch1_inputs ,
. input_count = ARRAY_SIZE ( da850_ch1_inputs ) ,
. vpif_if = {
. if_type = VPIF_IF_BT656 ,
. hd_pol = 1 ,
. vd_pol = 1 ,
. fid_pol = 0 ,
} ,
} ,
. card_name = " DA850/OMAP-L138 Video Capture " ,
} ;
static void __init da850_vpif_legacy_register_capture ( void )
{
int ret ;
ret = da850_register_vpif_capture ( & da850_vpif_capture_config ) ;
if ( ret )
pr_warn ( " %s: VPIF capture setup failed: %d \n " ,
__func__ , ret ) ;
}
static void __init da850_vpif_capture_legacy_init_lcdk ( void )
{
da850_vpif_capture_config . subdev_count = 1 ;
da850_vpif_legacy_register_capture ( ) ;
}
static void __init da850_vpif_capture_legacy_init_evm ( void )
{
da850_vpif_legacy_register_capture ( ) ;
}
2017-02-28 17:02:00 +01:00
static struct adv7343_platform_data adv7343_pdata = {
. mode_config = {
. dac = { 1 , 1 , 1 } ,
} ,
. sd_config = {
. sd_dac_out = { 1 } ,
} ,
} ;
static struct vpif_subdev_info da850_vpif_subdev [ ] = {
{
. name = " adv7343 " ,
. board_info = {
I2C_BOARD_INFO ( " adv7343 " , 0x2a ) ,
. platform_data = & adv7343_pdata ,
} ,
} ,
} ;
static const struct vpif_output da850_ch0_outputs [ ] = {
{
. output = {
. index = 0 ,
. name = " Composite " ,
. type = V4L2_OUTPUT_TYPE_ANALOG ,
. capabilities = V4L2_OUT_CAP_STD ,
. std = V4L2_STD_ALL ,
} ,
. subdev_name = " adv7343 " ,
. output_route = ADV7343_COMPOSITE_ID ,
} ,
{
. output = {
. index = 1 ,
. name = " S-Video " ,
. type = V4L2_OUTPUT_TYPE_ANALOG ,
. capabilities = V4L2_OUT_CAP_STD ,
. std = V4L2_STD_ALL ,
} ,
. subdev_name = " adv7343 " ,
. output_route = ADV7343_SVIDEO_ID ,
} ,
} ;
static struct vpif_display_config da850_vpif_display_config = {
. subdevinfo = da850_vpif_subdev ,
. subdev_count = ARRAY_SIZE ( da850_vpif_subdev ) ,
. chan_config [ 0 ] = {
. outputs = da850_ch0_outputs ,
. output_count = ARRAY_SIZE ( da850_ch0_outputs ) ,
} ,
. card_name = " DA850/OMAP-L138 Video Display " ,
} ;
static void __init da850_vpif_display_legacy_init_evm ( void )
{
int ret ;
ret = da850_register_vpif_display ( & da850_vpif_display_config ) ;
if ( ret )
pr_warn ( " %s: VPIF display setup failed: %d \n " ,
__func__ , ret ) ;
}
2017-01-09 12:55:29 -08:00
static void pdata_quirks_check ( struct pdata_init * quirks )
{
while ( quirks - > compatible ) {
if ( of_machine_is_compatible ( quirks - > compatible ) ) {
if ( quirks - > fn )
quirks - > fn ( ) ;
}
quirks + + ;
}
}
static struct pdata_init pdata_quirks [ ] __initdata = {
2017-02-28 17:01:58 +01:00
{ " ti,da850-lcdk " , da850_vpif_capture_legacy_init_lcdk , } ,
2017-02-28 17:02:00 +01:00
{ " ti,da850-evm " , da850_vpif_display_legacy_init_evm , } ,
2017-02-28 17:01:58 +01:00
{ " ti,da850-evm " , da850_vpif_capture_legacy_init_evm , } ,
2017-01-09 12:55:29 -08:00
{ /* sentinel */ } ,
} ;
void __init pdata_quirks_init ( void )
{
pdata_quirks_check ( pdata_quirks ) ;
}