neofb: drop the xtimings structure
Remove the xtimings structure which only stored some values to be used later (mostly once). Calculate and use these values in places they are needed. Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
1ca6b62f8c
commit
c6b044d6ba
2 changed files with 40 additions and 65 deletions
|
@ -259,15 +259,20 @@ static void neoCalcVCLK(const struct fb_info *info,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int vgaHWInit(const struct fb_var_screeninfo *var,
|
static int vgaHWInit(const struct fb_var_screeninfo *var,
|
||||||
const struct fb_info *info,
|
struct neofb_par *par)
|
||||||
struct neofb_par *par, struct xtimings *timings)
|
|
||||||
{
|
{
|
||||||
|
int hsync_end = var->xres + var->right_margin + var->hsync_len;
|
||||||
|
int htotal = (hsync_end + var->left_margin) >> 3;
|
||||||
|
int vsync_start = var->yres + var->lower_margin;
|
||||||
|
int vsync_end = vsync_start + var->vsync_len;
|
||||||
|
int vtotal = vsync_end + var->upper_margin;
|
||||||
|
|
||||||
par->MiscOutReg = 0x23;
|
par->MiscOutReg = 0x23;
|
||||||
|
|
||||||
if (!(timings->sync & FB_SYNC_HOR_HIGH_ACT))
|
if (!(var->sync & FB_SYNC_HOR_HIGH_ACT))
|
||||||
par->MiscOutReg |= 0x40;
|
par->MiscOutReg |= 0x40;
|
||||||
|
|
||||||
if (!(timings->sync & FB_SYNC_VERT_HIGH_ACT))
|
if (!(var->sync & FB_SYNC_VERT_HIGH_ACT))
|
||||||
par->MiscOutReg |= 0x80;
|
par->MiscOutReg |= 0x80;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -282,25 +287,25 @@ static int vgaHWInit(const struct fb_var_screeninfo *var,
|
||||||
/*
|
/*
|
||||||
* CRTC Controller
|
* CRTC Controller
|
||||||
*/
|
*/
|
||||||
par->CRTC[0] = (timings->HTotal >> 3) - 5;
|
par->CRTC[0] = htotal - 5;
|
||||||
par->CRTC[1] = (timings->HDisplay >> 3) - 1;
|
par->CRTC[1] = (var->xres >> 3) - 1;
|
||||||
par->CRTC[2] = (timings->HDisplay >> 3) - 1;
|
par->CRTC[2] = (var->xres >> 3) - 1;
|
||||||
par->CRTC[3] = (((timings->HTotal >> 3) - 1) & 0x1F) | 0x80;
|
par->CRTC[3] = ((htotal - 1) & 0x1F) | 0x80;
|
||||||
par->CRTC[4] = (timings->HSyncStart >> 3);
|
par->CRTC[4] = ((var->xres + var->right_margin) >> 3);
|
||||||
par->CRTC[5] = ((((timings->HTotal >> 3) - 1) & 0x20) << 2)
|
par->CRTC[5] = (((htotal - 1) & 0x20) << 2)
|
||||||
| (((timings->HSyncEnd >> 3)) & 0x1F);
|
| (((hsync_end >> 3)) & 0x1F);
|
||||||
par->CRTC[6] = (timings->VTotal - 2) & 0xFF;
|
par->CRTC[6] = (vtotal - 2) & 0xFF;
|
||||||
par->CRTC[7] = (((timings->VTotal - 2) & 0x100) >> 8)
|
par->CRTC[7] = (((vtotal - 2) & 0x100) >> 8)
|
||||||
| (((timings->VDisplay - 1) & 0x100) >> 7)
|
| (((var->yres - 1) & 0x100) >> 7)
|
||||||
| ((timings->VSyncStart & 0x100) >> 6)
|
| ((vsync_start & 0x100) >> 6)
|
||||||
| (((timings->VDisplay - 1) & 0x100) >> 5)
|
| (((var->yres - 1) & 0x100) >> 5)
|
||||||
| 0x10 | (((timings->VTotal - 2) & 0x200) >> 4)
|
| 0x10 | (((vtotal - 2) & 0x200) >> 4)
|
||||||
| (((timings->VDisplay - 1) & 0x200) >> 3)
|
| (((var->yres - 1) & 0x200) >> 3)
|
||||||
| ((timings->VSyncStart & 0x200) >> 2);
|
| ((vsync_start & 0x200) >> 2);
|
||||||
par->CRTC[8] = 0x00;
|
par->CRTC[8] = 0x00;
|
||||||
par->CRTC[9] = (((timings->VDisplay - 1) & 0x200) >> 4) | 0x40;
|
par->CRTC[9] = (((var->yres - 1) & 0x200) >> 4) | 0x40;
|
||||||
|
|
||||||
if (timings->dblscan)
|
if (var->vmode & FB_VMODE_DOUBLE)
|
||||||
par->CRTC[9] |= 0x80;
|
par->CRTC[9] |= 0x80;
|
||||||
|
|
||||||
par->CRTC[10] = 0x00;
|
par->CRTC[10] = 0x00;
|
||||||
|
@ -309,13 +314,13 @@ static int vgaHWInit(const struct fb_var_screeninfo *var,
|
||||||
par->CRTC[13] = 0x00;
|
par->CRTC[13] = 0x00;
|
||||||
par->CRTC[14] = 0x00;
|
par->CRTC[14] = 0x00;
|
||||||
par->CRTC[15] = 0x00;
|
par->CRTC[15] = 0x00;
|
||||||
par->CRTC[16] = timings->VSyncStart & 0xFF;
|
par->CRTC[16] = vsync_start & 0xFF;
|
||||||
par->CRTC[17] = (timings->VSyncEnd & 0x0F) | 0x20;
|
par->CRTC[17] = (vsync_end & 0x0F) | 0x20;
|
||||||
par->CRTC[18] = (timings->VDisplay - 1) & 0xFF;
|
par->CRTC[18] = (var->yres - 1) & 0xFF;
|
||||||
par->CRTC[19] = var->xres_virtual >> 4;
|
par->CRTC[19] = var->xres_virtual >> 4;
|
||||||
par->CRTC[20] = 0x00;
|
par->CRTC[20] = 0x00;
|
||||||
par->CRTC[21] = (timings->VDisplay - 1) & 0xFF;
|
par->CRTC[21] = (var->yres - 1) & 0xFF;
|
||||||
par->CRTC[22] = (timings->VTotal - 1) & 0xFF;
|
par->CRTC[22] = (vtotal - 1) & 0xFF;
|
||||||
par->CRTC[23] = 0xC3;
|
par->CRTC[23] = 0xC3;
|
||||||
par->CRTC[24] = 0xFF;
|
par->CRTC[24] = 0xFF;
|
||||||
|
|
||||||
|
@ -736,11 +741,11 @@ neofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||||
static int neofb_set_par(struct fb_info *info)
|
static int neofb_set_par(struct fb_info *info)
|
||||||
{
|
{
|
||||||
struct neofb_par *par = info->par;
|
struct neofb_par *par = info->par;
|
||||||
struct xtimings timings;
|
|
||||||
unsigned char temp;
|
unsigned char temp;
|
||||||
int i, clock_hi = 0;
|
int i, clock_hi = 0;
|
||||||
int lcd_stretch;
|
int lcd_stretch;
|
||||||
int hoffset, voffset;
|
int hoffset, voffset;
|
||||||
|
int vsync_start, vtotal;
|
||||||
|
|
||||||
DBG("neofb_set_par");
|
DBG("neofb_set_par");
|
||||||
|
|
||||||
|
@ -748,28 +753,15 @@ static int neofb_set_par(struct fb_info *info)
|
||||||
|
|
||||||
vgaHWProtect(1); /* Blank the screen */
|
vgaHWProtect(1); /* Blank the screen */
|
||||||
|
|
||||||
timings.dblscan = info->var.vmode & FB_VMODE_DOUBLE;
|
vsync_start = info->var.yres + info->var.lower_margin;
|
||||||
timings.interlaced = info->var.vmode & FB_VMODE_INTERLACED;
|
vtotal = vsync_start + info->var.vsync_len + info->var.upper_margin;
|
||||||
timings.HDisplay = info->var.xres;
|
|
||||||
timings.HSyncStart = timings.HDisplay + info->var.right_margin;
|
|
||||||
timings.HSyncEnd = timings.HSyncStart + info->var.hsync_len;
|
|
||||||
timings.HTotal = timings.HSyncEnd + info->var.left_margin;
|
|
||||||
timings.VDisplay = info->var.yres;
|
|
||||||
timings.VSyncStart = timings.VDisplay + info->var.lower_margin;
|
|
||||||
timings.VSyncEnd = timings.VSyncStart + info->var.vsync_len;
|
|
||||||
timings.VTotal = timings.VSyncEnd + info->var.upper_margin;
|
|
||||||
timings.sync = info->var.sync;
|
|
||||||
timings.pixclock = PICOS2KHZ(info->var.pixclock);
|
|
||||||
|
|
||||||
if (timings.pixclock < 1)
|
|
||||||
timings.pixclock = 1;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This will allocate the datastructure and initialize all of the
|
* This will allocate the datastructure and initialize all of the
|
||||||
* generic VGA registers.
|
* generic VGA registers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (vgaHWInit(&info->var, info, par, &timings))
|
if (vgaHWInit(&info->var, par))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -808,10 +800,10 @@ static int neofb_set_par(struct fb_info *info)
|
||||||
par->ExtCRTDispAddr = 0x10;
|
par->ExtCRTDispAddr = 0x10;
|
||||||
|
|
||||||
/* Vertical Extension */
|
/* Vertical Extension */
|
||||||
par->VerticalExt = (((timings.VTotal - 2) & 0x400) >> 10)
|
par->VerticalExt = (((vtotal - 2) & 0x400) >> 10)
|
||||||
| (((timings.VDisplay - 1) & 0x400) >> 9)
|
| (((info->var.yres - 1) & 0x400) >> 9)
|
||||||
| (((timings.VSyncStart) & 0x400) >> 8)
|
| (((vsync_start) & 0x400) >> 8)
|
||||||
| (((timings.VSyncStart) & 0x400) >> 7);
|
| (((vsync_start) & 0x400) >> 7);
|
||||||
|
|
||||||
/* Fast write bursts on unless disabled. */
|
/* Fast write bursts on unless disabled. */
|
||||||
if (par->pci_burst)
|
if (par->pci_burst)
|
||||||
|
@ -972,7 +964,7 @@ static int neofb_set_par(struct fb_info *info)
|
||||||
* Calculate the VCLK that most closely matches the requested dot
|
* Calculate the VCLK that most closely matches the requested dot
|
||||||
* clock.
|
* clock.
|
||||||
*/
|
*/
|
||||||
neoCalcVCLK(info, par, timings.pixclock);
|
neoCalcVCLK(info, par, PICOS2KHZ(info->var.pixclock));
|
||||||
|
|
||||||
/* Since we program the clocks ourselves, always use VCLK3. */
|
/* Since we program the clocks ourselves, always use VCLK3. */
|
||||||
par->MiscOutReg |= 0x0C;
|
par->MiscOutReg |= 0x0C;
|
||||||
|
|
|
@ -90,23 +90,6 @@
|
||||||
#define PCI_CHIP_NM2360 0x0006
|
#define PCI_CHIP_NM2360 0x0006
|
||||||
#define PCI_CHIP_NM2380 0x0016
|
#define PCI_CHIP_NM2380 0x0016
|
||||||
|
|
||||||
|
|
||||||
struct xtimings {
|
|
||||||
unsigned int pixclock;
|
|
||||||
unsigned int HDisplay;
|
|
||||||
unsigned int HSyncStart;
|
|
||||||
unsigned int HSyncEnd;
|
|
||||||
unsigned int HTotal;
|
|
||||||
unsigned int VDisplay;
|
|
||||||
unsigned int VSyncStart;
|
|
||||||
unsigned int VSyncEnd;
|
|
||||||
unsigned int VTotal;
|
|
||||||
unsigned int sync;
|
|
||||||
int dblscan;
|
|
||||||
int interlaced;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
|
||||||
typedef volatile struct {
|
typedef volatile struct {
|
||||||
|
|
Loading…
Reference in a new issue