[PATCH] staging: sm7xx: remove the buggy 2D acceleration support
Wu Zhangjin
wuzhangjin at gmail.com
Wed Jan 6 09:07:21 UTC 2010
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 at gmail.com>
>
> 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 at gmail.com>
> ---
> 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 at siliconmotion.com.cn
> - *
> - * Copyright (C) 2009 Lemote, Inc.
> - * Author: Wu Zhangjin, wuzhangjin at gmail.com
> - *
> - * 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 at siliconmotion.com.cn>
> - */
> -
> -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 at siliconmotion.com
> - *
> - * Copyright (C) 2009 Lemote, Inc.
> - * Author: Wu Zhangjin, wuzhangjin at gmail.com
> - *
> - * 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
More information about the devel
mailing list