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

Reply via email to