Krzysztof Helt [Tue, 8 May 2007 07:40:10 +0000 (00:40 -0700)]
skeletonfb: more corrections
More corrections to skeletonfb.c file:
- fixed types of more arguments
- removed returned values in void functions
- removed not existing fb_poll function
- fixed closing comment typo
- corrected misleading constant name ADDR
Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Acked-By: James Simmons <jsimmons@infradead.org> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
vgacon: disallow console operations when in KD_GRAPHICS mode
Reported by James Pearson as:
boot to run level 3
if not root, then make sure /dev/console is writeable
login and type:
setterm -blank 0
start X
type into an xterm:
while true; do echo "" > /dev/console; usleep 100000; done
while the above loop is running switch to the text console and back
again (Ctrl-Alt-F1 then Ctrl-Alt-F7)
... and the screen will be shifting (and wrapping) to the left.
This problem stems from continuously writing text to the system console (which
is in KD_TEXT mode) while the foreground console is in KD_GRAPHICS
mode. Somewhere along the way, console printing got confused and omitted the
KD_GRAPHICS/KD_TEXT test. Thus, vgacon attempted to scroll the screen of X,
which causes X to shift.
Fix by disallowing vgacon to touch the hardware when the vc is in KD_GRAPHICS
mode. A definitive fix entails a full audit of the console code.
Krzysztof Helt [Tue, 8 May 2007 07:39:57 +0000 (00:39 -0700)]
pm2fb: memclock setting corrections
This patch disables a memory clock setting if a board has been initialized by
BIOS. This allows using the memory clock set by manufacturer of the board.
This patch also sets default clock for 3dlabs Permedia 2V reference board's
clock to 75MHz (BIOS setting for EONtronic Permedia 2Vboard), because the
default 83MHz can be too high.
Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
- consolidate all return values into a single local variable
- ensure that return values are valid error codes
- fix fb_set_var() returning success when fb_check_caps() failed
Ville Syrjala [Tue, 8 May 2007 07:39:45 +0000 (00:39 -0700)]
atyfb: reorganize clock init
Reorganize atyfb clock init code so command line clock overrides are effective
for all chips. The old code would silently ignore some of the command line
clock overrides with some chips.
Ondrej Zajicek [Tue, 8 May 2007 07:39:41 +0000 (00:39 -0700)]
vga: vgastate fix
1) sets 'palette access disabled' during read from AR10.
This is usually documented as needed for access AR01-AR0F,
but on ARK Logic card it is needed for AR10 (otherwise read
returns some nonsence and save_vga_text() returns before do
anything).
2) do not restore AR10, because it was not changed during
3) remove modification of misc reg:
/* force graphics mode */
vga_w(state->vgabase, VGA_MIS_W, misc | 1);
as comment is misleading - LSB of misc reg does not set/reset graphics
mode, but set color/mono adresses of CRT and some other regs.
but these regs are not used during save/restore fonts.
(it worked even when (misc | 1) was replaced by (misc & ~1) ).
Signed-off-by: Ondrej Zajicek <santiago@crfreenet.org> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Implement fb_get_caps(). This will allow the driver to tell upper layer that
it can only support 256 8x16 bitmaps when in tileblitting mode
(var->bits_per_pixel == 0);
Check if the mode can properly display the screen. This will be needed by
drivers where the capability is not constant with each mode. The function
fb_set_var() will query fbcon the requirement, then it will query the driver
(via a new hook fb_get_caps()) its capability. If the driver's capability
cannot handle fbcon's requirement, then fb_set_var() will fail.
For example, if a particular driver supports 2 modes where:
mode1 = can only display 8x16 bitmaps
mode2 = can display any bitmap
then if current mode = mode2 and current font = 12x22
Dave Jones [Tue, 8 May 2007 07:39:35 +0000 (00:39 -0700)]
nvidiafb: prevent triggering of softlockup
If the chip locks up, we get into a long polling loop,
where the softlockup detector kicks in.
See https://bugzilla.redhat.com/bugzilla/attachment.cgi?id=151878
for an example.
[adaplas]
Chip lockup can occur at 3 points (flush, sync, and wait). Consolidate and
allow the driver to go to safe mode cleanly.
Signed-off-by: Dave Jones <davej@redhat.com> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Krzysztof Helt [Tue, 8 May 2007 07:39:33 +0000 (00:39 -0700)]
pm2fb: pixclock setting restriction
This patch adds restrictions to calculations of m, n and p factors
which sets the pixclock for the Permedia 2V. I found during tests
that synchronization is unstable if m (divisor) is bigger than
half of the n (numerator). The patch disallows such settings
combination.
Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fbdev: save the activate field before calling fb_check_var()
Some drivers may reset the var->activate field on fb_check_var(). This can
lead to undefined behavior. For example, doing fbset -a <option> with vga16fb
will only modify the active console instead of modifying all.
fbdev: add tile operation to get the maximum length of the map
Add a tile method, fb_get_tilemax(), that returns the maximum length of
the tile map (or font map). This is needed by s3fb which can only handle
256 characters.
s3fb: limit 8x16 rectangles when tileblitting is enabled
If tileblitting is enabled (text mode), the hardware can only accept 8x16
bitmaps. Advertise this to the upper layer. And to ensure that an appropriate
font is always available, select an 8x16 font in Kconfig.
vga16fb: restrict to blit rectangles with widths of multiples of 8 pixels
Advertise that vga16fb can only handle widths that are 8-pixel-multiple only
(software limitation). To ensure that a legal font is available, SELECT an
8x16 font in Kconfig.
fbcon: font setting should check limitation of driver
fbcon_set_font() will now check if the new font dimensions can be drawn by the
driver (by checking pixmap.blit_x and blit_y). Similarly, add 2 new
parameters to get_default_font(), font_w and font_h, to further aid in the
font selection process.
A few drivers are not capable of blitting rectangles of any dimension.
vga16fb can only blit 8-pixel wide rectangles, while s3fb (in tileblitting
mode) can only blit 8x16 rectangles. For example, loading a 12x22 font in
vga16fb will result in a corrupt display.
Advertise this limitation/capability in info->pixmap.blit_x and blit_y. These
fields are 32-bit arrays (font max is 32x32 only), ie, if bit 7 is set, then
width/height of 7+1 is supported.
fbdev: add fb_read/fb_write functions for framebuffers in system RAM
The functions fb_read() and fb_write in fbmem.c assume that the framebuffer
is in IO memory. However, we have 3 drivers (hecubafb, arcfb, and vfb)
where the framebuffer is allocated from system RAM (via vmalloc). Using
__raw_read/__raw_write (fb_readl/fb_writel) for these drivers is
illegal, especially in other platforms.
Create file read and write methods for these types of drivers. These are
named fb_sys_read() and fb_sys_write().
fbdev: pass struct fb_info to fb_read and fb_write
It is unnecessary to pass struct file to fb_read() and fb_write() in struct
fb_ops. For consistency with the other methods, pass struct fb_info instead.
Signed-off-by: Antonino Daplas <adaplas@gmail.com> Acked-by: Paul Mundt <lethal@linux-sh.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fbdev: add drawing functions for framebuffers in system RAM
The generic drawing functions (cfbimgblt, cfbcopyarea, cfbfillrect) assume
that the framebuffer is in IO memory. However, we have 3 drivers (hecubafb,
arcfb, and vfb) where the framebuffer is allocated from system RAM (via
vmalloc). Using _raw_read/write and family for these drivers (as used in
the cfb* functions) is illegal, especially in other platforms.
Create 3 new drawing functions, based almost entirely from the original
except that the framebuffer memory is assumed to be in system RAM.
These are named as sysimgblt, syscopyarea, and sysfillrect.
Fix a long-standing bug. The mask used to detect a 100Mhz or 133Mhz chipset
is incorrect. (The only side effect of this bug is that it will choose an
incorrect watermark).
fbcon: delay screen update when setting the mode of all consoles
If the current framebuffer console is rotated (rotate != 0), doing an
"fbset -a" will corrupt the current console. Fix by updating the current
console only after all non-visible consoles have been updated.
Allow the saving and restoration of VGA text mode. The state is saved on the
first open and restored on the last close. Because of the VGA registers are
linearly mapped to the MMIO space, MMIO access is used which is not limited to
X86 platforms nor to the primary display device.
An echo 0 > /sys/class/vtconsole/vtcon1/bind will convert the display from
graphics to text mode.
Allow the saving and restoration of VGA text mode. The state is saved on the
first open and restored on the last close. Because of the non-linear mapping
of the VGA registers to the MMIO space, this will be done only on X86
platforms where the device is the primary display.
An echo 0 > /sys/class/vtconsole/vtcon1/bind will convert the display from
graphics to text mode.
VIDEO: add spaces on either side of the case "..." operator
Following the programming advice laid down in the gcc manual, make
sure the case "..." operator has spaces on either side.
Signed-off-by: Robert P. J. Day <rpjday@mindspring.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Jean Delvare [Tue, 8 May 2007 07:38:20 +0000 (00:38 -0700)]
rivafb/nvidiafb: Various cleanups
Various cleanups to rivafb/nvidiafb's I2C code:
* Drop useless par->bus.
* Refactor I2C bus deletion code.
* Drop useless variable initialization.
* Remove unneeded include of <linux/i2c-id.h>.
* Simplify +1/-1.
* Add __devinit tags where possible.
[adaplas]
The varible initialization are not useless. However, rivafb must
check if i2c bus are created properly before reading the EDID
block.
Signed-off-by: Jean Delvare <khali@linux-fr.org> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fbdev: don't show logo if driver or fbcon are modular
It was always intended for the logo to be drawn only if both fbcon and the
driver that is mapped to it are both compiled statically. Currently, if fbcon
is loaded prior to the driver, the logo is not shown. Reverse the order, and
the code may attempt to draw the logo which is __initdata. By accident, this
bug is rarely seen because this method of loading the modules is not common
and secondly, a code in fb_prepare_logo() that checks the height of the logo
(now a random value) rarely succeeds.
Fix by drawing the logo only if both fbcon and the driver are statically
compiled.
Signed-off-by: Antonino Daplas <adaplas@gmail.com> Cc: Jean Delvare <khali@linux-fr.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
vt: expose system-wide UTF-8 default setting via sysfs
Create a variable, default_utf8, that defines the system-wide default UTF-8
setting. This variable can be altered via sysfs. If the variable is properly
set, this should mimimize breakage of UTF-8 encoded consoles when doing a
reset or echo -e '\033c' and of newly opened/allocated consoles.
This is based from patches by Jan Engelhardt and Paul LeoNerd Evans.
Signed-off-by: Antonino Daplas <adaplas@gmail.com> Cc: Jan Engelhardt <jengelh@linux01.gwdg.de> Cc: Paul LeoNerd Evans <leonerd@leonerd.org.uk> Cc: "H. Peter Anvin" <hpa@zytor.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
When the cursor and echo are disabled on the current console, pressing a
key will cause a black rectangle to be painted in the cursor's position.
Fix this by not touching the framebuffer in fbcon_cursor() when the
cursor is off.
Signed-off-by: Michal Januszewski <spock@gentoo.org> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Petr Vandrovec [Tue, 8 May 2007 07:38:02 +0000 (00:38 -0700)]
nvidiafb: Fix reversed DDC port
After I added some debugging printks I've found that code became a bit
confused because it believed that primary monitor is 1920x540, but later it
found in CRTC0's registers that panel size is 1920x1200 (Windows also agree
that 1920x1200 is primary monitor, and 1920x1080i secondary one).
When I applied attached patch then my monitor became as happy as it was
before I connected HDMI cable to secondary output.
Signed-off-by: Petr Vandrovec <vandrove@vc.cvut.cz> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Cc: Dave Airlie <airlied@linux.ie> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fb_do_show_logo() updates:
- Use width and height of the passed image instead of the global variable
fb_logo
- Explicitly pass the number of logos to draw
Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com> Acked-By: James Simmons <jsimmons@infradead.org> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Robert P. J. Day <rpjday@mindspring.com> Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
James Simmons [Tue, 8 May 2007 07:37:50 +0000 (00:37 -0700)]
tgafb accelerated code
Add accelerated panning and accelerated color and mono image drawing.
Please apply.
Signed-off-by: James Simmons <jsimmons@infradead.org> Acked-by: Maciej W. Rozycki <macro@linux-mips.org> (tested, too!) Cc: "Antonino A. Daplas" <adaplas@pol.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This is support for the TC variations of the TGA boards (properly known as
SFB+ or Smart Frame Buffer Plus boards). The 8-plane SFB+ board uses the
Bt459 RAMDAC (unlike its PCI TGA counterpart, which uses the Bt485), so
bits have been added to support this chip as well.
Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Cc: "Antonino A. Daplas" <adaplas@pol.net> Cc: James Simmons <jsimmons@infradead.org> Acked-by: Ralf Baechle <ralf@linux-mips.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Adrian Bunk [Tue, 8 May 2007 07:37:45 +0000 (00:37 -0700)]
drivers/video/hecubafb.c: make 4 functions static
This patch makes the following needlessly global functions static:
- hcb_wait_for_ack()
- hcb_wait_for_ack_clear()
- apollo_send_data()
- apollo_send_command()
Signed-off-by: Adrian Bunk <bunk@stusta.de> Cc: Jaya Kumar <jayakumar.lkml@gmail.com> Cc: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Paul Mundt [Tue, 8 May 2007 07:37:41 +0000 (00:37 -0700)]
fb: fsync() method for deferred I/O flush.
There are cases when we do not want to wait on the delay for automatically
updating the "real" framebuffer, this implements a simple ->fsync() hook
for explicitly flushing the deferred I/O work. The ->page_mkwrite()
handler will rearm the work queue normally.
Jaya Kumar [Tue, 8 May 2007 07:37:37 +0000 (00:37 -0700)]
fbdev: mm: Deferred IO support
This implements deferred IO support in fbdev. Deferred IO is a way to delay
and repurpose IO. This implementation is done using mm's page_mkwrite and
page_mkclean hooks in order to detect, delay and then rewrite IO. This
functionality is used by hecubafb.
[adaplas]
This is useful for graphics hardware with no directly addressable/mappable
framebuffer. Implementing this will allow the "framebuffer" to be accesible
from user space via mmap().
fbdev: ignore VESA modes if framebuffer is disabled
If the option vga=<VESA graphics mode> is added to the boot parameter, it will
activate graphics mode, but without any framebuffer support, the user is left
with an unusable display.
Change the behavior such that the user is instead prompted for another mode
(ala vga=ask).
NOTE: People can always use vbetool to set a graphics mode if this is really
desired, but the number of people doing this approaches zero.
Make nvidiafb use fb_ddc_read(). This patch was submitted before but was
reverted due to problems in a non-x86 platform. This includes a fix for that
where ddc reading is bypassed if there is no DDC bus (duh).