diff options
author | Geert Uytterhoeven <geert@linux-m68k.org> | 2008-12-21 15:48:12 +0100 |
---|---|---|
committer | Geert Uytterhoeven <geert@linux-m68k.org> | 2009-01-12 20:56:31 +0100 |
commit | 96f47d6105203ab06c2004e26979dea153bce073 (patch) | |
tree | 39dce6e593746e55084a4b1c65cf66f66932a07c /drivers/video/c2p_core.h | |
parent | 2cd1de0a0ff1d3da08ff1f1437cf4a44deae6a00 (diff) |
fbdev: c2p/atafb - Add support for Atari interleaved bitplanes
The c2p() for normal bitplanes is not suitable for interleaved bitplanes with
2 bytes of interleave, causing a garbled penguin logo. Add c2p_iplan2().
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Diffstat (limited to 'drivers/video/c2p_core.h')
-rw-r--r-- | drivers/video/c2p_core.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/drivers/video/c2p_core.h b/drivers/video/c2p_core.h index 3573cf723e43..e1035a865fb9 100644 --- a/drivers/video/c2p_core.h +++ b/drivers/video/c2p_core.h @@ -96,6 +96,53 @@ static inline void transp8(u32 d[], unsigned int n, unsigned int m) /* + * Transpose operations on 4 32-bit words + */ + +static inline void transp4(u32 d[], unsigned int n, unsigned int m) +{ + u32 mask = get_mask(n); + + switch (m) { + case 1: + /* First n x 1 block */ + _transp(d, 0, 1, n, mask); + /* Second n x 1 block */ + _transp(d, 2, 3, n, mask); + return; + + case 2: + /* Single n x 2 block */ + _transp(d, 0, 2, n, mask); + _transp(d, 1, 3, n, mask); + return; + } + + c2p_unsupported(); +} + + + /* + * Transpose operations on 4 32-bit words (reverse order) + */ + +static inline void transp4x(u32 d[], unsigned int n, unsigned int m) +{ + u32 mask = get_mask(n); + + switch (m) { + case 2: + /* Single n x 2 block */ + _transp(d, 2, 0, n, mask); + _transp(d, 3, 1, n, mask); + return; + } + + c2p_unsupported(); +} + + + /* * Compose two values, using a bitmask as decision value * This is equivalent to (a & mask) | (b & ~mask) */ |