aboutsummaryrefslogtreecommitdiffstats
path: root/drv_T6963.c
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2004-12-22 20:24:02 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2004-12-22 20:24:02 +0000
commitf10ba1a7ffe9c280fd4a3654e8ea972e280a1953 (patch)
treee9e352c93a9357e54bb236a96830f298b7d0a04e /drv_T6963.c
parent1c253024e7b6a8944609260ba223fde7147975ea (diff)
downloadlcd4linux-f10ba1a7ffe9c280fd4a3654e8ea972e280a1953.tar.gz
[lcd4linux @ 2004-12-22 20:24:00 by reinelt]
T6963 fix for displays > 8 rows git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@498 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'drv_T6963.c')
-rw-r--r--drv_T6963.c60
1 files changed, 44 insertions, 16 deletions
diff --git a/drv_T6963.c b/drv_T6963.c
index 06601be..3776d0d 100644
--- a/drv_T6963.c
+++ b/drv_T6963.c
@@ -1,4 +1,4 @@
-/* $Id: drv_T6963.c,v 1.12 2004/06/26 12:04:59 reinelt Exp $
+/* $Id: drv_T6963.c,v 1.13 2004/12/22 20:24:02 reinelt Exp $
*
* new style driver for T6963-based displays
*
@@ -23,6 +23,9 @@
*
*
* $Log: drv_T6963.c,v $
+ * Revision 1.13 2004/12/22 20:24:02 reinelt
+ * T6963 fix for displays > 8 rows
+ *
* Revision 1.12 2004/06/26 12:04:59 reinelt
*
* uh-oh... the last CVS log message messed up things a lot...
@@ -354,36 +357,61 @@ static void drv_T6_blit(const int row, const int col, const int height, const in
int i, j, e, m;
int r, c;
- for (r=row; r<row+height; r++) {
- for (c=col; c<col+width; c++) {
- unsigned char mask = 1<<(XRES-1-c%XRES);
- if (drv_generic_graphic_FB[r*LCOLS+c]) {
+ for (r = row; r < row + height; r++) {
+ for (c = col; c < col + width; c++) {
+ unsigned char mask = 1 << (XRES - 1 - c % XRES);
+ if (drv_generic_graphic_FB[r * LCOLS + c]) {
/* set bit */
- Buffer1[(r*DCOLS+c)/XRES] |= mask;
+ Buffer1[(r * DCOLS + c) / XRES] |= mask;
} else {
/* clear bit */
- Buffer1[(r*DCOLS+c)/XRES] &= ~mask;
+ Buffer1[(r * DCOLS + c) / XRES] &= ~mask;
}
}
}
+ /* upper half */
+
/* max address */
- m=((row+height-1)*DCOLS+col+width)/XRES;
+ if (row + height - 1 < 64) {
+ m = ((row + height - 1) * DCOLS + col + width) / XRES;
+ } else {
+ m = ( 64 * DCOLS + col + width) / XRES;
+ }
+
+ for (i = (row * DCOLS + col) / XRES; i <= m; i++) {
+ if (Buffer1[i] == Buffer2[i]) continue;
+ for (j = i, e = 0; i <= m; i++) {
+ if (Buffer1[i] == Buffer2[i]) {
+ if (++e > 4) break;
+ } else {
+ e = 0;
+ }
+ }
+ memcpy (Buffer2 + j, Buffer1 + j, i - j - e + 1);
+ drv_T6_copy (j, Buffer1 + j, i - j - e + 1);
+ }
- for (i=(row*DCOLS+col)/XRES; i<=m; i++) {
- if (Buffer1[i]==Buffer2[i]) continue;
- for (j=i, e=0; i<=m; i++) {
- if (Buffer1[i]==Buffer2[i]) {
- if (++e>4) break;
+ /* lower half */
+
+ /* max address */
+ m = ((row + height - 1) * DCOLS + col + width) / XRES;
+
+ for (i = (64 * DCOLS + col) / XRES; i <= m; i++) {
+ if (Buffer1[i] == Buffer2[i]) continue;
+ for (j = i, e = 0; i <= m; i++) {
+ if (Buffer1[i] == Buffer2[i]) {
+ if (++e > 4) break;
} else {
- e=0;
+ e = 0;
}
}
- memcpy (Buffer2+j, Buffer1+j, i-j-e+1);
- drv_T6_copy (j, Buffer1+j, i-j-e+1);
+ memcpy (Buffer2 + j, Buffer1 + j, i - j - e + 1);
+ drv_T6_copy (j, Buffer1 + j, i - j - e + 1);
}
}
+
static int drv_T6_start (const char *section)
{
char *model, *s;