diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/neofb.c | 95 |
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 | |||
587 | neofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | 588 | neofb_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 | ||