aboutsummaryrefslogtreecommitdiff
path: root/drivers/video/c2p_core.h
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert@linux-m68k.org>2008-12-21 15:48:12 +0100
committerGeert Uytterhoeven <geert@linux-m68k.org>2009-01-12 20:56:31 +0100
commit96f47d6105203ab06c2004e26979dea153bce073 (patch)
tree39dce6e593746e55084a4b1c65cf66f66932a07c /drivers/video/c2p_core.h
parent2cd1de0a0ff1d3da08ff1f1437cf4a44deae6a00 (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.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/drivers/video/c2p_core.h b/drivers/video/c2p_core.h
index 3573cf723e4..e1035a865fb 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)
*/