From: Yusuf Caglar Akyuz <cag...@bilkon-kontrol.com.tr> Current VPBE encoder code do not include for support for LCD driving capabilities of dm644x and dm355. It is possible to use LCD output via logicpd encoder code but I think vpbe encoder code must support this feature as well.
Signed-off-by: Yusuf Caglar Akyuz <cag...@bilkon-kontrol.com.tr> --- drivers/media/video/davinci/davinci_platform.c | 8 +++++ drivers/media/video/davinci/logicpd_encoder.c | 20 ++++++------ drivers/media/video/davinci/vpbe_encoder.c | 39 +++++++++++++++++------ include/media/davinci/vpbe_encoder.h | 8 ++-- 4 files changed, 51 insertions(+), 24 deletions(-) diff --git a/drivers/media/video/davinci/davinci_platform.c b/drivers/media/video/davinci/davinci_platform.c index 48df2db..79fcc1f 100644 --- a/drivers/media/video/davinci/davinci_platform.c +++ b/drivers/media/video/davinci/davinci_platform.c @@ -38,10 +38,18 @@ extern struct vid_enc_device_mgr enc_dev[]; +//#define USE_LCD_AS_DEFAULT +#ifndef USE_LCD_AS_DEFAULT struct enc_config davinci_enc_default[DAVINCI_ENC_MAX_CHANNELS] = { {VID_ENC_OUTPUT_COMPOSITE, VID_ENC_STD_NTSC} }; +#else +struct enc_config davinci_enc_default[DAVINCI_ENC_MAX_CHANNELS] = { + {VID_ENC_OUTPUT_LCD, + VID_ENC_STD_640x480} +}; +#endif EXPORT_SYMBOL(davinci_enc_default); diff --git a/drivers/media/video/davinci/logicpd_encoder.c b/drivers/media/video/davinci/logicpd_encoder.c index fd120c3..a3746a5 100644 --- a/drivers/media/video/davinci/logicpd_encoder.c +++ b/drivers/media/video/davinci/logicpd_encoder.c @@ -23,7 +23,7 @@ /* Kernel Specific header files */ #include <linux/kernel.h> -#include <linux/config.h> +#include <linux/autoconf.h> #include <linux/init.h> #include <linux/ctype.h> #include <linux/delay.h> @@ -59,14 +59,14 @@ static struct logicpd_encoder_config logicpd_encoder_configuration = { .if_type = VID_ENC_IF_PRGB, .interlaced = 0, .xres = 800, - .yres = 576, - .fps = {47, 1},//{60, 1}, - .left_margin = 40,//85, - .right_margin = 40,//70, - .upper_margin = 29,//32, - .lower_margin = 13,//11, - .hsync_len = 48,//9, - .vsync_len = 3,//9, + .yres = 480, + .fps = {55, 1}, + .left_margin = 40, + .right_margin = 40, + .upper_margin = 29, + .lower_margin = 13, + .hsync_len = 48, + .vsync_len = 3, .flags = 0}, /* hsync -ve, vsync -ve */ .standards[1] = { .name = VID_ENC_STD_640x400, @@ -407,7 +407,7 @@ static void logicpd_encoder_cleanup(void) vid_enc_unregister_encoder(&logicpd_encoder_dev); } -subsys_initcall(logicpd_encoder_init); +subsys_initcall_sync(logicpd_encoder_init); module_exit(logicpd_encoder_cleanup); MODULE_LICENSE("GPL"); diff --git a/drivers/media/video/davinci/vpbe_encoder.c b/drivers/media/video/davinci/vpbe_encoder.c index 0a92341..101068a 100644 --- a/drivers/media/video/davinci/vpbe_encoder.c +++ b/drivers/media/video/davinci/vpbe_encoder.c @@ -161,7 +161,22 @@ static struct vid_enc_mode_info vpbe_encoder_modes[VPBE_ENCODER_MAX_NUM_STD] = { .lower_margin = 0, .hsync_len = 0, .vsync_len = 0, - .flags = 0} + .flags = 0}, + { + .name = VID_ENC_STD_640x480, + .std = 1, + .if_type = VID_ENC_IF_PRGB, + .interlaced = 0, + .xres = 800, + .yres = 480, + .fps = {55, 1}, + .left_margin = 40, + .right_margin = 40, + .upper_margin = 29, + .lower_margin = 13, + .hsync_len = 48, + .vsync_len = 3, + .flags = 0}, }; static struct vpbe_encoder_config vpbe_encoder_configuration = { @@ -171,13 +186,18 @@ static struct vpbe_encoder_config vpbe_encoder_configuration = { .output_name = VID_ENC_OUTPUT_COMPOSITE, .no_of_standard = VPBE_DM644X_ENCODER_COMPOSITE_NUM_STD, .standards = {VID_ENC_STD_NTSC, VID_ENC_STD_PAL}, - }, + }, .output[1] = { + .output_name = VID_ENC_OUTPUT_LCD, + .no_of_standard = 1, + .standards = { VID_ENC_STD_640x480 }, + }, + .output[2] = { .output_name = VID_ENC_OUTPUT_SVIDEO, .no_of_standard = VPBE_DM644X_ENCODER_SVIDEO_NUM_STD, .standards = {VID_ENC_STD_NTSC, VID_ENC_STD_PAL}, - }, - .output[2] = { + }, + .output[3] = { .output_name = VID_ENC_OUTPUT_COMPONENT, .no_of_standard = VPBE_DM644X_ENCODER_COMPONENT_NUM_STD, .standards = {VID_ENC_STD_NTSC, @@ -186,7 +206,7 @@ static struct vpbe_encoder_config vpbe_encoder_configuration = { VID_ENC_STD_PAL_RGB, VID_ENC_STD_480P_60, VID_ENC_STD_576P_50}, - } + }, }; static struct vpbe_encoder_channel vpbe_encoder_channel_info = { @@ -274,7 +294,9 @@ static int vpbe_encoder_set_dac(char *output) printk(KERN_DEBUG "Setting output to Component Video\n"); dispc_reg_out(VENC_DACSEL, 0x543); - } else + } else if (!strcmp(output, VID_ENC_OUTPUT_LCD)) + printk(KERN_DEBUG "Setting output to parallel LCD\n"); + else error = -1; } else if (!cpu_is_davinci_dm355()) error = -1; @@ -348,7 +370,6 @@ static int vpbe_encoder_setmode(struct vid_enc_mode_info *mode_info, char *mode; struct vid_enc_mode_info *my_mode_info; - printk("#############Setting vpbe mode############\n"); if ((NULL == enc) || (NULL == mode_info)) { printk(KERN_ERR "NULL Pointer\n"); return -EINVAL; @@ -358,7 +379,6 @@ static int vpbe_encoder_setmode(struct vid_enc_mode_info *mode_info, printk(KERN_ERR "NULL Pointer\n"); return -EINVAL; } - printk(KERN_DEBUG "Start of vpbe_encoder_setmode..\n"); outindex = vpbe_encoder_channel_info.params.outindex; if (cpu_is_davinci_dm644x()) dm6446 = 1; @@ -461,8 +481,7 @@ static int vpbe_encoder_setmode(struct vid_enc_mode_info *mode_info, (HDTV_625P << VENC_VMOD_TVTYP_SHIFT), VENC_VMOD_TVTYP); } else { - printk(KERN_ERR "Mode not supported..\n"); - return -EINVAL; + /* Unknown mode maybe we are driving LCD */ } } else { /* Non- Standard mode. Check if we support it. If so diff --git a/include/media/davinci/vpbe_encoder.h b/include/media/davinci/vpbe_encoder.h index b230d9d..683da7b 100644 --- a/include/media/davinci/vpbe_encoder.h +++ b/include/media/davinci/vpbe_encoder.h @@ -27,12 +27,12 @@ #ifdef __KERNEL__ /* encoder standard related strctures */ -#define VPBE_ENCODER_MAX_NO_OUTPUTS (3) -#define VPBE_ENCODER_MAX_NUM_STD (6) -#define VPBE_DM355_ENCODER_MAX_NO_OUTPUTS (1) +#define VPBE_ENCODER_MAX_NO_OUTPUTS (4) +#define VPBE_ENCODER_MAX_NUM_STD (7) +#define VPBE_DM355_ENCODER_MAX_NO_OUTPUTS (2) #define VPBE_DM355_ENCODER_COMPOSITE_NUM_STD (2) #define VPBE_DM355_ENCODER_MAX_NUM_STD (2) -#define VPBE_DM644X_ENCODER_MAX_NO_OUTPUTS (3) +#define VPBE_DM644X_ENCODER_MAX_NO_OUTPUTS (4) #define VPBE_DM644X_ENCODER_COMPONENT_NUM_STD (6) #define VPBE_DM644X_ENCODER_SVIDEO_NUM_STD (2) #define VPBE_DM644X_ENCODER_COMPOSITE_NUM_STD (2) -- 1.5.6 _______________________________________________ Davinci-linux-open-source mailing list Davinci-linux-open-source@linux.davincidsp.com http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source