aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/neofb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/neofb.c')
-rw-r--r--drivers/video/neofb.c95
1 files changed, 22 insertions, 73 deletions
diff --git a/drivers/video/neofb.c b/drivers/video/neofb.c
index b033e5a4dc86..669b8c196bba 100644
--- a/drivers/video/neofb.c
+++ b/drivers/video/neofb.c
@@ -479,7 +479,8 @@ static inline int neo2200_sync(struct fb_info *info)
479{ 479{
480 struct neofb_par *par = info->par; 480 struct neofb_par *par = info->par;
481 481
482 while (readl(&par->neo2200->bltStat) & 1); 482 while (readl(&par->neo2200->bltStat) & 1)
483 cpu_relax();
483 return 0; 484 return 0;
484} 485}
485 486
@@ -587,34 +588,14 @@ static int
587neofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) 588neofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
588{ 589{
589 struct neofb_par *par = info->par; 590 struct neofb_par *par = info->par;
590 unsigned int pixclock = var->pixclock;
591 struct xtimings timings;
592 int memlen, vramlen; 591 int memlen, vramlen;
593 int mode_ok = 0; 592 int mode_ok = 0;
594 593
595 DBG("neofb_check_var"); 594 DBG("neofb_check_var");
596 595
597 if (!pixclock) 596 if (PICOS2KHZ(var->pixclock) > par->maxClock)
598 pixclock = 10000; /* 10ns = 100MHz */
599 timings.pixclock = 1000000000 / pixclock;
600 if (timings.pixclock < 1)
601 timings.pixclock = 1;
602
603 if (timings.pixclock > par->maxClock)
604 return -EINVAL; 597 return -EINVAL;
605 598
606 timings.dblscan = var->vmode & FB_VMODE_DOUBLE;
607 timings.interlaced = var->vmode & FB_VMODE_INTERLACED;
608 timings.HDisplay = var->xres;
609 timings.HSyncStart = timings.HDisplay + var->right_margin;
610 timings.HSyncEnd = timings.HSyncStart + var->hsync_len;
611 timings.HTotal = timings.HSyncEnd + var->left_margin;
612 timings.VDisplay = var->yres;
613 timings.VSyncStart = timings.VDisplay + var->lower_margin;
614 timings.VSyncEnd = timings.VSyncStart + var->vsync_len;
615 timings.VTotal = timings.VSyncEnd + var->upper_margin;
616 timings.sync = var->sync;
617
618 /* Is the mode larger than the LCD panel? */ 599 /* Is the mode larger than the LCD panel? */
619 if (par->internal_display && 600 if (par->internal_display &&
620 ((var->xres > par->NeoPanelWidth) || 601 ((var->xres > par->NeoPanelWidth) ||
@@ -1923,9 +1904,6 @@ static int __devinit neo_init_hw(struct fb_info *info)
1923 int maxClock = 65000; 1904 int maxClock = 65000;
1924 int CursorMem = 1024; 1905 int CursorMem = 1024;
1925 int CursorOff = 0x100; 1906 int CursorOff = 0x100;
1926 int linearSize = 1024;
1927 int maxWidth = 1024;
1928 int maxHeight = 1024;
1929 1907
1930 DBG("neo_init_hw"); 1908 DBG("neo_init_hw");
1931 1909
@@ -1944,81 +1922,52 @@ static int __devinit neo_init_hw(struct fb_info *info)
1944 case FB_ACCEL_NEOMAGIC_NM2070: 1922 case FB_ACCEL_NEOMAGIC_NM2070:
1945 videoRam = 896; 1923 videoRam = 896;
1946 maxClock = 65000; 1924 maxClock = 65000;
1947 CursorMem = 2048;
1948 CursorOff = 0x100;
1949 linearSize = 1024;
1950 maxWidth = 1024;
1951 maxHeight = 1024;
1952 break; 1925 break;
1953 case FB_ACCEL_NEOMAGIC_NM2090: 1926 case FB_ACCEL_NEOMAGIC_NM2090:
1954 case FB_ACCEL_NEOMAGIC_NM2093: 1927 case FB_ACCEL_NEOMAGIC_NM2093:
1955 videoRam = 1152;
1956 maxClock = 80000;
1957 CursorMem = 2048;
1958 CursorOff = 0x100;
1959 linearSize = 2048;
1960 maxWidth = 1024;
1961 maxHeight = 1024;
1962 break;
1963 case FB_ACCEL_NEOMAGIC_NM2097: 1928 case FB_ACCEL_NEOMAGIC_NM2097:
1964 videoRam = 1152; 1929 videoRam = 1152;
1965 maxClock = 80000; 1930 maxClock = 80000;
1966 CursorMem = 1024;
1967 CursorOff = 0x100;
1968 linearSize = 2048;
1969 maxWidth = 1024;
1970 maxHeight = 1024;
1971 break; 1931 break;
1972 case FB_ACCEL_NEOMAGIC_NM2160: 1932 case FB_ACCEL_NEOMAGIC_NM2160:
1973 videoRam = 2048; 1933 videoRam = 2048;
1974 maxClock = 90000; 1934 maxClock = 90000;
1975 CursorMem = 1024;
1976 CursorOff = 0x100;
1977 linearSize = 2048;
1978 maxWidth = 1024;
1979 maxHeight = 1024;
1980 break; 1935 break;
1981 case FB_ACCEL_NEOMAGIC_NM2200: 1936 case FB_ACCEL_NEOMAGIC_NM2200:
1982 videoRam = 2560; 1937 videoRam = 2560;
1983 maxClock = 110000; 1938 maxClock = 110000;
1984 CursorMem = 1024;
1985 CursorOff = 0x1000;
1986 linearSize = 4096;
1987 maxWidth = 1280;
1988 maxHeight = 1024; /* ???? */
1989
1990 par->neo2200 = (Neo2200 __iomem *) par->mmio_vbase;
1991 break; 1939 break;
1992 case FB_ACCEL_NEOMAGIC_NM2230: 1940 case FB_ACCEL_NEOMAGIC_NM2230:
1993 videoRam = 3008; 1941 videoRam = 3008;
1994 maxClock = 110000; 1942 maxClock = 110000;
1995 CursorMem = 1024;
1996 CursorOff = 0x1000;
1997 linearSize = 4096;
1998 maxWidth = 1280;
1999 maxHeight = 1024; /* ???? */
2000
2001 par->neo2200 = (Neo2200 __iomem *) par->mmio_vbase;
2002 break; 1943 break;
2003 case FB_ACCEL_NEOMAGIC_NM2360: 1944 case FB_ACCEL_NEOMAGIC_NM2360:
2004 videoRam = 4096; 1945 videoRam = 4096;
2005 maxClock = 110000; 1946 maxClock = 110000;
2006 CursorMem = 1024;
2007 CursorOff = 0x1000;
2008 linearSize = 4096;
2009 maxWidth = 1280;
2010 maxHeight = 1024; /* ???? */
2011
2012 par->neo2200 = (Neo2200 __iomem *) par->mmio_vbase;
2013 break; 1947 break;
2014 case FB_ACCEL_NEOMAGIC_NM2380: 1948 case FB_ACCEL_NEOMAGIC_NM2380:
2015 videoRam = 6144; 1949 videoRam = 6144;
2016 maxClock = 110000; 1950 maxClock = 110000;
1951 break;
1952 }
1953 switch (info->fix.accel) {
1954 case FB_ACCEL_NEOMAGIC_NM2070:
1955 case FB_ACCEL_NEOMAGIC_NM2090:
1956 case FB_ACCEL_NEOMAGIC_NM2093:
1957 CursorMem = 2048;
1958 CursorOff = 0x100;
1959 break;
1960 case FB_ACCEL_NEOMAGIC_NM2097:
1961 case FB_ACCEL_NEOMAGIC_NM2160:
1962 CursorMem = 1024;
1963 CursorOff = 0x100;
1964 break;
1965 case FB_ACCEL_NEOMAGIC_NM2200:
1966 case FB_ACCEL_NEOMAGIC_NM2230:
1967 case FB_ACCEL_NEOMAGIC_NM2360:
1968 case FB_ACCEL_NEOMAGIC_NM2380:
2017 CursorMem = 1024; 1969 CursorMem = 1024;
2018 CursorOff = 0x1000; 1970 CursorOff = 0x1000;
2019 linearSize = 8192;
2020 maxWidth = 1280;
2021 maxHeight = 1024; /* ???? */
2022 1971
2023 par->neo2200 = (Neo2200 __iomem *) par->mmio_vbase; 1972 par->neo2200 = (Neo2200 __iomem *) par->mmio_vbase;
2024 break; 1973 break;
@@ -2032,7 +1981,7 @@ static int __devinit neo_init_hw(struct fb_info *info)
2032*/ 1981*/
2033 par->maxClock = maxClock; 1982 par->maxClock = maxClock;
2034 par->cursorOff = CursorOff; 1983 par->cursorOff = CursorOff;
2035 return ((videoRam * 1024)); 1984 return videoRam * 1024;
2036} 1985}
2037 1986
2038 1987