SH7760/SH7763 integrated LCDC Framebuffer driver
================================================

0. Overview
-----------
The SH7760/SH7763 have an integrated LCD Display controller (LCDC) which
supports (in theory) resolutions ranging from 1x1 to 1024x1024,
with color depths ranging from 1 to 16 bits, on STN, DSTN and TFT Panels.

Caveats:
* Framebuffer memory must be a large chunk allocated at the top
  of Area3 (HW requirement). Because of this requirement you should NOT
  make the driver a module since at runtime it may become impossible to
  get a large enough contiguous chunk of memory.

* The driver does not support changing resolution while loaded
  (displays aren't hotpluggable anyway)

* Heavy flickering may be observed
  a) if you're using 15/16bit color modes at >= 640x480 px resolutions,
  b) during PCMCIA (or any other slow bus) activity.

* Rotation works only 90degress clockwise, and only if horizontal
  resolution is <= 320 pixels.

files:   drivers/video/sh7760fb.c
        include/asm-sh/sh7760fb.h
        Documentation/fb/sh7760fb.txt

1. Platform setup
-----------------
SH7760:
 Video data is fetched via the DMABRG DMA engine, so you have to
 configure the SH DMAC for DMABRG mode (write 0x94808080 to the
 DMARSRA register somewhere at boot).

 PFC registers PCCR and PCDR must be set to peripheral mode.
 (write zeros to both).

The driver does NOT do the above for you since board setup is, well, job
of the board setup code.

2. Panel definitions
--------------------
The LCDC must explicitly be told about the type of LCD panel
attached.  Data must be wrapped in a "struct sh7760fb_platdata" and
passed to the driver as platform_data.

Suggest you take a closer look at the SH7760 Manual, Section 30.
(http://documentation.renesas.com/eng/products/mpumcu/e602291_sh7760.pdf)

The following code illustrates what needs to be done to
get the framebuffer working on a 640x480 TFT:

====================== cut here ======================================

#include <linux/fb.h>
#include <asm/sh7760fb.h>

/*
 * NEC NL6440bc26-01 640x480 TFT
 * dotclock 25175 kHz
 * Xres                640     Yres            480
 * Htotal      800     Vtotal          525
 * HsynStart   656     VsynStart       490
 * HsynLenn    30      VsynLenn        2
 *
 * The linux framebuffer layer does not use the syncstart/synclen
 * values but right/left/upper/lower margin values. The comments
 * for the x_margin explain how to calculate those from given
 * panel sync timings.
 */
static struct fb_videomode nl6448bc26 = {
       .name           = "NL6448BC26",
       .refresh        = 60,
       .xres           = 640,
       .yres           = 480,
       .pixclock       = 39683,        /* in picoseconds! */
       .hsync_len      = 30,
       .vsync_len      = 2,
       .left_margin    = 114,  /* HTOT - (HSYNSLEN + HSYNSTART) */
       .right_margin   = 16,   /* HSYNSTART - XRES */
       .upper_margin   = 33,   /* VTOT - (VSYNLEN + VSYNSTART) */
       .lower_margin   = 10,   /* VSYNSTART - YRES */
       .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
       .vmode          = FB_VMODE_NONINTERLACED,
       .flag           = 0,
};

static struct sh7760fb_platdata sh7760fb_nl6448 = {
       .def_mode       = &nl6448bc26,
       .ldmtr          = LDMTR_TFT_COLOR_16,   /* 16bit TFT panel */
       .lddfr          = LDDFR_8BPP,           /* we want 8bit output */
       .ldpmmr         = 0x0070,
       .ldpspr         = 0x0500,
       .ldaclnr        = 0,
       .ldickr         = LDICKR_CLKSRC(LCDC_CLKSRC_EXTERNAL) |
                         LDICKR_CLKDIV(1),
       .rotate         = 0,
       .novsync        = 1,
       .blank          = NULL,
};

/* SH7760:
 * 0xFE300800: 256 * 4byte xRGB palette ram
 * 0xFE300C00: 42 bytes ctrl registers
 */
static struct resource sh7760_lcdc_res[] = {
       [0] = {
               .start  = 0xFE300800,
               .end    = 0xFE300CFF,
               .flags  = IORESOURCE_MEM,
       },
       [1] = {
               .start  = 65,
               .end    = 65,
               .flags  = IORESOURCE_IRQ,
       },
};

static struct platform_device sh7760_lcdc_dev = {
       .dev    = {
               .platform_data = &sh7760fb_nl6448,
       },
       .name           = "sh7760-lcdc",
       .id             = -1,
       .resource       = sh7760_lcdc_res,
       .num_resources  = ARRAY_SIZE(sh7760_lcdc_res),
};

====================== cut here ======================================
