On Monday 14 June 2010 07:38:03 pm Karicheri, Muralidharan wrote:
> Hi,
> 
> Why are you trying to fix this old fb driver when TI India is already
> working on to up port the latest Arago fb and v4l2 drivers?
> 

Do you have any schedule about when are you going to submit VPBE drivers? 

To be honest, it is not wise to force people use out of tree drivers for their 
work, IMHO. 

The drivers you are referring to are sitting in Arago tree more than a year(or 
2?) and we haven't seen any effort to make them upstream. Moreover, I don't 
think they will be accepted to mainline with their current shape. 

> davincifb driver is not part of the kernel.org tree and is available
> only in davinci tree and is an obsolete driver.
> 

We have a mainline framebuffer driver for da8xx processors but not for dm's. 
Its a shame.

Best regards,
Caglar

> Murali Karicheri
> Software Design Engineer
> Texas Instruments Inc.
> Germantown, MD 20874
> phone: 301-407-9583
> email: m-kariche...@ti.com
> 
> >-----Original Message-----
> >From: davinci-linux-open-source-boun...@linux.davincidsp.com
> >[mailto:davinci-linux-open-source-boun...@linux.davincidsp.com] On Behalf
> >Of Raffaele Recalcati
> >Sent: Friday, June 11, 2010 6:20 AM
> >To: davinci-linux-open-source@linux.davincidsp.com
> >Subject: [PATCH 14/14] davinci: video: davincifb Parallel RBG LCD
> >management
> >
> >From: Davide Bonfanti <davide.bonfa...@bticino.it>
> >
> >Signed-off-by: Davide Bonfanti <davide.bonfa...@bticino.it>
> >---
> > drivers/video/davincifb.c |  167
> >+++++++++++++++++++++++++++++++++++++++++----
> > include/video/davincifb.h |   17 ++++-
> > 2 files changed, 165 insertions(+), 19 deletions(-)
> >
> >diff --git a/drivers/video/davincifb.c b/drivers/video/davincifb.c
> >index 2a7b2c9..24d1424 100644
> >--- a/drivers/video/davincifb.c
> >+++ b/drivers/video/davincifb.c
> >@@ -29,12 +29,15 @@
> > #include <linux/interrupt.h>
> > #include <linux/platform_device.h>
> >
> >+#include <media/davinci/vpss.h>
> > #include <asm/irq.h>
> > #include <asm/uaccess.h>
> >
> > #include <video/davincifb.h>
> > #include <asm/system.h>
> >
> >+#include <mach/dm365.h>
> >+#include <mach/cputype.h>
> > #define MODULE_NAME "davincifb"
> >
> > /* Output Format Selection  */
> >@@ -286,6 +289,10 @@ static irqreturn_t davincifb_isr(int irq, void *arg)
> >                                      dm->vid1->info.fix.line_length);
> >                     dm->vid1->sdram_address = 0;
> >             }
> >+            if (dm->osd0->info.var.vmode == FB_VMODE_NONINTERLACED) {
> >+                    ++dm->vsync_cnt;
> >+                    wake_up_interruptible(&dm->vsync_wait);
> >+            }
> >             return IRQ_HANDLED;
> >     } else {
> >             ++dm->vsync_cnt;
> >@@ -631,21 +638,29 @@ static void set_sdram_params(char *id, u32 addr, u32
> >line_length)
> >     /* The parameters to be written to the registers should be in
> >      * multiple of 32 bytes
> >      */
> >-    addr = addr;            /* div by 32 */
> >-    line_length = line_length / 32;
> >+    addr = (addr - DAVINCI_DDR_BASE) >> 5;          /* div by 32 */
> >+    line_length = line_length >> 5;
> >
> >     if (is_win(id, VID0)) {
> >-            dispc_reg_out(OSD_VIDWIN0ADR, addr);
> >-            dispc_reg_out(OSD_VIDWIN0OFST, line_length);
> >+            dispc_reg_out(OSD_VIDWIN0ADR, addr & 0xFFFF);
> >+            dispc_reg_merge(OSD_VIDWINADH, (addr & 0x7F0000) >> 16, 0x7F);
> >+            dispc_reg_out(OSD_VIDWIN0OFST, line_length | 0x1000);
> >+                    /* From docs it's not clear why bit12 is needed */
> >     } else if (is_win(id, VID1)) {
> >-            dispc_reg_out(OSD_VIDWIN1ADR, addr);
> >-            dispc_reg_out(OSD_VIDWIN1OFST, line_length);
> >+            dispc_reg_out(OSD_VIDWIN1ADR, addr & 0xFFFF);
> >+            dispc_reg_merge(OSD_VIDWINADH, (addr & 0x7F0000) >> 8, 0x7F00);
> >+            dispc_reg_out(OSD_VIDWIN1OFST, line_length | 0x1000);
> >+                    /* From docs it's not clear why bit12 is needed */
> >     } else if (is_win(id, OSD0)) {
> >-            dispc_reg_out(OSD_OSDWIN0ADR, addr);
> >-            dispc_reg_out(OSD_OSDWIN0OFST, line_length);
> >+            dispc_reg_out(OSD_OSDWIN0ADR, addr & 0xFFFF);
> >+            dispc_reg_out(OSD_OSDWIN0OFST, line_length | 0x1000);
> >+            dispc_reg_merge(OSD_OSDWINADH, (addr & 0x7F0000) >> 16, 0x7F);
> >+                    /* From docs it's not clear why bit12 is needed */
> >     } else if (is_win(id, OSD1)) {
> >-            dispc_reg_out(OSD_OSDWIN1ADR, addr);
> >-            dispc_reg_out(OSD_OSDWIN1OFST, line_length);
> >+            dispc_reg_out(OSD_OSDWIN1ADR, addr & 0xFFFF);
> >+            dispc_reg_merge(OSD_OSDWINADH, (addr & 0x7F0000) >> 8, 0x7F00);
> >+            dispc_reg_out(OSD_OSDWIN1OFST, line_length | 0x1000);
> >+                    /* From docs it's not clear why bit12 is needed */
> >     }
> > }
> >
> >@@ -980,14 +995,12 @@ int __init davincifb_setup(char *options)
> >             if (!strncmp(this_opt, "output=", 7)) {
> >                     if (!strncmp(this_opt + 7, "lcd", 3)) {
> >                             dmparams.output = LCD;
> >-                            dmparams.format = 0;
> >+                            dmparams.format = RGB;
> >                     } else if (!strncmp(this_opt + 7, "ntsc", 4))
> >                             dmparams.output = NTSC;
> >                     else if (!strncmp(this_opt + 7, "pal", 3))
> >                             dmparams.output = PAL;
> >             } else if (!strncmp(this_opt, "format=", 7)) {
> >-                    if (dmparams.output == LCD)
> >-                            continue;
> >                     if (!strncmp(this_opt + 7, "composite", 9))
> >                             dmparams.format = COMPOSITE;
> >                     else if (!strncmp(this_opt + 7, "s-video", 7))
> >@@ -1060,7 +1073,9 @@ int __init davincifb_setup(char *options)
> >             format_yres = 480;
> >     } else if (dmparams.output == PAL) {
> >             format_yres = 576;
> >-    } else {
> >+    } else if (dmparams.output == LCD)
> >+            format_yres = dmparams.osd0_yres;
> >+    else {
> >             printk(KERN_INFO
> >                    "DaVinci:invalid format..defaulting width to 480\n");
> >     }
> >@@ -1180,7 +1195,10 @@ static struct fb_info *init_fb_info(struct
> >dm_win_info *w,
> >     struct dm_info *dm = w->dm;
> >
> >     /* initialize the fb_info structure */
> >-    info->flags = FBINFO_DEFAULT;
> >+    info->flags = FBINFO_DEFAULT |
> >+                    FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT |
> >+                    FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_XPAN |
> >+                    FBINFO_HWACCEL_YPAN;
> >     info->fbops = &davincifb_ops;
> >     info->screen_base = (char *)(w->fb_base);
> >     info->pseudo_palette = w->pseudo_palette;
> >@@ -1388,6 +1406,123 @@ static void davincifb_pal_component_config(int on)
> >     }
> > }
> >
> >+int dm365_set_pixelclock(int pixclock)
> >+{
> >+    u32 pllfreq;
> >+    int ret;
> >+    struct clk *clk6;
> >+
> >+    pixclock /= 1000;
> >+    pllfreq = 1000000000 / pixclock;
> >+
> >+    clk6 = clk_get(dm->dev, "pll1_sysclk6");
> >+    if (clk_set_rate(clk6, pllfreq)) {
> >+            dispc_reg_out(VENC_DCLKCTL, 0x03);
> >+            dispc_reg_out(VENC_DCLKPTN0, 0x03);
> >+            dispc_reg_out(VENC_DCLKPTN1, 0x0);
> >+            dispc_reg_out(VENC_DCLKPTN2, 0x0);
> >+            dispc_reg_out(VENC_DCLKPTN3, 0x0);
> >+            ret = 4;
> >+            clk_set_rate(clk6, pllfreq * 4);
> >+    } else {
> >+            dispc_reg_out(VENC_DCLKCTL, 0x801);
> >+            dispc_reg_out(VENC_DCLKPTN0, 0x03);
> >+            dispc_reg_out(VENC_DCLKPTN1, 0x0);
> >+            dispc_reg_out(VENC_DCLKPTN2, 0x0);
> >+            dispc_reg_out(VENC_DCLKPTN3, 0x0);
> >+            ret = 1;
> >+    }
> >+    pllfreq = clk_get_rate(clk6);
> >+    return ret;
> >+}
> >+
> >+static void davincifb_lcd_rgb_config(int on)
> >+{
> >+    u32 divisor = 1;
> >+
> >+    if (on) {
> >+            /* Reset video encoder module */
> >+            dispc_reg_out(VENC_VMOD, 0x0);
> >+            dispc_reg_out(VENC_VIDCTL, 0x0);
> >+
> >+            if (cpu_is_davinci_dm365()) {
> >+                    divisor = \
> >+                    dm365_set_pixelclock(dm->osd0->info.var.pixclock);
> >+            }
> >+
> >+            /* set hsync pulse width */
> >+            dispc_reg_out(VENC_HSPLS, (dm->osd0->info.var.hsync_len) * \
> >+                    divisor);
> >+            /* set vsync pulse width */
> >+            dispc_reg_out(VENC_VSPLS, dm->osd0->info.var.vsync_len);
> >+            /* set horizontal interval  */
> >+            dispc_reg_out(VENC_HINT, ((dm->osd0->info.var.left_margin + \
> >+            dm->osd0->info.var.right_margin + dm->osd0->info.var.width) * \
> >+                    divisor)  - 1);
> >+            /* set horizontal data valid start position  */
> >+            dispc_reg_out(VENC_HSTART, (dm->osd0->info.var.left_margin) * \
> >+                    divisor);
> >+            /* set Horizontal data valid range  */
> >+            dispc_reg_out(VENC_HVALID, (dm->osd0->info.var.width) * \
> >+                    divisor);
> >+            /* set Vertical interval  */
> >+            dispc_reg_out(VENC_VINT, dm->osd0->info.var.upper_margin + \
> >+                    dm->osd0->info.var.lower_margin + \
> >+                    dm->osd0->info.var.height - 1);
> >+            /* set Vertical data valid start position */
> >+            dispc_reg_out(VENC_VSTART, dm->osd0->info.var.upper_margin);
> >+            /* set Horizontal data valid range  */
> >+            dispc_reg_out(VENC_VVALID, dm->osd0->info.var.height);
> >+            /* Enable VCLK */
> >+            dispc_reg_out(VENC_OSDCLK1, 3);
> >+            dispc_reg_out(VENC_LCDOUT, 0x81);
> >+            dispc_reg_out(VENC_OSDCLK0, 0x0);
> >+            dispc_reg_out(VENC_OSDCLK1, 0xFFFF);
> >+            dispc_reg_out(VENC_CLKCTL, 0x10);
> >+            dispc_reg_out(VENC_SYNCCTL, 0x0F);
> >+            dispc_reg_merge(VENC_VIDCTL, \
> >+                    ((dm->osd0->info.var.sync & FB_SYNC_PIXCLOCK_HIGH_ACT) \
> >+                    == FB_SYNC_PIXCLOCK_HIGH_ACT) << 14, VENC_VIDCTL_VCLKP);
> >+            dispc_reg_merge(VENC_SYNCCTL, \
> >+                    ((dm->osd0->info.var.sync & FB_SYNC_VERT_HIGH_ACT) \
> >+                    != FB_SYNC_VERT_HIGH_ACT) << 3, VENC_SYNCCTL_VPL);
> >+            dispc_reg_merge(VENC_SYNCCTL, \
> >+                    ((dm->osd0->info.var.sync & FB_SYNC_HOR_HIGH_ACT) \
> >+                    != FB_SYNC_HOR_HIGH_ACT) << 2, VENC_SYNCCTL_HPL);
> >+
> >+            /* set osd window */
> >+            dispc_reg_out(OSD_VIDWINMD, 0x22);
> >+            dispc_reg_out(OSD_OSDWIN0MD, 0x2933);
> >+            dispc_reg_out(OSD_OSDWIN0XP, dm->osd0->info.var.xoffset);
> >+            dispc_reg_out(OSD_OSDWIN0YP, dm->osd0->info.var.yoffset);
> >+            dispc_reg_out(OSD_OSDWIN0XL, dm->osd0->info.var.xres * \
> >+                    divisor);
> >+            dispc_reg_out(OSD_OSDWIN0YL, dm->osd0->info.var.yres);
> >+
> >+            /* Set RGB565 mode */
> >+            dispc_reg_merge(OSD_OSDWIN0MD, OSD_OSDWIN0MD_RGB0E, \
> >+                    OSD_OSDWIN0MD_RGB0E);
> >+            dispc_reg_merge(OSD_OSDWIN0MD, on, OSD_OSDWIN0MD_OACT0);
> >+
> >+            dispc_reg_merge(VENC_VIDCTL, VENC_VIDCTL_VCLKE, \
> >+                    VENC_VIDCTL_VCLKE);
> >+            /* set origin position */
> >+            /* Values manually defined
> >+            dispc_reg_out(OSD_BASEPX, 0x32);
> >+            dispc_reg_out(OSD_BASEPY, 0x08);*/
> >+            dispc_reg_out(OSD_BASEPX, 20 + dm->osd0->info.var.left_margin);
> >+            dispc_reg_out(OSD_BASEPY, dm->osd0->info.var.upper_margin);
> >+
> >+            dispc_reg_out(VENC_VMOD, (VENC_VMOD_VDMD_RGB666 << \
> >+                    VENC_VMOD_VDMD_SHIFT) | VENC_VMOD_ITLCL | \
> >+                    VENC_VMOD_HDMD | VENC_VMOD_VIE | VENC_VMOD_VENC \
> >+                    | VENC_VMOD_VMD);
> >+    } else {
> >+            /* Reset video encoder module */
> >+            dispc_reg_out(VENC_VMOD, 0);
> >+    }
> >+}
> >+
> > static inline void fix_default_var(struct dm_win_info *w,
> >                                u32 xres, u32 yres, u32 xpos, u32 ypos,
> >                                int n_buf)
> >@@ -1487,6 +1622,8 @@ static int davincifb_probe(struct platform_device
> >*pdev)
> >             dm->output_device_config = davincifb_pal_svideo_config;
> >     else if ((dmparams.output == PAL) && (dmparams.format == COMPONENT))
> >             dm->output_device_config = davincifb_pal_component_config;
> >+    else if ((dmparams.output == LCD) && (dmparams.format == RGB))
> >+            dm->output_device_config = davincifb_lcd_rgb_config;
> >     /* Add support for other displays here */
> >     else {
> >             printk(KERN_WARNING "Unsupported output device!\n");
> >diff --git a/include/video/davincifb.h b/include/video/davincifb.h
> >index c3ecdd8..c4e8127 100644
> >--- a/include/video/davincifb.h
> >+++ b/include/video/davincifb.h
> >@@ -14,12 +14,12 @@
> > #define _DAVINCIFB_H_
> >
> > #include <mach/io.h>
> >+#include <linux/fb.h>
> >
> > /* Base registers */
> >-#define     VPBE_REG_BASE                           0x01c72780
> >-#define     VENC_REG_BASE                           0x01c72400
> >-#define     OSD_REG_BASE                            0x01c72600
> >-#define OSD_REG_SIZE                                0x00000180
> >+#define VENC_REG_BASE                               0x01C71E00
> >+#define OSD_REG_BASE                                0x01C71C00
> >+#define OSD_REG_SIZE                                0x00000100
> >
> > /* VPBE Global Registers */
> > #define     VPBE_PID                                (VPBE_BASE + 0x0)
> >@@ -107,6 +107,7 @@
> > #define     VENC_HVLDCL0                            (VENC_REG_BASE + 0x134)
> > #define     VENC_HVLDCL1                            (VENC_REG_BASE + 0x138)
> > #define     VENC_OSDHAD                             (VENC_REG_BASE + 0x13C)
> >+#define VENC_CLKCTL                         (VENC_REG_BASE + 0x140)
> >
> > #define VID0        0
> > #define VID1        1
> >@@ -125,9 +126,11 @@
> > #define     OSD_VIDWIN1OFST                         (OSD_REG_BASE + 0x1C)
> > #define     OSD_OSDWIN0OFST                         (OSD_REG_BASE + 0x20)
> > #define     OSD_OSDWIN1OFST                         (OSD_REG_BASE + 0x24)
> >+#define     OSD_VIDWINADH                           (OSD_REG_BASE + 0x28)
> > #define             OSD_WINADR(i)                   (OSD_REG_BASE + 0x2C +
> >(i)*0x4)
> > #define     OSD_VIDWIN0ADR                          (OSD_REG_BASE + 0x2C)
> > #define     OSD_VIDWIN1ADR                          (OSD_REG_BASE + 0x30)
> >+#define     OSD_OSDWINADH                           (OSD_REG_BASE + 0x34)
> > #define     OSD_OSDWIN0ADR                          (OSD_REG_BASE + 0x38)
> > #define     OSD_OSDWIN1ADR                          (OSD_REG_BASE + 0x3C)
> > #define     OSD_BASEPX                              (OSD_REG_BASE + 0x40)
> >@@ -202,6 +205,12 @@
> > #define VENC_VMOD_BLNK                              (1 << 3)
> > #define VENC_VMOD_VIE                               (1 << 1)
> > #define VENC_VMOD_VENC                              (1 << 0)
> >+
> >+#define VENC_VIDCTL_VCLKE                   (1 << 13)
> >+#define VENC_VIDCTL_VCLKP                   (1 << 14)
> >+#define VENC_SYNCCTL_HPL                    (1 << 2)
> >+#define VENC_SYNCCTL_VPL                    (1 << 3)
> >+
> > /* other VENC registers' bit positions not defined yet */
> >
> > #define     OSD_MODE_CS                             (1 << 15)
> >--
> >1.7.0.4
> >
> >_______________________________________________
> >Davinci-linux-open-source mailing list
> >Davinci-linux-open-source@linux.davincidsp.com
> >http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
> 
> _______________________________________________
> Davinci-linux-open-source mailing list
> Davinci-linux-open-source@linux.davincidsp.com
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
> 
_______________________________________________
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