Hi, Greg K-H Sorry to disturb you, Teddy just sent a bug fix to me after I sending this patch out, I will test the bugfix, if it works, will send it out instead of this patch. Thanks! Regards, Wu Zhangjin On Wed, 2010-01-06 at 16:33 +0800, Wu Zhangjin wrote: > From: Wu Zhangjin <wuzhangjin@xxxxxxxxx> > > When scrolling the screen on the console with the 2D acceleration > support, the whole system may hang. for example, when copying some files > from another machine to YeeLoong netbook with the sm7xx video driver via > scp and when the screen output is enabled, the system may hang. > > Before the bug is fixed, remove the 2D acceleration! > > Signed-off-by: Wu Zhangjin <wuzhangjin@xxxxxxxxx> > --- > drivers/staging/sm7xx/Kconfig | 7 - > drivers/staging/sm7xx/TODO | 1 + > drivers/staging/sm7xx/smtc2d.c | 979 ---------------------------------------- > drivers/staging/sm7xx/smtc2d.h | 530 ---------------------- > drivers/staging/sm7xx/smtcfb.c | 131 +----- > 5 files changed, 13 insertions(+), 1635 deletions(-) > delete mode 100644 drivers/staging/sm7xx/smtc2d.c > delete mode 100644 drivers/staging/sm7xx/smtc2d.h > > diff --git a/drivers/staging/sm7xx/Kconfig b/drivers/staging/sm7xx/Kconfig > index 204dbfc..315102c 100644 > --- a/drivers/staging/sm7xx/Kconfig > +++ b/drivers/staging/sm7xx/Kconfig > @@ -6,10 +6,3 @@ config FB_SM7XX > select FB_CFB_IMAGEBLIT > help > Frame Buffer driver for the Silicon Motion SM7XX serial graphic card. > - > -config FB_SM7XX_ACCEL > - bool "Siliconmotion Acceleration functions (EXPERIMENTAL)" > - depends on FB_SM7XX && EXPERIMENTAL > - help > - This will compile the Trident frame buffer device with > - acceleration functions. > diff --git a/drivers/staging/sm7xx/TODO b/drivers/staging/sm7xx/TODO > index 1f61f5e..a66d9e4 100644 > --- a/drivers/staging/sm7xx/TODO > +++ b/drivers/staging/sm7xx/TODO > @@ -1,5 +1,6 @@ > TODO: > - Dual head support > +- 2D acceleration support > - use kernel coding style > - checkpatch.pl clean > - refine the code and remove unused code > diff --git a/drivers/staging/sm7xx/smtc2d.c b/drivers/staging/sm7xx/smtc2d.c > deleted file mode 100644 > index 2fff0a0..0000000 > --- a/drivers/staging/sm7xx/smtc2d.c > +++ /dev/null > @@ -1,979 +0,0 @@ > -/* > - * Silicon Motion SM7XX 2D drawing engine functions. > - * > - * Copyright (C) 2006 Silicon Motion Technology Corp. > - * Author: Boyod boyod.yang@xxxxxxxxxxxxxxxxxxxx > - * > - * Copyright (C) 2009 Lemote, Inc. > - * Author: Wu Zhangjin, wuzhangjin@xxxxxxxxx > - * > - * This file is subject to the terms and conditions of the GNU General Public > - * License. See the file COPYING in the main directory of this archive for > - * more details. > - * > - * Version 0.10.26192.21.01 > - * - Add PowerPC support > - * - Add 2D support for Lynx - > - * Verified on 2.6.19.2 > - * Boyod.yang <boyod.yang@xxxxxxxxxxxxxxxxxxxx> > - */ > - > -unsigned char smtc_de_busy; > - > -void SMTC_write2Dreg(unsigned long nOffset, unsigned long nData) > -{ > - writel(nData, smtc_2DBaseAddress + nOffset); > -} > - > -unsigned long SMTC_read2Dreg(unsigned long nOffset) > -{ > - return readl(smtc_2DBaseAddress + nOffset); > -} > - > -void SMTC_write2Ddataport(unsigned long nOffset, unsigned long nData) > -{ > - writel(nData, smtc_2Ddataport + nOffset); > -} > - > -/********************************************************************** > - * > - * deInit > - * > - * Purpose > - * Drawing engine initialization. > - * > - **********************************************************************/ > - > -void deInit(unsigned int nModeWidth, unsigned int nModeHeight, > - unsigned int bpp) > -{ > - /* Get current power configuration. */ > - unsigned char clock; > - clock = smtc_seqr(0x21); > - > - /* initialize global 'mutex lock' variable */ > - smtc_de_busy = 0; > - > - /* Enable 2D Drawing Engine */ > - smtc_seqw(0x21, clock & 0xF8); > - > - SMTC_write2Dreg(DE_CLIP_TL, > - FIELD_VALUE(0, DE_CLIP_TL, TOP, 0) | > - FIELD_SET(0, DE_CLIP_TL, STATUS, DISABLE) | > - FIELD_SET(0, DE_CLIP_TL, INHIBIT, OUTSIDE) | > - FIELD_VALUE(0, DE_CLIP_TL, LEFT, 0)); > - > - if (bpp >= 24) { > - SMTC_write2Dreg(DE_PITCH, > - FIELD_VALUE(0, DE_PITCH, DESTINATION, > - nModeWidth * 3) | FIELD_VALUE(0, > - DE_PITCH, > - SOURCE, > - nModeWidth > - * 3)); > - } else { > - SMTC_write2Dreg(DE_PITCH, > - FIELD_VALUE(0, DE_PITCH, DESTINATION, > - nModeWidth) | FIELD_VALUE(0, > - DE_PITCH, > - SOURCE, > - nModeWidth)); > - } > - > - SMTC_write2Dreg(DE_WINDOW_WIDTH, > - FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, > - nModeWidth) | FIELD_VALUE(0, > - DE_WINDOW_WIDTH, > - SOURCE, > - nModeWidth)); > - > - switch (bpp) { > - case 8: > - SMTC_write2Dreg(DE_STRETCH_FORMAT, > - FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, > - NORMAL) | FIELD_VALUE(0, > - DE_STRETCH_FORMAT, > - PATTERN_Y, > - 0) | > - FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, > - 0) | FIELD_SET(0, DE_STRETCH_FORMAT, > - PIXEL_FORMAT, > - 8) | FIELD_SET(0, > - DE_STRETCH_FORMAT, > - ADDRESSING, > - XY) | > - FIELD_VALUE(0, DE_STRETCH_FORMAT, > - SOURCE_HEIGHT, 3)); > - break; > - case 24: > - SMTC_write2Dreg(DE_STRETCH_FORMAT, > - FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, > - NORMAL) | FIELD_VALUE(0, > - DE_STRETCH_FORMAT, > - PATTERN_Y, > - 0) | > - FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, > - 0) | FIELD_SET(0, DE_STRETCH_FORMAT, > - PIXEL_FORMAT, > - 24) | FIELD_SET(0, > - DE_STRETCH_FORMAT, > - ADDRESSING, > - XY) | > - FIELD_VALUE(0, DE_STRETCH_FORMAT, > - SOURCE_HEIGHT, 3)); > - break; > - case 16: > - default: > - SMTC_write2Dreg(DE_STRETCH_FORMAT, > - FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, > - NORMAL) | FIELD_VALUE(0, > - DE_STRETCH_FORMAT, > - PATTERN_Y, > - 0) | > - FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, > - 0) | FIELD_SET(0, DE_STRETCH_FORMAT, > - PIXEL_FORMAT, > - 16) | FIELD_SET(0, > - DE_STRETCH_FORMAT, > - ADDRESSING, > - XY) | > - FIELD_VALUE(0, DE_STRETCH_FORMAT, > - SOURCE_HEIGHT, 3)); > - break; > - } > - > - SMTC_write2Dreg(DE_MASKS, > - FIELD_VALUE(0, DE_MASKS, BYTE_MASK, 0xFFFF) | > - FIELD_VALUE(0, DE_MASKS, BIT_MASK, 0xFFFF)); > - SMTC_write2Dreg(DE_COLOR_COMPARE_MASK, > - FIELD_VALUE(0, DE_COLOR_COMPARE_MASK, MASKS, \ > - 0xFFFFFF)); > - SMTC_write2Dreg(DE_COLOR_COMPARE, > - FIELD_VALUE(0, DE_COLOR_COMPARE, COLOR, 0xFFFFFF)); > -} > - > -void deVerticalLine(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long nX, > - unsigned long nY, > - unsigned long dst_height, unsigned long nColor) > -{ > - deWaitForNotBusy(); > - > - SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, > - FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, > - dst_base)); > - > - SMTC_write2Dreg(DE_PITCH, > - FIELD_VALUE(0, DE_PITCH, DESTINATION, dst_pitch) | > - FIELD_VALUE(0, DE_PITCH, SOURCE, dst_pitch)); > - > - SMTC_write2Dreg(DE_WINDOW_WIDTH, > - FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, DE_WINDOW_WIDTH, > - SOURCE, > - dst_pitch)); > - > - SMTC_write2Dreg(DE_FOREGROUND, > - FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); > - > - SMTC_write2Dreg(DE_DESTINATION, > - FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_DESTINATION, X, nX) | > - FIELD_VALUE(0, DE_DESTINATION, Y, nY)); > - > - SMTC_write2Dreg(DE_DIMENSION, > - FIELD_VALUE(0, DE_DIMENSION, X, 1) | > - FIELD_VALUE(0, DE_DIMENSION, Y_ET, dst_height)); > - > - SMTC_write2Dreg(DE_CONTROL, > - FIELD_SET(0, DE_CONTROL, STATUS, START) | > - FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT) | > - FIELD_SET(0, DE_CONTROL, MAJOR, Y) | > - FIELD_SET(0, DE_CONTROL, STEP_X, NEGATIVE) | > - FIELD_SET(0, DE_CONTROL, STEP_Y, POSITIVE) | > - FIELD_SET(0, DE_CONTROL, LAST_PIXEL, OFF) | > - FIELD_SET(0, DE_CONTROL, COMMAND, SHORT_STROKE) | > - FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | > - FIELD_VALUE(0, DE_CONTROL, ROP, 0x0C)); > - > - smtc_de_busy = 1; > -} > - > -void deHorizontalLine(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long nX, > - unsigned long nY, > - unsigned long dst_width, unsigned long nColor) > -{ > - deWaitForNotBusy(); > - > - SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, > - FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, > - dst_base)); > - > - SMTC_write2Dreg(DE_PITCH, > - FIELD_VALUE(0, DE_PITCH, DESTINATION, dst_pitch) | > - FIELD_VALUE(0, DE_PITCH, SOURCE, dst_pitch)); > - > - SMTC_write2Dreg(DE_WINDOW_WIDTH, > - FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, DE_WINDOW_WIDTH, > - SOURCE, > - dst_pitch)); > - SMTC_write2Dreg(DE_FOREGROUND, > - FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); > - SMTC_write2Dreg(DE_DESTINATION, > - FIELD_SET(0, DE_DESTINATION, WRAP, > - DISABLE) | FIELD_VALUE(0, DE_DESTINATION, X, > - nX) | FIELD_VALUE(0, > - DE_DESTINATION, > - Y, > - nY)); > - SMTC_write2Dreg(DE_DIMENSION, > - FIELD_VALUE(0, DE_DIMENSION, X, > - dst_width) | FIELD_VALUE(0, DE_DIMENSION, > - Y_ET, 1)); > - SMTC_write2Dreg(DE_CONTROL, > - FIELD_SET(0, DE_CONTROL, STATUS, START) | FIELD_SET(0, > - DE_CONTROL, > - DIRECTION, > - RIGHT_TO_LEFT) > - | FIELD_SET(0, DE_CONTROL, MAJOR, X) | FIELD_SET(0, > - DE_CONTROL, > - STEP_X, > - POSITIVE) > - | FIELD_SET(0, DE_CONTROL, STEP_Y, > - NEGATIVE) | FIELD_SET(0, DE_CONTROL, > - LAST_PIXEL, > - OFF) | FIELD_SET(0, > - DE_CONTROL, > - COMMAND, > - SHORT_STROKE) > - | FIELD_SET(0, DE_CONTROL, ROP_SELECT, > - ROP2) | FIELD_VALUE(0, DE_CONTROL, ROP, > - 0x0C)); > - > - smtc_de_busy = 1; > -} > - > -void deLine(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long nX1, > - unsigned long nY1, > - unsigned long nX2, unsigned long nY2, unsigned long nColor) > -{ > - unsigned long nCommand = > - FIELD_SET(0, DE_CONTROL, STATUS, START) | > - FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT) | > - FIELD_SET(0, DE_CONTROL, MAJOR, X) | > - FIELD_SET(0, DE_CONTROL, STEP_X, POSITIVE) | > - FIELD_SET(0, DE_CONTROL, STEP_Y, POSITIVE) | > - FIELD_SET(0, DE_CONTROL, LAST_PIXEL, OFF) | > - FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | > - FIELD_VALUE(0, DE_CONTROL, ROP, 0x0C); > - unsigned long DeltaX; > - unsigned long DeltaY; > - > - /* Calculate delta X */ > - if (nX1 <= nX2) > - DeltaX = nX2 - nX1; > - else { > - DeltaX = nX1 - nX2; > - nCommand = FIELD_SET(nCommand, DE_CONTROL, STEP_X, NEGATIVE); > - } > - > - /* Calculate delta Y */ > - if (nY1 <= nY2) > - DeltaY = nY2 - nY1; > - else { > - DeltaY = nY1 - nY2; > - nCommand = FIELD_SET(nCommand, DE_CONTROL, STEP_Y, NEGATIVE); > - } > - > - /* Determine the major axis */ > - if (DeltaX < DeltaY) > - nCommand = FIELD_SET(nCommand, DE_CONTROL, MAJOR, Y); > - > - /* Vertical line? */ > - if (nX1 == nX2) > - deVerticalLine(dst_base, dst_pitch, nX1, nY1, DeltaY, nColor); > - > - /* Horizontal line? */ > - else if (nY1 == nY2) > - deHorizontalLine(dst_base, dst_pitch, nX1, nY1, \ > - DeltaX, nColor); > - > - /* Diagonal line? */ > - else if (DeltaX == DeltaY) { > - deWaitForNotBusy(); > - > - SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, > - FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, > - ADDRESS, dst_base)); > - > - SMTC_write2Dreg(DE_PITCH, > - FIELD_VALUE(0, DE_PITCH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, > - DE_PITCH, > - SOURCE, > - dst_pitch)); > - > - SMTC_write2Dreg(DE_WINDOW_WIDTH, > - FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, > - DE_WINDOW_WIDTH, > - SOURCE, > - dst_pitch)); > - > - SMTC_write2Dreg(DE_FOREGROUND, > - FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); > - > - SMTC_write2Dreg(DE_DESTINATION, > - FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_DESTINATION, X, 1) | > - FIELD_VALUE(0, DE_DESTINATION, Y, nY1)); > - > - SMTC_write2Dreg(DE_DIMENSION, > - FIELD_VALUE(0, DE_DIMENSION, X, 1) | > - FIELD_VALUE(0, DE_DIMENSION, Y_ET, DeltaX)); > - > - SMTC_write2Dreg(DE_CONTROL, > - FIELD_SET(nCommand, DE_CONTROL, COMMAND, > - SHORT_STROKE)); > - } > - > - /* Generic line */ > - else { > - unsigned int k1, k2, et, w; > - if (DeltaX < DeltaY) { > - k1 = 2 * DeltaX; > - et = k1 - DeltaY; > - k2 = et - DeltaY; > - w = DeltaY + 1; > - } else { > - k1 = 2 * DeltaY; > - et = k1 - DeltaX; > - k2 = et - DeltaX; > - w = DeltaX + 1; > - } > - > - deWaitForNotBusy(); > - > - SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, > - FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, > - ADDRESS, dst_base)); > - > - SMTC_write2Dreg(DE_PITCH, > - FIELD_VALUE(0, DE_PITCH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, > - DE_PITCH, > - SOURCE, > - dst_pitch)); > - > - SMTC_write2Dreg(DE_WINDOW_WIDTH, > - FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, > - DE_WINDOW_WIDTH, > - SOURCE, > - dst_pitch)); > - > - SMTC_write2Dreg(DE_FOREGROUND, > - FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); > - > - SMTC_write2Dreg(DE_SOURCE, > - FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_SOURCE, X_K1, k1) | > - FIELD_VALUE(0, DE_SOURCE, Y_K2, k2)); > - > - SMTC_write2Dreg(DE_DESTINATION, > - FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_DESTINATION, X, nX1) | > - FIELD_VALUE(0, DE_DESTINATION, Y, nY1)); > - > - SMTC_write2Dreg(DE_DIMENSION, > - FIELD_VALUE(0, DE_DIMENSION, X, w) | > - FIELD_VALUE(0, DE_DIMENSION, Y_ET, et)); > - > - SMTC_write2Dreg(DE_CONTROL, > - FIELD_SET(nCommand, DE_CONTROL, COMMAND, > - LINE_DRAW)); > - } > - > - smtc_de_busy = 1; > -} > - > -void deFillRect(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long dst_X, > - unsigned long dst_Y, > - unsigned long dst_width, > - unsigned long dst_height, unsigned long nColor) > -{ > - deWaitForNotBusy(); > - > - SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, > - FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, > - dst_base)); > - > - if (dst_pitch) { > - SMTC_write2Dreg(DE_PITCH, > - FIELD_VALUE(0, DE_PITCH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, > - DE_PITCH, > - SOURCE, > - dst_pitch)); > - > - SMTC_write2Dreg(DE_WINDOW_WIDTH, > - FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, > - DE_WINDOW_WIDTH, > - SOURCE, > - dst_pitch)); > - } > - > - SMTC_write2Dreg(DE_FOREGROUND, > - FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); > - > - SMTC_write2Dreg(DE_DESTINATION, > - FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_DESTINATION, X, dst_X) | > - FIELD_VALUE(0, DE_DESTINATION, Y, dst_Y)); > - > - SMTC_write2Dreg(DE_DIMENSION, > - FIELD_VALUE(0, DE_DIMENSION, X, dst_width) | > - FIELD_VALUE(0, DE_DIMENSION, Y_ET, dst_height)); > - > - SMTC_write2Dreg(DE_CONTROL, > - FIELD_SET(0, DE_CONTROL, STATUS, START) | > - FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT) | > - FIELD_SET(0, DE_CONTROL, LAST_PIXEL, OFF) | > - FIELD_SET(0, DE_CONTROL, COMMAND, RECTANGLE_FILL) | > - FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | > - FIELD_VALUE(0, DE_CONTROL, ROP, 0x0C)); > - > - smtc_de_busy = 1; > -} > - > -/********************************************************************** > - * > - * deRotatePattern > - * > - * Purpose > - * Rotate the given pattern if necessary > - * > - * Parameters > - * [in] > - * pPattern - Pointer to DE_SURFACE structure containing > - * pattern attributes > - * patternX - X position (0-7) of pattern origin > - * patternY - Y position (0-7) of pattern origin > - * > - * [out] > - * pattern_dstaddr - Pointer to pre-allocated buffer containing > - * rotated pattern > - * > - **********************************************************************/ > -void deRotatePattern(unsigned char *pattern_dstaddr, > - unsigned long pattern_src_addr, > - unsigned long pattern_BPP, > - unsigned long pattern_stride, int patternX, int patternY) > -{ > - unsigned int i; > - unsigned long pattern[PATTERN_WIDTH * PATTERN_HEIGHT]; > - unsigned int x, y; > - unsigned char *pjPatByte; > - > - if (pattern_dstaddr != NULL) { > - deWaitForNotBusy(); > - > - if (patternX || patternY) { > - /* Rotate pattern */ > - pjPatByte = (unsigned char *)pattern; > - > - switch (pattern_BPP) { > - case 8: > - { > - for (y = 0; y < 8; y++) { > - unsigned char *pjBuffer = > - pattern_dstaddr + > - ((patternY + y) & 7) * 8; > - for (x = 0; x < 8; x++) { > - pjBuffer[(patternX + > - x) & 7] = > - pjPatByte[x]; > - } > - pjPatByte += pattern_stride; > - } > - break; > - } > - > - case 16: > - { > - for (y = 0; y < 8; y++) { > - unsigned short *pjBuffer = > - (unsigned short *) > - pattern_dstaddr + > - ((patternY + y) & 7) * 8; > - for (x = 0; x < 8; x++) { > - pjBuffer[(patternX + > - x) & 7] = > - ((unsigned short *) > - pjPatByte)[x]; > - } > - pjPatByte += pattern_stride; > - } > - break; > - } > - > - case 32: > - { > - for (y = 0; y < 8; y++) { > - unsigned long *pjBuffer = > - (unsigned long *) > - pattern_dstaddr + > - ((patternY + y) & 7) * 8; > - for (x = 0; x < 8; x++) { > - pjBuffer[(patternX + > - x) & 7] = > - ((unsigned long *) > - pjPatByte)[x]; > - } > - pjPatByte += pattern_stride; > - } > - break; > - } > - } > - } else { > - /*Don't rotate,just copy pattern into pattern_dstaddr*/ > - for (i = 0; i < (pattern_BPP * 2); i++) { > - ((unsigned long *)pattern_dstaddr)[i] = > - pattern[i]; > - } > - } > - > - } > -} > - > -/********************************************************************** > - * > - * deCopy > - * > - * Purpose > - * Copy a rectangular area of the source surface to a destination surface > - * > - * Remarks > - * Source bitmap must have the same color depth (BPP) as the destination > - * bitmap. > - * > -**********************************************************************/ > -void deCopy(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long dst_BPP, > - unsigned long dst_X, > - unsigned long dst_Y, > - unsigned long dst_width, > - unsigned long dst_height, > - unsigned long src_base, > - unsigned long src_pitch, > - unsigned long src_X, > - unsigned long src_Y, pTransparent pTransp, unsigned char nROP2) > -{ > - unsigned long nDirection = 0; > - unsigned long nTransparent = 0; > - /* Direction of ROP2 operation: > - * 1 = Left to Right, > - * (-1) = Right to Left > - */ > - unsigned long opSign = 1; > - /* xWidth is in pixels */ > - unsigned long xWidth = 192 / (dst_BPP / 8); > - unsigned long de_ctrl = 0; > - > - deWaitForNotBusy(); > - > - SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, > - FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, > - dst_base)); > - > - SMTC_write2Dreg(DE_WINDOW_SOURCE_BASE, > - FIELD_VALUE(0, DE_WINDOW_SOURCE_BASE, ADDRESS, > - src_base)); > - > - if (dst_pitch && src_pitch) { > - SMTC_write2Dreg(DE_PITCH, > - FIELD_VALUE(0, DE_PITCH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, > - DE_PITCH, > - SOURCE, > - src_pitch)); > - > - SMTC_write2Dreg(DE_WINDOW_WIDTH, > - FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, > - dst_pitch) | FIELD_VALUE(0, > - DE_WINDOW_WIDTH, > - SOURCE, > - src_pitch)); > - } > - > - /* Set transparent bits if necessary */ > - if (pTransp != NULL) { > - nTransparent = > - pTransp->match | pTransp->select | pTransp->control; > - > - /* Set color compare register */ > - SMTC_write2Dreg(DE_COLOR_COMPARE, > - FIELD_VALUE(0, DE_COLOR_COMPARE, COLOR, > - pTransp->color)); > - } > - > - /* Determine direction of operation */ > - if (src_Y < dst_Y) { > - /* +----------+ > - |S | > - | +----------+ > - | | | | > - | | | | > - +---|------+ | > - | D | > - +----------+ */ > - > - nDirection = BOTTOM_TO_TOP; > - } else if (src_Y > dst_Y) { > - /* +----------+ > - |D | > - | +----------+ > - | | | | > - | | | | > - +---|------+ | > - | S | > - +----------+ */ > - > - nDirection = TOP_TO_BOTTOM; > - } else { > - /* src_Y == dst_Y */ > - > - if (src_X <= dst_X) { > - /* +------+---+------+ > - |S | | D| > - | | | | > - | | | | > - | | | | > - +------+---+------+ */ > - > - nDirection = RIGHT_TO_LEFT; > - } else { > - /* src_X > dst_X */ > - > - /* +------+---+------+ > - |D | | S| > - | | | | > - | | | | > - | | | | > - +------+---+------+ */ > - > - nDirection = LEFT_TO_RIGHT; > - } > - } > - > - if ((nDirection == BOTTOM_TO_TOP) || (nDirection == RIGHT_TO_LEFT)) { > - src_X += dst_width - 1; > - src_Y += dst_height - 1; > - dst_X += dst_width - 1; > - dst_Y += dst_height - 1; > - opSign = (-1); > - } > - > - if (dst_BPP >= 24) { > - src_X *= 3; > - src_Y *= 3; > - dst_X *= 3; > - dst_Y *= 3; > - dst_width *= 3; > - if ((nDirection == BOTTOM_TO_TOP) > - || (nDirection == RIGHT_TO_LEFT)) { > - src_X += 2; > - dst_X += 2; > - } > - } > - > - /* Workaround for 192 byte hw bug */ > - if ((nROP2 != 0x0C) && ((dst_width * (dst_BPP / 8)) >= 192)) { > - /* > - * Perform the ROP2 operation in chunks of (xWidth * > - * dst_height) > - */ > - while (1) { > - deWaitForNotBusy(); > - > - SMTC_write2Dreg(DE_SOURCE, > - FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_SOURCE, X_K1, src_X) | > - FIELD_VALUE(0, DE_SOURCE, Y_K2, src_Y)); > - > - SMTC_write2Dreg(DE_DESTINATION, > - FIELD_SET(0, DE_DESTINATION, WRAP, > - DISABLE) | FIELD_VALUE(0, > - DE_DESTINATION, > - X, > - dst_X) > - | FIELD_VALUE(0, DE_DESTINATION, Y, > - dst_Y)); > - > - SMTC_write2Dreg(DE_DIMENSION, > - FIELD_VALUE(0, DE_DIMENSION, X, > - xWidth) | FIELD_VALUE(0, > - DE_DIMENSION, > - Y_ET, > - dst_height)); > - > - de_ctrl = > - FIELD_VALUE(0, DE_CONTROL, ROP, > - nROP2) | nTransparent | FIELD_SET(0, > - DE_CONTROL, > - ROP_SELECT, > - ROP2) > - | FIELD_SET(0, DE_CONTROL, COMMAND, > - BITBLT) | ((nDirection == > - 1) ? FIELD_SET(0, > - DE_CONTROL, > - DIRECTION, > - RIGHT_TO_LEFT) > - : FIELD_SET(0, DE_CONTROL, > - DIRECTION, > - LEFT_TO_RIGHT)) | > - FIELD_SET(0, DE_CONTROL, STATUS, START); > - > - SMTC_write2Dreg(DE_CONTROL, de_ctrl); > - > - src_X += (opSign * xWidth); > - dst_X += (opSign * xWidth); > - dst_width -= xWidth; > - > - if (dst_width <= 0) { > - /* ROP2 operation is complete */ > - break; > - } > - > - if (xWidth > dst_width) > - xWidth = dst_width; > - } > - } else { > - deWaitForNotBusy(); > - SMTC_write2Dreg(DE_SOURCE, > - FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_SOURCE, X_K1, src_X) | > - FIELD_VALUE(0, DE_SOURCE, Y_K2, src_Y)); > - > - SMTC_write2Dreg(DE_DESTINATION, > - FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_DESTINATION, X, dst_X) | > - FIELD_VALUE(0, DE_DESTINATION, Y, dst_Y)); > - > - SMTC_write2Dreg(DE_DIMENSION, > - FIELD_VALUE(0, DE_DIMENSION, X, dst_width) | > - FIELD_VALUE(0, DE_DIMENSION, Y_ET, dst_height)); > - > - de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, nROP2) | > - nTransparent | > - FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | > - FIELD_SET(0, DE_CONTROL, COMMAND, BITBLT) | > - ((nDirection == 1) ? FIELD_SET(0, DE_CONTROL, DIRECTION, > - RIGHT_TO_LEFT) > - : FIELD_SET(0, DE_CONTROL, DIRECTION, > - LEFT_TO_RIGHT)) | FIELD_SET(0, DE_CONTROL, > - STATUS, START); > - SMTC_write2Dreg(DE_CONTROL, de_ctrl); > - } > - > - smtc_de_busy = 1; > -} > - > -/* > - * This function sets the pixel format that will apply to the 2D Engine. > - */ > -void deSetPixelFormat(unsigned long bpp) > -{ > - unsigned long de_format; > - > - de_format = SMTC_read2Dreg(DE_STRETCH_FORMAT); > - > - switch (bpp) { > - case 8: > - de_format = > - FIELD_SET(de_format, DE_STRETCH_FORMAT, PIXEL_FORMAT, 8); > - break; > - default: > - case 16: > - de_format = > - FIELD_SET(de_format, DE_STRETCH_FORMAT, PIXEL_FORMAT, 16); > - break; > - case 32: > - de_format = > - FIELD_SET(de_format, DE_STRETCH_FORMAT, PIXEL_FORMAT, 32); > - break; > - } > - > - SMTC_write2Dreg(DE_STRETCH_FORMAT, de_format); > -} > - > -/* > - * System memory to Video memory monochrome expansion. > - * > - * Source is monochrome image in system memory. This function expands the > - * monochrome data to color image in video memory. > - */ > - > -long deSystemMem2VideoMemMonoBlt(const char *pSrcbuf, > - long srcDelta, > - unsigned long startBit, > - unsigned long dBase, > - unsigned long dPitch, > - unsigned long bpp, > - unsigned long dx, unsigned long dy, > - unsigned long width, unsigned long height, > - unsigned long fColor, > - unsigned long bColor, > - unsigned long rop2) { > - unsigned long bytePerPixel; > - unsigned long ulBytesPerScan; > - unsigned long ul4BytesPerScan; > - unsigned long ulBytesRemain; > - unsigned long de_ctrl = 0; > - unsigned char ajRemain[4]; > - long i, j; > - > - bytePerPixel = bpp / 8; > - > - /* Just make sure the start bit is within legal range */ > - startBit &= 7; > - > - ulBytesPerScan = (width + startBit + 7) / 8; > - ul4BytesPerScan = ulBytesPerScan & ~3; > - ulBytesRemain = ulBytesPerScan & 3; > - > - if (smtc_de_busy) > - deWaitForNotBusy(); > - > - /* > - * 2D Source Base. Use 0 for HOST Blt. > - */ > - > - SMTC_write2Dreg(DE_WINDOW_SOURCE_BASE, 0); > - > - /* > - * 2D Destination Base. > - * > - * It is an address offset (128 bit aligned) from the beginning of > - * frame buffer. > - */ > - > - SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, dBase); > - > - if (dPitch) { > - > - /* > - * Program pitch (distance between the 1st points of two > - * adjacent lines). > - * > - * Note that input pitch is BYTE value, but the 2D Pitch > - * register uses pixel values. Need Byte to pixel convertion. > - */ > - > - SMTC_write2Dreg(DE_PITCH, > - FIELD_VALUE(0, DE_PITCH, DESTINATION, > - dPitch / > - bytePerPixel) | FIELD_VALUE(0, > - DE_PITCH, > - SOURCE, > - dPitch / > - bytePerPixel)); > - > - /* Screen Window width in Pixels. > - * > - * 2D engine uses this value to calculate the linear address in > - * frame buffer for a given point. > - */ > - > - SMTC_write2Dreg(DE_WINDOW_WIDTH, > - FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, > - (dPitch / > - bytePerPixel)) | FIELD_VALUE(0, > - DE_WINDOW_WIDTH, > - SOURCE, > - (dPitch > - / > - bytePerPixel))); > - } > - /* Note: For 2D Source in Host Write, only X_K1 field is needed, and > - * Y_K2 field is not used. For mono bitmap, use startBit for X_K1. > - */ > - > - SMTC_write2Dreg(DE_SOURCE, > - FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_SOURCE, X_K1, startBit) | > - FIELD_VALUE(0, DE_SOURCE, Y_K2, 0)); > - > - SMTC_write2Dreg(DE_DESTINATION, > - FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | > - FIELD_VALUE(0, DE_DESTINATION, X, dx) | > - FIELD_VALUE(0, DE_DESTINATION, Y, dy)); > - > - SMTC_write2Dreg(DE_DIMENSION, > - FIELD_VALUE(0, DE_DIMENSION, X, width) | > - FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); > - > - SMTC_write2Dreg(DE_FOREGROUND, fColor); > - SMTC_write2Dreg(DE_BACKGROUND, bColor); > - > - if (bpp) > - deSetPixelFormat(bpp); > - /* Set the pixel format of the destination */ > - > - de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, rop2) | > - FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | > - FIELD_SET(0, DE_CONTROL, COMMAND, HOST_WRITE) | > - FIELD_SET(0, DE_CONTROL, HOST, MONO) | > - FIELD_SET(0, DE_CONTROL, STATUS, START); > - > - SMTC_write2Dreg(DE_CONTROL, de_ctrl | deGetTransparency()); > - > - /* Write MONO data (line by line) to 2D Engine data port */ > - for (i = 0; i < height; i++) { > - /* For each line, send the data in chunks of 4 bytes */ > - for (j = 0; j < (ul4BytesPerScan / 4); j++) > - SMTC_write2Ddataport(0, > - *(unsigned long *)(pSrcbuf + > - (j * 4))); > - > - if (ulBytesRemain) { > - memcpy(ajRemain, pSrcbuf + ul4BytesPerScan, > - ulBytesRemain); > - SMTC_write2Ddataport(0, *(unsigned long *)ajRemain); > - } > - > - pSrcbuf += srcDelta; > - } > - smtc_de_busy = 1; > - > - return 0; > -} > - > -/* > - * This function gets the transparency status from DE_CONTROL register. > - * It returns a double word with the transparent fields properly set, > - * while other fields are 0. > - */ > -unsigned long deGetTransparency(void) > -{ > - unsigned long de_ctrl; > - > - de_ctrl = SMTC_read2Dreg(DE_CONTROL); > - > - de_ctrl &= > - FIELD_MASK(DE_CONTROL_TRANSPARENCY_MATCH) | > - FIELD_MASK(DE_CONTROL_TRANSPARENCY_SELECT) | > - FIELD_MASK(DE_CONTROL_TRANSPARENCY); > - > - return de_ctrl; > -} > diff --git a/drivers/staging/sm7xx/smtc2d.h b/drivers/staging/sm7xx/smtc2d.h > deleted file mode 100644 > index 02b4fa2..0000000 > --- a/drivers/staging/sm7xx/smtc2d.h > +++ /dev/null > @@ -1,530 +0,0 @@ > -/* > - * Silicon Motion SM712 2D drawing engine functions. > - * > - * Copyright (C) 2006 Silicon Motion Technology Corp. > - * Author: Ge Wang, gewang@xxxxxxxxxxxxxxxxx > - * > - * Copyright (C) 2009 Lemote, Inc. > - * Author: Wu Zhangjin, wuzhangjin@xxxxxxxxx > - * > - * This file is subject to the terms and conditions of the GNU General Public > - * License. See the file COPYING in the main directory of this archive for > - * more details. > - */ > - > -#ifndef NULL > -#define NULL 0 > -#endif > - > -/* Internal macros */ > - > -#define _F_START(f) (0 ? f) > -#define _F_END(f) (1 ? f) > -#define _F_SIZE(f) (1 + _F_END(f) - _F_START(f)) > -#define _F_MASK(f) (((1ULL << _F_SIZE(f)) - 1) << _F_START(f)) > -#define _F_NORMALIZE(v, f) (((v) & _F_MASK(f)) >> _F_START(f)) > -#define _F_DENORMALIZE(v, f) (((v) << _F_START(f)) & _F_MASK(f)) > - > -/* Global macros */ > - > -#define FIELD_GET(x, reg, field) \ > -( \ > - _F_NORMALIZE((x), reg ## _ ## field) \ > -) > - > -#define FIELD_SET(x, reg, field, value) \ > -( \ > - (x & ~_F_MASK(reg ## _ ## field)) \ > - | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \ > -) > - > -#define FIELD_VALUE(x, reg, field, value) \ > -( \ > - (x & ~_F_MASK(reg ## _ ## field)) \ > - | _F_DENORMALIZE(value, reg ## _ ## field) \ > -) > - > -#define FIELD_CLEAR(reg, field) \ > -( \ > - ~_F_MASK(reg ## _ ## field) \ > -) > - > -/* Field Macros */ > - > -#define FIELD_START(field) (0 ? field) > -#define FIELD_END(field) (1 ? field) > -#define FIELD_SIZE(field) \ > - (1 + FIELD_END(field) - FIELD_START(field)) > - > -#define FIELD_MASK(field) \ > - (((1 << (FIELD_SIZE(field)-1)) \ > - | ((1 << (FIELD_SIZE(field)-1)) - 1)) \ > - << FIELD_START(field)) > - > -#define FIELD_NORMALIZE(reg, field) \ > - (((reg) & FIELD_MASK(field)) >> FIELD_START(field)) > - > -#define FIELD_DENORMALIZE(field, value) \ > - (((value) << FIELD_START(field)) & FIELD_MASK(field)) > - > -#define FIELD_INIT(reg, field, value) \ > - FIELD_DENORMALIZE(reg ## _ ## field, \ > - reg ## _ ## field ## _ ## value) > - > -#define FIELD_INIT_VAL(reg, field, value) \ > - (FIELD_DENORMALIZE(reg ## _ ## field, value)) > - > -#define FIELD_VAL_SET(x, r, f, v) ({ \ > - x = (x & ~FIELD_MASK(r ## _ ## f)) \ > - | FIELD_DENORMALIZE(r ## _ ## f, r ## _ ## f ## _ ## v) \ > -}) > - > -#define RGB(r, g, b) ((unsigned long)(((r) << 16) | ((g) << 8) | (b))) > - > -/* Transparent info definition */ > -typedef struct { > - unsigned long match; /* Matching pixel is OPAQUE/TRANSPARENT */ > - unsigned long select; /* Transparency controlled by SRC/DST */ > - unsigned long control; /* ENABLE/DISABLE transparency */ > - unsigned long color; /* Transparent color */ > -} Transparent, *pTransparent; > - > -#define PIXEL_DEPTH_1_BP 0 /* 1 bit per pixel */ > -#define PIXEL_DEPTH_8_BPP 1 /* 8 bits per pixel */ > -#define PIXEL_DEPTH_16_BPP 2 /* 16 bits per pixel */ > -#define PIXEL_DEPTH_32_BPP 3 /* 32 bits per pixel */ > -#define PIXEL_DEPTH_YUV422 8 /* 16 bits per pixel YUV422 */ > -#define PIXEL_DEPTH_YUV420 9 /* 16 bits per pixel YUV420 */ > - > -#define PATTERN_WIDTH 8 > -#define PATTERN_HEIGHT 8 > - > -#define TOP_TO_BOTTOM 0 > -#define BOTTOM_TO_TOP 1 > -#define RIGHT_TO_LEFT BOTTOM_TO_TOP > -#define LEFT_TO_RIGHT TOP_TO_BOTTOM > - > -/* Constants used in Transparent structure */ > -#define MATCH_OPAQUE 0x00000000 > -#define MATCH_TRANSPARENT 0x00000400 > -#define SOURCE 0x00000000 > -#define DESTINATION 0x00000200 > - > -/* 2D registers. */ > - > -#define DE_SOURCE 0x000000 > -#define DE_SOURCE_WRAP 31 : 31 > -#define DE_SOURCE_WRAP_DISABLE 0 > -#define DE_SOURCE_WRAP_ENABLE 1 > -#define DE_SOURCE_X_K1 29 : 16 > -#define DE_SOURCE_Y_K2 15 : 0 > - > -#define DE_DESTINATION 0x000004 > -#define DE_DESTINATION_WRAP 31 : 31 > -#define DE_DESTINATION_WRAP_DISABLE 0 > -#define DE_DESTINATION_WRAP_ENABLE 1 > -#define DE_DESTINATION_X 28 : 16 > -#define DE_DESTINATION_Y 15 : 0 > - > -#define DE_DIMENSION 0x000008 > -#define DE_DIMENSION_X 28 : 16 > -#define DE_DIMENSION_Y_ET 15 : 0 > - > -#define DE_CONTROL 0x00000C > -#define DE_CONTROL_STATUS 31 : 31 > -#define DE_CONTROL_STATUS_STOP 0 > -#define DE_CONTROL_STATUS_START 1 > -#define DE_CONTROL_PATTERN 30 : 30 > -#define DE_CONTROL_PATTERN_MONO 0 > -#define DE_CONTROL_PATTERN_COLOR 1 > -#define DE_CONTROL_UPDATE_DESTINATION_X 29 : 29 > -#define DE_CONTROL_UPDATE_DESTINATION_X_DISABLE 0 > -#define DE_CONTROL_UPDATE_DESTINATION_X_ENABLE 1 > -#define DE_CONTROL_QUICK_START 28 : 28 > -#define DE_CONTROL_QUICK_START_DISABLE 0 > -#define DE_CONTROL_QUICK_START_ENABLE 1 > -#define DE_CONTROL_DIRECTION 27 : 27 > -#define DE_CONTROL_DIRECTION_LEFT_TO_RIGHT 0 > -#define DE_CONTROL_DIRECTION_RIGHT_TO_LEFT 1 > -#define DE_CONTROL_MAJOR 26 : 26 > -#define DE_CONTROL_MAJOR_X 0 > -#define DE_CONTROL_MAJOR_Y 1 > -#define DE_CONTROL_STEP_X 25 : 25 > -#define DE_CONTROL_STEP_X_POSITIVE 1 > -#define DE_CONTROL_STEP_X_NEGATIVE 0 > -#define DE_CONTROL_STEP_Y 24 : 24 > -#define DE_CONTROL_STEP_Y_POSITIVE 1 > -#define DE_CONTROL_STEP_Y_NEGATIVE 0 > -#define DE_CONTROL_STRETCH 23 : 23 > -#define DE_CONTROL_STRETCH_DISABLE 0 > -#define DE_CONTROL_STRETCH_ENABLE 1 > -#define DE_CONTROL_HOST 22 : 22 > -#define DE_CONTROL_HOST_COLOR 0 > -#define DE_CONTROL_HOST_MONO 1 > -#define DE_CONTROL_LAST_PIXEL 21 : 21 > -#define DE_CONTROL_LAST_PIXEL_OFF 0 > -#define DE_CONTROL_LAST_PIXEL_ON 1 > -#define DE_CONTROL_COMMAND 20 : 16 > -#define DE_CONTROL_COMMAND_BITBLT 0 > -#define DE_CONTROL_COMMAND_RECTANGLE_FILL 1 > -#define DE_CONTROL_COMMAND_DE_TILE 2 > -#define DE_CONTROL_COMMAND_TRAPEZOID_FILL 3 > -#define DE_CONTROL_COMMAND_ALPHA_BLEND 4 > -#define DE_CONTROL_COMMAND_RLE_STRIP 5 > -#define DE_CONTROL_COMMAND_SHORT_STROKE 6 > -#define DE_CONTROL_COMMAND_LINE_DRAW 7 > -#define DE_CONTROL_COMMAND_HOST_WRITE 8 > -#define DE_CONTROL_COMMAND_HOST_READ 9 > -#define DE_CONTROL_COMMAND_HOST_WRITE_BOTTOM_UP 10 > -#define DE_CONTROL_COMMAND_ROTATE 11 > -#define DE_CONTROL_COMMAND_FONT 12 > -#define DE_CONTROL_COMMAND_TEXTURE_LOAD 15 > -#define DE_CONTROL_ROP_SELECT 15 : 15 > -#define DE_CONTROL_ROP_SELECT_ROP3 0 > -#define DE_CONTROL_ROP_SELECT_ROP2 1 > -#define DE_CONTROL_ROP2_SOURCE 14 : 14 > -#define DE_CONTROL_ROP2_SOURCE_BITMAP 0 > -#define DE_CONTROL_ROP2_SOURCE_PATTERN 1 > -#define DE_CONTROL_MONO_DATA 13 : 12 > -#define DE_CONTROL_MONO_DATA_NOT_PACKED 0 > -#define DE_CONTROL_MONO_DATA_8_PACKED 1 > -#define DE_CONTROL_MONO_DATA_16_PACKED 2 > -#define DE_CONTROL_MONO_DATA_32_PACKED 3 > -#define DE_CONTROL_REPEAT_ROTATE 11 : 11 > -#define DE_CONTROL_REPEAT_ROTATE_DISABLE 0 > -#define DE_CONTROL_REPEAT_ROTATE_ENABLE 1 > -#define DE_CONTROL_TRANSPARENCY_MATCH 10 : 10 > -#define DE_CONTROL_TRANSPARENCY_MATCH_OPAQUE 0 > -#define DE_CONTROL_TRANSPARENCY_MATCH_TRANSPARENT 1 > -#define DE_CONTROL_TRANSPARENCY_SELECT 9 : 9 > -#define DE_CONTROL_TRANSPARENCY_SELECT_SOURCE 0 > -#define DE_CONTROL_TRANSPARENCY_SELECT_DESTINATION 1 > -#define DE_CONTROL_TRANSPARENCY 8 : 8 > -#define DE_CONTROL_TRANSPARENCY_DISABLE 0 > -#define DE_CONTROL_TRANSPARENCY_ENABLE 1 > -#define DE_CONTROL_ROP 7 : 0 > - > -/* Pseudo fields. */ > - > -#define DE_CONTROL_SHORT_STROKE_DIR 27 : 24 > -#define DE_CONTROL_SHORT_STROKE_DIR_225 0 > -#define DE_CONTROL_SHORT_STROKE_DIR_135 1 > -#define DE_CONTROL_SHORT_STROKE_DIR_315 2 > -#define DE_CONTROL_SHORT_STROKE_DIR_45 3 > -#define DE_CONTROL_SHORT_STROKE_DIR_270 4 > -#define DE_CONTROL_SHORT_STROKE_DIR_90 5 > -#define DE_CONTROL_SHORT_STROKE_DIR_180 8 > -#define DE_CONTROL_SHORT_STROKE_DIR_0 10 > -#define DE_CONTROL_ROTATION 25 : 24 > -#define DE_CONTROL_ROTATION_0 0 > -#define DE_CONTROL_ROTATION_270 1 > -#define DE_CONTROL_ROTATION_90 2 > -#define DE_CONTROL_ROTATION_180 3 > - > -#define DE_PITCH 0x000010 > -#define DE_PITCH_DESTINATION 28 : 16 > -#define DE_PITCH_SOURCE 12 : 0 > - > -#define DE_FOREGROUND 0x000014 > -#define DE_FOREGROUND_COLOR 31 : 0 > - > -#define DE_BACKGROUND 0x000018 > -#define DE_BACKGROUND_COLOR 31 : 0 > - > -#define DE_STRETCH_FORMAT 0x00001C > -#define DE_STRETCH_FORMAT_PATTERN_XY 30 : 30 > -#define DE_STRETCH_FORMAT_PATTERN_XY_NORMAL 0 > -#define DE_STRETCH_FORMAT_PATTERN_XY_OVERWRITE 1 > -#define DE_STRETCH_FORMAT_PATTERN_Y 29 : 27 > -#define DE_STRETCH_FORMAT_PATTERN_X 25 : 23 > -#define DE_STRETCH_FORMAT_PIXEL_FORMAT 21 : 20 > -#define DE_STRETCH_FORMAT_PIXEL_FORMAT_8 0 > -#define DE_STRETCH_FORMAT_PIXEL_FORMAT_16 1 > -#define DE_STRETCH_FORMAT_PIXEL_FORMAT_24 3 > -#define DE_STRETCH_FORMAT_PIXEL_FORMAT_32 2 > -#define DE_STRETCH_FORMAT_ADDRESSING 19 : 16 > -#define DE_STRETCH_FORMAT_ADDRESSING_XY 0 > -#define DE_STRETCH_FORMAT_ADDRESSING_LINEAR 15 > -#define DE_STRETCH_FORMAT_SOURCE_HEIGHT 11 : 0 > - > -#define DE_COLOR_COMPARE 0x000020 > -#define DE_COLOR_COMPARE_COLOR 23 : 0 > - > -#define DE_COLOR_COMPARE_MASK 0x000024 > -#define DE_COLOR_COMPARE_MASK_MASKS 23 : 0 > - > -#define DE_MASKS 0x000028 > -#define DE_MASKS_BYTE_MASK 31 : 16 > -#define DE_MASKS_BIT_MASK 15 : 0 > - > -#define DE_CLIP_TL 0x00002C > -#define DE_CLIP_TL_TOP 31 : 16 > -#define DE_CLIP_TL_STATUS 13 : 13 > -#define DE_CLIP_TL_STATUS_DISABLE 0 > -#define DE_CLIP_TL_STATUS_ENABLE 1 > -#define DE_CLIP_TL_INHIBIT 12 : 12 > -#define DE_CLIP_TL_INHIBIT_OUTSIDE 0 > -#define DE_CLIP_TL_INHIBIT_INSIDE 1 > -#define DE_CLIP_TL_LEFT 11 : 0 > - > -#define DE_CLIP_BR 0x000030 > -#define DE_CLIP_BR_BOTTOM 31 : 16 > -#define DE_CLIP_BR_RIGHT 12 : 0 > - > -#define DE_MONO_PATTERN_LOW 0x000034 > -#define DE_MONO_PATTERN_LOW_PATTERN 31 : 0 > - > -#define DE_MONO_PATTERN_HIGH 0x000038 > -#define DE_MONO_PATTERN_HIGH_PATTERN 31 : 0 > - > -#define DE_WINDOW_WIDTH 0x00003C > -#define DE_WINDOW_WIDTH_DESTINATION 28 : 16 > -#define DE_WINDOW_WIDTH_SOURCE 12 : 0 > - > -#define DE_WINDOW_SOURCE_BASE 0x000040 > -#define DE_WINDOW_SOURCE_BASE_EXT 27 : 27 > -#define DE_WINDOW_SOURCE_BASE_EXT_LOCAL 0 > -#define DE_WINDOW_SOURCE_BASE_EXT_EXTERNAL 1 > -#define DE_WINDOW_SOURCE_BASE_CS 26 : 26 > -#define DE_WINDOW_SOURCE_BASE_CS_0 0 > -#define DE_WINDOW_SOURCE_BASE_CS_1 1 > -#define DE_WINDOW_SOURCE_BASE_ADDRESS 25 : 0 > - > -#define DE_WINDOW_DESTINATION_BASE 0x000044 > -#define DE_WINDOW_DESTINATION_BASE_EXT 27 : 27 > -#define DE_WINDOW_DESTINATION_BASE_EXT_LOCAL 0 > -#define DE_WINDOW_DESTINATION_BASE_EXT_EXTERNAL 1 > -#define DE_WINDOW_DESTINATION_BASE_CS 26 : 26 > -#define DE_WINDOW_DESTINATION_BASE_CS_0 0 > -#define DE_WINDOW_DESTINATION_BASE_CS_1 1 > -#define DE_WINDOW_DESTINATION_BASE_ADDRESS 25 : 0 > - > -#define DE_ALPHA 0x000048 > -#define DE_ALPHA_VALUE 7 : 0 > - > -#define DE_WRAP 0x00004C > -#define DE_WRAP_X 31 : 16 > -#define DE_WRAP_Y 15 : 0 > - > -#define DE_STATUS 0x000050 > -#define DE_STATUS_CSC 1 : 1 > -#define DE_STATUS_CSC_CLEAR 0 > -#define DE_STATUS_CSC_NOT_ACTIVE 0 > -#define DE_STATUS_CSC_ACTIVE 1 > -#define DE_STATUS_2D 0 : 0 > -#define DE_STATUS_2D_CLEAR 0 > -#define DE_STATUS_2D_NOT_ACTIVE 0 > -#define DE_STATUS_2D_ACTIVE 1 > - > -/* Color Space Conversion registers. */ > - > -#define CSC_Y_SOURCE_BASE 0x0000C8 > -#define CSC_Y_SOURCE_BASE_EXT 27 : 27 > -#define CSC_Y_SOURCE_BASE_EXT_LOCAL 0 > -#define CSC_Y_SOURCE_BASE_EXT_EXTERNAL 1 > -#define CSC_Y_SOURCE_BASE_CS 26 : 26 > -#define CSC_Y_SOURCE_BASE_CS_0 0 > -#define CSC_Y_SOURCE_BASE_CS_1 1 > -#define CSC_Y_SOURCE_BASE_ADDRESS 25 : 0 > - > -#define CSC_CONSTANTS 0x0000CC > -#define CSC_CONSTANTS_Y 31 : 24 > -#define CSC_CONSTANTS_R 23 : 16 > -#define CSC_CONSTANTS_G 15 : 8 > -#define CSC_CONSTANTS_B 7 : 0 > - > -#define CSC_Y_SOURCE_X 0x0000D0 > -#define CSC_Y_SOURCE_X_INTEGER 26 : 16 > -#define CSC_Y_SOURCE_X_FRACTION 15 : 3 > - > -#define CSC_Y_SOURCE_Y 0x0000D4 > -#define CSC_Y_SOURCE_Y_INTEGER 27 : 16 > -#define CSC_Y_SOURCE_Y_FRACTION 15 : 3 > - > -#define CSC_U_SOURCE_BASE 0x0000D8 > -#define CSC_U_SOURCE_BASE_EXT 27 : 27 > -#define CSC_U_SOURCE_BASE_EXT_LOCAL 0 > -#define CSC_U_SOURCE_BASE_EXT_EXTERNAL 1 > -#define CSC_U_SOURCE_BASE_CS 26 : 26 > -#define CSC_U_SOURCE_BASE_CS_0 0 > -#define CSC_U_SOURCE_BASE_CS_1 1 > -#define CSC_U_SOURCE_BASE_ADDRESS 25 : 0 > - > -#define CSC_V_SOURCE_BASE 0x0000DC > -#define CSC_V_SOURCE_BASE_EXT 27 : 27 > -#define CSC_V_SOURCE_BASE_EXT_LOCAL 0 > -#define CSC_V_SOURCE_BASE_EXT_EXTERNAL 1 > -#define CSC_V_SOURCE_BASE_CS 26 : 26 > -#define CSC_V_SOURCE_BASE_CS_0 0 > -#define CSC_V_SOURCE_BASE_CS_1 1 > -#define CSC_V_SOURCE_BASE_ADDRESS 25 : 0 > - > -#define CSC_SOURCE_DIMENSION 0x0000E0 > -#define CSC_SOURCE_DIMENSION_X 31 : 16 > -#define CSC_SOURCE_DIMENSION_Y 15 : 0 > - > -#define CSC_SOURCE_PITCH 0x0000E4 > -#define CSC_SOURCE_PITCH_Y 31 : 16 > -#define CSC_SOURCE_PITCH_UV 15 : 0 > - > -#define CSC_DESTINATION 0x0000E8 > -#define CSC_DESTINATION_WRAP 31 : 31 > -#define CSC_DESTINATION_WRAP_DISABLE 0 > -#define CSC_DESTINATION_WRAP_ENABLE 1 > -#define CSC_DESTINATION_X 27 : 16 > -#define CSC_DESTINATION_Y 11 : 0 > - > -#define CSC_DESTINATION_DIMENSION 0x0000EC > -#define CSC_DESTINATION_DIMENSION_X 31 : 16 > -#define CSC_DESTINATION_DIMENSION_Y 15 : 0 > - > -#define CSC_DESTINATION_PITCH 0x0000F0 > -#define CSC_DESTINATION_PITCH_X 31 : 16 > -#define CSC_DESTINATION_PITCH_Y 15 : 0 > - > -#define CSC_SCALE_FACTOR 0x0000F4 > -#define CSC_SCALE_FACTOR_HORIZONTAL 31 : 16 > -#define CSC_SCALE_FACTOR_VERTICAL 15 : 0 > - > -#define CSC_DESTINATION_BASE 0x0000F8 > -#define CSC_DESTINATION_BASE_EXT 27 : 27 > -#define CSC_DESTINATION_BASE_EXT_LOCAL 0 > -#define CSC_DESTINATION_BASE_EXT_EXTERNAL 1 > -#define CSC_DESTINATION_BASE_CS 26 : 26 > -#define CSC_DESTINATION_BASE_CS_0 0 > -#define CSC_DESTINATION_BASE_CS_1 1 > -#define CSC_DESTINATION_BASE_ADDRESS 25 : 0 > - > -#define CSC_CONTROL 0x0000FC > -#define CSC_CONTROL_STATUS 31 : 31 > -#define CSC_CONTROL_STATUS_STOP 0 > -#define CSC_CONTROL_STATUS_START 1 > -#define CSC_CONTROL_SOURCE_FORMAT 30 : 28 > -#define CSC_CONTROL_SOURCE_FORMAT_YUV422 0 > -#define CSC_CONTROL_SOURCE_FORMAT_YUV420I 1 > -#define CSC_CONTROL_SOURCE_FORMAT_YUV420 2 > -#define CSC_CONTROL_SOURCE_FORMAT_YVU9 3 > -#define CSC_CONTROL_SOURCE_FORMAT_IYU1 4 > -#define CSC_CONTROL_SOURCE_FORMAT_IYU2 5 > -#define CSC_CONTROL_SOURCE_FORMAT_RGB565 6 > -#define CSC_CONTROL_SOURCE_FORMAT_RGB8888 7 > -#define CSC_CONTROL_DESTINATION_FORMAT 27 : 26 > -#define CSC_CONTROL_DESTINATION_FORMAT_RGB565 0 > -#define CSC_CONTROL_DESTINATION_FORMAT_RGB8888 1 > -#define CSC_CONTROL_HORIZONTAL_FILTER 25 : 25 > -#define CSC_CONTROL_HORIZONTAL_FILTER_DISABLE 0 > -#define CSC_CONTROL_HORIZONTAL_FILTER_ENABLE 1 > -#define CSC_CONTROL_VERTICAL_FILTER 24 : 24 > -#define CSC_CONTROL_VERTICAL_FILTER_DISABLE 0 > -#define CSC_CONTROL_VERTICAL_FILTER_ENABLE 1 > -#define CSC_CONTROL_BYTE_ORDER 23 : 23 > -#define CSC_CONTROL_BYTE_ORDER_YUYV 0 > -#define CSC_CONTROL_BYTE_ORDER_UYVY 1 > - > -#define DE_DATA_PORT_501 0x110000 > -#define DE_DATA_PORT_712 0x400000 > -#define DE_DATA_PORT_722 0x6000 > - > -/* point to virtual Memory Map IO starting address */ > -extern char *smtc_RegBaseAddress; > -/* point to virtual video memory starting address */ > -extern char *smtc_VRAMBaseAddress; > -extern unsigned char smtc_de_busy; > - > -extern unsigned long memRead32(unsigned long nOffset); > -extern void memWrite32(unsigned long nOffset, unsigned long nData); > -extern unsigned long SMTC_read2Dreg(unsigned long nOffset); > - > -/* 2D functions */ > -extern void deInit(unsigned int nModeWidth, unsigned int nModeHeight, > - unsigned int bpp); > - > -extern void deWaitForNotBusy(void); > - > -extern void deVerticalLine(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long nX, > - unsigned long nY, > - unsigned long dst_height, > - unsigned long nColor); > - > -extern void deHorizontalLine(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long nX, > - unsigned long nY, > - unsigned long dst_width, > - unsigned long nColor); > - > -extern void deLine(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long nX1, > - unsigned long nY1, > - unsigned long nX2, > - unsigned long nY2, > - unsigned long nColor); > - > -extern void deFillRect(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long dst_X, > - unsigned long dst_Y, > - unsigned long dst_width, > - unsigned long dst_height, > - unsigned long nColor); > - > -extern void deRotatePattern(unsigned char *pattern_dstaddr, > - unsigned long pattern_src_addr, > - unsigned long pattern_BPP, > - unsigned long pattern_stride, > - int patternX, > - int patternY); > - > -extern void deCopy(unsigned long dst_base, > - unsigned long dst_pitch, > - unsigned long dst_BPP, > - unsigned long dst_X, > - unsigned long dst_Y, > - unsigned long dst_width, > - unsigned long dst_height, > - unsigned long src_base, > - unsigned long src_pitch, > - unsigned long src_X, > - unsigned long src_Y, > - pTransparent pTransp, > - unsigned char nROP2); > - > -/* > - * System memory to Video memory monochrome expansion. > - * > - * Source is monochrome image in system memory. This function expands the > - * monochrome data to color image in video memory. > - * > - * @pSrcbuf: pointer to start of source buffer in system memory > - * @srcDelta: Pitch value (in bytes) of the source buffer, +ive means top > - * down and -ive mean button up > - * @startBit: Mono data can start at any bit in a byte, this value should > - * be 0 to 7 > - * @dBase: Address of destination : offset in frame buffer > - * @dPitch: Pitch value of destination surface in BYTE > - * @bpp: Color depth of destination surface > - * @dx, dy: Starting coordinate of destination surface > - * @width, height: width and height of rectange in pixel value > - * @fColor,bColor: Foreground, Background color (corresponding to a 1, 0 in > - * the monochrome data) > - * @rop2: ROP value > - */ > - > -extern long deSystemMem2VideoMemMonoBlt( > - const char *pSrcbuf, > - long srcDelta, > - unsigned long startBit, > - unsigned long dBase, > - unsigned long dPitch, > - unsigned long bpp, > - unsigned long dx, unsigned long dy, > - unsigned long width, unsigned long height, > - unsigned long fColor, > - unsigned long bColor, > - unsigned long rop2); > - > -extern unsigned long deGetTransparency(void); > -extern void deSetPixelFormat(unsigned long bpp); > diff --git a/drivers/staging/sm7xx/smtcfb.c b/drivers/staging/sm7xx/smtcfb.c > index a4f6f49..397f8d9 100644 > --- a/drivers/staging/sm7xx/smtcfb.c > +++ b/drivers/staging/sm7xx/smtcfb.c > @@ -12,6 +12,8 @@ > * License. See the file COPYING in the main directory of this archive for > * more details. > * > + * - Remove the buggy 2D support for Lynx, 2010/01/06, Wu Zhangjin > + * > * Version 0.10.26192.21.01 > * - Add PowerPC/Big endian support > * - Add 2D support for Lynx > @@ -45,7 +47,6 @@ > struct screen_info smtc_screen_info; > > #include "smtcfb.h" > -#include "smtc2d.h" > > #ifdef DEBUG > #define smdbg(format, arg...) printk(KERN_DEBUG format , ## arg) > @@ -120,10 +121,6 @@ static struct vesa_mode_table vesa_mode[] = { > char __iomem *smtc_RegBaseAddress; /* Memory Map IO starting address */ > char __iomem *smtc_VRAMBaseAddress; /* video memory starting address */ > > -char *smtc_2DBaseAddress; /* 2D engine starting address */ > -char *smtc_2Ddataport; /* 2D data port offset */ > -short smtc_2Dacceleration; > - > static u32 colreg[17]; > static struct par_info hw; /* hardware information */ > > @@ -135,16 +132,6 @@ u16 smtc_ChipIDs[] = { > > #define numSMTCchipIDs (sizeof(smtc_ChipIDs) / sizeof(u16)) > > -void deWaitForNotBusy(void) > -{ > - unsigned long i = 0x1000000; > - while (i--) { > - if ((smtc_seqr(0x16) & 0x18) == 0x10) > - break; > - } > - smtc_de_busy = 0; > -} > - > static void sm712_set_timing(struct smtcfb_info *sfb, > struct par_info *ppar_info) > { > @@ -324,7 +311,7 @@ static inline unsigned int chan_to_field(unsigned int chan, > return chan << bf->offset; > } > > -static int smtcfb_blank(int blank_mode, struct fb_info *info) > +static int cfb_blank(int blank_mode, struct fb_info *info) > { > /* clear DPMS setting */ > switch (blank_mode) { > @@ -622,93 +609,13 @@ smtcfb_write(struct fb_info *info, const char __user *buf, size_t count, > } > #endif /* ! __BIG_ENDIAN */ > > -#include "smtc2d.c" > - > -void smtcfb_copyarea(struct fb_info *info, const struct fb_copyarea *area) > -{ > - struct par_info *p = (struct par_info *)info->par; > - > - if (smtc_2Dacceleration) { > - if (!area->width || !area->height) > - return; > - > - deCopy(p->BaseAddressInVRAM, 0, info->var.bits_per_pixel, > - area->dx, area->dy, area->width, area->height, > - p->BaseAddressInVRAM, 0, area->sx, area->sy, 0, 0xC); > - > - } else > - cfb_copyarea(info, area); > -} > - > -void smtcfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) > -{ > - struct par_info *p = (struct par_info *)info->par; > - > - if (smtc_2Dacceleration) { > - if (!rect->width || !rect->height) > - return; > - if (info->var.bits_per_pixel >= 24) > - deFillRect(p->BaseAddressInVRAM, 0, rect->dx * 3, > - rect->dy * 3, rect->width * 3, rect->height, > - rect->color); > - else > - deFillRect(p->BaseAddressInVRAM, 0, rect->dx, rect->dy, > - rect->width, rect->height, rect->color); > - } else > - cfb_fillrect(info, rect); > -} > - > -void smtcfb_imageblit(struct fb_info *info, const struct fb_image *image) > -{ > - struct par_info *p = (struct par_info *)info->par; > - u32 bg_col = 0, fg_col = 0; > - > - if ((smtc_2Dacceleration) && (image->depth == 1)) { > - if (smtc_de_busy) > - deWaitForNotBusy(); > - > - switch (info->var.bits_per_pixel) { > - case 8: > - bg_col = image->bg_color; > - fg_col = image->fg_color; > - break; > - case 16: > - bg_col = > - ((u32 *) (info->pseudo_palette))[image->bg_color]; > - fg_col = > - ((u32 *) (info->pseudo_palette))[image->fg_color]; > - break; > - case 32: > - bg_col = > - ((u32 *) (info->pseudo_palette))[image->bg_color]; > - fg_col = > - ((u32 *) (info->pseudo_palette))[image->fg_color]; > - break; > - } > - > - deSystemMem2VideoMemMonoBlt( > - image->data, > - image->width / 8, > - 0, > - p->BaseAddressInVRAM, > - 0, > - 0, > - image->dx, image->dy, > - image->width, image->height, > - fg_col, bg_col, > - 0x0C); > - > - } else > - cfb_imageblit(info, image); > -} > - > static struct fb_ops smtcfb_ops = { > .owner = THIS_MODULE, > .fb_setcolreg = smtc_setcolreg, > - .fb_blank = smtcfb_blank, > - .fb_fillrect = smtcfb_fillrect, > - .fb_imageblit = smtcfb_imageblit, > - .fb_copyarea = smtcfb_copyarea, > + .fb_blank = cfb_blank, > + .fb_fillrect = cfb_fillrect, > + .fb_imageblit = cfb_imageblit, > + .fb_copyarea = cfb_copyarea, > #ifdef __BIG_ENDIAN > .fb_read = smtcfb_read, > .fb_write = smtcfb_write, > @@ -772,12 +679,6 @@ void smtcfb_setmode(struct smtcfb_info *sfb) > hw.height = sfb->fb.var.yres; > hw.hz = 60; > smtc_set_timing(sfb, &hw); > - if (smtc_2Dacceleration) { > - printk("2D acceleration enabled!\n"); > - /* Init smtc drawing engine */ > - deInit(sfb->fb.var.xres, sfb->fb.var.yres, > - sfb->fb.var.bits_per_pixel); > - } > } > > /* > @@ -1004,9 +905,7 @@ static int __init smtcfb_pci_probe(struct pci_dev *pdev, > #endif > hw.m_pMMIO = (smtc_RegBaseAddress = > smtc_VRAMBaseAddress + 0x00700000); > - smtc_2DBaseAddress = (hw.m_pDPR = > - smtc_VRAMBaseAddress + 0x00408000); > - smtc_2Ddataport = smtc_VRAMBaseAddress + DE_DATA_PORT_712; > + hw.m_pDPR = smtc_VRAMBaseAddress + 0x00408000; > hw.m_pVPR = hw.m_pLFB + 0x0040c000; > #ifdef __BIG_ENDIAN > if (sfb->fb.var.bits_per_pixel == 32) { > @@ -1035,27 +934,21 @@ static int __init smtcfb_pci_probe(struct pci_dev *pdev, > if (sfb->fb.var.bits_per_pixel == 32) > smtc_seqw(0x17, 0x30); > #endif > -#ifdef CONFIG_FB_SM7XX_ACCEL > - smtc_2Dacceleration = 1; > -#endif > break; > case 0x720: > sfb->fb.fix.mmio_start = pFramebufferPhysical; > sfb->fb.fix.mmio_len = 0x00200000; > smem_size = SM722_VIDEOMEMORYSIZE; > - smtc_2DBaseAddress = (hw.m_pDPR = > - ioremap(pFramebufferPhysical, 0x00a00000)); > + hw.m_pDPR = ioremap(pFramebufferPhysical, 0x00a00000); > hw.m_pLFB = (smtc_VRAMBaseAddress = > - smtc_2DBaseAddress + 0x00200000); > + hw.m_pDPR + 0x00200000); > hw.m_pMMIO = (smtc_RegBaseAddress = > - smtc_2DBaseAddress + 0x000c0000); > - smtc_2Ddataport = smtc_2DBaseAddress + DE_DATA_PORT_722; > - hw.m_pVPR = smtc_2DBaseAddress + 0x800; > + hw.m_pDPR + 0x000c0000); > + hw.m_pVPR = hw.m_pDPR + 0x800; > > smtc_seqw(0x62, 0xff); > smtc_seqw(0x6a, 0x0d); > smtc_seqw(0x6b, 0x02); > - smtc_2Dacceleration = 0; > break; > default: > printk(KERN_INFO _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel