Hi,
we are working on the Kevin Hilman
2.6.34 kernel version.
This is the driver we found over there and we had to drive a parallel RGB LCD which was not supported.

We understood we had to work on this branch (see for instance: http://linux.davincidsp.com/pipermail/davinci-linux-open-source/2010-June/019137.html).

For what concerns Arago overlay development, we are on master branch on
commit 87c7685f95309bf5d381ff6b9d3f182601815c99
and kernel is 2.6.31.

Can you please give us informations about the development of
TI India about Arago fb and v4l2 drivers.
Where can we find a git repository?
When it will be integrated in opensource (Kevin Hilman) git tree?
Do you also know something about
video codec support  (DVSDK) stable availability for kernel 2.6.34?

Thank you

Davide Bonfanti & Raffaele Recalcati
Tel.: +39 031-653357
Indirizzo: via Manara, 4 22036 - Erba (CO)
E-mail: davide.bonfa...@bticino.it
Web: www.bticino.it
Bticino
Legrand
Zucchini
Cablofil
Ortronics

Consider the environment
Please don't print this e-mail unless you really need to.

-----davinci-linux-open-source-bounces+davide.bonfanti=bticino...@linux.davincidsp.com ha scritto: -----

Per: Raffaele Recalcati <lamiapost...@gmail.com>, "davinci-linux-open-source@linux.davincidsp.com" <davinci-linux-open-source@linux.davincidsp.com>
Da: "Karicheri, Muralidharan" <m-kariche...@ti.com>
Inviato da: davinci-linux-open-source-bounces+davide.bonfanti=bticino...@linux.davincidsp.com
Data: 14/06/2010 18.38
Oggetto: RE: [PATCH 14/14] davinci: video: davincifb Parallel RBG LCD management

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?

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

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

Ce message, ainsi que tous les fichiers joints à ce message, peuvent contenir des informations sensibles et/ ou confidentielles ne devant pas être divulguées. Si vous n'êtes pas le destinataire de ce message (ou que vous recevez ce message par erreur), nous vous remercions de le notifier immédiatement à son expéditeur, et de détruire ce message. Toute copie, divulgation, modification, utilisation ou diffusion, non autorisée, directe ou indirecte, de tout ou partie de ce message, est strictement interdite. This e-mail, and any document attached hereby, may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorized, direct or indirect, copying, disclosure, distribution or other use of the material or parts thereof is strictly forbidden.
_______________________________________________
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