aboutsummaryrefslogtreecommitdiff
path: root/drivers/video/via
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/via')
-rw-r--r--drivers/video/via/Makefile7
-rw-r--r--drivers/video/via/accel.c279
-rw-r--r--drivers/video/via/accel.h169
-rw-r--r--drivers/video/via/chip.h190
-rw-r--r--drivers/video/via/debug.h41
-rw-r--r--drivers/video/via/dvi.c682
-rw-r--r--drivers/video/via/dvi.h64
-rw-r--r--drivers/video/via/global.c60
-rw-r--r--drivers/video/via/global.h87
-rw-r--r--drivers/video/via/hw.c2865
-rw-r--r--drivers/video/via/hw.h933
-rw-r--r--drivers/video/via/iface.c78
-rw-r--r--drivers/video/via/iface.h38
-rw-r--r--drivers/video/via/ioctl.c112
-rw-r--r--drivers/video/via/ioctl.h210
-rw-r--r--drivers/video/via/lcd.c1821
-rw-r--r--drivers/video/via/lcd.h94
-rw-r--r--drivers/video/via/lcdtbl.h591
-rw-r--r--drivers/video/via/share.h1105
-rw-r--r--drivers/video/via/tbl1636.c71
-rw-r--r--drivers/video/via/tbl1636.h34
-rw-r--r--drivers/video/via/tblDPASetting.c109
-rw-r--r--drivers/video/via/tblDPASetting.h47
-rw-r--r--drivers/video/via/via_i2c.c177
-rw-r--r--drivers/video/via/via_i2c.h46
-rw-r--r--drivers/video/via/via_utility.c253
-rw-r--r--drivers/video/via/via_utility.h35
-rw-r--r--drivers/video/via/viafbdev.c2588
-rw-r--r--drivers/video/via/viafbdev.h112
-rw-r--r--drivers/video/via/viamode.c1086
-rw-r--r--drivers/video/via/viamode.h177
-rw-r--r--drivers/video/via/vt1636.c306
-rw-r--r--drivers/video/via/vt1636.h44
33 files changed, 0 insertions, 14511 deletions
diff --git a/drivers/video/via/Makefile b/drivers/video/via/Makefile
deleted file mode 100644
index e533b4b6aba..00000000000
--- a/drivers/video/via/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Makefile for the VIA framebuffer driver (for Linux Kernel 2.6)
-#
-
-obj-$(CONFIG_FB_VIA) += viafb.o
-
-viafb-y :=viafbdev.o hw.o iface.o via_i2c.o dvi.o lcd.o ioctl.o accel.o via_utility.o vt1636.o global.o tblDPASetting.o viamode.o tbl1636.o
diff --git a/drivers/video/via/accel.c b/drivers/video/via/accel.c
deleted file mode 100644
index 632523ff1fb..00000000000
--- a/drivers/video/via/accel.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#include "global.h"
-
-void viafb_init_accel(void)
-{
- viaparinfo->fbmem_free -= CURSOR_SIZE;
- viaparinfo->cursor_start = viaparinfo->fbmem_free;
- viaparinfo->fbmem_used += CURSOR_SIZE;
-
- /* Reverse 8*1024 memory space for cursor image */
- viaparinfo->fbmem_free -= (CURSOR_SIZE + VQ_SIZE);
- viaparinfo->VQ_start = viaparinfo->fbmem_free;
- viaparinfo->VQ_end = viaparinfo->VQ_start + VQ_SIZE - 1;
- viaparinfo->fbmem_used += (CURSOR_SIZE + VQ_SIZE); }
-
-void viafb_init_2d_engine(void)
-{
- u32 dwVQStartAddr, dwVQEndAddr;
- u32 dwVQLen, dwVQStartL, dwVQEndL, dwVQStartEndH;
-
- /* init 2D engine regs to reset 2D engine */
- writel(0x0, viaparinfo->io_virt + VIA_REG_GEMODE);
- writel(0x0, viaparinfo->io_virt + VIA_REG_SRCPOS);
- writel(0x0, viaparinfo->io_virt + VIA_REG_DSTPOS);
- writel(0x0, viaparinfo->io_virt + VIA_REG_DIMENSION);
- writel(0x0, viaparinfo->io_virt + VIA_REG_PATADDR);
- writel(0x0, viaparinfo->io_virt + VIA_REG_FGCOLOR);
- writel(0x0, viaparinfo->io_virt + VIA_REG_BGCOLOR);
- writel(0x0, viaparinfo->io_virt + VIA_REG_CLIPTL);
- writel(0x0, viaparinfo->io_virt + VIA_REG_CLIPBR);
- writel(0x0, viaparinfo->io_virt + VIA_REG_OFFSET);
- writel(0x0, viaparinfo->io_virt + VIA_REG_KEYCONTROL);
- writel(0x0, viaparinfo->io_virt + VIA_REG_SRCBASE);
- writel(0x0, viaparinfo->io_virt + VIA_REG_DSTBASE);
- writel(0x0, viaparinfo->io_virt + VIA_REG_PITCH);
- writel(0x0, viaparinfo->io_virt + VIA_REG_MONOPAT1);
-
- /* Init AGP and VQ regs */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_K8M890:
- case UNICHROME_P4M900:
- writel(0x00100000, viaparinfo->io_virt + VIA_REG_CR_TRANSET);
- writel(0x680A0000, viaparinfo->io_virt + VIA_REG_CR_TRANSPACE);
- writel(0x02000000, viaparinfo->io_virt + VIA_REG_CR_TRANSPACE);
- break;
-
- default:
- writel(0x00100000, viaparinfo->io_virt + VIA_REG_TRANSET);
- writel(0x00000000, viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x00333004, viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x60000000, viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x61000000, viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x62000000, viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x63000000, viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x64000000, viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x7D000000, viaparinfo->io_virt + VIA_REG_TRANSPACE);
-
- writel(0xFE020000, viaparinfo->io_virt + VIA_REG_TRANSET);
- writel(0x00000000, viaparinfo->io_virt + VIA_REG_TRANSPACE);
- break;
- }
- if (viaparinfo->VQ_start != 0) {
- /* Enable VQ */
- dwVQStartAddr = viaparinfo->VQ_start;
- dwVQEndAddr = viaparinfo->VQ_end;
-
- dwVQStartL = 0x50000000 | (dwVQStartAddr & 0xFFFFFF);
- dwVQEndL = 0x51000000 | (dwVQEndAddr & 0xFFFFFF);
- dwVQStartEndH = 0x52000000 |
- ((dwVQStartAddr & 0xFF000000) >> 24) |
- ((dwVQEndAddr & 0xFF000000) >> 16);
- dwVQLen = 0x53000000 | (VQ_SIZE >> 3);
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_K8M890:
- case UNICHROME_P4M900:
- dwVQStartL |= 0x20000000;
- dwVQEndL |= 0x20000000;
- dwVQStartEndH |= 0x20000000;
- dwVQLen |= 0x20000000;
- break;
- default:
- break;
- }
-
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_K8M890:
- case UNICHROME_P4M900:
- writel(0x00100000,
- viaparinfo->io_virt + VIA_REG_CR_TRANSET);
- writel(dwVQStartEndH,
- viaparinfo->io_virt + VIA_REG_CR_TRANSPACE);
- writel(dwVQStartL,
- viaparinfo->io_virt + VIA_REG_CR_TRANSPACE);
- writel(dwVQEndL,
- viaparinfo->io_virt + VIA_REG_CR_TRANSPACE);
- writel(dwVQLen,
- viaparinfo->io_virt + VIA_REG_CR_TRANSPACE);
- writel(0x74301001,
- viaparinfo->io_virt + VIA_REG_CR_TRANSPACE);
- writel(0x00000000,
- viaparinfo->io_virt + VIA_REG_CR_TRANSPACE);
- break;
- default:
- writel(0x00FE0000,
- viaparinfo->io_virt + VIA_REG_TRANSET);
- writel(0x080003FE,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x0A00027C,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x0B000260,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x0C000274,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x0D000264,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x0E000000,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x0F000020,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x1000027E,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x110002FE,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x200F0060,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
-
- writel(0x00000006,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x40008C0F,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x44000000,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x45080C04,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x46800408,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
-
- writel(dwVQStartEndH,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(dwVQStartL,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(dwVQEndL,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(dwVQLen,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- break;
- }
- } else {
- /* Disable VQ */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_K8M890:
- case UNICHROME_P4M900:
- writel(0x00100000,
- viaparinfo->io_virt + VIA_REG_CR_TRANSET);
- writel(0x74301000,
- viaparinfo->io_virt + VIA_REG_CR_TRANSPACE);
- break;
- default:
- writel(0x00FE0000,
- viaparinfo->io_virt + VIA_REG_TRANSET);
- writel(0x00000004,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x40008C0F,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x44000000,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x45080C04,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- writel(0x46800408,
- viaparinfo->io_virt + VIA_REG_TRANSPACE);
- break;
- }
- }
-
- viafb_set_2d_color_depth(viaparinfo->bpp);
-
- writel(0x0, viaparinfo->io_virt + VIA_REG_SRCBASE);
- writel(0x0, viaparinfo->io_virt + VIA_REG_DSTBASE);
-
- writel(VIA_PITCH_ENABLE |
- (((viaparinfo->hres *
- viaparinfo->bpp >> 3) >> 3) | (((viaparinfo->hres *
- viaparinfo->
- bpp >> 3) >> 3) << 16)),
- viaparinfo->io_virt + VIA_REG_PITCH);
-}
-
-void viafb_set_2d_color_depth(int bpp)
-{
- u32 dwGEMode;
-
- dwGEMode = readl(viaparinfo->io_virt + 0x04) & 0xFFFFFCFF;
-
- switch (bpp) {
- case 16:
- dwGEMode |= VIA_GEM_16bpp;
- break;
- case 32:
- dwGEMode |= VIA_GEM_32bpp;
- break;
- default:
- dwGEMode |= VIA_GEM_8bpp;
- break;
- }
-
- /* Set BPP and Pitch */
- writel(dwGEMode, viaparinfo->io_virt + VIA_REG_GEMODE);
-}
-
-void viafb_hw_cursor_init(void)
-{
- /* Set Cursor Image Base Address */
- writel(viaparinfo->cursor_start,
- viaparinfo->io_virt + VIA_REG_CURSOR_MODE);
- writel(0x0, viaparinfo->io_virt + VIA_REG_CURSOR_POS);
- writel(0x0, viaparinfo->io_virt + VIA_REG_CURSOR_ORG);
- writel(0x0, viaparinfo->io_virt + VIA_REG_CURSOR_BG);
- writel(0x0, viaparinfo->io_virt + VIA_REG_CURSOR_FG);
-}
-
-void viafb_show_hw_cursor(struct fb_info *info, int Status)
-{
- u32 temp;
- u32 iga_path = ((struct viafb_par *)(info->par))->iga_path;
-
- temp = readl(viaparinfo->io_virt + VIA_REG_CURSOR_MODE);
- switch (Status) {
- case HW_Cursor_ON:
- temp |= 0x1;
- break;
- case HW_Cursor_OFF:
- temp &= 0xFFFFFFFE;
- break;
- }
- switch (iga_path) {
- case IGA2:
- temp |= 0x80000000;
- break;
- case IGA1:
- default:
- temp &= 0x7FFFFFFF;
- }
- writel(temp, viaparinfo->io_virt + VIA_REG_CURSOR_MODE);
-}
-
-int viafb_wait_engine_idle(void)
-{
- int loop = 0;
-
- while (!(readl(viaparinfo->io_virt + VIA_REG_STATUS) &
- VIA_VR_QUEUE_BUSY) && (loop++ < MAXLOOP))
- cpu_relax();
-
- while ((readl(viaparinfo->io_virt + VIA_REG_STATUS) &
- (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY | VIA_3D_ENG_BUSY)) &&
- (loop++ < MAXLOOP))
- cpu_relax();
-
- return loop >= MAXLOOP;
-}
diff --git a/drivers/video/via/accel.h b/drivers/video/via/accel.h
deleted file mode 100644
index 29bf854e8cc..00000000000
--- a/drivers/video/via/accel.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __ACCEL_H__
-#define __ACCEL_H__
-
-#define FB_ACCEL_VIA_UNICHROME 50
-
-/* MMIO Base Address Definition */
-#define MMIO_VGABASE 0x8000
-#define MMIO_CR_READ (MMIO_VGABASE + 0x3D4)
-#define MMIO_CR_WRITE (MMIO_VGABASE + 0x3D5)
-#define MMIO_SR_READ (MMIO_VGABASE + 0x3C4)
-#define MMIO_SR_WRITE (MMIO_VGABASE + 0x3C5)
-
-/* HW Cursor Status Define */
-#define HW_Cursor_ON 0
-#define HW_Cursor_OFF 1
-
-#define CURSOR_SIZE (8 * 1024)
-#define VQ_SIZE (256 * 1024)
-
-#define VIA_MMIO_BLTBASE 0x200000
-#define VIA_MMIO_BLTSIZE 0x200000
-
-/* Defines for 2D registers */
-#define VIA_REG_GECMD 0x000
-#define VIA_REG_GEMODE 0x004
-#define VIA_REG_SRCPOS 0x008
-#define VIA_REG_DSTPOS 0x00C
-/* width and height */
-#define VIA_REG_DIMENSION 0x010
-#define VIA_REG_PATADDR 0x014
-#define VIA_REG_FGCOLOR 0x018
-#define VIA_REG_BGCOLOR 0x01C
-/* top and left of clipping */
-#define VIA_REG_CLIPTL 0x020
-/* bottom and right of clipping */
-#define VIA_REG_CLIPBR 0x024
-#define VIA_REG_OFFSET 0x028
-/* color key control */
-#define VIA_REG_KEYCONTROL 0x02C
-#define VIA_REG_SRCBASE 0x030
-#define VIA_REG_DSTBASE 0x034
-/* pitch of src and dst */
-#define VIA_REG_PITCH 0x038
-#define VIA_REG_MONOPAT0 0x03C
-#define VIA_REG_MONOPAT1 0x040
-/* from 0x100 to 0x1ff */
-#define VIA_REG_COLORPAT 0x100
-
-/* VIA_REG_PITCH(0x38): Pitch Setting */
-#define VIA_PITCH_ENABLE 0x80000000
-
-/* defines for VIA HW cursor registers */
-#define VIA_REG_CURSOR_MODE 0x2D0
-#define VIA_REG_CURSOR_POS 0x2D4
-#define VIA_REG_CURSOR_ORG 0x2D8
-#define VIA_REG_CURSOR_BG 0x2DC
-#define VIA_REG_CURSOR_FG 0x2E0
-
-/* VIA_REG_GEMODE(0x04): GE mode */
-#define VIA_GEM_8bpp 0x00000000
-#define VIA_GEM_16bpp 0x00000100
-#define VIA_GEM_32bpp 0x00000300
-
-/* VIA_REG_GECMD(0x00): 2D Engine Command */
-#define VIA_GEC_NOOP 0x00000000
-#define VIA_GEC_BLT 0x00000001
-#define VIA_GEC_LINE 0x00000005
-
-/* Rotate Command */
-#define VIA_GEC_ROT 0x00000008
-
-#define VIA_GEC_SRC_XY 0x00000000
-#define VIA_GEC_SRC_LINEAR 0x00000010
-#define VIA_GEC_DST_XY 0x00000000
-#define VIA_GEC_DST_LINRAT 0x00000020
-
-#define VIA_GEC_SRC_FB 0x00000000
-#define VIA_GEC_SRC_SYS 0x00000040
-#define VIA_GEC_DST_FB 0x00000000
-#define VIA_GEC_DST_SYS 0x00000080
-
-/* source is mono */
-#define VIA_GEC_SRC_MONO 0x00000100
-/* pattern is mono */
-#define VIA_GEC_PAT_MONO 0x00000200
-/* mono src is opaque */
-#define VIA_GEC_MSRC_OPAQUE 0x00000000
-/* mono src is transparent */
-#define VIA_GEC_MSRC_TRANS 0x00000400
-/* pattern is in frame buffer */
-#define VIA_GEC_PAT_FB 0x00000000
-/* pattern is from reg setting */
-#define VIA_GEC_PAT_REG 0x00000800
-
-#define VIA_GEC_CLIP_DISABLE 0x00000000
-#define VIA_GEC_CLIP_ENABLE 0x00001000
-
-#define VIA_GEC_FIXCOLOR_PAT 0x00002000
-
-#define VIA_GEC_INCX 0x00000000
-#define VIA_GEC_DECY 0x00004000
-#define VIA_GEC_INCY 0x00000000
-#define VIA_GEC_DECX 0x00008000
-/* mono pattern is opaque */
-#define VIA_GEC_MPAT_OPAQUE 0x00000000
-/* mono pattern is transparent */
-#define VIA_GEC_MPAT_TRANS 0x00010000
-
-#define VIA_GEC_MONO_UNPACK 0x00000000
-#define VIA_GEC_MONO_PACK 0x00020000
-#define VIA_GEC_MONO_DWORD 0x00000000
-#define VIA_GEC_MONO_WORD 0x00040000
-#define VIA_GEC_MONO_BYTE 0x00080000
-
-#define VIA_GEC_LASTPIXEL_ON 0x00000000
-#define VIA_GEC_LASTPIXEL_OFF 0x00100000
-#define VIA_GEC_X_MAJOR 0x00000000
-#define VIA_GEC_Y_MAJOR 0x00200000
-#define VIA_GEC_QUICK_START 0x00800000
-
-/* defines for VIA 3D registers */
-#define VIA_REG_STATUS 0x400
-#define VIA_REG_CR_TRANSET 0x41C
-#define VIA_REG_CR_TRANSPACE 0x420
-#define VIA_REG_TRANSET 0x43C
-#define VIA_REG_TRANSPACE 0x440
-
-/* VIA_REG_STATUS(0x400): Engine Status */
-
-/* Command Regulator is busy */
-#define VIA_CMD_RGTR_BUSY 0x00000080
-/* 2D Engine is busy */
-#define VIA_2D_ENG_BUSY 0x00000002
-/* 3D Engine is busy */
-#define VIA_3D_ENG_BUSY 0x00000001
-/* Virtual Queue is busy */
-#define VIA_VR_QUEUE_BUSY 0x00020000
-
-#define MAXLOOP 0xFFFFFF
-
-void viafb_init_accel(void);
-void viafb_init_2d_engine(void);
-void set_2d_color_depth(int);
-void viafb_hw_cursor_init(void);
-void viafb_show_hw_cursor(struct fb_info *info, int Status); int
-viafb_wait_engine_idle(void); void viafb_set_2d_color_depth(int bpp);
-
-#endif /* __ACCEL_H__ */
diff --git a/drivers/video/via/chip.h b/drivers/video/via/chip.h
deleted file mode 100644
index dde95edc387..00000000000
--- a/drivers/video/via/chip.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#ifndef __CHIP_H__
-#define __CHIP_H__
-
-#include "global.h"
-
-/***************************************/
-/* Definition Graphic Chip Information */
-/***************************************/
-
-#define PCI_VIA_VENDOR_ID 0x1106
-
-/* Define VIA Graphic Chip Name */
-#define UNICHROME_CLE266 1
-#define UNICHROME_CLE266_DID 0x3122
-#define CLE266_REVISION_AX 0x0A
-#define CLE266_REVISION_CX 0x0C
-
-#define UNICHROME_K400 2
-#define UNICHROME_K400_DID 0x7205
-
-#define UNICHROME_K800 3
-#define UNICHROME_K800_DID 0x3108
-
-#define UNICHROME_PM800 4
-#define UNICHROME_PM800_DID 0x3118
-
-#define UNICHROME_CN700 5
-#define UNICHROME_CN700_DID 0x3344
-
-#define UNICHROME_CX700 6
-#define UNICHROME_CX700_DID 0x3157
-#define CX700_REVISION_700 0x0
-#define CX700_REVISION_700M 0x1
-#define CX700_REVISION_700M2 0x2
-
-#define UNICHROME_CN750 7
-#define UNICHROME_CN750_DID 0x3225
-
-#define UNICHROME_K8M890 8
-#define UNICHROME_K8M890_DID 0x3230
-
-#define UNICHROME_P4M890 9
-#define UNICHROME_P4M890_DID 0x3343
-
-#define UNICHROME_P4M900 10
-#define UNICHROME_P4M900_DID 0x3371
-
-#define UNICHROME_VX800 11
-#define UNICHROME_VX800_DID 0x1122
-
-/**************************************************/
-/* Definition TMDS Trasmitter Information */
-/**************************************************/
-
-/* Definition TMDS Trasmitter Index */
-#define NON_TMDS_TRANSMITTER 0x00
-#define VT1632_TMDS 0x01
-#define INTEGRATED_TMDS 0x42
-
-/* Definition TMDS Trasmitter I2C Slave Address */
-#define VT1632_TMDS_I2C_ADDR 0x10
-
-/**************************************************/
-/* Definition LVDS Trasmitter Information */
-/**************************************************/
-
-/* Definition LVDS Trasmitter Index */
-#define NON_LVDS_TRANSMITTER 0x00
-#define VT1631_LVDS 0x01
-#define VT1636_LVDS 0x0E
-#define INTEGRATED_LVDS 0x41
-
-/* Definition Digital Transmitter Mode */
-#define TX_DATA_12_BITS 0x01
-#define TX_DATA_24_BITS 0x02
-#define TX_DATA_DDR_MODE 0x04
-#define TX_DATA_SDR_MODE 0x08
-
-/* Definition LVDS Trasmitter I2C Slave Address */
-#define VT1631_LVDS_I2C_ADDR 0x70
-#define VT3271_LVDS_I2C_ADDR 0x80
-#define VT1636_LVDS_I2C_ADDR 0x80
-
-struct tmds_chip_information {
- int tmds_chip_name;
- int tmds_chip_slave_addr;
- int dvi_panel_id;
- int data_mode;
- int output_interface;
- int i2c_port;
- int device_type;
-};
-
-struct lvds_chip_information {
- int lvds_chip_name;
- int lvds_chip_slave_addr;
- int data_mode;
- int output_interface;
- int i2c_port;
-};
-
-struct chip_information {
- int gfx_chip_name;
- int gfx_chip_revision;
- int chip_on_slot;
- struct tmds_chip_information tmds_chip_info;
- struct lvds_chip_information lvds_chip_info;
- struct lvds_chip_information lvds_chip_info2;
-};
-
-struct crt_setting_information {
- int iga_path;
- int h_active;
- int v_active;
- int bpp;
- int refresh_rate;
-};
-
-struct tmds_setting_information {
- int iga_path;
- int h_active;
- int v_active;
- int bpp;
- int refresh_rate;
- int get_dvi_size_method;
- int max_pixel_clock;
- int dvi_panel_size;
- int dvi_panel_hres;
- int dvi_panel_vres;
- int native_size;
-};
-
-struct lvds_setting_information {
- int iga_path;
- int h_active;
- int v_active;
- int bpp;
- int refresh_rate;
- int get_lcd_size_method;
- int lcd_panel_id;
- int lcd_panel_size;
- int lcd_panel_hres;
- int lcd_panel_vres;
- int display_method;
- int device_lcd_dualedge;
- int LCDDithering;
- int lcd_mode;
- u32 vclk; /*panel mode clock value */
-};
-
-struct GFX_DPA_SETTING {
- int ClkRangeIndex;
- u8 DVP0; /* CR96[3:0] */
- u8 DVP0DataDri_S1; /* SR2A[5] */
- u8 DVP0DataDri_S; /* SR1B[1] */
- u8 DVP0ClockDri_S1; /* SR2A[4] */
- u8 DVP0ClockDri_S; /* SR1E[2] */
- u8 DVP1; /* CR9B[3:0] */
- u8 DVP1Driving; /* SR65[3:0], Data and Clock driving */
- u8 DFPHigh; /* CR97[3:0] */
- u8 DFPLow; /* CR99[3:0] */
-
-};
-
-struct VT1636_DPA_SETTING {
- int PanelSizeID;
- u8 CLK_SEL_ST1;
- u8 CLK_SEL_ST2;
-};
-#endif /* __CHIP_H__ */
diff --git a/drivers/video/via/debug.h b/drivers/video/via/debug.h
deleted file mode 100644
index 86eacc2017f..00000000000
--- a/drivers/video/via/debug.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#ifndef __DEBUG_H__
-#define __DEBUG_H__
-
-#ifndef VIAFB_DEBUG
-#define VIAFB_DEBUG 0
-#endif
-
-#if VIAFB_DEBUG
-#define DEBUG_MSG(f, a...) printk(f, ## a)
-#else
-#define DEBUG_MSG(f, a...)
-#endif
-
-#define VIAFB_WARN 0
-#if VIAFB_WARN
-#define WARN_MSG(f, a...) printk(f, ## a)
-#else
-#define WARN_MSG(f, a...)
-#endif
-
-#endif /* __DEBUG_H__ */
diff --git a/drivers/video/via/dvi.c b/drivers/video/via/dvi.c
deleted file mode 100644
index d6965447ca6..00000000000
--- a/drivers/video/via/dvi.c
+++ /dev/null
@@ -1,682 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#include "global.h"
-
-static void tmds_register_write(int index, u8 data);
-static int tmds_register_read(int index);
-static int tmds_register_read_bytes(int index, u8 *buff, int buff_len);
-static int check_reduce_blanking_mode(int mode_index,
- int refresh_rate);
-static int dvi_get_panel_size_from_DDCv1(void);
-static int dvi_get_panel_size_from_DDCv2(void);
-static unsigned char dvi_get_panel_info(void);
-static int viafb_dvi_query_EDID(void);
-
-static int check_tmds_chip(int device_id_subaddr, int device_id)
-{
- if (tmds_register_read(device_id_subaddr) == device_id)
- return OK;
- else
- return FAIL;
-}
-
-void viafb_init_dvi_size(void)
-{
- DEBUG_MSG(KERN_INFO "viafb_init_dvi_size()\n");
- DEBUG_MSG(KERN_INFO
- "viaparinfo->tmds_setting_info->get_dvi_size_method %d\n",
- viaparinfo->tmds_setting_info->get_dvi_size_method);
-
- switch (viaparinfo->tmds_setting_info->get_dvi_size_method) {
- case GET_DVI_SIZE_BY_SYSTEM_BIOS:
- break;
- case GET_DVI_SZIE_BY_HW_STRAPPING:
- break;
- case GET_DVI_SIZE_BY_VGA_BIOS:
- default:
- dvi_get_panel_info();
- break;
- }
- return;
-}
-
-int viafb_tmds_trasmitter_identify(void)
-{
- unsigned char sr2a = 0, sr1e = 0, sr3e = 0;
-
- /* Turn on ouputting pad */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_K8M890:
- /*=* DFP Low Pad on *=*/
- sr2a = viafb_read_reg(VIASR, SR2A);
- viafb_write_reg_mask(SR2A, VIASR, 0x03, BIT0 + BIT1);
- break;
-
- case UNICHROME_P4M900:
- case UNICHROME_P4M890:
- /* DFP Low Pad on */
- sr2a = viafb_read_reg(VIASR, SR2A);
- viafb_write_reg_mask(SR2A, VIASR, 0x03, BIT0 + BIT1);
- /* DVP0 Pad on */
- sr1e = viafb_read_reg(VIASR, SR1E);
- viafb_write_reg_mask(SR1E, VIASR, 0xC0, BIT6 + BIT7);
- break;
-
- default:
- /* DVP0/DVP1 Pad on */
- sr1e = viafb_read_reg(VIASR, SR1E);
- viafb_write_reg_mask(SR1E, VIASR, 0xF0, BIT4 +
- BIT5 + BIT6 + BIT7);
- /* SR3E[1]Multi-function selection:
- 0 = Emulate I2C and DDC bus by GPIO2/3/4. */
- sr3e = viafb_read_reg(VIASR, SR3E);
- viafb_write_reg_mask(SR3E, VIASR, 0x0, BIT5);
- break;
- }
-
- /* Check for VT1632: */
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_name = VT1632_TMDS;
- viaparinfo->chip_info->
- tmds_chip_info.tmds_chip_slave_addr = VT1632_TMDS_I2C_ADDR;
- viaparinfo->chip_info->tmds_chip_info.i2c_port = I2CPORTINDEX;
- if (check_tmds_chip(VT1632_DEVICE_ID_REG, VT1632_DEVICE_ID) != FAIL) {
- /*
- * Currently only support 12bits,dual edge,add 24bits mode later
- */
- tmds_register_write(0x08, 0x3b);
-
- DEBUG_MSG(KERN_INFO "\n VT1632 TMDS ! \n");
- DEBUG_MSG(KERN_INFO "\n %2d",
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_name);
- DEBUG_MSG(KERN_INFO "\n %2d",
- viaparinfo->chip_info->tmds_chip_info.i2c_port);
- return OK;
- } else {
- viaparinfo->chip_info->tmds_chip_info.i2c_port = GPIOPORTINDEX;
- if (check_tmds_chip(VT1632_DEVICE_ID_REG, VT1632_DEVICE_ID)
- != FAIL) {
- tmds_register_write(0x08, 0x3b);
- DEBUG_MSG(KERN_INFO "\n VT1632 TMDS ! \n");
- DEBUG_MSG(KERN_INFO "\n %2d",
- viaparinfo->chip_info->
- tmds_chip_info.tmds_chip_name);
- DEBUG_MSG(KERN_INFO "\n %2d",
- viaparinfo->chip_info->
- tmds_chip_info.i2c_port);
- return OK;
- }
- }
-
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_name = INTEGRATED_TMDS;
-
- if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700) &&
- ((viafb_display_hardware_layout == HW_LAYOUT_DVI_ONLY) ||
- (viafb_display_hardware_layout == HW_LAYOUT_LCD_DVI))) {
- DEBUG_MSG(KERN_INFO "\n Integrated TMDS ! \n");
- return OK;
- }
-
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_K8M890:
- viafb_write_reg(SR2A, VIASR, sr2a);
- break;
-
- case UNICHROME_P4M900:
- case UNICHROME_P4M890:
- viafb_write_reg(SR2A, VIASR, sr2a);
- viafb_write_reg(SR1E, VIASR, sr1e);
- break;
-
- default:
- viafb_write_reg(SR1E, VIASR, sr1e);
- viafb_write_reg(SR3E, VIASR, sr3e);
- break;
- }
-
- viaparinfo->chip_info->
- tmds_chip_info.tmds_chip_name = NON_TMDS_TRANSMITTER;
- viaparinfo->chip_info->tmds_chip_info.
- tmds_chip_slave_addr = VT1632_TMDS_I2C_ADDR;
- return FAIL;
-}
-
-static void tmds_register_write(int index, u8 data)
-{
- viaparinfo->i2c_stuff.i2c_port =
- viaparinfo->chip_info->tmds_chip_info.i2c_port;
-
- viafb_i2c_writebyte(viaparinfo->chip_info->tmds_chip_info.
- tmds_chip_slave_addr, index,
- data);
-}
-
-static int tmds_register_read(int index)
-{
- u8 data;
-
- viaparinfo->i2c_stuff.i2c_port =
- viaparinfo->chip_info->tmds_chip_info.i2c_port;
- viafb_i2c_readbyte((u8) viaparinfo->chip_info->
- tmds_chip_info.tmds_chip_slave_addr,
- (u8) index, &data);
- return data;
-}
-
-static int tmds_register_read_bytes(int index, u8 *buff, int buff_len)
-{
- viaparinfo->i2c_stuff.i2c_port =
- viaparinfo->chip_info->tmds_chip_info.i2c_port;
- viafb_i2c_readbytes((u8) viaparinfo->chip_info->tmds_chip_info.
- tmds_chip_slave_addr, (u8) index, buff, buff_len);
- return 0;
-}
-
-static int check_reduce_blanking_mode(int mode_index,
- int refresh_rate)
-{
- if (refresh_rate != 60)
- return false;
-
- switch (mode_index) {
- /* Following modes have reduce blanking mode. */
- case VIA_RES_1360X768:
- case VIA_RES_1400X1050:
- case VIA_RES_1440X900:
- case VIA_RES_1600X900:
- case VIA_RES_1680X1050:
- case VIA_RES_1920X1080:
- case VIA_RES_1920X1200:
- break;
-
- default:
- DEBUG_MSG(KERN_INFO
- "This dvi mode %d have no reduce blanking mode!\n",
- mode_index);
- return false;
- }
-
- return true;
-}
-
-/* DVI Set Mode */
-void viafb_dvi_set_mode(int video_index, int mode_bpp, int set_iga)
-{
- struct VideoModeTable *videoMode = NULL;
- struct crt_mode_table *pDviTiming;
- unsigned long desirePixelClock, maxPixelClock;
- int status = 0;
- videoMode = viafb_get_modetbl_pointer(video_index);
- pDviTiming = videoMode->crtc;
- desirePixelClock = pDviTiming->clk / 1000000;
- maxPixelClock = (unsigned long)viaparinfo->
- tmds_setting_info->max_pixel_clock;
-
- DEBUG_MSG(KERN_INFO "\nDVI_set_mode!!\n");
-
- if ((maxPixelClock != 0) && (desirePixelClock > maxPixelClock)) {
- /*Check if reduce-blanking mode is exist */
- status =
- check_reduce_blanking_mode(video_index,
- pDviTiming->refresh_rate);
- if (status) {
- video_index += 100; /*Use reduce-blanking mode */
- videoMode = viafb_get_modetbl_pointer(video_index);
- pDviTiming = videoMode->crtc;
- DEBUG_MSG(KERN_INFO
- "DVI use reduce blanking mode %d!!\n",
- video_index);
- }
- }
- viafb_fill_crtc_timing(pDviTiming, video_index, mode_bpp / 8, set_iga);
- viafb_set_output_path(DEVICE_DVI, set_iga,
- viaparinfo->chip_info->tmds_chip_info.output_interface);
-}
-
-/* Sense DVI Connector */
-int viafb_dvi_sense(void)
-{
- u8 RegSR1E = 0, RegSR3E = 0, RegCR6B = 0, RegCR91 = 0,
- RegCR93 = 0, RegCR9B = 0, data;
- int ret = false;
-
- DEBUG_MSG(KERN_INFO "viafb_dvi_sense!!\n");
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) {
- /* DI1 Pad on */
- RegSR1E = viafb_read_reg(VIASR, SR1E);
- viafb_write_reg(SR1E, VIASR, RegSR1E | 0x30);
-
- /* CR6B[0]VCK Input Selection: 1 = External clock. */
- RegCR6B = viafb_read_reg(VIACR, CR6B);
- viafb_write_reg(CR6B, VIACR, RegCR6B | 0x08);
-
- /* CR91[4] VDD On [3] Data On [2] VEE On [1] Back Light Off
- [0] Software Control Power Sequence */
- RegCR91 = viafb_read_reg(VIACR, CR91);
- viafb_write_reg(CR91, VIACR, 0x1D);
-
- /* CR93[7] DI1 Data Source Selection: 1 = DSP2.
- CR93[5] DI1 Clock Source: 1 = internal.
- CR93[4] DI1 Clock Polarity.
- CR93[3:1] DI1 Clock Adjust. CR93[0] DI1 enable */
- RegCR93 = viafb_read_reg(VIACR, CR93);
- viafb_write_reg(CR93, VIACR, 0x01);
- } else {
- /* DVP0/DVP1 Pad on */
- RegSR1E = viafb_read_reg(VIASR, SR1E);
- viafb_write_reg(SR1E, VIASR, RegSR1E | 0xF0);
-
- /* SR3E[1]Multi-function selection:
- 0 = Emulate I2C and DDC bus by GPIO2/3/4. */
- RegSR3E = viafb_read_reg(VIASR, SR3E);
- viafb_write_reg(SR3E, VIASR, RegSR3E & (~0x20));
-
- /* CR91[4] VDD On [3] Data On [2] VEE On [1] Back Light Off
- [0] Software Control Power Sequence */
- RegCR91 = viafb_read_reg(VIACR, CR91);
- viafb_write_reg(CR91, VIACR, 0x1D);
-
- /*CR9B[4] DVP1 Data Source Selection: 1 = From secondary
- display.CR9B[2:0] DVP1 Clock Adjust */
- RegCR9B = viafb_read_reg(VIACR, CR9B);
- viafb_write_reg(CR9B, VIACR, 0x01);
- }
-
- data = (u8) tmds_register_read(0x09);
- if (data & 0x04)
- ret = true;
-
- if (ret == false) {
- if (viafb_dvi_query_EDID())
- ret = true;
- }
-
- /* Restore status */
- viafb_write_reg(SR1E, VIASR, RegSR1E);
- viafb_write_reg(CR91, VIACR, RegCR91);
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) {
- viafb_write_reg(CR6B, VIACR, RegCR6B);
- viafb_write_reg(CR93, VIACR, RegCR93);
- } else {
- viafb_write_reg(SR3E, VIASR, RegSR3E);
- viafb_write_reg(CR9B, VIACR, RegCR9B);
- }
-
- return ret;
-}
-
-/* Query Flat Panel's EDID Table Version Through DVI Connector */
-static int viafb_dvi_query_EDID(void)
-{
- u8 data0, data1;
- int restore;
-
- DEBUG_MSG(KERN_INFO "viafb_dvi_query_EDID!!\n");
-
- restore = viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr;
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = 0xA0;
-
- data0 = (u8) tmds_register_read(0x00);
- data1 = (u8) tmds_register_read(0x01);
- if ((data0 == 0) && (data1 == 0xFF)) {
- viaparinfo->chip_info->
- tmds_chip_info.tmds_chip_slave_addr = restore;
- return EDID_VERSION_1; /* Found EDID1 Table */
- }
-
- data0 = (u8) tmds_register_read(0x00);
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = restore;
- if (data0 == 0x20)
- return EDID_VERSION_2; /* Found EDID2 Table */
- else
- return false;
-}
-
-/*
- *
- * int dvi_get_panel_size_from_DDCv1(void)
- *
- * - Get Panel Size Using EDID1 Table
- *
- * Return Type: int
- *
- */
-static int dvi_get_panel_size_from_DDCv1(void)
-{
- int i, max_h = 0, max_v = 0, tmp, restore;
- unsigned char rData;
- unsigned char EDID_DATA[18];
-
- DEBUG_MSG(KERN_INFO "\n dvi_get_panel_size_from_DDCv1 \n");
-
- restore = viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr;
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = 0xA0;
-
- rData = tmds_register_read(0x23);
- if (rData & 0x3C)
- max_h = 640;
- if (rData & 0xC0)
- max_h = 720;
- if (rData & 0x03)
- max_h = 800;
-
- rData = tmds_register_read(0x24);
- if (rData & 0xC0)
- max_h = 800;
- if (rData & 0x1E)
- max_h = 1024;
- if (rData & 0x01)
- max_h = 1280;
-
- for (i = 0x25; i < 0x6D; i++) {
- switch (i) {
- case 0x26:
- case 0x28:
- case 0x2A:
- case 0x2C:
- case 0x2E:
- case 0x30:
- case 0x32:
- case 0x34:
- rData = tmds_register_read(i);
- if (rData == 1)
- break;
- /* data = (data + 31) * 8 */
- tmp = (rData + 31) << 3;
- if (tmp > max_h)
- max_h = tmp;
- break;
-
- case 0x36:
- case 0x48:
- case 0x5A:
- case 0x6C:
- tmds_register_read_bytes(i, EDID_DATA, 10);
- if (!(EDID_DATA[0] || EDID_DATA[1])) {
- /* The first two byte must be zero. */
- if (EDID_DATA[3] == 0xFD) {
- /* To get max pixel clock. */
- viaparinfo->tmds_setting_info->
- max_pixel_clock = EDID_DATA[9] * 10;
- }
- }
- break;
-
- default:
- break;
- }
- }
-
- switch (max_h) {
- case 640:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_640X480;
- break;
- case 800:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_800X600;
- break;
- case 1024:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1024X768;
- break;
- case 1280:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1280X1024;
- break;
- case 1400:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1400X1050;
- break;
- case 1440:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1440X1050;
- break;
- case 1600:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1600X1200;
- break;
- case 1920:
- if (max_v == 1200) {
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1920X1200;
- } else {
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1920X1080;
- }
-
- break;
- default:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1024X768;
- DEBUG_MSG(KERN_INFO "Unknow panel size max resolution = %d !\
- set default panel size.\n", max_h);
- break;
- }
-
- DEBUG_MSG(KERN_INFO "DVI max pixelclock = %d\n",
- viaparinfo->tmds_setting_info->max_pixel_clock);
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = restore;
- return viaparinfo->tmds_setting_info->dvi_panel_size;
-}
-
-/*
- *
- * int dvi_get_panel_size_from_DDCv2(void)
- *
- * - Get Panel Size Using EDID2 Table
- *
- * Return Type: int
- *
- */
-static int dvi_get_panel_size_from_DDCv2(void)
-{
- int HSize = 0, restore;
- unsigned char R_Buffer[2];
-
- DEBUG_MSG(KERN_INFO "\n dvi_get_panel_size_from_DDCv2 \n");
-
- restore = viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr;
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = 0xA2;
-
- /* Horizontal: 0x76, 0x77 */
- tmds_register_read_bytes(0x76, R_Buffer, 2);
- HSize = R_Buffer[0];
- HSize += R_Buffer[1] << 8;
-
- switch (HSize) {
- case 640:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_640X480;
- break;
- case 800:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_800X600;
- break;
- case 1024:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1024X768;
- break;
- case 1280:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1280X1024;
- break;
- case 1400:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1400X1050;
- break;
- case 1440:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1440X1050;
- break;
- case 1600:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1600X1200;
- break;
- default:
- viaparinfo->tmds_setting_info->dvi_panel_size =
- VIA_RES_1024X768;
- DEBUG_MSG(KERN_INFO "Unknow panel size max resolution = %d!\
- set default panel size.\n", HSize);
- break;
- }
-
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_slave_addr = restore;
- return viaparinfo->tmds_setting_info->dvi_panel_size;
-}
-
-/*
- *
- * unsigned char dvi_get_panel_info(void)
- *
- * - Get Panel Size
- *
- * Return Type: unsigned char
- */
-static unsigned char dvi_get_panel_info(void)
-{
- unsigned char dvipanelsize;
- DEBUG_MSG(KERN_INFO "dvi_get_panel_info! \n");
-
- viafb_dvi_sense();
- switch (viafb_dvi_query_EDID()) {
- case 1:
- dvi_get_panel_size_from_DDCv1();
- break;
- case 2:
- dvi_get_panel_size_from_DDCv2();
- break;
- default:
- break;
- }
-
- DEBUG_MSG(KERN_INFO "dvi panel size is %2d \n",
- viaparinfo->tmds_setting_info->dvi_panel_size);
- dvipanelsize = (unsigned char)(viaparinfo->
- tmds_setting_info->dvi_panel_size);
- return dvipanelsize;
-}
-
-/* If Disable DVI, turn off pad */
-void viafb_dvi_disable(void)
-{
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_DVP0)
- viafb_write_reg(SR1E, VIASR,
- viafb_read_reg(VIASR, SR1E) & (~0xC0));
-
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_DVP1)
- viafb_write_reg(SR1E, VIASR,
- viafb_read_reg(VIASR, SR1E) & (~0x30));
-
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_DFP_HIGH)
- viafb_write_reg(SR2A, VIASR,
- viafb_read_reg(VIASR, SR2A) & (~0x0C));
-
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_DFP_LOW)
- viafb_write_reg(SR2A, VIASR,
- viafb_read_reg(VIASR, SR2A) & (~0x03));
-
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_TMDS)
- /* Turn off TMDS power. */
- viafb_write_reg(CRD2, VIACR,
- viafb_read_reg(VIACR, CRD2) | 0x08);
-}
-
-/* If Enable DVI, turn off pad */
-void viafb_dvi_enable(void)
-{
- u8 data;
-
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_DVP0) {
- viafb_write_reg(SR1E, VIASR,
- viafb_read_reg(VIASR, SR1E) | 0xC0);
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)
- tmds_register_write(0x88, 0x3b);
- else
- /*clear CR91[5] to direct on display period
- in the secondary diplay path */
- viafb_write_reg(CR91, VIACR,
- viafb_read_reg(VIACR, CR91) & 0xDF);
- }
-
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_DVP1) {
- viafb_write_reg(SR1E, VIASR,
- viafb_read_reg(VIASR, SR1E) | 0x30);
-
- /*fix dvi cann't be enabled with MB VT5718C4 - Al Zhang */
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) {
- tmds_register_write(0x88, 0x3b);
- } else {
- /*clear CR91[5] to direct on display period
- in the secondary diplay path */
- viafb_write_reg(CR91, VIACR,
- viafb_read_reg(VIACR, CR91) & 0xDF);
- }
-
- /*fix DVI cannot enable on EPIA-M board */
- if (viafb_platform_epia_dvi == 1) {
- viafb_write_reg_mask(CR91, VIACR, 0x1f, 0x1f);
- viafb_write_reg_mask(CR88, VIACR, 0x00, BIT6 + BIT0);
- if (viafb_bus_width == 24) {
- if (viafb_device_lcd_dualedge == 1)
- data = 0x3F;
- else
- data = 0x37;
- viafb_i2c_writebyte(viaparinfo->chip_info->
- tmds_chip_info.
- tmds_chip_slave_addr,
- 0x08, data);
- }
- }
- }
-
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_DFP_HIGH) {
- viafb_write_reg(SR2A, VIASR,
- viafb_read_reg(VIASR, SR2A) | 0x0C);
- viafb_write_reg(CR91, VIACR,
- viafb_read_reg(VIACR, CR91) & 0xDF);
- }
-
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_DFP_LOW) {
- viafb_write_reg(SR2A, VIASR,
- viafb_read_reg(VIASR, SR2A) | 0x03);
- viafb_write_reg(CR91, VIACR,
- viafb_read_reg(VIACR, CR91) & 0xDF);
- }
- if (viaparinfo->chip_info->
- tmds_chip_info.output_interface == INTERFACE_TMDS) {
- /* Turn on Display period in the panel path. */
- viafb_write_reg_mask(CR91, VIACR, 0, BIT7);
-
- /* Turn on TMDS power. */
- viafb_write_reg_mask(CRD2, VIACR, 0, BIT3);
- }
-}
-
diff --git a/drivers/video/via/dvi.h b/drivers/video/via/dvi.h
deleted file mode 100644
index e1ec37fb0dc..00000000000
--- a/drivers/video/via/dvi.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __DVI_H__
-#define __DVI_H__
-
-/*Definition TMDS Device ID register*/
-#define VT1632_DEVICE_ID_REG 0x02
-#define VT1632_DEVICE_ID 0x92
-
-#define GET_DVI_SIZE_BY_SYSTEM_BIOS 0x01
-#define GET_DVI_SIZE_BY_VGA_BIOS 0x02
-#define GET_DVI_SZIE_BY_HW_STRAPPING 0x03
-
-/* Definition DVI Panel ID*/
-/* Resolution: 640x480, Channel: single, Dithering: Enable */
-#define DVI_PANEL_ID0_640X480 0x00
-/* Resolution: 800x600, Channel: single, Dithering: Enable */
-#define DVI_PANEL_ID1_800x600 0x01
-/* Resolution: 1024x768, Channel: single, Dithering: Enable */
-#define DVI_PANEL_ID1_1024x768 0x02
-/* Resolution: 1280x768, Channel: single, Dithering: Enable */
-#define DVI_PANEL_ID1_1280x768 0x03
-/* Resolution: 1280x1024, Channel: dual, Dithering: Enable */
-#define DVI_PANEL_ID1_1280x1024 0x04
-/* Resolution: 1400x1050, Channel: dual, Dithering: Enable */
-#define DVI_PANEL_ID1_1400x1050 0x05
-/* Resolution: 1600x1200, Channel: dual, Dithering: Enable */
-#define DVI_PANEL_ID1_1600x1200 0x06
-
-/* Define the version of EDID*/
-#define EDID_VERSION_1 1
-#define EDID_VERSION_2 2
-
-#define DEV_CONNECT_DVI 0x01
-#define DEV_CONNECT_HDMI 0x02
-
-struct VideoModeTable *viafb_get_cea_mode_tbl_pointer(int Index);
-int viafb_dvi_sense(void);
-void viafb_dvi_disable(void);
-void viafb_dvi_enable(void);
-int viafb_tmds_trasmitter_identify(void);
-void viafb_init_dvi_size(void);
-void viafb_dvi_set_mode(int video_index, int mode_bpp, int set_iga);
-
-#endif /* __DVI_H__ */
diff --git a/drivers/video/via/global.c b/drivers/video/via/global.c
deleted file mode 100644
index 468be2425af..00000000000
--- a/drivers/video/via/global.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#include "global.h"
-int viafb_platform_epia_dvi = STATE_OFF;
-int viafb_device_lcd_dualedge = STATE_OFF;
-int viafb_bus_width = 12;
-int viafb_display_hardware_layout = HW_LAYOUT_LCD_DVI;
-int viafb_memsize;
-int viafb_DeviceStatus = CRT_Device;
-int viafb_hotplug;
-int viafb_refresh = 60;
-int viafb_refresh1 = 60;
-int viafb_lcd_dsp_method = LCD_EXPANDSION;
-int viafb_lcd_mode = LCD_OPENLDI;
-int viafb_bpp = 32;
-int viafb_bpp1 = 32;
-int viafb_accel = 1;
-int viafb_CRT_ON = 1;
-int viafb_DVI_ON;
-int viafb_LCD_ON ;
-int viafb_LCD2_ON;
-int viafb_SAMM_ON;
-int viafb_dual_fb;
-int viafb_hotplug_Xres = 640;
-int viafb_hotplug_Yres = 480;
-int viafb_hotplug_bpp = 32;
-int viafb_hotplug_refresh = 60;
-unsigned int viafb_second_offset;
-int viafb_second_size;
-int viafb_primary_dev = None_Device;
-void __iomem *viafb_FB_MM;
-unsigned int viafb_second_xres = 640;
-unsigned int viafb_second_yres = 480;
-unsigned int viafb_second_virtual_xres;
-unsigned int viafb_second_virtual_yres;
-int viafb_lcd_panel_id = LCD_PANEL_ID_MAXIMUM + 1;
-struct fb_cursor viacursor;
-struct fb_info *viafbinfo;
-struct fb_info *viafbinfo1;
-struct viafb_par *viaparinfo;
-struct viafb_par *viaparinfo1;
-
diff --git a/drivers/video/via/global.h b/drivers/video/via/global.h
deleted file mode 100644
index 7543d5f7e30..00000000000
--- a/drivers/video/via/global.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GLOBAL_H__
-#define __GLOBAL_H__
-
-#include <linux/fb.h>
-#include <linux/delay.h>
-#include <linux/ioport.h>
-#include <linux/pci.h>
-#include <linux/io.h>
-#include <linux/uaccess.h>
-#include <linux/init.h>
-#include <linux/proc_fs.h>
-#include <linux/console.h>
-#include <linux/timer.h>
-
-#include "debug.h"
-
-#include "iface.h"
-#include "viafbdev.h"
-#include "chip.h"
-#include "accel.h"
-#include "share.h"
-#include "dvi.h"
-#include "viamode.h"
-#include "via_i2c.h"
-#include "hw.h"
-
-#include "lcd.h"
-#include "ioctl.h"
-#include "via_utility.h"
-#include "vt1636.h"
-#include "tblDPASetting.h"
-#include "tbl1636.h"
-
-/* External struct*/
-
-extern int viafb_platform_epia_dvi;
-extern int viafb_device_lcd_dualedge;
-extern int viafb_bus_width;
-extern int viafb_display_hardware_layout;
-extern struct offset offset_reg;
-extern struct viafb_par *viaparinfo;
-extern struct viafb_par *viaparinfo1;
-extern struct fb_info *viafbinfo;
-extern struct fb_info *viafbinfo1;
-extern int viafb_DeviceStatus;
-extern int viafb_refresh;
-extern int viafb_refresh1;
-extern int viafb_lcd_dsp_method;
-extern int viafb_lcd_mode;
-extern int viafb_bpp;
-extern int viafb_bpp1;
-
-extern int viafb_CRT_ON;
-extern int viafb_hotplug_Xres;
-extern int viafb_hotplug_Yres;
-extern int viafb_hotplug_bpp;
-extern int viafb_hotplug_refresh;
-extern int viafb_primary_dev;
-extern void __iomem *viafb_FB_MM;
-extern struct fb_cursor viacursor;
-
-extern unsigned int viafb_second_xres;
-extern unsigned int viafb_second_yres;
-extern int viafb_lcd_panel_id;
-
-#endif /* __GLOBAL_H__ */
diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c
deleted file mode 100644
index fcd53ceb88f..00000000000
--- a/drivers/video/via/hw.c
+++ /dev/null
@@ -1,2865 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-
-static const struct pci_device_id_info pciidlist[] = {
- {PCI_VIA_VENDOR_ID, UNICHROME_CLE266_DID, UNICHROME_CLE266},
- {PCI_VIA_VENDOR_ID, UNICHROME_PM800_DID, UNICHROME_PM800},
- {PCI_VIA_VENDOR_ID, UNICHROME_K400_DID, UNICHROME_K400},
- {PCI_VIA_VENDOR_ID, UNICHROME_K800_DID, UNICHROME_K800},
- {PCI_VIA_VENDOR_ID, UNICHROME_CN700_DID, UNICHROME_CN700},
- {PCI_VIA_VENDOR_ID, UNICHROME_P4M890_DID, UNICHROME_P4M890},
- {PCI_VIA_VENDOR_ID, UNICHROME_K8M890_DID, UNICHROME_K8M890},
- {PCI_VIA_VENDOR_ID, UNICHROME_CX700_DID, UNICHROME_CX700},
- {PCI_VIA_VENDOR_ID, UNICHROME_P4M900_DID, UNICHROME_P4M900},
- {PCI_VIA_VENDOR_ID, UNICHROME_CN750_DID, UNICHROME_CN750},
- {PCI_VIA_VENDOR_ID, UNICHROME_VX800_DID, UNICHROME_VX800},
- {0, 0, 0}
-};
-
-struct offset offset_reg = {
- /* IGA1 Offset Register */
- {IGA1_OFFSET_REG_NUM, {{CR13, 0, 7}, {CR35, 5, 7} } },
- /* IGA2 Offset Register */
- {IGA2_OFFSET_REG_NUM, {{CR66, 0, 7}, {CR67, 0, 1} } }
-};
-
-static struct pll_map pll_value[] = {
- {CLK_25_175M, CLE266_PLL_25_175M, K800_PLL_25_175M, CX700_25_175M},
- {CLK_29_581M, CLE266_PLL_29_581M, K800_PLL_29_581M, CX700_29_581M},
- {CLK_26_880M, CLE266_PLL_26_880M, K800_PLL_26_880M, CX700_26_880M},
- {CLK_31_490M, CLE266_PLL_31_490M, K800_PLL_31_490M, CX700_31_490M},
- {CLK_31_500M, CLE266_PLL_31_500M, K800_PLL_31_500M, CX700_31_500M},
- {CLK_31_728M, CLE266_PLL_31_728M, K800_PLL_31_728M, CX700_31_728M},
- {CLK_32_668M, CLE266_PLL_32_668M, K800_PLL_32_668M, CX700_32_668M},
- {CLK_36_000M, CLE266_PLL_36_000M, K800_PLL_36_000M, CX700_36_000M},
- {CLK_40_000M, CLE266_PLL_40_000M, K800_PLL_40_000M, CX700_40_000M},
- {CLK_41_291M, CLE266_PLL_41_291M, K800_PLL_41_291M, CX700_41_291M},
- {CLK_43_163M, CLE266_PLL_43_163M, K800_PLL_43_163M, CX700_43_163M},
- {CLK_45_250M, CLE266_PLL_45_250M, K800_PLL_45_250M, CX700_45_250M},
- {CLK_46_000M, CLE266_PLL_46_000M, K800_PLL_46_000M, CX700_46_000M},
- {CLK_46_996M, CLE266_PLL_46_996M, K800_PLL_46_996M, CX700_46_996M},
- {CLK_48_000M, CLE266_PLL_48_000M, K800_PLL_48_000M, CX700_48_000M},
- {CLK_48_875M, CLE266_PLL_48_875M, K800_PLL_48_875M, CX700_48_875M},
- {CLK_49_500M, CLE266_PLL_49_500M, K800_PLL_49_500M, CX700_49_500M},
- {CLK_52_406M, CLE266_PLL_52_406M, K800_PLL_52_406M, CX700_52_406M},
- {CLK_52_977M, CLE266_PLL_52_977M, K800_PLL_52_977M, CX700_52_977M},
- {CLK_56_250M, CLE266_PLL_56_250M, K800_PLL_56_250M, CX700_56_250M},
- {CLK_60_466M, CLE266_PLL_60_466M, K800_PLL_60_466M, CX700_60_466M},
- {CLK_61_500M, CLE266_PLL_61_500M, K800_PLL_61_500M, CX700_61_500M},
- {CLK_65_000M, CLE266_PLL_65_000M, K800_PLL_65_000M, CX700_65_000M},
- {CLK_65_178M, CLE266_PLL_65_178M, K800_PLL_65_178M, CX700_65_178M},
- {CLK_66_750M, CLE266_PLL_66_750M, K800_PLL_66_750M, CX700_66_750M},
- {CLK_68_179M, CLE266_PLL_68_179M, K800_PLL_68_179M, CX700_68_179M},
- {CLK_69_924M, CLE266_PLL_69_924M, K800_PLL_69_924M, CX700_69_924M},
- {CLK_70_159M, CLE266_PLL_70_159M, K800_PLL_70_159M, CX700_70_159M},
- {CLK_72_000M, CLE266_PLL_72_000M, K800_PLL_72_000M, CX700_72_000M},
- {CLK_78_750M, CLE266_PLL_78_750M, K800_PLL_78_750M, CX700_78_750M},
- {CLK_80_136M, CLE266_PLL_80_136M, K800_PLL_80_136M, CX700_80_136M},
- {CLK_83_375M, CLE266_PLL_83_375M, K800_PLL_83_375M, CX700_83_375M},
- {CLK_83_950M, CLE266_PLL_83_950M, K800_PLL_83_950M, CX700_83_950M},
- {CLK_84_750M, CLE266_PLL_84_750M, K800_PLL_84_750M, CX700_84_750M},
- {CLK_85_860M, CLE266_PLL_85_860M, K800_PLL_85_860M, CX700_85_860M},
- {CLK_88_750M, CLE266_PLL_88_750M, K800_PLL_88_750M, CX700_88_750M},
- {CLK_94_500M, CLE266_PLL_94_500M, K800_PLL_94_500M, CX700_94_500M},
- {CLK_97_750M, CLE266_PLL_97_750M, K800_PLL_97_750M, CX700_97_750M},
- {CLK_101_000M, CLE266_PLL_101_000M, K800_PLL_101_000M,
- CX700_101_000M},
- {CLK_106_500M, CLE266_PLL_106_500M, K800_PLL_106_500M,
- CX700_106_500M},
- {CLK_108_000M, CLE266_PLL_108_000M, K800_PLL_108_000M,
- CX700_108_000M},
- {CLK_113_309M, CLE266_PLL_113_309M, K800_PLL_113_309M,
- CX700_113_309M},
- {CLK_118_840M, CLE266_PLL_118_840M, K800_PLL_118_840M,
- CX700_118_840M},
- {CLK_119_000M, CLE266_PLL_119_000M, K800_PLL_119_000M,
- CX700_119_000M},
- {CLK_121_750M, CLE266_PLL_121_750M, K800_PLL_121_750M,
- CX700_121_750M},
- {CLK_125_104M, CLE266_PLL_125_104M, K800_PLL_125_104M,
- CX700_125_104M},
- {CLK_133_308M, CLE266_PLL_133_308M, K800_PLL_133_308M,
- CX700_133_308M},
- {CLK_135_000M, CLE266_PLL_135_000M, K800_PLL_135_000M,
- CX700_135_000M},
- {CLK_136_700M, CLE266_PLL_136_700M, K800_PLL_136_700M,
- CX700_136_700M},
- {CLK_138_400M, CLE266_PLL_138_400M, K800_PLL_138_400M,
- CX700_138_400M},
- {CLK_146_760M, CLE266_PLL_146_760M, K800_PLL_146_760M,
- CX700_146_760M},
- {CLK_153_920M, CLE266_PLL_153_920M, K800_PLL_153_920M,
- CX700_153_920M},
- {CLK_156_000M, CLE266_PLL_156_000M, K800_PLL_156_000M,
- CX700_156_000M},
- {CLK_157_500M, CLE266_PLL_157_500M, K800_PLL_157_500M,
- CX700_157_500M},
- {CLK_162_000M, CLE266_PLL_162_000M, K800_PLL_162_000M,
- CX700_162_000M},
- {CLK_187_000M, CLE266_PLL_187_000M, K800_PLL_187_000M,
- CX700_187_000M},
- {CLK_193_295M, CLE266_PLL_193_295M, K800_PLL_193_295M,
- CX700_193_295M},
- {CLK_202_500M, CLE266_PLL_202_500M, K800_PLL_202_500M,
- CX700_202_500M},
- {CLK_204_000M, CLE266_PLL_204_000M, K800_PLL_204_000M,
- CX700_204_000M},
- {CLK_218_500M, CLE266_PLL_218_500M, K800_PLL_218_500M,
- CX700_218_500M},
- {CLK_234_000M, CLE266_PLL_234_000M, K800_PLL_234_000M,
- CX700_234_000M},
- {CLK_267_250M, CLE266_PLL_267_250M, K800_PLL_267_250M,
- CX700_267_250M},
- {CLK_297_500M, CLE266_PLL_297_500M, K800_PLL_297_500M,
- CX700_297_500M},
- {CLK_74_481M, CLE266_PLL_74_481M, K800_PLL_74_481M, CX700_74_481M},
- {CLK_172_798M, CLE266_PLL_172_798M, K800_PLL_172_798M,
- CX700_172_798M},
- {CLK_122_614M, CLE266_PLL_122_614M, K800_PLL_122_614M,
- CX700_122_614M},
- {CLK_74_270M, CLE266_PLL_74_270M, K800_PLL_74_270M, CX700_74_270M},
- {CLK_148_500M, CLE266_PLL_148_500M, K800_PLL_148_500M,
- CX700_148_500M}
-};
-
-static struct fifo_depth_select display_fifo_depth_reg = {
- /* IGA1 FIFO Depth_Select */
- {IGA1_FIFO_DEPTH_SELECT_REG_NUM, {{SR17, 0, 7} } },
- /* IGA2 FIFO Depth_Select */
- {IGA2_FIFO_DEPTH_SELECT_REG_NUM,
- {{CR68, 4, 7}, {CR94, 7, 7}, {CR95, 7, 7} } }
-};
-
-static struct fifo_threshold_select fifo_threshold_select_reg = {
- /* IGA1 FIFO Threshold Select */
- {IGA1_FIFO_THRESHOLD_REG_NUM, {{SR16, 0, 5}, {SR16, 7, 7} } },
- /* IGA2 FIFO Threshold Select */
- {IGA2_FIFO_THRESHOLD_REG_NUM, {{CR68, 0, 3}, {CR95, 4, 6} } }
-};
-
-static struct fifo_high_threshold_select fifo_high_threshold_select_reg = {
- /* IGA1 FIFO High Threshold Select */
- {IGA1_FIFO_HIGH_THRESHOLD_REG_NUM, {{SR18, 0, 5}, {SR18, 7, 7} } },
- /* IGA2 FIFO High Threshold Select */
- {IGA2_FIFO_HIGH_THRESHOLD_REG_NUM, {{CR92, 0, 3}, {CR95, 0, 2} } }
-};
-
-static struct display_queue_expire_num display_queue_expire_num_reg = {
- /* IGA1 Display Queue Expire Num */
- {IGA1_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM, {{SR22, 0, 4} } },
- /* IGA2 Display Queue Expire Num */
- {IGA2_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM, {{CR94, 0, 6} } }
-};
-
-/* Definition Fetch Count Registers*/
-static struct fetch_count fetch_count_reg = {
- /* IGA1 Fetch Count Register */
- {IGA1_FETCH_COUNT_REG_NUM, {{SR1C, 0, 7}, {SR1D, 0, 1} } },
- /* IGA2 Fetch Count Register */
- {IGA2_FETCH_COUNT_REG_NUM, {{CR65, 0, 7}, {CR67, 2, 3} } }
-};
-
-static struct iga1_crtc_timing iga1_crtc_reg = {
- /* IGA1 Horizontal Total */
- {IGA1_HOR_TOTAL_REG_NUM, {{CR00, 0, 7}, {CR36, 3, 3} } },
- /* IGA1 Horizontal Addressable Video */
- {IGA1_HOR_ADDR_REG_NUM, {{CR01, 0, 7} } },
- /* IGA1 Horizontal Blank Start */
- {IGA1_HOR_BLANK_START_REG_NUM, {{CR02, 0, 7} } },
- /* IGA1 Horizontal Blank End */
- {IGA1_HOR_BLANK_END_REG_NUM,
- {{CR03, 0, 4}, {CR05, 7, 7}, {CR33, 5, 5} } },
- /* IGA1 Horizontal Sync Start */
- {IGA1_HOR_SYNC_START_REG_NUM, {{CR04, 0, 7}, {CR33, 4, 4} } },
- /* IGA1 Horizontal Sync End */
- {IGA1_HOR_SYNC_END_REG_NUM, {{CR05, 0, 4} } },
- /* IGA1 Vertical Total */
- {IGA1_VER_TOTAL_REG_NUM,
- {{CR06, 0, 7}, {CR07, 0, 0}, {CR07, 5, 5}, {CR35, 0, 0} } },
- /* IGA1 Vertical Addressable Video */
- {IGA1_VER_ADDR_REG_NUM,
- {{CR12, 0, 7}, {CR07, 1, 1}, {CR07, 6, 6}, {CR35, 2, 2} } },
- /* IGA1 Vertical Blank Start */
- {IGA1_VER_BLANK_START_REG_NUM,
- {{CR15, 0, 7}, {CR07, 3, 3}, {CR09, 5, 5}, {CR35, 3, 3} } },
- /* IGA1 Vertical Blank End */
- {IGA1_VER_BLANK_END_REG_NUM, {{CR16, 0, 7} } },
- /* IGA1 Vertical Sync Start */
- {IGA1_VER_SYNC_START_REG_NUM,
- {{CR10, 0, 7}, {CR07, 2, 2}, {CR07, 7, 7}, {CR35, 1, 1} } },
- /* IGA1 Vertical Sync End */
- {IGA1_VER_SYNC_END_REG_NUM, {{CR11, 0, 3} } }
-};
-
-static struct iga2_crtc_timing iga2_crtc_reg = {
- /* IGA2 Horizontal Total */
- {IGA2_HOR_TOTAL_REG_NUM, {{CR50, 0, 7}, {CR55, 0, 3} } },
- /* IGA2 Horizontal Addressable Video */
- {IGA2_HOR_ADDR_REG_NUM, {{CR51, 0, 7}, {CR55, 4, 6} } },
- /* IGA2 Horizontal Blank Start */
- {IGA2_HOR_BLANK_START_REG_NUM, {{CR52, 0, 7}, {CR54, 0, 2} } },
- /* IGA2 Horizontal Blank End */
- {IGA2_HOR_BLANK_END_REG_NUM,
- {{CR53, 0, 7}, {CR54, 3, 5}, {CR5D, 6, 6} } },
- /* IGA2 Horizontal Sync Start */
- {IGA2_HOR_SYNC_START_REG_NUM,
- {{CR56, 0, 7}, {CR54, 6, 7}, {CR5C, 7, 7}, {CR5D, 7, 7} } },
- /* IGA2 Horizontal Sync End */
- {IGA2_HOR_SYNC_END_REG_NUM, {{CR57, 0, 7}, {CR5C, 6, 6} } },
- /* IGA2 Vertical Total */
- {IGA2_VER_TOTAL_REG_NUM, {{CR58, 0, 7}, {CR5D, 0, 2} } },
- /* IGA2 Vertical Addressable Video */
- {IGA2_VER_ADDR_REG_NUM, {{CR59, 0, 7}, {CR5D, 3, 5} } },
- /* IGA2 Vertical Blank Start */
- {IGA2_VER_BLANK_START_REG_NUM, {{CR5A, 0, 7}, {CR5C, 0, 2} } },
- /* IGA2 Vertical Blank End */
- {IGA2_VER_BLANK_END_REG_NUM, {{CR5B, 0, 7}, {CR5C, 3, 5} } },
- /* IGA2 Vertical Sync Start */
- {IGA2_VER_SYNC_START_REG_NUM, {{CR5E, 0, 7}, {CR5F, 5, 7} } },
- /* IGA2 Vertical Sync End */
- {IGA2_VER_SYNC_END_REG_NUM, {{CR5F, 0, 4} } }
-};
-
-static struct rgbLUT palLUT_table[] = {
- /* {R,G,B} */
- /* Index 0x00~0x03 */
- {0x00, 0x00, 0x00}, {0x00, 0x00, 0x2A}, {0x00, 0x2A, 0x00}, {0x00,
- 0x2A,
- 0x2A},
- /* Index 0x04~0x07 */
- {0x2A, 0x00, 0x00}, {0x2A, 0x00, 0x2A}, {0x2A, 0x15, 0x00}, {0x2A,
- 0x2A,
- 0x2A},
- /* Index 0x08~0x0B */
- {0x15, 0x15, 0x15}, {0x15, 0x15, 0x3F}, {0x15, 0x3F, 0x15}, {0x15,
- 0x3F,
- 0x3F},
- /* Index 0x0C~0x0F */
- {0x3F, 0x15, 0x15}, {0x3F, 0x15, 0x3F}, {0x3F, 0x3F, 0x15}, {0x3F,
- 0x3F,
- 0x3F},
- /* Index 0x10~0x13 */
- {0x00, 0x00, 0x00}, {0x05, 0x05, 0x05}, {0x08, 0x08, 0x08}, {0x0B,
- 0x0B,
- 0x0B},
- /* Index 0x14~0x17 */
- {0x0E, 0x0E, 0x0E}, {0x11, 0x11, 0x11}, {0x14, 0x14, 0x14}, {0x18,
- 0x18,
- 0x18},
- /* Index 0x18~0x1B */
- {0x1C, 0x1C, 0x1C}, {0x20, 0x20, 0x20}, {0x24, 0x24, 0x24}, {0x28,
- 0x28,
- 0x28},
- /* Index 0x1C~0x1F */
- {0x2D, 0x2D, 0x2D}, {0x32, 0x32, 0x32}, {0x38, 0x38, 0x38}, {0x3F,
- 0x3F,
- 0x3F},
- /* Index 0x20~0x23 */
- {0x00, 0x00, 0x3F}, {0x10, 0x00, 0x3F}, {0x1F, 0x00, 0x3F}, {0x2F,
- 0x00,
- 0x3F},
- /* Index 0x24~0x27 */
- {0x3F, 0x00, 0x3F}, {0x3F, 0x00, 0x2F}, {0x3F, 0x00, 0x1F}, {0x3F,
- 0x00,
- 0x10},
- /* Index 0x28~0x2B */
- {0x3F, 0x00, 0x00}, {0x3F, 0x10, 0x00}, {0x3F, 0x1F, 0x00}, {0x3F,
- 0x2F,
- 0x00},
- /* Index 0x2C~0x2F */
- {0x3F, 0x3F, 0x00}, {0x2F, 0x3F, 0x00}, {0x1F, 0x3F, 0x00}, {0x10,
- 0x3F,
- 0x00},
- /* Index 0x30~0x33 */
- {0x00, 0x3F, 0x00}, {0x00, 0x3F, 0x10}, {0x00, 0x3F, 0x1F}, {0x00,
- 0x3F,
- 0x2F},
- /* Index 0x34~0x37 */
- {0x00, 0x3F, 0x3F}, {0x00, 0x2F, 0x3F}, {0x00, 0x1F, 0x3F}, {0x00,
- 0x10,
- 0x3F},
- /* Index 0x38~0x3B */
- {0x1F, 0x1F, 0x3F}, {0x27, 0x1F, 0x3F}, {0x2F, 0x1F, 0x3F}, {0x37,
- 0x1F,
- 0x3F},
- /* Index 0x3C~0x3F */
- {0x3F, 0x1F, 0x3F}, {0x3F, 0x1F, 0x37}, {0x3F, 0x1F, 0x2F}, {0x3F,
- 0x1F,
- 0x27},
- /* Index 0x40~0x43 */
- {0x3F, 0x1F, 0x1F}, {0x3F, 0x27, 0x1F}, {0x3F, 0x2F, 0x1F}, {0x3F,
- 0x3F,
- 0x1F},
- /* Index 0x44~0x47 */
- {0x3F, 0x3F, 0x1F}, {0x37, 0x3F, 0x1F}, {0x2F, 0x3F, 0x1F}, {0x27,
- 0x3F,
- 0x1F},
- /* Index 0x48~0x4B */
- {0x1F, 0x3F, 0x1F}, {0x1F, 0x3F, 0x27}, {0x1F, 0x3F, 0x2F}, {0x1F,
- 0x3F,
- 0x37},
- /* Index 0x4C~0x4F */
- {0x1F, 0x3F, 0x3F}, {0x1F, 0x37, 0x3F}, {0x1F, 0x2F, 0x3F}, {0x1F,
- 0x27,
- 0x3F},
- /* Index 0x50~0x53 */
- {0x2D, 0x2D, 0x3F}, {0x31, 0x2D, 0x3F}, {0x36, 0x2D, 0x3F}, {0x3A,
- 0x2D,
- 0x3F},
- /* Index 0x54~0x57 */
- {0x3F, 0x2D, 0x3F}, {0x3F, 0x2D, 0x3A}, {0x3F, 0x2D, 0x36}, {0x3F,
- 0x2D,
- 0x31},
- /* Index 0x58~0x5B */
- {0x3F, 0x2D, 0x2D}, {0x3F, 0x31, 0x2D}, {0x3F, 0x36, 0x2D}, {0x3F,
- 0x3A,
- 0x2D},
- /* Index 0x5C~0x5F */
- {0x3F, 0x3F, 0x2D}, {0x3A, 0x3F, 0x2D}, {0x36, 0x3F, 0x2D}, {0x31,
- 0x3F,
- 0x2D},
- /* Index 0x60~0x63 */
- {0x2D, 0x3F, 0x2D}, {0x2D, 0x3F, 0x31}, {0x2D, 0x3F, 0x36}, {0x2D,
- 0x3F,
- 0x3A},
- /* Index 0x64~0x67 */
- {0x2D, 0x3F, 0x3F}, {0x2D, 0x3A, 0x3F}, {0x2D, 0x36, 0x3F}, {0x2D,
- 0x31,
- 0x3F},
- /* Index 0x68~0x6B */
- {0x00, 0x00, 0x1C}, {0x07, 0x00, 0x1C}, {0x0E, 0x00, 0x1C}, {0x15,
- 0x00,
- 0x1C},
- /* Index 0x6C~0x6F */
- {0x1C, 0x00, 0x1C}, {0x1C, 0x00, 0x15}, {0x1C, 0x00, 0x0E}, {0x1C,
- 0x00,
- 0x07},
- /* Index 0x70~0x73 */
- {0x1C, 0x00, 0x00}, {0x1C, 0x07, 0x00}, {0x1C, 0x0E, 0x00}, {0x1C,
- 0x15,
- 0x00},
- /* Index 0x74~0x77 */
- {0x1C, 0x1C, 0x00}, {0x15, 0x1C, 0x00}, {0x0E, 0x1C, 0x00}, {0x07,
- 0x1C,
- 0x00},
- /* Index 0x78~0x7B */
- {0x00, 0x1C, 0x00}, {0x00, 0x1C, 0x07}, {0x00, 0x1C, 0x0E}, {0x00,
- 0x1C,
- 0x15},
- /* Index 0x7C~0x7F */
- {0x00, 0x1C, 0x1C}, {0x00, 0x15, 0x1C}, {0x00, 0x0E, 0x1C}, {0x00,
- 0x07,
- 0x1C},
- /* Index 0x80~0x83 */
- {0x0E, 0x0E, 0x1C}, {0x11, 0x0E, 0x1C}, {0x15, 0x0E, 0x1C}, {0x18,
- 0x0E,
- 0x1C},
- /* Index 0x84~0x87 */
- {0x1C, 0x0E, 0x1C}, {0x1C, 0x0E, 0x18}, {0x1C, 0x0E, 0x15}, {0x1C,
- 0x0E,
- 0x11},
- /* Index 0x88~0x8B */
- {0x1C, 0x0E, 0x0E}, {0x1C, 0x11, 0x0E}, {0x1C, 0x15, 0x0E}, {0x1C,
- 0x18,
- 0x0E},
- /* Index 0x8C~0x8F */
- {0x1C, 0x1C, 0x0E}, {0x18, 0x1C, 0x0E}, {0x15, 0x1C, 0x0E}, {0x11,
- 0x1C,
- 0x0E},
- /* Index 0x90~0x93 */
- {0x0E, 0x1C, 0x0E}, {0x0E, 0x1C, 0x11}, {0x0E, 0x1C, 0x15}, {0x0E,
- 0x1C,
- 0x18},
- /* Index 0x94~0x97 */
- {0x0E, 0x1C, 0x1C}, {0x0E, 0x18, 0x1C}, {0x0E, 0x15, 0x1C}, {0x0E,
- 0x11,
- 0x1C},
- /* Index 0x98~0x9B */
- {0x14, 0x14, 0x1C}, {0x16, 0x14, 0x1C}, {0x18, 0x14, 0x1C}, {0x1A,
- 0x14,
- 0x1C},
- /* Index 0x9C~0x9F */
- {0x1C, 0x14, 0x1C}, {0x1C, 0x14, 0x1A}, {0x1C, 0x14, 0x18}, {0x1C,
- 0x14,
- 0x16},
- /* Index 0xA0~0xA3 */
- {0x1C, 0x14, 0x14}, {0x1C, 0x16, 0x14}, {0x1C, 0x18, 0x14}, {0x1C,
- 0x1A,
- 0x14},
- /* Index 0xA4~0xA7 */
- {0x1C, 0x1C, 0x14}, {0x1A, 0x1C, 0x14}, {0x18, 0x1C, 0x14}, {0x16,
- 0x1C,
- 0x14},
- /* Index 0xA8~0xAB */
- {0x14, 0x1C, 0x14}, {0x14, 0x1C, 0x16}, {0x14, 0x1C, 0x18}, {0x14,
- 0x1C,
- 0x1A},
- /* Index 0xAC~0xAF */
- {0x14, 0x1C, 0x1C}, {0x14, 0x1A, 0x1C}, {0x14, 0x18, 0x1C}, {0x14,
- 0x16,
- 0x1C},
- /* Index 0xB0~0xB3 */
- {0x00, 0x00, 0x10}, {0x04, 0x00, 0x10}, {0x08, 0x00, 0x10}, {0x0C,
- 0x00,
- 0x10},
- /* Index 0xB4~0xB7 */
- {0x10, 0x00, 0x10}, {0x10, 0x00, 0x0C}, {0x10, 0x00, 0x08}, {0x10,
- 0x00,
- 0x04},
- /* Index 0xB8~0xBB */
- {0x10, 0x00, 0x00}, {0x10, 0x04, 0x00}, {0x10, 0x08, 0x00}, {0x10,
- 0x0C,
- 0x00},
- /* Index 0xBC~0xBF */
- {0x10, 0x10, 0x00}, {0x0C, 0x10, 0x00}, {0x08, 0x10, 0x00}, {0x04,
- 0x10,
- 0x00},
- /* Index 0xC0~0xC3 */
- {0x00, 0x10, 0x00}, {0x00, 0x10, 0x04}, {0x00, 0x10, 0x08}, {0x00,
- 0x10,
- 0x0C},
- /* Index 0xC4~0xC7 */
- {0x00, 0x10, 0x10}, {0x00, 0x0C, 0x10}, {0x00, 0x08, 0x10}, {0x00,
- 0x04,
- 0x10},
- /* Index 0xC8~0xCB */
- {0x08, 0x08, 0x10}, {0x0A, 0x08, 0x10}, {0x0C, 0x08, 0x10}, {0x0E,
- 0x08,
- 0x10},
- /* Index 0xCC~0xCF */
- {0x10, 0x08, 0x10}, {0x10, 0x08, 0x0E}, {0x10, 0x08, 0x0C}, {0x10,
- 0x08,
- 0x0A},
- /* Index 0xD0~0xD3 */
- {0x10, 0x08, 0x08}, {0x10, 0x0A, 0x08}, {0x10, 0x0C, 0x08}, {0x10,
- 0x0E,
- 0x08},
- /* Index 0xD4~0xD7 */
- {0x10, 0x10, 0x08}, {0x0E, 0x10, 0x08}, {0x0C, 0x10, 0x08}, {0x0A,
- 0x10,
- 0x08},
- /* Index 0xD8~0xDB */
- {0x08, 0x10, 0x08}, {0x08, 0x10, 0x0A}, {0x08, 0x10, 0x0C}, {0x08,
- 0x10,
- 0x0E},
- /* Index 0xDC~0xDF */
- {0x08, 0x10, 0x10}, {0x08, 0x0E, 0x10}, {0x08, 0x0C, 0x10}, {0x08,
- 0x0A,
- 0x10},
- /* Index 0xE0~0xE3 */
- {0x0B, 0x0B, 0x10}, {0x0C, 0x0B, 0x10}, {0x0D, 0x0B, 0x10}, {0x0F,
- 0x0B,
- 0x10},
- /* Index 0xE4~0xE7 */
- {0x10, 0x0B, 0x10}, {0x10, 0x0B, 0x0F}, {0x10, 0x0B, 0x0D}, {0x10,
- 0x0B,
- 0x0C},
- /* Index 0xE8~0xEB */
- {0x10, 0x0B, 0x0B}, {0x10, 0x0C, 0x0B}, {0x10, 0x0D, 0x0B}, {0x10,
- 0x0F,
- 0x0B},
- /* Index 0xEC~0xEF */
- {0x10, 0x10, 0x0B}, {0x0F, 0x10, 0x0B}, {0x0D, 0x10, 0x0B}, {0x0C,
- 0x10,
- 0x0B},
- /* Index 0xF0~0xF3 */
- {0x0B, 0x10, 0x0B}, {0x0B, 0x10, 0x0C}, {0x0B, 0x10, 0x0D}, {0x0B,
- 0x10,
- 0x0F},
- /* Index 0xF4~0xF7 */
- {0x0B, 0x10, 0x10}, {0x0B, 0x0F, 0x10}, {0x0B, 0x0D, 0x10}, {0x0B,
- 0x0C,
- 0x10},
- /* Index 0xF8~0xFB */
- {0x00, 0x00, 0x00}, {0x00, 0x00, 0x00}, {0x00, 0x00, 0x00}, {0x00,
- 0x00,
- 0x00},
- /* Index 0xFC~0xFF */
- {0x00, 0x00, 0x00}, {0x00, 0x00, 0x00}, {0x00, 0x00, 0x00}, {0x00,
- 0x00,
- 0x00}
-};
-
-static void set_crt_output_path(int set_iga);
-static void dvi_patch_skew_dvp0(void);
-static void dvi_patch_skew_dvp1(void);
-static void dvi_patch_skew_dvp_low(void);
-static void set_dvi_output_path(int set_iga, int output_interface);
-static void set_lcd_output_path(int set_iga, int output_interface);
-static int search_mode_setting(int ModeInfoIndex);
-static void load_fix_bit_crtc_reg(void);
-static void init_gfx_chip_info(void);
-static void init_tmds_chip_info(void);
-static void init_lvds_chip_info(void);
-static void device_screen_off(void);
-static void device_screen_on(void);
-static void set_display_channel(void);
-static void device_off(void);
-static void device_on(void);
-static void enable_second_display_channel(void);
-static void disable_second_display_channel(void);
-static int get_fb_size_from_pci(void);
-
-void viafb_write_reg(u8 index, u16 io_port, u8 data)
-{
- outb(index, io_port);
- outb(data, io_port + 1);
- /*DEBUG_MSG(KERN_INFO "\nIndex=%2d Value=%2d", index, data); */
-}
-u8 viafb_read_reg(int io_port, u8 index)
-{
- outb(index, io_port);
- return inb(io_port + 1);
-}
-
-void viafb_lock_crt(void)
-{
- viafb_write_reg_mask(CR11, VIACR, BIT7, BIT7);
-}
-
-void viafb_unlock_crt(void)
-{
- viafb_write_reg_mask(CR11, VIACR, 0, BIT7);
- viafb_write_reg_mask(CR47, VIACR, 0, BIT0);
-}
-
-void viafb_write_reg_mask(u8 index, int io_port, u8 data, u8 mask)
-{
- u8 tmp;
-
- outb(index, io_port);
- tmp = inb(io_port + 1);
- outb((data & mask) | (tmp & (~mask)), io_port + 1);
- /*DEBUG_MSG(KERN_INFO "\nIndex=%2d Value=%2d", index, tmp); */
-}
-
-void write_dac_reg(u8 index, u8 r, u8 g, u8 b)
-{
- outb(index, LUT_INDEX_WRITE);
- outb(r, LUT_DATA);
- outb(g, LUT_DATA);
- outb(b, LUT_DATA);
-}
-
-/*Set IGA path for each device*/
-void viafb_set_iga_path(void)
-{
-
- if (viafb_SAMM_ON == 1) {
- if (viafb_CRT_ON) {
- if (viafb_primary_dev == CRT_Device)
- viaparinfo->crt_setting_info->iga_path = IGA1;
- else
- viaparinfo->crt_setting_info->iga_path = IGA2;
- }
-
- if (viafb_DVI_ON) {
- if (viafb_primary_dev == DVI_Device)
- viaparinfo->tmds_setting_info->iga_path = IGA1;
- else
- viaparinfo->tmds_setting_info->iga_path = IGA2;
- }
-
- if (viafb_LCD_ON) {
- if (viafb_primary_dev == LCD_Device) {
- if (viafb_dual_fb &&
- (viaparinfo->chip_info->gfx_chip_name ==
- UNICHROME_CLE266)) {
- viaparinfo->
- lvds_setting_info->iga_path = IGA2;
- viaparinfo->
- crt_setting_info->iga_path = IGA1;
- viaparinfo->
- tmds_setting_info->iga_path = IGA1;
- } else
- viaparinfo->
- lvds_setting_info->iga_path = IGA1;
- } else {
- viaparinfo->lvds_setting_info->iga_path = IGA2;
- }
- }
- if (viafb_LCD2_ON) {
- if (LCD2_Device == viafb_primary_dev)
- viaparinfo->lvds_setting_info2->iga_path = IGA1;
- else
- viaparinfo->lvds_setting_info2->iga_path = IGA2;
- }
- } else {
- viafb_SAMM_ON = 0;
-
- if (viafb_CRT_ON && viafb_LCD_ON) {
- viaparinfo->crt_setting_info->iga_path = IGA1;
- viaparinfo->lvds_setting_info->iga_path = IGA2;
- } else if (viafb_CRT_ON && viafb_DVI_ON) {
- viaparinfo->crt_setting_info->iga_path = IGA1;
- viaparinfo->tmds_setting_info->iga_path = IGA2;
- } else if (viafb_LCD_ON && viafb_DVI_ON) {
- viaparinfo->tmds_setting_info->iga_path = IGA1;
- viaparinfo->lvds_setting_info->iga_path = IGA2;
- } else if (viafb_LCD_ON && viafb_LCD2_ON) {
- viaparinfo->lvds_setting_info->iga_path = IGA2;
- viaparinfo->lvds_setting_info2->iga_path = IGA2;
- } else if (viafb_CRT_ON) {
- viaparinfo->crt_setting_info->iga_path = IGA1;
- } else if (viafb_LCD_ON) {
- viaparinfo->lvds_setting_info->iga_path = IGA2;
- } else if (viafb_DVI_ON) {
- viaparinfo->tmds_setting_info->iga_path = IGA1;
- }
- }
-}
-
-void viafb_set_start_addr(void)
-{
- unsigned long offset = 0, tmp = 0, size = 0;
- unsigned long length;
-
- DEBUG_MSG(KERN_INFO "viafb_set_start_addr!\n");
- viafb_unlock_crt();
- /* update starting address of IGA1 */
- viafb_write_reg(CR0C, VIACR, 0x00); /*initial starting address */
- viafb_write_reg(CR0D, VIACR, 0x00);
- viafb_write_reg(CR34, VIACR, 0x00);
- viafb_write_reg_mask(CR48, VIACR, 0x00, 0x1F);
-
- if (viafb_dual_fb) {
- viaparinfo->iga_path = IGA1;
- viaparinfo1->iga_path = IGA2;
- }
-
- if (viafb_SAMM_ON == 1) {
- if (!viafb_dual_fb) {
- if (viafb_second_size)
- size = viafb_second_size * 1024 * 1024;
- else
- size = 8 * 1024 * 1024;
- } else {
-
- size = viaparinfo1->memsize;
- }
- offset = viafb_second_offset;
- DEBUG_MSG(KERN_INFO
- "viafb_second_size=%lx, second start_adddress=%lx\n",
- size, offset);
- }
- if (viafb_SAMM_ON == 1) {
- offset = offset >> 3;
-
- tmp = viafb_read_reg(VIACR, 0x62) & 0x01;
- tmp |= (offset & 0x7F) << 1;
- viafb_write_reg(CR62, VIACR, tmp);
- viafb_write_reg(CR63, VIACR, ((offset & 0x7F80) >> 7));
- viafb_write_reg(CR64, VIACR, ((offset & 0x7F8000) >> 15));
- viafb_write_reg(CRA3, VIACR, ((offset & 0x3800000) >> 23));
- } else {
- /* update starting address */
- viafb_write_reg(CR62, VIACR, 0x00);
- viafb_write_reg(CR63, VIACR, 0x00);
- viafb_write_reg(CR64, VIACR, 0x00);
- viafb_write_reg(CRA3, VIACR, 0x00);
- }
-
- if (viafb_SAMM_ON == 1) {
- if (viafb_accel) {
- if (!viafb_dual_fb)
- length = size - viaparinfo->fbmem_used;
- else
- length = size - viaparinfo1->fbmem_used;
- } else
- length = size;
- offset = (unsigned long)(void *)viafb_FB_MM +
- viafb_second_offset;
- memset((void *)offset, 0, length);
- }
-
- viafb_lock_crt();
-}
-
-void viafb_set_output_path(int device, int set_iga, int output_interface)
-{
- switch (device) {
- case DEVICE_CRT:
- set_crt_output_path(set_iga);
- break;
- case DEVICE_DVI:
- set_dvi_output_path(set_iga, output_interface);
- break;
- case DEVICE_LCD:
- set_lcd_output_path(set_iga, output_interface);
- break;
- }
-}
-
-static void set_crt_output_path(int set_iga)
-{
- viafb_write_reg_mask(CR36, VIACR, 0x00, BIT4 + BIT5);
-
- switch (set_iga) {
- case IGA1:
- viafb_write_reg_mask(SR16, VIASR, 0x00, BIT6);
- break;
- case IGA2:
- case IGA1_IGA2:
- viafb_write_reg_mask(CR6A, VIACR, 0xC0, BIT6 + BIT7);
- viafb_write_reg_mask(SR16, VIASR, 0x40, BIT6);
- if (set_iga == IGA1_IGA2)
- viafb_write_reg_mask(CR6B, VIACR, 0x08, BIT3);
- break;
- }
-}
-
-static void dvi_patch_skew_dvp0(void)
-{
- /* Reset data driving first: */
- viafb_write_reg_mask(SR1B, VIASR, 0, BIT1);
- viafb_write_reg_mask(SR2A, VIASR, 0, BIT4);
-
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_P4M890:
- {
- if ((viaparinfo->tmds_setting_info->h_active == 1600) &&
- (viaparinfo->tmds_setting_info->v_active ==
- 1200))
- viafb_write_reg_mask(CR96, VIACR, 0x03,
- BIT0 + BIT1 + BIT2);
- else
- viafb_write_reg_mask(CR96, VIACR, 0x07,
- BIT0 + BIT1 + BIT2);
- break;
- }
-
- case UNICHROME_P4M900:
- {
- viafb_write_reg_mask(CR96, VIACR, 0x07,
- BIT0 + BIT1 + BIT2 + BIT3);
- viafb_write_reg_mask(SR1B, VIASR, 0x02, BIT1);
- viafb_write_reg_mask(SR2A, VIASR, 0x10, BIT4);
- break;
- }
-
- default:
- {
- break;
- }
- }
-}
-
-static void dvi_patch_skew_dvp1(void)
-{
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CX700:
- {
- break;
- }
-
- default:
- {
- break;
- }
- }
-}
-
-static void dvi_patch_skew_dvp_low(void)
-{
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_K8M890:
- {
- viafb_write_reg_mask(CR99, VIACR, 0x03, BIT0 + BIT1);
- break;
- }
-
- case UNICHROME_P4M900:
- {
- viafb_write_reg_mask(CR99, VIACR, 0x08,
- BIT0 + BIT1 + BIT2 + BIT3);
- break;
- }
-
- case UNICHROME_P4M890:
- {
- viafb_write_reg_mask(CR99, VIACR, 0x0F,
- BIT0 + BIT1 + BIT2 + BIT3);
- break;
- }
-
- default:
- {
- break;
- }
- }
-}
-
-static void set_dvi_output_path(int set_iga, int output_interface)
-{
- switch (output_interface) {
- case INTERFACE_DVP0:
- viafb_write_reg_mask(CR6B, VIACR, 0x01, BIT0);
-
- if (set_iga == IGA1) {
- viafb_write_reg_mask(CR96, VIACR, 0x00, BIT4);
- viafb_write_reg_mask(CR6C, VIACR, 0x21, BIT0 +
- BIT5 + BIT7);
- } else {
- viafb_write_reg_mask(CR96, VIACR, 0x10, BIT4);
- viafb_write_reg_mask(CR6C, VIACR, 0xA1, BIT0 +
- BIT5 + BIT7);
- }
-
- viafb_write_reg_mask(SR1E, VIASR, 0xC0, BIT7 + BIT6);
-
- dvi_patch_skew_dvp0();
- break;
-
- case INTERFACE_DVP1:
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) {
- if (set_iga == IGA1)
- viafb_write_reg_mask(CR93, VIACR, 0x21,
- BIT0 + BIT5 + BIT7);
- else
- viafb_write_reg_mask(CR93, VIACR, 0xA1,
- BIT0 + BIT5 + BIT7);
- } else {
- if (set_iga == IGA1)
- viafb_write_reg_mask(CR9B, VIACR, 0x00, BIT4);
- else
- viafb_write_reg_mask(CR9B, VIACR, 0x10, BIT4);
- }
-
- viafb_write_reg_mask(SR1E, VIASR, 0x30, BIT4 + BIT5);
- dvi_patch_skew_dvp1();
- break;
- case INTERFACE_DFP_HIGH:
- if (viaparinfo->chip_info->gfx_chip_name != UNICHROME_CLE266) {
- if (set_iga == IGA1) {
- viafb_write_reg_mask(CR96, VIACR, 0x00, BIT4);
- viafb_write_reg_mask(CR97, VIACR, 0x03,
- BIT0 + BIT1 + BIT4);
- } else {
- viafb_write_reg_mask(CR96, VIACR, 0x10, BIT4);
- viafb_write_reg_mask(CR97, VIACR, 0x13,
- BIT0 + BIT1 + BIT4);
- }
- }
- viafb_write_reg_mask(SR2A, VIASR, 0x0C, BIT2 + BIT3);
- break;
-
- case INTERFACE_DFP_LOW:
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)
- break;
-
- if (set_iga == IGA1) {
- viafb_write_reg_mask(CR99, VIACR, 0x00, BIT4);
- viafb_write_reg_mask(CR9B, VIACR, 0x00, BIT4);
- } else {
- viafb_write_reg_mask(CR99, VIACR, 0x10, BIT4);
- viafb_write_reg_mask(CR9B, VIACR, 0x10, BIT4);
- }
-
- viafb_write_reg_mask(SR2A, VIASR, 0x03, BIT0 + BIT1);
- dvi_patch_skew_dvp_low();
- break;
-
- case INTERFACE_TMDS:
- if (set_iga == IGA1)
- viafb_write_reg_mask(CR99, VIACR, 0x00, BIT4);
- else
- viafb_write_reg_mask(CR99, VIACR, 0x10, BIT4);
- break;
- }
-
- if (set_iga == IGA2) {
- enable_second_display_channel();
- /* Disable LCD Scaling */
- viafb_write_reg_mask(CR79, VIACR, 0x00, BIT0);
- }
-}
-
-static void set_lcd_output_path(int set_iga, int output_interface)
-{
- DEBUG_MSG(KERN_INFO
- "set_lcd_output_path, iga:%d,out_interface:%d\n",
- set_iga, output_interface);
- switch (set_iga) {
- case IGA1:
- viafb_write_reg_mask(CR6B, VIACR, 0x00, BIT3);
- viafb_write_reg_mask(CR6A, VIACR, 0x08, BIT3);
-
- disable_second_display_channel();
- break;
-
- case IGA2:
- viafb_write_reg_mask(CR6B, VIACR, 0x00, BIT3);
- viafb_write_reg_mask(CR6A, VIACR, 0x08, BIT3);
-
- enable_second_display_channel();
- break;
-
- case IGA1_IGA2:
- viafb_write_reg_mask(CR6B, VIACR, 0x08, BIT3);
- viafb_write_reg_mask(CR6A, VIACR, 0x08, BIT3);
-
- disable_second_display_channel();
- break;
- }
-
- switch (output_interface) {
- case INTERFACE_DVP0:
- if (set_iga == IGA1) {
- viafb_write_reg_mask(CR96, VIACR, 0x00, BIT4);
- } else {
- viafb_write_reg(CR91, VIACR, 0x00);
- viafb_write_reg_mask(CR96, VIACR, 0x10, BIT4);
- }
- break;
-
- case INTERFACE_DVP1:
- if (set_iga == IGA1)
- viafb_write_reg_mask(CR9B, VIACR, 0x00, BIT4);
- else {
- viafb_write_reg(CR91, VIACR, 0x00);
- viafb_write_reg_mask(CR9B, VIACR, 0x10, BIT4);
- }
- break;
-
- case INTERFACE_DFP_HIGH:
- if (set_iga == IGA1)
- viafb_write_reg_mask(CR97, VIACR, 0x00, BIT4);
- else {
- viafb_write_reg(CR91, VIACR, 0x00);
- viafb_write_reg_mask(CR97, VIACR, 0x10, BIT4);
- viafb_write_reg_mask(CR96, VIACR, 0x10, BIT4);
- }
- break;
-
- case INTERFACE_DFP_LOW:
- if (set_iga == IGA1)
- viafb_write_reg_mask(CR99, VIACR, 0x00, BIT4);
- else {
- viafb_write_reg(CR91, VIACR, 0x00);
- viafb_write_reg_mask(CR99, VIACR, 0x10, BIT4);
- viafb_write_reg_mask(CR9B, VIACR, 0x10, BIT4);
- }
-
- break;
-
- case INTERFACE_DFP:
- if ((UNICHROME_K8M890 == viaparinfo->chip_info->gfx_chip_name)
- || (UNICHROME_P4M890 ==
- viaparinfo->chip_info->gfx_chip_name))
- viafb_write_reg_mask(CR97, VIACR, 0x84,
- BIT7 + BIT2 + BIT1 + BIT0);
- if (set_iga == IGA1) {
- viafb_write_reg_mask(CR97, VIACR, 0x00, BIT4);
- viafb_write_reg_mask(CR99, VIACR, 0x00, BIT4);
- } else {
- viafb_write_reg(CR91, VIACR, 0x00);
- viafb_write_reg_mask(CR97, VIACR, 0x10, BIT4);
- viafb_write_reg_mask(CR99, VIACR, 0x10, BIT4);
- }
- break;
-
- case INTERFACE_LVDS0:
- case INTERFACE_LVDS0LVDS1:
- if (set_iga == IGA1)
- viafb_write_reg_mask(CR99, VIACR, 0x00, BIT4);
- else
- viafb_write_reg_mask(CR99, VIACR, 0x10, BIT4);
-
- break;
-
- case INTERFACE_LVDS1:
- if (set_iga == IGA1)
- viafb_write_reg_mask(CR97, VIACR, 0x00, BIT4);
- else
- viafb_write_reg_mask(CR97, VIACR, 0x10, BIT4);
- break;
- }
-}
-
-/* Search Mode Index */
-static int search_mode_setting(int ModeInfoIndex)
-{
- int i = 0;
-
- while ((i < NUM_TOTAL_MODETABLE) &&
- (ModeInfoIndex != CLE266Modes[i].ModeIndex))
- i++;
- if (i >= NUM_TOTAL_MODETABLE)
- i = 0;
- return i;
-
-}
-
-struct VideoModeTable *viafb_get_modetbl_pointer(int Index)
-{
- struct VideoModeTable *TmpTbl = NULL;
- TmpTbl = &CLE266Modes[search_mode_setting(Index)];
- return TmpTbl;
-}
-
-struct VideoModeTable *viafb_get_cea_mode_tbl_pointer(int Index)
-{
- struct VideoModeTable *TmpTbl = NULL;
- int i = 0;
- while ((i < NUM_TOTAL_CEA_MODES) &&
- (Index != CEA_HDMI_Modes[i].ModeIndex))
- i++;
- if ((i < NUM_TOTAL_CEA_MODES))
- TmpTbl = &CEA_HDMI_Modes[i];
- else {
- /*Still use general timing if don't find CEA timing */
- i = 0;
- while ((i < NUM_TOTAL_MODETABLE) &&
- (Index != CLE266Modes[i].ModeIndex))
- i++;
- if (i >= NUM_TOTAL_MODETABLE)
- i = 0;
- TmpTbl = &CLE266Modes[i];
- }
- return TmpTbl;
-}
-
-static void load_fix_bit_crtc_reg(void)
-{
- /* always set to 1 */
- viafb_write_reg_mask(CR03, VIACR, 0x80, BIT7);
- /* line compare should set all bits = 1 (extend modes) */
- viafb_write_reg(CR18, VIACR, 0xff);
- /* line compare should set all bits = 1 (extend modes) */
- viafb_write_reg_mask(CR07, VIACR, 0x10, BIT4);
- /* line compare should set all bits = 1 (extend modes) */
- viafb_write_reg_mask(CR09, VIACR, 0x40, BIT6);
- /* line compare should set all bits = 1 (extend modes) */
- viafb_write_reg_mask(CR35, VIACR, 0x10, BIT4);
- /* line compare should set all bits = 1 (extend modes) */
- viafb_write_reg_mask(CR33, VIACR, 0x06, BIT0 + BIT1 + BIT2);
- /*viafb_write_reg_mask(CR32, VIACR, 0x01, BIT0); */
- /* extend mode always set to e3h */
- viafb_write_reg(CR17, VIACR, 0xe3);
- /* extend mode always set to 0h */
- viafb_write_reg(CR08, VIACR, 0x00);
- /* extend mode always set to 0h */
- viafb_write_reg(CR14, VIACR, 0x00);
-
- /* If K8M800, enable Prefetch Mode. */
- if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_K800)
- || (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K8M890))
- viafb_write_reg_mask(CR33, VIACR, 0x08, BIT3);
- if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)
- && (viaparinfo->chip_info->gfx_chip_revision == CLE266_REVISION_AX))
- viafb_write_reg_mask(SR1A, VIASR, 0x02, BIT1);
-
-}
-
-void viafb_load_reg(int timing_value, int viafb_load_reg_num,
- struct io_register *reg,
- int io_type)
-{
- int reg_mask;
- int bit_num = 0;
- int data;
- int i, j;
- int shift_next_reg;
- int start_index, end_index, cr_index;
- u16 get_bit;
-
- for (i = 0; i < viafb_load_reg_num; i++) {
- reg_mask = 0;
- data = 0;
- start_index = reg[i].start_bit;
- end_index = reg[i].end_bit;
- cr_index = reg[i].io_addr;
-
- shift_next_reg = bit_num;
- for (j = start_index; j <= end_index; j++) {
- /*if (bit_num==8) timing_value = timing_value >>8; */
- reg_mask = reg_mask | (BIT0 << j);
- get_bit = (timing_value & (BIT0 << bit_num));
- data =
- data | ((get_bit >> shift_next_reg) << start_index);
- bit_num++;
- }
- if (io_type == VIACR)
- viafb_write_reg_mask(cr_index, VIACR, data, reg_mask);
- else
- viafb_write_reg_mask(cr_index, VIASR, data, reg_mask);
- }
-
-}
-
-/* Write Registers */
-void viafb_write_regx(struct io_reg RegTable[], int ItemNum)
-{
- int i;
- unsigned char RegTemp;
-
- /*DEBUG_MSG(KERN_INFO "Table Size : %x!!\n",ItemNum ); */
-
- for (i = 0; i < ItemNum; i++) {
- outb(RegTable[i].index, RegTable[i].port);
- RegTemp = inb(RegTable[i].port + 1);
- RegTemp = (RegTemp & (~RegTable[i].mask)) | RegTable[i].value;
- outb(RegTemp, RegTable[i].port + 1);
- }
-}
-
-void viafb_load_offset_reg(int h_addr, int bpp_byte, int set_iga)
-{
- int reg_value;
- int viafb_load_reg_num;
- struct io_register *reg;
-
- switch (set_iga) {
- case IGA1_IGA2:
- case IGA1:
- reg_value = IGA1_OFFSET_FORMULA(h_addr, bpp_byte);
- viafb_load_reg_num = offset_reg.iga1_offset_reg.reg_num;
- reg = offset_reg.iga1_offset_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);
- if (set_iga == IGA1)
- break;
- case IGA2:
- reg_value = IGA2_OFFSET_FORMULA(h_addr, bpp_byte);
- viafb_load_reg_num = offset_reg.iga2_offset_reg.reg_num;
- reg = offset_reg.iga2_offset_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);
- break;
- }
-}
-
-void viafb_load_fetch_count_reg(int h_addr, int bpp_byte, int set_iga)
-{
- int reg_value;
- int viafb_load_reg_num;
- struct io_register *reg = NULL;
-
- switch (set_iga) {
- case IGA1_IGA2:
- case IGA1:
- reg_value = IGA1_FETCH_COUNT_FORMULA(h_addr, bpp_byte);
- viafb_load_reg_num = fetch_count_reg.
- iga1_fetch_count_reg.reg_num;
- reg = fetch_count_reg.iga1_fetch_count_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIASR);
- if (set_iga == IGA1)
- break;
- case IGA2:
- reg_value = IGA2_FETCH_COUNT_FORMULA(h_addr, bpp_byte);
- viafb_load_reg_num = fetch_count_reg.
- iga2_fetch_count_reg.reg_num;
- reg = fetch_count_reg.iga2_fetch_count_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);
- break;
- }
-
-}
-
-void viafb_load_FIFO_reg(int set_iga, int hor_active, int ver_active)
-{
- int reg_value;
- int viafb_load_reg_num;
- struct io_register *reg = NULL;
- int iga1_fifo_max_depth = 0, iga1_fifo_threshold =
- 0, iga1_fifo_high_threshold = 0, iga1_display_queue_expire_num = 0;
- int iga2_fifo_max_depth = 0, iga2_fifo_threshold =
- 0, iga2_fifo_high_threshold = 0, iga2_display_queue_expire_num = 0;
-
- if (set_iga == IGA1) {
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K800) {
- iga1_fifo_max_depth = K800_IGA1_FIFO_MAX_DEPTH;
- iga1_fifo_threshold = K800_IGA1_FIFO_THRESHOLD;
- iga1_fifo_high_threshold =
- K800_IGA1_FIFO_HIGH_THRESHOLD;
- /* If resolution > 1280x1024, expire length = 64, else
- expire length = 128 */
- if ((hor_active > 1280) && (ver_active > 1024))
- iga1_display_queue_expire_num = 16;
- else
- iga1_display_queue_expire_num =
- K800_IGA1_DISPLAY_QUEUE_EXPIRE_NUM;
-
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_PM800) {
- iga1_fifo_max_depth = P880_IGA1_FIFO_MAX_DEPTH;
- iga1_fifo_threshold = P880_IGA1_FIFO_THRESHOLD;
- iga1_fifo_high_threshold =
- P880_IGA1_FIFO_HIGH_THRESHOLD;
- iga1_display_queue_expire_num =
- P880_IGA1_DISPLAY_QUEUE_EXPIRE_NUM;
-
- /* If resolution > 1280x1024, expire length = 64, else
- expire length = 128 */
- if ((hor_active > 1280) && (ver_active > 1024))
- iga1_display_queue_expire_num = 16;
- else
- iga1_display_queue_expire_num =
- P880_IGA1_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CN700) {
- iga1_fifo_max_depth = CN700_IGA1_FIFO_MAX_DEPTH;
- iga1_fifo_threshold = CN700_IGA1_FIFO_THRESHOLD;
- iga1_fifo_high_threshold =
- CN700_IGA1_FIFO_HIGH_THRESHOLD;
-
- /* If resolution > 1280x1024, expire length = 64,
- else expire length = 128 */
- if ((hor_active > 1280) && (ver_active > 1024))
- iga1_display_queue_expire_num = 16;
- else
- iga1_display_queue_expire_num =
- CN700_IGA1_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700) {
- iga1_fifo_max_depth = CX700_IGA1_FIFO_MAX_DEPTH;
- iga1_fifo_threshold = CX700_IGA1_FIFO_THRESHOLD;
- iga1_fifo_high_threshold =
- CX700_IGA1_FIFO_HIGH_THRESHOLD;
- iga1_display_queue_expire_num =
- CX700_IGA1_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K8M890) {
- iga1_fifo_max_depth = K8M890_IGA1_FIFO_MAX_DEPTH;
- iga1_fifo_threshold = K8M890_IGA1_FIFO_THRESHOLD;
- iga1_fifo_high_threshold =
- K8M890_IGA1_FIFO_HIGH_THRESHOLD;
- iga1_display_queue_expire_num =
- K8M890_IGA1_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_P4M890) {
- iga1_fifo_max_depth = P4M890_IGA1_FIFO_MAX_DEPTH;
- iga1_fifo_threshold = P4M890_IGA1_FIFO_THRESHOLD;
- iga1_fifo_high_threshold =
- P4M890_IGA1_FIFO_HIGH_THRESHOLD;
- iga1_display_queue_expire_num =
- P4M890_IGA1_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_P4M900) {
- iga1_fifo_max_depth = P4M900_IGA1_FIFO_MAX_DEPTH;
- iga1_fifo_threshold = P4M900_IGA1_FIFO_THRESHOLD;
- iga1_fifo_high_threshold =
- P4M900_IGA1_FIFO_HIGH_THRESHOLD;
- iga1_display_queue_expire_num =
- P4M900_IGA1_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_VX800) {
- iga1_fifo_max_depth = VX800_IGA1_FIFO_MAX_DEPTH;
- iga1_fifo_threshold = VX800_IGA1_FIFO_THRESHOLD;
- iga1_fifo_high_threshold =
- VX800_IGA1_FIFO_HIGH_THRESHOLD;
- iga1_display_queue_expire_num =
- VX800_IGA1_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- /* Set Display FIFO Depath Select */
- reg_value = IGA1_FIFO_DEPTH_SELECT_FORMULA(iga1_fifo_max_depth);
- viafb_load_reg_num =
- display_fifo_depth_reg.iga1_fifo_depth_select_reg.reg_num;
- reg = display_fifo_depth_reg.iga1_fifo_depth_select_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIASR);
-
- /* Set Display FIFO Threshold Select */
- reg_value = IGA1_FIFO_THRESHOLD_FORMULA(iga1_fifo_threshold);
- viafb_load_reg_num =
- fifo_threshold_select_reg.
- iga1_fifo_threshold_select_reg.reg_num;
- reg =
- fifo_threshold_select_reg.
- iga1_fifo_threshold_select_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIASR);
-
- /* Set FIFO High Threshold Select */
- reg_value =
- IGA1_FIFO_HIGH_THRESHOLD_FORMULA(iga1_fifo_high_threshold);
- viafb_load_reg_num =
- fifo_high_threshold_select_reg.
- iga1_fifo_high_threshold_select_reg.reg_num;
- reg =
- fifo_high_threshold_select_reg.
- iga1_fifo_high_threshold_select_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIASR);
-
- /* Set Display Queue Expire Num */
- reg_value =
- IGA1_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA
- (iga1_display_queue_expire_num);
- viafb_load_reg_num =
- display_queue_expire_num_reg.
- iga1_display_queue_expire_num_reg.reg_num;
- reg =
- display_queue_expire_num_reg.
- iga1_display_queue_expire_num_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIASR);
-
- } else {
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K800) {
- iga2_fifo_max_depth = K800_IGA2_FIFO_MAX_DEPTH;
- iga2_fifo_threshold = K800_IGA2_FIFO_THRESHOLD;
- iga2_fifo_high_threshold =
- K800_IGA2_FIFO_HIGH_THRESHOLD;
-
- /* If resolution > 1280x1024, expire length = 64,
- else expire length = 128 */
- if ((hor_active > 1280) && (ver_active > 1024))
- iga2_display_queue_expire_num = 16;
- else
- iga2_display_queue_expire_num =
- K800_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_PM800) {
- iga2_fifo_max_depth = P880_IGA2_FIFO_MAX_DEPTH;
- iga2_fifo_threshold = P880_IGA2_FIFO_THRESHOLD;
- iga2_fifo_high_threshold =
- P880_IGA2_FIFO_HIGH_THRESHOLD;
-
- /* If resolution > 1280x1024, expire length = 64,
- else expire length = 128 */
- if ((hor_active > 1280) && (ver_active > 1024))
- iga2_display_queue_expire_num = 16;
- else
- iga2_display_queue_expire_num =
- P880_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CN700) {
- iga2_fifo_max_depth = CN700_IGA2_FIFO_MAX_DEPTH;
- iga2_fifo_threshold = CN700_IGA2_FIFO_THRESHOLD;
- iga2_fifo_high_threshold =
- CN700_IGA2_FIFO_HIGH_THRESHOLD;
-
- /* If resolution > 1280x1024, expire length = 64,
- else expire length = 128 */
- if ((hor_active > 1280) && (ver_active > 1024))
- iga2_display_queue_expire_num = 16;
- else
- iga2_display_queue_expire_num =
- CN700_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700) {
- iga2_fifo_max_depth = CX700_IGA2_FIFO_MAX_DEPTH;
- iga2_fifo_threshold = CX700_IGA2_FIFO_THRESHOLD;
- iga2_fifo_high_threshold =
- CX700_IGA2_FIFO_HIGH_THRESHOLD;
- iga2_display_queue_expire_num =
- CX700_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K8M890) {
- iga2_fifo_max_depth = K8M890_IGA2_FIFO_MAX_DEPTH;
- iga2_fifo_threshold = K8M890_IGA2_FIFO_THRESHOLD;
- iga2_fifo_high_threshold =
- K8M890_IGA2_FIFO_HIGH_THRESHOLD;
- iga2_display_queue_expire_num =
- K8M890_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_P4M890) {
- iga2_fifo_max_depth = P4M890_IGA2_FIFO_MAX_DEPTH;
- iga2_fifo_threshold = P4M890_IGA2_FIFO_THRESHOLD;
- iga2_fifo_high_threshold =
- P4M890_IGA2_FIFO_HIGH_THRESHOLD;
- iga2_display_queue_expire_num =
- P4M890_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_P4M900) {
- iga2_fifo_max_depth = P4M900_IGA2_FIFO_MAX_DEPTH;
- iga2_fifo_threshold = P4M900_IGA2_FIFO_THRESHOLD;
- iga2_fifo_high_threshold =
- P4M900_IGA2_FIFO_HIGH_THRESHOLD;
- iga2_display_queue_expire_num =
- P4M900_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_VX800) {
- iga2_fifo_max_depth = VX800_IGA2_FIFO_MAX_DEPTH;
- iga2_fifo_threshold = VX800_IGA2_FIFO_THRESHOLD;
- iga2_fifo_high_threshold =
- VX800_IGA2_FIFO_HIGH_THRESHOLD;
- iga2_display_queue_expire_num =
- VX800_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K800) {
- /* Set Display FIFO Depath Select */
- reg_value =
- IGA2_FIFO_DEPTH_SELECT_FORMULA(iga2_fifo_max_depth)
- - 1;
- /* Patch LCD in IGA2 case */
- viafb_load_reg_num =
- display_fifo_depth_reg.
- iga2_fifo_depth_select_reg.reg_num;
- reg =
- display_fifo_depth_reg.
- iga2_fifo_depth_select_reg.reg;
- viafb_load_reg(reg_value,
- viafb_load_reg_num, reg, VIACR);
- } else {
-
- /* Set Display FIFO Depath Select */
- reg_value =
- IGA2_FIFO_DEPTH_SELECT_FORMULA(iga2_fifo_max_depth);
- viafb_load_reg_num =
- display_fifo_depth_reg.
- iga2_fifo_depth_select_reg.reg_num;
- reg =
- display_fifo_depth_reg.
- iga2_fifo_depth_select_reg.reg;
- viafb_load_reg(reg_value,
- viafb_load_reg_num, reg, VIACR);
- }
-
- /* Set Display FIFO Threshold Select */
- reg_value = IGA2_FIFO_THRESHOLD_FORMULA(iga2_fifo_threshold);
- viafb_load_reg_num =
- fifo_threshold_select_reg.
- iga2_fifo_threshold_select_reg.reg_num;
- reg =
- fifo_threshold_select_reg.
- iga2_fifo_threshold_select_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);
-
- /* Set FIFO High Threshold Select */
- reg_value =
- IGA2_FIFO_HIGH_THRESHOLD_FORMULA(iga2_fifo_high_threshold);
- viafb_load_reg_num =
- fifo_high_threshold_select_reg.
- iga2_fifo_high_threshold_select_reg.reg_num;
- reg =
- fifo_high_threshold_select_reg.
- iga2_fifo_high_threshold_select_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);
-
- /* Set Display Queue Expire Num */
- reg_value =
- IGA2_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA
- (iga2_display_queue_expire_num);
- viafb_load_reg_num =
- display_queue_expire_num_reg.
- iga2_display_queue_expire_num_reg.reg_num;
- reg =
- display_queue_expire_num_reg.
- iga2_display_queue_expire_num_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);
-
- }
-
-}
-
-u32 viafb_get_clk_value(int clk)
-{
- int i;
-
- for (i = 0; i < NUM_TOTAL_PLL_TABLE; i++) {
- if (clk == pll_value[i].clk) {
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- case UNICHROME_K400:
- return pll_value[i].cle266_pll;
-
- case UNICHROME_K800:
- case UNICHROME_PM800:
- case UNICHROME_CN700:
- return pll_value[i].k800_pll;
-
- case UNICHROME_CX700:
- case UNICHROME_K8M890:
- case UNICHROME_P4M890:
- case UNICHROME_P4M900:
- case UNICHROME_VX800:
- return pll_value[i].cx700_pll;
- }
- }
- }
-
- DEBUG_MSG(KERN_INFO "Can't find match PLL value\n\n");
- return 0;
-}
-
-/* Set VCLK*/
-void viafb_set_vclock(u32 CLK, int set_iga)
-{
- unsigned char RegTemp;
-
- /* H.W. Reset : ON */
- viafb_write_reg_mask(CR17, VIACR, 0x00, BIT7);
-
- if ((set_iga == IGA1) || (set_iga == IGA1_IGA2)) {
- /* Change D,N FOR VCLK */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- case UNICHROME_K400:
- viafb_write_reg(SR46, VIASR, CLK / 0x100);
- viafb_write_reg(SR47, VIASR, CLK % 0x100);
- break;
-
- case UNICHROME_K800:
- case UNICHROME_PM800:
- case UNICHROME_CN700:
- case UNICHROME_CX700:
- case UNICHROME_K8M890:
- case UNICHROME_P4M890:
- case UNICHROME_P4M900:
- case UNICHROME_VX800:
- viafb_write_reg(SR44, VIASR, CLK / 0x10000);
- DEBUG_MSG(KERN_INFO "\nSR44=%x", CLK / 0x10000);
- viafb_write_reg(SR45, VIASR, (CLK & 0xFFFF) / 0x100);
- DEBUG_MSG(KERN_INFO "\nSR45=%x",
- (CLK & 0xFFFF) / 0x100);
- viafb_write_reg(SR46, VIASR, CLK % 0x100);
- DEBUG_MSG(KERN_INFO "\nSR46=%x", CLK % 0x100);
- break;
- }
- }
-
- if ((set_iga == IGA2) || (set_iga == IGA1_IGA2)) {
- /* Change D,N FOR LCK */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- case UNICHROME_K400:
- viafb_write_reg(SR44, VIASR, CLK / 0x100);
- viafb_write_reg(SR45, VIASR, CLK % 0x100);
- break;
-
- case UNICHROME_K800:
- case UNICHROME_PM800:
- case UNICHROME_CN700:
- case UNICHROME_CX700:
- case UNICHROME_K8M890:
- case UNICHROME_P4M890:
- case UNICHROME_P4M900:
- case UNICHROME_VX800:
- viafb_write_reg(SR4A, VIASR, CLK / 0x10000);
- viafb_write_reg(SR4B, VIASR, (CLK & 0xFFFF) / 0x100);
- viafb_write_reg(SR4C, VIASR, CLK % 0x100);
- break;
- }
- }
-
- /* H.W. Reset : OFF */
- viafb_write_reg_mask(CR17, VIACR, 0x80, BIT7);
-
- /* Reset PLL */
- if ((set_iga == IGA1) || (set_iga == IGA1_IGA2)) {
- viafb_write_reg_mask(SR40, VIASR, 0x02, BIT1);
- viafb_write_reg_mask(SR40, VIASR, 0x00, BIT1);
- }
-
- if ((set_iga == IGA2) || (set_iga == IGA1_IGA2)) {
- viafb_write_reg_mask(SR40, VIASR, 0x01, BIT0);
- viafb_write_reg_mask(SR40, VIASR, 0x00, BIT0);
- }
-
- /* Fire! */
- RegTemp = inb(VIARMisc);
- outb(RegTemp | (BIT2 + BIT3), VIAWMisc);
-}
-
-void viafb_load_crtc_timing(struct display_timing device_timing,
- int set_iga)
-{
- int i;
- int viafb_load_reg_num = 0;
- int reg_value = 0;
- struct io_register *reg = NULL;
-
- viafb_unlock_crt();
-
- for (i = 0; i < 12; i++) {
- if (set_iga == IGA1) {
- switch (i) {
- case H_TOTAL_INDEX:
- reg_value =
- IGA1_HOR_TOTAL_FORMULA(device_timing.
- hor_total);
- viafb_load_reg_num =
- iga1_crtc_reg.hor_total.reg_num;
- reg = iga1_crtc_reg.hor_total.reg;
- break;
- case H_ADDR_INDEX:
- reg_value =
- IGA1_HOR_ADDR_FORMULA(device_timing.
- hor_addr);
- viafb_load_reg_num =
- iga1_crtc_reg.hor_addr.reg_num;
- reg = iga1_crtc_reg.hor_addr.reg;
- break;
- case H_BLANK_START_INDEX:
- reg_value =
- IGA1_HOR_BLANK_START_FORMULA
- (device_timing.hor_blank_start);
- viafb_load_reg_num =
- iga1_crtc_reg.hor_blank_start.reg_num;
- reg = iga1_crtc_reg.hor_blank_start.reg;
- break;
- case H_BLANK_END_INDEX:
- reg_value =
- IGA1_HOR_BLANK_END_FORMULA
- (device_timing.hor_blank_start,
- device_timing.hor_blank_end);
- viafb_load_reg_num =
- iga1_crtc_reg.hor_blank_end.reg_num;
- reg = iga1_crtc_reg.hor_blank_end.reg;
- break;
- case H_SYNC_START_INDEX:
- reg_value =
- IGA1_HOR_SYNC_START_FORMULA
- (device_timing.hor_sync_start);
- viafb_load_reg_num =
- iga1_crtc_reg.hor_sync_start.reg_num;
- reg = iga1_crtc_reg.hor_sync_start.reg;
- break;
- case H_SYNC_END_INDEX:
- reg_value =
- IGA1_HOR_SYNC_END_FORMULA
- (device_timing.hor_sync_start,
- device_timing.hor_sync_end);
- viafb_load_reg_num =
- iga1_crtc_reg.hor_sync_end.reg_num;
- reg = iga1_crtc_reg.hor_sync_end.reg;
- break;
- case V_TOTAL_INDEX:
- reg_value =
- IGA1_VER_TOTAL_FORMULA(device_timing.
- ver_total);
- viafb_load_reg_num =
- iga1_crtc_reg.ver_total.reg_num;
- reg = iga1_crtc_reg.ver_total.reg;
- break;
- case V_ADDR_INDEX:
- reg_value =
- IGA1_VER_ADDR_FORMULA(device_timing.
- ver_addr);
- viafb_load_reg_num =
- iga1_crtc_reg.ver_addr.reg_num;
- reg = iga1_crtc_reg.ver_addr.reg;
- break;
- case V_BLANK_START_INDEX:
- reg_value =
- IGA1_VER_BLANK_START_FORMULA
- (device_timing.ver_blank_start);
- viafb_load_reg_num =
- iga1_crtc_reg.ver_blank_start.reg_num;
- reg = iga1_crtc_reg.ver_blank_start.reg;
- break;
- case V_BLANK_END_INDEX:
- reg_value =
- IGA1_VER_BLANK_END_FORMULA
- (device_timing.ver_blank_start,
- device_timing.ver_blank_end);
- viafb_load_reg_num =
- iga1_crtc_reg.ver_blank_end.reg_num;
- reg = iga1_crtc_reg.ver_blank_end.reg;
- break;
- case V_SYNC_START_INDEX:
- reg_value =
- IGA1_VER_SYNC_START_FORMULA
- (device_timing.ver_sync_start);
- viafb_load_reg_num =
- iga1_crtc_reg.ver_sync_start.reg_num;
- reg = iga1_crtc_reg.ver_sync_start.reg;
- break;
- case V_SYNC_END_INDEX:
- reg_value =
- IGA1_VER_SYNC_END_FORMULA
- (device_timing.ver_sync_start,
- device_timing.ver_sync_end);
- viafb_load_reg_num =
- iga1_crtc_reg.ver_sync_end.reg_num;
- reg = iga1_crtc_reg.ver_sync_end.reg;
- break;
-
- }
- }
-
- if (set_iga == IGA2) {
- switch (i) {
- case H_TOTAL_INDEX:
- reg_value =
- IGA2_HOR_TOTAL_FORMULA(device_timing.
- hor_total);
- viafb_load_reg_num =
- iga2_crtc_reg.hor_total.reg_num;
- reg = iga2_crtc_reg.hor_total.reg;
- break;
- case H_ADDR_INDEX:
- reg_value =
- IGA2_HOR_ADDR_FORMULA(device_timing.
- hor_addr);
- viafb_load_reg_num =
- iga2_crtc_reg.hor_addr.reg_num;
- reg = iga2_crtc_reg.hor_addr.reg;
- break;
- case H_BLANK_START_INDEX:
- reg_value =
- IGA2_HOR_BLANK_START_FORMULA
- (device_timing.hor_blank_start);
- viafb_load_reg_num =
- iga2_crtc_reg.hor_blank_start.reg_num;
- reg = iga2_crtc_reg.hor_blank_start.reg;
- break;
- case H_BLANK_END_INDEX:
- reg_value =
- IGA2_HOR_BLANK_END_FORMULA
- (device_timing.hor_blank_start,
- device_timing.hor_blank_end);
- viafb_load_reg_num =
- iga2_crtc_reg.hor_blank_end.reg_num;
- reg = iga2_crtc_reg.hor_blank_end.reg;
- break;
- case H_SYNC_START_INDEX:
- reg_value =
- IGA2_HOR_SYNC_START_FORMULA
- (device_timing.hor_sync_start);
- if (UNICHROME_CN700 <=
- viaparinfo->chip_info->gfx_chip_name)
- viafb_load_reg_num =
- iga2_crtc_reg.hor_sync_start.
- reg_num;
- else
- viafb_load_reg_num = 3;
- reg = iga2_crtc_reg.hor_sync_start.reg;
- break;
- case H_SYNC_END_INDEX:
- reg_value =
- IGA2_HOR_SYNC_END_FORMULA
- (device_timing.hor_sync_start,
- device_timing.hor_sync_end);
- viafb_load_reg_num =
- iga2_crtc_reg.hor_sync_end.reg_num;
- reg = iga2_crtc_reg.hor_sync_end.reg;
- break;
- case V_TOTAL_INDEX:
- reg_value =
- IGA2_VER_TOTAL_FORMULA(device_timing.
- ver_total);
- viafb_load_reg_num =
- iga2_crtc_reg.ver_total.reg_num;
- reg = iga2_crtc_reg.ver_total.reg;
- break;
- case V_ADDR_INDEX:
- reg_value =
- IGA2_VER_ADDR_FORMULA(device_timing.
- ver_addr);
- viafb_load_reg_num =
- iga2_crtc_reg.ver_addr.reg_num;
- reg = iga2_crtc_reg.ver_addr.reg;
- break;
- case V_BLANK_START_INDEX:
- reg_value =
- IGA2_VER_BLANK_START_FORMULA
- (device_timing.ver_blank_start);
- viafb_load_reg_num =
- iga2_crtc_reg.ver_blank_start.reg_num;
- reg = iga2_crtc_reg.ver_blank_start.reg;
- break;
- case V_BLANK_END_INDEX:
- reg_value =
- IGA2_VER_BLANK_END_FORMULA
- (device_timing.ver_blank_start,
- device_timing.ver_blank_end);
- viafb_load_reg_num =
- iga2_crtc_reg.ver_blank_end.reg_num;
- reg = iga2_crtc_reg.ver_blank_end.reg;
- break;
- case V_SYNC_START_INDEX:
- reg_value =
- IGA2_VER_SYNC_START_FORMULA
- (device_timing.ver_sync_start);
- viafb_load_reg_num =
- iga2_crtc_reg.ver_sync_start.reg_num;
- reg = iga2_crtc_reg.ver_sync_start.reg;
- break;
- case V_SYNC_END_INDEX:
- reg_value =
- IGA2_VER_SYNC_END_FORMULA
- (device_timing.ver_sync_start,
- device_timing.ver_sync_end);
- viafb_load_reg_num =
- iga2_crtc_reg.ver_sync_end.reg_num;
- reg = iga2_crtc_reg.ver_sync_end.reg;
- break;
-
- }
- }
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);
- }
-
- viafb_lock_crt();
-}
-
-void viafb_set_color_depth(int bpp_byte, int set_iga)
-{
- if (set_iga == IGA1) {
- switch (bpp_byte) {
- case MODE_8BPP:
- viafb_write_reg_mask(SR15, VIASR, 0x22, 0x7E);
- break;
- case MODE_16BPP:
- viafb_write_reg_mask(SR15, VIASR, 0xB6, 0xFE);
- break;
- case MODE_32BPP:
- viafb_write_reg_mask(SR15, VIASR, 0xAE, 0xFE);
- break;
- }
- } else {
- switch (bpp_byte) {
- case MODE_8BPP:
- viafb_write_reg_mask(CR67, VIACR, 0x00, BIT6 + BIT7);
- break;
- case MODE_16BPP:
- viafb_write_reg_mask(CR67, VIACR, 0x40, BIT6 + BIT7);
- break;
- case MODE_32BPP:
- viafb_write_reg_mask(CR67, VIACR, 0xC0, BIT6 + BIT7);
- break;
- }
- }
-}
-
-void viafb_fill_crtc_timing(struct crt_mode_table *crt_table,
- int mode_index, int bpp_byte, int set_iga)
-{
- struct VideoModeTable *video_mode;
- struct display_timing crt_reg;
- int i;
- int index = 0;
- int h_addr, v_addr;
- u32 pll_D_N;
-
- video_mode = &CLE266Modes[search_mode_setting(mode_index)];
-
- for (i = 0; i < video_mode->mode_array; i++) {
- index = i;
-
- if (crt_table[i].refresh_rate == viaparinfo->
- crt_setting_info->refresh_rate)
- break;
- }
-
- crt_reg = crt_table[index].crtc;
-
- /* Mode 640x480 has border, but LCD/DFP didn't have border. */
- /* So we would delete border. */
- if ((viafb_LCD_ON | viafb_DVI_ON) && (mode_index == VIA_RES_640X480)
- && (viaparinfo->crt_setting_info->refresh_rate == 60)) {
- /* The border is 8 pixels. */
- crt_reg.hor_blank_start = crt_reg.hor_blank_start - 8;
-
- /* Blanking time should add left and right borders. */
- crt_reg.hor_blank_end = crt_reg.hor_blank_end + 16;
- }
-
- h_addr = crt_reg.hor_addr;
- v_addr = crt_reg.ver_addr;
-
- /* update polarity for CRT timing */
- if (crt_table[index].h_sync_polarity == NEGATIVE) {
- if (crt_table[index].v_sync_polarity == NEGATIVE)
- outb((inb(VIARMisc) & (~(BIT6 + BIT7))) |
- (BIT6 + BIT7), VIAWMisc);
- else
- outb((inb(VIARMisc) & (~(BIT6 + BIT7))) | (BIT6),
- VIAWMisc);
- } else {
- if (crt_table[index].v_sync_polarity == NEGATIVE)
- outb((inb(VIARMisc) & (~(BIT6 + BIT7))) | (BIT7),
- VIAWMisc);
- else
- outb((inb(VIARMisc) & (~(BIT6 + BIT7))), VIAWMisc);
- }
-
- if (set_iga == IGA1) {
- viafb_unlock_crt();
- viafb_write_reg(CR09, VIACR, 0x00); /*initial CR09=0 */
- viafb_write_reg_mask(CR11, VIACR, 0x00, BIT4 + BIT5 + BIT6);
- viafb_write_reg_mask(CR17, VIACR, 0x00, BIT7);
- }
-
- switch (set_iga) {
- case IGA1:
- viafb_load_crtc_timing(crt_reg, IGA1);
- break;
- case IGA2:
- viafb_load_crtc_timing(crt_reg, IGA2);
- break;
- }
-
- load_fix_bit_crtc_reg();
- viafb_lock_crt();
- viafb_write_reg_mask(CR17, VIACR, 0x80, BIT7);
- viafb_load_offset_reg(h_addr, bpp_byte, set_iga);
- viafb_load_fetch_count_reg(h_addr, bpp_byte, set_iga);
-
- /* load FIFO */
- if ((viaparinfo->chip_info->gfx_chip_name != UNICHROME_CLE266)
- && (viaparinfo->chip_info->gfx_chip_name != UNICHROME_K400))
- viafb_load_FIFO_reg(set_iga, h_addr, v_addr);
-
- /* load SR Register About Memory and Color part */
- viafb_set_color_depth(bpp_byte, set_iga);
-
- pll_D_N = viafb_get_clk_value(crt_table[index].clk);
- DEBUG_MSG(KERN_INFO "PLL=%x", pll_D_N);
- viafb_set_vclock(pll_D_N, set_iga);
-
-}
-
-void viafb_init_chip_info(void)
-{
- init_gfx_chip_info();
- init_tmds_chip_info();
- init_lvds_chip_info();
-
- viaparinfo->crt_setting_info->iga_path = IGA1;
- viaparinfo->crt_setting_info->refresh_rate = viafb_refresh;
-
- /*Set IGA path for each device */
- viafb_set_iga_path();
-
- viaparinfo->lvds_setting_info->display_method = viafb_lcd_dsp_method;
- viaparinfo->lvds_setting_info->get_lcd_size_method =
- GET_LCD_SIZE_BY_USER_SETTING;
- viaparinfo->lvds_setting_info->lcd_mode = viafb_lcd_mode;
- viaparinfo->lvds_setting_info2->display_method =
- viaparinfo->lvds_setting_info->display_method;
- viaparinfo->lvds_setting_info2->lcd_mode =
- viaparinfo->lvds_setting_info->lcd_mode;
-}
-
-void viafb_update_device_setting(int hres, int vres,
- int bpp, int vmode_refresh, int flag)
-{
- if (flag == 0) {
- viaparinfo->crt_setting_info->h_active = hres;
- viaparinfo->crt_setting_info->v_active = vres;
- viaparinfo->crt_setting_info->bpp = bpp;
- viaparinfo->crt_setting_info->refresh_rate =
- vmode_refresh;
-
- viaparinfo->tmds_setting_info->h_active = hres;
- viaparinfo->tmds_setting_info->v_active = vres;
- viaparinfo->tmds_setting_info->bpp = bpp;
- viaparinfo->tmds_setting_info->refresh_rate =
- vmode_refresh;
-
- viaparinfo->lvds_setting_info->h_active = hres;
- viaparinfo->lvds_setting_info->v_active = vres;
- viaparinfo->lvds_setting_info->bpp = bpp;
- viaparinfo->lvds_setting_info->refresh_rate =
- vmode_refresh;
- viaparinfo->lvds_setting_info2->h_active = hres;
- viaparinfo->lvds_setting_info2->v_active = vres;
- viaparinfo->lvds_setting_info2->bpp = bpp;
- viaparinfo->lvds_setting_info2->refresh_rate =
- vmode_refresh;
- } else {
-
- if (viaparinfo->tmds_setting_info->iga_path == IGA2) {
- viaparinfo->tmds_setting_info->h_active = hres;
- viaparinfo->tmds_setting_info->v_active = vres;
- viaparinfo->tmds_setting_info->bpp = bpp;
- viaparinfo->tmds_setting_info->refresh_rate =
- vmode_refresh;
- }
-
- if (viaparinfo->lvds_setting_info->iga_path == IGA2) {
- viaparinfo->lvds_setting_info->h_active = hres;
- viaparinfo->lvds_setting_info->v_active = vres;
- viaparinfo->lvds_setting_info->bpp = bpp;
- viaparinfo->lvds_setting_info->refresh_rate =
- vmode_refresh;
- }
- if (IGA2 == viaparinfo->lvds_setting_info2->iga_path) {
- viaparinfo->lvds_setting_info2->h_active = hres;
- viaparinfo->lvds_setting_info2->v_active = vres;
- viaparinfo->lvds_setting_info2->bpp = bpp;
- viaparinfo->lvds_setting_info2->refresh_rate =
- vmode_refresh;
- }
- }
-}
-
-static void init_gfx_chip_info(void)
-{
- struct pci_dev *pdev = NULL;
- u32 i;
- u8 tmp;
-
- /* Indentify GFX Chip Name */
- for (i = 0; pciidlist[i].vendor != 0; i++) {
- pdev = pci_get_device(pciidlist[i].vendor,
- pciidlist[i].device, 0);
- if (pdev)
- break;
- }
-
- if (!pciidlist[i].vendor)
- return ;
-
- viaparinfo->chip_info->gfx_chip_name = pciidlist[i].chip_index;
-
- /* Check revision of CLE266 Chip */
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) {
- /* CR4F only define in CLE266.CX chip */
- tmp = viafb_read_reg(VIACR, CR4F);
- viafb_write_reg(CR4F, VIACR, 0x55);
- if (viafb_read_reg(VIACR, CR4F) != 0x55)
- viaparinfo->chip_info->gfx_chip_revision =
- CLE266_REVISION_AX;
- else
- viaparinfo->chip_info->gfx_chip_revision =
- CLE266_REVISION_CX;
- /* restore orignal CR4F value */
- viafb_write_reg(CR4F, VIACR, tmp);
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700) {
- tmp = viafb_read_reg(VIASR, SR43);
- DEBUG_MSG(KERN_INFO "SR43:%X\n", tmp);
- if (tmp & 0x02) {
- viaparinfo->chip_info->gfx_chip_revision =
- CX700_REVISION_700M2;
- } else if (tmp & 0x40) {
- viaparinfo->chip_info->gfx_chip_revision =
- CX700_REVISION_700M;
- } else {
- viaparinfo->chip_info->gfx_chip_revision =
- CX700_REVISION_700;
- }
- }
-
- pci_dev_put(pdev);
-}
-
-static void init_tmds_chip_info(void)
-{
- viafb_tmds_trasmitter_identify();
-
- if (INTERFACE_NONE == viaparinfo->chip_info->tmds_chip_info.
- output_interface) {
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CX700:
- {
- /* we should check support by hardware layout.*/
- if ((viafb_display_hardware_layout ==
- HW_LAYOUT_DVI_ONLY)
- || (viafb_display_hardware_layout ==
- HW_LAYOUT_LCD_DVI)) {
- viaparinfo->chip_info->tmds_chip_info.
- output_interface = INTERFACE_TMDS;
- } else {
- viaparinfo->chip_info->tmds_chip_info.
- output_interface =
- INTERFACE_NONE;
- }
- break;
- }
- case UNICHROME_K8M890:
- case UNICHROME_P4M900:
- case UNICHROME_P4M890:
- /* TMDS on PCIE, we set DFPLOW as default. */
- viaparinfo->chip_info->tmds_chip_info.output_interface =
- INTERFACE_DFP_LOW;
- break;
- default:
- {
- /* set DVP1 default for DVI */
- viaparinfo->chip_info->tmds_chip_info
- .output_interface = INTERFACE_DVP1;
- }
- }
- }
-
- DEBUG_MSG(KERN_INFO "TMDS Chip = %d\n",
- viaparinfo->chip_info->tmds_chip_info.tmds_chip_name);
- viaparinfo->tmds_setting_info->get_dvi_size_method =
- GET_DVI_SIZE_BY_VGA_BIOS;
- viafb_init_dvi_size();
-}
-
-static void init_lvds_chip_info(void)
-{
- if (viafb_lcd_panel_id > LCD_PANEL_ID_MAXIMUM)
- viaparinfo->lvds_setting_info->get_lcd_size_method =
- GET_LCD_SIZE_BY_VGA_BIOS;
- else
- viaparinfo->lvds_setting_info->get_lcd_size_method =
- GET_LCD_SIZE_BY_USER_SETTING;
-
- viafb_lvds_trasmitter_identify();
- viafb_init_lcd_size();
- viafb_init_lvds_output_interface(&viaparinfo->chip_info->lvds_chip_info,
- viaparinfo->lvds_setting_info);
- if (viaparinfo->chip_info->lvds_chip_info2.lvds_chip_name) {
- viafb_init_lvds_output_interface(&viaparinfo->chip_info->
- lvds_chip_info2, viaparinfo->lvds_setting_info2);
- }
- /*If CX700,two singel LCD, we need to reassign
- LCD interface to different LVDS port */
- if ((UNICHROME_CX700 == viaparinfo->chip_info->gfx_chip_name)
- && (HW_LAYOUT_LCD1_LCD2 == viafb_display_hardware_layout)) {
- if ((INTEGRATED_LVDS == viaparinfo->chip_info->lvds_chip_info.
- lvds_chip_name) && (INTEGRATED_LVDS ==
- viaparinfo->chip_info->
- lvds_chip_info2.lvds_chip_name)) {
- viaparinfo->chip_info->lvds_chip_info.output_interface =
- INTERFACE_LVDS0;
- viaparinfo->chip_info->lvds_chip_info2.
- output_interface =
- INTERFACE_LVDS1;
- }
- }
-
- DEBUG_MSG(KERN_INFO "LVDS Chip = %d\n",
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name);
- DEBUG_MSG(KERN_INFO "LVDS1 output_interface = %d\n",
- viaparinfo->chip_info->lvds_chip_info.output_interface);
- DEBUG_MSG(KERN_INFO "LVDS2 output_interface = %d\n",
- viaparinfo->chip_info->lvds_chip_info.output_interface);
-}
-
-void viafb_init_dac(int set_iga)
-{
- int i;
- u8 tmp;
-
- if (set_iga == IGA1) {
- /* access Primary Display's LUT */
- viafb_write_reg_mask(SR1A, VIASR, 0x00, BIT0);
- /* turn off LCK */
- viafb_write_reg_mask(SR1B, VIASR, 0x00, BIT7 + BIT6);
- for (i = 0; i < 256; i++) {
- write_dac_reg(i, palLUT_table[i].red,
- palLUT_table[i].green,
- palLUT_table[i].blue);
- }
- /* turn on LCK */
- viafb_write_reg_mask(SR1B, VIASR, 0xC0, BIT7 + BIT6);
- } else {
- tmp = viafb_read_reg(VIACR, CR6A);
- /* access Secondary Display's LUT */
- viafb_write_reg_mask(CR6A, VIACR, 0x40, BIT6);
- viafb_write_reg_mask(SR1A, VIASR, 0x01, BIT0);
- for (i = 0; i < 256; i++) {
- write_dac_reg(i, palLUT_table[i].red,
- palLUT_table[i].green,
- palLUT_table[i].blue);
- }
- /* set IGA1 DAC for default */
- viafb_write_reg_mask(SR1A, VIASR, 0x00, BIT0);
- viafb_write_reg(CR6A, VIACR, tmp);
- }
-}
-
-static void device_screen_off(void)
-{
- /* turn off CRT screen (IGA1) */
- viafb_write_reg_mask(SR01, VIASR, 0x20, BIT5);
-}
-
-static void device_screen_on(void)
-{
- /* turn on CRT screen (IGA1) */
- viafb_write_reg_mask(SR01, VIASR, 0x00, BIT5);
-}
-
-static void set_display_channel(void)
-{
- /*If viafb_LCD2_ON, on cx700, internal lvds's information
- is keeped on lvds_setting_info2 */
- if (viafb_LCD2_ON &&
- viaparinfo->lvds_setting_info2->device_lcd_dualedge) {
- /* For dual channel LCD: */
- /* Set to Dual LVDS channel. */
- viafb_write_reg_mask(CRD2, VIACR, 0x20, BIT4 + BIT5);
- } else if (viafb_LCD_ON && viafb_DVI_ON) {
- /* For LCD+DFP: */
- /* Set to LVDS1 + TMDS channel. */
- viafb_write_reg_mask(CRD2, VIACR, 0x10, BIT4 + BIT5);
- } else if (viafb_DVI_ON) {
- /* Set to single TMDS channel. */
- viafb_write_reg_mask(CRD2, VIACR, 0x30, BIT4 + BIT5);
- } else if (viafb_LCD_ON) {
- if (viaparinfo->lvds_setting_info->device_lcd_dualedge) {
- /* For dual channel LCD: */
- /* Set to Dual LVDS channel. */
- viafb_write_reg_mask(CRD2, VIACR, 0x20, BIT4 + BIT5);
- } else {
- /* Set to LVDS0 + LVDS1 channel. */
- viafb_write_reg_mask(CRD2, VIACR, 0x00, BIT4 + BIT5);
- }
- }
-}
-
-int viafb_setmode(int vmode_index, int hor_res, int ver_res, int video_bpp,
- int vmode_index1, int hor_res1, int ver_res1, int video_bpp1)
-{
- int i, j;
- int port;
- u8 value, index, mask;
- struct VideoModeTable *vmode_tbl;
- struct crt_mode_table *crt_timing;
- struct VideoModeTable *vmode_tbl1 = NULL;
- struct crt_mode_table *crt_timing1 = NULL;
-
- DEBUG_MSG(KERN_INFO "Set Mode!!\n");
- DEBUG_MSG(KERN_INFO
- "vmode_index=%d hor_res=%d ver_res=%d video_bpp=%d\n",
- vmode_index, hor_res, ver_res, video_bpp);
-
- device_screen_off();
- vmode_tbl = &CLE266Modes[search_mode_setting(vmode_index)];
- crt_timing = vmode_tbl->crtc;
-
- if (viafb_SAMM_ON == 1) {
- vmode_tbl1 = &CLE266Modes[search_mode_setting(vmode_index1)];
- crt_timing1 = vmode_tbl1->crtc;
- }
-
- inb(VIAStatus);
- outb(0x00, VIAAR);
-
- /* Write Common Setting for Video Mode */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- viafb_write_regx(CLE266_ModeXregs, NUM_TOTAL_CLE266_ModeXregs);
- break;
-
- case UNICHROME_K400:
- viafb_write_regx(KM400_ModeXregs, NUM_TOTAL_KM400_ModeXregs);
- break;
-
- case UNICHROME_K800:
- case UNICHROME_PM800:
- viafb_write_regx(CN400_ModeXregs, NUM_TOTAL_CN400_ModeXregs);
- break;
-
- case UNICHROME_CN700:
- case UNICHROME_K8M890:
- case UNICHROME_P4M890:
- case UNICHROME_P4M900:
- viafb_write_regx(CN700_ModeXregs, NUM_TOTAL_CN700_ModeXregs);
- break;
-
- case UNICHROME_CX700:
- viafb_write_regx(CX700_ModeXregs, NUM_TOTAL_CX700_ModeXregs);
-
- case UNICHROME_VX800:
- viafb_write_regx(VX800_ModeXregs, NUM_TOTAL_VX800_ModeXregs);
-
- break;
- }
-
- device_off();
-
- /* Fill VPIT Parameters */
- /* Write Misc Register */
- outb(VPIT.Misc, VIAWMisc);
-
- /* Write Sequencer */
- for (i = 1; i <= StdSR; i++) {
- outb(i, VIASR);
- outb(VPIT.SR[i - 1], VIASR + 1);
- }
-
- viafb_set_start_addr();
- viafb_set_iga_path();
-
- /* Write CRTC */
- viafb_fill_crtc_timing(crt_timing, vmode_index, video_bpp / 8, IGA1);
-
- /* Write Graphic Controller */
- for (i = 0; i < StdGR; i++) {
- outb(i, VIAGR);
- outb(VPIT.GR[i], VIAGR + 1);
- }
-
- /* Write Attribute Controller */
- for (i = 0; i < StdAR; i++) {
- inb(VIAStatus);
- outb(i, VIAAR);
- outb(VPIT.AR[i], VIAAR);
- }
-
- inb(VIAStatus);
- outb(0x20, VIAAR);
-
- /* Update Patch Register */
-
- if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)
- || (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K400)) {
- for (i = 0; i < NUM_TOTAL_PATCH_MODE; i++) {
- if (res_patch_table[i].mode_index == vmode_index) {
- for (j = 0;
- j < res_patch_table[i].table_length; j++) {
- index =
- res_patch_table[i].
- io_reg_table[j].index;
- port =
- res_patch_table[i].
- io_reg_table[j].port;
- value =
- res_patch_table[i].
- io_reg_table[j].value;
- mask =
- res_patch_table[i].
- io_reg_table[j].mask;
- viafb_write_reg_mask(index, port, value,
- mask);
- }
- }
- }
- }
-
- if (viafb_SAMM_ON == 1) {
- if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)
- || (viaparinfo->chip_info->gfx_chip_name ==
- UNICHROME_K400)) {
- for (i = 0; i < NUM_TOTAL_PATCH_MODE; i++) {
- if (res_patch_table[i].mode_index ==
- vmode_index1) {
- for (j = 0;
- j <
- res_patch_table[i].
- table_length; j++) {
- index =
- res_patch_table[i].
- io_reg_table[j].index;
- port =
- res_patch_table[i].
- io_reg_table[j].port;
- value =
- res_patch_table[i].
- io_reg_table[j].value;
- mask =
- res_patch_table[i].
- io_reg_table[j].mask;
- viafb_write_reg_mask(index,
- port, value, mask);
- }
- }
- }
- }
- }
-
- /* Update Refresh Rate Setting */
-
- /* Clear On Screen */
-
- /* CRT set mode */
- if (viafb_CRT_ON) {
- if (viafb_SAMM_ON && (viaparinfo->crt_setting_info->iga_path ==
- IGA2)) {
- viafb_fill_crtc_timing(crt_timing1, vmode_index1,
- video_bpp1 / 8,
- viaparinfo->crt_setting_info->iga_path);
- } else {
- viafb_fill_crtc_timing(crt_timing, vmode_index,
- video_bpp / 8,
- viaparinfo->crt_setting_info->iga_path);
- }
-
- set_crt_output_path(viaparinfo->crt_setting_info->iga_path);
-
- /* Patch if set_hres is not 8 alignment (1366) to viafb_setmode
- to 8 alignment (1368),there is several pixels (2 pixels)
- on right side of screen. */
- if (hor_res % 8) {
- viafb_unlock_crt();
- viafb_write_reg(CR02, VIACR,
- viafb_read_reg(VIACR, CR02) - 1);
- viafb_lock_crt();
- }
- }
-
- if (viafb_DVI_ON) {
- if (viafb_SAMM_ON &&
- (viaparinfo->tmds_setting_info->iga_path == IGA2)) {
- viafb_dvi_set_mode(viafb_get_mode_index
- (viaparinfo->tmds_setting_info->h_active,
- viaparinfo->tmds_setting_info->
- v_active, 1),
- video_bpp1, viaparinfo->
- tmds_setting_info->iga_path);
- } else {
- viafb_dvi_set_mode(viafb_get_mode_index
- (viaparinfo->tmds_setting_info->h_active,
- viaparinfo->
- tmds_setting_info->v_active, 0),
- video_bpp, viaparinfo->
- tmds_setting_info->iga_path);
- }
- }
-
- if (viafb_LCD_ON) {
- if (viafb_SAMM_ON &&
- (viaparinfo->lvds_setting_info->iga_path == IGA2)) {
- viaparinfo->lvds_setting_info->bpp = video_bpp1;
- viafb_lcd_set_mode(crt_timing1, viaparinfo->
- lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info);
- } else {
- /* IGA1 doesn't have LCD scaling, so set it center. */
- if (viaparinfo->lvds_setting_info->iga_path == IGA1) {
- viaparinfo->lvds_setting_info->display_method =
- LCD_CENTERING;
- }
- viaparinfo->lvds_setting_info->bpp = video_bpp;
- viafb_lcd_set_mode(crt_timing, viaparinfo->
- lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info);
- }
- }
- if (viafb_LCD2_ON) {
- if (viafb_SAMM_ON &&
- (viaparinfo->lvds_setting_info2->iga_path == IGA2)) {
- viaparinfo->lvds_setting_info2->bpp = video_bpp1;
- viafb_lcd_set_mode(crt_timing1, viaparinfo->
- lvds_setting_info2,
- &viaparinfo->chip_info->lvds_chip_info2);
- } else {
- /* IGA1 doesn't have LCD scaling, so set it center. */
- if (viaparinfo->lvds_setting_info2->iga_path == IGA1) {
- viaparinfo->lvds_setting_info2->display_method =
- LCD_CENTERING;
- }
- viaparinfo->lvds_setting_info2->bpp = video_bpp;
- viafb_lcd_set_mode(crt_timing, viaparinfo->
- lvds_setting_info2,
- &viaparinfo->chip_info->lvds_chip_info2);
- }
- }
-
- if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700)
- && (viafb_LCD_ON || viafb_DVI_ON))
- set_display_channel();
-
- /* If set mode normally, save resolution information for hot-plug . */
- if (!viafb_hotplug) {
- viafb_hotplug_Xres = hor_res;
- viafb_hotplug_Yres = ver_res;
- viafb_hotplug_bpp = video_bpp;
- viafb_hotplug_refresh = viafb_refresh;
-
- if (viafb_DVI_ON)
- viafb_DeviceStatus = DVI_Device;
- else
- viafb_DeviceStatus = CRT_Device;
- }
- device_on();
-
- if (viafb_SAMM_ON == 1)
- viafb_write_reg_mask(CR6A, VIACR, 0xC0, BIT6 + BIT7);
-
- device_screen_on();
- return 1;
-}
-
-int viafb_get_pixclock(int hres, int vres, int vmode_refresh)
-{
- int i;
-
- for (i = 0; i < NUM_TOTAL_RES_MAP_REFRESH; i++) {
- if ((hres == res_map_refresh_tbl[i].hres)
- && (vres == res_map_refresh_tbl[i].vres)
- && (vmode_refresh == res_map_refresh_tbl[i].vmode_refresh))
- return res_map_refresh_tbl[i].pixclock;
- }
- return RES_640X480_60HZ_PIXCLOCK;
-
-}
-
-int viafb_get_refresh(int hres, int vres, u32 long_refresh)
-{
-#define REFRESH_TOLERANCE 3
- int i, nearest = -1, diff = REFRESH_TOLERANCE;
- for (i = 0; i < NUM_TOTAL_RES_MAP_REFRESH; i++) {
- if ((hres == res_map_refresh_tbl[i].hres)
- && (vres == res_map_refresh_tbl[i].vres)
- && (diff > (abs(long_refresh -
- res_map_refresh_tbl[i].vmode_refresh)))) {
- diff = abs(long_refresh - res_map_refresh_tbl[i].
- vmode_refresh);
- nearest = i;
- }
- }
-#undef REFRESH_TOLERANCE
- if (nearest > 0)
- return res_map_refresh_tbl[nearest].vmode_refresh;
- return 60;
-}
-
-static void device_off(void)
-{
- viafb_crt_disable();
- viafb_dvi_disable();
- viafb_lcd_disable();
-}
-
-static void device_on(void)
-{
- if (viafb_CRT_ON == 1)
- viafb_crt_enable();
- if (viafb_DVI_ON == 1)
- viafb_dvi_enable();
- if (viafb_LCD_ON == 1)
- viafb_lcd_enable();
-}
-
-void viafb_crt_disable(void)
-{
- viafb_write_reg_mask(CR36, VIACR, BIT5 + BIT4, BIT5 + BIT4);
-}
-
-void viafb_crt_enable(void)
-{
- viafb_write_reg_mask(CR36, VIACR, 0x0, BIT5 + BIT4);
-}
-
-void viafb_get_mmio_info(unsigned long *mmio_base,
- unsigned long *mmio_len)
-{
- struct pci_dev *pdev = NULL;
- u32 vendor, device;
- u32 i;
-
- for (i = 0; pciidlist[i].vendor != 0; i++)
- if (viaparinfo->chip_info->gfx_chip_name ==
- pciidlist[i].chip_index)
- break;
-
- if (!pciidlist[i].vendor)
- return ;
-
- vendor = pciidlist[i].vendor;
- device = pciidlist[i].device;
-
- pdev = pci_get_device(vendor, device, NULL);
-
- if (!pdev) {
- *mmio_base = 0;
- *mmio_len = 0;
- return ;
- }
-
- *mmio_base = pci_resource_start(pdev, 1);
- *mmio_len = pci_resource_len(pdev, 1);
-
- pci_dev_put(pdev);
-}
-
-static void enable_second_display_channel(void)
-{
- /* to enable second display channel. */
- viafb_write_reg_mask(CR6A, VIACR, 0x00, BIT6);
- viafb_write_reg_mask(CR6A, VIACR, BIT7, BIT7);
- viafb_write_reg_mask(CR6A, VIACR, BIT6, BIT6);
-}
-
-static void disable_second_display_channel(void)
-{
- /* to disable second display channel. */
- viafb_write_reg_mask(CR6A, VIACR, 0x00, BIT6);
- viafb_write_reg_mask(CR6A, VIACR, 0x00, BIT7);
- viafb_write_reg_mask(CR6A, VIACR, BIT6, BIT6);
-}
-
-void viafb_get_fb_info(unsigned int *fb_base, unsigned int *fb_len)
-{
- struct pci_dev *pdev = NULL;
- u32 vendor, device;
- u32 i;
-
- for (i = 0; pciidlist[i].vendor != 0; i++)
- if (viaparinfo->chip_info->gfx_chip_name ==
- pciidlist[i].chip_index)
- break;
-
- if (!pciidlist[i].vendor)
- return ;
-
- vendor = pciidlist[i].vendor;
- device = pciidlist[i].device;
-
- pdev = pci_get_device(vendor, device, NULL);
-
- if (!pdev) {
- *fb_base = viafb_read_reg(VIASR, SR30) << 24;
- *fb_len = viafb_get_memsize();
- DEBUG_MSG(KERN_INFO "Get FB info from SR30!\n");
- DEBUG_MSG(KERN_INFO "fb_base = %08x\n", *fb_base);
- DEBUG_MSG(KERN_INFO "fb_len = %08x\n", *fb_len);
- return ;
- }
-
- *fb_base = (unsigned int)pci_resource_start(pdev, 0);
- *fb_len = get_fb_size_from_pci();
- DEBUG_MSG(KERN_INFO "Get FB info from PCI system!\n");
- DEBUG_MSG(KERN_INFO "fb_base = %08x\n", *fb_base);
- DEBUG_MSG(KERN_INFO "fb_len = %08x\n", *fb_len);
-
- pci_dev_put(pdev);
-}
-
-static int get_fb_size_from_pci(void)
-{
- unsigned long configid, deviceid, FBSize = 0;
- int VideoMemSize;
- int DeviceFound = false;
-
- for (configid = 0x80000000; configid < 0x80010800; configid += 0x100) {
- outl(configid, (unsigned long)0xCF8);
- deviceid = (inl((unsigned long)0xCFC) >> 16) & 0xffff;
-
- switch (deviceid) {
- case CLE266:
- case KM400:
- outl(configid + 0xE0, (unsigned long)0xCF8);
- FBSize = inl((unsigned long)0xCFC);
- DeviceFound = true; /* Found device id */
- break;
-
- case CN400_FUNCTION3:
- case CN700_FUNCTION3:
- case CX700_FUNCTION3:
- case KM800_FUNCTION3:
- case KM890_FUNCTION3:
- case P4M890_FUNCTION3:
- case P4M900_FUNCTION3:
- case VX800_FUNCTION3:
- /*case CN750_FUNCTION3: */
- outl(configid + 0xA0, (unsigned long)0xCF8);
- FBSize = inl((unsigned long)0xCFC);
- DeviceFound = true; /* Found device id */
- break;
-
- default:
- break;
- }
-
- if (DeviceFound)
- break;
- }
-
- DEBUG_MSG(KERN_INFO "Device ID = %lx\n", deviceid);
-
- FBSize = FBSize & 0x00007000;
- DEBUG_MSG(KERN_INFO "FB Size = %x\n", FBSize);
-
- if (viaparinfo->chip_info->gfx_chip_name < UNICHROME_CX700) {
- switch (FBSize) {
- case 0x00004000:
- VideoMemSize = (16 << 20); /*16M */
- break;
-
- case 0x00005000:
- VideoMemSize = (32 << 20); /*32M */
- break;
-
- case 0x00006000:
- VideoMemSize = (64 << 20); /*64M */
- break;
-
- default:
- VideoMemSize = (32 << 20); /*32M */
- break;
- }
- } else {
- switch (FBSize) {
- case 0x00001000:
- VideoMemSize = (8 << 20); /*8M */
- break;
-
- case 0x00002000:
- VideoMemSize = (16 << 20); /*16M */
- break;
-
- case 0x00003000:
- VideoMemSize = (32 << 20); /*32M */
- break;
-
- case 0x00004000:
- VideoMemSize = (64 << 20); /*64M */
- break;
-
- case 0x00005000:
- VideoMemSize = (128 << 20); /*128M */
- break;
-
- case 0x00006000:
- VideoMemSize = (256 << 20); /*256M */
- break;
-
- default:
- VideoMemSize = (32 << 20); /*32M */
- break;
- }
- }
-
- return VideoMemSize;
-}
-
-void viafb_set_dpa_gfx(int output_interface, struct GFX_DPA_SETTING\
- *p_gfx_dpa_setting)
-{
- switch (output_interface) {
- case INTERFACE_DVP0:
- {
- /* DVP0 Clock Polarity and Adjust: */
- viafb_write_reg_mask(CR96, VIACR,
- p_gfx_dpa_setting->DVP0, 0x0F);
-
- /* DVP0 Clock and Data Pads Driving: */
- viafb_write_reg_mask(SR1E, VIASR,
- p_gfx_dpa_setting->DVP0ClockDri_S, BIT2);
- viafb_write_reg_mask(SR2A, VIASR,
- p_gfx_dpa_setting->DVP0ClockDri_S1,
- BIT4);
- viafb_write_reg_mask(SR1B, VIASR,
- p_gfx_dpa_setting->DVP0DataDri_S, BIT1);
- viafb_write_reg_mask(SR2A, VIASR,
- p_gfx_dpa_setting->DVP0DataDri_S1, BIT5);
- break;
- }
-
- case INTERFACE_DVP1:
- {
- /* DVP1 Clock Polarity and Adjust: */
- viafb_write_reg_mask(CR9B, VIACR,
- p_gfx_dpa_setting->DVP1, 0x0F);
-
- /* DVP1 Clock and Data Pads Driving: */
- viafb_write_reg_mask(SR65, VIASR,
- p_gfx_dpa_setting->DVP1Driving, 0x0F);
- break;
- }
-
- case INTERFACE_DFP_HIGH:
- {
- viafb_write_reg_mask(CR97, VIACR,
- p_gfx_dpa_setting->DFPHigh, 0x0F);
- break;
- }
-
- case INTERFACE_DFP_LOW:
- {
- viafb_write_reg_mask(CR99, VIACR,
- p_gfx_dpa_setting->DFPLow, 0x0F);
- break;
- }
-
- case INTERFACE_DFP:
- {
- viafb_write_reg_mask(CR97, VIACR,
- p_gfx_dpa_setting->DFPHigh, 0x0F);
- viafb_write_reg_mask(CR99, VIACR,
- p_gfx_dpa_setting->DFPLow, 0x0F);
- break;
- }
- }
-}
-
-void viafb_memory_pitch_patch(struct fb_info *info)
-{
- if (info->var.xres != info->var.xres_virtual) {
- viafb_load_offset_reg(info->var.xres_virtual,
- info->var.bits_per_pixel >> 3, IGA1);
-
- if (viafb_SAMM_ON) {
- viafb_load_offset_reg(viafb_second_virtual_xres,
- viafb_bpp1 >> 3,
- IGA2);
- } else {
- viafb_load_offset_reg(info->var.xres_virtual,
- info->var.bits_per_pixel >> 3, IGA2);
- }
-
- }
-}
-
-/*According var's xres, yres fill var's other timing information*/
-void viafb_fill_var_timing_info(struct fb_var_screeninfo *var, int refresh,
- int mode_index)
-{
- struct VideoModeTable *vmode_tbl = NULL;
- struct crt_mode_table *crt_timing = NULL;
- struct display_timing crt_reg;
- int i = 0, index = 0;
- vmode_tbl = &CLE266Modes[search_mode_setting(mode_index)];
- crt_timing = vmode_tbl->crtc;
- for (i = 0; i < vmode_tbl->mode_array; i++) {
- index = i;
- if (crt_timing[i].refresh_rate == refresh)
- break;
- }
-
- crt_reg = crt_timing[index].crtc;
- switch (var->bits_per_pixel) {
- case 8:
- var->red.offset = 0;
- var->green.offset = 0;
- var->blue.offset = 0;
- var->red.length = 6;
- var->green.length = 6;
- var->blue.length = 6;
- break;
- case 16:
- var->red.offset = 11;
- var->green.offset = 5;
- var->blue.offset = 0;
- var->red.length = 5;
- var->green.length = 6;
- var->blue.length = 5;
- break;
- case 32:
- var->red.offset = 16;
- var->green.offset = 8;
- var->blue.offset = 0;
- var->red.length = 8;
- var->green.length = 8;
- var->blue.length = 8;
- break;
- default:
- /* never happed, put here to keep consistent */
- break;
- }
-
- var->pixclock = viafb_get_pixclock(var->xres, var->yres, refresh);
- var->left_margin =
- crt_reg.hor_total - (crt_reg.hor_sync_start + crt_reg.hor_sync_end);
- var->right_margin = crt_reg.hor_sync_start - crt_reg.hor_addr;
- var->hsync_len = crt_reg.hor_sync_end;
- var->upper_margin =
- crt_reg.ver_total - (crt_reg.ver_sync_start + crt_reg.ver_sync_end);
- var->lower_margin = crt_reg.ver_sync_start - crt_reg.ver_addr;
- var->vsync_len = crt_reg.ver_sync_end;
-}
diff --git a/drivers/video/via/hw.h b/drivers/video/via/hw.h
deleted file mode 100644
index 6ff38fa8569..00000000000
--- a/drivers/video/via/hw.h
+++ /dev/null
@@ -1,933 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __HW_H__
-#define __HW_H__
-
-#include "global.h"
-
-/***************************************************
-* Definition IGA1 Design Method of CRTC Registers *
-****************************************************/
-#define IGA1_HOR_TOTAL_FORMULA(x) (((x)/8)-5)
-#define IGA1_HOR_ADDR_FORMULA(x) (((x)/8)-1)
-#define IGA1_HOR_BLANK_START_FORMULA(x) (((x)/8)-1)
-#define IGA1_HOR_BLANK_END_FORMULA(x, y) (((x+y)/8)-1)
-#define IGA1_HOR_SYNC_START_FORMULA(x) ((x)/8)
-#define IGA1_HOR_SYNC_END_FORMULA(x, y) ((x+y)/8)
-
-#define IGA1_VER_TOTAL_FORMULA(x) ((x)-2)
-#define IGA1_VER_ADDR_FORMULA(x) ((x)-1)
-#define IGA1_VER_BLANK_START_FORMULA(x) ((x)-1)
-#define IGA1_VER_BLANK_END_FORMULA(x, y) ((x+y)-1)
-#define IGA1_VER_SYNC_START_FORMULA(x) ((x)-1)
-#define IGA1_VER_SYNC_END_FORMULA(x, y) ((x+y)-1)
-
-/***************************************************
-** Definition IGA2 Design Method of CRTC Registers *
-****************************************************/
-#define IGA2_HOR_TOTAL_FORMULA(x) ((x)-1)
-#define IGA2_HOR_ADDR_FORMULA(x) ((x)-1)
-#define IGA2_HOR_BLANK_START_FORMULA(x) ((x)-1)
-#define IGA2_HOR_BLANK_END_FORMULA(x, y) ((x+y)-1)
-#define IGA2_HOR_SYNC_START_FORMULA(x) ((x)-1)
-#define IGA2_HOR_SYNC_END_FORMULA(x, y) ((x+y)-1)
-
-#define IGA2_VER_TOTAL_FORMULA(x) ((x)-1)
-#define IGA2_VER_ADDR_FORMULA(x) ((x)-1)
-#define IGA2_VER_BLANK_START_FORMULA(x) ((x)-1)
-#define IGA2_VER_BLANK_END_FORMULA(x, y) ((x+y)-1)
-#define IGA2_VER_SYNC_START_FORMULA(x) ((x)-1)
-#define IGA2_VER_SYNC_END_FORMULA(x, y) ((x+y)-1)
-
-/**********************************************************/
-/* Definition IGA2 Design Method of CRTC Shadow Registers */
-/**********************************************************/
-#define IGA2_HOR_TOTAL_SHADOW_FORMULA(x) ((x/8)-5)
-#define IGA2_HOR_BLANK_END_SHADOW_FORMULA(x, y) (((x+y)/8)-1)
-#define IGA2_VER_TOTAL_SHADOW_FORMULA(x) ((x)-2)
-#define IGA2_VER_ADDR_SHADOW_FORMULA(x) ((x)-1)
-#define IGA2_VER_BLANK_START_SHADOW_FORMULA(x) ((x)-1)
-#define IGA2_VER_BLANK_END_SHADOW_FORMULA(x, y) ((x+y)-1)
-#define IGA2_VER_SYNC_START_SHADOW_FORMULA(x) (x)
-#define IGA2_VER_SYNC_END_SHADOW_FORMULA(x, y) (x+y)
-
-/* Define Register Number for IGA1 CRTC Timing */
-
-/* location: {CR00,0,7},{CR36,3,3} */
-#define IGA1_HOR_TOTAL_REG_NUM 2
-/* location: {CR01,0,7} */
-#define IGA1_HOR_ADDR_REG_NUM 1
-/* location: {CR02,0,7} */
-#define IGA1_HOR_BLANK_START_REG_NUM 1
-/* location: {CR03,0,4},{CR05,7,7},{CR33,5,5} */
-#define IGA1_HOR_BLANK_END_REG_NUM 3
-/* location: {CR04,0,7},{CR33,4,4} */
-#define IGA1_HOR_SYNC_START_REG_NUM 2
-/* location: {CR05,0,4} */
-#define IGA1_HOR_SYNC_END_REG_NUM 1
-/* location: {CR06,0,7},{CR07,0,0},{CR07,5,5},{CR35,0,0} */
-#define IGA1_VER_TOTAL_REG_NUM 4
-/* location: {CR12,0,7},{CR07,1,1},{CR07,6,6},{CR35,2,2} */
-#define IGA1_VER_ADDR_REG_NUM 4
-/* location: {CR15,0,7},{CR07,3,3},{CR09,5,5},{CR35,3,3} */
-#define IGA1_VER_BLANK_START_REG_NUM 4
-/* location: {CR16,0,7} */
-#define IGA1_VER_BLANK_END_REG_NUM 1
-/* location: {CR10,0,7},{CR07,2,2},{CR07,7,7},{CR35,1,1} */
-#define IGA1_VER_SYNC_START_REG_NUM 4
-/* location: {CR11,0,3} */
-#define IGA1_VER_SYNC_END_REG_NUM 1
-
-/* Define Register Number for IGA2 Shadow CRTC Timing */
-
-/* location: {CR6D,0,7},{CR71,3,3} */
-#define IGA2_SHADOW_HOR_TOTAL_REG_NUM 2
-/* location: {CR6E,0,7} */
-#define IGA2_SHADOW_HOR_BLANK_END_REG_NUM 1
-/* location: {CR6F,0,7},{CR71,0,2} */
-#define IGA2_SHADOW_VER_TOTAL_REG_NUM 2
-/* location: {CR70,0,7},{CR71,4,6} */
-#define IGA2_SHADOW_VER_ADDR_REG_NUM 2
-/* location: {CR72,0,7},{CR74,4,6} */
-#define IGA2_SHADOW_VER_BLANK_START_REG_NUM 2
-/* location: {CR73,0,7},{CR74,0,2} */
-#define IGA2_SHADOW_VER_BLANK_END_REG_NUM 2
-/* location: {CR75,0,7},{CR76,4,6} */
-#define IGA2_SHADOW_VER_SYNC_START_REG_NUM 2
-/* location: {CR76,0,3} */
-#define IGA2_SHADOW_VER_SYNC_END_REG_NUM 1
-
-/* Define Register Number for IGA2 CRTC Timing */
-
-/* location: {CR50,0,7},{CR55,0,3} */
-#define IGA2_HOR_TOTAL_REG_NUM 2
-/* location: {CR51,0,7},{CR55,4,6} */
-#define IGA2_HOR_ADDR_REG_NUM 2
-/* location: {CR52,0,7},{CR54,0,2} */
-#define IGA2_HOR_BLANK_START_REG_NUM 2
-/* location: CLE266: {CR53,0,7},{CR54,3,5} => CLE266's CR5D[6]
-is reserved, so it may have problem to set 1600x1200 on IGA2. */
-/* Others: {CR53,0,7},{CR54,3,5},{CR5D,6,6} */
-#define IGA2_HOR_BLANK_END_REG_NUM 3
-/* location: {CR56,0,7},{CR54,6,7},{CR5C,7,7} */
-/* VT3314 and Later: {CR56,0,7},{CR54,6,7},{CR5C,7,7}, {CR5D,7,7} */
-#define IGA2_HOR_SYNC_START_REG_NUM 4
-
-/* location: {CR57,0,7},{CR5C,6,6} */
-#define IGA2_HOR_SYNC_END_REG_NUM 2
-/* location: {CR58,0,7},{CR5D,0,2} */
-#define IGA2_VER_TOTAL_REG_NUM 2
-/* location: {CR59,0,7},{CR5D,3,5} */
-#define IGA2_VER_ADDR_REG_NUM 2
-/* location: {CR5A,0,7},{CR5C,0,2} */
-#define IGA2_VER_BLANK_START_REG_NUM 2
-/* location: {CR5E,0,7},{CR5C,3,5} */
-#define IGA2_VER_BLANK_END_REG_NUM 2
-/* location: {CR5E,0,7},{CR5F,5,7} */
-#define IGA2_VER_SYNC_START_REG_NUM 2
-/* location: {CR5F,0,4} */
-#define IGA2_VER_SYNC_END_REG_NUM 1
-
-/* Define Offset and Fetch Count Register*/
-
-/* location: {CR13,0,7},{CR35,5,7} */
-#define IGA1_OFFSET_REG_NUM 2
-/* 8 bytes alignment. */
-#define IGA1_OFFSER_ALIGN_BYTE 8
-/* x: H resolution, y: color depth */
-#define IGA1_OFFSET_FORMULA(x, y) ((x*y)/IGA1_OFFSER_ALIGN_BYTE)
-/* location: {SR1C,0,7},{SR1D,0,1} */
-#define IGA1_FETCH_COUNT_REG_NUM 2
-/* 16 bytes alignment. */
-#define IGA1_FETCH_COUNT_ALIGN_BYTE 16
-/* x: H resolution, y: color depth */
-#define IGA1_FETCH_COUNT_PATCH_VALUE 4
-#define IGA1_FETCH_COUNT_FORMULA(x, y) \
- (((x*y)/IGA1_FETCH_COUNT_ALIGN_BYTE) + IGA1_FETCH_COUNT_PATCH_VALUE)
-
-/* location: {CR66,0,7},{CR67,0,1} */
-#define IGA2_OFFSET_REG_NUM 2
-#define IGA2_OFFSET_ALIGN_BYTE 8
-/* x: H resolution, y: color depth */
-#define IGA2_OFFSET_FORMULA(x, y) ((x*y)/IGA2_OFFSET_ALIGN_BYTE)
-/* location: {CR65,0,7},{CR67,2,3} */
-#define IGA2_FETCH_COUNT_REG_NUM 2
-#define IGA2_FETCH_COUNT_ALIGN_BYTE 16
-#define IGA2_FETCH_COUNT_PATCH_VALUE 0
-#define IGA2_FETCH_COUNT_FORMULA(x, y) \
- (((x*y)/IGA2_FETCH_COUNT_ALIGN_BYTE) + IGA2_FETCH_COUNT_PATCH_VALUE)
-
-/* Staring Address*/
-
-/* location: {CR0C,0,7},{CR0D,0,7},{CR34,0,7},{CR48,0,1} */
-#define IGA1_STARTING_ADDR_REG_NUM 4
-/* location: {CR62,1,7},{CR63,0,7},{CR64,0,7} */
-#define IGA2_STARTING_ADDR_REG_NUM 3
-
-/* Define Display OFFSET*/
-/* These value are by HW suggested value*/
-/* location: {SR17,0,7} */
-#define K800_IGA1_FIFO_MAX_DEPTH 384
-/* location: {SR16,0,5},{SR16,7,7} */
-#define K800_IGA1_FIFO_THRESHOLD 328
-/* location: {SR18,0,5},{SR18,7,7} */
-#define K800_IGA1_FIFO_HIGH_THRESHOLD 296
-/* location: {SR22,0,4}. (128/4) =64, K800 must be set zero, */
- /* because HW only 5 bits */
-#define K800_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 0
-
-/* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
-#define K800_IGA2_FIFO_MAX_DEPTH 384
-/* location: {CR68,0,3},{CR95,4,6} */
-#define K800_IGA2_FIFO_THRESHOLD 328
-/* location: {CR92,0,3},{CR95,0,2} */
-#define K800_IGA2_FIFO_HIGH_THRESHOLD 296
-/* location: {CR94,0,6} */
-#define K800_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 128
-
-/* location: {SR17,0,7} */
-#define P880_IGA1_FIFO_MAX_DEPTH 192
-/* location: {SR16,0,5},{SR16,7,7} */
-#define P880_IGA1_FIFO_THRESHOLD 128
-/* location: {SR18,0,5},{SR18,7,7} */
-#define P880_IGA1_FIFO_HIGH_THRESHOLD 64
-/* location: {SR22,0,4}. (128/4) =64, K800 must be set zero, */
- /* because HW only 5 bits */
-#define P880_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 0
-
-/* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
-#define P880_IGA2_FIFO_MAX_DEPTH 96
-/* location: {CR68,0,3},{CR95,4,6} */
-#define P880_IGA2_FIFO_THRESHOLD 64
-/* location: {CR92,0,3},{CR95,0,2} */
-#define P880_IGA2_FIFO_HIGH_THRESHOLD 32
-/* location: {CR94,0,6} */
-#define P880_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 128
-
-/* VT3314 chipset*/
-
-/* location: {SR17,0,7} */
-#define CN700_IGA1_FIFO_MAX_DEPTH 96
-/* location: {SR16,0,5},{SR16,7,7} */
-#define CN700_IGA1_FIFO_THRESHOLD 80
-/* location: {SR18,0,5},{SR18,7,7} */
-#define CN700_IGA1_FIFO_HIGH_THRESHOLD 64
-/* location: {SR22,0,4}. (128/4) =64, P800 must be set zero,
- because HW only 5 bits */
-#define CN700_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 0
-/* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
-#define CN700_IGA2_FIFO_MAX_DEPTH 96
-/* location: {CR68,0,3},{CR95,4,6} */
-#define CN700_IGA2_FIFO_THRESHOLD 80
-/* location: {CR92,0,3},{CR95,0,2} */
-#define CN700_IGA2_FIFO_HIGH_THRESHOLD 32
-/* location: {CR94,0,6} */
-#define CN700_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 128
-
-/* For VT3324, these values are suggested by HW */
-/* location: {SR17,0,7} */
-#define CX700_IGA1_FIFO_MAX_DEPTH 192
-/* location: {SR16,0,5},{SR16,7,7} */
-#define CX700_IGA1_FIFO_THRESHOLD 128
-/* location: {SR18,0,5},{SR18,7,7} */
-#define CX700_IGA1_FIFO_HIGH_THRESHOLD 128
-/* location: {SR22,0,4} */
-#define CX700_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 124
-
-/* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
-#define CX700_IGA2_FIFO_MAX_DEPTH 96
-/* location: {CR68,0,3},{CR95,4,6} */
-#define CX700_IGA2_FIFO_THRESHOLD 64
-/* location: {CR92,0,3},{CR95,0,2} */
-#define CX700_IGA2_FIFO_HIGH_THRESHOLD 32
-/* location: {CR94,0,6} */
-#define CX700_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 128
-
-/* VT3336 chipset*/
-/* location: {SR17,0,7} */
-#define K8M890_IGA1_FIFO_MAX_DEPTH 360
-/* location: {SR16,0,5},{SR16,7,7} */
-#define K8M890_IGA1_FIFO_THRESHOLD 328
-/* location: {SR18,0,5},{SR18,7,7} */
-#define K8M890_IGA1_FIFO_HIGH_THRESHOLD 296
-/* location: {SR22,0,4}. */
-#define K8M890_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 124
-
-/* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
-#define K8M890_IGA2_FIFO_MAX_DEPTH 360
-/* location: {CR68,0,3},{CR95,4,6} */
-#define K8M890_IGA2_FIFO_THRESHOLD 328
-/* location: {CR92,0,3},{CR95,0,2} */
-#define K8M890_IGA2_FIFO_HIGH_THRESHOLD 296
-/* location: {CR94,0,6} */
-#define K8M890_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 124
-
-/* VT3327 chipset*/
-/* location: {SR17,0,7} */
-#define P4M890_IGA1_FIFO_MAX_DEPTH 96
-/* location: {SR16,0,5},{SR16,7,7} */
-#define P4M890_IGA1_FIFO_THRESHOLD 76
-/* location: {SR18,0,5},{SR18,7,7} */
-#define P4M890_IGA1_FIFO_HIGH_THRESHOLD 64
-/* location: {SR22,0,4}. (32/4) =8 */
-#define P4M890_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 32
-/* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
-#define P4M890_IGA2_FIFO_MAX_DEPTH 96
-/* location: {CR68,0,3},{CR95,4,6} */
-#define P4M890_IGA2_FIFO_THRESHOLD 76
-/* location: {CR92,0,3},{CR95,0,2} */
-#define P4M890_IGA2_FIFO_HIGH_THRESHOLD 64
-/* location: {CR94,0,6} */
-#define P4M890_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 32
-
-/* VT3364 chipset*/
-/* location: {SR17,0,7} */
-#define P4M900_IGA1_FIFO_MAX_DEPTH 96
-/* location: {SR16,0,5},{SR16,7,7} */
-#define P4M900_IGA1_FIFO_THRESHOLD 76
-/* location: {SR18,0,5},{SR18,7,7} */
-#define P4M900_IGA1_FIFO_HIGH_THRESHOLD 76
-/* location: {SR22,0,4}. */
-#define P4M900_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 32
-/* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
-#define P4M900_IGA2_FIFO_MAX_DEPTH 96
-/* location: {CR68,0,3},{CR95,4,6} */
-#define P4M900_IGA2_FIFO_THRESHOLD 76
-/* location: {CR92,0,3},{CR95,0,2} */
-#define P4M900_IGA2_FIFO_HIGH_THRESHOLD 76
-/* location: {CR94,0,6} */
-#define P4M900_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 32
-
-/* For VT3353, these values are suggested by HW */
-/* location: {SR17,0,7} */
-#define VX800_IGA1_FIFO_MAX_DEPTH 192
-/* location: {SR16,0,5},{SR16,7,7} */
-#define VX800_IGA1_FIFO_THRESHOLD 152
-/* location: {SR18,0,5},{SR18,7,7} */
-#define VX800_IGA1_FIFO_HIGH_THRESHOLD 152
-/* location: {SR22,0,4} */
-#define VX800_IGA1_DISPLAY_QUEUE_EXPIRE_NUM 64
-/* location: {CR68,4,7},{CR94,7,7},{CR95,7,7} */
-#define VX800_IGA2_FIFO_MAX_DEPTH 96
-/* location: {CR68,0,3},{CR95,4,6} */
-#define VX800_IGA2_FIFO_THRESHOLD 64
-/* location: {CR92,0,3},{CR95,0,2} */
-#define VX800_IGA2_FIFO_HIGH_THRESHOLD 32
-/* location: {CR94,0,6} */
-#define VX800_IGA2_DISPLAY_QUEUE_EXPIRE_NUM 128
-
-#define IGA1_FIFO_DEPTH_SELECT_REG_NUM 1
-#define IGA1_FIFO_THRESHOLD_REG_NUM 2
-#define IGA1_FIFO_HIGH_THRESHOLD_REG_NUM 2
-#define IGA1_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM 1
-
-#define IGA2_FIFO_DEPTH_SELECT_REG_NUM 3
-#define IGA2_FIFO_THRESHOLD_REG_NUM 2
-#define IGA2_FIFO_HIGH_THRESHOLD_REG_NUM 2
-#define IGA2_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM 1
-
-#define IGA1_FIFO_DEPTH_SELECT_FORMULA(x) ((x/2)-1)
-#define IGA1_FIFO_THRESHOLD_FORMULA(x) (x/4)
-#define IGA1_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA(x) (x/4)
-#define IGA1_FIFO_HIGH_THRESHOLD_FORMULA(x) (x/4)
-#define IGA2_FIFO_DEPTH_SELECT_FORMULA(x) (((x/2)/4)-1)
-#define IGA2_FIFO_THRESHOLD_FORMULA(x) (x/4)
-#define IGA2_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA(x) (x/4)
-#define IGA2_FIFO_HIGH_THRESHOLD_FORMULA(x) (x/4)
-
-/************************************************************************/
-/* LCD Timing */
-/************************************************************************/
-
-/* 500 ms = 500000 us */
-#define LCD_POWER_SEQ_TD0 500000
-/* 50 ms = 50000 us */
-#define LCD_POWER_SEQ_TD1 50000
-/* 0 us */
-#define LCD_POWER_SEQ_TD2 0
-/* 210 ms = 210000 us */
-#define LCD_POWER_SEQ_TD3 210000
-/* 2^10 * (1/14.31818M) = 71.475 us (K400.revA) */
-#define CLE266_POWER_SEQ_UNIT 71
-/* 2^11 * (1/14.31818M) = 142.95 us (K400.revB) */
-#define K800_POWER_SEQ_UNIT 142
-/* 2^13 * (1/14.31818M) = 572.1 us */
-#define P880_POWER_SEQ_UNIT 572
-
-#define CLE266_POWER_SEQ_FORMULA(x) ((x)/CLE266_POWER_SEQ_UNIT)
-#define K800_POWER_SEQ_FORMULA(x) ((x)/K800_POWER_SEQ_UNIT)
-#define P880_POWER_SEQ_FORMULA(x) ((x)/P880_POWER_SEQ_UNIT)
-
-/* location: {CR8B,0,7},{CR8F,0,3} */
-#define LCD_POWER_SEQ_TD0_REG_NUM 2
-/* location: {CR8C,0,7},{CR8F,4,7} */
-#define LCD_POWER_SEQ_TD1_REG_NUM 2
-/* location: {CR8D,0,7},{CR90,0,3} */
-#define LCD_POWER_SEQ_TD2_REG_NUM 2
-/* location: {CR8E,0,7},{CR90,4,7} */
-#define LCD_POWER_SEQ_TD3_REG_NUM 2
-
-/* LCD Scaling factor*/
-/* x: indicate setting horizontal size*/
-/* y: indicate panel horizontal size*/
-
-/* Horizontal scaling factor 10 bits (2^10) */
-#define CLE266_LCD_HOR_SCF_FORMULA(x, y) (((x-1)*1024)/(y-1))
-/* Vertical scaling factor 10 bits (2^10) */
-#define CLE266_LCD_VER_SCF_FORMULA(x, y) (((x-1)*1024)/(y-1))
-/* Horizontal scaling factor 10 bits (2^12) */
-#define K800_LCD_HOR_SCF_FORMULA(x, y) (((x-1)*4096)/(y-1))
-/* Vertical scaling factor 10 bits (2^11) */
-#define K800_LCD_VER_SCF_FORMULA(x, y) (((x-1)*2048)/(y-1))
-
-/* location: {CR9F,0,1},{CR77,0,7},{CR79,4,5} */
-#define LCD_HOR_SCALING_FACTOR_REG_NUM 3
-/* location: {CR79,3,3},{CR78,0,7},{CR79,6,7} */
-#define LCD_VER_SCALING_FACTOR_REG_NUM 3
-/* location: {CR77,0,7},{CR79,4,5} */
-#define LCD_HOR_SCALING_FACTOR_REG_NUM_CLE 2
-/* location: {CR78,0,7},{CR79,6,7} */
-#define LCD_VER_SCALING_FACTOR_REG_NUM_CLE 2
-
-/************************************************
- ***** Define IGA1 Display Timing *****
- ************************************************/
-struct io_register {
- u8 io_addr;
- u8 start_bit;
- u8 end_bit;
-};
-
-/* IGA1 Horizontal Total */
-struct iga1_hor_total {
- int reg_num;
- struct io_register reg[IGA1_HOR_TOTAL_REG_NUM];
-};
-
-/* IGA1 Horizontal Addressable Video */
-struct iga1_hor_addr {
- int reg_num;
- struct io_register reg[IGA1_HOR_ADDR_REG_NUM];
-};
-
-/* IGA1 Horizontal Blank Start */
-struct iga1_hor_blank_start {
- int reg_num;
- struct io_register reg[IGA1_HOR_BLANK_START_REG_NUM];
-};
-
-/* IGA1 Horizontal Blank End */
-struct iga1_hor_blank_end {
- int reg_num;
- struct io_register reg[IGA1_HOR_BLANK_END_REG_NUM];
-};
-
-/* IGA1 Horizontal Sync Start */
-struct iga1_hor_sync_start {
- int reg_num;
- struct io_register reg[IGA1_HOR_SYNC_START_REG_NUM];
-};
-
-/* IGA1 Horizontal Sync End */
-struct iga1_hor_sync_end {
- int reg_num;
- struct io_register reg[IGA1_HOR_SYNC_END_REG_NUM];
-};
-
-/* IGA1 Vertical Total */
-struct iga1_ver_total {
- int reg_num;
- struct io_register reg[IGA1_VER_TOTAL_REG_NUM];
-};
-
-/* IGA1 Vertical Addressable Video */
-struct iga1_ver_addr {
- int reg_num;
- struct io_register reg[IGA1_VER_ADDR_REG_NUM];
-};
-
-/* IGA1 Vertical Blank Start */
-struct iga1_ver_blank_start {
- int reg_num;
- struct io_register reg[IGA1_VER_BLANK_START_REG_NUM];
-};
-
-/* IGA1 Vertical Blank End */
-struct iga1_ver_blank_end {
- int reg_num;
- struct io_register reg[IGA1_VER_BLANK_END_REG_NUM];
-};
-
-/* IGA1 Vertical Sync Start */
-struct iga1_ver_sync_start {
- int reg_num;
- struct io_register reg[IGA1_VER_SYNC_START_REG_NUM];
-};
-
-/* IGA1 Vertical Sync End */
-struct iga1_ver_sync_end {
- int reg_num;
- struct io_register reg[IGA1_VER_SYNC_END_REG_NUM];
-};
-
-/*****************************************************
-** Define IGA2 Shadow Display Timing ****
-*****************************************************/
-
-/* IGA2 Shadow Horizontal Total */
-struct iga2_shadow_hor_total {
- int reg_num;
- struct io_register reg[IGA2_SHADOW_HOR_TOTAL_REG_NUM];
-};
-
-/* IGA2 Shadow Horizontal Blank End */
-struct iga2_shadow_hor_blank_end {
- int reg_num;
- struct io_register reg[IGA2_SHADOW_HOR_BLANK_END_REG_NUM];
-};
-
-/* IGA2 Shadow Vertical Total */
-struct iga2_shadow_ver_total {
- int reg_num;
- struct io_register reg[IGA2_SHADOW_VER_TOTAL_REG_NUM];
-};
-
-/* IGA2 Shadow Vertical Addressable Video */
-struct iga2_shadow_ver_addr {
- int reg_num;
- struct io_register reg[IGA2_SHADOW_VER_ADDR_REG_NUM];
-};
-
-/* IGA2 Shadow Vertical Blank Start */
-struct iga2_shadow_ver_blank_start {
- int reg_num;
- struct io_register reg[IGA2_SHADOW_VER_BLANK_START_REG_NUM];
-};
-
-/* IGA2 Shadow Vertical Blank End */
-struct iga2_shadow_ver_blank_end {
- int reg_num;
- struct io_register reg[IGA2_SHADOW_VER_BLANK_END_REG_NUM];
-};
-
-/* IGA2 Shadow Vertical Sync Start */
-struct iga2_shadow_ver_sync_start {
- int reg_num;
- struct io_register reg[IGA2_SHADOW_VER_SYNC_START_REG_NUM];
-};
-
-/* IGA2 Shadow Vertical Sync End */
-struct iga2_shadow_ver_sync_end {
- int reg_num;
- struct io_register reg[IGA2_SHADOW_VER_SYNC_END_REG_NUM];
-};
-
-/*****************************************************
-** Define IGA2 Display Timing ****
-******************************************************/
-
-/* IGA2 Horizontal Total */
-struct iga2_hor_total {
- int reg_num;
- struct io_register reg[IGA2_HOR_TOTAL_REG_NUM];
-};
-
-/* IGA2 Horizontal Addressable Video */
-struct iga2_hor_addr {
- int reg_num;
- struct io_register reg[IGA2_HOR_ADDR_REG_NUM];
-};
-
-/* IGA2 Horizontal Blank Start */
-struct iga2_hor_blank_start {
- int reg_num;
- struct io_register reg[IGA2_HOR_BLANK_START_REG_NUM];
-};
-
-/* IGA2 Horizontal Blank End */
-struct iga2_hor_blank_end {
- int reg_num;
- struct io_register reg[IGA2_HOR_BLANK_END_REG_NUM];
-};
-
-/* IGA2 Horizontal Sync Start */
-struct iga2_hor_sync_start {
- int reg_num;
- struct io_register reg[IGA2_HOR_SYNC_START_REG_NUM];
-};
-
-/* IGA2 Horizontal Sync End */
-struct iga2_hor_sync_end {
- int reg_num;
- struct io_register reg[IGA2_HOR_SYNC_END_REG_NUM];
-};
-
-/* IGA2 Vertical Total */
-struct iga2_ver_total {
- int reg_num;
- struct io_register reg[IGA2_VER_TOTAL_REG_NUM];
-};
-
-/* IGA2 Vertical Addressable Video */
-struct iga2_ver_addr {
- int reg_num;
- struct io_register reg[IGA2_VER_ADDR_REG_NUM];
-};
-
-/* IGA2 Vertical Blank Start */
-struct iga2_ver_blank_start {
- int reg_num;
- struct io_register reg[IGA2_VER_BLANK_START_REG_NUM];
-};
-
-/* IGA2 Vertical Blank End */
-struct iga2_ver_blank_end {
- int reg_num;
- struct io_register reg[IGA2_VER_BLANK_END_REG_NUM];
-};
-
-/* IGA2 Vertical Sync Start */
-struct iga2_ver_sync_start {
- int reg_num;
- struct io_register reg[IGA2_VER_SYNC_START_REG_NUM];
-};
-
-/* IGA2 Vertical Sync End */
-struct iga2_ver_sync_end {
- int reg_num;
- struct io_register reg[IGA2_VER_SYNC_END_REG_NUM];
-};
-
-/* IGA1 Offset Register */
-struct iga1_offset {
- int reg_num;
- struct io_register reg[IGA1_OFFSET_REG_NUM];
-};
-
-/* IGA2 Offset Register */
-struct iga2_offset {
- int reg_num;
- struct io_register reg[IGA2_OFFSET_REG_NUM];
-};
-
-struct offset {
- struct iga1_offset iga1_offset_reg;
- struct iga2_offset iga2_offset_reg;
-};
-
-/* IGA1 Fetch Count Register */
-struct iga1_fetch_count {
- int reg_num;
- struct io_register reg[IGA1_FETCH_COUNT_REG_NUM];
-};
-
-/* IGA2 Fetch Count Register */
-struct iga2_fetch_count {
- int reg_num;
- struct io_register reg[IGA2_FETCH_COUNT_REG_NUM];
-};
-
-struct fetch_count {
- struct iga1_fetch_count iga1_fetch_count_reg;
- struct iga2_fetch_count iga2_fetch_count_reg;
-};
-
-/* Starting Address Register */
-struct iga1_starting_addr {
- int reg_num;
- struct io_register reg[IGA1_STARTING_ADDR_REG_NUM];
-};
-
-struct iga2_starting_addr {
- int reg_num;
- struct io_register reg[IGA2_STARTING_ADDR_REG_NUM];
-};
-
-struct starting_addr {
- struct iga1_starting_addr iga1_starting_addr_reg;
- struct iga2_starting_addr iga2_starting_addr_reg;
-};
-
-/* LCD Power Sequence Timer */
-struct lcd_pwd_seq_td0 {
- int reg_num;
- struct io_register reg[LCD_POWER_SEQ_TD0_REG_NUM];
-};
-
-struct lcd_pwd_seq_td1 {
- int reg_num;
- struct io_register reg[LCD_POWER_SEQ_TD1_REG_NUM];
-};
-
-struct lcd_pwd_seq_td2 {
- int reg_num;
- struct io_register reg[LCD_POWER_SEQ_TD2_REG_NUM];
-};
-
-struct lcd_pwd_seq_td3 {
- int reg_num;
- struct io_register reg[LCD_POWER_SEQ_TD3_REG_NUM];
-};
-
-struct _lcd_pwd_seq_timer {
- struct lcd_pwd_seq_td0 td0;
- struct lcd_pwd_seq_td1 td1;
- struct lcd_pwd_seq_td2 td2;
- struct lcd_pwd_seq_td3 td3;
-};
-
-/* LCD Scaling Factor */
-struct _lcd_hor_scaling_factor {
- int reg_num;
- struct io_register reg[LCD_HOR_SCALING_FACTOR_REG_NUM];
-};
-
-struct _lcd_ver_scaling_factor {
- int reg_num;
- struct io_register reg[LCD_VER_SCALING_FACTOR_REG_NUM];
-};
-
-struct _lcd_scaling_factor {
- struct _lcd_hor_scaling_factor lcd_hor_scaling_factor;
- struct _lcd_ver_scaling_factor lcd_ver_scaling_factor;
-};
-
-struct pll_map {
- u32 clk;
- u32 cle266_pll;
- u32 k800_pll;
- u32 cx700_pll;
-};
-
-struct rgbLUT {
- u8 red;
- u8 green;
- u8 blue;
-};
-
-struct lcd_pwd_seq_timer {
- u16 td0;
- u16 td1;
- u16 td2;
- u16 td3;
-};
-
-/* Display FIFO Relation Registers*/
-struct iga1_fifo_depth_select {
- int reg_num;
- struct io_register reg[IGA1_FIFO_DEPTH_SELECT_REG_NUM];
-};
-
-struct iga1_fifo_threshold_select {
- int reg_num;
- struct io_register reg[IGA1_FIFO_THRESHOLD_REG_NUM];
-};
-
-struct iga1_fifo_high_threshold_select {
- int reg_num;
- struct io_register reg[IGA1_FIFO_HIGH_THRESHOLD_REG_NUM];
-};
-
-struct iga1_display_queue_expire_num {
- int reg_num;
- struct io_register reg[IGA1_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM];
-};
-
-struct iga2_fifo_depth_select {
- int reg_num;
- struct io_register reg[IGA2_FIFO_DEPTH_SELECT_REG_NUM];
-};
-
-struct iga2_fifo_threshold_select {
- int reg_num;
- struct io_register reg[IGA2_FIFO_THRESHOLD_REG_NUM];
-};
-
-struct iga2_fifo_high_threshold_select {
- int reg_num;
- struct io_register reg[IGA2_FIFO_HIGH_THRESHOLD_REG_NUM];
-};
-
-struct iga2_display_queue_expire_num {
- int reg_num;
- struct io_register reg[IGA2_DISPLAY_QUEUE_EXPIRE_NUM_REG_NUM];
-};
-
-struct fifo_depth_select {
- struct iga1_fifo_depth_select iga1_fifo_depth_select_reg;
- struct iga2_fifo_depth_select iga2_fifo_depth_select_reg;
-};
-
-struct fifo_threshold_select {
- struct iga1_fifo_threshold_select iga1_fifo_threshold_select_reg;
- struct iga2_fifo_threshold_select iga2_fifo_threshold_select_reg;
-};
-
-struct fifo_high_threshold_select {
- struct iga1_fifo_high_threshold_select
- iga1_fifo_high_threshold_select_reg;
- struct iga2_fifo_high_threshold_select
- iga2_fifo_high_threshold_select_reg;
-};
-
-struct display_queue_expire_num {
- struct iga1_display_queue_expire_num
- iga1_display_queue_expire_num_reg;
- struct iga2_display_queue_expire_num
- iga2_display_queue_expire_num_reg;
-};
-
-struct iga1_crtc_timing {
- struct iga1_hor_total hor_total;
- struct iga1_hor_addr hor_addr;
- struct iga1_hor_blank_start hor_blank_start;
- struct iga1_hor_blank_end hor_blank_end;
- struct iga1_hor_sync_start hor_sync_start;
- struct iga1_hor_sync_end hor_sync_end;
- struct iga1_ver_total ver_total;
- struct iga1_ver_addr ver_addr;
- struct iga1_ver_blank_start ver_blank_start;
- struct iga1_ver_blank_end ver_blank_end;
- struct iga1_ver_sync_start ver_sync_start;
- struct iga1_ver_sync_end ver_sync_end;
-};
-
-struct iga2_shadow_crtc_timing {
- struct iga2_shadow_hor_total hor_total_shadow;
- struct iga2_shadow_hor_blank_end hor_blank_end_shadow;
- struct iga2_shadow_ver_total ver_total_shadow;
- struct iga2_shadow_ver_addr ver_addr_shadow;
- struct iga2_shadow_ver_blank_start ver_blank_start_shadow;
- struct iga2_shadow_ver_blank_end ver_blank_end_shadow;
- struct iga2_shadow_ver_sync_start ver_sync_start_shadow;
- struct iga2_shadow_ver_sync_end ver_sync_end_shadow;
-};
-
-struct iga2_crtc_timing {
- struct iga2_hor_total hor_total;
- struct iga2_hor_addr hor_addr;
- struct iga2_hor_blank_start hor_blank_start;
- struct iga2_hor_blank_end hor_blank_end;
- struct iga2_hor_sync_start hor_sync_start;
- struct iga2_hor_sync_end hor_sync_end;
- struct iga2_ver_total ver_total;
- struct iga2_ver_addr ver_addr;
- struct iga2_ver_blank_start ver_blank_start;
- struct iga2_ver_blank_end ver_blank_end;
- struct iga2_ver_sync_start ver_sync_start;
- struct iga2_ver_sync_end ver_sync_end;
-};
-
-/* device ID */
-#define CLE266 0x3123
-#define KM400 0x3205
-#define CN400_FUNCTION2 0x2259
-#define CN400_FUNCTION3 0x3259
-/* support VT3314 chipset */
-#define CN700_FUNCTION2 0x2314
-#define CN700_FUNCTION3 0x3208
-/* VT3324 chipset */
-#define CX700_FUNCTION2 0x2324
-#define CX700_FUNCTION3 0x3324
-/* VT3204 chipset*/
-#define KM800_FUNCTION3 0x3204
-/* VT3336 chipset*/
-#define KM890_FUNCTION3 0x3336
-/* VT3327 chipset*/
-#define P4M890_FUNCTION3 0x3327
-/* VT3293 chipset*/
-#define CN750_FUNCTION3 0x3208
-/* VT3364 chipset*/
-#define P4M900_FUNCTION3 0x3364
-/* VT3353 chipset*/
-#define VX800_FUNCTION3 0x3353
-
-#define NUM_TOTAL_PLL_TABLE ARRAY_SIZE(pll_value)
-
-struct IODATA {
- u8 Index;
- u8 Mask;
- u8 Data;
-};
-
-struct pci_device_id_info {
- u32 vendor;
- u32 device;
- u32 chip_index;
-};
-
-extern unsigned int viafb_second_virtual_xres;
-extern unsigned int viafb_second_offset;
-extern int viafb_second_size;
-extern int viafb_SAMM_ON;
-extern int viafb_dual_fb;
-extern int viafb_LCD2_ON;
-extern int viafb_LCD_ON;
-extern int viafb_DVI_ON;
-extern int viafb_accel;
-extern int viafb_hotplug;
-
-void viafb_write_reg_mask(u8 index, int io_port, u8 data, u8 mask);
-void viafb_set_output_path(int device, int set_iga,
- int output_interface);
-void viafb_fill_crtc_timing(struct crt_mode_table *crt_table,
- int mode_index, int bpp_byte, int set_iga);
-
-void viafb_set_vclock(u32 CLK, int set_iga);
-void viafb_load_reg(int timing_value, int viafb_load_reg_num,
- struct io_register *reg,
- int io_type);
-void viafb_crt_disable(void);
-void viafb_crt_enable(void);
-void init_ad9389(void);
-/* Access I/O Function */
-void viafb_write_reg(u8 index, u16 io_port, u8 data);
-u8 viafb_read_reg(int io_port, u8 index);
-void viafb_lock_crt(void);
-void viafb_unlock_crt(void);
-void viafb_load_offset_reg(int h_addr, int bpp_byte, int set_iga);
-void viafb_load_fetch_count_reg(int h_addr, int bpp_byte, int set_iga);
-void viafb_write_regx(struct io_reg RegTable[], int ItemNum);
-struct VideoModeTable *viafb_get_modetbl_pointer(int Index);
-u32 viafb_get_clk_value(int clk);
-void viafb_load_FIFO_reg(int set_iga, int hor_active, int ver_active);
-void viafb_set_color_depth(int bpp_byte, int set_iga);
-void viafb_set_dpa_gfx(int output_interface, struct GFX_DPA_SETTING\
- *p_gfx_dpa_setting);
-
-int viafb_setmode(int vmode_index, int hor_res, int ver_res,
- int video_bpp, int vmode_index1, int hor_res1,
- int ver_res1, int video_bpp1);
-void viafb_init_chip_info(void);
-void viafb_init_dac(int set_iga);
-int viafb_get_pixclock(int hres, int vres, int vmode_refresh);
-int viafb_get_refresh(int hres, int vres, u32 float_refresh);
-void viafb_update_device_setting(int hres, int vres, int bpp,
- int vmode_refresh, int flag);
-void viafb_get_mmio_info(unsigned long *mmio_base,
- unsigned long *mmio_len);
-
-void viafb_set_iga_path(void);
-void viafb_set_start_addr(void);
-void viafb_get_fb_info(unsigned int *fb_base, unsigned int *fb_len);
-
-#endif /* __HW_H__ */
diff --git a/drivers/video/via/iface.c b/drivers/video/via/iface.c
deleted file mode 100644
index 1570636c8d5..00000000000
--- a/drivers/video/via/iface.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-
-/* Get frame buffer size from VGA BIOS */
-
-unsigned int viafb_get_memsize(void)
-{
- unsigned int m;
-
- /* If memory size provided by user */
- if (viafb_memsize)
- m = viafb_memsize * Mb;
- else {
- m = (unsigned int)viafb_read_reg(VIASR, SR39);
- m = m * (4 * Mb);
-
- if ((m < (16 * Mb)) || (m > (64 * Mb)))
- m = 16 * Mb;
- }
- DEBUG_MSG(KERN_INFO "framebuffer size = %d Mb\n", m / Mb);
- return m;
-}
-
-/* Get Video Buffer Starting Physical Address(back door)*/
-
-unsigned long viafb_get_videobuf_addr(void)
-{
- struct pci_dev *pdev = NULL;
- unsigned char sys_mem;
- unsigned char video_mem;
- unsigned long sys_mem_size;
- unsigned long video_mem_size;
- /*system memory = 256 MB, video memory 64 MB */
- unsigned long vmem_starting_adr = 0x0C000000;
-
- pdev =
- (struct pci_dev *)pci_get_device(VIA_K800_BRIDGE_VID,
- VIA_K800_BRIDGE_DID, NULL);
- if (pdev != NULL) {
- pci_read_config_byte(pdev, VIA_K800_SYSTEM_MEMORY_REG,
- &sys_mem);
- pci_read_config_byte(pdev, VIA_K800_VIDEO_MEMORY_REG,
- &video_mem);
- video_mem = (video_mem & 0x70) >> 4;
- sys_mem_size = ((unsigned long)sys_mem) << 24;
- if (video_mem != 0)
- video_mem_size = (1 << (video_mem)) * 1024 * 1024;
- else
- video_mem_size = 0;
-
- vmem_starting_adr = sys_mem_size - video_mem_size;
- pci_dev_put(pdev);
- }
-
- DEBUG_MSG(KERN_INFO "Video Memory Starting Address = %lx \n",
- vmem_starting_adr);
- return vmem_starting_adr;
-}
diff --git a/drivers/video/via/iface.h b/drivers/video/via/iface.h
deleted file mode 100644
index 790ec3e3aea..00000000000
--- a/drivers/video/via/iface.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __IFACE_H__
-#define __IFACE_H__
-
-#define Kb (1024)
-#define Mb (Kb*Kb)
-
-#define VIA_K800_BRIDGE_VID 0x1106
-#define VIA_K800_BRIDGE_DID 0x3204
-
-#define VIA_K800_SYSTEM_MEMORY_REG 0x47
-#define VIA_K800_VIDEO_MEMORY_REG 0xA1
-
-extern int viafb_memsize;
-unsigned int viafb_get_memsize(void);
-unsigned long viafb_get_videobuf_addr(void);
-
-#endif /* __IFACE_H__ */
diff --git a/drivers/video/via/ioctl.c b/drivers/video/via/ioctl.c
deleted file mode 100644
index da03c074e32..00000000000
--- a/drivers/video/via/ioctl.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-
-int viafb_ioctl_get_viafb_info(u_long arg)
-{
- struct viafb_ioctl_info viainfo;
-
- viainfo.viafb_id = VIAID;
- viainfo.vendor_id = PCI_VIA_VENDOR_ID;
-
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- viainfo.device_id = UNICHROME_CLE266_DID;
- break;
-
- case UNICHROME_K400:
- viainfo.device_id = UNICHROME_K400_DID;
- break;
-
- case UNICHROME_K800:
- viainfo.device_id = UNICHROME_K800_DID;
- break;
-
- case UNICHROME_PM800:
- viainfo.device_id = UNICHROME_PM800_DID;
- break;
-
- case UNICHROME_CN700:
- viainfo.device_id = UNICHROME_CN700_DID;
- break;
-
- case UNICHROME_CX700:
- viainfo.device_id = UNICHROME_CX700_DID;
- break;
-
- case UNICHROME_K8M890:
- viainfo.device_id = UNICHROME_K8M890_DID;
- break;
-
- case UNICHROME_P4M890:
- viainfo.device_id = UNICHROME_P4M890_DID;
- break;
-
- case UNICHROME_P4M900:
- viainfo.device_id = UNICHROME_P4M900_DID;
- break;
- }
-
- viainfo.version = VERSION_MAJOR;
- viainfo.revision = VERSION_MINOR;
-
- if (copy_to_user((void __user *)arg, &viainfo, sizeof(viainfo)))
- return -EFAULT;
-
- return 0;
-}
-
-/* Hot-Plug Priority: DVI > CRT*/
-int viafb_ioctl_hotplug(int hres, int vres, int bpp)
-{
- int DVIsense, status = 0;
- DEBUG_MSG(KERN_INFO "viafb_ioctl_hotplug!!\n");
-
- if (viaparinfo->chip_info->tmds_chip_info.tmds_chip_name !=
- NON_TMDS_TRANSMITTER) {
- DVIsense = viafb_dvi_sense();
-
- if (DVIsense) {
- DEBUG_MSG(KERN_INFO "DVI Attached...\n");
- if (viafb_DeviceStatus != DVI_Device) {
- viafb_DVI_ON = 1;
- viafb_CRT_ON = 0;
- viafb_LCD_ON = 0;
- viafb_DeviceStatus = DVI_Device;
- return viafb_DeviceStatus;
- }
- status = 1;
- } else
- DEBUG_MSG(KERN_INFO "DVI De-attached...\n");
- }
-
- if ((viafb_DeviceStatus != CRT_Device) && (status == 0)) {
- viafb_CRT_ON = 1;
- viafb_DVI_ON = 0;
- viafb_LCD_ON = 0;
-
- viafb_DeviceStatus = CRT_Device;
- return viafb_DeviceStatus;
- }
-
- return 0;
-}
diff --git a/drivers/video/via/ioctl.h b/drivers/video/via/ioctl.h
deleted file mode 100644
index 842fe30b986..00000000000
--- a/drivers/video/via/ioctl.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __IOCTL_H__
-#define __IOCTL_H__
-
-#ifndef __user
-#define __user
-#endif
-
-/* VIAFB IOCTL definition */
-#define VIAFB_GET_INFO_SIZE 0x56494101 /* 'VIA\01' */
-#define VIAFB_GET_INFO 0x56494102 /* 'VIA\02' */
-#define VIAFB_HOTPLUG 0x56494103 /* 'VIA\03' */
-#define VIAFB_SET_HOTPLUG_FLAG 0x56494104 /* 'VIA\04' */
-#define VIAFB_GET_RESOLUTION 0x56494105 /* 'VIA\05' */
-#define VIAFB_GET_SAMM_INFO 0x56494107 /* 'VIA\07' */
-#define VIAFB_TURN_ON_OUTPUT_DEVICE 0x56494108 /* 'VIA\08' */
-#define VIAFB_TURN_OFF_OUTPUT_DEVICE 0x56494109 /* 'VIA\09' */
-#define VIAFB_SET_DEVICE 0x5649410A
-#define VIAFB_GET_DEVICE 0x5649410B
-#define VIAFB_GET_DRIVER_VERSION 0x56494112 /* 'VIA\12' */
-#define VIAFB_GET_CHIP_INFO 0x56494113 /* 'VIA\13' */
-#define VIAFB_SET_DEVICE_INFO 0x56494114
-#define VIAFB_GET_DEVICE_INFO 0x56494115
-
-#define VIAFB_GET_DEVICE_SUPPORT 0x56494118
-#define VIAFB_GET_DEVICE_CONNECT 0x56494119
-#define VIAFB_GET_PANEL_SUPPORT_EXPAND 0x5649411A
-#define VIAFB_GET_DRIVER_NAME 0x56494122
-#define VIAFB_GET_DEVICE_SUPPORT_STATE 0x56494123
-#define VIAFB_GET_GAMMA_LUT 0x56494124
-#define VIAFB_SET_GAMMA_LUT 0x56494125
-#define VIAFB_GET_GAMMA_SUPPORT_STATE 0x56494126
-#define VIAFB_SET_VIDEO_DEVICE 0x56494127
-#define VIAFB_GET_VIDEO_DEVICE 0x56494128
-#define VIAFB_SET_SECOND_MODE 0x56494129
-#define VIAFB_SYNC_SURFACE 0x56494130
-#define VIAFB_GET_DRIVER_CAPS 0x56494131
-#define VIAFB_GET_IGA_SCALING_INFO 0x56494132
-#define VIAFB_GET_PANEL_MAX_SIZE 0x56494133
-#define VIAFB_GET_PANEL_MAX_POSITION 0x56494134
-#define VIAFB_SET_PANEL_SIZE 0x56494135
-#define VIAFB_SET_PANEL_POSITION 0x56494136
-#define VIAFB_GET_PANEL_POSITION 0x56494137
-#define VIAFB_GET_PANEL_SIZE 0x56494138
-
-#define None_Device 0x00
-#define CRT_Device 0x01
-#define LCD_Device 0x02
-#define DVI_Device 0x08
-#define CRT2_Device 0x10
-#define LCD2_Device 0x40
-
-#define OP_LCD_CENTERING 0x01
-#define OP_LCD_PANEL_ID 0x02
-#define OP_LCD_MODE 0x03
-
-/*SAMM operation flag*/
-#define OP_SAMM 0x80
-
-#define LCD_PANEL_ID_MAXIMUM 22
-
-#define STATE_ON 0x1
-#define STATE_OFF 0x0
-#define STATE_DEFAULT 0xFFFF
-
-#define MAX_ACTIVE_DEV_NUM 2
-
-struct device_t {
- unsigned short crt:1;
- unsigned short dvi:1;
- unsigned short lcd:1;
- unsigned short samm:1;
- unsigned short lcd_dsp_cent:1;
- unsigned char lcd_mode:1;
- unsigned short epia_dvi:1;
- unsigned short lcd_dual_edge:1;
- unsigned short lcd2:1;
-
- unsigned short primary_dev;
- unsigned char lcd_panel_id;
- unsigned short xres, yres;
- unsigned short xres1, yres1;
- unsigned short refresh;
- unsigned short bpp;
- unsigned short refresh1;
- unsigned short bpp1;
- unsigned short sequence;
- unsigned short bus_width;
-};
-
-struct viafb_ioctl_info {
- u32 viafb_id; /* for identifying viafb */
-#define VIAID 0x56494146 /* Identify myself with 'VIAF' */
- u16 vendor_id;
- u16 device_id;
- u8 version;
- u8 revision;
- u8 reserved[246]; /* for future use */
-};
-
-struct viafb_ioctl_mode {
- u32 xres;
- u32 yres;
- u32 refresh;
- u32 bpp;
- u32 xres_sec;
- u32 yres_sec;
- u32 virtual_xres_sec;
- u32 virtual_yres_sec;
- u32 refresh_sec;
- u32 bpp_sec;
-};
-struct viafb_ioctl_samm {
- u32 samm_status;
- u32 size_prim;
- u32 size_sec;
- u32 mem_base;
- u32 offset_sec;
-};
-
-struct viafb_driver_version {
- int iMajorNum;
- int iKernelNum;
- int iOSNum;
- int iMinorNum;
-};
-
-struct viafb_ioctl_lcd_attribute {
- unsigned int panel_id;
- unsigned int display_center;
- unsigned int lcd_mode;
-};
-
-struct viafb_ioctl_setting {
- /* Enable or disable active devices */
- unsigned short device_flag;
- /* Indicate which device should be turn on or turn off. */
- unsigned short device_status;
- unsigned int reserved;
- /* Indicate which LCD's attribute can be changed. */
- unsigned short lcd_operation_flag;
- /* 1: SAMM ON 0: SAMM OFF */
- unsigned short samm_status;
- /* horizontal resolution of first device */
- unsigned short first_dev_hor_res;
- /* vertical resolution of first device */
- unsigned short first_dev_ver_res;
- /* horizontal resolution of second device */
- unsigned short second_dev_hor_res;
- /* vertical resolution of second device */
- unsigned short second_dev_ver_res;
- /* refresh rate of first device */
- unsigned short first_dev_refresh;
- /* bpp of first device */
- unsigned short first_dev_bpp;
- /* refresh rate of second device */
- unsigned short second_dev_refresh;
- /* bpp of second device */
- unsigned short second_dev_bpp;
- /* Indicate which device are primary display device. */
- unsigned int primary_device;
- /* Indicate which device will show video. only valid in duoview mode */
- unsigned int video_device_status;
- unsigned int struct_reserved[34];
- struct viafb_ioctl_lcd_attribute lcd_attributes;
-};
-
-struct _UTFunctionCaps {
- unsigned int dw3DScalingState;
- unsigned int reserved[31];
-};
-
-struct _POSITIONVALUE {
- unsigned int dwX;
- unsigned int dwY;
-};
-
-struct _panel_size_pos_info {
- unsigned int device_type;
- int x;
- int y;
-};
-
-extern int viafb_LCD_ON;
-extern int viafb_DVI_ON;
-
-int viafb_ioctl_get_viafb_info(u_long arg);
-int viafb_ioctl_hotplug(int hres, int vres, int bpp);
-
-#endif /* __IOCTL_H__ */
diff --git a/drivers/video/via/lcd.c b/drivers/video/via/lcd.c
deleted file mode 100644
index 6c7290a6a44..00000000000
--- a/drivers/video/via/lcd.c
+++ /dev/null
@@ -1,1821 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-#include "lcdtbl.h"
-
-static struct iga2_shadow_crtc_timing iga2_shadow_crtc_reg = {
- /* IGA2 Shadow Horizontal Total */
- {IGA2_SHADOW_HOR_TOTAL_REG_NUM, {{CR6D, 0, 7}, {CR71, 3, 3} } },
- /* IGA2 Shadow Horizontal Blank End */
- {IGA2_SHADOW_HOR_BLANK_END_REG_NUM, {{CR6E, 0, 7} } },
- /* IGA2 Shadow Vertical Total */
- {IGA2_SHADOW_VER_TOTAL_REG_NUM, {{CR6F, 0, 7}, {CR71, 0, 2} } },
- /* IGA2 Shadow Vertical Addressable Video */
- {IGA2_SHADOW_VER_ADDR_REG_NUM, {{CR70, 0, 7}, {CR71, 4, 6} } },
- /* IGA2 Shadow Vertical Blank Start */
- {IGA2_SHADOW_VER_BLANK_START_REG_NUM,
- {{CR72, 0, 7}, {CR74, 4, 6} } },
- /* IGA2 Shadow Vertical Blank End */
- {IGA2_SHADOW_VER_BLANK_END_REG_NUM, {{CR73, 0, 7}, {CR74, 0, 2} } },
- /* IGA2 Shadow Vertical Sync Start */
- {IGA2_SHADOW_VER_SYNC_START_REG_NUM, {{CR75, 0, 7}, {CR76, 4, 6} } },
- /* IGA2 Shadow Vertical Sync End */
- {IGA2_SHADOW_VER_SYNC_END_REG_NUM, {{CR76, 0, 3} } }
-};
-
-static struct _lcd_scaling_factor lcd_scaling_factor = {
- /* LCD Horizontal Scaling Factor Register */
- {LCD_HOR_SCALING_FACTOR_REG_NUM,
- {{CR9F, 0, 1}, {CR77, 0, 7}, {CR79, 4, 5} } },
- /* LCD Vertical Scaling Factor Register */
- {LCD_VER_SCALING_FACTOR_REG_NUM,
- {{CR79, 3, 3}, {CR78, 0, 7}, {CR79, 6, 7} } }
-};
-static struct _lcd_scaling_factor lcd_scaling_factor_CLE = {
- /* LCD Horizontal Scaling Factor Register */
- {LCD_HOR_SCALING_FACTOR_REG_NUM_CLE, {{CR77, 0, 7}, {CR79, 4, 5} } },
- /* LCD Vertical Scaling Factor Register */
- {LCD_VER_SCALING_FACTOR_REG_NUM_CLE, {{CR78, 0, 7}, {CR79, 6, 7} } }
-};
-
-static int check_lvds_chip(int device_id_subaddr, int device_id);
-static bool lvds_identify_integratedlvds(void);
-static int fp_id_to_vindex(int panel_id);
-static int lvds_register_read(int index);
-static void load_lcd_scaling(int set_hres, int set_vres, int panel_hres,
- int panel_vres);
-static void load_lcd_k400_patch_tbl(int set_hres, int set_vres,
- int panel_id);
-static void load_lcd_p880_patch_tbl(int set_hres, int set_vres,
- int panel_id);
-static void load_lcd_patch_regs(int set_hres, int set_vres,
- int panel_id, int set_iga);
-static void via_pitch_alignment_patch_lcd(
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information
- *plvds_chip_info);
-static void lcd_patch_skew_dvp0(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-static void lcd_patch_skew_dvp1(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-static void lcd_patch_skew(struct lvds_setting_information
- *plvds_setting_info, struct lvds_chip_information *plvds_chip_info);
-
-static void integrated_lvds_disable(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-static void integrated_lvds_enable(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-static void lcd_powersequence_off(void);
-static void lcd_powersequence_on(void);
-static void fill_lcd_format(void);
-static void check_diport_of_integrated_lvds(
- struct lvds_chip_information *plvds_chip_info,
- struct lvds_setting_information
- *plvds_setting_info);
-static struct display_timing lcd_centering_timging(struct display_timing
- mode_crt_reg,
- struct display_timing panel_crt_reg);
-static void load_crtc_shadow_timing(struct display_timing mode_timing,
- struct display_timing panel_timing);
-static void viafb_load_scaling_factor_for_p4m900(int set_hres,
- int set_vres, int panel_hres, int panel_vres);
-
-static int check_lvds_chip(int device_id_subaddr, int device_id)
-{
- if (lvds_register_read(device_id_subaddr) == device_id)
- return OK;
- else
- return FAIL;
-}
-
-void viafb_init_lcd_size(void)
-{
- DEBUG_MSG(KERN_INFO "viafb_init_lcd_size()\n");
- DEBUG_MSG(KERN_INFO
- "viaparinfo->lvds_setting_info->get_lcd_size_method %d\n",
- viaparinfo->lvds_setting_info->get_lcd_size_method);
-
- switch (viaparinfo->lvds_setting_info->get_lcd_size_method) {
- case GET_LCD_SIZE_BY_SYSTEM_BIOS:
- break;
- case GET_LCD_SZIE_BY_HW_STRAPPING:
- break;
- case GET_LCD_SIZE_BY_VGA_BIOS:
- DEBUG_MSG(KERN_INFO "Get LCD Size method by VGA BIOS !!\n");
- viaparinfo->lvds_setting_info->lcd_panel_size =
- fp_id_to_vindex(viafb_lcd_panel_id);
- DEBUG_MSG(KERN_INFO "LCD Panel_ID = %d\n",
- viaparinfo->lvds_setting_info->lcd_panel_id);
- DEBUG_MSG(KERN_INFO "LCD Panel Size = %d\n",
- viaparinfo->lvds_setting_info->lcd_panel_size);
- break;
- case GET_LCD_SIZE_BY_USER_SETTING:
- DEBUG_MSG(KERN_INFO "Get LCD Size method by user setting !!\n");
- viaparinfo->lvds_setting_info->lcd_panel_size =
- fp_id_to_vindex(viafb_lcd_panel_id);
- DEBUG_MSG(KERN_INFO "LCD Panel_ID = %d\n",
- viaparinfo->lvds_setting_info->lcd_panel_id);
- DEBUG_MSG(KERN_INFO "LCD Panel Size = %d\n",
- viaparinfo->lvds_setting_info->lcd_panel_size);
- break;
- default:
- DEBUG_MSG(KERN_INFO "viafb_init_lcd_size fail\n");
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID1_800X600;
- viaparinfo->lvds_setting_info->lcd_panel_size =
- fp_id_to_vindex(LCD_PANEL_ID1_800X600);
- }
- viaparinfo->lvds_setting_info2->lcd_panel_id =
- viaparinfo->lvds_setting_info->lcd_panel_id;
- viaparinfo->lvds_setting_info2->lcd_panel_size =
- viaparinfo->lvds_setting_info->lcd_panel_size;
- viaparinfo->lvds_setting_info2->lcd_panel_hres =
- viaparinfo->lvds_setting_info->lcd_panel_hres;
- viaparinfo->lvds_setting_info2->lcd_panel_vres =
- viaparinfo->lvds_setting_info->lcd_panel_vres;
- viaparinfo->lvds_setting_info2->device_lcd_dualedge =
- viaparinfo->lvds_setting_info->device_lcd_dualedge;
- viaparinfo->lvds_setting_info2->LCDDithering =
- viaparinfo->lvds_setting_info->LCDDithering;
-}
-
-static bool lvds_identify_integratedlvds(void)
-{
- if (viafb_display_hardware_layout == HW_LAYOUT_LCD_EXTERNAL_LCD2) {
- /* Two dual channel LCD (Internal LVDS + External LVDS): */
- /* If we have an external LVDS, such as VT1636, we should
- have its chip ID already. */
- if (viaparinfo->chip_info->lvds_chip_info.lvds_chip_name) {
- viaparinfo->chip_info->lvds_chip_info2.lvds_chip_name =
- INTEGRATED_LVDS;
- DEBUG_MSG(KERN_INFO "Support two dual channel LVDS!\
- (Internal LVDS + External LVDS)\n");
- } else {
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name =
- INTEGRATED_LVDS;
- DEBUG_MSG(KERN_INFO "Not found external LVDS,\
- so can't support two dual channel LVDS!\n");
- }
- } else if (viafb_display_hardware_layout == HW_LAYOUT_LCD1_LCD2) {
- /* Two single channel LCD (Internal LVDS + Internal LVDS): */
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name =
- INTEGRATED_LVDS;
- viaparinfo->chip_info->lvds_chip_info2.lvds_chip_name =
- INTEGRATED_LVDS;
- DEBUG_MSG(KERN_INFO "Support two single channel LVDS!\
- (Internal LVDS + Internal LVDS)\n");
- } else if (viafb_display_hardware_layout != HW_LAYOUT_DVI_ONLY) {
- /* If we have found external LVDS, just use it,
- otherwise, we will use internal LVDS as default. */
- if (!viaparinfo->chip_info->lvds_chip_info.lvds_chip_name) {
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name =
- INTEGRATED_LVDS;
- DEBUG_MSG(KERN_INFO "Found Integrated LVDS!\n");
- }
- } else {
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name =
- NON_LVDS_TRANSMITTER;
- DEBUG_MSG(KERN_INFO "Do not support LVDS!\n");
- return false;
- }
-
- return true;
-}
-
-int viafb_lvds_trasmitter_identify(void)
-{
- viaparinfo->i2c_stuff.i2c_port = I2CPORTINDEX;
- if (viafb_lvds_identify_vt1636()) {
- viaparinfo->chip_info->lvds_chip_info.i2c_port = I2CPORTINDEX;
- DEBUG_MSG(KERN_INFO
- "Found VIA VT1636 LVDS on port i2c 0x31 \n");
- } else {
- viaparinfo->i2c_stuff.i2c_port = GPIOPORTINDEX;
- if (viafb_lvds_identify_vt1636()) {
- viaparinfo->chip_info->lvds_chip_info.i2c_port =
- GPIOPORTINDEX;
- DEBUG_MSG(KERN_INFO
- "Found VIA VT1636 LVDS on port gpio 0x2c \n");
- }
- }
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700)
- lvds_identify_integratedlvds();
-
- if (viaparinfo->chip_info->lvds_chip_info.lvds_chip_name)
- return true;
- /* Check for VT1631: */
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name = VT1631_LVDS;
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_slave_addr =
- VT1631_LVDS_I2C_ADDR;
-
- if (check_lvds_chip(VT1631_DEVICE_ID_REG, VT1631_DEVICE_ID) != FAIL) {
- DEBUG_MSG(KERN_INFO "\n VT1631 LVDS ! \n");
- DEBUG_MSG(KERN_INFO "\n %2d",
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name);
- DEBUG_MSG(KERN_INFO "\n %2d",
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name);
- return OK;
- }
-
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name =
- NON_LVDS_TRANSMITTER;
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_slave_addr =
- VT1631_LVDS_I2C_ADDR;
- return FAIL;
-}
-
-static int fp_id_to_vindex(int panel_id)
-{
- DEBUG_MSG(KERN_INFO "fp_get_panel_id()\n");
-
- if (panel_id > LCD_PANEL_ID_MAXIMUM)
- viafb_lcd_panel_id = panel_id =
- viafb_read_reg(VIACR, CR3F) & 0x0F;
-
- switch (panel_id) {
- case 0x0:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 640;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 480;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID0_640X480;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_640X480;
- break;
- case 0x1:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 800;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 600;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID1_800X600;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_800X600;
- break;
- case 0x2:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1024;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID2_1024X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_1024X768;
- break;
- case 0x3:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1280;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID3_1280X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_1280X768;
- break;
- case 0x4:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1280;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 1024;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID4_1280X1024;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_1280X1024;
- break;
- case 0x5:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1400;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 1050;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID5_1400X1050;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_1400X1050;
- break;
- case 0x6:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1600;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 1200;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID6_1600X1200;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_1600X1200;
- break;
- case 0x8:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 800;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 480;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_IDA_800X480;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_800X480;
- break;
- case 0x9:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1024;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID2_1024X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_1024X768;
- break;
- case 0xA:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1024;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID2_1024X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 0;
- return VIA_RES_1024X768;
- break;
- case 0xB:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1024;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID2_1024X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 0;
- return VIA_RES_1024X768;
- break;
- case 0xC:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1280;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID3_1280X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 0;
- return VIA_RES_1280X768;
- break;
- case 0xD:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1280;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 1024;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID4_1280X1024;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 0;
- return VIA_RES_1280X1024;
- break;
- case 0xE:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1400;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 1050;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID5_1400X1050;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 0;
- return VIA_RES_1400X1050;
- break;
- case 0xF:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1600;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 1200;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID6_1600X1200;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 0;
- return VIA_RES_1600X1200;
- break;
- case 0x10:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1366;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID7_1366X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 0;
- return VIA_RES_1368X768;
- break;
- case 0x11:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1024;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 600;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID8_1024X600;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_1024X600;
- break;
- case 0x12:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1280;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID3_1280X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_1280X768;
- break;
- case 0x13:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1280;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 800;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID9_1280X800;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_1280X800;
- break;
- case 0x14:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1360;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_IDB_1360X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 0;
- return VIA_RES_1360X768;
- break;
- case 0x15:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 1280;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 768;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID3_1280X768;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 1;
- viaparinfo->lvds_setting_info->LCDDithering = 0;
- return VIA_RES_1280X768;
- break;
- case 0x16:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 480;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 640;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_IDC_480X640;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_480X640;
- break;
- default:
- viaparinfo->lvds_setting_info->lcd_panel_hres = 800;
- viaparinfo->lvds_setting_info->lcd_panel_vres = 600;
- viaparinfo->lvds_setting_info->lcd_panel_id =
- LCD_PANEL_ID1_800X600;
- viaparinfo->lvds_setting_info->device_lcd_dualedge = 0;
- viaparinfo->lvds_setting_info->LCDDithering = 1;
- return VIA_RES_800X600;
- }
-}
-
-static int lvds_register_read(int index)
-{
- u8 data;
-
- viaparinfo->i2c_stuff.i2c_port = GPIOPORTINDEX;
- viafb_i2c_readbyte((u8) viaparinfo->chip_info->
- lvds_chip_info.lvds_chip_slave_addr,
- (u8) index, &data);
- return data;
-}
-
-static void load_lcd_scaling(int set_hres, int set_vres, int panel_hres,
- int panel_vres)
-{
- int reg_value = 0;
- int viafb_load_reg_num;
- struct io_register *reg = NULL;
-
- DEBUG_MSG(KERN_INFO "load_lcd_scaling()!!\n");
-
- /* LCD Scaling Enable */
- viafb_write_reg_mask(CR79, VIACR, 0x07, BIT0 + BIT1 + BIT2);
- if (UNICHROME_P4M900 == viaparinfo->chip_info->gfx_chip_name) {
- viafb_load_scaling_factor_for_p4m900(set_hres, set_vres,
- panel_hres, panel_vres);
- return;
- }
-
- /* Check if expansion for horizontal */
- if (set_hres != panel_hres) {
- /* Load Horizontal Scaling Factor */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- case UNICHROME_K400:
- reg_value =
- CLE266_LCD_HOR_SCF_FORMULA(set_hres, panel_hres);
- viafb_load_reg_num =
- lcd_scaling_factor_CLE.lcd_hor_scaling_factor.
- reg_num;
- reg = lcd_scaling_factor_CLE.lcd_hor_scaling_factor.reg;
- viafb_load_reg(reg_value,
- viafb_load_reg_num, reg, VIACR);
- break;
- case UNICHROME_K800:
- case UNICHROME_PM800:
- case UNICHROME_CN700:
- case UNICHROME_CX700:
- case UNICHROME_K8M890:
- case UNICHROME_P4M890:
- reg_value =
- K800_LCD_HOR_SCF_FORMULA(set_hres, panel_hres);
- /* Horizontal scaling enabled */
- viafb_write_reg_mask(CRA2, VIACR, 0xC0, BIT7 + BIT6);
- viafb_load_reg_num =
- lcd_scaling_factor.lcd_hor_scaling_factor.reg_num;
- reg = lcd_scaling_factor.lcd_hor_scaling_factor.reg;
- viafb_load_reg(reg_value,
- viafb_load_reg_num, reg, VIACR);
- break;
- }
-
- DEBUG_MSG(KERN_INFO "Horizontal Scaling value = %d", reg_value);
- } else {
- /* Horizontal scaling disabled */
- viafb_write_reg_mask(CRA2, VIACR, 0x00, BIT7);
- }
-
- /* Check if expansion for vertical */
- if (set_vres != panel_vres) {
- /* Load Vertical Scaling Factor */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- case UNICHROME_K400:
- reg_value =
- CLE266_LCD_VER_SCF_FORMULA(set_vres, panel_vres);
- viafb_load_reg_num =
- lcd_scaling_factor_CLE.lcd_ver_scaling_factor.
- reg_num;
- reg = lcd_scaling_factor_CLE.lcd_ver_scaling_factor.reg;
- viafb_load_reg(reg_value,
- viafb_load_reg_num, reg, VIACR);
- break;
- case UNICHROME_K800:
- case UNICHROME_PM800:
- case UNICHROME_CN700:
- case UNICHROME_CX700:
- case UNICHROME_K8M890:
- case UNICHROME_P4M890:
- reg_value =
- K800_LCD_VER_SCF_FORMULA(set_vres, panel_vres);
- /* Vertical scaling enabled */
- viafb_write_reg_mask(CRA2, VIACR, 0x08, BIT3);
- viafb_load_reg_num =
- lcd_scaling_factor.lcd_ver_scaling_factor.reg_num;
- reg = lcd_scaling_factor.lcd_ver_scaling_factor.reg;
- viafb_load_reg(reg_value,
- viafb_load_reg_num, reg, VIACR);
- break;
- }
-
- DEBUG_MSG(KERN_INFO "Vertical Scaling value = %d", reg_value);
- } else {
- /* Vertical scaling disabled */
- viafb_write_reg_mask(CRA2, VIACR, 0x00, BIT3);
- }
-}
-
-static void load_lcd_k400_patch_tbl(int set_hres, int set_vres,
- int panel_id)
-{
- int vmode_index;
- int reg_num = 0;
- struct io_reg *lcd_patch_reg = NULL;
-
- if (viaparinfo->lvds_setting_info->iga_path == IGA2)
- vmode_index = viafb_get_mode_index(set_hres, set_vres, 1);
- else
- vmode_index = viafb_get_mode_index(set_hres, set_vres, 0);
- switch (panel_id) {
- /* LCD 800x600 */
- case LCD_PANEL_ID1_800X600:
- switch (vmode_index) {
- case VIA_RES_640X400:
- case VIA_RES_640X480:
- reg_num = NUM_TOTAL_K400_LCD_RES_6X4_8X6;
- lcd_patch_reg = K400_LCD_RES_6X4_8X6;
- break;
- case VIA_RES_720X480:
- case VIA_RES_720X576:
- reg_num = NUM_TOTAL_K400_LCD_RES_7X4_8X6;
- lcd_patch_reg = K400_LCD_RES_7X4_8X6;
- break;
- }
- break;
-
- /* LCD 1024x768 */
- case LCD_PANEL_ID2_1024X768:
- switch (vmode_index) {
- case VIA_RES_640X400:
- case VIA_RES_640X480:
- reg_num = NUM_TOTAL_K400_LCD_RES_6X4_10X7;
- lcd_patch_reg = K400_LCD_RES_6X4_10X7;
- break;
- case VIA_RES_720X480:
- case VIA_RES_720X576:
- reg_num = NUM_TOTAL_K400_LCD_RES_7X4_10X7;
- lcd_patch_reg = K400_LCD_RES_7X4_10X7;
- break;
- case VIA_RES_800X600:
- reg_num = NUM_TOTAL_K400_LCD_RES_8X6_10X7;
- lcd_patch_reg = K400_LCD_RES_8X6_10X7;
- break;
- }
- break;
-
- /* LCD 1280x1024 */
- case LCD_PANEL_ID4_1280X1024:
- switch (vmode_index) {
- case VIA_RES_640X400:
- case VIA_RES_640X480:
- reg_num = NUM_TOTAL_K400_LCD_RES_6X4_12X10;
- lcd_patch_reg = K400_LCD_RES_6X4_12X10;
- break;
- case VIA_RES_720X480:
- case VIA_RES_720X576:
- reg_num = NUM_TOTAL_K400_LCD_RES_7X4_12X10;
- lcd_patch_reg = K400_LCD_RES_7X4_12X10;
- break;
- case VIA_RES_800X600:
- reg_num = NUM_TOTAL_K400_LCD_RES_8X6_12X10;
- lcd_patch_reg = K400_LCD_RES_8X6_12X10;
- break;
- case VIA_RES_1024X768:
- reg_num = NUM_TOTAL_K400_LCD_RES_10X7_12X10;
- lcd_patch_reg = K400_LCD_RES_10X7_12X10;
- break;
-
- }
- break;
-
- /* LCD 1400x1050 */
- case LCD_PANEL_ID5_1400X1050:
- switch (vmode_index) {
- case VIA_RES_640X480:
- reg_num = NUM_TOTAL_K400_LCD_RES_6X4_14X10;
- lcd_patch_reg = K400_LCD_RES_6X4_14X10;
- break;
- case VIA_RES_800X600:
- reg_num = NUM_TOTAL_K400_LCD_RES_8X6_14X10;
- lcd_patch_reg = K400_LCD_RES_8X6_14X10;
- break;
- case VIA_RES_1024X768:
- reg_num = NUM_TOTAL_K400_LCD_RES_10X7_14X10;
- lcd_patch_reg = K400_LCD_RES_10X7_14X10;
- break;
- case VIA_RES_1280X768:
- case VIA_RES_1280X800:
- case VIA_RES_1280X960:
- case VIA_RES_1280X1024:
- reg_num = NUM_TOTAL_K400_LCD_RES_12X10_14X10;
- lcd_patch_reg = K400_LCD_RES_12X10_14X10;
- break;
- }
- break;
-
- /* LCD 1600x1200 */
- case LCD_PANEL_ID6_1600X1200:
- switch (vmode_index) {
- case VIA_RES_640X400:
- case VIA_RES_640X480:
- reg_num = NUM_TOTAL_K400_LCD_RES_6X4_16X12;
- lcd_patch_reg = K400_LCD_RES_6X4_16X12;
- break;
- case VIA_RES_720X480:
- case VIA_RES_720X576:
- reg_num = NUM_TOTAL_K400_LCD_RES_7X4_16X12;
- lcd_patch_reg = K400_LCD_RES_7X4_16X12;
- break;
- case VIA_RES_800X600:
- reg_num = NUM_TOTAL_K400_LCD_RES_8X6_16X12;
- lcd_patch_reg = K400_LCD_RES_8X6_16X12;
- break;
- case VIA_RES_1024X768:
- reg_num = NUM_TOTAL_K400_LCD_RES_10X7_16X12;
- lcd_patch_reg = K400_LCD_RES_10X7_16X12;
- break;
- case VIA_RES_1280X768:
- case VIA_RES_1280X800:
- case VIA_RES_1280X960:
- case VIA_RES_1280X1024:
- reg_num = NUM_TOTAL_K400_LCD_RES_12X10_16X12;
- lcd_patch_reg = K400_LCD_RES_12X10_16X12;
- break;
- }
- break;
-
- /* LCD 1366x768 */
- case LCD_PANEL_ID7_1366X768:
- switch (vmode_index) {
- case VIA_RES_640X480:
- reg_num = NUM_TOTAL_K400_LCD_RES_6X4_1366X7;
- lcd_patch_reg = K400_LCD_RES_6X4_1366X7;
- break;
- case VIA_RES_720X480:
- case VIA_RES_720X576:
- reg_num = NUM_TOTAL_K400_LCD_RES_7X4_1366X7;
- lcd_patch_reg = K400_LCD_RES_7X4_1366X7;
- break;
- case VIA_RES_800X600:
- reg_num = NUM_TOTAL_K400_LCD_RES_8X6_1366X7;
- lcd_patch_reg = K400_LCD_RES_8X6_1366X7;
- break;
- case VIA_RES_1024X768:
- reg_num = NUM_TOTAL_K400_LCD_RES_10X7_1366X7;
- lcd_patch_reg = K400_LCD_RES_10X7_1366X7;
- break;
- case VIA_RES_1280X768:
- case VIA_RES_1280X800:
- case VIA_RES_1280X960:
- case VIA_RES_1280X1024:
- reg_num = NUM_TOTAL_K400_LCD_RES_12X10_1366X7;
- lcd_patch_reg = K400_LCD_RES_12X10_1366X7;
- break;
- }
- break;
-
- /* LCD 1360x768 */
- case LCD_PANEL_IDB_1360X768:
- break;
- }
- if (reg_num != 0) {
- /* H.W. Reset : ON */
- viafb_write_reg_mask(CR17, VIACR, 0x00, BIT7);
-
- viafb_write_regx(lcd_patch_reg, reg_num);
-
- /* H.W. Reset : OFF */
- viafb_write_reg_mask(CR17, VIACR, 0x80, BIT7);
-
- /* Reset PLL */
- viafb_write_reg_mask(SR40, VIASR, 0x02, BIT1);
- viafb_write_reg_mask(SR40, VIASR, 0x00, BIT1);
-
- /* Fire! */
- outb(inb(VIARMisc) | (BIT2 + BIT3), VIAWMisc);
- }
-}
-
-static void load_lcd_p880_patch_tbl(int set_hres, int set_vres,
- int panel_id)
-{
- int vmode_index;
- int reg_num = 0;
- struct io_reg *lcd_patch_reg = NULL;
-
- if (viaparinfo->lvds_setting_info->iga_path == IGA2)
- vmode_index = viafb_get_mode_index(set_hres, set_vres, 1);
- else
- vmode_index = viafb_get_mode_index(set_hres, set_vres, 0);
-
- switch (panel_id) {
- case LCD_PANEL_ID5_1400X1050:
- switch (vmode_index) {
- case VIA_RES_640X480:
- reg_num = NUM_TOTAL_P880_LCD_RES_6X4_14X10;
- lcd_patch_reg = P880_LCD_RES_6X4_14X10;
- break;
- case VIA_RES_800X600:
- reg_num = NUM_TOTAL_P880_LCD_RES_8X6_14X10;
- lcd_patch_reg = P880_LCD_RES_8X6_14X10;
- break;
- }
- break;
- case LCD_PANEL_ID6_1600X1200:
- switch (vmode_index) {
- case VIA_RES_640X400:
- case VIA_RES_640X480:
- reg_num = NUM_TOTAL_P880_LCD_RES_6X4_16X12;
- lcd_patch_reg = P880_LCD_RES_6X4_16X12;
- break;
- case VIA_RES_720X480:
- case VIA_RES_720X576:
- reg_num = NUM_TOTAL_P880_LCD_RES_7X4_16X12;
- lcd_patch_reg = P880_LCD_RES_7X4_16X12;
- break;
- case VIA_RES_800X600:
- reg_num = NUM_TOTAL_P880_LCD_RES_8X6_16X12;
- lcd_patch_reg = P880_LCD_RES_8X6_16X12;
- break;
- case VIA_RES_1024X768:
- reg_num = NUM_TOTAL_P880_LCD_RES_10X7_16X12;
- lcd_patch_reg = P880_LCD_RES_10X7_16X12;
- break;
- case VIA_RES_1280X768:
- case VIA_RES_1280X960:
- case VIA_RES_1280X1024:
- reg_num = NUM_TOTAL_P880_LCD_RES_12X10_16X12;
- lcd_patch_reg = P880_LCD_RES_12X10_16X12;
- break;
- }
- break;
-
- }
- if (reg_num != 0) {
- /* H.W. Reset : ON */
- viafb_write_reg_mask(CR17, VIACR, 0x00, BIT7);
-
- viafb_write_regx(lcd_patch_reg, reg_num);
-
- /* H.W. Reset : OFF */
- viafb_write_reg_mask(CR17, VIACR, 0x80, BIT7);
-
- /* Reset PLL */
- viafb_write_reg_mask(SR40, VIASR, 0x02, BIT1);
- viafb_write_reg_mask(SR40, VIASR, 0x00, BIT1);
-
- /* Fire! */
- outb(inb(VIARMisc) | (BIT2 + BIT3), VIAWMisc);
- }
-}
-
-static void load_lcd_patch_regs(int set_hres, int set_vres,
- int panel_id, int set_iga)
-{
- int vmode_index;
-
- if (viaparinfo->lvds_setting_info->iga_path == IGA2)
- vmode_index = viafb_get_mode_index(set_hres, set_vres, 1);
- else
- vmode_index = viafb_get_mode_index(set_hres, set_vres, 0);
-
- viafb_unlock_crt();
-
- /* Patch for simultaneous & Expansion */
- if ((set_iga == IGA1_IGA2) &&
- (viaparinfo->lvds_setting_info->display_method ==
- LCD_EXPANDSION)) {
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- case UNICHROME_K400:
- load_lcd_k400_patch_tbl(set_hres, set_vres, panel_id);
- break;
- case UNICHROME_K800:
- break;
- case UNICHROME_PM800:
- case UNICHROME_CN700:
- case UNICHROME_CX700:
- load_lcd_p880_patch_tbl(set_hres, set_vres, panel_id);
- }
- }
-
- viafb_lock_crt();
-}
-
-static void via_pitch_alignment_patch_lcd(
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information
- *plvds_chip_info)
-{
- unsigned char cr13, cr35, cr65, cr66, cr67;
- unsigned long dwScreenPitch = 0;
- unsigned long dwPitch;
-
- dwPitch = plvds_setting_info->h_active * (plvds_setting_info->bpp >> 3);
- if (dwPitch & 0x1F) {
- dwScreenPitch = ((dwPitch + 31) & ~31) >> 3;
- if (plvds_setting_info->iga_path == IGA2) {
- if (plvds_setting_info->bpp > 8) {
- cr66 = (unsigned char)(dwScreenPitch & 0xFF);
- viafb_write_reg(CR66, VIACR, cr66);
- cr67 = viafb_read_reg(VIACR, CR67) & 0xFC;
- cr67 |=
- (unsigned
- char)((dwScreenPitch & 0x300) >> 8);
- viafb_write_reg(CR67, VIACR, cr67);
- }
-
- /* Fetch Count */
- cr67 = viafb_read_reg(VIACR, CR67) & 0xF3;
- cr67 |= (unsigned char)((dwScreenPitch & 0x600) >> 7);
- viafb_write_reg(CR67, VIACR, cr67);
- cr65 = (unsigned char)((dwScreenPitch >> 1) & 0xFF);
- cr65 += 2;
- viafb_write_reg(CR65, VIACR, cr65);
- } else {
- if (plvds_setting_info->bpp > 8) {
- cr13 = (unsigned char)(dwScreenPitch & 0xFF);
- viafb_write_reg(CR13, VIACR, cr13);
- cr35 = viafb_read_reg(VIACR, CR35) & 0x1F;
- cr35 |=
- (unsigned
- char)((dwScreenPitch & 0x700) >> 3);
- viafb_write_reg(CR35, VIACR, cr35);
- }
- }
- }
-}
-static void lcd_patch_skew_dvp0(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
- if (VT1636_LVDS == plvds_chip_info->lvds_chip_name) {
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_P4M900:
- viafb_vt1636_patch_skew_on_vt3364(plvds_setting_info,
- plvds_chip_info);
- break;
- case UNICHROME_P4M890:
- viafb_vt1636_patch_skew_on_vt3327(plvds_setting_info,
- plvds_chip_info);
- break;
- }
- }
-}
-static void lcd_patch_skew_dvp1(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
- if (VT1636_LVDS == plvds_chip_info->lvds_chip_name) {
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CX700:
- viafb_vt1636_patch_skew_on_vt3324(plvds_setting_info,
- plvds_chip_info);
- break;
- }
- }
-}
-static void lcd_patch_skew(struct lvds_setting_information
- *plvds_setting_info, struct lvds_chip_information *plvds_chip_info)
-{
- DEBUG_MSG(KERN_INFO "lcd_patch_skew\n");
- switch (plvds_chip_info->output_interface) {
- case INTERFACE_DVP0:
- lcd_patch_skew_dvp0(plvds_setting_info, plvds_chip_info);
- break;
- case INTERFACE_DVP1:
- lcd_patch_skew_dvp1(plvds_setting_info, plvds_chip_info);
- break;
- case INTERFACE_DFP_LOW:
- if (UNICHROME_P4M900 == viaparinfo->chip_info->gfx_chip_name) {
- viafb_write_reg_mask(CR99, VIACR, 0x08,
- BIT0 + BIT1 + BIT2 + BIT3);
- }
- break;
- }
-}
-
-/* LCD Set Mode */
-void viafb_lcd_set_mode(struct crt_mode_table *mode_crt_table,
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
- int video_index = plvds_setting_info->lcd_panel_size;
- int set_iga = plvds_setting_info->iga_path;
- int mode_bpp = plvds_setting_info->bpp;
- int viafb_load_reg_num = 0;
- int reg_value = 0;
- int set_hres, set_vres;
- int panel_hres, panel_vres;
- u32 pll_D_N;
- int offset;
- struct io_register *reg = NULL;
- struct display_timing mode_crt_reg, panel_crt_reg;
- struct crt_mode_table *panel_crt_table = NULL;
- struct VideoModeTable *vmode_tbl = NULL;
-
- DEBUG_MSG(KERN_INFO "viafb_lcd_set_mode!!\n");
- /* Get mode table */
- mode_crt_reg = mode_crt_table->crtc;
- /* Get panel table Pointer */
- vmode_tbl = viafb_get_modetbl_pointer(video_index);
- panel_crt_table = vmode_tbl->crtc;
- panel_crt_reg = panel_crt_table->crtc;
- DEBUG_MSG(KERN_INFO "bellow viafb_lcd_set_mode!!\n");
- set_hres = plvds_setting_info->h_active;
- set_vres = plvds_setting_info->v_active;
- panel_hres = plvds_setting_info->lcd_panel_hres;
- panel_vres = plvds_setting_info->lcd_panel_vres;
- if (VT1636_LVDS == plvds_chip_info->lvds_chip_name)
- viafb_init_lvds_vt1636(plvds_setting_info, plvds_chip_info);
- plvds_setting_info->vclk = panel_crt_table->clk;
- if (set_iga == IGA1) {
- /* IGA1 doesn't have LCD scaling, so set it as centering. */
- viafb_load_crtc_timing(lcd_centering_timging
- (mode_crt_reg, panel_crt_reg), IGA1);
- } else {
- /* Expansion */
- if ((plvds_setting_info->display_method ==
- LCD_EXPANDSION) & ((set_hres != panel_hres)
- || (set_vres != panel_vres))) {
- /* expansion timing IGA2 loaded panel set timing*/
- viafb_load_crtc_timing(panel_crt_reg, IGA2);
- DEBUG_MSG(KERN_INFO "viafb_load_crtc_timing!!\n");
- load_lcd_scaling(set_hres, set_vres, panel_hres,
- panel_vres);
- DEBUG_MSG(KERN_INFO "load_lcd_scaling!!\n");
- } else { /* Centering */
- /* centering timing IGA2 always loaded panel
- and mode releative timing */
- viafb_load_crtc_timing(lcd_centering_timging
- (mode_crt_reg, panel_crt_reg), IGA2);
- viafb_write_reg_mask(CR79, VIACR, 0x00,
- BIT0 + BIT1 + BIT2);
- /* LCD scaling disabled */
- }
- }
-
- if (set_iga == IGA1_IGA2) {
- load_crtc_shadow_timing(mode_crt_reg, panel_crt_reg);
- /* Fill shadow registers */
-
- switch (plvds_setting_info->lcd_panel_id) {
- case LCD_PANEL_ID0_640X480:
- offset = 80;
- break;
- case LCD_PANEL_ID1_800X600:
- case LCD_PANEL_IDA_800X480:
- offset = 110;
- break;
- case LCD_PANEL_ID2_1024X768:
- offset = 150;
- break;
- case LCD_PANEL_ID3_1280X768:
- case LCD_PANEL_ID4_1280X1024:
- case LCD_PANEL_ID5_1400X1050:
- case LCD_PANEL_ID9_1280X800:
- offset = 190;
- break;
- case LCD_PANEL_ID6_1600X1200:
- offset = 250;
- break;
- case LCD_PANEL_ID7_1366X768:
- case LCD_PANEL_IDB_1360X768:
- offset = 212;
- break;
- default:
- offset = 140;
- break;
- }
-
- /* Offset for simultaneous */
- reg_value = offset;
- viafb_load_reg_num = offset_reg.iga2_offset_reg.reg_num;
- reg = offset_reg.iga2_offset_reg.reg;
- viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);
- DEBUG_MSG(KERN_INFO "viafb_load_reg!!\n");
- viafb_load_fetch_count_reg(set_hres, 4, IGA2);
- /* Fetch count for simultaneous */
- } else { /* SAMM */
- /* Offset for IGA2 only */
- viafb_load_offset_reg(set_hres, mode_bpp / 8, set_iga);
- /* Fetch count for IGA2 only */
- viafb_load_fetch_count_reg(set_hres, mode_bpp / 8, set_iga);
-
- if ((viaparinfo->chip_info->gfx_chip_name != UNICHROME_CLE266)
- && (viaparinfo->chip_info->gfx_chip_name != UNICHROME_K400))
- viafb_load_FIFO_reg(set_iga, set_hres, set_vres);
-
- viafb_set_color_depth(mode_bpp / 8, set_iga);
- }
-
- fill_lcd_format();
-
- pll_D_N = viafb_get_clk_value(panel_crt_table[0].clk);
- DEBUG_MSG(KERN_INFO "PLL=0x%x", pll_D_N);
- viafb_set_vclock(pll_D_N, set_iga);
-
- viafb_set_output_path(DEVICE_LCD, set_iga,
- plvds_chip_info->output_interface);
- lcd_patch_skew(plvds_setting_info, plvds_chip_info);
-
- /* If K8M800, enable LCD Prefetch Mode. */
- if ((viaparinfo->chip_info->gfx_chip_name == UNICHROME_K800)
- || (UNICHROME_K8M890 == viaparinfo->chip_info->gfx_chip_name))
- viafb_write_reg_mask(CR6A, VIACR, 0x01, BIT0);
-
- load_lcd_patch_regs(set_hres, set_vres,
- plvds_setting_info->lcd_panel_id, set_iga);
-
- DEBUG_MSG(KERN_INFO "load_lcd_patch_regs!!\n");
-
- /* Patch for non 32bit alignment mode */
- via_pitch_alignment_patch_lcd(plvds_setting_info, plvds_chip_info);
-}
-
-static void integrated_lvds_disable(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
- bool turn_off_first_powersequence = false;
- bool turn_off_second_powersequence = false;
- if (INTERFACE_LVDS0LVDS1 == plvds_chip_info->output_interface)
- turn_off_first_powersequence = true;
- if (INTERFACE_LVDS0 == plvds_chip_info->output_interface)
- turn_off_first_powersequence = true;
- if (INTERFACE_LVDS1 == plvds_chip_info->output_interface)
- turn_off_second_powersequence = true;
- if (turn_off_second_powersequence) {
- /* Use second power sequence control: */
-
- /* Turn off power sequence. */
- viafb_write_reg_mask(CRD4, VIACR, 0, BIT1);
-
- /* Turn off back light. */
- viafb_write_reg_mask(CRD3, VIACR, 0xC0, BIT6 + BIT7);
- }
- if (turn_off_first_powersequence) {
- /* Use first power sequence control: */
-
- /* Turn off power sequence. */
- viafb_write_reg_mask(CR6A, VIACR, 0, BIT3);
-
- /* Turn off back light. */
- viafb_write_reg_mask(CR91, VIACR, 0xC0, BIT6 + BIT7);
- }
-
- /* Turn DFP High/Low Pad off. */
- viafb_write_reg_mask(SR2A, VIASR, 0, BIT0 + BIT1 + BIT2 + BIT3);
-
- /* Power off LVDS channel. */
- switch (plvds_chip_info->output_interface) {
- case INTERFACE_LVDS0:
- {
- viafb_write_reg_mask(CRD2, VIACR, 0x80, BIT7);
- break;
- }
-
- case INTERFACE_LVDS1:
- {
- viafb_write_reg_mask(CRD2, VIACR, 0x40, BIT6);
- break;
- }
-
- case INTERFACE_LVDS0LVDS1:
- {
- viafb_write_reg_mask(CRD2, VIACR, 0xC0, BIT6 + BIT7);
- break;
- }
- }
-}
-
-static void integrated_lvds_enable(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
- bool turn_on_first_powersequence = false;
- bool turn_on_second_powersequence = false;
-
- DEBUG_MSG(KERN_INFO "integrated_lvds_enable, out_interface:%d\n",
- plvds_chip_info->output_interface);
- if (plvds_setting_info->lcd_mode == LCD_SPWG)
- viafb_write_reg_mask(CRD2, VIACR, 0x00, BIT0 + BIT1);
- else
- viafb_write_reg_mask(CRD2, VIACR, 0x03, BIT0 + BIT1);
- if (INTERFACE_LVDS0LVDS1 == plvds_chip_info->output_interface)
- turn_on_first_powersequence = true;
- if (INTERFACE_LVDS0 == plvds_chip_info->output_interface)
- turn_on_first_powersequence = true;
- if (INTERFACE_LVDS1 == plvds_chip_info->output_interface)
- turn_on_second_powersequence = true;
-
- if (turn_on_second_powersequence) {
- /* Use second power sequence control: */
-
- /* Use hardware control power sequence. */
- viafb_write_reg_mask(CRD3, VIACR, 0, BIT0);
-
- /* Turn on back light. */
- viafb_write_reg_mask(CRD3, VIACR, 0, BIT6 + BIT7);
-
- /* Turn on hardware power sequence. */
- viafb_write_reg_mask(CRD4, VIACR, 0x02, BIT1);
- }
- if (turn_on_first_powersequence) {
- /* Use first power sequence control: */
-
- /* Use hardware control power sequence. */
- viafb_write_reg_mask(CR91, VIACR, 0, BIT0);
-
- /* Turn on back light. */
- viafb_write_reg_mask(CR91, VIACR, 0, BIT6 + BIT7);
-
- /* Turn on hardware power sequence. */
- viafb_write_reg_mask(CR6A, VIACR, 0x08, BIT3);
- }
-
- /* Turn DFP High/Low pad on. */
- viafb_write_reg_mask(SR2A, VIASR, 0x0F, BIT0 + BIT1 + BIT2 + BIT3);
-
- /* Power on LVDS channel. */
- switch (plvds_chip_info->output_interface) {
- case INTERFACE_LVDS0:
- {
- viafb_write_reg_mask(CRD2, VIACR, 0, BIT7);
- break;
- }
-
- case INTERFACE_LVDS1:
- {
- viafb_write_reg_mask(CRD2, VIACR, 0, BIT6);
- break;
- }
-
- case INTERFACE_LVDS0LVDS1:
- {
- viafb_write_reg_mask(CRD2, VIACR, 0, BIT6 + BIT7);
- break;
- }
- }
-}
-
-void viafb_lcd_disable(void)
-{
-
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) {
- lcd_powersequence_off();
- /* DI1 pad off */
- viafb_write_reg_mask(SR1E, VIASR, 0x00, 0x30);
- } else if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700) {
- if (viafb_LCD2_ON
- && (INTEGRATED_LVDS ==
- viaparinfo->chip_info->lvds_chip_info2.lvds_chip_name))
- integrated_lvds_disable(viaparinfo->lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info2);
- if (INTEGRATED_LVDS ==
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name)
- integrated_lvds_disable(viaparinfo->lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info);
- if (VT1636_LVDS == viaparinfo->chip_info->
- lvds_chip_info.lvds_chip_name)
- viafb_disable_lvds_vt1636(viaparinfo->lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info);
- } else if (VT1636_LVDS ==
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name) {
- viafb_disable_lvds_vt1636(viaparinfo->lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info);
- } else {
- /* DFP-HL pad off */
- viafb_write_reg_mask(SR2A, VIASR, 0x00, 0x0F);
- /* Backlight off */
- viafb_write_reg_mask(SR3D, VIASR, 0x00, 0x20);
- /* 24 bit DI data paht off */
- viafb_write_reg_mask(CR91, VIACR, 0x80, 0x80);
- /* Simultaneout disabled */
- viafb_write_reg_mask(CR6B, VIACR, 0x00, 0x08);
- }
-
- /* Disable expansion bit */
- viafb_write_reg_mask(CR79, VIACR, 0x00, 0x01);
- /* CRT path set to IGA1 */
- viafb_write_reg_mask(SR16, VIASR, 0x00, 0x40);
- /* Simultaneout disabled */
- viafb_write_reg_mask(CR6B, VIACR, 0x00, 0x08);
- /* IGA2 path disabled */
- viafb_write_reg_mask(CR6A, VIACR, 0x00, 0x80);
-
-}
-
-void viafb_lcd_enable(void)
-{
- if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266) {
- /* DI1 pad on */
- viafb_write_reg_mask(SR1E, VIASR, 0x30, 0x30);
- lcd_powersequence_on();
- } else if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700) {
- if (viafb_LCD2_ON && (INTEGRATED_LVDS ==
- viaparinfo->chip_info->lvds_chip_info2.lvds_chip_name))
- integrated_lvds_enable(viaparinfo->lvds_setting_info2, \
- &viaparinfo->chip_info->lvds_chip_info2);
- if (INTEGRATED_LVDS ==
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name)
- integrated_lvds_enable(viaparinfo->lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info);
- if (VT1636_LVDS == viaparinfo->chip_info->
- lvds_chip_info.lvds_chip_name)
- viafb_enable_lvds_vt1636(viaparinfo->
- lvds_setting_info, &viaparinfo->chip_info->
- lvds_chip_info);
- } else if (VT1636_LVDS ==
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name) {
- viafb_enable_lvds_vt1636(viaparinfo->lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info);
- } else {
- /* DFP-HL pad on */
- viafb_write_reg_mask(SR2A, VIASR, 0x0F, 0x0F);
- /* Backlight on */
- viafb_write_reg_mask(SR3D, VIASR, 0x20, 0x20);
- /* 24 bit DI data paht on */
- viafb_write_reg_mask(CR91, VIACR, 0x00, 0x80);
-
- /* Set data source selection bit by iga path */
- if (viaparinfo->lvds_setting_info->iga_path == IGA1) {
- /* DFP-H set to IGA1 */
- viafb_write_reg_mask(CR97, VIACR, 0x00, 0x10);
- /* DFP-L set to IGA1 */
- viafb_write_reg_mask(CR99, VIACR, 0x00, 0x10);
- } else {
- /* DFP-H set to IGA2 */
- viafb_write_reg_mask(CR97, VIACR, 0x10, 0x10);
- /* DFP-L set to IGA2 */
- viafb_write_reg_mask(CR99, VIACR, 0x10, 0x10);
- }
- /* LCD enabled */
- viafb_write_reg_mask(CR6A, VIACR, 0x48, 0x48);
- }
-
- if ((viaparinfo->lvds_setting_info->iga_path == IGA1)
- || (viaparinfo->lvds_setting_info->iga_path == IGA1_IGA2)) {
- /* CRT path set to IGA2 */
- viafb_write_reg_mask(SR16, VIASR, 0x40, 0x40);
- /* IGA2 path disabled */
- viafb_write_reg_mask(CR6A, VIACR, 0x00, 0x80);
- /* IGA2 path enabled */
- } else { /* IGA2 */
- viafb_write_reg_mask(CR6A, VIACR, 0x80, 0x80);
- }
-
-}
-
-static void lcd_powersequence_off(void)
-{
- int i, mask, data;
-
- /* Software control power sequence */
- viafb_write_reg_mask(CR91, VIACR, 0x11, 0x11);
-
- for (i = 0; i < 3; i++) {
- mask = PowerSequenceOff[0][i];
- data = PowerSequenceOff[1][i] & mask;
- viafb_write_reg_mask(CR91, VIACR, (u8) data, (u8) mask);
- udelay(PowerSequenceOff[2][i]);
- }
-
- /* Disable LCD */
- viafb_write_reg_mask(CR6A, VIACR, 0x00, 0x08);
-}
-
-static void lcd_powersequence_on(void)
-{
- int i, mask, data;
-
- /* Software control power sequence */
- viafb_write_reg_mask(CR91, VIACR, 0x11, 0x11);
-
- /* Enable LCD */
- viafb_write_reg_mask(CR6A, VIACR, 0x08, 0x08);
-
- for (i = 0; i < 3; i++) {
- mask = PowerSequenceOn[0][i];
- data = PowerSequenceOn[1][i] & mask;
- viafb_write_reg_mask(CR91, VIACR, (u8) data, (u8) mask);
- udelay(PowerSequenceOn[2][i]);
- }
-
- udelay(1);
-}
-
-static void fill_lcd_format(void)
-{
- u8 bdithering = 0, bdual = 0;
-
- if (viaparinfo->lvds_setting_info->device_lcd_dualedge)
- bdual = BIT4;
- if (viaparinfo->lvds_setting_info->LCDDithering)
- bdithering = BIT0;
- /* Dual & Dithering */
- viafb_write_reg_mask(CR88, VIACR, (bdithering | bdual), BIT4 + BIT0);
-}
-
-static void check_diport_of_integrated_lvds(
- struct lvds_chip_information *plvds_chip_info,
- struct lvds_setting_information
- *plvds_setting_info)
-{
- /* Determine LCD DI Port by hardware layout. */
- switch (viafb_display_hardware_layout) {
- case HW_LAYOUT_LCD_ONLY:
- {
- if (plvds_setting_info->device_lcd_dualedge) {
- plvds_chip_info->output_interface =
- INTERFACE_LVDS0LVDS1;
- } else {
- plvds_chip_info->output_interface =
- INTERFACE_LVDS0;
- }
-
- break;
- }
-
- case HW_LAYOUT_DVI_ONLY:
- {
- plvds_chip_info->output_interface = INTERFACE_NONE;
- break;
- }
-
- case HW_LAYOUT_LCD1_LCD2:
- case HW_LAYOUT_LCD_EXTERNAL_LCD2:
- {
- plvds_chip_info->output_interface =
- INTERFACE_LVDS0LVDS1;
- break;
- }
-
- case HW_LAYOUT_LCD_DVI:
- {
- plvds_chip_info->output_interface = INTERFACE_LVDS1;
- break;
- }
-
- default:
- {
- plvds_chip_info->output_interface = INTERFACE_LVDS1;
- break;
- }
- }
-
- DEBUG_MSG(KERN_INFO
- "Display Hardware Layout: 0x%x, LCD DI Port: 0x%x\n",
- viafb_display_hardware_layout,
- plvds_chip_info->output_interface);
-}
-
-void viafb_init_lvds_output_interface(struct lvds_chip_information
- *plvds_chip_info,
- struct lvds_setting_information
- *plvds_setting_info)
-{
- if (INTERFACE_NONE != plvds_chip_info->output_interface) {
- /*Do nothing, lcd port is specified by module parameter */
- return;
- }
-
- switch (plvds_chip_info->lvds_chip_name) {
-
- case VT1636_LVDS:
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CX700:
- plvds_chip_info->output_interface = INTERFACE_DVP1;
- break;
- case UNICHROME_CN700:
- plvds_chip_info->output_interface = INTERFACE_DFP_LOW;
- break;
- default:
- plvds_chip_info->output_interface = INTERFACE_DVP0;
- break;
- }
- break;
-
- case INTEGRATED_LVDS:
- check_diport_of_integrated_lvds(plvds_chip_info,
- plvds_setting_info);
- break;
-
- default:
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_K8M890:
- case UNICHROME_P4M900:
- case UNICHROME_P4M890:
- plvds_chip_info->output_interface = INTERFACE_DFP_LOW;
- break;
- default:
- plvds_chip_info->output_interface = INTERFACE_DFP;
- break;
- }
- break;
- }
-}
-
-static struct display_timing lcd_centering_timging(struct display_timing
- mode_crt_reg,
- struct display_timing panel_crt_reg)
-{
- struct display_timing crt_reg;
-
- crt_reg.hor_total = panel_crt_reg.hor_total;
- crt_reg.hor_addr = mode_crt_reg.hor_addr;
- crt_reg.hor_blank_start =
- (panel_crt_reg.hor_addr - mode_crt_reg.hor_addr) / 2 +
- crt_reg.hor_addr;
- crt_reg.hor_blank_end = panel_crt_reg.hor_blank_end;
- crt_reg.hor_sync_start =
- (panel_crt_reg.hor_sync_start -
- panel_crt_reg.hor_blank_start) + crt_reg.hor_blank_start;
- crt_reg.hor_sync_end = panel_crt_reg.hor_sync_end;
-
- crt_reg.ver_total = panel_crt_reg.ver_total;
- crt_reg.ver_addr = mode_crt_reg.ver_addr;
- crt_reg.ver_blank_start =
- (panel_crt_reg.ver_addr - mode_crt_reg.ver_addr) / 2 +
- crt_reg.ver_addr;
- crt_reg.ver_blank_end = panel_crt_reg.ver_blank_end;
- crt_reg.ver_sync_start =
- (panel_crt_reg.ver_sync_start -
- panel_crt_reg.ver_blank_start) + crt_reg.ver_blank_start;
- crt_reg.ver_sync_end = panel_crt_reg.ver_sync_end;
-
- return crt_reg;
-}
-
-static void load_crtc_shadow_timing(struct display_timing mode_timing,
- struct display_timing panel_timing)
-{
- struct io_register *reg = NULL;
- int i;
- int viafb_load_reg_Num = 0;
- int reg_value = 0;
-
- if (viaparinfo->lvds_setting_info->display_method == LCD_EXPANDSION) {
- /* Expansion */
- for (i = 12; i < 20; i++) {
- switch (i) {
- case H_TOTAL_SHADOW_INDEX:
- reg_value =
- IGA2_HOR_TOTAL_SHADOW_FORMULA
- (panel_timing.hor_total);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.hor_total_shadow.
- reg_num;
- reg = iga2_shadow_crtc_reg.hor_total_shadow.reg;
- break;
- case H_BLANK_END_SHADOW_INDEX:
- reg_value =
- IGA2_HOR_BLANK_END_SHADOW_FORMULA
- (panel_timing.hor_blank_start,
- panel_timing.hor_blank_end);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.
- hor_blank_end_shadow.reg_num;
- reg =
- iga2_shadow_crtc_reg.
- hor_blank_end_shadow.reg;
- break;
- case V_TOTAL_SHADOW_INDEX:
- reg_value =
- IGA2_VER_TOTAL_SHADOW_FORMULA
- (panel_timing.ver_total);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.ver_total_shadow.
- reg_num;
- reg = iga2_shadow_crtc_reg.ver_total_shadow.reg;
- break;
- case V_ADDR_SHADOW_INDEX:
- reg_value =
- IGA2_VER_ADDR_SHADOW_FORMULA
- (panel_timing.ver_addr);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.ver_addr_shadow.
- reg_num;
- reg = iga2_shadow_crtc_reg.ver_addr_shadow.reg;
- break;
- case V_BLANK_SATRT_SHADOW_INDEX:
- reg_value =
- IGA2_VER_BLANK_START_SHADOW_FORMULA
- (panel_timing.ver_blank_start);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.
- ver_blank_start_shadow.reg_num;
- reg =
- iga2_shadow_crtc_reg.
- ver_blank_start_shadow.reg;
- break;
- case V_BLANK_END_SHADOW_INDEX:
- reg_value =
- IGA2_VER_BLANK_END_SHADOW_FORMULA
- (panel_timing.ver_blank_start,
- panel_timing.ver_blank_end);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.
- ver_blank_end_shadow.reg_num;
- reg =
- iga2_shadow_crtc_reg.
- ver_blank_end_shadow.reg;
- break;
- case V_SYNC_SATRT_SHADOW_INDEX:
- reg_value =
- IGA2_VER_SYNC_START_SHADOW_FORMULA
- (panel_timing.ver_sync_start);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.
- ver_sync_start_shadow.reg_num;
- reg =
- iga2_shadow_crtc_reg.
- ver_sync_start_shadow.reg;
- break;
- case V_SYNC_END_SHADOW_INDEX:
- reg_value =
- IGA2_VER_SYNC_END_SHADOW_FORMULA
- (panel_timing.ver_sync_start,
- panel_timing.ver_sync_end);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.
- ver_sync_end_shadow.reg_num;
- reg =
- iga2_shadow_crtc_reg.
- ver_sync_end_shadow.reg;
- break;
- }
- viafb_load_reg(reg_value,
- viafb_load_reg_Num, reg, VIACR);
- }
- } else { /* Centering */
- for (i = 12; i < 20; i++) {
- switch (i) {
- case H_TOTAL_SHADOW_INDEX:
- reg_value =
- IGA2_HOR_TOTAL_SHADOW_FORMULA
- (panel_timing.hor_total);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.hor_total_shadow.
- reg_num;
- reg = iga2_shadow_crtc_reg.hor_total_shadow.reg;
- break;
- case H_BLANK_END_SHADOW_INDEX:
- reg_value =
- IGA2_HOR_BLANK_END_SHADOW_FORMULA
- (panel_timing.hor_blank_start,
- panel_timing.hor_blank_end);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.
- hor_blank_end_shadow.reg_num;
- reg =
- iga2_shadow_crtc_reg.
- hor_blank_end_shadow.reg;
- break;
- case V_TOTAL_SHADOW_INDEX:
- reg_value =
- IGA2_VER_TOTAL_SHADOW_FORMULA
- (panel_timing.ver_total);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.ver_total_shadow.
- reg_num;
- reg = iga2_shadow_crtc_reg.ver_total_shadow.reg;
- break;
- case V_ADDR_SHADOW_INDEX:
- reg_value =
- IGA2_VER_ADDR_SHADOW_FORMULA
- (mode_timing.ver_addr);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.ver_addr_shadow.
- reg_num;
- reg = iga2_shadow_crtc_reg.ver_addr_shadow.reg;
- break;
- case V_BLANK_SATRT_SHADOW_INDEX:
- reg_value =
- IGA2_VER_BLANK_START_SHADOW_FORMULA
- (mode_timing.ver_blank_start);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.
- ver_blank_start_shadow.reg_num;
- reg =
- iga2_shadow_crtc_reg.
- ver_blank_start_shadow.reg;
- break;
- case V_BLANK_END_SHADOW_INDEX:
- reg_value =
- IGA2_VER_BLANK_END_SHADOW_FORMULA
- (panel_timing.ver_blank_start,
- panel_timing.ver_blank_end);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.
- ver_blank_end_shadow.reg_num;
- reg =
- iga2_shadow_crtc_reg.
- ver_blank_end_shadow.reg;
- break;
- case V_SYNC_SATRT_SHADOW_INDEX:
- reg_value =
- IGA2_VER_SYNC_START_SHADOW_FORMULA(
- (panel_timing.ver_sync_start -
- panel_timing.ver_blank_start) +
- (panel_timing.ver_addr -
- mode_timing.ver_addr) / 2 +
- mode_timing.ver_addr);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.ver_sync_start_shadow.
- reg_num;
- reg =
- iga2_shadow_crtc_reg.ver_sync_start_shadow.
- reg;
- break;
- case V_SYNC_END_SHADOW_INDEX:
- reg_value =
- IGA2_VER_SYNC_END_SHADOW_FORMULA(
- (panel_timing.ver_sync_start -
- panel_timing.ver_blank_start) +
- (panel_timing.ver_addr -
- mode_timing.ver_addr) / 2 +
- mode_timing.ver_addr,
- panel_timing.ver_sync_end);
- viafb_load_reg_Num =
- iga2_shadow_crtc_reg.ver_sync_end_shadow.
- reg_num;
- reg =
- iga2_shadow_crtc_reg.ver_sync_end_shadow.
- reg;
- break;
- }
- viafb_load_reg(reg_value,
- viafb_load_reg_Num, reg, VIACR);
- }
- }
-}
-
-bool viafb_lcd_get_mobile_state(bool *mobile)
-{
- unsigned char *romptr, *tableptr;
- u8 core_base;
- unsigned char *biosptr;
- /* Rom address */
- u32 romaddr = 0x000C0000;
- u16 start_pattern = 0;
-
- biosptr = ioremap(romaddr, 0x10000);
-
- memcpy(&start_pattern, biosptr, 2);
- /* Compare pattern */
- if (start_pattern == 0xAA55) {
- /* Get the start of Table */
- /* 0x1B means BIOS offset position */
- romptr = biosptr + 0x1B;
- tableptr = biosptr + *((u16 *) romptr);
-
- /* Get the start of biosver structure */
- /* 18 means BIOS version position. */
- romptr = tableptr + 18;
- romptr = biosptr + *((u16 *) romptr);
-
- /* The offset should be 44, but the
- actual image is less three char. */
- /* pRom += 44; */
- romptr += 41;
-
- core_base = *romptr++;
-
- if (core_base & 0x8)
- *mobile = false;
- else
- *mobile = true;
- /* release memory */
- iounmap(biosptr);
-
- return true;
- } else {
- iounmap(biosptr);
- return false;
- }
-}
-
-static void viafb_load_scaling_factor_for_p4m900(int set_hres,
- int set_vres, int panel_hres, int panel_vres)
-{
- int h_scaling_factor;
- int v_scaling_factor;
- u8 cra2 = 0;
- u8 cr77 = 0;
- u8 cr78 = 0;
- u8 cr79 = 0;
- u8 cr9f = 0;
- /* Check if expansion for horizontal */
- if (set_hres < panel_hres) {
- /* Load Horizontal Scaling Factor */
-
- /* For VIA_K8M800 or later chipsets. */
- h_scaling_factor =
- K800_LCD_HOR_SCF_FORMULA(set_hres, panel_hres);
- /* HSCaleFactor[1:0] at CR9F[1:0] */
- cr9f = h_scaling_factor & 0x0003;
- /* HSCaleFactor[9:2] at CR77[7:0] */
- cr77 = (h_scaling_factor & 0x03FC) >> 2;
- /* HSCaleFactor[11:10] at CR79[5:4] */
- cr79 = (h_scaling_factor & 0x0C00) >> 10;
- cr79 <<= 4;
-
- /* Horizontal scaling enabled */
- cra2 = 0xC0;
-
- DEBUG_MSG(KERN_INFO "Horizontal Scaling value = %d\n",
- h_scaling_factor);
- } else {
- /* Horizontal scaling disabled */
- cra2 = 0x00;
- }
-
- /* Check if expansion for vertical */
- if (set_vres < panel_vres) {
- /* Load Vertical Scaling Factor */
-
- /* For VIA_K8M800 or later chipsets. */
- v_scaling_factor =
- K800_LCD_VER_SCF_FORMULA(set_vres, panel_vres);
-
- /* Vertical scaling enabled */
- cra2 |= 0x08;
- /* VSCaleFactor[0] at CR79[3] */
- cr79 |= ((v_scaling_factor & 0x0001) << 3);
- /* VSCaleFactor[8:1] at CR78[7:0] */
- cr78 |= (v_scaling_factor & 0x01FE) >> 1;
- /* VSCaleFactor[10:9] at CR79[7:6] */
- cr79 |= ((v_scaling_factor & 0x0600) >> 9) << 6;
-
- DEBUG_MSG(KERN_INFO "Vertical Scaling value = %d\n",
- v_scaling_factor);
- } else {
- /* Vertical scaling disabled */
- cra2 |= 0x00;
- }
-
- viafb_write_reg_mask(CRA2, VIACR, cra2, BIT3 + BIT6 + BIT7);
- viafb_write_reg_mask(CR77, VIACR, cr77, 0xFF);
- viafb_write_reg_mask(CR78, VIACR, cr78, 0xFF);
- viafb_write_reg_mask(CR79, VIACR, cr79, 0xF8);
- viafb_write_reg_mask(CR9F, VIACR, cr9f, BIT0 + BIT1);
-}
diff --git a/drivers/video/via/lcd.h b/drivers/video/via/lcd.h
deleted file mode 100644
index 071f47cf5be..00000000000
--- a/drivers/video/via/lcd.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#ifndef __LCD_H__
-#define __LCD_H__
-
-/*Definition TMDS Device ID register*/
-#define VT1631_DEVICE_ID_REG 0x02
-#define VT1631_DEVICE_ID 0x92
-
-#define VT3271_DEVICE_ID_REG 0x02
-#define VT3271_DEVICE_ID 0x71
-
-#define GET_LCD_SIZE_BY_SYSTEM_BIOS 0x01
-#define GET_LCD_SIZE_BY_VGA_BIOS 0x02
-#define GET_LCD_SZIE_BY_HW_STRAPPING 0x03
-#define GET_LCD_SIZE_BY_USER_SETTING 0x04
-
-/* Definition DVI Panel ID*/
-/* Resolution: 640x480, Channel: single, Dithering: Enable */
-#define LCD_PANEL_ID0_640X480 0x00
-/* Resolution: 800x600, Channel: single, Dithering: Enable */
-#define LCD_PANEL_ID1_800X600 0x01
-/* Resolution: 1024x768, Channel: single, Dithering: Enable */
-#define LCD_PANEL_ID2_1024X768 0x02
-/* Resolution: 1280x768, Channel: single, Dithering: Enable */
-#define LCD_PANEL_ID3_1280X768 0x03
-/* Resolution: 1280x1024, Channel: dual, Dithering: Enable */
-#define LCD_PANEL_ID4_1280X1024 0x04
-/* Resolution: 1400x1050, Channel: dual, Dithering: Enable */
-#define LCD_PANEL_ID5_1400X1050 0x05
-/* Resolution: 1600x1200, Channel: dual, Dithering: Enable */
-#define LCD_PANEL_ID6_1600X1200 0x06
-/* Resolution: 1366x768, Channel: single, Dithering: Disable */
-#define LCD_PANEL_ID7_1366X768 0x07
-/* Resolution: 1024x600, Channel: single, Dithering: Enable*/
-#define LCD_PANEL_ID8_1024X600 0x08
-/* Resolution: 1280x800, Channel: single, Dithering: Enable*/
-#define LCD_PANEL_ID9_1280X800 0x09
-/* Resolution: 800x480, Channel: single, Dithering: Enable*/
-#define LCD_PANEL_IDA_800X480 0x0A
-/* Resolution: 1360x768, Channel: single, Dithering: Disable*/
-#define LCD_PANEL_IDB_1360X768 0x0B
-/* Resolution: 480x640, Channel: single, Dithering: Enable */
-#define LCD_PANEL_IDC_480X640 0x0C
-
-
-extern int viafb_LCD2_ON;
-extern int viafb_LCD_ON;
-extern int viafb_DVI_ON;
-
-void viafb_disable_lvds_vt1636(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-void viafb_enable_lvds_vt1636(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-void viafb_lcd_disable(void);
-void viafb_lcd_enable(void);
-void viafb_init_lcd_size(void);
-void viafb_init_lvds_output_interface(struct lvds_chip_information
- *plvds_chip_info,
- struct lvds_setting_information
- *plvds_setting_info);
-void viafb_lcd_set_mode(struct crt_mode_table *mode_crt_table,
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-int viafb_lvds_trasmitter_identify(void);
-void viafb_init_lvds_output_interface(struct lvds_chip_information
- *plvds_chip_info,
- struct lvds_setting_information
- *plvds_setting_info);
-bool viafb_lcd_get_mobile_state(bool *mobile);
-void viafb_load_crtc_timing(struct display_timing device_timing,
- int set_iga);
-
-#endif /* __LCD_H__ */
diff --git a/drivers/video/via/lcdtbl.h b/drivers/video/via/lcdtbl.h
deleted file mode 100644
index 6f3dd800be5..00000000000
--- a/drivers/video/via/lcdtbl.h
+++ /dev/null
@@ -1,591 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#ifndef __LCDTBL_H__
-#define __LCDTBL_H__
-
-#include "share.h"
-
-/* CLE266 Software Power Sequence */
-/* {Mask}, {Data}, {Delay} */
-int PowerSequenceOn[3][3] =
- { {0x10, 0x08, 0x06}, {0x10, 0x08, 0x06}, {0x19, 0x1FE, 0x01} };
-int PowerSequenceOff[3][3] =
- { {0x06, 0x08, 0x10}, {0x00, 0x00, 0x00}, {0xD2, 0x19, 0x01} };
-
-/* ++++++ P880 ++++++ */
-/* Panel 1600x1200 */
-struct io_reg P880_LCD_RES_6X4_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x73}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x73}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x5A}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x5E},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xD6}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR44, 0xFF, 0x7D}, {VIASR, SR45, 0xFF, 0x8C},
- {VIASR, SR46, 0xFF, 0x02}
-
-};
-
-#define NUM_TOTAL_P880_LCD_RES_6X4_16X12 ARRAY_SIZE(P880_LCD_RES_6X4_16X12)
-
-struct io_reg P880_LCD_RES_7X4_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x67}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x67}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x74}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x78},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xF5}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR44, 0xFF, 0x78}, {VIASR, SR45, 0xFF, 0x8C},
- {VIASR, SR46, 0xFF, 0x01}
-
-};
-
-#define NUM_TOTAL_P880_LCD_RES_7X4_16X12 ARRAY_SIZE(P880_LCD_RES_7X4_16X12)
-
-struct io_reg P880_LCD_RES_8X6_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x65}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x65}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x7F}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x83},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xE1}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR44, 0xFF, 0x6D}, {VIASR, SR45, 0xFF, 0x88},
- {VIASR, SR46, 0xFF, 0x03}
-
-};
-
-#define NUM_TOTAL_P880_LCD_RES_8X6_16X12 ARRAY_SIZE(P880_LCD_RES_8X6_16X12)
-
-struct io_reg P880_LCD_RES_10X7_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x65}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x65}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0xAB}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0xAF},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xF0}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR44, 0xFF, 0x92}, {VIASR, SR45, 0xFF, 0x88},
- {VIASR, SR46, 0xFF, 0x03}
-
-};
-
-#define NUM_TOTAL_P880_LCD_RES_10X7_16X12 ARRAY_SIZE(P880_LCD_RES_10X7_16X12)
-
-struct io_reg P880_LCD_RES_12X10_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x7D}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x7D}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0xD0}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0xD4},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xFA}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR44, 0xFF, 0xF6}, {VIASR, SR45, 0xFF, 0x88},
- {VIASR, SR46, 0xFF, 0x05}
-
-};
-
-#define NUM_TOTAL_P880_LCD_RES_12X10_16X12 ARRAY_SIZE(P880_LCD_RES_12X10_16X12)
-
-/* Panel 1400x1050 */
-struct io_reg P880_LCD_RES_6X4_14X10[] = {
- /* 640x480 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x56},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x75},
- {VIACR, CR5D, 0x40, 0x24},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x5F}, {VIACR, CR71, 0x08, 0x44},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x63},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xB4}, {VIACR, CR67, 0x03, 0x00},
- /* VCLK */
- {VIASR, SR44, 0xFF, 0xC6}, {VIASR, SR45, 0xFF, 0x8C},
- {VIASR, SR46, 0xFF, 0x05}
-};
-
-#define NUM_TOTAL_P880_LCD_RES_6X4_14X10 ARRAY_SIZE(P880_LCD_RES_6X4_14X10)
-
-struct io_reg P880_LCD_RES_8X6_14X10[] = {
- /* 800x600 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x56},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x75},
- {VIACR, CR5D, 0x40, 0x24},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x7F}, {VIACR, CR71, 0x08, 0x44},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x83},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xBE}, {VIACR, CR67, 0x03, 0x00},
- /* VCLK */
- {VIASR, SR44, 0xFF, 0x06}, {VIASR, SR45, 0xFF, 0x8D},
- {VIASR, SR46, 0xFF, 0x05}
-};
-
-#define NUM_TOTAL_P880_LCD_RES_8X6_14X10 ARRAY_SIZE(P880_LCD_RES_8X6_14X10)
-
-/* ++++++ K400 ++++++ */
-/* Panel 1600x1200 */
-struct io_reg K400_LCD_RES_6X4_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x73}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x73}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x5A}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x5E},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xDA}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0xC4}, {VIASR, SR47, 0xFF, 0x7F}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_6X4_16X12 ARRAY_SIZE(K400_LCD_RES_6X4_16X12)
-
-struct io_reg K400_LCD_RES_7X4_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x67}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x67}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x74}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x78},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xF5}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x46}, {VIASR, SR47, 0xFF, 0x3D}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_7X4_16X12 ARRAY_SIZE(K400_LCD_RES_7X4_16X12)
-
-struct io_reg K400_LCD_RES_8X6_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x65}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x65}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x7F}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x83},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xE1}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x85}, {VIASR, SR47, 0xFF, 0x6F}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_8X6_16X12 ARRAY_SIZE(K400_LCD_RES_8X6_16X12)
-
-struct io_reg K400_LCD_RES_10X7_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x65}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x65}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0xAB}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0xAF},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xF0}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x45}, {VIASR, SR47, 0xFF, 0x4A}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_10X7_16X12 ARRAY_SIZE(K400_LCD_RES_10X7_16X12)
-
-struct io_reg K400_LCD_RES_12X10_16X12[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x7D}, {VIACR, CR55, 0x0F, 0x08},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x7D}, {VIACR, CR54, 0x38, 0x00},
- {VIACR, CR5D, 0x40, 0x40},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0xD0}, {VIACR, CR71, 0x08, 0x00},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0xD4},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xFA}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x47}, {VIASR, SR47, 0xFF, 0x7C}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_12X10_16X12 ARRAY_SIZE(K400_LCD_RES_12X10_16X12)
-
-/* Panel 1400x1050 */
-struct io_reg K400_LCD_RES_6X4_14X10[] = {
- /* 640x400 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x56},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x75},
- {VIACR, CR5D, 0x40, 0x24},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x5F}, {VIACR, CR71, 0x08, 0x44},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x63},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xB4}, {VIACR, CR67, 0x03, 0x00},
- /* VCLK */
- {VIASR, SR46, 0xFF, 0x07}, {VIASR, SR47, 0xFF, 0x19}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_6X4_14X10 ARRAY_SIZE(K400_LCD_RES_6X4_14X10)
-
-struct io_reg K400_LCD_RES_8X6_14X10[] = {
- /* 800x600 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x56},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x75},
- {VIACR, CR5D, 0x40, 0x24},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x7F}, {VIACR, CR71, 0x08, 0x44},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x83},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xBE}, {VIACR, CR67, 0x03, 0x00},
- /* VCLK */
- {VIASR, SR46, 0xFF, 0x07}, {VIASR, SR47, 0xFF, 0x21}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_8X6_14X10 ARRAY_SIZE(K400_LCD_RES_8X6_14X10)
-
-struct io_reg K400_LCD_RES_10X7_14X10[] = {
- /* 1024x768 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x56},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x75},
- {VIACR, CR5D, 0x40, 0x24},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0xA3}, {VIACR, CR71, 0x08, 0x44},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0xA7},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xC3}, {VIACR, CR67, 0x03, 0x04},
- /* VCLK */
- {VIASR, SR46, 0xFF, 0x05}, {VIASR, SR47, 0xFF, 0x1E}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_10X7_14X10 ARRAY_SIZE(K400_LCD_RES_10X7_14X10)
-
-struct io_reg K400_LCD_RES_12X10_14X10[] = {
- /* 1280x768, 1280x960, 1280x1024 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x97}, {VIACR, CR55, 0x0F, 0x56},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x97}, {VIACR, CR54, 0x38, 0x75},
- {VIACR, CR5D, 0x40, 0x24},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0xCE}, {VIACR, CR71, 0x08, 0x44},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0xD2},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xC9}, {VIACR, CR67, 0x03, 0x04},
- /* VCLK */
- {VIASR, SR46, 0xFF, 0x84}, {VIASR, SR47, 0xFF, 0x79}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_12X10_14X10 ARRAY_SIZE(K400_LCD_RES_12X10_14X10)
-
-/* ++++++ K400 ++++++ */
-/* Panel 1366x768 */
-struct io_reg K400_LCD_RES_6X4_1366X7[] = {
- /* 640x400 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x47}, {VIACR, CR55, 0x0F, 0x35},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x47}, {VIACR, CR54, 0x38, 0x2B},
- {VIACR, CR5D, 0x40, 0x13},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x60}, {VIACR, CR71, 0x08, 0x23},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x64},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0x8C}, {VIACR, CR67, 0x03, 0x00},
- /* VCLK */
- {VIASR, SR46, 0xFF, 0x87}, {VIASR, SR47, 0xFF, 0x4C}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_6X4_1366X7 ARRAY_SIZE(K400_LCD_RES_6X4_1366X7)
-
-struct io_reg K400_LCD_RES_7X4_1366X7[] = {
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x3B}, {VIACR, CR55, 0x0F, 0x35},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x3B}, {VIACR, CR54, 0x38, 0x2B},
- {VIACR, CR5D, 0x40, 0x13},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x71}, {VIACR, CR71, 0x08, 0x23},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x75},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0x96}, {VIACR, CR67, 0x03, 0x00},
- /* VCLK */
- {VIASR, SR46, 0xFF, 0x05}, {VIASR, SR47, 0xFF, 0x10}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_7X4_1366X7 ARRAY_SIZE(K400_LCD_RES_7X4_1366X7)
-
-struct io_reg K400_LCD_RES_8X6_1366X7[] = {
- /* 800x600 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x37}, {VIACR, CR55, 0x0F, 0x35},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x37}, {VIACR, CR54, 0x38, 0x2B},
- {VIACR, CR5D, 0x40, 0x13},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x7E}, {VIACR, CR71, 0x08, 0x23},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x82},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0x8C}, {VIACR, CR67, 0x03, 0x00},
- /* VCLK */
- {VIASR, SR46, 0xFF, 0x84}, {VIASR, SR47, 0xFF, 0xB9}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_8X6_1366X7 ARRAY_SIZE(K400_LCD_RES_8X6_1366X7)
-
-struct io_reg K400_LCD_RES_10X7_1366X7[] = {
- /* 1024x768 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x56},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x75},
- {VIACR, CR5D, 0x40, 0x24},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0xA3}, {VIACR, CR71, 0x08, 0x44},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0xA7},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xC3}, {VIACR, CR67, 0x03, 0x04},
- /* VCLK */
- {VIASR, SR46, 0xFF, 0x05}, {VIASR, SR47, 0xFF, 0x1E}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_10X7_1366X7 ARRAY_SIZE(K400_LCD_RES_10X7_1366X7)
-
-struct io_reg K400_LCD_RES_12X10_1366X7[] = {
- /* 1280x768, 1280x960, 1280x1024 */
- /* IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x97}, {VIACR, CR55, 0x0F, 0x56},
- /* IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x97}, {VIACR, CR54, 0x38, 0x75},
- {VIACR, CR5D, 0x40, 0x24},
- /* IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0xCE}, {VIACR, CR71, 0x08, 0x44},
- /* IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0xD2},
- /* IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xC9}, {VIACR, CR67, 0x03, 0x04},
- /* VCLK */
- {VIASR, SR46, 0xFF, 0x84}, {VIASR, SR47, 0xFF, 0x79}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_12X10_1366X7\
- ARRAY_SIZE(K400_LCD_RES_12X10_1366X7)
-
-/* ++++++ K400 ++++++ */
-/* Panel 1280x1024 */
-struct io_reg K400_LCD_RES_6X4_12X10[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x46},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x74},
- {VIACR, CR5D, 0x40, 0x1C},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x5F}, {VIACR, CR71, 0x08, 0x34},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x63},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xAA}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x07}, {VIASR, SR47, 0xFF, 0x19}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_6X4_12X10 ARRAY_SIZE(K400_LCD_RES_6X4_12X10)
-
-struct io_reg K400_LCD_RES_7X4_12X10[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x46},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x74},
- {VIACR, CR5D, 0x40, 0x1C},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x68}, {VIACR, CR71, 0x08, 0x34},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x6C},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xA8}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x87}, {VIASR, SR47, 0xFF, 0xED}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_7X4_12X10 ARRAY_SIZE(K400_LCD_RES_7X4_12X10)
-
-struct io_reg K400_LCD_RES_8X6_12X10[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x46},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x74},
- {VIACR, CR5D, 0x40, 0x1C},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x7F}, {VIACR, CR71, 0x08, 0x34},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x83},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xBE}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x07}, {VIASR, SR47, 0xFF, 0x21}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_8X6_12X10 ARRAY_SIZE(K400_LCD_RES_8X6_12X10)
-
-struct io_reg K400_LCD_RES_10X7_12X10[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x9D}, {VIACR, CR55, 0x0F, 0x46},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x9D}, {VIACR, CR54, 0x38, 0x74},
- {VIACR, CR5D, 0x40, 0x1C},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0xA3}, {VIACR, CR71, 0x08, 0x34},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0xA7},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0xBE}, {VIACR, CR67, 0x03, 0x04},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x05}, {VIASR, SR47, 0xFF, 0x1E}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_10X7_12X10 ARRAY_SIZE(K400_LCD_RES_10X7_12X10)
-
-/* ++++++ K400 ++++++ */
-/* Panel 1024x768 */
-struct io_reg K400_LCD_RES_6X4_10X7[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x47}, {VIACR, CR55, 0x0F, 0x35},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x47}, {VIACR, CR54, 0x38, 0x2B},
- {VIACR, CR5D, 0x40, 0x13},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x60}, {VIACR, CR71, 0x08, 0x23},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x64},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0x8C}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x87}, {VIASR, SR47, 0xFF, 0x4C}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_6X4_10X7 ARRAY_SIZE(K400_LCD_RES_6X4_10X7)
-
-struct io_reg K400_LCD_RES_7X4_10X7[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x3B}, {VIACR, CR55, 0x0F, 0x35},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x3B}, {VIACR, CR54, 0x38, 0x2B},
- {VIACR, CR5D, 0x40, 0x13},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x71}, {VIACR, CR71, 0x08, 0x23},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x75},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0x96}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x05}, {VIASR, SR47, 0xFF, 0x10}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_7X4_10X7 ARRAY_SIZE(K400_LCD_RES_7X4_10X7)
-
-struct io_reg K400_LCD_RES_8X6_10X7[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x37}, {VIACR, CR55, 0x0F, 0x35},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x37}, {VIACR, CR54, 0x38, 0x2B},
- {VIACR, CR5D, 0x40, 0x13},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x7E}, {VIACR, CR71, 0x08, 0x23},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x82},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0x8C}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x84}, {VIASR, SR47, 0xFF, 0xB9}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_8X6_10X7 ARRAY_SIZE(K400_LCD_RES_8X6_10X7)
-
-/* ++++++ K400 ++++++ */
-/* Panel 800x600 */
-struct io_reg K400_LCD_RES_6X4_8X6[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x1A}, {VIACR, CR55, 0x0F, 0x34},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x1A}, {VIACR, CR54, 0x38, 0xE3},
- {VIACR, CR5D, 0x40, 0x12},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x5F}, {VIACR, CR71, 0x08, 0x22},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x63},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0x6E}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0x86}, {VIASR, SR47, 0xFF, 0xB3}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_6X4_8X6 ARRAY_SIZE(K400_LCD_RES_6X4_8X6)
-
-struct io_reg K400_LCD_RES_7X4_8X6[] = {
- /*IGA2 Horizontal Total */
- {VIACR, CR50, 0xFF, 0x1F}, {VIACR, CR55, 0x0F, 0x34},
- /*IGA2 Horizontal Blank End */
- {VIACR, CR53, 0xFF, 0x1F}, {VIACR, CR54, 0x38, 0xE3},
- {VIACR, CR5D, 0x40, 0x12},
- /*IGA2 Horizontal Total Shadow */
- {VIACR, CR6D, 0xFF, 0x7F}, {VIACR, CR71, 0x08, 0x22},
- /*IGA2 Horizontal Blank End Shadow */
- {VIACR, CR6E, 0xFF, 0x83},
- /*IGA2 Offset */
- {VIACR, CR66, 0xFF, 0x78}, {VIACR, CR67, 0x03, 0x00},
- /*VCLK*/ {VIASR, SR46, 0xFF, 0xC4}, {VIASR, SR47, 0xFF, 0x59}
-};
-
-#define NUM_TOTAL_K400_LCD_RES_7X4_8X6 ARRAY_SIZE(K400_LCD_RES_7X4_8X6)
-
-#endif /* __LCDTBL_H__ */
diff --git a/drivers/video/via/share.h b/drivers/video/via/share.h
deleted file mode 100644
index 2e1254da9c8..00000000000
--- a/drivers/video/via/share.h
+++ /dev/null
@@ -1,1105 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __SHARE_H__
-#define __SHARE_H__
-
-/* Define Return Value */
-#define FAIL -1
-#define OK 1
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-/* Define Bit Field */
-#define BIT0 0x01
-#define BIT1 0x02
-#define BIT2 0x04
-#define BIT3 0x08
-#define BIT4 0x10
-#define BIT5 0x20
-#define BIT6 0x40
-#define BIT7 0x80
-
-/* Video Memory Size */
-#define VIDEO_MEMORY_SIZE_16M 0x1000000
-
-/* Definition Mode Index
-*/
-#define VIA_RES_640X480 0
-#define VIA_RES_800X600 1
-#define VIA_RES_1024X768 2
-#define VIA_RES_1152X864 3
-#define VIA_RES_1280X1024 4
-#define VIA_RES_1600X1200 5
-#define VIA_RES_1440X1050 6
-#define VIA_RES_1280X768 7
-#define VIA_RES_1280X960 8
-#define VIA_RES_1920X1440 9
-#define VIA_RES_848X480 10
-#define VIA_RES_1400X1050 11
-#define VIA_RES_720X480 12
-#define VIA_RES_720X576 13
-#define VIA_RES_1024X512 14
-#define VIA_RES_856X480 15
-#define VIA_RES_1024X576 16
-#define VIA_RES_640X400 17
-#define VIA_RES_1280X720 18
-#define VIA_RES_1920X1080 19
-#define VIA_RES_800X480 20
-#define VIA_RES_1368X768 21
-#define VIA_RES_1024X600 22
-#define VIA_RES_1280X800 23
-#define VIA_RES_1680X1050 24
-#define VIA_RES_960X600 25
-#define VIA_RES_1000X600 26
-#define VIA_RES_1088X612 27
-#define VIA_RES_1152X720 28
-#define VIA_RES_1200X720 29
-#define VIA_RES_1280X600 30
-#define VIA_RES_1360X768 31
-#define VIA_RES_1366X768 32
-#define VIA_RES_1440X900 33
-#define VIA_RES_1600X900 34
-#define VIA_RES_1600X1024 35
-#define VIA_RES_1792X1344 36
-#define VIA_RES_1856X1392 37
-#define VIA_RES_1920X1200 38
-#define VIA_RES_2048X1536 39
-#define VIA_RES_480X640 40
-
-/*Reduce Blanking*/
-#define VIA_RES_1360X768_RB 131
-#define VIA_RES_1440X900_RB 133
-#define VIA_RES_1400X1050_RB 111
-#define VIA_RES_1600X900_RB 134
-#define VIA_RES_1680X1050_RB 124
-#define VIA_RES_1920X1080_RB 119
-#define VIA_RES_1920X1200_RB 138
-
-#define VIA_RES_INVALID 255
-
-/* standard VGA IO port
-*/
-#define VIARMisc 0x3CC
-#define VIAWMisc 0x3C2
-#define VIAStatus 0x3DA
-#define VIACR 0x3D4
-#define VIASR 0x3C4
-#define VIAGR 0x3CE
-#define VIAAR 0x3C0
-
-#define StdCR 0x19
-#define StdSR 0x04
-#define StdGR 0x09
-#define StdAR 0x14
-
-#define PatchCR 11
-
-/* Display path */
-#define IGA1 1
-#define IGA2 2
-#define IGA1_IGA2 3
-
-/* Define Color Depth */
-#define MODE_8BPP 1
-#define MODE_16BPP 2
-#define MODE_32BPP 4
-
-#define GR20 0x20
-#define GR21 0x21
-#define GR22 0x22
-
-/* Sequencer Registers */
-#define SR01 0x01
-#define SR10 0x10
-#define SR12 0x12
-#define SR15 0x15
-#define SR16 0x16
-#define SR17 0x17
-#define SR18 0x18
-#define SR1B 0x1B
-#define SR1A 0x1A
-#define SR1C 0x1C
-#define SR1D 0x1D
-#define SR1E 0x1E
-#define SR1F 0x1F
-#define SR20 0x20
-#define SR21 0x21
-#define SR22 0x22
-#define SR2A 0x2A
-#define SR2D 0x2D
-#define SR2E 0x2E
-
-#define SR30 0x30
-#define SR39 0x39
-#define SR3D 0x3D
-#define SR3E 0x3E
-#define SR3F 0x3F
-#define SR40 0x40
-#define SR43 0x43
-#define SR44 0x44
-#define SR45 0x45
-#define SR46 0x46
-#define SR47 0x47
-#define SR48 0x48
-#define SR49 0x49
-#define SR4A 0x4A
-#define SR4B 0x4B
-#define SR4C 0x4C
-#define SR52 0x52
-#define SR5E 0x5E
-#define SR65 0x65
-
-/* CRT Controller Registers */
-#define CR00 0x00
-#define CR01 0x01
-#define CR02 0x02
-#define CR03 0x03
-#define CR04 0x04
-#define CR05 0x05
-#define CR06 0x06
-#define CR07 0x07
-#define CR08 0x08
-#define CR09 0x09
-#define CR0A 0x0A
-#define CR0B 0x0B
-#define CR0C 0x0C
-#define CR0D 0x0D
-#define CR0E 0x0E
-#define CR0F 0x0F
-#define CR10 0x10
-#define CR11 0x11
-#define CR12 0x12
-#define CR13 0x13
-#define CR14 0x14
-#define CR15 0x15
-#define CR16 0x16
-#define CR17 0x17
-#define CR18 0x18
-
-/* Extend CRT Controller Registers */
-#define CR30 0x30
-#define CR31 0x31
-#define CR32 0x32
-#define CR33 0x33
-#define CR34 0x34
-#define CR35 0x35
-#define CR36 0x36
-#define CR37 0x37
-#define CR38 0x38
-#define CR39 0x39
-#define CR3A 0x3A
-#define CR3B 0x3B
-#define CR3C 0x3C
-#define CR3D 0x3D
-#define CR3E 0x3E
-#define CR3F 0x3F
-#define CR40 0x40
-#define CR41 0x41
-#define CR42 0x42
-#define CR43 0x43
-#define CR44 0x44
-#define CR45 0x45
-#define CR46 0x46
-#define CR47 0x47
-#define CR48 0x48
-#define CR49 0x49
-#define CR4A 0x4A
-#define CR4B 0x4B
-#define CR4C 0x4C
-#define CR4D 0x4D
-#define CR4E 0x4E
-#define CR4F 0x4F
-#define CR50 0x50
-#define CR51 0x51
-#define CR52 0x52
-#define CR53 0x53
-#define CR54 0x54
-#define CR55 0x55
-#define CR56 0x56
-#define CR57 0x57
-#define CR58 0x58
-#define CR59 0x59
-#define CR5A 0x5A
-#define CR5B 0x5B
-#define CR5C 0x5C
-#define CR5D 0x5D
-#define CR5E 0x5E
-#define CR5F 0x5F
-#define CR60 0x60
-#define CR61 0x61
-#define CR62 0x62
-#define CR63 0x63
-#define CR64 0x64
-#define CR65 0x65
-#define CR66 0x66
-#define CR67 0x67
-#define CR68 0x68
-#define CR69 0x69
-#define CR6A 0x6A
-#define CR6B 0x6B
-#define CR6C 0x6C
-#define CR6D 0x6D
-#define CR6E 0x6E
-#define CR6F 0x6F
-#define CR70 0x70
-#define CR71 0x71
-#define CR72 0x72
-#define CR73 0x73
-#define CR74 0x74
-#define CR75 0x75
-#define CR76 0x76
-#define CR77 0x77
-#define CR78 0x78
-#define CR79 0x79
-#define CR7A 0x7A
-#define CR7B 0x7B
-#define CR7C 0x7C
-#define CR7D 0x7D
-#define CR7E 0x7E
-#define CR7F 0x7F
-#define CR80 0x80
-#define CR81 0x81
-#define CR82 0x82
-#define CR83 0x83
-#define CR84 0x84
-#define CR85 0x85
-#define CR86 0x86
-#define CR87 0x87
-#define CR88 0x88
-#define CR89 0x89
-#define CR8A 0x8A
-#define CR8B 0x8B
-#define CR8C 0x8C
-#define CR8D 0x8D
-#define CR8E 0x8E
-#define CR8F 0x8F
-#define CR90 0x90
-#define CR91 0x91
-#define CR92 0x92
-#define CR93 0x93
-#define CR94 0x94
-#define CR95 0x95
-#define CR96 0x96
-#define CR97 0x97
-#define CR98 0x98
-#define CR99 0x99
-#define CR9A 0x9A
-#define CR9B 0x9B
-#define CR9C 0x9C
-#define CR9D 0x9D
-#define CR9E 0x9E
-#define CR9F 0x9F
-#define CRA0 0xA0
-#define CRA1 0xA1
-#define CRA2 0xA2
-#define CRA3 0xA3
-#define CRD2 0xD2
-#define CRD3 0xD3
-#define CRD4 0xD4
-
-/* LUT Table*/
-#define LUT_DATA 0x3C9 /* DACDATA */
-#define LUT_INDEX_READ 0x3C7 /* DACRX */
-#define LUT_INDEX_WRITE 0x3C8 /* DACWX */
-#define DACMASK 0x3C6
-
-/* Definition Device */
-#define DEVICE_CRT 0x01
-#define DEVICE_DVI 0x03
-#define DEVICE_LCD 0x04
-
-/* Device output interface */
-#define INTERFACE_NONE 0x00
-#define INTERFACE_ANALOG_RGB 0x01
-#define INTERFACE_DVP0 0x02
-#define INTERFACE_DVP1 0x03
-#define INTERFACE_DFP_HIGH 0x04
-#define INTERFACE_DFP_LOW 0x05
-#define INTERFACE_DFP 0x06
-#define INTERFACE_LVDS0 0x07
-#define INTERFACE_LVDS1 0x08
-#define INTERFACE_LVDS0LVDS1 0x09
-#define INTERFACE_TMDS 0x0A
-
-#define HW_LAYOUT_LCD_ONLY 0x01
-#define HW_LAYOUT_DVI_ONLY 0x02
-#define HW_LAYOUT_LCD_DVI 0x03
-#define HW_LAYOUT_LCD1_LCD2 0x04
-#define HW_LAYOUT_LCD_EXTERNAL_LCD2 0x10
-
-/* Definition Refresh Rate */
-#define REFRESH_50 50
-#define REFRESH_60 60
-#define REFRESH_75 75
-#define REFRESH_85 85
-#define REFRESH_100 100
-#define REFRESH_120 120
-
-/* Definition Sync Polarity*/
-#define NEGATIVE 1
-#define POSITIVE 0
-
-/*480x640@60 Sync Polarity (GTF)
-*/
-#define M480X640_R60_HSP NEGATIVE
-#define M480X640_R60_VSP POSITIVE
-
-/*640x480@60 Sync Polarity (VESA Mode)
-*/
-#define M640X480_R60_HSP NEGATIVE
-#define M640X480_R60_VSP NEGATIVE
-
-/*640x480@75 Sync Polarity (VESA Mode)
-*/
-#define M640X480_R75_HSP NEGATIVE
-#define M640X480_R75_VSP NEGATIVE
-
-/*640x480@85 Sync Polarity (VESA Mode)
-*/
-#define M640X480_R85_HSP NEGATIVE
-#define M640X480_R85_VSP NEGATIVE
-
-/*640x480@100 Sync Polarity (GTF Mode)
-*/
-#define M640X480_R100_HSP NEGATIVE
-#define M640X480_R100_VSP POSITIVE
-
-/*640x480@120 Sync Polarity (GTF Mode)
-*/
-#define M640X480_R120_HSP NEGATIVE
-#define M640X480_R120_VSP POSITIVE
-
-/*720x480@60 Sync Polarity (GTF Mode)
-*/
-#define M720X480_R60_HSP NEGATIVE
-#define M720X480_R60_VSP POSITIVE
-
-/*720x576@60 Sync Polarity (GTF Mode)
-*/
-#define M720X576_R60_HSP NEGATIVE
-#define M720X576_R60_VSP POSITIVE
-
-/*800x600@60 Sync Polarity (VESA Mode)
-*/
-#define M800X600_R60_HSP POSITIVE
-#define M800X600_R60_VSP POSITIVE
-
-/*800x600@75 Sync Polarity (VESA Mode)
-*/
-#define M800X600_R75_HSP POSITIVE
-#define M800X600_R75_VSP POSITIVE
-
-/*800x600@85 Sync Polarity (VESA Mode)
-*/
-#define M800X600_R85_HSP POSITIVE
-#define M800X600_R85_VSP POSITIVE
-
-/*800x600@100 Sync Polarity (GTF Mode)
-*/
-#define M800X600_R100_HSP NEGATIVE
-#define M800X600_R100_VSP POSITIVE
-
-/*800x600@120 Sync Polarity (GTF Mode)
-*/
-#define M800X600_R120_HSP NEGATIVE
-#define M800X600_R120_VSP POSITIVE
-
-/*800x480@60 Sync Polarity (CVT Mode)
-*/
-#define M800X480_R60_HSP NEGATIVE
-#define M800X480_R60_VSP POSITIVE
-
-/*848x480@60 Sync Polarity (CVT Mode)
-*/
-#define M848X480_R60_HSP NEGATIVE
-#define M848X480_R60_VSP POSITIVE
-
-/*852x480@60 Sync Polarity (GTF Mode)
-*/
-#define M852X480_R60_HSP NEGATIVE
-#define M852X480_R60_VSP POSITIVE
-
-/*1024x512@60 Sync Polarity (GTF Mode)
-*/
-#define M1024X512_R60_HSP NEGATIVE
-#define M1024X512_R60_VSP POSITIVE
-
-/*1024x600@60 Sync Polarity (GTF Mode)
-*/
-#define M1024X600_R60_HSP NEGATIVE
-#define M1024X600_R60_VSP POSITIVE
-
-/*1024x768@60 Sync Polarity (VESA Mode)
-*/
-#define M1024X768_R60_HSP NEGATIVE
-#define M1024X768_R60_VSP NEGATIVE
-
-/*1024x768@75 Sync Polarity (VESA Mode)
-*/
-#define M1024X768_R75_HSP POSITIVE
-#define M1024X768_R75_VSP POSITIVE
-
-/*1024x768@85 Sync Polarity (VESA Mode)
-*/
-#define M1024X768_R85_HSP POSITIVE
-#define M1024X768_R85_VSP POSITIVE
-
-/*1024x768@100 Sync Polarity (GTF Mode)
-*/
-#define M1024X768_R100_HSP NEGATIVE
-#define M1024X768_R100_VSP POSITIVE
-
-/*1152x864@75 Sync Polarity (VESA Mode)
-*/
-#define M1152X864_R75_HSP POSITIVE
-#define M1152X864_R75_VSP POSITIVE
-
-/*1280x720@60 Sync Polarity (GTF Mode)
-*/
-#define M1280X720_R60_HSP NEGATIVE
-#define M1280X720_R60_VSP POSITIVE
-
-/* 1280x768@50 Sync Polarity (GTF Mode) */
-#define M1280X768_R50_HSP NEGATIVE
-#define M1280X768_R50_VSP POSITIVE
-
-/*1280x768@60 Sync Polarity (GTF Mode)
-*/
-#define M1280X768_R60_HSP NEGATIVE
-#define M1280X768_R60_VSP POSITIVE
-
-/*1280x800@60 Sync Polarity (CVT Mode)
-*/
-#define M1280X800_R60_HSP NEGATIVE
-#define M1280X800_R60_VSP POSITIVE
-
-/*1280x960@60 Sync Polarity (VESA Mode)
-*/
-#define M1280X960_R60_HSP POSITIVE
-#define M1280X960_R60_VSP POSITIVE
-
-/*1280x1024@60 Sync Polarity (VESA Mode)
-*/
-#define M1280X1024_R60_HSP POSITIVE
-#define M1280X1024_R60_VSP POSITIVE
-
-/* 1360x768@60 Sync Polarity (CVT Mode) */
-#define M1360X768_R60_HSP POSITIVE
-#define M1360X768_R60_VSP POSITIVE
-
-/* 1360x768@60 Sync Polarity (CVT Reduce Blanking Mode) */
-#define M1360X768_RB_R60_HSP POSITIVE
-#define M1360X768_RB_R60_VSP NEGATIVE
-
-/* 1368x768@50 Sync Polarity (GTF Mode) */
-#define M1368X768_R50_HSP NEGATIVE
-#define M1368X768_R50_VSP POSITIVE
-
-/* 1368x768@60 Sync Polarity (VESA Mode) */
-#define M1368X768_R60_HSP NEGATIVE
-#define M1368X768_R60_VSP POSITIVE
-
-/*1280x1024@75 Sync Polarity (VESA Mode)
-*/
-#define M1280X1024_R75_HSP POSITIVE
-#define M1280X1024_R75_VSP POSITIVE
-
-/*1280x1024@85 Sync Polarity (VESA Mode)
-*/
-#define M1280X1024_R85_HSP POSITIVE
-#define M1280X1024_R85_VSP POSITIVE
-
-/*1440x1050@60 Sync Polarity (GTF Mode)
-*/
-#define M1440X1050_R60_HSP NEGATIVE
-#define M1440X1050_R60_VSP POSITIVE
-
-/*1600x1200@60 Sync Polarity (VESA Mode)
-*/
-#define M1600X1200_R60_HSP POSITIVE
-#define M1600X1200_R60_VSP POSITIVE
-
-/*1600x1200@75 Sync Polarity (VESA Mode)
-*/
-#define M1600X1200_R75_HSP POSITIVE
-#define M1600X1200_R75_VSP POSITIVE
-
-/* 1680x1050@60 Sync Polarity (CVT Mode) */
-#define M1680x1050_R60_HSP NEGATIVE
-#define M1680x1050_R60_VSP NEGATIVE
-
-/* 1680x1050@60 Sync Polarity (CVT Reduce Blanking Mode) */
-#define M1680x1050_RB_R60_HSP POSITIVE
-#define M1680x1050_RB_R60_VSP NEGATIVE
-
-/* 1680x1050@75 Sync Polarity (CVT Mode) */
-#define M1680x1050_R75_HSP NEGATIVE
-#define M1680x1050_R75_VSP POSITIVE
-
-/*1920x1080@60 Sync Polarity (CVT Mode)
-*/
-#define M1920X1080_R60_HSP NEGATIVE
-#define M1920X1080_R60_VSP POSITIVE
-
-/* 1920x1080@60 Sync Polarity (CVT Reduce Blanking Mode) */
-#define M1920X1080_RB_R60_HSP POSITIVE
-#define M1920X1080_RB_R60_VSP NEGATIVE
-
-/*1920x1440@60 Sync Polarity (VESA Mode)
-*/
-#define M1920X1440_R60_HSP NEGATIVE
-#define M1920X1440_R60_VSP POSITIVE
-
-/*1920x1440@75 Sync Polarity (VESA Mode)
-*/
-#define M1920X1440_R75_HSP NEGATIVE
-#define M1920X1440_R75_VSP POSITIVE
-
-#if 0
-/* 1400x1050@60 Sync Polarity (VESA Mode) */
-#define M1400X1050_R60_HSP NEGATIVE
-#define M1400X1050_R60_VSP NEGATIVE
-#endif
-
-/* 1400x1050@60 Sync Polarity (CVT Mode) */
-#define M1400X1050_R60_HSP NEGATIVE
-#define M1400X1050_R60_VSP POSITIVE
-
-/* 1400x1050@60 Sync Polarity (CVT Reduce Blanking Mode) */
-#define M1400X1050_RB_R60_HSP POSITIVE
-#define M1400X1050_RB_R60_VSP NEGATIVE
-
-/* 1400x1050@75 Sync Polarity (CVT Mode) */
-#define M1400X1050_R75_HSP NEGATIVE
-#define M1400X1050_R75_VSP POSITIVE
-
-/* 960x600@60 Sync Polarity (CVT Mode) */
-#define M960X600_R60_HSP NEGATIVE
-#define M960X600_R60_VSP POSITIVE
-
-/* 1000x600@60 Sync Polarity (GTF Mode) */
-#define M1000X600_R60_HSP NEGATIVE
-#define M1000X600_R60_VSP POSITIVE
-
-/* 1024x576@60 Sync Polarity (GTF Mode) */
-#define M1024X576_R60_HSP NEGATIVE
-#define M1024X576_R60_VSP POSITIVE
-
-/*1024x600@60 Sync Polarity (GTF Mode)*/
-#define M1024X600_R60_HSP NEGATIVE
-#define M1024X600_R60_VSP POSITIVE
-
-/* 1088x612@60 Sync Polarity (CVT Mode) */
-#define M1088X612_R60_HSP NEGATIVE
-#define M1088X612_R60_VSP POSITIVE
-
-/* 1152x720@60 Sync Polarity (CVT Mode) */
-#define M1152X720_R60_HSP NEGATIVE
-#define M1152X720_R60_VSP POSITIVE
-
-/* 1200x720@60 Sync Polarity (GTF Mode) */
-#define M1200X720_R60_HSP NEGATIVE
-#define M1200X720_R60_VSP POSITIVE
-
-/* 1280x600@60 Sync Polarity (GTF Mode) */
-#define M1280x600_R60_HSP NEGATIVE
-#define M1280x600_R60_VSP POSITIVE
-
-/* 1280x720@50 Sync Polarity (GTF Mode) */
-#define M1280X720_R50_HSP NEGATIVE
-#define M1280X720_R50_VSP POSITIVE
-
-/* 1280x720@60 Sync Polarity (CEA Mode) */
-#define M1280X720_CEA_R60_HSP POSITIVE
-#define M1280X720_CEA_R60_VSP POSITIVE
-
-/* 1440x900@60 Sync Polarity (CVT Mode) */
-#define M1440X900_R60_HSP NEGATIVE
-#define M1440X900_R60_VSP POSITIVE
-
-/* 1440x900@75 Sync Polarity (CVT Mode) */
-#define M1440X900_R75_HSP NEGATIVE
-#define M1440X900_R75_VSP POSITIVE
-
-/* 1440x900@60 Sync Polarity (CVT Reduce Blanking Mode) */
-#define M1440X900_RB_R60_HSP POSITIVE
-#define M1440X900_RB_R60_VSP NEGATIVE
-
-/* 1600x900@60 Sync Polarity (CVT Mode) */
-#define M1600X900_R60_HSP NEGATIVE
-#define M1600X900_R60_VSP POSITIVE
-
-/* 1600x900@60 Sync Polarity (CVT Reduce Blanking Mode) */
-#define M1600X900_RB_R60_HSP POSITIVE
-#define M1600X900_RB_R60_VSP NEGATIVE
-
-/* 1600x1024@60 Sync Polarity (GTF Mode) */
-#define M1600X1024_R60_HSP NEGATIVE
-#define M1600X1024_R60_VSP POSITIVE
-
-/* 1792x1344@60 Sync Polarity (DMT Mode) */
-#define M1792x1344_R60_HSP NEGATIVE
-#define M1792x1344_R60_VSP POSITIVE
-
-/* 1856x1392@60 Sync Polarity (DMT Mode) */
-#define M1856x1392_R60_HSP NEGATIVE
-#define M1856x1392_R60_VSP POSITIVE
-
-/* 1920x1200@60 Sync Polarity (CVT Mode) */
-#define M1920X1200_R60_HSP NEGATIVE
-#define M1920X1200_R60_VSP POSITIVE
-
-/* 1920x1200@60 Sync Polarity (CVT Reduce Blanking Mode) */
-#define M1920X1200_RB_R60_HSP POSITIVE
-#define M1920X1200_RB_R60_VSP NEGATIVE
-
-/* 1920x1080@60 Sync Polarity (CEA Mode) */
-#define M1920X1080_CEA_R60_HSP POSITIVE
-#define M1920X1080_CEA_R60_VSP POSITIVE
-
-/* 2048x1536@60 Sync Polarity (CVT Mode) */
-#define M2048x1536_R60_HSP NEGATIVE
-#define M2048x1536_R60_VSP POSITIVE
-
-/* define PLL index: */
-#define CLK_25_175M 25175000
-#define CLK_26_880M 26880000
-#define CLK_29_581M 29581000
-#define CLK_31_490M 31490000
-#define CLK_31_500M 31500000
-#define CLK_31_728M 31728000
-#define CLK_32_668M 32688000
-#define CLK_36_000M 36000000
-#define CLK_40_000M 40000000
-#define CLK_41_291M 41291000
-#define CLK_43_163M 43163000
-#define CLK_45_250M 45250000 /* 45.46MHz */
-#define CLK_46_000M 46000000
-#define CLK_46_996M 46996000
-#define CLK_48_000M 48000000
-#define CLK_48_875M 48875000
-#define CLK_49_500M 49500000
-#define CLK_52_406M 52406000
-#define CLK_52_977M 52977000
-#define CLK_56_250M 56250000
-#define CLK_60_466M 60466000
-#define CLK_61_500M 61500000
-#define CLK_65_000M 65000000
-#define CLK_65_178M 65178000
-#define CLK_66_750M 66750000 /* 67.116MHz */
-#define CLK_68_179M 68179000
-#define CLK_69_924M 69924000
-#define CLK_70_159M 70159000
-#define CLK_72_000M 72000000
-#define CLK_74_270M 74270000
-#define CLK_78_750M 78750000
-#define CLK_80_136M 80136000
-#define CLK_83_375M 83375000
-#define CLK_83_950M 83950000
-#define CLK_84_750M 84750000 /* 84.537Mhz */
-#define CLK_85_860M 85860000
-#define CLK_88_750M 88750000
-#define CLK_94_500M 94500000
-#define CLK_97_750M 97750000
-#define CLK_101_000M 101000000
-#define CLK_106_500M 106500000
-#define CLK_108_000M 108000000
-#define CLK_113_309M 113309000
-#define CLK_118_840M 118840000
-#define CLK_119_000M 119000000
-#define CLK_121_750M 121750000 /* 121.704MHz */
-#define CLK_125_104M 125104000
-#define CLK_133_308M 133308000
-#define CLK_135_000M 135000000
-#define CLK_136_700M 136700000
-#define CLK_138_400M 138400000
-#define CLK_146_760M 146760000
-#define CLK_148_500M 148500000
-
-#define CLK_153_920M 153920000
-#define CLK_156_000M 156000000
-#define CLK_157_500M 157500000
-#define CLK_162_000M 162000000
-#define CLK_187_000M 187000000
-#define CLK_193_295M 193295000
-#define CLK_202_500M 202500000
-#define CLK_204_000M 204000000
-#define CLK_218_500M 218500000
-#define CLK_234_000M 234000000
-#define CLK_267_250M 267250000
-#define CLK_297_500M 297500000
-#define CLK_74_481M 74481000
-#define CLK_172_798M 172798000
-#define CLK_122_614M 122614000
-
-/* CLE266 PLL value
-*/
-#define CLE266_PLL_25_175M 0x0000C763
-#define CLE266_PLL_26_880M 0x0000440F
-#define CLE266_PLL_29_581M 0x00008421
-#define CLE266_PLL_31_490M 0x00004721
-#define CLE266_PLL_31_500M 0x0000C3B5
-#define CLE266_PLL_31_728M 0x0000471F
-#define CLE266_PLL_32_668M 0x0000C449
-#define CLE266_PLL_36_000M 0x0000C5E5
-#define CLE266_PLL_40_000M 0x0000C459
-#define CLE266_PLL_41_291M 0x00004417
-#define CLE266_PLL_43_163M 0x0000C579
-#define CLE266_PLL_45_250M 0x0000C57F /* 45.46MHz */
-#define CLE266_PLL_46_000M 0x0000875A
-#define CLE266_PLL_46_996M 0x0000C4E9
-#define CLE266_PLL_48_000M 0x00001443
-#define CLE266_PLL_48_875M 0x00001D63
-#define CLE266_PLL_49_500M 0x00008653
-#define CLE266_PLL_52_406M 0x0000C475
-#define CLE266_PLL_52_977M 0x00004525
-#define CLE266_PLL_56_250M 0x000047B7
-#define CLE266_PLL_60_466M 0x0000494C
-#define CLE266_PLL_61_500M 0x00001456
-#define CLE266_PLL_65_000M 0x000086ED
-#define CLE266_PLL_65_178M 0x0000855B
-#define CLE266_PLL_66_750M 0x0000844B /* 67.116MHz */
-#define CLE266_PLL_68_179M 0x00000413
-#define CLE266_PLL_69_924M 0x00001153
-#define CLE266_PLL_70_159M 0x00001462
-#define CLE266_PLL_72_000M 0x00001879
-#define CLE266_PLL_74_270M 0x00004853
-#define CLE266_PLL_78_750M 0x00004321
-#define CLE266_PLL_80_136M 0x0000051C
-#define CLE266_PLL_83_375M 0x0000C25D
-#define CLE266_PLL_83_950M 0x00000729
-#define CLE266_PLL_84_750M 0x00008576 /* 84.537MHz */
-#define CLE266_PLL_85_860M 0x00004754
-#define CLE266_PLL_88_750M 0x0000051F
-#define CLE266_PLL_94_500M 0x00000521
-#define CLE266_PLL_97_750M 0x00004652
-#define CLE266_PLL_101_000M 0x0000497F
-#define CLE266_PLL_106_500M 0x00008477 /* 106.491463 MHz */
-#define CLE266_PLL_108_000M 0x00008479
-#define CLE266_PLL_113_309M 0x00000C5F
-#define CLE266_PLL_118_840M 0x00004553
-#define CLE266_PLL_119_000M 0x00000D6C
-#define CLE266_PLL_121_750M 0x00004555 /* 121.704MHz */
-#define CLE266_PLL_125_104M 0x000006B5
-#define CLE266_PLL_133_308M 0x0000465F
-#define CLE266_PLL_135_000M 0x0000455E
-#define CLE266_PLL_136_700M 0x00000C73
-#define CLE266_PLL_138_400M 0x00000957
-#define CLE266_PLL_146_760M 0x00004567
-#define CLE266_PLL_148_500M 0x00000853
-#define CLE266_PLL_153_920M 0x00000856
-#define CLE266_PLL_156_000M 0x0000456D
-#define CLE266_PLL_157_500M 0x000005B7
-#define CLE266_PLL_162_000M 0x00004571
-#define CLE266_PLL_187_000M 0x00000976
-#define CLE266_PLL_193_295M 0x0000086C
-#define CLE266_PLL_202_500M 0x00000763
-#define CLE266_PLL_204_000M 0x00000764
-#define CLE266_PLL_218_500M 0x0000065C
-#define CLE266_PLL_234_000M 0x00000662
-#define CLE266_PLL_267_250M 0x00000670
-#define CLE266_PLL_297_500M 0x000005E6
-#define CLE266_PLL_74_481M 0x0000051A
-#define CLE266_PLL_172_798M 0x00004579
-#define CLE266_PLL_122_614M 0x0000073C
-
-/* K800 PLL value
-*/
-#define K800_PLL_25_175M 0x00539001
-#define K800_PLL_26_880M 0x001C8C80
-#define K800_PLL_29_581M 0x00409080
-#define K800_PLL_31_490M 0x006F9001
-#define K800_PLL_31_500M 0x008B9002
-#define K800_PLL_31_728M 0x00AF9003
-#define K800_PLL_32_668M 0x00909002
-#define K800_PLL_36_000M 0x009F9002
-#define K800_PLL_40_000M 0x00578C02
-#define K800_PLL_41_291M 0x00438C01
-#define K800_PLL_43_163M 0x00778C03
-#define K800_PLL_45_250M 0x007D8C83 /* 45.46MHz */
-#define K800_PLL_46_000M 0x00658C02
-#define K800_PLL_46_996M 0x00818C83
-#define K800_PLL_48_000M 0x00848C83
-#define K800_PLL_48_875M 0x00508C81
-#define K800_PLL_49_500M 0x00518C01
-#define K800_PLL_52_406M 0x00738C02
-#define K800_PLL_52_977M 0x00928C83
-#define K800_PLL_56_250M 0x007C8C02
-#define K800_PLL_60_466M 0x00A78C83
-#define K800_PLL_61_500M 0x00AA8C83
-#define K800_PLL_65_000M 0x006B8C01
-#define K800_PLL_65_178M 0x00B48C83
-#define K800_PLL_66_750M 0x00948C82 /* 67.116MHz */
-#define K800_PLL_68_179M 0x00708C01
-#define K800_PLL_69_924M 0x00C18C83
-#define K800_PLL_70_159M 0x00C28C83
-#define K800_PLL_72_000M 0x009F8C82
-#define K800_PLL_74_270M 0x00ce0c03
-#define K800_PLL_78_750M 0x00408801
-#define K800_PLL_80_136M 0x00428801
-#define K800_PLL_83_375M 0x005B0882
-#define K800_PLL_83_950M 0x00738803
-#define K800_PLL_84_750M 0x00748883 /* 84.477MHz */
-#define K800_PLL_85_860M 0x00768883
-#define K800_PLL_88_750M 0x007A8883
-#define K800_PLL_94_500M 0x00828803
-#define K800_PLL_97_750M 0x00878883
-#define K800_PLL_101_000M 0x008B8883
-#define K800_PLL_106_500M 0x00758882 /* 106.491463 MHz */
-#define K800_PLL_108_000M 0x00778882
-#define K800_PLL_113_309M 0x005D8881
-#define K800_PLL_118_840M 0x00A48883
-#define K800_PLL_119_000M 0x00838882
-#define K800_PLL_121_750M 0x00A88883 /* 121.704MHz */
-#define K800_PLL_125_104M 0x00688801
-#define K800_PLL_133_308M 0x005D8801
-#define K800_PLL_135_000M 0x001A4081
-#define K800_PLL_136_700M 0x00BD8883
-#define K800_PLL_138_400M 0x00728881
-#define K800_PLL_146_760M 0x00CC8883
-#define K800_PLL_148_500M 0x00ce0803
-#define K800_PLL_153_920M 0x00548482
-#define K800_PLL_156_000M 0x006B8483
-#define K800_PLL_157_500M 0x00142080
-#define K800_PLL_162_000M 0x006F8483
-#define K800_PLL_187_000M 0x00818483
-#define K800_PLL_193_295M 0x004F8481
-#define K800_PLL_202_500M 0x00538481
-#define K800_PLL_204_000M 0x008D8483
-#define K800_PLL_218_500M 0x00978483
-#define K800_PLL_234_000M 0x00608401
-#define K800_PLL_267_250M 0x006E8481
-#define K800_PLL_297_500M 0x00A48402
-#define K800_PLL_74_481M 0x007B8C81
-#define K800_PLL_172_798M 0x00778483
-#define K800_PLL_122_614M 0x00878882
-
-/* PLL for VT3324 */
-#define CX700_25_175M 0x008B1003
-#define CX700_26_719M 0x00931003
-#define CX700_26_880M 0x00941003
-#define CX700_29_581M 0x00A49003
-#define CX700_31_490M 0x00AE1003
-#define CX700_31_500M 0x00AE1003
-#define CX700_31_728M 0x00AF1003
-#define CX700_32_668M 0x00B51003
-#define CX700_36_000M 0x00C81003
-#define CX700_40_000M 0x006E0C03
-#define CX700_41_291M 0x00710C03
-#define CX700_43_163M 0x00770C03
-#define CX700_45_250M 0x007D0C03 /* 45.46MHz */
-#define CX700_46_000M 0x007F0C03
-#define CX700_46_996M 0x00818C83
-#define CX700_48_000M 0x00840C03
-#define CX700_48_875M 0x00508C81
-#define CX700_49_500M 0x00880C03
-#define CX700_52_406M 0x00730C02
-#define CX700_52_977M 0x00920C03
-#define CX700_56_250M 0x009B0C03
-#define CX700_60_466M 0x00460C00
-#define CX700_61_500M 0x00AA0C03
-#define CX700_65_000M 0x006B0C01
-#define CX700_65_178M 0x006B0C01
-#define CX700_66_750M 0x00940C02 /*67.116MHz */
-#define CX700_68_179M 0x00BC0C03
-#define CX700_69_924M 0x00C10C03
-#define CX700_70_159M 0x00C20C03
-#define CX700_72_000M 0x009F0C02
-#define CX700_74_270M 0x00CE0C03
-#define CX700_74_481M 0x00CE0C03
-#define CX700_78_750M 0x006C0803
-#define CX700_80_136M 0x006E0803
-#define CX700_83_375M 0x005B0882
-#define CX700_83_950M 0x00730803
-#define CX700_84_750M 0x00740803 /* 84.537Mhz */
-#define CX700_85_860M 0x00760803
-#define CX700_88_750M 0x00AC8885
-#define CX700_94_500M 0x00820803
-#define CX700_97_750M 0x00870803
-#define CX700_101_000M 0x008B0803
-#define CX700_106_500M 0x00750802
-#define CX700_108_000M 0x00950803
-#define CX700_113_309M 0x005D0801
-#define CX700_118_840M 0x00A40803
-#define CX700_119_000M 0x00830802
-#define CX700_121_750M 0x00420800 /* 121.704MHz */
-#define CX700_125_104M 0x00AD0803
-#define CX700_133_308M 0x00930802
-#define CX700_135_000M 0x00950802
-#define CX700_136_700M 0x00BD0803
-#define CX700_138_400M 0x00720801
-#define CX700_146_760M 0x00CC0803
-#define CX700_148_500M 0x00a40802
-#define CX700_153_920M 0x00540402
-#define CX700_156_000M 0x006B0403
-#define CX700_157_500M 0x006C0403
-#define CX700_162_000M 0x006F0403
-#define CX700_172_798M 0x00770403
-#define CX700_187_000M 0x00810403
-#define CX700_193_295M 0x00850403
-#define CX700_202_500M 0x008C0403
-#define CX700_204_000M 0x008D0403
-#define CX700_218_500M 0x00970403
-#define CX700_234_000M 0x00600401
-#define CX700_267_250M 0x00B90403
-#define CX700_297_500M 0x00CE0403
-#define CX700_122_614M 0x00870802
-
-/* Definition CRTC Timing Index */
-#define H_TOTAL_INDEX 0
-#define H_ADDR_INDEX 1
-#define H_BLANK_START_INDEX 2
-#define H_BLANK_END_INDEX 3
-#define H_SYNC_START_INDEX 4
-#define H_SYNC_END_INDEX 5
-#define V_TOTAL_INDEX 6
-#define V_ADDR_INDEX 7
-#define V_BLANK_START_INDEX 8
-#define V_BLANK_END_INDEX 9
-#define V_SYNC_START_INDEX 10
-#define V_SYNC_END_INDEX 11
-#define H_TOTAL_SHADOW_INDEX 12
-#define H_BLANK_END_SHADOW_INDEX 13
-#define V_TOTAL_SHADOW_INDEX 14
-#define V_ADDR_SHADOW_INDEX 15
-#define V_BLANK_SATRT_SHADOW_INDEX 16
-#define V_BLANK_END_SHADOW_INDEX 17
-#define V_SYNC_SATRT_SHADOW_INDEX 18
-#define V_SYNC_END_SHADOW_INDEX 19
-
-/* Definition Video Mode Pixel Clock (picoseconds)
-*/
-#define RES_480X640_60HZ_PIXCLOCK 39722
-#define RES_640X480_60HZ_PIXCLOCK 39722
-#define RES_640X480_75HZ_PIXCLOCK 31747
-#define RES_640X480_85HZ_PIXCLOCK 27777
-#define RES_640X480_100HZ_PIXCLOCK 23168
-#define RES_640X480_120HZ_PIXCLOCK 19081
-#define RES_720X480_60HZ_PIXCLOCK 37020
-#define RES_720X576_60HZ_PIXCLOCK 30611
-#define RES_800X600_60HZ_PIXCLOCK 25000
-#define RES_800X600_75HZ_PIXCLOCK 20203
-#define RES_800X600_85HZ_PIXCLOCK 17777
-#define RES_800X600_100HZ_PIXCLOCK 14667
-#define RES_800X600_120HZ_PIXCLOCK 11912
-#define RES_800X480_60HZ_PIXCLOCK 33805
-#define RES_848X480_60HZ_PIXCLOCK 31756
-#define RES_856X480_60HZ_PIXCLOCK 31518
-#define RES_1024X512_60HZ_PIXCLOCK 24218
-#define RES_1024X600_60HZ_PIXCLOCK 20460
-#define RES_1024X768_60HZ_PIXCLOCK 15385
-#define RES_1024X768_75HZ_PIXCLOCK 12699
-#define RES_1024X768_85HZ_PIXCLOCK 10582
-#define RES_1024X768_100HZ_PIXCLOCK 8825
-#define RES_1152X864_75HZ_PIXCLOCK 9259
-#define RES_1280X768_60HZ_PIXCLOCK 12480
-#define RES_1280X800_60HZ_PIXCLOCK 11994
-#define RES_1280X960_60HZ_PIXCLOCK 9259
-#define RES_1280X1024_60HZ_PIXCLOCK 9260
-#define RES_1280X1024_75HZ_PIXCLOCK 7408
-#define RES_1280X768_85HZ_PIXCLOCK 6349
-#define RES_1440X1050_60HZ_PIXCLOCK 7993
-#define RES_1600X1200_60HZ_PIXCLOCK 6172
-#define RES_1600X1200_75HZ_PIXCLOCK 4938
-#define RES_1280X720_60HZ_PIXCLOCK 13426
-#define RES_1920X1080_60HZ_PIXCLOCK 5787
-#define RES_1400X1050_60HZ_PIXCLOCK 8214
-#define RES_1400X1050_75HZ_PIXCLOCK 6410
-#define RES_1368X768_60HZ_PIXCLOCK 11647
-#define RES_960X600_60HZ_PIXCLOCK 22099
-#define RES_1000X600_60HZ_PIXCLOCK 20834
-#define RES_1024X576_60HZ_PIXCLOCK 21278
-#define RES_1088X612_60HZ_PIXCLOCK 18877
-#define RES_1152X720_60HZ_PIXCLOCK 14981
-#define RES_1200X720_60HZ_PIXCLOCK 14253
-#define RES_1280X600_60HZ_PIXCLOCK 16260
-#define RES_1280X720_50HZ_PIXCLOCK 16538
-#define RES_1280X768_50HZ_PIXCLOCK 15342
-#define RES_1366X768_50HZ_PIXCLOCK 14301
-#define RES_1366X768_60HZ_PIXCLOCK 11646
-#define RES_1360X768_60HZ_PIXCLOCK 11799
-#define RES_1440X900_60HZ_PIXCLOCK 9390
-#define RES_1440X900_75HZ_PIXCLOCK 7315
-#define RES_1600X900_60HZ_PIXCLOCK 8415
-#define RES_1600X1024_60HZ_PIXCLOCK 7315
-#define RES_1680X1050_60HZ_PIXCLOCK 6814
-#define RES_1680X1050_75HZ_PIXCLOCK 5348
-#define RES_1792X1344_60HZ_PIXCLOCK 4902
-#define RES_1856X1392_60HZ_PIXCLOCK 4577
-#define RES_1920X1200_60HZ_PIXCLOCK 5173
-#define RES_1920X1440_60HZ_PIXCLOCK 4274
-#define RES_1920X1440_75HZ_PIXCLOCK 3367
-#define RES_2048X1536_60HZ_PIXCLOCK 3742
-
-#define RES_1360X768_RB_60HZ_PIXCLOCK 13889
-#define RES_1400X1050_RB_60HZ_PIXCLOCK 9901
-#define RES_1440X900_RB_60HZ_PIXCLOCK 11268
-#define RES_1600X900_RB_60HZ_PIXCLOCK 10230
-#define RES_1680X1050_RB_60HZ_PIXCLOCK 8403
-#define RES_1920X1080_RB_60HZ_PIXCLOCK 7225
-#define RES_1920X1200_RB_60HZ_PIXCLOCK 6497
-
-/* LCD display method
-*/
-#define LCD_EXPANDSION 0x00
-#define LCD_CENTERING 0x01
-
-/* LCD mode
-*/
-#define LCD_OPENLDI 0x00
-#define LCD_SPWG 0x01
-
-/* Define display timing
-*/
-struct display_timing {
- u16 hor_total;
- u16 hor_addr;
- u16 hor_blank_start;
- u16 hor_blank_end;
- u16 hor_sync_start;
- u16 hor_sync_end;
- u16 ver_total;
- u16 ver_addr;
- u16 ver_blank_start;
- u16 ver_blank_end;
- u16 ver_sync_start;
- u16 ver_sync_end;
-};
-
-struct crt_mode_table {
- int refresh_rate;
- unsigned long clk;
- int h_sync_polarity;
- int v_sync_polarity;
- struct display_timing crtc;
-};
-
-struct io_reg {
- int port;
- u8 index;
- u8 mask;
- u8 value;
-};
-
-#endif /* __SHARE_H__ */
diff --git a/drivers/video/via/tbl1636.c b/drivers/video/via/tbl1636.c
deleted file mode 100644
index 2d8453429d4..00000000000
--- a/drivers/video/via/tbl1636.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-struct IODATA COMMON_INIT_TBL_VT1636[] = {
-/* Index, Mask, Value */
- /* Set panel power sequence timing */
- {0x10, 0xC0, 0x00},
- /* T1: VDD on - Data on. Each increment is 1 ms. (50ms = 031h) */
- {0x0B, 0xFF, 0x40},
- /* T2: Data on - Backlight on. Each increment is 2 ms. (210ms = 068h) */
- {0x0C, 0xFF, 0x31},
- /* T3: Backlight off -Data off. Each increment is 2 ms. (210ms = 068h)*/
- {0x0D, 0xFF, 0x31},
- /* T4: Data off - VDD off. Each increment is 1 ms. (50ms = 031h) */
- {0x0E, 0xFF, 0x68},
- /* T5: VDD off - VDD on. Each increment is 100 ms. (500ms = 04h) */
- {0x0F, 0xFF, 0x68},
- /* LVDS output power up */
- {0x09, 0xA0, 0xA0},
- /* turn on back light */
- {0x10, 0x33, 0x13}
-};
-
-struct IODATA DUAL_CHANNEL_ENABLE_TBL_VT1636[] = {
-/* Index, Mask, Value */
- {0x08, 0xF0, 0xE0} /* Input Data Mode Select */
-};
-
-struct IODATA SINGLE_CHANNEL_ENABLE_TBL_VT1636[] = {
-/* Index, Mask, Value */
- {0x08, 0xF0, 0x00} /* Input Data Mode Select */
-};
-
-struct IODATA DITHERING_ENABLE_TBL_VT1636[] = {
-/* Index, Mask, Value */
- {0x0A, 0x70, 0x50}
-};
-
-struct IODATA DITHERING_DISABLE_TBL_VT1636[] = {
-/* Index, Mask, Value */
- {0x0A, 0x70, 0x00}
-};
-
-struct IODATA VDD_ON_TBL_VT1636[] = {
-/* Index, Mask, Value */
- {0x10, 0x20, 0x20}
-};
-
-struct IODATA VDD_OFF_TBL_VT1636[] = {
-/* Index, Mask, Value */
- {0x10, 0x20, 0x00}
-};
diff --git a/drivers/video/via/tbl1636.h b/drivers/video/via/tbl1636.h
deleted file mode 100644
index d906055f151..00000000000
--- a/drivers/video/via/tbl1636.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef _TBL1636_H_
-#define _TBL1636_H_
-#include "hw.h"
-
-extern struct IODATA COMMON_INIT_TBL_VT1636[8];
-extern struct IODATA DUAL_CHANNEL_ENABLE_TBL_VT1636[1];
-extern struct IODATA SINGLE_CHANNEL_ENABLE_TBL_VT1636[1];
-extern struct IODATA DITHERING_ENABLE_TBL_VT1636[1];
-extern struct IODATA DITHERING_DISABLE_TBL_VT1636[1];
-extern struct IODATA VDD_ON_TBL_VT1636[1];
-extern struct IODATA VDD_OFF_TBL_VT1636[1];
-
-#endif /* _VIA_TBL1636_H_ */
diff --git a/drivers/video/via/tblDPASetting.c b/drivers/video/via/tblDPASetting.c
deleted file mode 100644
index 0c4c8cc712f..00000000000
--- a/drivers/video/via/tblDPASetting.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-/* For VT3324: */
-struct VT1636_DPA_SETTING VT1636_DPA_SETTING_TBL_VT3324[] = {
- /* Panel ID, CLK_SEL_ST1[09], CLK_SEL_ST2[08] */
- {LCD_PANEL_ID0_640X480, 0x00, 0x00}, /* For 640x480 */
- {LCD_PANEL_ID1_800X600, 0x00, 0x00}, /* For 800x600 */
- {LCD_PANEL_ID2_1024X768, 0x00, 0x00}, /* For 1024x768 */
- {LCD_PANEL_ID3_1280X768, 0x00, 0x00}, /* For 1280x768 */
- {LCD_PANEL_ID4_1280X1024, 0x00, 0x00}, /* For 1280x1024 */
- {LCD_PANEL_ID5_1400X1050, 0x00, 0x00}, /* For 1400x1050 */
- {LCD_PANEL_ID6_1600X1200, 0x0B, 0x03} /* For 1600x1200 */
-};
-
-struct GFX_DPA_SETTING GFX_DPA_SETTING_TBL_VT3324[] = {
-/* ClkRange, DVP0, DVP0DataDriving, DVP0ClockDriving, DVP1,
- DVP1Driving, DFPHigh, DFPLow */
-/* CR96, SR2A[5], SR1B[1], SR2A[4], SR1E[2], CR9B,
- SR65, CR97, CR99 */
- /* LCK/VCK < 30000000 will use this value */
- {DPA_CLK_RANGE_30M, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
- 0x00},
- /* 30000000 < LCK/VCK < 50000000 will use this value */
- {DPA_CLK_RANGE_30_50M, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
- 0x00},
- /* 50000000 < LCK/VCK < 70000000 will use this value */
- {DPA_CLK_RANGE_50_70M, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00},
- /* 70000000 < LCK/VCK < 100000000 will use this value */
- {DPA_CLK_RANGE_70_100M, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00},
- /* 100000000 < LCK/VCK < 15000000 will use this value */
- {DPA_CLK_RANGE_100_150M, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00},
- /* 15000000 < LCK/VCK will use this value */
- {DPA_CLK_RANGE_150M, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0E, 0x00,
- 0x00},
-};
-
-/* For VT3327: */
-struct VT1636_DPA_SETTING VT1636_DPA_SETTING_TBL_VT3327[] = {
- /* Panel ID, CLK_SEL_ST1[09], CLK_SEL_ST2[08] */
- {LCD_PANEL_ID0_640X480, 0x00, 0x00}, /* For 640x480 */
- {LCD_PANEL_ID1_800X600, 0x00, 0x00}, /* For 800x600 */
- {LCD_PANEL_ID2_1024X768, 0x00, 0x00}, /* For 1024x768 */
- {LCD_PANEL_ID3_1280X768, 0x00, 0x00}, /* For 1280x768 */
- {LCD_PANEL_ID4_1280X1024, 0x00, 0x00}, /* For 1280x1024 */
- {LCD_PANEL_ID5_1400X1050, 0x00, 0x00}, /* For 1400x1050 */
- {LCD_PANEL_ID6_1600X1200, 0x00, 0x00} /* For 1600x1200 */
-};
-
-struct GFX_DPA_SETTING GFX_DPA_SETTING_TBL_VT3327[] = {
-/* ClkRange,DVP0, DVP0DataDriving, DVP0ClockDriving, DVP1,
- DVP1Driving, DFPHigh, DFPLow */
-/* CR96, SR2A[5], SR1B[1], SR2A[4], SR1E[2], CR9B,
- SR65, CR97, CR99 */
-/* LCK/VCK < 30000000 will use this value */
-{DPA_CLK_RANGE_30M, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x01},
-/* 30000000 < LCK/VCK < 50000000 will use this value */
-{DPA_CLK_RANGE_30_50M, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x01},
-/* 50000000 < LCK/VCK < 70000000 will use this value */
-{DPA_CLK_RANGE_50_70M, 0x06, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x01},
-/* 70000000 < LCK/VCK < 100000000 will use this value */
-{DPA_CLK_RANGE_70_100M, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x03},
-/* 100000000 < LCK/VCK < 15000000 will use this value */
-{DPA_CLK_RANGE_100_150M, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x02},
-/* 15000000 < LCK/VCK will use this value */
-{DPA_CLK_RANGE_150M, 0x00, 0x20, 0x00, 0x10, 0x00, 0x03, 0x00, 0x0D, 0x03},
-};
-
-/* For VT3364: */
-struct GFX_DPA_SETTING GFX_DPA_SETTING_TBL_VT3364[] = {
-/* ClkRange,DVP0, DVP0DataDriving, DVP0ClockDriving, DVP1,
- DVP1Driving, DFPHigh, DFPLow */
-/* CR96, SR2A[5], SR1B[1], SR2A[4], SR1E[2], CR9B,
- SR65, CR97, CR99 */
-/* LCK/VCK < 30000000 will use this value */
-{DPA_CLK_RANGE_30M, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08},
-/* 30000000 < LCK/VCK < 50000000 will use this value */
-{DPA_CLK_RANGE_30_50M, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08},
-/* 50000000 < LCK/VCK < 70000000 will use this value */
-{DPA_CLK_RANGE_50_70M, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08},
-/* 70000000 < LCK/VCK < 100000000 will use this value */
-{DPA_CLK_RANGE_70_100M, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08},
-/* 100000000 < LCK/VCK < 15000000 will use this value */
-{DPA_CLK_RANGE_100_150M, 0x03, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08},
-/* 15000000 < LCK/VCK will use this value */
-{DPA_CLK_RANGE_150M, 0x01, 0x00, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x08},
-};
diff --git a/drivers/video/via/tblDPASetting.h b/drivers/video/via/tblDPASetting.h
deleted file mode 100644
index b065a83481d..00000000000
--- a/drivers/video/via/tblDPASetting.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef _TBLDPASETTING_H_
-#define _TBLDPASETTING_H_
-#include "global.h"
-
-#define DPA_CLK_30M 30000000
-#define DPA_CLK_50M 50000000
-#define DPA_CLK_70M 70000000
-#define DPA_CLK_100M 100000000
-#define DPA_CLK_150M 150000000
-
-enum DPA_RANGE {
- DPA_CLK_RANGE_30M,
- DPA_CLK_RANGE_30_50M,
- DPA_CLK_RANGE_50_70M,
- DPA_CLK_RANGE_70_100M,
- DPA_CLK_RANGE_100_150M,
- DPA_CLK_RANGE_150M
-};
-
-extern struct VT1636_DPA_SETTING VT1636_DPA_SETTING_TBL_VT3324[7];
-extern struct GFX_DPA_SETTING GFX_DPA_SETTING_TBL_VT3324[6];
-extern struct VT1636_DPA_SETTING VT1636_DPA_SETTING_TBL_VT3327[7];
-extern struct GFX_DPA_SETTING GFX_DPA_SETTING_TBL_VT3327[];
-extern struct GFX_DPA_SETTING GFX_DPA_SETTING_TBL_VT3364[6];
-
-#endif
diff --git a/drivers/video/via/via_i2c.c b/drivers/video/via/via_i2c.c
deleted file mode 100644
index 0f3ed4eb236..00000000000
--- a/drivers/video/via/via_i2c.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-
-static void via_i2c_setscl(void *data, int state)
-{
- u8 val;
- struct via_i2c_stuff *via_i2c_chan = (struct via_i2c_stuff *)data;
-
- val = viafb_read_reg(VIASR, via_i2c_chan->i2c_port) & 0xF0;
- if (state)
- val |= 0x20;
- else
- val &= ~0x20;
- switch (via_i2c_chan->i2c_port) {
- case I2CPORTINDEX:
- val |= 0x01;
- break;
- case GPIOPORTINDEX:
- val |= 0x80;
- break;
- default:
- DEBUG_MSG("via_i2c: specify wrong i2c port.\n");
- }
- viafb_write_reg(via_i2c_chan->i2c_port, VIASR, val);
-}
-
-static int via_i2c_getscl(void *data)
-{
- struct via_i2c_stuff *via_i2c_chan = (struct via_i2c_stuff *)data;
-
- if (viafb_read_reg(VIASR, via_i2c_chan->i2c_port) & 0x08)
- return 1;
- return 0;
-}
-
-static int via_i2c_getsda(void *data)
-{
- struct via_i2c_stuff *via_i2c_chan = (struct via_i2c_stuff *)data;
-
- if (viafb_read_reg(VIASR, via_i2c_chan->i2c_port) & 0x04)
- return 1;
- return 0;
-}
-
-static void via_i2c_setsda(void *data, int state)
-{
- u8 val;
- struct via_i2c_stuff *via_i2c_chan = (struct via_i2c_stuff *)data;
-
- val = viafb_read_reg(VIASR, via_i2c_chan->i2c_port) & 0xF0;
- if (state)
- val |= 0x10;
- else
- val &= ~0x10;
- switch (via_i2c_chan->i2c_port) {
- case I2CPORTINDEX:
- val |= 0x01;
- break;
- case GPIOPORTINDEX:
- val |= 0x40;
- break;
- default:
- DEBUG_MSG("via_i2c: specify wrong i2c port.\n");
- }
- viafb_write_reg(via_i2c_chan->i2c_port, VIASR, val);
-}
-
-int viafb_i2c_readbyte(u8 slave_addr, u8 index, u8 *pdata)
-{
- u8 mm1[] = {0x00};
- struct i2c_msg msgs[2];
-
- *pdata = 0;
- msgs[0].flags = 0;
- msgs[1].flags = I2C_M_RD;
- msgs[0].addr = msgs[1].addr = slave_addr / 2;
- mm1[0] = index;
- msgs[0].len = 1; msgs[1].len = 1;
- msgs[0].buf = mm1; msgs[1].buf = pdata;
- i2c_transfer(&viaparinfo->i2c_stuff.adapter, msgs, 2);
-
- return 0;
-}
-
-int viafb_i2c_writebyte(u8 slave_addr, u8 index, u8 data)
-{
- u8 msg[2] = { index, data };
- struct i2c_msg msgs;
-
- msgs.flags = 0;
- msgs.addr = slave_addr / 2;
- msgs.len = 2;
- msgs.buf = msg;
- return i2c_transfer(&viaparinfo->i2c_stuff.adapter, &msgs, 1);
-}
-
-int viafb_i2c_readbytes(u8 slave_addr, u8 index, u8 *buff, int buff_len)
-{
- u8 mm1[] = {0x00};
- struct i2c_msg msgs[2];
-
- msgs[0].flags = 0;
- msgs[1].flags = I2C_M_RD;
- msgs[0].addr = msgs[1].addr = slave_addr / 2;
- mm1[0] = index;
- msgs[0].len = 1; msgs[1].len = buff_len;
- msgs[0].buf = mm1; msgs[1].buf = buff;
- i2c_transfer(&viaparinfo->i2c_stuff.adapter, msgs, 2);
- return 0;
-}
-
-int viafb_create_i2c_bus(void *viapar)
-{
- int ret;
- struct viafb_par *par = (struct viafb_par *)viapar;
-
- strcpy(par->i2c_stuff.adapter.name, "via_i2c");
- par->i2c_stuff.i2c_port = 0x0;
- par->i2c_stuff.adapter.owner = THIS_MODULE;
- par->i2c_stuff.adapter.id = 0x01FFFF;
- par->i2c_stuff.adapter.class = 0;
- par->i2c_stuff.adapter.algo_data = &par->i2c_stuff.algo;
- par->i2c_stuff.adapter.dev.parent = NULL;
- par->i2c_stuff.algo.setsda = via_i2c_setsda;
- par->i2c_stuff.algo.setscl = via_i2c_setscl;
- par->i2c_stuff.algo.getsda = via_i2c_getsda;
- par->i2c_stuff.algo.getscl = via_i2c_getscl;
- par->i2c_stuff.algo.udelay = 40;
- par->i2c_stuff.algo.timeout = 20;
- par->i2c_stuff.algo.data = &par->i2c_stuff;
-
- i2c_set_adapdata(&par->i2c_stuff.adapter, &par->i2c_stuff);
-
- /* Raise SCL and SDA */
- par->i2c_stuff.i2c_port = I2CPORTINDEX;
- via_i2c_setsda(&par->i2c_stuff, 1);
- via_i2c_setscl(&par->i2c_stuff, 1);
-
- par->i2c_stuff.i2c_port = GPIOPORTINDEX;
- via_i2c_setsda(&par->i2c_stuff, 1);
- via_i2c_setscl(&par->i2c_stuff, 1);
- udelay(20);
-
- ret = i2c_bit_add_bus(&par->i2c_stuff.adapter);
- if (ret == 0)
- DEBUG_MSG("I2C bus %s registered.\n",
- par->i2c_stuff.adapter.name);
- else
- DEBUG_MSG("Failed to register I2C bus %s.\n",
- par->i2c_stuff.adapter.name);
- return ret;
-}
-
-void viafb_delete_i2c_buss(void *par)
-{
- i2c_del_adapter(&((struct viafb_par *)par)->i2c_stuff.adapter);
-}
diff --git a/drivers/video/via/via_i2c.h b/drivers/video/via/via_i2c.h
deleted file mode 100644
index 3a13242a315..00000000000
--- a/drivers/video/via/via_i2c.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#ifndef __VIA_I2C_H__
-#define __VIA_I2C_H__
-
-#include <linux/i2c.h>
-#include <linux/i2c-algo-bit.h>
-
-struct via_i2c_stuff {
- u16 i2c_port; /* GPIO or I2C port */
- struct i2c_adapter adapter;
- struct i2c_algo_bit_data algo;
-};
-
-#define I2CPORT 0x3c4
-#define I2CPORTINDEX 0x31
-#define GPIOPORT 0x3C4
-#define GPIOPORTINDEX 0x2C
-#define I2C_BUS 1
-#define GPIO_BUS 2
-#define DELAYPORT 0x3C3
-
-int viafb_i2c_readbyte(u8 slave_addr, u8 index, u8 *pdata);
-int viafb_i2c_writebyte(u8 slave_addr, u8 index, u8 data);
-int viafb_i2c_readbytes(u8 slave_addr, u8 index, u8 *buff, int buff_len);
-int viafb_create_i2c_bus(void *par);
-void viafb_delete_i2c_buss(void *par);
-#endif /* __VIA_I2C_H__ */
diff --git a/drivers/video/via/via_utility.c b/drivers/video/via/via_utility.c
deleted file mode 100644
index d53c3d54ed8..00000000000
--- a/drivers/video/via/via_utility.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-
-void viafb_get_device_support_state(u32 *support_state)
-{
- *support_state = CRT_Device;
-
- if (viaparinfo->chip_info->tmds_chip_info.tmds_chip_name == VT1632_TMDS)
- *support_state |= DVI_Device;
-
- if (viaparinfo->chip_info->lvds_chip_info.lvds_chip_name == VT1631_LVDS)
- *support_state |= LCD_Device;
-}
-
-void viafb_get_device_connect_state(u32 *connect_state)
-{
- bool mobile = false;
-
- *connect_state = CRT_Device;
-
- if (viafb_dvi_sense())
- *connect_state |= DVI_Device;
-
- viafb_lcd_get_mobile_state(&mobile);
- if (mobile)
- *connect_state |= LCD_Device;
-}
-
-bool viafb_lcd_get_support_expand_state(u32 xres, u32 yres)
-{
- unsigned int support_state = 0;
-
- switch (viafb_lcd_panel_id) {
- case LCD_PANEL_ID0_640X480:
- if ((xres < 640) && (yres < 480))
- support_state = true;
- break;
-
- case LCD_PANEL_ID1_800X600:
- if ((xres < 800) && (yres < 600))
- support_state = true;
- break;
-
- case LCD_PANEL_ID2_1024X768:
- if ((xres < 1024) && (yres < 768))
- support_state = true;
- break;
-
- case LCD_PANEL_ID3_1280X768:
- if ((xres < 1280) && (yres < 768))
- support_state = true;
- break;
-
- case LCD_PANEL_ID4_1280X1024:
- if ((xres < 1280) && (yres < 1024))
- support_state = true;
- break;
-
- case LCD_PANEL_ID5_1400X1050:
- if ((xres < 1400) && (yres < 1050))
- support_state = true;
- break;
-
- case LCD_PANEL_ID6_1600X1200:
- if ((xres < 1600) && (yres < 1200))
- support_state = true;
- break;
-
- case LCD_PANEL_ID7_1366X768:
- if ((xres < 1366) && (yres < 768))
- support_state = true;
- break;
-
- case LCD_PANEL_ID8_1024X600:
- if ((xres < 1024) && (yres < 600))
- support_state = true;
- break;
-
- case LCD_PANEL_ID9_1280X800:
- if ((xres < 1280) && (yres < 800))
- support_state = true;
- break;
-
- case LCD_PANEL_IDA_800X480:
- if ((xres < 800) && (yres < 480))
- support_state = true;
- break;
-
- case LCD_PANEL_IDB_1360X768:
- if ((xres < 1360) && (yres < 768))
- support_state = true;
- break;
-
- case LCD_PANEL_IDC_480X640:
- if ((xres < 480) && (yres < 640))
- support_state = true;
- break;
-
- default:
- support_state = false;
- break;
- }
-
- return support_state;
-}
-
-/*====================================================================*/
-/* Gamma Function Implementation*/
-/*====================================================================*/
-
-void viafb_set_gamma_table(int bpp, unsigned int *gamma_table)
-{
- int i, sr1a;
- int active_device_amount = 0;
- int device_status = viafb_DeviceStatus;
-
- for (i = 0; i < sizeof(viafb_DeviceStatus) * 8; i++) {
- if (device_status & 1)
- active_device_amount++;
- device_status >>= 1;
- }
-
- /* 8 bpp mode can't adjust gamma */
- if (bpp == 8)
- return ;
-
- /* Enable Gamma */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- case UNICHROME_K400:
- viafb_write_reg_mask(SR16, VIASR, 0x80, BIT7);
- break;
-
- case UNICHROME_K800:
- case UNICHROME_PM800:
- case UNICHROME_CN700:
- case UNICHROME_CX700:
- case UNICHROME_K8M890:
- case UNICHROME_P4M890:
- case UNICHROME_P4M900:
- viafb_write_reg_mask(CR33, VIACR, 0x80, BIT7);
- break;
- }
- sr1a = (unsigned int)viafb_read_reg(VIASR, SR1A);
- viafb_write_reg_mask(SR1A, VIASR, 0x0, BIT0);
-
- /* Fill IGA1 Gamma Table */
- outb(0, LUT_INDEX_WRITE);
- for (i = 0; i < 256; i++) {
- outb(gamma_table[i] >> 16, LUT_DATA);
- outb(gamma_table[i] >> 8 & 0xFF, LUT_DATA);
- outb(gamma_table[i] & 0xFF, LUT_DATA);
- }
-
- /* If adjust Gamma value in SAMM, fill IGA1,
- IGA2 Gamma table simultanous. */
- /* Switch to IGA2 Gamma Table */
- if ((active_device_amount > 1) &&
- !((viaparinfo->chip_info->gfx_chip_name ==
- UNICHROME_CLE266) &&
- (viaparinfo->chip_info->gfx_chip_revision < 15))) {
- viafb_write_reg_mask(SR1A, VIASR, 0x01, BIT0);
- viafb_write_reg_mask(CR6A, VIACR, 0x02, BIT1);
-
- /* Fill IGA2 Gamma Table */
- outb(0, LUT_INDEX_WRITE);
- for (i = 0; i < 256; i++) {
- outb(gamma_table[i] >> 16, LUT_DATA);
- outb(gamma_table[i] >> 8 & 0xFF, LUT_DATA);
- outb(gamma_table[i] & 0xFF, LUT_DATA);
- }
- }
- viafb_write_reg(SR1A, VIASR, sr1a);
-}
-
-void viafb_get_gamma_table(unsigned int *gamma_table)
-{
- unsigned char color_r, color_g, color_b;
- unsigned char sr1a = 0;
- int i;
-
- /* Enable Gamma */
- switch (viaparinfo->chip_info->gfx_chip_name) {
- case UNICHROME_CLE266:
- case UNICHROME_K400:
- viafb_write_reg_mask(SR16, VIASR, 0x80, BIT7);
- break;
-
- case UNICHROME_K800:
- case UNICHROME_PM800:
- case UNICHROME_CN700:
- case UNICHROME_CX700:
- case UNICHROME_K8M890:
- case UNICHROME_P4M890:
- case UNICHROME_P4M900:
- viafb_write_reg_mask(CR33, VIACR, 0x80, BIT7);
- break;
- }
- sr1a = viafb_read_reg(VIASR, SR1A);
- viafb_write_reg_mask(SR1A, VIASR, 0x0, BIT0);
-
- /* Reading gamma table to get color value */
- outb(0, LUT_INDEX_READ);
- for (i = 0; i < 256; i++) {
- color_r = inb(LUT_DATA);
- color_g = inb(LUT_DATA);
- color_b = inb(LUT_DATA);
- gamma_table[i] =
- ((((u32) color_r) << 16) |
- (((u16) color_g) << 8)) | color_b;
- }
- viafb_write_reg(SR1A, VIASR, sr1a);
-}
-
-void viafb_get_gamma_support_state(int bpp, unsigned int *support_state)
-{
- if (bpp == 8)
- *support_state = None_Device;
- else
- *support_state = CRT_Device | DVI_Device | LCD_Device;
-}
-
-int viafb_input_parameter_converter(int parameter_value)
-{
- int result;
-
- if (parameter_value >= 1 && parameter_value <= 9)
- result = 1 << (parameter_value - 1);
- else
- result = 1;
-
- return result;
-}
diff --git a/drivers/video/via/via_utility.h b/drivers/video/via/via_utility.h
deleted file mode 100644
index 2fd455202eb..00000000000
--- a/drivers/video/via/via_utility.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#ifndef __VIAUTILITY_H__
-#define __VIAUTILITY_H__
-
-/* These functions are used to get infomation about device's state */
-void viafb_get_device_support_state(u32 *support_state);
-void viafb_get_device_connect_state(u32 *connect_state);
-bool viafb_lcd_get_support_expand_state(u32 xres, u32 yres);
-
-/* These function are used to access gamma table */
-void viafb_set_gamma_table(int bpp, unsigned int *gamma_table);
-void viafb_get_gamma_table(unsigned int *gamma_table);
-void viafb_get_gamma_support_state(int bpp, unsigned int *support_state);
-int viafb_input_parameter_converter(int parameter_value);
-
-#endif /* __VIAUTILITY_H__ */
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
deleted file mode 100644
index 37b433a08ce..00000000000
--- a/drivers/video/via/viafbdev.c
+++ /dev/null
@@ -1,2588 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <linux/module.h>
-#define _MASTER_FILE
-
-#include "global.h"
-
-static int MAX_CURS = 32;
-static struct fb_var_screeninfo default_var;
-static char *viafb_name = "Via";
-static u32 pseudo_pal[17];
-
-/* video mode */
-static char *viafb_mode = "640x480";
-static char *viafb_mode1 = "640x480";
-static int viafb_resMode = VIA_RES_640X480;
-
-/* Added for specifying active devices.*/
-char *viafb_active_dev = "";
-
-/* Added for specifying video on devices.*/
-char *viafb_video_dev = "";
-
-/*Added for specify lcd output port*/
-char *viafb_lcd_port = "";
-char *viafb_dvi_port = "";
-
-static void viafb_set_device(struct device_t active_dev);
-static int apply_device_setting(struct viafb_ioctl_setting setting_info,
- struct fb_info *info);
-static void apply_second_mode_setting(struct fb_var_screeninfo
- *sec_var);
-static void retrieve_device_setting(struct viafb_ioctl_setting
- *setting_info);
-static void viafb_set_video_device(u32 video_dev_info);
-static void viafb_get_video_device(u32 *video_dev_info);
-
-/* Mode information */
-static const struct viafb_modeinfo viafb_modentry[] = {
- {480, 640, VIA_RES_480X640, "480x640"},
- {640, 480, VIA_RES_640X480, "640x480"},
- {800, 480, VIA_RES_800X480, "800x480"},
- {800, 600, VIA_RES_800X600, "800x600"},
- {1024, 768, VIA_RES_1024X768, "1024x768"},
- {1152, 864, VIA_RES_1152X864, "1152x864"},
- {1280, 1024, VIA_RES_1280X1024, "1280x1024"},
- {1600, 1200, VIA_RES_1600X1200, "1600x1200"},
- {1440, 1050, VIA_RES_1440X1050, "1440x1050"},
- {1280, 768, VIA_RES_1280X768, "1280x768"},
- {1280, 800, VIA_RES_1280X800, "1280x800"},
- {1280, 960, VIA_RES_1280X960, "1280x960"},
- {1920, 1440, VIA_RES_1920X1440, "1920x1440"},
- {848, 480, VIA_RES_848X480, "848x480"},
- {1400, 1050, VIA_RES_1400X1050, "1400x1050"},
- {720, 480, VIA_RES_720X480, "720x480"},
- {720, 576, VIA_RES_720X576, "720x576"},
- {1024, 512, VIA_RES_1024X512, "1024x512"},
- {1024, 576, VIA_RES_1024X576, "1024x576"},
- {1024, 600, VIA_RES_1024X600, "1024x600"},
- {1280, 720, VIA_RES_1280X720, "1280x720"},
- {1920, 1080, VIA_RES_1920X1080, "1920x1080"},
- {1366, 768, VIA_RES_1368X768, "1368x768"},
- {1680, 1050, VIA_RES_1680X1050, "1680x1050"},
- {960, 600, VIA_RES_960X600, "960x600"},
- {1000, 600, VIA_RES_1000X600, "1000x600"},
- {1024, 576, VIA_RES_1024X576, "1024x576"},
- {1024, 600, VIA_RES_1024X600, "1024x600"},
- {1088, 612, VIA_RES_1088X612, "1088x612"},
- {1152, 720, VIA_RES_1152X720, "1152x720"},
- {1200, 720, VIA_RES_1200X720, "1200x720"},
- {1280, 600, VIA_RES_1280X600, "1280x600"},
- {1360, 768, VIA_RES_1360X768, "1360x768"},
- {1440, 900, VIA_RES_1440X900, "1440x900"},
- {1600, 900, VIA_RES_1600X900, "1600x900"},
- {1600, 1024, VIA_RES_1600X1024, "1600x1024"},
- {1792, 1344, VIA_RES_1792X1344, "1792x1344"},
- {1856, 1392, VIA_RES_1856X1392, "1856x1392"},
- {1920, 1200, VIA_RES_1920X1200, "1920x1200"},
- {2048, 1536, VIA_RES_2048X1536, "2048x1536"},
- {0, 0, VIA_RES_INVALID, "640x480"}
-};
-
-static struct fb_ops viafb_ops;
-
-static int viafb_update_fix(struct fb_fix_screeninfo *fix, struct fb_info *info)
-{
- struct viafb_par *ppar;
- ppar = info->par;
-
- DEBUG_MSG(KERN_INFO "viafb_update_fix!\n");
-
- fix->visual =
- ppar->bpp == 8 ? FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
- fix->line_length = ppar->linelength;
-
- return 0;
-}
-
-
-static void viafb_setup_fixinfo(struct fb_fix_screeninfo *fix,
- struct viafb_par *viaparinfo)
-{
- memset(fix, 0, sizeof(struct fb_fix_screeninfo));
- strcpy(fix->id, viafb_name);
-
- fix->smem_start = viaparinfo->fbmem;
- fix->smem_len = viaparinfo->fbmem_free;
- fix->mmio_start = viaparinfo->mmio_base;
- fix->mmio_len = viaparinfo->mmio_len;
-
- fix->type = FB_TYPE_PACKED_PIXELS;
- fix->type_aux = 0;
-
- fix->xpanstep = fix->ywrapstep = 0;
- fix->ypanstep = 1;
-
- /* Just tell the accel name */
- viafbinfo->fix.accel = FB_ACCEL_VIA_UNICHROME;
-}
-static int viafb_open(struct fb_info *info, int user)
-{
- DEBUG_MSG(KERN_INFO "viafb_open!\n");
- return 0;
-}
-
-static int viafb_release(struct fb_info *info, int user)
-{
- DEBUG_MSG(KERN_INFO "viafb_release!\n");
- return 0;
-}
-
-static void viafb_update_viafb_par(struct fb_info *info)
-{
- struct viafb_par *ppar;
-
- ppar = info->par;
- ppar->bpp = info->var.bits_per_pixel;
- ppar->linelength = ((info->var.xres_virtual + 7) & ~7) * ppar->bpp / 8;
- ppar->hres = info->var.xres;
- ppar->vres = info->var.yres;
- ppar->xoffset = info->var.xoffset;
- ppar->yoffset = info->var.yoffset;
-}
-
-static int viafb_check_var(struct fb_var_screeninfo *var,
- struct fb_info *info)
-{
- int vmode_index, htotal, vtotal;
- struct viafb_par *ppar;
- u32 long_refresh;
- struct viafb_par *p_viafb_par;
- ppar = info->par;
-
-
- DEBUG_MSG(KERN_INFO "viafb_check_var!\n");
- /* Sanity check */
- /* HW neither support interlacte nor double-scaned mode */
- if (var->vmode & FB_VMODE_INTERLACED || var->vmode & FB_VMODE_DOUBLE)
- return -EINVAL;
-
- vmode_index = viafb_get_mode_index(var->xres, var->yres, 0);
- if (vmode_index == VIA_RES_INVALID) {
- DEBUG_MSG(KERN_INFO
- "viafb: Mode %dx%dx%d not supported!!\n",
- var->xres, var->yres, var->bits_per_pixel);
- return -EINVAL;
- }
-
- if (24 == var->bits_per_pixel)
- var->bits_per_pixel = 32;
-
- if (var->bits_per_pixel != 8 && var->bits_per_pixel != 16 &&
- var->bits_per_pixel != 32)
- return -EINVAL;
-
- if ((var->xres_virtual * (var->bits_per_pixel >> 3)) & 0x1F)
- /*32 pixel alignment */
- var->xres_virtual = (var->xres_virtual + 31) & ~31;
- if (var->xres_virtual * var->yres_virtual * var->bits_per_pixel / 8 >
- ppar->memsize)
- return -EINVAL;
-
- /* Based on var passed in to calculate the refresh,
- * because our driver use some modes special.
- */
- htotal = var->xres + var->left_margin +
- var->right_margin + var->hsync_len;
- vtotal = var->yres + var->upper_margin +
- var->lower_margin + var->vsync_len;
- long_refresh = 1000000000UL / var->pixclock * 1000;
- long_refresh /= (htotal * vtotal);
-
- viafb_refresh = viafb_get_refresh(var->xres, var->yres, long_refresh);
-
- /* Adjust var according to our driver's own table */
- viafb_fill_var_timing_info(var, viafb_refresh, vmode_index);
-
- /* This is indeed a patch for VT3353 */
- if (!info->par)
- return -1;
- p_viafb_par = (struct viafb_par *)info->par;
- if (p_viafb_par->chip_info->gfx_chip_name == UNICHROME_VX800)
- var->accel_flags = 0;
-
- return 0;
-}
-
-static int viafb_set_par(struct fb_info *info)
-{
- int vmode_index;
- int vmode_index1 = 0;
- DEBUG_MSG(KERN_INFO "viafb_set_par!\n");
-
- viafb_update_device_setting(info->var.xres, info->var.yres,
- info->var.bits_per_pixel, viafb_refresh, 0);
-
- vmode_index = viafb_get_mode_index(info->var.xres, info->var.yres, 0);
-
- if (viafb_SAMM_ON == 1) {
- DEBUG_MSG(KERN_INFO
- "viafb_second_xres = %d, viafb_second_yres = %d, bpp = %d\n",
- viafb_second_xres, viafb_second_yres, viafb_bpp1);
- vmode_index1 = viafb_get_mode_index(viafb_second_xres,
- viafb_second_yres, 1);
- DEBUG_MSG(KERN_INFO "->viafb_SAMM_ON: index=%d\n",
- vmode_index1);
-
- viafb_update_device_setting(viafb_second_xres,
- viafb_second_yres, viafb_bpp1, viafb_refresh1, 1);
- }
-
- if (vmode_index != VIA_RES_INVALID) {
- viafb_setmode(vmode_index, info->var.xres, info->var.yres,
- info->var.bits_per_pixel, vmode_index1,
- viafb_second_xres, viafb_second_yres, viafb_bpp1);
-
- /*We should set memory offset according virtual_x */
- /*Fix me:put this function into viafb_setmode */
- viafb_memory_pitch_patch(info);
-
- /* Update ***fb_par information */
- viafb_update_viafb_par(info);
-
- /* Update other fixed information */
- viafb_update_fix(&info->fix, info);
- viafb_bpp = info->var.bits_per_pixel;
- /* Update viafb_accel, it is necessary to our 2D accelerate */
- viafb_accel = info->var.accel_flags;
-
- if (viafb_accel)
- viafb_set_2d_color_depth(info->var.bits_per_pixel);
- }
-
- return 0;
-}
-
-/* Set one color register */
-static int viafb_setcolreg(unsigned regno, unsigned red, unsigned green,
-unsigned blue, unsigned transp, struct fb_info *info)
-{
- u8 sr1a, sr1b, cr67, cr6a, rev = 0, shift = 10;
- unsigned cmap_entries = (info->var.bits_per_pixel == 8) ? 256 : 16;
- DEBUG_MSG(KERN_INFO "viafb_setcolreg!\n");
- if (regno >= cmap_entries)
- return 1;
- if (UNICHROME_CLE266 == viaparinfo->chip_info->gfx_chip_name) {
- /*
- * Read PCI bus 0,dev 0,function 0,index 0xF6 to get chip rev.
- */
- outl(0x80000000 | (0xf6 & ~3), (unsigned long)0xCF8);
- rev = (inl((unsigned long)0xCFC) >> ((0xf6 & 3) * 8)) & 0xff;
- }
- switch (info->var.bits_per_pixel) {
- case 8:
- outb(0x1A, 0x3C4);
- sr1a = inb(0x3C5);
- outb(0x1B, 0x3C4);
- sr1b = inb(0x3C5);
- outb(0x67, 0x3D4);
- cr67 = inb(0x3D5);
- outb(0x6A, 0x3D4);
- cr6a = inb(0x3D5);
-
- /* Map the 3C6/7/8/9 to the IGA2 */
- outb(0x1A, 0x3C4);
- outb(sr1a | 0x01, 0x3C5);
- /* Second Display Engine colck always on */
- outb(0x1B, 0x3C4);
- outb(sr1b | 0x80, 0x3C5);
- /* Second Display Color Depth 8 */
- outb(0x67, 0x3D4);
- outb(cr67 & 0x3F, 0x3D5);
- outb(0x6A, 0x3D4);
- /* Second Display Channel Reset CR6A[6]) */
- outb(cr6a & 0xBF, 0x3D5);
- /* Second Display Channel Enable CR6A[7] */
- outb(cr6a | 0x80, 0x3D5);
- /* Second Display Channel stop reset) */
- outb(cr6a | 0x40, 0x3D5);
-
- /* Bit mask of palette */
- outb(0xFF, 0x3c6);
- /* Write one register of IGA2 */
- outb(regno, 0x3C8);
- if (UNICHROME_CLE266 == viaparinfo->chip_info->gfx_chip_name &&
- rev >= 15) {
- shift = 8;
- viafb_write_reg_mask(CR6A, VIACR, BIT5, BIT5);
- viafb_write_reg_mask(SR15, VIASR, BIT7, BIT7);
- } else {
- shift = 10;
- viafb_write_reg_mask(CR6A, VIACR, 0, BIT5);
- viafb_write_reg_mask(SR15, VIASR, 0, BIT7);
- }
- outb(red >> shift, 0x3C9);
- outb(green >> shift, 0x3C9);
- outb(blue >> shift, 0x3C9);
-
- /* Map the 3C6/7/8/9 to the IGA1 */
- outb(0x1A, 0x3C4);
- outb(sr1a & 0xFE, 0x3C5);
- /* Bit mask of palette */
- outb(0xFF, 0x3c6);
- /* Write one register of IGA1 */
- outb(regno, 0x3C8);
- outb(red >> shift, 0x3C9);
- outb(green >> shift, 0x3C9);
- outb(blue >> shift, 0x3C9);
-
- outb(0x1A, 0x3C4);
- outb(sr1a, 0x3C5);
- outb(0x1B, 0x3C4);
- outb(sr1b, 0x3C5);
- outb(0x67, 0x3D4);
- outb(cr67, 0x3D5);
- outb(0x6A, 0x3D4);
- outb(cr6a, 0x3D5);
- break;
- case 16:
- ((u32 *) info->pseudo_palette)[regno] = (red & 0xF800) |
- ((green & 0xFC00) >> 5) | ((blue & 0xF800) >> 11);
- break;
- case 32:
- ((u32 *) info->pseudo_palette)[regno] =
- ((transp & 0xFF00) << 16) |
- ((red & 0xFF00) << 8) |
- ((green & 0xFF00)) | ((blue & 0xFF00) >> 8);
- break;
- }
-
- return 0;
-
-}
-
-/*CALLED BY: fb_set_cmap */
-/* fb_set_var, pass 256 colors */
-/*CALLED BY: fb_set_cmap */
-/* fbcon_set_palette, pass 16 colors */
-static int viafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
-{
- u32 len = cmap->len;
- u32 i;
- u16 *pred = cmap->red;
- u16 *pgreen = cmap->green;
- u16 *pblue = cmap->blue;
- u16 *ptransp = cmap->transp;
- u8 sr1a, sr1b, cr67, cr6a, rev = 0, shift = 10;
- if (len > 256)
- return 1;
- if (UNICHROME_CLE266 == viaparinfo->chip_info->gfx_chip_name) {
- /*
- * Read PCI bus 0, dev 0, function 0, index 0xF6 to get chip
- * rev.
- */
- outl(0x80000000 | (0xf6 & ~3), (unsigned long)0xCF8);
- rev = (inl((unsigned long)0xCFC) >> ((0xf6 & 3) * 8)) & 0xff;
- }
- switch (info->var.bits_per_pixel) {
- case 8:
- outb(0x1A, 0x3C4);
- sr1a = inb(0x3C5);
- outb(0x1B, 0x3C4);
- sr1b = inb(0x3C5);
- outb(0x67, 0x3D4);
- cr67 = inb(0x3D5);
- outb(0x6A, 0x3D4);
- cr6a = inb(0x3D5);
- /* Map the 3C6/7/8/9 to the IGA2 */
- outb(0x1A, 0x3C4);
- outb(sr1a | 0x01, 0x3C5);
- outb(0x1B, 0x3C4);
- /* Second Display Engine colck always on */
- outb(sr1b | 0x80, 0x3C5);
- outb(0x67, 0x3D4);
- /* Second Display Color Depth 8 */
- outb(cr67 & 0x3F, 0x3D5);
- outb(0x6A, 0x3D4);
- /* Second Display Channel Reset CR6A[6]) */
- outb(cr6a & 0xBF, 0x3D5);
- /* Second Display Channel Enable CR6A[7] */
- outb(cr6a | 0x80, 0x3D5);
- /* Second Display Channel stop reset) */
- outb(cr6a | 0xC0, 0x3D5);
-
- /* Bit mask of palette */
- outb(0xFF, 0x3c6);
- outb(0x00, 0x3C8);
- if (UNICHROME_CLE266 == viaparinfo->chip_info->gfx_chip_name &&
- rev >= 15) {
- shift = 8;
- viafb_write_reg_mask(CR6A, VIACR, BIT5, BIT5);
- viafb_write_reg_mask(SR15, VIASR, BIT7, BIT7);
- } else {
- shift = 10;
- viafb_write_reg_mask(CR6A, VIACR, 0, BIT5);
- viafb_write_reg_mask(SR15, VIASR, 0, BIT7);
- }
- for (i = 0; i < len; i++) {
- outb((*(pred + i)) >> shift, 0x3C9);
- outb((*(pgreen + i)) >> shift, 0x3C9);
- outb((*(pblue + i)) >> shift, 0x3C9);
- }
-
- outb(0x1A, 0x3C4);
- /* Map the 3C6/7/8/9 to the IGA1 */
- outb(sr1a & 0xFE, 0x3C5);
- /* Bit mask of palette */
- outb(0xFF, 0x3c6);
- outb(0x00, 0x3C8);
- for (i = 0; i < len; i++) {
- outb((*(pred + i)) >> shift, 0x3C9);
- outb((*(pgreen + i)) >> shift, 0x3C9);
- outb((*(pblue + i)) >> shift, 0x3C9);
- }
-
- outb(0x1A, 0x3C4);
- outb(sr1a, 0x3C5);
- outb(0x1B, 0x3C4);
- outb(sr1b, 0x3C5);
- outb(0x67, 0x3D4);
- outb(cr67, 0x3D5);
- outb(0x6A, 0x3D4);
- outb(cr6a, 0x3D5);
- break;
- case 16:
- if (len > 17)
- return 0; /* Because static u32 pseudo_pal[17]; */
- for (i = 0; i < len; i++)
- ((u32 *) info->pseudo_palette)[i] =
- (*(pred + i) & 0xF800) |
- ((*(pgreen + i) & 0xFC00) >> 5) |
- ((*(pblue + i) & 0xF800) >> 11);
- break;
- case 32:
- if (len > 17)
- return 0;
- if (ptransp) {
- for (i = 0; i < len; i++)
- ((u32 *) info->pseudo_palette)[i] =
- ((*(ptransp + i) & 0xFF00) << 16) |
- ((*(pred + i) & 0xFF00) << 8) |
- ((*(pgreen + i) & 0xFF00)) |
- ((*(pblue + i) & 0xFF00) >> 8);
- } else {
- for (i = 0; i < len; i++)
- ((u32 *) info->pseudo_palette)[i] =
- 0x00000000 |
- ((*(pred + i) & 0xFF00) << 8) |
- ((*(pgreen + i) & 0xFF00)) |
- ((*(pblue + i) & 0xFF00) >> 8);
- }
- break;
- }
- return 0;
-}
-
-static int viafb_pan_display(struct fb_var_screeninfo *var,
- struct fb_info *info)
-{
- unsigned int offset;
-
- DEBUG_MSG(KERN_INFO "viafb_pan_display!\n");
-
- offset = (var->xoffset + (var->yoffset * var->xres_virtual)) *
- var->bits_per_pixel / 16;
-
- DEBUG_MSG(KERN_INFO "\nviafb_pan_display,offset =%d ", offset);
-
- viafb_write_reg_mask(0x48, 0x3d4, ((offset >> 24) & 0x3), 0x3);
- viafb_write_reg_mask(0x34, 0x3d4, ((offset >> 16) & 0xff), 0xff);
- viafb_write_reg_mask(0x0c, 0x3d4, ((offset >> 8) & 0xff), 0xff);
- viafb_write_reg_mask(0x0d, 0x3d4, (offset & 0xff), 0xff);
-
- return 0;
-}
-
-static int viafb_blank(int blank_mode, struct fb_info *info)
-{
- DEBUG_MSG(KERN_INFO "viafb_blank!\n");
- /* clear DPMS setting */
-
- switch (blank_mode) {
- case FB_BLANK_UNBLANK:
- /* Screen: On, HSync: On, VSync: On */
- /* control CRT monitor power management */
- viafb_write_reg_mask(CR36, VIACR, 0x00, BIT4 + BIT5);
- break;
- case FB_BLANK_HSYNC_SUSPEND:
- /* Screen: Off, HSync: Off, VSync: On */
- /* control CRT monitor power management */
- viafb_write_reg_mask(CR36, VIACR, 0x10, BIT4 + BIT5);
- break;
- case FB_BLANK_VSYNC_SUSPEND:
- /* Screen: Off, HSync: On, VSync: Off */
- /* control CRT monitor power management */
- viafb_write_reg_mask(CR36, VIACR, 0x20, BIT4 + BIT5);
- break;
- case FB_BLANK_POWERDOWN:
- /* Screen: Off, HSync: Off, VSync: Off */
- /* control CRT monitor power management */
- viafb_write_reg_mask(CR36, VIACR, 0x30, BIT4 + BIT5);
- break;
- }
-
- return 0;
-}
-
-static int viafb_ioctl(struct fb_info *info, u_int cmd, u_long arg)
-{
- union {
- struct viafb_ioctl_mode viamode;
- struct viafb_ioctl_samm viasamm;
- struct viafb_driver_version driver_version;
- struct fb_var_screeninfo sec_var;
- struct _panel_size_pos_info panel_pos_size_para;
- struct viafb_ioctl_setting viafb_setting;
- struct device_t active_dev;
- } u;
- u32 state_info = 0;
- u32 *viafb_gamma_table;
- char driver_name[] = "viafb";
-
- u32 __user *argp = (u32 __user *) arg;
- u32 gpu32;
- u32 video_dev_info = 0;
-
- DEBUG_MSG(KERN_INFO "viafb_ioctl: 0x%X !!\n", cmd);
- memset(&u, 0, sizeof(u));
-
- switch (cmd) {
- case VIAFB_GET_CHIP_INFO:
- if (copy_to_user(argp, viaparinfo->chip_info,
- sizeof(struct chip_information)))
- return -EFAULT;
- break;
- case VIAFB_GET_INFO_SIZE:
- return put_user((u32)sizeof(struct viafb_ioctl_info), argp);
- case VIAFB_GET_INFO:
- return viafb_ioctl_get_viafb_info(arg);
- case VIAFB_HOTPLUG:
- return put_user(viafb_ioctl_hotplug(info->var.xres,
- info->var.yres,
- info->var.bits_per_pixel), argp);
- case VIAFB_SET_HOTPLUG_FLAG:
- if (copy_from_user(&gpu32, argp, sizeof(gpu32)))
- return -EFAULT;
- viafb_hotplug = (gpu32) ? 1 : 0;
- break;
- case VIAFB_GET_RESOLUTION:
- u.viamode.xres = (u32) viafb_hotplug_Xres;
- u.viamode.yres = (u32) viafb_hotplug_Yres;
- u.viamode.refresh = (u32) viafb_hotplug_refresh;
- u.viamode.bpp = (u32) viafb_hotplug_bpp;
- if (viafb_SAMM_ON == 1) {
- u.viamode.xres_sec = viafb_second_xres;
- u.viamode.yres_sec = viafb_second_yres;
- u.viamode.virtual_xres_sec = viafb_second_virtual_xres;
- u.viamode.virtual_yres_sec = viafb_second_virtual_yres;
- u.viamode.refresh_sec = viafb_refresh1;
- u.viamode.bpp_sec = viafb_bpp1;
- } else {
- u.viamode.xres_sec = 0;
- u.viamode.yres_sec = 0;
- u.viamode.virtual_xres_sec = 0;
- u.viamode.virtual_yres_sec = 0;
- u.viamode.refresh_sec = 0;
- u.viamode.bpp_sec = 0;
- }
- if (copy_to_user(argp, &u.viamode, sizeof(u.viamode)))
- return -EFAULT;
- break;
- case VIAFB_GET_SAMM_INFO:
- u.viasamm.samm_status = viafb_SAMM_ON;
-
- if (viafb_SAMM_ON == 1) {
- if (viafb_dual_fb) {
- u.viasamm.size_prim = viaparinfo->fbmem_free;
- u.viasamm.size_sec = viaparinfo1->fbmem_free;
- } else {
- if (viafb_second_size) {
- u.viasamm.size_prim =
- viaparinfo->fbmem_free -
- viafb_second_size * 1024 * 1024;
- u.viasamm.size_sec =
- viafb_second_size * 1024 * 1024;
- } else {
- u.viasamm.size_prim =
- viaparinfo->fbmem_free >> 1;
- u.viasamm.size_sec =
- (viaparinfo->fbmem_free >> 1);
- }
- }
- u.viasamm.mem_base = viaparinfo->fbmem;
- u.viasamm.offset_sec = viafb_second_offset;
- } else {
- u.viasamm.size_prim =
- viaparinfo->memsize - viaparinfo->fbmem_used;
- u.viasamm.size_sec = 0;
- u.viasamm.mem_base = viaparinfo->fbmem;
- u.viasamm.offset_sec = 0;
- }
-
- if (copy_to_user(argp, &u.viasamm, sizeof(u.viasamm)))
- return -EFAULT;
-
- break;
- case VIAFB_TURN_ON_OUTPUT_DEVICE:
- if (copy_from_user(&gpu32, argp, sizeof(gpu32)))
- return -EFAULT;
- if (gpu32 & CRT_Device)
- viafb_crt_enable();
- if (gpu32 & DVI_Device)
- viafb_dvi_enable();
- if (gpu32 & LCD_Device)
- viafb_lcd_enable();
- break;
- case VIAFB_TURN_OFF_OUTPUT_DEVICE:
- if (copy_from_user(&gpu32, argp, sizeof(gpu32)))
- return -EFAULT;
- if (gpu32 & CRT_Device)
- viafb_crt_disable();
- if (gpu32 & DVI_Device)
- viafb_dvi_disable();
- if (gpu32 & LCD_Device)
- viafb_lcd_disable();
- break;
- case VIAFB_SET_DEVICE:
- if (copy_from_user(&u.active_dev, (void *)argp,
- sizeof(u.active_dev)))
- return -EFAULT;
- viafb_set_device(u.active_dev);
- viafb_set_par(info);
- break;
- case VIAFB_GET_DEVICE:
- u.active_dev.crt = viafb_CRT_ON;
- u.active_dev.dvi = viafb_DVI_ON;
- u.active_dev.lcd = viafb_LCD_ON;
- u.active_dev.samm = viafb_SAMM_ON;
- u.active_dev.primary_dev = viafb_primary_dev;
-
- u.active_dev.lcd_dsp_cent = viafb_lcd_dsp_method;
- u.active_dev.lcd_panel_id = viafb_lcd_panel_id;
- u.active_dev.lcd_mode = viafb_lcd_mode;
-
- u.active_dev.xres = viafb_hotplug_Xres;
- u.active_dev.yres = viafb_hotplug_Yres;
-
- u.active_dev.xres1 = viafb_second_xres;
- u.active_dev.yres1 = viafb_second_yres;
-
- u.active_dev.bpp = viafb_bpp;
- u.active_dev.bpp1 = viafb_bpp1;
- u.active_dev.refresh = viafb_refresh;
- u.active_dev.refresh1 = viafb_refresh1;
-
- u.active_dev.epia_dvi = viafb_platform_epia_dvi;
- u.active_dev.lcd_dual_edge = viafb_device_lcd_dualedge;
- u.active_dev.bus_width = viafb_bus_width;
-
- if (copy_to_user(argp, &u.active_dev, sizeof(u.active_dev)))
- return -EFAULT;
- break;
-
- case VIAFB_GET_DRIVER_VERSION:
- u.driver_version.iMajorNum = VERSION_MAJOR;
- u.driver_version.iKernelNum = VERSION_KERNEL;
- u.driver_version.iOSNum = VERSION_OS;
- u.driver_version.iMinorNum = VERSION_MINOR;
-
- if (copy_to_user(argp, &u.driver_version,
- sizeof(u.driver_version)))
- return -EFAULT;
-
- break;
-
- case VIAFB_SET_DEVICE_INFO:
- if (copy_from_user(&u.viafb_setting,
- argp, sizeof(u.viafb_setting)))
- return -EFAULT;
- if (apply_device_setting(u.viafb_setting, info) < 0)
- return -EINVAL;
-
- break;
-
- case VIAFB_SET_SECOND_MODE:
- if (copy_from_user(&u.sec_var, argp, sizeof(u.sec_var)))
- return -EFAULT;
- apply_second_mode_setting(&u.sec_var);
- break;
-
- case VIAFB_GET_DEVICE_INFO:
-
- retrieve_device_setting(&u.viafb_setting);
-
- if (copy_to_user(argp, &u.viafb_setting,
- sizeof(u.viafb_setting)))
- return -EFAULT;
-
- break;
-
- case VIAFB_GET_DEVICE_SUPPORT:
- viafb_get_device_support_state(&state_info);
- if (put_user(state_info, argp))
- return -EFAULT;
- break;
-
- case VIAFB_GET_DEVICE_CONNECT:
- viafb_get_device_connect_state(&state_info);
- if (put_user(state_info, argp))
- return -EFAULT;
- break;
-
- case VIAFB_GET_PANEL_SUPPORT_EXPAND:
- state_info =
- viafb_lcd_get_support_expand_state(info->var.xres,
- info->var.yres);
- if (put_user(state_info, argp))
- return -EFAULT;
- break;
-
- case VIAFB_GET_DRIVER_NAME:
- if (copy_to_user(argp, driver_name, sizeof(driver_name)))
- return -EFAULT;
- break;
-
- case VIAFB_SET_GAMMA_LUT:
- viafb_gamma_table = kmalloc(256 * sizeof(u32), GFP_KERNEL);
- if (!viafb_gamma_table)
- return -ENOMEM;
- if (copy_from_user(viafb_gamma_table, argp,
- sizeof(viafb_gamma_table))) {
- kfree(viafb_gamma_table);
- return -EFAULT;
- }
- viafb_set_gamma_table(viafb_bpp, viafb_gamma_table);
- kfree(viafb_gamma_table);
- break;
-
- case VIAFB_GET_GAMMA_LUT:
- viafb_gamma_table = kmalloc(256 * sizeof(u32), GFP_KERNEL);
- if (!viafb_gamma_table)
- return -ENOMEM;
- viafb_get_gamma_table(viafb_gamma_table);
- if (copy_to_user(argp, viafb_gamma_table,
- sizeof(viafb_gamma_table))) {
- kfree(viafb_gamma_table);
- return -EFAULT;
- }
- kfree(viafb_gamma_table);
- break;
-
- case VIAFB_GET_GAMMA_SUPPORT_STATE:
- viafb_get_gamma_support_state(viafb_bpp, &state_info);
- if (put_user(state_info, argp))
- return -EFAULT;
- break;
- case VIAFB_SET_VIDEO_DEVICE:
- get_user(video_dev_info, argp);
- viafb_set_video_device(video_dev_info);
- break;
- case VIAFB_GET_VIDEO_DEVICE:
- viafb_get_video_device(&video_dev_info);
- if (put_user(video_dev_info, argp))
- return -EFAULT;
- break;
- case VIAFB_SYNC_SURFACE:
- DEBUG_MSG(KERN_INFO "lobo VIAFB_SYNC_SURFACE\n");
- break;
- case VIAFB_GET_DRIVER_CAPS:
- break;
-
- case VIAFB_GET_PANEL_MAX_SIZE:
- if (copy_from_user(&u.panel_pos_size_para, argp,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- u.panel_pos_size_para.x = u.panel_pos_size_para.y = 0;
- if (copy_to_user(argp, &u.panel_pos_size_para,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- break;
- case VIAFB_GET_PANEL_MAX_POSITION:
- if (copy_from_user(&u.panel_pos_size_para, argp,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- u.panel_pos_size_para.x = u.panel_pos_size_para.y = 0;
- if (copy_to_user(argp, &u.panel_pos_size_para,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- break;
-
- case VIAFB_GET_PANEL_POSITION:
- if (copy_from_user(&u.panel_pos_size_para, argp,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- u.panel_pos_size_para.x = u.panel_pos_size_para.y = 0;
- if (copy_to_user(argp, &u.panel_pos_size_para,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- break;
- case VIAFB_GET_PANEL_SIZE:
- if (copy_from_user(&u.panel_pos_size_para, argp,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- u.panel_pos_size_para.x = u.panel_pos_size_para.y = 0;
- if (copy_to_user(argp, &u.panel_pos_size_para,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- break;
-
- case VIAFB_SET_PANEL_POSITION:
- if (copy_from_user(&u.panel_pos_size_para, argp,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- break;
- case VIAFB_SET_PANEL_SIZE:
- if (copy_from_user(&u.panel_pos_size_para, argp,
- sizeof(u.panel_pos_size_para)))
- return -EFAULT;
- break;
-
- default:
- return -EINVAL;
- }
-
- return 0;
-}
-
-static void viafb_fillrect(struct fb_info *info,
- const struct fb_fillrect *rect)
-{
- u32 col = 0, rop = 0;
- int pitch;
-
- if (!viafb_accel) {
- cfb_fillrect(info, rect);
- return;
- }
-
- if (!rect->width || !rect->height)
- return;
-
- switch (rect->rop) {
- case ROP_XOR:
- rop = 0x5A;
- break;
- case ROP_COPY:
- default:
- rop = 0xF0;
- break;
- }
-
- switch (info->var.bits_per_pixel) {
- case 8:
- col = rect->color;
- break;
- case 16:
- col = ((u32 *) (info->pseudo_palette))[rect->color];
- break;
- case 32:
- col = ((u32 *) (info->pseudo_palette))[rect->color];
- break;
- }
-
- /* BitBlt Source Address */
- writel(0x0, viaparinfo->io_virt + VIA_REG_SRCPOS);
- /* Source Base Address */
- writel(0x0, viaparinfo->io_virt + VIA_REG_SRCBASE);
- /* Destination Base Address */
- writel(((unsigned long) (info->screen_base) -
- (unsigned long) viafb_FB_MM) >> 3,
- viaparinfo->io_virt + VIA_REG_DSTBASE);
- /* Pitch */
- pitch = (info->var.xres_virtual + 7) & ~7;
- writel(VIA_PITCH_ENABLE |
- (((pitch *
- info->var.bits_per_pixel >> 3) >> 3) |
- (((pitch * info->
- var.bits_per_pixel >> 3) >> 3) << 16)),
- viaparinfo->io_virt + VIA_REG_PITCH);
- /* BitBlt Destination Address */
- writel(((rect->dy << 16) | rect->dx),
- viaparinfo->io_virt + VIA_REG_DSTPOS);
- /* Dimension: width & height */
- writel((((rect->height - 1) << 16) | (rect->width - 1)),
- viaparinfo->io_virt + VIA_REG_DIMENSION);
- /* Forground color or Destination color */
- writel(col, viaparinfo->io_virt + VIA_REG_FGCOLOR);
- /* GE Command */
- writel((0x01 | 0x2000 | (rop << 24)),
- viaparinfo->io_virt + VIA_REG_GECMD);
-
-}
-
-static void viafb_copyarea(struct fb_info *info,
- const struct fb_copyarea *area)
-{
- u32 dy = area->dy, sy = area->sy, direction = 0x0;
- u32 sx = area->sx, dx = area->dx, width = area->width;
- int pitch;
-
- DEBUG_MSG(KERN_INFO "viafb_copyarea!!\n");
-
- if (!viafb_accel) {
- cfb_copyarea(info, area);
- return;
- }
-
- if (!area->width || !area->height)
- return;
-
- if (sy < dy) {
- dy += area->height - 1;
- sy += area->height - 1;
- direction |= 0x4000;
- }
-
- if (sx < dx) {
- dx += width - 1;
- sx += width - 1;
- direction |= 0x8000;
- }
-
- /* Source Base Address */
- writel(((unsigned long) (info->screen_base) -
- (unsigned long) viafb_FB_MM) >> 3,
- viaparinfo->io_virt + VIA_REG_SRCBASE);
- /* Destination Base Address */
- writel(((unsigned long) (info->screen_base) -
- (unsigned long) viafb_FB_MM) >> 3,
- viaparinfo->io_virt + VIA_REG_DSTBASE);
- /* Pitch */
- pitch = (info->var.xres_virtual + 7) & ~7;
- /* VIA_PITCH_ENABLE can be omitted now. */
- writel(VIA_PITCH_ENABLE |
- (((pitch *
- info->var.bits_per_pixel >> 3) >> 3) | (((pitch *
- info->var.
- bits_per_pixel
- >> 3) >> 3)
- << 16)),
- viaparinfo->io_virt + VIA_REG_PITCH);
- /* BitBlt Source Address */
- writel(((sy << 16) | sx), viaparinfo->io_virt + VIA_REG_SRCPOS);
- /* BitBlt Destination Address */
- writel(((dy << 16) | dx), viaparinfo->io_virt + VIA_REG_DSTPOS);
- /* Dimension: width & height */
- writel((((area->height - 1) << 16) | (area->width - 1)),
- viaparinfo->io_virt + VIA_REG_DIMENSION);
- /* GE Command */
- writel((0x01 | direction | (0xCC << 24)),
- viaparinfo->io_virt + VIA_REG_GECMD);
-
-}
-
-static void viafb_imageblit(struct fb_info *info,
- const struct fb_image *image)
-{
- u32 size, bg_col = 0, fg_col = 0, *udata;
- int i;
- int pitch;
-
- if (!viafb_accel) {
- cfb_imageblit(info, image);
- return;
- }
-
- udata = (u32 *) image->data;
-
- 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;
- }
- size = image->width * image->height;
-
- /* Source Base Address */
- writel(0x0, viaparinfo->io_virt + VIA_REG_SRCBASE);
- /* Destination Base Address */
- writel(((unsigned long) (info->screen_base) -
- (unsigned long) viafb_FB_MM) >> 3,
- viaparinfo->io_virt + VIA_REG_DSTBASE);
- /* Pitch */
- pitch = (info->var.xres_virtual + 7) & ~7;
- writel(VIA_PITCH_ENABLE |
- (((pitch *
- info->var.bits_per_pixel >> 3) >> 3) | (((pitch *
- info->var.
- bits_per_pixel
- >> 3) >> 3)
- << 16)),
- viaparinfo->io_virt + VIA_REG_PITCH);
- /* BitBlt Source Address */
- writel(0x0, viaparinfo->io_virt + VIA_REG_SRCPOS);
- /* BitBlt Destination Address */
- writel(((image->dy << 16) | image->dx),
- viaparinfo->io_virt + VIA_REG_DSTPOS);
- /* Dimension: width & height */
- writel((((image->height - 1) << 16) | (image->width - 1)),
- viaparinfo->io_virt + VIA_REG_DIMENSION);
- /* fb color */
- writel(fg_col, viaparinfo->io_virt + VIA_REG_FGCOLOR);
- /* bg color */
- writel(bg_col, viaparinfo->io_virt + VIA_REG_BGCOLOR);
- /* GE Command */
- writel(0xCC020142, viaparinfo->io_virt + VIA_REG_GECMD);
-
- for (i = 0; i < size / 4; i++) {
- writel(*udata, viaparinfo->io_virt + VIA_MMIO_BLTBASE);
- udata++;
- }
-
-}
-
-static int viafb_cursor(struct fb_info *info, struct fb_cursor *cursor)
-{
- u32 temp, xx, yy, bg_col = 0, fg_col = 0;
- int i, j = 0;
- static int hw_cursor;
- struct viafb_par *p_viafb_par;
-
- if (viafb_accel)
- hw_cursor = 1;
-
- if (!viafb_accel) {
- if (hw_cursor) {
- viafb_show_hw_cursor(info, HW_Cursor_OFF);
- hw_cursor = 0;
- }
- return -ENODEV;
- }
-
- if ((((struct viafb_par *)(info->par))->iga_path == IGA2)
- && (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266))
- return -ENODEV;
-
- /* When duoview and using lcd , use soft cursor */
- if (viafb_LCD_ON || ((struct viafb_par *)(info->par))->duoview)
- return -ENODEV;
-
- viafb_show_hw_cursor(info, HW_Cursor_OFF);
- viacursor = *cursor;
-
- if (cursor->set & FB_CUR_SETHOT) {
- viacursor.hot = cursor->hot;
- temp = ((viacursor.hot.x) << 16) + viacursor.hot.y;
- writel(temp, viaparinfo->io_virt + VIA_REG_CURSOR_ORG);
- }
-
- if (cursor->set & FB_CUR_SETPOS) {
- viacursor.image.dx = cursor->image.dx;
- viacursor.image.dy = cursor->image.dy;
- yy = cursor->image.dy - info->var.yoffset;
- xx = cursor->image.dx - info->var.xoffset;
- temp = yy & 0xFFFF;
- temp |= (xx << 16);
- writel(temp, viaparinfo->io_virt + VIA_REG_CURSOR_POS);
- }
-
- if (cursor->set & FB_CUR_SETSIZE) {
- temp = readl(viaparinfo->io_virt + VIA_REG_CURSOR_MODE);
-
- if ((cursor->image.width <= 32)
- && (cursor->image.height <= 32)) {
- MAX_CURS = 32;
- temp |= 0x2;
- } else if ((cursor->image.width <= 64)
- && (cursor->image.height <= 64)) {
- MAX_CURS = 64;
- temp &= 0xFFFFFFFD;
- } else {
- DEBUG_MSG(KERN_INFO
- "The cursor image is biger than 64x64 bits...\n");
- return -ENXIO;
- }
- writel(temp, viaparinfo->io_virt + VIA_REG_CURSOR_MODE);
-
- viacursor.image.height = cursor->image.height;
- viacursor.image.width = cursor->image.width;
- }
-
- if (cursor->set & FB_CUR_SETCMAP) {
- viacursor.image.fg_color = cursor->image.fg_color;
- viacursor.image.bg_color = cursor->image.bg_color;
-
- switch (info->var.bits_per_pixel) {
- case 8:
- case 16:
- case 32:
- bg_col =
- (0xFF << 24) |
- (((info->cmap.red)[viacursor.image.bg_color] &
- 0xFF00) << 8) |
- ((info->cmap.green)[viacursor.image.bg_color] &
- 0xFF00) |
- (((info->cmap.blue)[viacursor.image.bg_color] &
- 0xFF00) >> 8);
- fg_col =
- (0xFF << 24) |
- (((info->cmap.red)[viacursor.image.fg_color] &
- 0xFF00) << 8) |
- ((info->cmap.green)[viacursor.image.fg_color] &
- 0xFF00) |
- (((info->cmap.blue)[viacursor.image.fg_color] &
- 0xFF00) >> 8);
- break;
- default:
- return 0;
- }
-
- /* This is indeed a patch for VT3324/VT3353 */
- if (!info->par)
- return 0;
- p_viafb_par = (struct viafb_par *)info->par;
-
- if ((p_viafb_par->chip_info->gfx_chip_name ==
- UNICHROME_CX700) ||
- ((p_viafb_par->chip_info->gfx_chip_name ==
- UNICHROME_VX800))) {
- bg_col =
- (((info->cmap.red)[viacursor.image.bg_color] &
- 0xFFC0) << 14) |
- (((info->cmap.green)[viacursor.image.bg_color] &
- 0xFFC0) << 4) |
- (((info->cmap.blue)[viacursor.image.bg_color] &
- 0xFFC0) >> 6);
- fg_col =
- (((info->cmap.red)[viacursor.image.fg_color] &
- 0xFFC0) << 14) |
- (((info->cmap.green)[viacursor.image.fg_color] &
- 0xFFC0) << 4) |
- (((info->cmap.blue)[viacursor.image.fg_color] &
- 0xFFC0) >> 6);
- }
-
- writel(bg_col, viaparinfo->io_virt + VIA_REG_CURSOR_BG);
- writel(fg_col, viaparinfo->io_virt + VIA_REG_CURSOR_FG);
- }
-
- if (cursor->set & FB_CUR_SETSHAPE) {
- struct {
- u8 data[CURSOR_SIZE / 8];
- u32 bak[CURSOR_SIZE / 32];
- } *cr_data = kzalloc(sizeof(*cr_data), GFP_ATOMIC);
- int size =
- ((viacursor.image.width + 7) >> 3) *
- viacursor.image.height;
-
- if (cr_data == NULL)
- goto out;
-
- if (MAX_CURS == 32) {
- for (i = 0; i < (CURSOR_SIZE / 32); i++) {
- cr_data->bak[i] = 0x0;
- cr_data->bak[i + 1] = 0xFFFFFFFF;
- i += 1;
- }
- } else if (MAX_CURS == 64) {
- for (i = 0; i < (CURSOR_SIZE / 32); i++) {
- cr_data->bak[i] = 0x0;
- cr_data->bak[i + 1] = 0x0;
- cr_data->bak[i + 2] = 0xFFFFFFFF;
- cr_data->bak[i + 3] = 0xFFFFFFFF;
- i += 3;
- }
- }
-
- switch (viacursor.rop) {
- case ROP_XOR:
- for (i = 0; i < size; i++)
- cr_data->data[i] = viacursor.mask[i];
- break;
- case ROP_COPY:
-
- for (i = 0; i < size; i++)
- cr_data->data[i] = viacursor.mask[i];
- break;
- default:
- break;
- }
-
- if (MAX_CURS == 32) {
- for (i = 0; i < size; i++) {
- cr_data->bak[j] = (u32) cr_data->data[i];
- cr_data->bak[j + 1] = ~cr_data->bak[j];
- j += 2;
- }
- } else if (MAX_CURS == 64) {
- for (i = 0; i < size; i++) {
- cr_data->bak[j] = (u32) cr_data->data[i];
- cr_data->bak[j + 1] = 0x0;
- cr_data->bak[j + 2] = ~cr_data->bak[j];
- cr_data->bak[j + 3] = ~cr_data->bak[j + 1];
- j += 4;
- }
- }
-
- memcpy(((struct viafb_par *)(info->par))->fbmem_virt +
- ((struct viafb_par *)(info->par))->cursor_start,
- cr_data->bak, CURSOR_SIZE);
-out:
- kfree(cr_data);
- }
-
- if (viacursor.enable)
- viafb_show_hw_cursor(info, HW_Cursor_ON);
-
- return 0;
-}
-
-static int viafb_sync(struct fb_info *info)
-{
- if (viafb_accel)
- viafb_wait_engine_idle();
- return 0;
-}
-
-int viafb_get_mode_index(int hres, int vres, int flag)
-{
- u32 i;
- DEBUG_MSG(KERN_INFO "viafb_get_mode_index!\n");
-
- for (i = 0; viafb_modentry[i].mode_index != VIA_RES_INVALID; i++)
- if (viafb_modentry[i].xres == hres &&
- viafb_modentry[i].yres == vres)
- break;
-
- viafb_resMode = viafb_modentry[i].mode_index;
- if (flag)
- viafb_mode1 = viafb_modentry[i].mode_res;
- else
- viafb_mode = viafb_modentry[i].mode_res;
-
- return viafb_resMode;
-}
-
-static void check_available_device_to_enable(int device_id)
-{
- int device_num = 0;
-
- /* Initialize: */
- viafb_CRT_ON = STATE_OFF;
- viafb_DVI_ON = STATE_OFF;
- viafb_LCD_ON = STATE_OFF;
- viafb_LCD2_ON = STATE_OFF;
- viafb_DeviceStatus = None_Device;
-
- if ((device_id & CRT_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) {
- viafb_CRT_ON = STATE_ON;
- device_num++;
- viafb_DeviceStatus |= CRT_Device;
- }
-
- if ((device_id & DVI_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) {
- viafb_DVI_ON = STATE_ON;
- device_num++;
- viafb_DeviceStatus |= DVI_Device;
- }
-
- if ((device_id & LCD_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) {
- viafb_LCD_ON = STATE_ON;
- device_num++;
- viafb_DeviceStatus |= LCD_Device;
- }
-
- if ((device_id & LCD2_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) {
- viafb_LCD2_ON = STATE_ON;
- device_num++;
- viafb_DeviceStatus |= LCD2_Device;
- }
-
- if (viafb_DeviceStatus == None_Device) {
- /* Use CRT as default active device: */
- viafb_CRT_ON = STATE_ON;
- viafb_DeviceStatus = CRT_Device;
- }
- DEBUG_MSG(KERN_INFO "Device Status:%x", viafb_DeviceStatus);
-}
-
-static void viafb_set_device(struct device_t active_dev)
-{
- /* Check available device to enable: */
- int device_id = None_Device;
- if (active_dev.crt)
- device_id |= CRT_Device;
- if (active_dev.dvi)
- device_id |= DVI_Device;
- if (active_dev.lcd)
- device_id |= LCD_Device;
-
- check_available_device_to_enable(device_id);
-
- /* Check property of LCD: */
- if (viafb_LCD_ON) {
- if (active_dev.lcd_dsp_cent) {
- viaparinfo->lvds_setting_info->display_method =
- viafb_lcd_dsp_method = LCD_CENTERING;
- } else {
- viaparinfo->lvds_setting_info->display_method =
- viafb_lcd_dsp_method = LCD_EXPANDSION;
- }
-
- if (active_dev.lcd_mode == LCD_SPWG) {
- viaparinfo->lvds_setting_info->lcd_mode =
- viafb_lcd_mode = LCD_SPWG;
- } else {
- viaparinfo->lvds_setting_info->lcd_mode =
- viafb_lcd_mode = LCD_OPENLDI;
- }
-
- if (active_dev.lcd_panel_id <= LCD_PANEL_ID_MAXIMUM) {
- viafb_lcd_panel_id = active_dev.lcd_panel_id;
- viafb_init_lcd_size();
- }
- }
-
- /* Check property of mode: */
- if (!active_dev.xres1)
- viafb_second_xres = 640;
- else
- viafb_second_xres = active_dev.xres1;
- if (!active_dev.yres1)
- viafb_second_yres = 480;
- else
- viafb_second_yres = active_dev.yres1;
- if (active_dev.bpp != 0)
- viafb_bpp = active_dev.bpp;
- if (active_dev.bpp1 != 0)
- viafb_bpp1 = active_dev.bpp1;
- if (active_dev.refresh != 0)
- viafb_refresh = active_dev.refresh;
- if (active_dev.refresh1 != 0)
- viafb_refresh1 = active_dev.refresh1;
- if ((active_dev.samm == STATE_OFF) || (active_dev.samm == STATE_ON))
- viafb_SAMM_ON = active_dev.samm;
- viafb_primary_dev = active_dev.primary_dev;
-
- viafb_set_start_addr();
- viafb_set_iga_path();
-}
-
-static void viafb_set_video_device(u32 video_dev_info)
-{
- viaparinfo->video_on_crt = STATE_OFF;
- viaparinfo->video_on_dvi = STATE_OFF;
- viaparinfo->video_on_lcd = STATE_OFF;
-
- /* Check available device to enable: */
- if ((video_dev_info & CRT_Device) == CRT_Device)
- viaparinfo->video_on_crt = STATE_ON;
- else if ((video_dev_info & DVI_Device) == DVI_Device)
- viaparinfo->video_on_dvi = STATE_ON;
- else if ((video_dev_info & LCD_Device) == LCD_Device)
- viaparinfo->video_on_lcd = STATE_ON;
-}
-
-static void viafb_get_video_device(u32 *video_dev_info)
-{
- *video_dev_info = None_Device;
- if (viaparinfo->video_on_crt == STATE_ON)
- *video_dev_info |= CRT_Device;
- else if (viaparinfo->video_on_dvi == STATE_ON)
- *video_dev_info |= DVI_Device;
- else if (viaparinfo->video_on_lcd == STATE_ON)
- *video_dev_info |= LCD_Device;
-}
-
-static int get_primary_device(void)
-{
- int primary_device = 0;
- /* Rule: device on iga1 path are the primary device. */
- if (viafb_SAMM_ON) {
- if (viafb_CRT_ON) {
- if (viaparinfo->crt_setting_info->iga_path == IGA1) {
- DEBUG_MSG(KERN_INFO "CRT IGA Path:%d\n",
- viaparinfo->
- crt_setting_info->iga_path);
- primary_device = CRT_Device;
- }
- }
- if (viafb_DVI_ON) {
- if (viaparinfo->tmds_setting_info->iga_path == IGA1) {
- DEBUG_MSG(KERN_INFO "DVI IGA Path:%d\n",
- viaparinfo->
- tmds_setting_info->iga_path);
- primary_device = DVI_Device;
- }
- }
- if (viafb_LCD_ON) {
- if (viaparinfo->lvds_setting_info->iga_path == IGA1) {
- DEBUG_MSG(KERN_INFO "LCD IGA Path:%d\n",
- viaparinfo->
- lvds_setting_info->iga_path);
- primary_device = LCD_Device;
- }
- }
- if (viafb_LCD2_ON) {
- if (viaparinfo->lvds_setting_info2->iga_path == IGA1) {
- DEBUG_MSG(KERN_INFO "LCD2 IGA Path:%d\n",
- viaparinfo->
- lvds_setting_info2->iga_path);
- primary_device = LCD2_Device;
- }
- }
- }
- return primary_device;
-}
-
-static u8 is_duoview(void)
-{
- if (0 == viafb_SAMM_ON) {
- if (viafb_LCD_ON + viafb_LCD2_ON +
- viafb_DVI_ON + viafb_CRT_ON == 2)
- return true;
- return false;
- } else {
- return false;
- }
-}
-
-static void apply_second_mode_setting(struct fb_var_screeninfo
- *sec_var)
-{
- u32 htotal, vtotal, long_refresh;
-
- htotal = sec_var->xres + sec_var->left_margin +
- sec_var->right_margin + sec_var->hsync_len;
- vtotal = sec_var->yres + sec_var->upper_margin +
- sec_var->lower_margin + sec_var->vsync_len;
- if ((sec_var->xres_virtual * (sec_var->bits_per_pixel >> 3)) & 0x1F) {
- /*Is 32 bytes alignment? */
- /*32 pixel alignment */
- sec_var->xres_virtual = (sec_var->xres_virtual + 31) & ~31;
- }
-
- htotal = sec_var->xres + sec_var->left_margin +
- sec_var->right_margin + sec_var->hsync_len;
- vtotal = sec_var->yres + sec_var->upper_margin +
- sec_var->lower_margin + sec_var->vsync_len;
- long_refresh = 1000000000UL / sec_var->pixclock * 1000;
- long_refresh /= (htotal * vtotal);
-
- viafb_second_xres = sec_var->xres;
- viafb_second_yres = sec_var->yres;
- viafb_second_virtual_xres = sec_var->xres_virtual;
- viafb_second_virtual_yres = sec_var->yres_virtual;
- viafb_bpp1 = sec_var->bits_per_pixel;
- viafb_refresh1 = viafb_get_refresh(sec_var->xres, sec_var->yres,
- long_refresh);
-}
-
-static int apply_device_setting(struct viafb_ioctl_setting setting_info,
- struct fb_info *info)
-{
- int need_set_mode = 0;
- DEBUG_MSG(KERN_INFO "apply_device_setting\n");
-
- if (setting_info.device_flag) {
- need_set_mode = 1;
- check_available_device_to_enable(setting_info.device_status);
- }
-
- /* Unlock LCD's operation according to LCD flag
- and check if the setting value is valid. */
- /* If the value is valid, apply the new setting value to the device. */
- if (viafb_LCD_ON) {
- if (setting_info.lcd_operation_flag & OP_LCD_CENTERING) {
- need_set_mode = 1;
- if (setting_info.lcd_attributes.display_center) {
- /* Centering */
- viaparinfo->lvds_setting_info->display_method =
- LCD_CENTERING;
- viafb_lcd_dsp_method = LCD_CENTERING;
- viaparinfo->lvds_setting_info2->display_method =
- viafb_lcd_dsp_method = LCD_CENTERING;
- } else {
- /* expandsion */
- viaparinfo->lvds_setting_info->display_method =
- LCD_EXPANDSION;
- viafb_lcd_dsp_method = LCD_EXPANDSION;
- viaparinfo->lvds_setting_info2->display_method =
- LCD_EXPANDSION;
- viafb_lcd_dsp_method = LCD_EXPANDSION;
- }
- }
-
- if (setting_info.lcd_operation_flag & OP_LCD_MODE) {
- need_set_mode = 1;
- if (setting_info.lcd_attributes.lcd_mode ==
- LCD_SPWG) {
- viaparinfo->lvds_setting_info->lcd_mode =
- viafb_lcd_mode = LCD_SPWG;
- } else {
- viaparinfo->lvds_setting_info->lcd_mode =
- viafb_lcd_mode = LCD_OPENLDI;
- }
- viaparinfo->lvds_setting_info2->lcd_mode =
- viaparinfo->lvds_setting_info->lcd_mode;
- }
-
- if (setting_info.lcd_operation_flag & OP_LCD_PANEL_ID) {
- need_set_mode = 1;
- if (setting_info.lcd_attributes.panel_id <=
- LCD_PANEL_ID_MAXIMUM) {
- viafb_lcd_panel_id =
- setting_info.lcd_attributes.panel_id;
- viafb_init_lcd_size();
- }
- }
- }
-
- if (0 != (setting_info.samm_status & OP_SAMM)) {
- setting_info.samm_status =
- setting_info.samm_status & (~OP_SAMM);
- if (setting_info.samm_status == 0
- || setting_info.samm_status == 1) {
- viafb_SAMM_ON = setting_info.samm_status;
-
- if (viafb_SAMM_ON)
- viafb_primary_dev = setting_info.primary_device;
-
- viafb_set_start_addr();
- viafb_set_iga_path();
- }
- need_set_mode = 1;
- }
-
- viaparinfo->duoview = is_duoview();
-
- if (!need_set_mode) {
- ;
- } else {
- viafb_set_iga_path();
- viafb_set_par(info);
- }
- return true;
-}
-
-static void retrieve_device_setting(struct viafb_ioctl_setting
- *setting_info)
-{
-
- /* get device status */
- if (viafb_CRT_ON == 1)
- setting_info->device_status = CRT_Device;
- if (viafb_DVI_ON == 1)
- setting_info->device_status |= DVI_Device;
- if (viafb_LCD_ON == 1)
- setting_info->device_status |= LCD_Device;
- if (viafb_LCD2_ON == 1)
- setting_info->device_status |= LCD2_Device;
- if ((viaparinfo->video_on_crt == 1) && (viafb_CRT_ON == 1)) {
- setting_info->video_device_status =
- viaparinfo->crt_setting_info->iga_path;
- } else if ((viaparinfo->video_on_dvi == 1) && (viafb_DVI_ON == 1)) {
- setting_info->video_device_status =
- viaparinfo->tmds_setting_info->iga_path;
- } else if ((viaparinfo->video_on_lcd == 1) && (viafb_LCD_ON == 1)) {
- setting_info->video_device_status =
- viaparinfo->lvds_setting_info->iga_path;
- } else {
- setting_info->video_device_status = 0;
- }
-
- setting_info->samm_status = viafb_SAMM_ON;
- setting_info->primary_device = get_primary_device();
-
- setting_info->first_dev_bpp = viafb_bpp;
- setting_info->second_dev_bpp = viafb_bpp1;
-
- setting_info->first_dev_refresh = viafb_refresh;
- setting_info->second_dev_refresh = viafb_refresh1;
-
- setting_info->first_dev_hor_res = viafb_hotplug_Xres;
- setting_info->first_dev_ver_res = viafb_hotplug_Yres;
- setting_info->second_dev_hor_res = viafb_second_xres;
- setting_info->second_dev_ver_res = viafb_second_yres;
-
- /* Get lcd attributes */
- setting_info->lcd_attributes.display_center = viafb_lcd_dsp_method;
- setting_info->lcd_attributes.panel_id = viafb_lcd_panel_id;
- setting_info->lcd_attributes.lcd_mode = viafb_lcd_mode;
-}
-
-static void parse_active_dev(void)
-{
- viafb_CRT_ON = STATE_OFF;
- viafb_DVI_ON = STATE_OFF;
- viafb_LCD_ON = STATE_OFF;
- viafb_LCD2_ON = STATE_OFF;
- /* 1. Modify the active status of devices. */
- /* 2. Keep the order of devices, so we can set corresponding
- IGA path to devices in SAMM case. */
- /* Note: The previous of active_dev is primary device,
- and the following is secondary device. */
- if (!strncmp(viafb_active_dev, "CRT+DVI", 7)) {
- /* CRT+DVI */
- viafb_CRT_ON = STATE_ON;
- viafb_DVI_ON = STATE_ON;
- viafb_primary_dev = CRT_Device;
- } else if (!strncmp(viafb_active_dev, "DVI+CRT", 7)) {
- /* DVI+CRT */
- viafb_CRT_ON = STATE_ON;
- viafb_DVI_ON = STATE_ON;
- viafb_primary_dev = DVI_Device;
- } else if (!strncmp(viafb_active_dev, "CRT+LCD", 7)) {
- /* CRT+LCD */
- viafb_CRT_ON = STATE_ON;
- viafb_LCD_ON = STATE_ON;
- viafb_primary_dev = CRT_Device;
- } else if (!strncmp(viafb_active_dev, "LCD+CRT", 7)) {
- /* LCD+CRT */
- viafb_CRT_ON = STATE_ON;
- viafb_LCD_ON = STATE_ON;
- viafb_primary_dev = LCD_Device;
- } else if (!strncmp(viafb_active_dev, "DVI+LCD", 7)) {
- /* DVI+LCD */
- viafb_DVI_ON = STATE_ON;
- viafb_LCD_ON = STATE_ON;
- viafb_primary_dev = DVI_Device;
- } else if (!strncmp(viafb_active_dev, "LCD+DVI", 7)) {
- /* LCD+DVI */
- viafb_DVI_ON = STATE_ON;
- viafb_LCD_ON = STATE_ON;
- viafb_primary_dev = LCD_Device;
- } else if (!strncmp(viafb_active_dev, "LCD+LCD2", 8)) {
- viafb_LCD_ON = STATE_ON;
- viafb_LCD2_ON = STATE_ON;
- viafb_primary_dev = LCD_Device;
- } else if (!strncmp(viafb_active_dev, "LCD2+LCD", 8)) {
- viafb_LCD_ON = STATE_ON;
- viafb_LCD2_ON = STATE_ON;
- viafb_primary_dev = LCD2_Device;
- } else if (!strncmp(viafb_active_dev, "CRT", 3)) {
- /* CRT only */
- viafb_CRT_ON = STATE_ON;
- viafb_SAMM_ON = STATE_OFF;
- } else if (!strncmp(viafb_active_dev, "DVI", 3)) {
- /* DVI only */
- viafb_DVI_ON = STATE_ON;
- viafb_SAMM_ON = STATE_OFF;
- } else if (!strncmp(viafb_active_dev, "LCD", 3)) {
- /* LCD only */
- viafb_LCD_ON = STATE_ON;
- viafb_SAMM_ON = STATE_OFF;
- } else {
- viafb_CRT_ON = STATE_ON;
- viafb_SAMM_ON = STATE_OFF;
- }
- viaparinfo->duoview = is_duoview();
-}
-
-static void parse_video_dev(void)
-{
- viaparinfo->video_on_crt = STATE_OFF;
- viaparinfo->video_on_dvi = STATE_OFF;
- viaparinfo->video_on_lcd = STATE_OFF;
-
- if (!strncmp(viafb_video_dev, "CRT", 3)) {
- /* Video on CRT */
- viaparinfo->video_on_crt = STATE_ON;
- } else if (!strncmp(viafb_video_dev, "DVI", 3)) {
- /* Video on DVI */
- viaparinfo->video_on_dvi = STATE_ON;
- } else if (!strncmp(viafb_video_dev, "LCD", 3)) {
- /* Video on LCD */
- viaparinfo->video_on_lcd = STATE_ON;
- }
-}
-
-static int parse_port(char *opt_str, int *output_interface)
-{
- if (!strncmp(opt_str, "DVP0", 4))
- *output_interface = INTERFACE_DVP0;
- else if (!strncmp(opt_str, "DVP1", 4))
- *output_interface = INTERFACE_DVP1;
- else if (!strncmp(opt_str, "DFP_HIGHLOW", 11))
- *output_interface = INTERFACE_DFP;
- else if (!strncmp(opt_str, "DFP_HIGH", 8))
- *output_interface = INTERFACE_DFP_HIGH;
- else if (!strncmp(opt_str, "DFP_LOW", 7))
- *output_interface = INTERFACE_DFP_LOW;
- else
- *output_interface = INTERFACE_NONE;
- return 0;
-}
-
-static void parse_lcd_port(void)
-{
- parse_port(viafb_lcd_port, &viaparinfo->chip_info->lvds_chip_info.
- output_interface);
- /*Initialize to avoid unexpected behavior */
- viaparinfo->chip_info->lvds_chip_info2.output_interface =
- INTERFACE_NONE;
-
- DEBUG_MSG(KERN_INFO "parse_lcd_port: viafb_lcd_port:%s,interface:%d\n",
- viafb_lcd_port, viaparinfo->chip_info->lvds_chip_info.
- output_interface);
-}
-
-static void parse_dvi_port(void)
-{
- parse_port(viafb_dvi_port, &viaparinfo->chip_info->tmds_chip_info.
- output_interface);
-
- DEBUG_MSG(KERN_INFO "parse_dvi_port: viafb_dvi_port:%s,interface:%d\n",
- viafb_dvi_port, viaparinfo->chip_info->tmds_chip_info.
- output_interface);
-}
-
-/*
- * The proc filesystem read/write function, a simple proc implement to
- * get/set the value of DPA DVP0, DVP0DataDriving, DVP0ClockDriving, DVP1,
- * DVP1Driving, DFPHigh, DFPLow CR96, SR2A[5], SR1B[1], SR2A[4], SR1E[2],
- * CR9B, SR65, CR97, CR99
- */
-static int viafb_dvp0_proc_read(char *buf, char **start, off_t offset,
-int count, int *eof, void *data)
-{
- int len = 0;
- u8 dvp0_data_dri = 0, dvp0_clk_dri = 0, dvp0 = 0;
- dvp0_data_dri =
- (viafb_read_reg(VIASR, SR2A) & BIT5) >> 4 |
- (viafb_read_reg(VIASR, SR1B) & BIT1) >> 1;
- dvp0_clk_dri =
- (viafb_read_reg(VIASR, SR2A) & BIT4) >> 3 |
- (viafb_read_reg(VIASR, SR1E) & BIT2) >> 2;
- dvp0 = viafb_read_reg(VIACR, CR96) & 0x0f;
- len +=
- sprintf(buf + len, "%x %x %x\n", dvp0, dvp0_data_dri, dvp0_clk_dri);
- *eof = 1; /*Inform kernel end of data */
- return len;
-}
-static int viafb_dvp0_proc_write(struct file *file,
- const char __user *buffer, unsigned long count, void *data)
-{
- char buf[20], *value, *pbuf;
- u8 reg_val = 0;
- unsigned long length, i;
- if (count < 1)
- return -EINVAL;
- length = count > 20 ? 20 : count;
- if (copy_from_user(&buf[0], buffer, length))
- return -EFAULT;
- buf[length - 1] = '\0'; /*Ensure end string */
- pbuf = &buf[0];
- for (i = 0; i < 3; i++) {
- value = strsep(&pbuf, " ");
- if (value != NULL) {
- strict_strtoul(value, 0, (unsigned long *)&reg_val);
- DEBUG_MSG(KERN_INFO "DVP0:reg_val[%l]=:%x\n", i,
- reg_val);
- switch (i) {
- case 0:
- viafb_write_reg_mask(CR96, VIACR,
- reg_val, 0x0f);
- break;
- case 1:
- viafb_write_reg_mask(SR2A, VIASR,
- reg_val << 4, BIT5);
- viafb_write_reg_mask(SR1B, VIASR,
- reg_val << 1, BIT1);
- break;
- case 2:
- viafb_write_reg_mask(SR2A, VIASR,
- reg_val << 3, BIT4);
- viafb_write_reg_mask(SR1E, VIASR,
- reg_val << 2, BIT2);
- break;
- default:
- break;
- }
- } else {
- break;
- }
- }
- return count;
-}
-static int viafb_dvp1_proc_read(char *buf, char **start, off_t offset,
- int count, int *eof, void *data)
-{
- int len = 0;
- u8 dvp1 = 0, dvp1_data_dri = 0, dvp1_clk_dri = 0;
- dvp1 = viafb_read_reg(VIACR, CR9B) & 0x0f;
- dvp1_data_dri = (viafb_read_reg(VIASR, SR65) & 0x0c) >> 2;
- dvp1_clk_dri = viafb_read_reg(VIASR, SR65) & 0x03;
- len +=
- sprintf(buf + len, "%x %x %x\n", dvp1, dvp1_data_dri, dvp1_clk_dri);
- *eof = 1; /*Inform kernel end of data */
- return len;
-}
-static int viafb_dvp1_proc_write(struct file *file,
- const char __user *buffer, unsigned long count, void *data)
-{
- char buf[20], *value, *pbuf;
- u8 reg_val = 0;
- unsigned long length, i;
- if (count < 1)
- return -EINVAL;
- length = count > 20 ? 20 : count;
- if (copy_from_user(&buf[0], buffer, length))
- return -EFAULT;
- buf[length - 1] = '\0'; /*Ensure end string */
- pbuf = &buf[0];
- for (i = 0; i < 3; i++) {
- value = strsep(&pbuf, " ");
- if (value != NULL) {
- strict_strtoul(value, 0, (unsigned long *)&reg_val);
- switch (i) {
- case 0:
- viafb_write_reg_mask(CR9B, VIACR,
- reg_val, 0x0f);
- break;
- case 1:
- viafb_write_reg_mask(SR65, VIASR,
- reg_val << 2, 0x0c);
- break;
- case 2:
- viafb_write_reg_mask(SR65, VIASR,
- reg_val, 0x03);
- break;
- default:
- break;
- }
- } else {
- break;
- }
- }
- return count;
-}
-
-static int viafb_dfph_proc_read(char *buf, char **start, off_t offset,
- int count, int *eof, void *data)
-{
- int len = 0;
- u8 dfp_high = 0;
- dfp_high = viafb_read_reg(VIACR, CR97) & 0x0f;
- len += sprintf(buf + len, "%x\n", dfp_high);
- *eof = 1; /*Inform kernel end of data */
- return len;
-}
-static int viafb_dfph_proc_write(struct file *file,
- const char __user *buffer, unsigned long count, void *data)
-{
- char buf[20];
- u8 reg_val = 0;
- unsigned long length;
- if (count < 1)
- return -EINVAL;
- length = count > 20 ? 20 : count;
- if (copy_from_user(&buf[0], buffer, length))
- return -EFAULT;
- buf[length - 1] = '\0'; /*Ensure end string */
- strict_strtoul(&buf[0], 0, (unsigned long *)&reg_val);
- viafb_write_reg_mask(CR97, VIACR, reg_val, 0x0f);
- return count;
-}
-static int viafb_dfpl_proc_read(char *buf, char **start, off_t offset,
- int count, int *eof, void *data)
-{
- int len = 0;
- u8 dfp_low = 0;
- dfp_low = viafb_read_reg(VIACR, CR99) & 0x0f;
- len += sprintf(buf + len, "%x\n", dfp_low);
- *eof = 1; /*Inform kernel end of data */
- return len;
-}
-static int viafb_dfpl_proc_write(struct file *file,
- const char __user *buffer, unsigned long count, void *data)
-{
- char buf[20];
- u8 reg_val = 0;
- unsigned long length;
- if (count < 1)
- return -EINVAL;
- length = count > 20 ? 20 : count;
- if (copy_from_user(&buf[0], buffer, length))
- return -EFAULT;
- buf[length - 1] = '\0'; /*Ensure end string */
- strict_strtoul(&buf[0], 0, (unsigned long *)&reg_val);
- viafb_write_reg_mask(CR99, VIACR, reg_val, 0x0f);
- return count;
-}
-static int viafb_vt1636_proc_read(char *buf, char **start,
- off_t offset, int count, int *eof, void *data)
-{
- int len = 0;
- u8 vt1636_08 = 0, vt1636_09 = 0;
- switch (viaparinfo->chip_info->lvds_chip_info.lvds_chip_name) {
- case VT1636_LVDS:
- vt1636_08 =
- viafb_gpio_i2c_read_lvds(viaparinfo->lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info, 0x08) & 0x0f;
- vt1636_09 =
- viafb_gpio_i2c_read_lvds(viaparinfo->lvds_setting_info,
- &viaparinfo->chip_info->lvds_chip_info, 0x09) & 0x1f;
- len += sprintf(buf + len, "%x %x\n", vt1636_08, vt1636_09);
- break;
- default:
- break;
- }
- switch (viaparinfo->chip_info->lvds_chip_info2.lvds_chip_name) {
- case VT1636_LVDS:
- vt1636_08 =
- viafb_gpio_i2c_read_lvds(viaparinfo->lvds_setting_info2,
- &viaparinfo->chip_info->lvds_chip_info2, 0x08) & 0x0f;
- vt1636_09 =
- viafb_gpio_i2c_read_lvds(viaparinfo->lvds_setting_info2,
- &viaparinfo->chip_info->lvds_chip_info2, 0x09) & 0x1f;
- len += sprintf(buf + len, " %x %x\n", vt1636_08, vt1636_09);
- break;
- default:
- break;
- }
- *eof = 1; /*Inform kernel end of data */
- return len;
-}
-static int viafb_vt1636_proc_write(struct file *file,
- const char __user *buffer, unsigned long count, void *data)
-{
- char buf[30], *value, *pbuf;
- struct IODATA reg_val;
- unsigned long length, i;
- if (count < 1)
- return -EINVAL;
- length = count > 30 ? 30 : count;
- if (copy_from_user(&buf[0], buffer, length))
- return -EFAULT;
- buf[length - 1] = '\0'; /*Ensure end string */
- pbuf = &buf[0];
- switch (viaparinfo->chip_info->lvds_chip_info.lvds_chip_name) {
- case VT1636_LVDS:
- for (i = 0; i < 2; i++) {
- value = strsep(&pbuf, " ");
- if (value != NULL) {
- strict_strtoul(value, 0,
- (unsigned long *)&reg_val.Data);
- switch (i) {
- case 0:
- reg_val.Index = 0x08;
- reg_val.Mask = 0x0f;
- viafb_gpio_i2c_write_mask_lvds
- (viaparinfo->lvds_setting_info,
- &viaparinfo->
- chip_info->lvds_chip_info,
- reg_val);
- break;
- case 1:
- reg_val.Index = 0x09;
- reg_val.Mask = 0x1f;
- viafb_gpio_i2c_write_mask_lvds
- (viaparinfo->lvds_setting_info,
- &viaparinfo->
- chip_info->lvds_chip_info,
- reg_val);
- break;
- default:
- break;
- }
- } else {
- break;
- }
- }
- break;
- default:
- break;
- }
- switch (viaparinfo->chip_info->lvds_chip_info2.lvds_chip_name) {
- case VT1636_LVDS:
- for (i = 0; i < 2; i++) {
- value = strsep(&pbuf, " ");
- if (value != NULL) {
- strict_strtoul(value, 0,
- (unsigned long *)&reg_val.Data);
- switch (i) {
- case 0:
- reg_val.Index = 0x08;
- reg_val.Mask = 0x0f;
- viafb_gpio_i2c_write_mask_lvds
- (viaparinfo->lvds_setting_info2,
- &viaparinfo->
- chip_info->lvds_chip_info2,
- reg_val);
- break;
- case 1:
- reg_val.Index = 0x09;
- reg_val.Mask = 0x1f;
- viafb_gpio_i2c_write_mask_lvds
- (viaparinfo->lvds_setting_info2,
- &viaparinfo->
- chip_info->lvds_chip_info2,
- reg_val);
- break;
- default:
- break;
- }
- } else {
- break;
- }
- }
- break;
- default:
- break;
- }
- return count;
-}
-
-static void viafb_init_proc(struct proc_dir_entry **viafb_entry)
-{
- struct proc_dir_entry *entry;
- *viafb_entry = proc_mkdir("viafb", NULL);
- if (viafb_entry) {
- entry = create_proc_entry("dvp0", 0, *viafb_entry);
- if (entry) {
- entry->owner = THIS_MODULE;
- entry->read_proc = viafb_dvp0_proc_read;
- entry->write_proc = viafb_dvp0_proc_write;
- }
- entry = create_proc_entry("dvp1", 0, *viafb_entry);
- if (entry) {
- entry->owner = THIS_MODULE;
- entry->read_proc = viafb_dvp1_proc_read;
- entry->write_proc = viafb_dvp1_proc_write;
- }
- entry = create_proc_entry("dfph", 0, *viafb_entry);
- if (entry) {
- entry->owner = THIS_MODULE;
- entry->read_proc = viafb_dfph_proc_read;
- entry->write_proc = viafb_dfph_proc_write;
- }
- entry = create_proc_entry("dfpl", 0, *viafb_entry);
- if (entry) {
- entry->owner = THIS_MODULE;
- entry->read_proc = viafb_dfpl_proc_read;
- entry->write_proc = viafb_dfpl_proc_write;
- }
- if (VT1636_LVDS == viaparinfo->chip_info->lvds_chip_info.
- lvds_chip_name || VT1636_LVDS ==
- viaparinfo->chip_info->lvds_chip_info2.lvds_chip_name) {
- entry = create_proc_entry("vt1636", 0, *viafb_entry);
- if (entry) {
- entry->owner = THIS_MODULE;
- entry->read_proc = viafb_vt1636_proc_read;
- entry->write_proc = viafb_vt1636_proc_write;
- }
- }
-
- }
-}
-static void viafb_remove_proc(struct proc_dir_entry *viafb_entry)
-{
- /* no problem if it was not registered */
- remove_proc_entry("dvp0", viafb_entry);/* parent dir */
- remove_proc_entry("dvp1", viafb_entry);
- remove_proc_entry("dfph", viafb_entry);
- remove_proc_entry("dfpl", viafb_entry);
- remove_proc_entry("vt1636", viafb_entry);
- remove_proc_entry("vt1625", viafb_entry);
- remove_proc_entry("viafb", NULL);
-}
-
-static int __devinit via_pci_probe(void)
-{
- unsigned int default_xres, default_yres;
- char *tmpc, *tmpm;
- char *tmpc_sec, *tmpm_sec;
- int vmode_index;
- u32 tmds_length, lvds_length, crt_length, chip_length, viafb_par_length;
-
- DEBUG_MSG(KERN_INFO "VIAFB PCI Probe!!\n");
-
- viafb_par_length = ALIGN(sizeof(struct viafb_par), BITS_PER_LONG/8);
- tmds_length = ALIGN(sizeof(struct tmds_setting_information),
- BITS_PER_LONG/8);
- lvds_length = ALIGN(sizeof(struct lvds_setting_information),
- BITS_PER_LONG/8);
- crt_length = ALIGN(sizeof(struct lvds_setting_information),
- BITS_PER_LONG/8);
- chip_length = ALIGN(sizeof(struct chip_information), BITS_PER_LONG/8);
-
- /* Allocate fb_info and ***_par here, also including some other needed
- * variables
- */
- viafbinfo = framebuffer_alloc(viafb_par_length + 2 * lvds_length +
- tmds_length + crt_length + chip_length, NULL);
- if (!viafbinfo) {
- printk(KERN_ERR"Could not allocate memory for viafb_info.\n");
- return -ENODEV;
- }
-
- viaparinfo = (struct viafb_par *)viafbinfo->par;
- viaparinfo->tmds_setting_info = (struct tmds_setting_information *)
- ((unsigned long)viaparinfo + viafb_par_length);
- viaparinfo->lvds_setting_info = (struct lvds_setting_information *)
- ((unsigned long)viaparinfo->tmds_setting_info + tmds_length);
- viaparinfo->lvds_setting_info2 = (struct lvds_setting_information *)
- ((unsigned long)viaparinfo->lvds_setting_info + lvds_length);
- viaparinfo->crt_setting_info = (struct crt_setting_information *)
- ((unsigned long)viaparinfo->lvds_setting_info2 + lvds_length);
- viaparinfo->chip_info = (struct chip_information *)
- ((unsigned long)viaparinfo->crt_setting_info + crt_length);
-
- if (viafb_dual_fb)
- viafb_SAMM_ON = 1;
- parse_active_dev();
- parse_video_dev();
- parse_lcd_port();
- parse_dvi_port();
-
- /* for dual-fb must viafb_SAMM_ON=1 and viafb_dual_fb=1 */
- if (!viafb_SAMM_ON)
- viafb_dual_fb = 0;
-
- /* Set up I2C bus stuff */
- viafb_create_i2c_bus(viaparinfo);
-
- viafb_init_chip_info();
- viafb_get_fb_info(&viaparinfo->fbmem, &viaparinfo->memsize);
- viaparinfo->fbmem_free = viaparinfo->memsize;
- viaparinfo->fbmem_used = 0;
- viaparinfo->fbmem_virt = ioremap_nocache(viaparinfo->fbmem,
- viaparinfo->memsize);
- viafbinfo->screen_base = (char *)viaparinfo->fbmem_virt;
-
- if (!viaparinfo->fbmem_virt) {
- printk(KERN_INFO "ioremap failed\n");
- return -1;
- }
-
- viafb_get_mmio_info(&viaparinfo->mmio_base, &viaparinfo->mmio_len);
- viaparinfo->io_virt = ioremap_nocache(viaparinfo->mmio_base,
- viaparinfo->mmio_len);
-
- viafbinfo->node = 0;
- viafbinfo->fbops = &viafb_ops;
- viafbinfo->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
-
- viafbinfo->pseudo_palette = pseudo_pal;
- if (viafb_accel) {
- viafb_init_accel();
- viafb_init_2d_engine();
- viafb_hw_cursor_init();
- }
-
- if (viafb_second_size && (viafb_second_size < 8)) {
- viafb_second_offset = viaparinfo->fbmem_free -
- viafb_second_size * 1024 * 1024;
- } else {
- viafb_second_size = 8;
- viafb_second_offset = viaparinfo->fbmem_free -
- viafb_second_size * 1024 * 1024;
- }
-
- viafb_FB_MM = viaparinfo->fbmem_virt;
- tmpm = viafb_mode;
- tmpc = strsep(&tmpm, "x");
- strict_strtoul(tmpc, 0, (unsigned long *)&default_xres);
- strict_strtoul(tmpm, 0, (unsigned long *)&default_yres);
-
- vmode_index = viafb_get_mode_index(default_xres, default_yres, 0);
- DEBUG_MSG(KERN_INFO "0->index=%d\n", vmode_index);
-
- if (viafb_SAMM_ON == 1) {
- if (strcmp(viafb_mode, viafb_mode1)) {
- tmpm_sec = viafb_mode1;
- tmpc_sec = strsep(&tmpm_sec, "x");
- strict_strtoul(tmpc_sec, 0,
- (unsigned long *)&viafb_second_xres);
- strict_strtoul(tmpm_sec, 0,
- (unsigned long *)&viafb_second_yres);
- } else {
- viafb_second_xres = default_xres;
- viafb_second_yres = default_yres;
- }
- if (0 == viafb_second_virtual_xres) {
- switch (viafb_second_xres) {
- case 1400:
- viafb_second_virtual_xres = 1408;
- break;
- default:
- viafb_second_virtual_xres = viafb_second_xres;
- break;
- }
- }
- if (0 == viafb_second_virtual_yres)
- viafb_second_virtual_yres = viafb_second_yres;
- }
-
- switch (viafb_bpp) {
- case 0 ... 8:
- viafb_bpp = 8;
- break;
- case 9 ... 16:
- viafb_bpp = 16;
- break;
- case 17 ... 32:
- viafb_bpp = 32;
- break;
- default:
- viafb_bpp = 8;
- }
- default_var.xres = default_xres;
- default_var.yres = default_yres;
- switch (default_xres) {
- case 1400:
- default_var.xres_virtual = 1408;
- break;
- default:
- default_var.xres_virtual = default_xres;
- break;
- }
- default_var.yres_virtual = default_yres;
- default_var.bits_per_pixel = viafb_bpp;
- if (default_var.bits_per_pixel == 15)
- default_var.bits_per_pixel = 16;
- default_var.pixclock =
- viafb_get_pixclock(default_xres, default_yres, viafb_refresh);
- default_var.left_margin = (default_xres >> 3) & 0xf8;
- default_var.right_margin = 32;
- default_var.upper_margin = 16;
- default_var.lower_margin = 4;
- default_var.hsync_len = default_var.left_margin;
- default_var.vsync_len = 4;
- default_var.accel_flags = 0;
-
- if (viafb_accel) {
- viafbinfo->flags |=
- (FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT |
- FBINFO_HWACCEL_IMAGEBLIT);
- default_var.accel_flags |= FB_ACCELF_TEXT;
- } else
- viafbinfo->flags |= FBINFO_HWACCEL_DISABLED;
-
- if (viafb_dual_fb) {
- viafbinfo1 = framebuffer_alloc(viafb_par_length, NULL);
- if (!viafbinfo1) {
- printk(KERN_ERR
- "allocate the second framebuffer struct error\n");
- framebuffer_release(viafbinfo);
- return -ENOMEM;
- }
- viaparinfo1 = viafbinfo1->par;
- memcpy(viaparinfo1, viaparinfo, viafb_par_length);
- viaparinfo1->memsize = viaparinfo->memsize -
- viafb_second_offset;
- viaparinfo->memsize = viafb_second_offset;
- viaparinfo1->fbmem_virt = viaparinfo->fbmem_virt +
- viafb_second_offset;
- viaparinfo1->fbmem = viaparinfo->fbmem + viafb_second_offset;
-
- viaparinfo1->fbmem_used = viaparinfo->fbmem_used;
- viaparinfo1->fbmem_free = viaparinfo1->memsize -
- viaparinfo1->fbmem_used;
- viaparinfo->fbmem_free = viaparinfo->memsize;
- viaparinfo->fbmem_used = 0;
- if (viafb_accel) {
- viaparinfo1->cursor_start =
- viaparinfo->cursor_start - viafb_second_offset;
- viaparinfo1->VQ_start = viaparinfo->VQ_start -
- viafb_second_offset;
- viaparinfo1->VQ_end = viaparinfo->VQ_end -
- viafb_second_offset;
- }
-
- memcpy(viafbinfo1, viafbinfo, sizeof(struct fb_info));
- viafbinfo1->screen_base = viafbinfo->screen_base +
- viafb_second_offset;
- viafbinfo1->fix.smem_start = viaparinfo1->fbmem;
- viafbinfo1->fix.smem_len = viaparinfo1->fbmem_free;
-
- default_var.xres = viafb_second_xres;
- default_var.yres = viafb_second_yres;
- default_var.xres_virtual = viafb_second_virtual_xres;
- default_var.yres_virtual = viafb_second_virtual_yres;
- if (viafb_bpp1 != viafb_bpp)
- viafb_bpp1 = viafb_bpp;
- default_var.bits_per_pixel = viafb_bpp1;
- default_var.pixclock =
- viafb_get_pixclock(viafb_second_xres, viafb_second_yres,
- viafb_refresh);
- default_var.left_margin = (viafb_second_xres >> 3) & 0xf8;
- default_var.right_margin = 32;
- default_var.upper_margin = 16;
- default_var.lower_margin = 4;
- default_var.hsync_len = default_var.left_margin;
- default_var.vsync_len = 4;
-
- viafb_setup_fixinfo(&viafbinfo1->fix, viaparinfo1);
- viafb_check_var(&default_var, viafbinfo1);
- viafbinfo1->var = default_var;
- viafb_update_viafb_par(viafbinfo);
- viafb_update_fix(&viafbinfo1->fix, viafbinfo1);
- }
-
- viafb_setup_fixinfo(&viafbinfo->fix, viaparinfo);
- viafb_check_var(&default_var, viafbinfo);
- viafbinfo->var = default_var;
- viafb_update_viafb_par(viafbinfo);
- viafb_update_fix(&viafbinfo->fix, viafbinfo);
- default_var.activate = FB_ACTIVATE_NOW;
- fb_alloc_cmap(&viafbinfo->cmap, 256, 0);
-
- if (viafb_dual_fb && (viafb_primary_dev == LCD_Device)
- && (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CLE266)) {
- if (register_framebuffer(viafbinfo1) < 0)
- return -EINVAL;
- }
- if (register_framebuffer(viafbinfo) < 0)
- return -EINVAL;
-
- if (viafb_dual_fb && ((viafb_primary_dev != LCD_Device)
- || (viaparinfo->chip_info->gfx_chip_name !=
- UNICHROME_CLE266))) {
- if (register_framebuffer(viafbinfo1) < 0)
- return -EINVAL;
- }
- DEBUG_MSG(KERN_INFO "fb%d: %s frame buffer device %dx%d-%dbpp\n",
- viafbinfo->node, viafbinfo->fix.id, default_var.xres,
- default_var.yres, default_var.bits_per_pixel);
-
- viafb_init_proc(&viaparinfo->proc_entry);
- viafb_init_dac(IGA2);
- return 0;
-}
-
-static void __devexit via_pci_remove(void)
-{
- DEBUG_MSG(KERN_INFO "via_pci_remove!\n");
- fb_dealloc_cmap(&viafbinfo->cmap);
- unregister_framebuffer(viafbinfo);
- if (viafb_dual_fb)
- unregister_framebuffer(viafbinfo1);
- iounmap((void *)viaparinfo->fbmem_virt);
- iounmap(viaparinfo->io_virt);
-
- viafb_delete_i2c_buss(viaparinfo);
-
- framebuffer_release(viafbinfo);
- if (viafb_dual_fb)
- framebuffer_release(viafbinfo1);
-
- viafb_remove_proc(viaparinfo->proc_entry);
-}
-
-#ifndef MODULE
-static int __init viafb_setup(char *options)
-{
- char *this_opt;
- DEBUG_MSG(KERN_INFO "viafb_setup!\n");
-
- if (!options || !*options)
- return 0;
-
- while ((this_opt = strsep(&options, ",")) != NULL) {
- if (!*this_opt)
- continue;
-
- if (!strncmp(this_opt, "viafb_mode1=", 12))
- viafb_mode1 = kstrdup(this_opt + 12, GFP_KERNEL);
- else if (!strncmp(this_opt, "viafb_mode=", 11))
- viafb_mode = kstrdup(this_opt + 11, GFP_KERNEL);
- else if (!strncmp(this_opt, "viafb_bpp1=", 11))
- strict_strtoul(this_opt + 11, 0,
- (unsigned long *)&viafb_bpp1);
- else if (!strncmp(this_opt, "viafb_bpp=", 10))
- strict_strtoul(this_opt + 10, 0,
- (unsigned long *)&viafb_bpp);
- else if (!strncmp(this_opt, "viafb_refresh1=", 15))
- strict_strtoul(this_opt + 15, 0,
- (unsigned long *)&viafb_refresh1);
- else if (!strncmp(this_opt, "viafb_refresh=", 14))
- strict_strtoul(this_opt + 14, 0,
- (unsigned long *)&viafb_refresh);
- else if (!strncmp(this_opt, "viafb_lcd_dsp_method=", 21))
- strict_strtoul(this_opt + 21, 0,
- (unsigned long *)&viafb_lcd_dsp_method);
- else if (!strncmp(this_opt, "viafb_lcd_panel_id=", 19))
- strict_strtoul(this_opt + 19, 0,
- (unsigned long *)&viafb_lcd_panel_id);
- else if (!strncmp(this_opt, "viafb_accel=", 12))
- strict_strtoul(this_opt + 12, 0,
- (unsigned long *)&viafb_accel);
- else if (!strncmp(this_opt, "viafb_SAMM_ON=", 14))
- strict_strtoul(this_opt + 14, 0,
- (unsigned long *)&viafb_SAMM_ON);
- else if (!strncmp(this_opt, "viafb_active_dev=", 17))
- viafb_active_dev = kstrdup(this_opt + 17, GFP_KERNEL);
- else if (!strncmp(this_opt,
- "viafb_display_hardware_layout=", 30))
- strict_strtoul(this_opt + 30, 0,
- (unsigned long *)&viafb_display_hardware_layout);
- else if (!strncmp(this_opt, "viafb_second_size=", 18))
- strict_strtoul(this_opt + 18, 0,
- (unsigned long *)&viafb_second_size);
- else if (!strncmp(this_opt,
- "viafb_platform_epia_dvi=", 24))
- strict_strtoul(this_opt + 24, 0,
- (unsigned long *)&viafb_platform_epia_dvi);
- else if (!strncmp(this_opt,
- "viafb_device_lcd_dualedge=", 26))
- strict_strtoul(this_opt + 26, 0,
- (unsigned long *)&viafb_device_lcd_dualedge);
- else if (!strncmp(this_opt, "viafb_bus_width=", 16))
- strict_strtoul(this_opt + 16, 0,
- (unsigned long *)&viafb_bus_width);
- else if (!strncmp(this_opt, "viafb_lcd_mode=", 15))
- strict_strtoul(this_opt + 15, 0,
- (unsigned long *)&viafb_lcd_mode);
- else if (!strncmp(this_opt, "viafb_video_dev=", 16))
- viafb_video_dev = kstrdup(this_opt + 16, GFP_KERNEL);
- else if (!strncmp(this_opt, "viafb_lcd_port=", 15))
- viafb_lcd_port = kstrdup(this_opt + 15, GFP_KERNEL);
- else if (!strncmp(this_opt, "viafb_dvi_port=", 15))
- viafb_dvi_port = kstrdup(this_opt + 15, GFP_KERNEL);
- }
- return 0;
-}
-#endif
-
-static int __init viafb_init(void)
-{
-#ifndef MODULE
- char *option = NULL;
- if (fb_get_options("viafb", &option))
- return -ENODEV;
- viafb_setup(option);
-#endif
- printk(KERN_INFO
- "VIA Graphics Intergration Chipset framebuffer %d.%d initializing\n",
- VERSION_MAJOR, VERSION_MINOR);
- return via_pci_probe();
-}
-
-static void __exit viafb_exit(void)
-{
- DEBUG_MSG(KERN_INFO "viafb_exit!\n");
- via_pci_remove();
-}
-
-static struct fb_ops viafb_ops = {
- .owner = THIS_MODULE,
- .fb_open = viafb_open,
- .fb_release = viafb_release,
- .fb_check_var = viafb_check_var,
- .fb_set_par = viafb_set_par,
- .fb_setcolreg = viafb_setcolreg,
- .fb_pan_display = viafb_pan_display,
- .fb_blank = viafb_blank,
- .fb_fillrect = viafb_fillrect,
- .fb_copyarea = viafb_copyarea,
- .fb_imageblit = viafb_imageblit,
- .fb_cursor = viafb_cursor,
- .fb_ioctl = viafb_ioctl,
- .fb_sync = viafb_sync,
- .fb_setcmap = viafb_setcmap,
-};
-
-module_init(viafb_init);
-module_exit(viafb_exit);
-
-#ifdef MODULE
-module_param(viafb_memsize, int, 0);
-
-module_param(viafb_mode, charp, 0);
-MODULE_PARM_DESC(viafb_mode, "Set resolution (default=640x480)");
-
-module_param(viafb_mode1, charp, 0);
-MODULE_PARM_DESC(viafb_mode1, "Set resolution (default=640x480)");
-
-module_param(viafb_bpp, int, 0);
-MODULE_PARM_DESC(viafb_bpp, "Set color depth (default=32bpp)");
-
-module_param(viafb_bpp1, int, 0);
-MODULE_PARM_DESC(viafb_bpp1, "Set color depth (default=32bpp)");
-
-module_param(viafb_refresh, int, 0);
-MODULE_PARM_DESC(viafb_refresh,
- "Set CRT viafb_refresh rate (default = 60)");
-
-module_param(viafb_refresh1, int, 0);
-MODULE_PARM_DESC(viafb_refresh1,
- "Set CRT refresh rate (default = 60)");
-
-module_param(viafb_lcd_panel_id, int, 0);
-MODULE_PARM_DESC(viafb_lcd_panel_id,
- "Set Flat Panel type(Default=1024x768)");
-
-module_param(viafb_lcd_dsp_method, int, 0);
-MODULE_PARM_DESC(viafb_lcd_dsp_method,
- "Set Flat Panel display scaling method.(Default=Expandsion)");
-
-module_param(viafb_SAMM_ON, int, 0);
-MODULE_PARM_DESC(viafb_SAMM_ON,
- "Turn on/off flag of SAMM(Default=OFF)");
-
-module_param(viafb_accel, int, 0);
-MODULE_PARM_DESC(viafb_accel,
- "Set 2D Hardware Acceleration.(Default = OFF)");
-
-module_param(viafb_active_dev, charp, 0);
-MODULE_PARM_DESC(viafb_active_dev, "Specify active devices.");
-
-module_param(viafb_display_hardware_layout, int, 0);
-MODULE_PARM_DESC(viafb_display_hardware_layout,
- "Display Hardware Layout (LCD Only, DVI Only...,etc)");
-
-module_param(viafb_second_size, int, 0);
-MODULE_PARM_DESC(viafb_second_size,
- "Set secondary device memory size");
-
-module_param(viafb_dual_fb, int, 0);
-MODULE_PARM_DESC(viafb_dual_fb,
- "Turn on/off flag of dual framebuffer devices.(Default = OFF)");
-
-module_param(viafb_platform_epia_dvi, int, 0);
-MODULE_PARM_DESC(viafb_platform_epia_dvi,
- "Turn on/off flag of DVI devices on EPIA board.(Default = OFF)");
-
-module_param(viafb_device_lcd_dualedge, int, 0);
-MODULE_PARM_DESC(viafb_device_lcd_dualedge,
- "Turn on/off flag of dual edge panel.(Default = OFF)");
-
-module_param(viafb_bus_width, int, 0);
-MODULE_PARM_DESC(viafb_bus_width,
- "Set bus width of panel.(Default = 12)");
-
-module_param(viafb_lcd_mode, int, 0);
-MODULE_PARM_DESC(viafb_lcd_mode,
- "Set Flat Panel mode(Default=OPENLDI)");
-
-module_param(viafb_video_dev, charp, 0);
-MODULE_PARM_DESC(viafb_video_dev, "Specify video devices.");
-
-module_param(viafb_lcd_port, charp, 0);
-MODULE_PARM_DESC(viafb_lcd_port, "Specify LCD output port.");
-
-module_param(viafb_dvi_port, charp, 0);
-MODULE_PARM_DESC(viafb_dvi_port, "Specify DVI output port.");
-
-MODULE_LICENSE("GPL");
-#endif
diff --git a/drivers/video/via/viafbdev.h b/drivers/video/via/viafbdev.h
deleted file mode 100644
index a4158e87287..00000000000
--- a/drivers/video/via/viafbdev.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __VIAFBDEV_H__
-#define __VIAFBDEV_H__
-
-#include <linux/proc_fs.h>
-#include <linux/fb.h>
-
-#include "ioctl.h"
-#include "share.h"
-#include "chip.h"
-#include "hw.h"
-#include "via_i2c.h"
-
-#define VERSION_MAJOR 2
-#define VERSION_KERNEL 6 /* For kernel 2.6 */
-
-#define VERSION_OS 0 /* 0: for 32 bits OS, 1: for 64 bits OS */
-#define VERSION_MINOR 4
-
-struct viafb_par {
- int bpp;
- int hres;
- int vres;
- int linelength;
- u32 xoffset;
- u32 yoffset;
-
- void __iomem *fbmem_virt; /*framebuffer virtual memory address */
- void __iomem *io_virt; /*iospace virtual memory address */
- unsigned int fbmem; /*framebuffer physical memory address */
- unsigned int memsize; /*size of fbmem */
- unsigned int io; /*io space address */
- unsigned long mmio_base; /*mmio base address */
- unsigned long mmio_len; /*mmio base length */
- u32 fbmem_free; /* Free FB memory */
- u32 fbmem_used; /* Use FB memory size */
- u32 cursor_start; /* Cursor Start Address */
- u32 VQ_start; /* Virtual Queue Start Address */
- u32 VQ_end; /* Virtual Queue End Address */
- u32 iga_path;
- struct proc_dir_entry *proc_entry; /*viafb proc entry */
- u8 duoview; /*Is working in duoview mode? */
-
- /* I2C stuff */
- struct via_i2c_stuff i2c_stuff;
-
- /* All the information will be needed to set engine */
- struct tmds_setting_information *tmds_setting_info;
- struct crt_setting_information *crt_setting_info;
- struct lvds_setting_information *lvds_setting_info;
- struct lvds_setting_information *lvds_setting_info2;
- struct chip_information *chip_info;
-
- /* some information related to video playing */
- int video_on_crt;
- int video_on_dvi;
- int video_on_lcd;
-
-};
-struct viafb_modeinfo {
- u32 xres;
- u32 yres;
- int mode_index;
- char *mode_res;
-};
-extern unsigned int viafb_second_virtual_yres;
-extern unsigned int viafb_second_virtual_xres;
-extern unsigned int viafb_second_offset;
-extern int viafb_second_size;
-extern int viafb_SAMM_ON;
-extern int viafb_dual_fb;
-extern int viafb_LCD2_ON;
-extern int viafb_LCD_ON;
-extern int viafb_DVI_ON;
-extern int viafb_accel;
-extern int viafb_hotplug;
-extern int viafb_memsize;
-
-extern int strict_strtoul(const char *cp, unsigned int base,
- unsigned long *res);
-
-void viafb_memory_pitch_patch(struct fb_info *info);
-void viafb_fill_var_timing_info(struct fb_var_screeninfo *var, int refresh,
- int mode_index);
-int viafb_get_mode_index(int hres, int vres, int flag);
-u8 viafb_gpio_i2c_read_lvds(struct lvds_setting_information
- *plvds_setting_info, struct lvds_chip_information
- *plvds_chip_info, u8 index);
-void viafb_gpio_i2c_write_mask_lvds(struct lvds_setting_information
- *plvds_setting_info, struct lvds_chip_information
- *plvds_chip_info, struct IODATA io_data);
-#endif /* __VIAFBDEV_H__ */
diff --git a/drivers/video/via/viamode.c b/drivers/video/via/viamode.c
deleted file mode 100644
index 6dcf583a837..00000000000
--- a/drivers/video/via/viamode.c
+++ /dev/null
@@ -1,1086 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-struct res_map_refresh res_map_refresh_tbl[] = {
-/*hres, vres, vclock, vmode_refresh*/
- {480, 640, RES_480X640_60HZ_PIXCLOCK, 60},
- {640, 480, RES_640X480_60HZ_PIXCLOCK, 60},
- {640, 480, RES_640X480_75HZ_PIXCLOCK, 75},
- {640, 480, RES_640X480_85HZ_PIXCLOCK, 85},
- {640, 480, RES_640X480_100HZ_PIXCLOCK, 100},
- {640, 480, RES_640X480_120HZ_PIXCLOCK, 120},
- {720, 480, RES_720X480_60HZ_PIXCLOCK, 60},
- {720, 576, RES_720X576_60HZ_PIXCLOCK, 60},
- {800, 480, RES_800X480_60HZ_PIXCLOCK, 60},
- {800, 600, RES_800X600_60HZ_PIXCLOCK, 60},
- {800, 600, RES_800X600_75HZ_PIXCLOCK, 75},
- {800, 600, RES_800X600_85HZ_PIXCLOCK, 85},
- {800, 600, RES_800X600_100HZ_PIXCLOCK, 100},
- {800, 600, RES_800X600_120HZ_PIXCLOCK, 120},
- {848, 480, RES_848X480_60HZ_PIXCLOCK, 60},
- {856, 480, RES_856X480_60HZ_PIXCLOCK, 60},
- {1024, 512, RES_1024X512_60HZ_PIXCLOCK, 60},
- {1024, 600, RES_1024X600_60HZ_PIXCLOCK, 60},
- {1024, 768, RES_1024X768_60HZ_PIXCLOCK, 60},
- {1024, 768, RES_1024X768_75HZ_PIXCLOCK, 75},
- {1024, 768, RES_1024X768_85HZ_PIXCLOCK, 85},
- {1024, 768, RES_1024X768_100HZ_PIXCLOCK, 100},
-/* {1152,864, RES_1152X864_70HZ_PIXCLOCK, 70},*/
- {1152, 864, RES_1152X864_75HZ_PIXCLOCK, 75},
- {1280, 768, RES_1280X768_60HZ_PIXCLOCK, 60},
- {1280, 800, RES_1280X800_60HZ_PIXCLOCK, 60},
- {1280, 960, RES_1280X960_60HZ_PIXCLOCK, 60},
- {1280, 1024, RES_1280X1024_60HZ_PIXCLOCK, 60},
- {1280, 1024, RES_1280X1024_75HZ_PIXCLOCK, 75},
- {1280, 1024, RES_1280X768_85HZ_PIXCLOCK, 85},
- {1440, 1050, RES_1440X1050_60HZ_PIXCLOCK, 60},
- {1600, 1200, RES_1600X1200_60HZ_PIXCLOCK, 60},
- {1600, 1200, RES_1600X1200_75HZ_PIXCLOCK, 75},
- {1280, 720, RES_1280X720_60HZ_PIXCLOCK, 60},
- {1920, 1080, RES_1920X1080_60HZ_PIXCLOCK, 60},
- {1400, 1050, RES_1400X1050_60HZ_PIXCLOCK, 60},
- {1400, 1050, RES_1400X1050_75HZ_PIXCLOCK, 75},
- {1368, 768, RES_1368X768_60HZ_PIXCLOCK, 60},
- {960, 600, RES_960X600_60HZ_PIXCLOCK, 60},
- {1000, 600, RES_1000X600_60HZ_PIXCLOCK, 60},
- {1024, 576, RES_1024X576_60HZ_PIXCLOCK, 60},
- {1088, 612, RES_1088X612_60HZ_PIXCLOCK, 60},
- {1152, 720, RES_1152X720_60HZ_PIXCLOCK, 60},
- {1200, 720, RES_1200X720_60HZ_PIXCLOCK, 60},
- {1280, 600, RES_1280X600_60HZ_PIXCLOCK, 60},
- {1280, 720, RES_1280X720_50HZ_PIXCLOCK, 50},
- {1280, 768, RES_1280X768_50HZ_PIXCLOCK, 50},
- {1360, 768, RES_1360X768_60HZ_PIXCLOCK, 60},
- {1366, 768, RES_1366X768_50HZ_PIXCLOCK, 50},
- {1366, 768, RES_1366X768_60HZ_PIXCLOCK, 60},
- {1440, 900, RES_1440X900_60HZ_PIXCLOCK, 60},
- {1440, 900, RES_1440X900_75HZ_PIXCLOCK, 75},
- {1600, 900, RES_1600X900_60HZ_PIXCLOCK, 60},
- {1600, 1024, RES_1600X1024_60HZ_PIXCLOCK, 60},
- {1680, 1050, RES_1680X1050_60HZ_PIXCLOCK, 60},
- {1680, 1050, RES_1680X1050_75HZ_PIXCLOCK, 75},
- {1792, 1344, RES_1792X1344_60HZ_PIXCLOCK, 60},
- {1856, 1392, RES_1856X1392_60HZ_PIXCLOCK, 60},
- {1920, 1200, RES_1920X1200_60HZ_PIXCLOCK, 60},
- {1920, 1440, RES_1920X1440_60HZ_PIXCLOCK, 60},
- {1920, 1440, RES_1920X1440_75HZ_PIXCLOCK, 75},
- {2048, 1536, RES_2048X1536_60HZ_PIXCLOCK, 60}
-};
-
-struct io_reg CN400_ModeXregs[] = { {VIASR, SR10, 0xFF, 0x01},
-{VIASR, SR15, 0x02, 0x02},
-{VIASR, SR16, 0xBF, 0x08},
-{VIASR, SR17, 0xFF, 0x1F},
-{VIASR, SR18, 0xFF, 0x4E},
-{VIASR, SR1A, 0xFB, 0x08},
-{VIASR, SR1E, 0x0F, 0x01},
-{VIASR, SR2A, 0xFF, 0x00},
-{VIACR, CR0A, 0xFF, 0x1E}, /* Cursor Start */
-{VIACR, CR0B, 0xFF, 0x00}, /* Cursor End */
-{VIACR, CR0E, 0xFF, 0x00}, /* Cursor Location High */
-{VIACR, CR0F, 0xFF, 0x00}, /* Cursor Localtion Low */
-{VIACR, CR32, 0xFF, 0x00},
-{VIACR, CR33, 0xFF, 0x00},
-{VIACR, CR34, 0xFF, 0x00},
-{VIACR, CR35, 0xFF, 0x00},
-{VIACR, CR36, 0x08, 0x00},
-{VIACR, CR62, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR63, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR64, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR69, 0xFF, 0x00},
-{VIACR, CR6A, 0xFF, 0x40},
-{VIACR, CR6B, 0xFF, 0x00},
-{VIACR, CR6C, 0xFF, 0x00},
-{VIACR, CR7A, 0xFF, 0x01}, /* LCD Scaling Parameter 1 */
-{VIACR, CR7B, 0xFF, 0x02}, /* LCD Scaling Parameter 2 */
-{VIACR, CR7C, 0xFF, 0x03}, /* LCD Scaling Parameter 3 */
-{VIACR, CR7D, 0xFF, 0x04}, /* LCD Scaling Parameter 4 */
-{VIACR, CR7E, 0xFF, 0x07}, /* LCD Scaling Parameter 5 */
-{VIACR, CR7F, 0xFF, 0x0A}, /* LCD Scaling Parameter 6 */
-{VIACR, CR80, 0xFF, 0x0D}, /* LCD Scaling Parameter 7 */
-{VIACR, CR81, 0xFF, 0x13}, /* LCD Scaling Parameter 8 */
-{VIACR, CR82, 0xFF, 0x16}, /* LCD Scaling Parameter 9 */
-{VIACR, CR83, 0xFF, 0x19}, /* LCD Scaling Parameter 10 */
-{VIACR, CR84, 0xFF, 0x1C}, /* LCD Scaling Parameter 11 */
-{VIACR, CR85, 0xFF, 0x1D}, /* LCD Scaling Parameter 12 */
-{VIACR, CR86, 0xFF, 0x1E}, /* LCD Scaling Parameter 13 */
-{VIACR, CR87, 0xFF, 0x1F}, /* LCD Scaling Parameter 14 */
-{VIACR, CR88, 0xFF, 0x40}, /* LCD Panel Type */
-{VIACR, CR89, 0xFF, 0x00}, /* LCD Timing Control 0 */
-{VIACR, CR8A, 0xFF, 0x88}, /* LCD Timing Control 1 */
-{VIACR, CR8B, 0xFF, 0x69}, /* LCD Power Sequence Control 0 */
-{VIACR, CR8C, 0xFF, 0x57}, /* LCD Power Sequence Control 1 */
-{VIACR, CR8D, 0xFF, 0x00}, /* LCD Power Sequence Control 2 */
-{VIACR, CR8E, 0xFF, 0x7B}, /* LCD Power Sequence Control 3 */
-{VIACR, CR8F, 0xFF, 0x03}, /* LCD Power Sequence Control 4 */
-{VIACR, CR90, 0xFF, 0x30}, /* LCD Power Sequence Control 5 */
-{VIACR, CR91, 0xFF, 0xA0}, /* 24/12 bit LVDS Data off */
-{VIACR, CR96, 0xFF, 0x00},
-{VIACR, CR97, 0xFF, 0x00},
-{VIACR, CR99, 0xFF, 0x00},
-{VIACR, CR9B, 0xFF, 0x00}
-};
-
-/* Video Mode Table for VT3314 chipset*/
-/* Common Setting for Video Mode */
-struct io_reg CN700_ModeXregs[] = { {VIASR, SR10, 0xFF, 0x01},
-{VIASR, SR15, 0x02, 0x02},
-{VIASR, SR16, 0xBF, 0x08},
-{VIASR, SR17, 0xFF, 0x1F},
-{VIASR, SR18, 0xFF, 0x4E},
-{VIASR, SR1A, 0xFB, 0x82},
-{VIASR, SR1B, 0xFF, 0xF0},
-{VIASR, SR1F, 0xFF, 0x00},
-{VIASR, SR1E, 0xFF, 0x01},
-{VIASR, SR22, 0xFF, 0x1F},
-{VIASR, SR2A, 0x0F, 0x00},
-{VIASR, SR2E, 0xFF, 0xFF},
-{VIASR, SR3F, 0xFF, 0xFF},
-{VIASR, SR40, 0xF7, 0x00},
-{VIASR, CR30, 0xFF, 0x04},
-{VIACR, CR32, 0xFF, 0x00},
-{VIACR, CR33, 0x7F, 0x00},
-{VIACR, CR34, 0xFF, 0x00},
-{VIACR, CR35, 0xFF, 0x00},
-{VIACR, CR36, 0xFF, 0x31},
-{VIACR, CR41, 0xFF, 0x80},
-{VIACR, CR42, 0xFF, 0x00},
-{VIACR, CR55, 0x80, 0x00},
-{VIACR, CR5D, 0x80, 0x00}, /*Horizontal Retrace Start bit[11] should be 0*/
-{VIACR, CR62, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR63, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR64, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR68, 0xFF, 0x67}, /* Default FIFO For IGA2 */
-{VIACR, CR69, 0xFF, 0x00},
-{VIACR, CR6A, 0xFD, 0x40},
-{VIACR, CR6B, 0xFF, 0x00},
-{VIACR, CR6C, 0xFF, 0x00},
-{VIACR, CR77, 0xFF, 0x00}, /* LCD scaling Factor */
-{VIACR, CR78, 0xFF, 0x00}, /* LCD scaling Factor */
-{VIACR, CR79, 0xFF, 0x00}, /* LCD scaling Factor */
-{VIACR, CR9F, 0x03, 0x00}, /* LCD scaling Factor */
-{VIACR, CR7A, 0xFF, 0x01}, /* LCD Scaling Parameter 1 */
-{VIACR, CR7B, 0xFF, 0x02}, /* LCD Scaling Parameter 2 */
-{VIACR, CR7C, 0xFF, 0x03}, /* LCD Scaling Parameter 3 */
-{VIACR, CR7D, 0xFF, 0x04}, /* LCD Scaling Parameter 4 */
-{VIACR, CR7E, 0xFF, 0x07}, /* LCD Scaling Parameter 5 */
-{VIACR, CR7F, 0xFF, 0x0A}, /* LCD Scaling Parameter 6 */
-{VIACR, CR80, 0xFF, 0x0D}, /* LCD Scaling Parameter 7 */
-{VIACR, CR81, 0xFF, 0x13}, /* LCD Scaling Parameter 8 */
-{VIACR, CR82, 0xFF, 0x16}, /* LCD Scaling Parameter 9 */
-{VIACR, CR83, 0xFF, 0x19}, /* LCD Scaling Parameter 10 */
-{VIACR, CR84, 0xFF, 0x1C}, /* LCD Scaling Parameter 11 */
-{VIACR, CR85, 0xFF, 0x1D}, /* LCD Scaling Parameter 12 */
-{VIACR, CR86, 0xFF, 0x1E}, /* LCD Scaling Parameter 13 */
-{VIACR, CR87, 0xFF, 0x1F}, /* LCD Scaling Parameter 14 */
-{VIACR, CR88, 0xFF, 0x40}, /* LCD Panel Type */
-{VIACR, CR89, 0xFF, 0x00}, /* LCD Timing Control 0 */
-{VIACR, CR8A, 0xFF, 0x88}, /* LCD Timing Control 1 */
-{VIACR, CR8B, 0xFF, 0x5D}, /* LCD Power Sequence Control 0 */
-{VIACR, CR8C, 0xFF, 0x2B}, /* LCD Power Sequence Control 1 */
-{VIACR, CR8D, 0xFF, 0x6F}, /* LCD Power Sequence Control 2 */
-{VIACR, CR8E, 0xFF, 0x2B}, /* LCD Power Sequence Control 3 */
-{VIACR, CR8F, 0xFF, 0x01}, /* LCD Power Sequence Control 4 */
-{VIACR, CR90, 0xFF, 0x01}, /* LCD Power Sequence Control 5 */
-{VIACR, CR91, 0xFF, 0xA0}, /* 24/12 bit LVDS Data off */
-{VIACR, CR96, 0xFF, 0x00},
-{VIACR, CR97, 0xFF, 0x00},
-{VIACR, CR99, 0xFF, 0x00},
-{VIACR, CR9B, 0xFF, 0x00},
-{VIACR, CR9D, 0xFF, 0x80},
-{VIACR, CR9E, 0xFF, 0x80}
-};
-
-struct io_reg KM400_ModeXregs[] = {
- {VIASR, SR10, 0xFF, 0x01}, /* Unlock Register */
- {VIASR, SR16, 0xFF, 0x08}, /* Display FIFO threshold Control */
- {VIASR, SR17, 0xFF, 0x1F}, /* Display FIFO Control */
- {VIASR, SR18, 0xFF, 0x4E}, /* GFX PREQ threshold */
- {VIASR, SR1A, 0xFF, 0x0a}, /* GFX PREQ threshold */
- {VIASR, SR1F, 0xFF, 0x00}, /* Memory Control 0 */
- {VIASR, SR1B, 0xFF, 0xF0}, /* Power Management Control 0 */
- {VIASR, SR1E, 0xFF, 0x01}, /* Power Management Control */
- {VIASR, SR20, 0xFF, 0x00}, /* Sequencer Arbiter Control 0 */
- {VIASR, SR21, 0xFF, 0x00}, /* Sequencer Arbiter Control 1 */
- {VIASR, SR22, 0xFF, 0x1F}, /* Display Arbiter Control 1 */
- {VIASR, SR2A, 0xFF, 0x00}, /* Power Management Control 5 */
- {VIASR, SR2D, 0xFF, 0xFF}, /* Power Management Control 1 */
- {VIASR, SR2E, 0xFF, 0xFF}, /* Power Management Control 2 */
- {VIACR, CR0A, 0xFF, 0x1E}, /* Cursor Start */
- {VIACR, CR0B, 0xFF, 0x00}, /* Cursor End */
- {VIACR, CR0E, 0xFF, 0x00}, /* Cursor Location High */
- {VIACR, CR0F, 0xFF, 0x00}, /* Cursor Localtion Low */
- {VIACR, CR33, 0xFF, 0x00},
- {VIACR, CR55, 0x80, 0x00},
- {VIACR, CR5D, 0x80, 0x00},
- {VIACR, CR36, 0xFF, 0x01}, /* Power Mangement 3 */
- {VIACR, CR62, 0xFF, 0x00}, /* Secondary Display Starting Address */
- {VIACR, CR63, 0xFF, 0x00}, /* Secondary Display Starting Address */
- {VIACR, CR64, 0xFF, 0x00}, /* Secondary Display Starting Address */
- {VIACR, CR68, 0xFF, 0x67}, /* Default FIFO For IGA2 */
- {VIACR, CR6A, 0x20, 0x20}, /* Extended FIFO On */
- {VIACR, CR7A, 0xFF, 0x01}, /* LCD Scaling Parameter 1 */
- {VIACR, CR7B, 0xFF, 0x02}, /* LCD Scaling Parameter 2 */
- {VIACR, CR7C, 0xFF, 0x03}, /* LCD Scaling Parameter 3 */
- {VIACR, CR7D, 0xFF, 0x04}, /* LCD Scaling Parameter 4 */
- {VIACR, CR7E, 0xFF, 0x07}, /* LCD Scaling Parameter 5 */
- {VIACR, CR7F, 0xFF, 0x0A}, /* LCD Scaling Parameter 6 */
- {VIACR, CR80, 0xFF, 0x0D}, /* LCD Scaling Parameter 7 */
- {VIACR, CR81, 0xFF, 0x13}, /* LCD Scaling Parameter 8 */
- {VIACR, CR82, 0xFF, 0x16}, /* LCD Scaling Parameter 9 */
- {VIACR, CR83, 0xFF, 0x19}, /* LCD Scaling Parameter 10 */
- {VIACR, CR84, 0xFF, 0x1C}, /* LCD Scaling Parameter 11 */
- {VIACR, CR85, 0xFF, 0x1D}, /* LCD Scaling Parameter 12 */
- {VIACR, CR86, 0xFF, 0x1E}, /* LCD Scaling Parameter 13 */
- {VIACR, CR87, 0xFF, 0x1F}, /* LCD Scaling Parameter 14 */
- {VIACR, CR88, 0xFF, 0x40}, /* LCD Panel Type */
- {VIACR, CR89, 0xFF, 0x00}, /* LCD Timing Control 0 */
- {VIACR, CR8A, 0xFF, 0x88}, /* LCD Timing Control 1 */
- {VIACR, CR8B, 0xFF, 0x2D}, /* LCD Power Sequence Control 0 */
- {VIACR, CR8C, 0xFF, 0x2D}, /* LCD Power Sequence Control 1 */
- {VIACR, CR8D, 0xFF, 0xC8}, /* LCD Power Sequence Control 2 */
- {VIACR, CR8E, 0xFF, 0x36}, /* LCD Power Sequence Control 3 */
- {VIACR, CR8F, 0xFF, 0x00}, /* LCD Power Sequence Control 4 */
- {VIACR, CR90, 0xFF, 0x10}, /* LCD Power Sequence Control 5 */
- {VIACR, CR91, 0xFF, 0xA0}, /* 24/12 bit LVDS Data off */
- {VIACR, CR96, 0xFF, 0x03}, /* DVP0 ; DVP0 Clock Skew */
- {VIACR, CR97, 0xFF, 0x03}, /* DFP high ; DFPH Clock Skew */
- {VIACR, CR99, 0xFF, 0x03}, /* DFP low ; DFPL Clock Skew*/
- {VIACR, CR9B, 0xFF, 0x07} /* DVI on DVP1 ; DVP1 Clock Skew*/
-};
-
-/* For VT3324: Common Setting for Video Mode */
-struct io_reg CX700_ModeXregs[] = { {VIASR, SR10, 0xFF, 0x01},
-{VIASR, SR15, 0x02, 0x02},
-{VIASR, SR16, 0xBF, 0x08},
-{VIASR, SR17, 0xFF, 0x1F},
-{VIASR, SR18, 0xFF, 0x4E},
-{VIASR, SR1A, 0xFB, 0x08},
-{VIASR, SR1B, 0xFF, 0xF0},
-{VIASR, SR1E, 0xFF, 0x01},
-{VIASR, SR2A, 0xFF, 0x00},
-{VIASR, SR2D, 0xFF, 0xFF}, /* VCK and LCK PLL power on. */
-{VIACR, CR0A, 0xFF, 0x1E}, /* Cursor Start */
-{VIACR, CR0B, 0xFF, 0x00}, /* Cursor End */
-{VIACR, CR0E, 0xFF, 0x00}, /* Cursor Location High */
-{VIACR, CR0F, 0xFF, 0x00}, /* Cursor Localtion Low */
-{VIACR, CR32, 0xFF, 0x00},
-{VIACR, CR33, 0xFF, 0x00},
-{VIACR, CR34, 0xFF, 0x00},
-{VIACR, CR35, 0xFF, 0x00},
-{VIACR, CR36, 0x08, 0x00},
-{VIACR, CR47, 0xC8, 0x00}, /* Clear VCK Plus. */
-{VIACR, CR62, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR63, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR64, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CRA3, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR69, 0xFF, 0x00},
-{VIACR, CR6A, 0xFF, 0x40},
-{VIACR, CR6B, 0xFF, 0x00},
-{VIACR, CR6C, 0xFF, 0x00},
-{VIACR, CR7A, 0xFF, 0x01}, /* LCD Scaling Parameter 1 */
-{VIACR, CR7B, 0xFF, 0x02}, /* LCD Scaling Parameter 2 */
-{VIACR, CR7C, 0xFF, 0x03}, /* LCD Scaling Parameter 3 */
-{VIACR, CR7D, 0xFF, 0x04}, /* LCD Scaling Parameter 4 */
-{VIACR, CR7E, 0xFF, 0x07}, /* LCD Scaling Parameter 5 */
-{VIACR, CR7F, 0xFF, 0x0A}, /* LCD Scaling Parameter 6 */
-{VIACR, CR80, 0xFF, 0x0D}, /* LCD Scaling Parameter 7 */
-{VIACR, CR81, 0xFF, 0x13}, /* LCD Scaling Parameter 8 */
-{VIACR, CR82, 0xFF, 0x16}, /* LCD Scaling Parameter 9 */
-{VIACR, CR83, 0xFF, 0x19}, /* LCD Scaling Parameter 10 */
-{VIACR, CR84, 0xFF, 0x1C}, /* LCD Scaling Parameter 11 */
-{VIACR, CR85, 0xFF, 0x1D}, /* LCD Scaling Parameter 12 */
-{VIACR, CR86, 0xFF, 0x1E}, /* LCD Scaling Parameter 13 */
-{VIACR, CR87, 0xFF, 0x1F}, /* LCD Scaling Parameter 14 */
-{VIACR, CR88, 0xFF, 0x40}, /* LCD Panel Type */
-{VIACR, CR89, 0xFF, 0x00}, /* LCD Timing Control 0 */
-{VIACR, CR8A, 0xFF, 0x88}, /* LCD Timing Control 1 */
-{VIACR, CRD4, 0xFF, 0x81}, /* Second power sequence control */
-{VIACR, CR8B, 0xFF, 0x5D}, /* LCD Power Sequence Control 0 */
-{VIACR, CR8C, 0xFF, 0x2B}, /* LCD Power Sequence Control 1 */
-{VIACR, CR8D, 0xFF, 0x6F}, /* LCD Power Sequence Control 2 */
-{VIACR, CR8E, 0xFF, 0x2B}, /* LCD Power Sequence Control 3 */
-{VIACR, CR8F, 0xFF, 0x01}, /* LCD Power Sequence Control 4 */
-{VIACR, CR90, 0xFF, 0x01}, /* LCD Power Sequence Control 5 */
-{VIACR, CR91, 0xFF, 0x80}, /* 24/12 bit LVDS Data off */
-{VIACR, CR96, 0xFF, 0x00},
-{VIACR, CR97, 0xFF, 0x00},
-{VIACR, CR99, 0xFF, 0x00},
-{VIACR, CR9B, 0xFF, 0x00},
-{VIACR, CRD2, 0xFF, 0xFF} /* TMDS/LVDS control register. */
-};
-
-/* For VT3353: Common Setting for Video Mode */
-struct io_reg VX800_ModeXregs[] = { {VIASR, SR10, 0xFF, 0x01},
-{VIASR, SR15, 0x02, 0x02},
-{VIASR, SR16, 0xBF, 0x08},
-{VIASR, SR17, 0xFF, 0x1F},
-{VIASR, SR18, 0xFF, 0x4E},
-{VIASR, SR1A, 0xFB, 0x08},
-{VIASR, SR1B, 0xFF, 0xF0},
-{VIASR, SR1E, 0xFF, 0x01},
-{VIASR, SR2A, 0xFF, 0x00},
-{VIASR, SR2D, 0xFF, 0xFF}, /* VCK and LCK PLL power on. */
-{VIACR, CR0A, 0xFF, 0x1E}, /* Cursor Start */
-{VIACR, CR0B, 0xFF, 0x00}, /* Cursor End */
-{VIACR, CR0E, 0xFF, 0x00}, /* Cursor Location High */
-{VIACR, CR0F, 0xFF, 0x00}, /* Cursor Localtion Low */
-{VIACR, CR32, 0xFF, 0x00},
-{VIACR, CR33, 0xFF, 0x00},
-{VIACR, CR34, 0xFF, 0x00},
-{VIACR, CR35, 0xFF, 0x00},
-{VIACR, CR36, 0x08, 0x00},
-{VIACR, CR47, 0xC8, 0x00}, /* Clear VCK Plus. */
-{VIACR, CR62, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR63, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR64, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CRA3, 0xFF, 0x00}, /* Secondary Display Starting Address */
-{VIACR, CR69, 0xFF, 0x00},
-{VIACR, CR6A, 0xFF, 0x40},
-{VIACR, CR6B, 0xFF, 0x00},
-{VIACR, CR6C, 0xFF, 0x00},
-{VIACR, CR7A, 0xFF, 0x01}, /* LCD Scaling Parameter 1 */
-{VIACR, CR7B, 0xFF, 0x02}, /* LCD Scaling Parameter 2 */
-{VIACR, CR7C, 0xFF, 0x03}, /* LCD Scaling Parameter 3 */
-{VIACR, CR7D, 0xFF, 0x04}, /* LCD Scaling Parameter 4 */
-{VIACR, CR7E, 0xFF, 0x07}, /* LCD Scaling Parameter 5 */
-{VIACR, CR7F, 0xFF, 0x0A}, /* LCD Scaling Parameter 6 */
-{VIACR, CR80, 0xFF, 0x0D}, /* LCD Scaling Parameter 7 */
-{VIACR, CR81, 0xFF, 0x13}, /* LCD Scaling Parameter 8 */
-{VIACR, CR82, 0xFF, 0x16}, /* LCD Scaling Parameter 9 */
-{VIACR, CR83, 0xFF, 0x19}, /* LCD Scaling Parameter 10 */
-{VIACR, CR84, 0xFF, 0x1C}, /* LCD Scaling Parameter 11 */
-{VIACR, CR85, 0xFF, 0x1D}, /* LCD Scaling Parameter 12 */
-{VIACR, CR86, 0xFF, 0x1E}, /* LCD Scaling Parameter 13 */
-{VIACR, CR87, 0xFF, 0x1F}, /* LCD Scaling Parameter 14 */
-{VIACR, CR88, 0xFF, 0x40}, /* LCD Panel Type */
-{VIACR, CR89, 0xFF, 0x00}, /* LCD Timing Control 0 */
-{VIACR, CR8A, 0xFF, 0x88}, /* LCD Timing Control 1 */
-{VIACR, CRD4, 0xFF, 0x81}, /* Second power sequence control */
-{VIACR, CR8B, 0xFF, 0x5D}, /* LCD Power Sequence Control 0 */
-{VIACR, CR8C, 0xFF, 0x2B}, /* LCD Power Sequence Control 1 */
-{VIACR, CR8D, 0xFF, 0x6F}, /* LCD Power Sequence Control 2 */
-{VIACR, CR8E, 0xFF, 0x2B}, /* LCD Power Sequence Control 3 */
-{VIACR, CR8F, 0xFF, 0x01}, /* LCD Power Sequence Control 4 */
-{VIACR, CR90, 0xFF, 0x01}, /* LCD Power Sequence Control 5 */
-{VIACR, CR91, 0xFF, 0x80}, /* 24/12 bit LVDS Data off */
-{VIACR, CR96, 0xFF, 0x00},
-{VIACR, CR97, 0xFF, 0x00},
-{VIACR, CR99, 0xFF, 0x00},
-{VIACR, CR9B, 0xFF, 0x00},
-{VIACR, CRD2, 0xFF, 0xFF} /* TMDS/LVDS control register. */
-};
-
-/* Video Mode Table */
-/* Common Setting for Video Mode */
-struct io_reg CLE266_ModeXregs[] = { {VIASR, SR1E, 0xF0, 0x00},
-{VIASR, SR2A, 0x0F, 0x00},
-{VIASR, SR15, 0x02, 0x02},
-{VIASR, SR16, 0xBF, 0x08},
-{VIASR, SR17, 0xFF, 0x1F},
-{VIASR, SR18, 0xFF, 0x4E},
-{VIASR, SR1A, 0xFB, 0x08},
-
-{VIACR, CR32, 0xFF, 0x00},
-{VIACR, CR34, 0xFF, 0x00},
-{VIACR, CR35, 0xFF, 0x00},
-{VIACR, CR36, 0x08, 0x00},
-{VIACR, CR6A, 0xFF, 0x80},
-{VIACR, CR6A, 0xFF, 0xC0},
-
-{VIACR, CR55, 0x80, 0x00},
-{VIACR, CR5D, 0x80, 0x00},
-
-{VIAGR, GR20, 0xFF, 0x00},
-{VIAGR, GR21, 0xFF, 0x00},
-{VIAGR, GR22, 0xFF, 0x00},
- /* LCD Parameters */
-{VIACR, CR7A, 0xFF, 0x01}, /* LCD Parameter 1 */
-{VIACR, CR7B, 0xFF, 0x02}, /* LCD Parameter 2 */
-{VIACR, CR7C, 0xFF, 0x03}, /* LCD Parameter 3 */
-{VIACR, CR7D, 0xFF, 0x04}, /* LCD Parameter 4 */
-{VIACR, CR7E, 0xFF, 0x07}, /* LCD Parameter 5 */
-{VIACR, CR7F, 0xFF, 0x0A}, /* LCD Parameter 6 */
-{VIACR, CR80, 0xFF, 0x0D}, /* LCD Parameter 7 */
-{VIACR, CR81, 0xFF, 0x13}, /* LCD Parameter 8 */
-{VIACR, CR82, 0xFF, 0x16}, /* LCD Parameter 9 */
-{VIACR, CR83, 0xFF, 0x19}, /* LCD Parameter 10 */
-{VIACR, CR84, 0xFF, 0x1C}, /* LCD Parameter 11 */
-{VIACR, CR85, 0xFF, 0x1D}, /* LCD Parameter 12 */
-{VIACR, CR86, 0xFF, 0x1E}, /* LCD Parameter 13 */
-{VIACR, CR87, 0xFF, 0x1F}, /* LCD Parameter 14 */
-
-};
-
-/* Mode:1024X768 */
-struct io_reg PM1024x768[] = { {VIASR, 0x16, 0xBF, 0x0C},
-{VIASR, 0x18, 0xFF, 0x4C}
-};
-
-struct patch_table res_patch_table[] = {
- {VIA_RES_1024X768, ARRAY_SIZE(PM1024x768), PM1024x768}
-};
-
-/* struct VPITTable {
- unsigned char Misc;
- unsigned char SR[StdSR];
- unsigned char CR[StdCR];
- unsigned char GR[StdGR];
- unsigned char AR[StdAR];
- };*/
-
-struct VPITTable VPIT = {
- /* Msic */
- 0xC7,
- /* Sequencer */
- {0x01, 0x0F, 0x00, 0x0E},
- /* Graphic Controller */
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF},
- /* Attribute Controller */
- {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
- 0x01, 0x00, 0x0F, 0x00}
-};
-
-/********************/
-/* Mode Table */
-/********************/
-
-/* 480x640 */
-struct crt_mode_table CRTM480x640[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_25_175M, M480X640_R60_HSP, M480X640_R60_VSP,
- {624, 480, 480, 144, 504, 48, 663, 640, 640, 23, 641, 3} } /* GTF*/
-};
-
-/* 640x480*/
-struct crt_mode_table CRTM640x480[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_25_175M, M640X480_R60_HSP, M640X480_R60_VSP,
- {800, 640, 648, 144, 656, 96, 525, 480, 480, 45, 490, 2} },
- {REFRESH_75, CLK_31_500M, M640X480_R75_HSP, M640X480_R75_VSP,
- {840, 640, 640, 200, 656, 64, 500, 480, 480, 20, 481, 3} },
- {REFRESH_85, CLK_36_000M, M640X480_R85_HSP, M640X480_R85_VSP,
- {832, 640, 640, 192, 696, 56, 509, 480, 480, 29, 481, 3} },
- {REFRESH_100, CLK_43_163M, M640X480_R100_HSP, M640X480_R100_VSP,
- {848, 640, 640, 208, 680, 64, 509, 480, 480, 29, 481, 3} }, /*GTF*/
- {REFRESH_120, CLK_52_406M, M640X480_R120_HSP,
- M640X480_R120_VSP,
- {848, 640, 640, 208, 680, 64, 515, 480, 480, 35, 481,
- 3} } /*GTF*/
-};
-
-/*720x480 (GTF)*/
-struct crt_mode_table CRTM720x480[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_26_880M, M720X480_R60_HSP, M720X480_R60_VSP,
- {896, 720, 720, 176, 736, 72, 497, 480, 480, 17, 481, 3} }
-
-};
-
-/*720x576 (GTF)*/
-struct crt_mode_table CRTM720x576[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_32_668M, M720X576_R60_HSP, M720X576_R60_VSP,
- {912, 720, 720, 192, 744, 72, 597, 576, 576, 21, 577, 3} }
-};
-
-/* 800x480 (CVT) */
-struct crt_mode_table CRTM800x480[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_29_581M, M800X480_R60_HSP, M800X480_R60_VSP,
- {992, 800, 800, 192, 824, 72, 500, 480, 480, 20, 483, 7} }
-};
-
-/* 800x600*/
-struct crt_mode_table CRTM800x600[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_40_000M, M800X600_R60_HSP, M800X600_R60_VSP,
- {1056, 800, 800, 256, 840, 128, 628, 600, 600, 28, 601, 4} },
- {REFRESH_75, CLK_49_500M, M800X600_R75_HSP, M800X600_R75_VSP,
- {1056, 800, 800, 256, 816, 80, 625, 600, 600, 25, 601, 3} },
- {REFRESH_85, CLK_56_250M, M800X600_R85_HSP, M800X600_R85_VSP,
- {1048, 800, 800, 248, 832, 64, 631, 600, 600, 31, 601, 3} },
- {REFRESH_100, CLK_68_179M, M800X600_R100_HSP, M800X600_R100_VSP,
- {1072, 800, 800, 272, 848, 88, 636, 600, 600, 36, 601, 3} },
- {REFRESH_120, CLK_83_950M, M800X600_R120_HSP,
- M800X600_R120_VSP,
- {1088, 800, 800, 288, 856, 88, 643, 600, 600, 43, 601,
- 3} }
-};
-
-/* 848x480 (CVT) */
-struct crt_mode_table CRTM848x480[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_31_500M, M848X480_R60_HSP, M848X480_R60_VSP,
- {1056, 848, 848, 208, 872, 80, 500, 480, 480, 20, 483, 5} }
-};
-
-/*856x480 (GTF) convert to 852x480*/
-struct crt_mode_table CRTM852x480[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_31_728M, M852X480_R60_HSP, M852X480_R60_VSP,
- {1064, 856, 856, 208, 872, 88, 497, 480, 480, 17, 481, 3} }
-};
-
-/*1024x512 (GTF)*/
-struct crt_mode_table CRTM1024x512[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_41_291M, M1024X512_R60_HSP, M1024X512_R60_VSP,
- {1296, 1024, 1024, 272, 1056, 104, 531, 512, 512, 19, 513, 3} }
-
-};
-
-/* 1024x600*/
-struct crt_mode_table CRTM1024x600[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_48_875M, M1024X600_R60_HSP, M1024X600_R60_VSP,
- {1312, 1024, 1024, 288, 1064, 104, 622, 600, 600, 22, 601, 3} },
-};
-
-/* 1024x768*/
-struct crt_mode_table CRTM1024x768[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_65_000M, M1024X768_R60_HSP, M1024X768_R60_VSP,
- {1344, 1024, 1024, 320, 1048, 136, 806, 768, 768, 38, 771, 6} },
- {REFRESH_75, CLK_78_750M, M1024X768_R75_HSP, M1024X768_R75_VSP,
- {1312, 1024, 1024, 288, 1040, 96, 800, 768, 768, 32, 769, 3} },
- {REFRESH_85, CLK_94_500M, M1024X768_R85_HSP, M1024X768_R85_VSP,
- {1376, 1024, 1024, 352, 1072, 96, 808, 768, 768, 40, 769, 3} },
- {REFRESH_100, CLK_113_309M, M1024X768_R100_HSP, M1024X768_R100_VSP,
- {1392, 1024, 1024, 368, 1096, 112, 814, 768, 768, 46, 769, 3} }
-};
-
-/* 1152x864*/
-struct crt_mode_table CRTM1152x864[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_75, CLK_108_000M, M1152X864_R75_HSP, M1152X864_R75_VSP,
- {1600, 1152, 1152, 448, 1216, 128, 900, 864, 864, 36, 865, 3} }
-
-};
-
-/* 1280x720 (HDMI 720P)*/
-struct crt_mode_table CRTM1280x720[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_74_481M, M1280X720_R60_HSP, M1280X720_R60_VSP,
- {1648, 1280, 1280, 368, 1392, 40, 750, 720, 720, 30, 725, 5} },
- {REFRESH_50, CLK_60_466M, M1280X720_R50_HSP, M1280X720_R50_VSP,
- {1632, 1280, 1280, 352, 1328, 128, 741, 720, 720, 21, 721, 3} }
-};
-
-/*1280x768 (GTF)*/
-struct crt_mode_table CRTM1280x768[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_80_136M, M1280X768_R60_HSP, M1280X768_R60_VSP,
- {1680, 1280, 1280, 400, 1344, 136, 795, 768, 768, 27, 769, 3} },
- {REFRESH_50, CLK_65_178M, M1280X768_R50_HSP, M1280X768_R50_VSP,
- {1648, 1280, 1280, 368, 1336, 128, 791, 768, 768, 23, 769, 3} }
-};
-
-/* 1280x800 (CVT) */
-struct crt_mode_table CRTM1280x800[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_83_375M, M1280X800_R60_HSP, M1280X800_R60_VSP,
- {1680, 1280, 1280, 400, 1352, 128, 831, 800, 800, 31, 803, 6} }
-};
-
-/*1280x960*/
-struct crt_mode_table CRTM1280x960[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_108_000M, M1280X960_R60_HSP, M1280X960_R60_VSP,
- {1800, 1280, 1280, 520, 1376, 112, 1000, 960, 960, 40, 961, 3} }
-};
-
-/* 1280x1024*/
-struct crt_mode_table CRTM1280x1024[] = {
- /*r_rate,vclk,,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_108_000M, M1280X1024_R60_HSP, M1280X1024_R60_VSP,
- {1688, 1280, 1280, 408, 1328, 112, 1066, 1024, 1024, 42, 1025,
- 3} },
- {REFRESH_75, CLK_135_000M, M1280X1024_R75_HSP, M1280X1024_R75_VSP,
- {1688, 1280, 1280, 408, 1296, 144, 1066, 1024, 1024, 42, 1025,
- 3} },
- {REFRESH_85, CLK_157_500M, M1280X1024_R85_HSP, M1280X1024_R85_VSP,
- {1728, 1280, 1280, 448, 1344, 160, 1072, 1024, 1024, 48, 1025, 3} }
-};
-
-/* 1368x768 (GTF) */
-struct crt_mode_table CRTM1368x768[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_85_860M, M1368X768_R60_HSP, M1368X768_R60_VSP,
- {1800, 1368, 1368, 432, 1440, 144, 795, 768, 768, 27, 769, 3} }
-};
-
-/*1440x1050 (GTF)*/
-struct crt_mode_table CRTM1440x1050[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_125_104M, M1440X1050_R60_HSP, M1440X1050_R60_VSP,
- {1936, 1440, 1440, 496, 1536, 152, 1077, 1040, 1040, 37, 1041, 3} }
-};
-
-/* 1600x1200*/
-struct crt_mode_table CRTM1600x1200[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_162_000M, M1600X1200_R60_HSP, M1600X1200_R60_VSP,
- {2160, 1600, 1600, 560, 1664, 192, 1250, 1200, 1200, 50, 1201,
- 3} },
- {REFRESH_75, CLK_202_500M, M1600X1200_R75_HSP, M1600X1200_R75_VSP,
- {2160, 1600, 1600, 560, 1664, 192, 1250, 1200, 1200, 50, 1201, 3} }
-
-};
-
-/* 1680x1050 (CVT) */
-struct crt_mode_table CRTM1680x1050[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_146_760M, M1680x1050_R60_HSP, M1680x1050_R60_VSP,
- {2240, 1680, 1680, 560, 1784, 176, 1089, 1050, 1050, 39, 1053,
- 6} },
- {REFRESH_75, CLK_187_000M, M1680x1050_R75_HSP, M1680x1050_R75_VSP,
- {2272, 1680, 1680, 592, 1800, 176, 1099, 1050, 1050, 49, 1053, 6} }
-};
-
-/* 1680x1050 (CVT Reduce Blanking) */
-struct crt_mode_table CRTM1680x1050_RB[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_119_000M, M1680x1050_RB_R60_HSP,
- M1680x1050_RB_R60_VSP,
- {1840, 1680, 1680, 160, 1728, 32, 1080, 1050, 1050, 30, 1053, 6} }
-};
-
-/* 1920x1080 (CVT)*/
-struct crt_mode_table CRTM1920x1080[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_172_798M, M1920X1080_R60_HSP, M1920X1080_R60_VSP,
- {2576, 1920, 1920, 656, 2048, 200, 1120, 1080, 1080, 40, 1083, 5} }
-};
-
-/* 1920x1080 (CVT with Reduce Blanking) */
-struct crt_mode_table CRTM1920x1080_RB[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_138_400M, M1920X1080_RB_R60_HSP,
- M1920X1080_RB_R60_VSP,
- {2080, 1920, 1920, 160, 1968, 32, 1111, 1080, 1080, 31, 1083, 5} }
-};
-
-/* 1920x1440*/
-struct crt_mode_table CRTM1920x1440[] = {
- /*r_rate,vclk,hsp,vsp */
- /*HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_234_000M, M1920X1440_R60_HSP, M1920X1440_R60_VSP,
- {2600, 1920, 1920, 680, 2048, 208, 1500, 1440, 1440, 60, 1441,
- 3} },
- {REFRESH_75, CLK_297_500M, M1920X1440_R75_HSP, M1920X1440_R75_VSP,
- {2640, 1920, 1920, 720, 2064, 224, 1500, 1440, 1440, 60, 1441, 3} }
-};
-
-/* 1400x1050 (CVT) */
-struct crt_mode_table CRTM1400x1050[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_121_750M, M1400X1050_R60_HSP, M1400X1050_R60_VSP,
- {1864, 1400, 1400, 464, 1488, 144, 1089, 1050, 1050, 39, 1053,
- 4} },
- {REFRESH_75, CLK_156_000M, M1400X1050_R75_HSP, M1400X1050_R75_VSP,
- {1896, 1400, 1400, 496, 1504, 144, 1099, 1050, 1050, 49, 1053, 4} }
-};
-
-/* 1400x1050 (CVT Reduce Blanking) */
-struct crt_mode_table CRTM1400x1050_RB[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_101_000M, M1400X1050_RB_R60_HSP,
- M1400X1050_RB_R60_VSP,
- {1560, 1400, 1400, 160, 1448, 32, 1080, 1050, 1050, 30, 1053, 4} }
-};
-
-/* 960x600 (CVT) */
-struct crt_mode_table CRTM960x600[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_45_250M, M960X600_R60_HSP, M960X600_R60_VSP,
- {1216, 960, 960, 256, 992, 96, 624, 600, 600, 24, 603, 6} }
-};
-
-/* 1000x600 (GTF) */
-struct crt_mode_table CRTM1000x600[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_48_000M, M1000X600_R60_HSP, M1000X600_R60_VSP,
- {1288, 1000, 1000, 288, 1040, 104, 622, 600, 600, 22, 601, 3} }
-};
-
-/* 1024x576 (GTF) */
-struct crt_mode_table CRTM1024x576[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_46_996M, M1024X576_R60_HSP, M1024X576_R60_VSP,
- {1312, 1024, 1024, 288, 1064, 104, 597, 576, 576, 21, 577, 3} }
-};
-
-/* 1088x612 (CVT) */
-struct crt_mode_table CRTM1088x612[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_52_977M, M1088X612_R60_HSP, M1088X612_R60_VSP,
- {1392, 1088, 1088, 304, 1136, 104, 636, 612, 612, 24, 615, 5} }
-};
-
-/* 1152x720 (CVT) */
-struct crt_mode_table CRTM1152x720[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_66_750M, M1152X720_R60_HSP, M1152X720_R60_VSP,
- {1488, 1152, 1152, 336, 1208, 112, 748, 720, 720, 28, 723, 6} }
-};
-
-/* 1200x720 (GTF) */
-struct crt_mode_table CRTM1200x720[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_70_159M, M1200X720_R60_HSP, M1200X720_R60_VSP,
- {1568, 1200, 1200, 368, 1256, 128, 746, 720, 720, 26, 721, 3} }
-};
-
-/* 1280x600 (GTF) */
-struct crt_mode_table CRTM1280x600[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_61_500M, M1280x600_R60_HSP, M1280x600_R60_VSP,
- {1648, 1280, 1280, 368, 1336, 128, 622, 600, 600, 22, 601, 3} }
-};
-
-/* 1360x768 (CVT) */
-struct crt_mode_table CRTM1360x768[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_84_750M, M1360X768_R60_HSP, M1360X768_R60_VSP,
- {1776, 1360, 1360, 416, 1432, 136, 798, 768, 768, 30, 771, 5} }
-};
-
-/* 1360x768 (CVT Reduce Blanking) */
-struct crt_mode_table CRTM1360x768_RB[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_72_000M, M1360X768_RB_R60_HSP,
- M1360X768_RB_R60_VSP,
- {1520, 1360, 1360, 160, 1408, 32, 790, 768, 768, 22, 771, 5} }
-};
-
-/* 1366x768 (GTF) */
-struct crt_mode_table CRTM1366x768[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_85_860M, M1368X768_R60_HSP, M1368X768_R60_VSP,
- {1800, 1368, 1368, 432, 1440, 144, 795, 768, 768, 27, 769, 3} },
- {REFRESH_50, CLK_69_924M, M1368X768_R50_HSP, M1368X768_R50_VSP,
- {1768, 1368, 1368, 400, 1424, 144, 791, 768, 768, 23, 769, 3} }
-};
-
-/* 1440x900 (CVT) */
-struct crt_mode_table CRTM1440x900[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_106_500M, M1440X900_R60_HSP, M1440X900_R60_VSP,
- {1904, 1440, 1440, 464, 1520, 152, 934, 900, 900, 34, 903, 6} },
- {REFRESH_75, CLK_136_700M, M1440X900_R75_HSP, M1440X900_R75_VSP,
- {1936, 1440, 1440, 496, 1536, 152, 942, 900, 900, 42, 903, 6} }
-};
-
-/* 1440x900 (CVT Reduce Blanking) */
-struct crt_mode_table CRTM1440x900_RB[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_88_750M, M1440X900_RB_R60_HSP,
- M1440X900_RB_R60_VSP,
- {1600, 1440, 1440, 160, 1488, 32, 926, 900, 900, 26, 903, 6} }
-};
-
-/* 1600x900 (CVT) */
-struct crt_mode_table CRTM1600x900[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_118_840M, M1600X900_R60_HSP, M1600X900_R60_VSP,
- {2112, 1600, 1600, 512, 1688, 168, 934, 900, 900, 34, 903, 5} }
-};
-
-/* 1600x900 (CVT Reduce Blanking) */
-struct crt_mode_table CRTM1600x900_RB[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_97_750M, M1600X900_RB_R60_HSP,
- M1600X900_RB_R60_VSP,
- {1760, 1600, 1600, 160, 1648, 32, 926, 900, 900, 26, 903, 5} }
-};
-
-/* 1600x1024 (GTF) */
-struct crt_mode_table CRTM1600x1024[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_136_700M, M1600X1024_R60_HSP, M1600X1024_R60_VSP,
- {2144, 1600, 1600, 544, 1704, 168, 1060, 1024, 1024, 36, 1025, 3} }
-};
-
-/* 1792x1344 (DMT) */
-struct crt_mode_table CRTM1792x1344[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_204_000M, M1792x1344_R60_HSP, M1792x1344_R60_VSP,
- {2448, 1792, 1792, 656, 1920, 200, 1394, 1344, 1344, 50, 1345, 3} }
-};
-
-/* 1856x1392 (DMT) */
-struct crt_mode_table CRTM1856x1392[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_218_500M, M1856x1392_R60_HSP, M1856x1392_R60_VSP,
- {2528, 1856, 1856, 672, 1952, 224, 1439, 1392, 1392, 47, 1393, 3} }
-};
-
-/* 1920x1200 (CVT) */
-struct crt_mode_table CRTM1920x1200[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_193_295M, M1920X1200_R60_HSP, M1920X1200_R60_VSP,
- {2592, 1920, 1920, 672, 2056, 200, 1245, 1200, 1200, 45, 1203, 6} }
-};
-
-/* 1920x1200 (CVT with Reduce Blanking) */
-struct crt_mode_table CRTM1920x1200_RB[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_153_920M, M1920X1200_RB_R60_HSP,
- M1920X1200_RB_R60_VSP,
- {2080, 1920, 1920, 160, 1968, 32, 1235, 1200, 1200, 35, 1203, 6} }
-};
-
-/* 2048x1536 (CVT) */
-struct crt_mode_table CRTM2048x1536[] = {
- /* r_rate, vclk, hsp, vsp */
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {REFRESH_60, CLK_267_250M, M2048x1536_R60_HSP, M2048x1536_R60_VSP,
- {2800, 2048, 2048, 752, 2200, 224, 1592, 1536, 1536, 56, 1539, 4} }
-};
-
-/* Video Mode Table */
-/* struct VideoModeTable {*/
-/* int ModeIndex;*/
-/* struct crt_mode_table *crtc;*/
-/* int mode_array;*/
-/* };*/
-struct VideoModeTable CLE266Modes[] = {
- /* Display : 480x640 (GTF) */
- {VIA_RES_480X640, CRTM480x640, ARRAY_SIZE(CRTM480x640)},
-
- /* Display : 640x480 */
- {VIA_RES_640X480, CRTM640x480, ARRAY_SIZE(CRTM640x480)},
-
- /* Display : 720x480 (GTF) */
- {VIA_RES_720X480, CRTM720x480, ARRAY_SIZE(CRTM720x480)},
-
- /* Display : 720x576 (GTF) */
- {VIA_RES_720X576, CRTM720x576, ARRAY_SIZE(CRTM720x576)},
-
- /* Display : 800x600 */
- {VIA_RES_800X600, CRTM800x600, ARRAY_SIZE(CRTM800x600)},
-
- /* Display : 800x480 (CVT) */
- {VIA_RES_800X480, CRTM800x480, ARRAY_SIZE(CRTM800x480)},
-
- /* Display : 848x480 (CVT) */
- {VIA_RES_848X480, CRTM848x480, ARRAY_SIZE(CRTM848x480)},
-
- /* Display : 852x480 (GTF) */
- {VIA_RES_856X480, CRTM852x480, ARRAY_SIZE(CRTM852x480)},
-
- /* Display : 1024x512 (GTF) */
- {VIA_RES_1024X512, CRTM1024x512, ARRAY_SIZE(CRTM1024x512)},
-
- /* Display : 1024x600 */
- {VIA_RES_1024X600, CRTM1024x600, ARRAY_SIZE(CRTM1024x600)},
-
- /* Display : 1024x576 (GTF) */
- /*{ VIA_RES_1024X576, CRTM1024x576, ARRAY_SIZE(CRTM1024x576)}, */
-
- /* Display : 1024x768 */
- {VIA_RES_1024X768, CRTM1024x768, ARRAY_SIZE(CRTM1024x768)},
-
- /* Display : 1152x864 */
- {VIA_RES_1152X864, CRTM1152x864, ARRAY_SIZE(CRTM1152x864)},
-
- /* Display : 1280x768 (GTF) */
- {VIA_RES_1280X768, CRTM1280x768, ARRAY_SIZE(CRTM1280x768)},
-
- /* Display : 960x600 (CVT) */
- {VIA_RES_960X600, CRTM960x600, ARRAY_SIZE(CRTM960x600)},
-
- /* Display : 1000x600 (GTF) */
- {VIA_RES_1000X600, CRTM1000x600, ARRAY_SIZE(CRTM1000x600)},
-
- /* Display : 1024x576 (GTF) */
- {VIA_RES_1024X576, CRTM1024x576, ARRAY_SIZE(CRTM1024x576)},
-
- /* Display : 1088x612 (GTF) */
- {VIA_RES_1088X612, CRTM1088x612, ARRAY_SIZE(CRTM1088x612)},
-
- /* Display : 1152x720 (CVT) */
- {VIA_RES_1152X720, CRTM1152x720, ARRAY_SIZE(CRTM1152x720)},
-
- /* Display : 1200x720 (GTF) */
- {VIA_RES_1200X720, CRTM1200x720, ARRAY_SIZE(CRTM1200x720)},
-
- /* Display : 1280x600 (GTF) */
- {VIA_RES_1280X600, CRTM1280x600, ARRAY_SIZE(CRTM1280x600)},
-
- /* Display : 1280x800 (CVT) */
- {VIA_RES_1280X800, CRTM1280x800, ARRAY_SIZE(CRTM1280x800)},
-
- /* Display : 1280x800 (GTF) */
- /*{ M1280x800, CRTM1280x800, ARRAY_SIZE(CRTM1280x800)}, */
-
- /* Display : 1280x960 */
- {VIA_RES_1280X960, CRTM1280x960, ARRAY_SIZE(CRTM1280x960)},
-
- /* Display : 1280x1024 */
- {VIA_RES_1280X1024, CRTM1280x1024, ARRAY_SIZE(CRTM1280x1024)},
-
- /* Display : 1360x768 (CVT) */
- {VIA_RES_1360X768, CRTM1360x768, ARRAY_SIZE(CRTM1360x768)},
-
- /* Display : 1360x768 (CVT Reduce Blanking) */
- {VIA_RES_1360X768_RB, CRTM1360x768_RB,
- ARRAY_SIZE(CRTM1360x768_RB)},
-
- /* Display : 1366x768 */
- {VIA_RES_1366X768, CRTM1366x768, ARRAY_SIZE(CRTM1366x768)},
-
- /* Display : 1368x768 (GTF) */
- /*{ M1368x768,CRTM1368x768,ARRAY_SIZE(CRTM1368x768)}, */
- /* Display : 1368x768 (GTF) */
- {VIA_RES_1368X768, CRTM1368x768, ARRAY_SIZE(CRTM1368x768)},
-
- /* Display : 1440x900 (CVT) */
- {VIA_RES_1440X900, CRTM1440x900, ARRAY_SIZE(CRTM1440x900)},
-
- /* Display : 1440x900 (CVT Reduce Blanking) */
- {VIA_RES_1440X900_RB, CRTM1440x900_RB,
- ARRAY_SIZE(CRTM1440x900_RB)},
-
- /* Display : 1440x1050 (GTF) */
- {VIA_RES_1440X1050, CRTM1440x1050, ARRAY_SIZE(CRTM1440x1050)},
-
- /* Display : 1400x1050 (CVT Reduce Blanking) */
- {VIA_RES_1400X1050_RB, CRTM1400x1050_RB,
- ARRAY_SIZE(CRTM1400x1050_RB)},
-
- /* Display : 1600x900 (CVT) */
- {VIA_RES_1600X900, CRTM1600x900, ARRAY_SIZE(CRTM1600x900)},
-
- /* Display : 1600x900 (CVT Reduce Blanking) */
- {VIA_RES_1600X900_RB, CRTM1600x900_RB,
- ARRAY_SIZE(CRTM1600x900_RB)},
-
- /* Display : 1600x1024 (GTF) */
- {VIA_RES_1600X1024, CRTM1600x1024, ARRAY_SIZE(CRTM1600x1024)},
-
- /* Display : 1600x1200 */
- {VIA_RES_1600X1200, CRTM1600x1200, ARRAY_SIZE(CRTM1600x1200)},
-
- /* Display : 1680x1050 (CVT) */
- {VIA_RES_1680X1050, CRTM1680x1050, ARRAY_SIZE(CRTM1680x1050)},
-
- /* Display : 1680x1050 (CVT Reduce Blanking) */
- {VIA_RES_1680X1050_RB, CRTM1680x1050_RB,
- ARRAY_SIZE(CRTM1680x1050_RB)},
-
- /* Display : 1792x1344 (DMT) */
- {VIA_RES_1792X1344, CRTM1792x1344, ARRAY_SIZE(CRTM1792x1344)},
-
- /* Display : 1856x1392 (DMT) */
- {VIA_RES_1856X1392, CRTM1856x1392, ARRAY_SIZE(CRTM1856x1392)},
-
- /* Display : 1920x1440 */
- {VIA_RES_1920X1440, CRTM1920x1440, ARRAY_SIZE(CRTM1920x1440)},
-
- /* Display : 2048x1536 */
- {VIA_RES_2048X1536, CRTM2048x1536, ARRAY_SIZE(CRTM2048x1536)},
-
- /* Display : 1280x720 */
- {VIA_RES_1280X720, CRTM1280x720, ARRAY_SIZE(CRTM1280x720)},
-
- /* Display : 1920x1080 (CVT) */
- {VIA_RES_1920X1080, CRTM1920x1080, ARRAY_SIZE(CRTM1920x1080)},
-
- /* Display : 1920x1080 (CVT Reduce Blanking) */
- {VIA_RES_1920X1080_RB, CRTM1920x1080_RB,
- ARRAY_SIZE(CRTM1920x1080_RB)},
-
- /* Display : 1920x1200 (CVT) */
- {VIA_RES_1920X1200, CRTM1920x1200, ARRAY_SIZE(CRTM1920x1200)},
-
- /* Display : 1920x1200 (CVT Reduce Blanking) */
- {VIA_RES_1920X1200_RB, CRTM1920x1200_RB,
- ARRAY_SIZE(CRTM1920x1200_RB)},
-
- /* Display : 1400x1050 (CVT) */
- {VIA_RES_1400X1050, CRTM1400x1050, ARRAY_SIZE(CRTM1400x1050)}
-};
-struct crt_mode_table CEAM1280x720[] = {
- {REFRESH_60, CLK_74_270M, M1280X720_CEA_R60_HSP,
- M1280X720_CEA_R60_VSP,
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {1650, 1280, 1280, 370, 1390, 40, 750, 720, 720, 30, 725, 5} }
-};
-struct crt_mode_table CEAM1920x1080[] = {
- {REFRESH_60, CLK_148_500M, M1920X1080_CEA_R60_HSP,
- M1920X1080_CEA_R60_VSP,
- /* HT, HA, HBS, HBE, HSS, HSE, VT, VA, VBS, VBE, VSS, VSE */
- {2200, 1920, 1920, 300, 2008, 44, 1125, 1080, 1080, 45, 1084, 5} }
-};
-struct VideoModeTable CEA_HDMI_Modes[] = {
- /* Display : 1280x720 */
- {VIA_RES_1280X720, CEAM1280x720, ARRAY_SIZE(CEAM1280x720)},
- {VIA_RES_1920X1080, CEAM1920x1080, ARRAY_SIZE(CEAM1920x1080)}
-};
diff --git a/drivers/video/via/viamode.h b/drivers/video/via/viamode.h
deleted file mode 100644
index 1a5de50a23a..00000000000
--- a/drivers/video/via/viamode.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __VIAMODE_H__
-#define __VIAMODE_H__
-
-#include "global.h"
-
-struct VPITTable {
- unsigned char Misc;
- unsigned char SR[StdSR];
- unsigned char GR[StdGR];
- unsigned char AR[StdAR];
-};
-
-struct VideoModeTable {
- int ModeIndex;
- struct crt_mode_table *crtc;
- int mode_array;
-};
-
-struct patch_table {
- int mode_index;
- int table_length;
- struct io_reg *io_reg_table;
-};
-
-struct res_map_refresh {
- int hres;
- int vres;
- int pixclock;
- int vmode_refresh;
-};
-
-#define NUM_TOTAL_RES_MAP_REFRESH ARRAY_SIZE(res_map_refresh_tbl)
-#define NUM_TOTAL_CEA_MODES ARRAY_SIZE(CEA_HDMI_Modes)
-#define NUM_TOTAL_CN400_ModeXregs ARRAY_SIZE(CN400_ModeXregs)
-#define NUM_TOTAL_CN700_ModeXregs ARRAY_SIZE(CN700_ModeXregs)
-#define NUM_TOTAL_KM400_ModeXregs ARRAY_SIZE(KM400_ModeXregs)
-#define NUM_TOTAL_CX700_ModeXregs ARRAY_SIZE(CX700_ModeXregs)
-#define NUM_TOTAL_VX800_ModeXregs ARRAY_SIZE(VX800_ModeXregs)
-#define NUM_TOTAL_CLE266_ModeXregs ARRAY_SIZE(CLE266_ModeXregs)
-#define NUM_TOTAL_PATCH_MODE ARRAY_SIZE(res_patch_table)
-#define NUM_TOTAL_MODETABLE ARRAY_SIZE(CLE266Modes)
-
-/********************/
-/* Mode Table */
-/********************/
-
-/* 480x640 */
-extern struct crt_mode_table CRTM480x640[1];
-/* 640x480*/
-extern struct crt_mode_table CRTM640x480[5];
-/*720x480 (GTF)*/
-extern struct crt_mode_table CRTM720x480[1];
-/*720x576 (GTF)*/
-extern struct crt_mode_table CRTM720x576[1];
-/* 800x480 (CVT) */
-extern struct crt_mode_table CRTM800x480[1];
-/* 800x600*/
-extern struct crt_mode_table CRTM800x600[5];
-/* 848x480 (CVT) */
-extern struct crt_mode_table CRTM848x480[1];
-/*856x480 (GTF) convert to 852x480*/
-extern struct crt_mode_table CRTM852x480[1];
-/*1024x512 (GTF)*/
-extern struct crt_mode_table CRTM1024x512[1];
-/* 1024x600*/
-extern struct crt_mode_table CRTM1024x600[1];
-/* 1024x768*/
-extern struct crt_mode_table CRTM1024x768[4];
-/* 1152x864*/
-extern struct crt_mode_table CRTM1152x864[1];
-/* 1280x720 (HDMI 720P)*/
-extern struct crt_mode_table CRTM1280x720[2];
-/*1280x768 (GTF)*/
-extern struct crt_mode_table CRTM1280x768[2];
-/* 1280x800 (CVT) */
-extern struct crt_mode_table CRTM1280x800[1];
-/*1280x960*/
-extern struct crt_mode_table CRTM1280x960[1];
-/* 1280x1024*/
-extern struct crt_mode_table CRTM1280x1024[3];
-/* 1368x768 (GTF) */
-extern struct crt_mode_table CRTM1368x768[1];
-/*1440x1050 (GTF)*/
-extern struct crt_mode_table CRTM1440x1050[1];
-/* 1600x1200*/
-extern struct crt_mode_table CRTM1600x1200[2];
-/* 1680x1050 (CVT) */
-extern struct crt_mode_table CRTM1680x1050[2];
-/* 1680x1050 (CVT Reduce Blanking) */
-extern struct crt_mode_table CRTM1680x1050_RB[1];
-/* 1920x1080 (CVT)*/
-extern struct crt_mode_table CRTM1920x1080[1];
-/* 1920x1080 (CVT with Reduce Blanking) */
-extern struct crt_mode_table CRTM1920x1080_RB[1];
-/* 1920x1440*/
-extern struct crt_mode_table CRTM1920x1440[2];
-/* 1400x1050 (CVT) */
-extern struct crt_mode_table CRTM1400x1050[2];
-/* 1400x1050 (CVT Reduce Blanking) */
-extern struct crt_mode_table CRTM1400x1050_RB[1];
-/* 960x600 (CVT) */
-extern struct crt_mode_table CRTM960x600[1];
-/* 1000x600 (GTF) */
-extern struct crt_mode_table CRTM1000x600[1];
-/* 1024x576 (GTF) */
-extern struct crt_mode_table CRTM1024x576[1];
-/* 1088x612 (CVT) */
-extern struct crt_mode_table CRTM1088x612[1];
-/* 1152x720 (CVT) */
-extern struct crt_mode_table CRTM1152x720[1];
-/* 1200x720 (GTF) */
-extern struct crt_mode_table CRTM1200x720[1];
-/* 1280x600 (GTF) */
-extern struct crt_mode_table CRTM1280x600[1];
-/* 1360x768 (CVT) */
-extern struct crt_mode_table CRTM1360x768[1];
-/* 1360x768 (CVT Reduce Blanking) */
-extern struct crt_mode_table CRTM1360x768_RB[1];
-/* 1366x768 (GTF) */
-extern struct crt_mode_table CRTM1366x768[2];
-/* 1440x900 (CVT) */
-extern struct crt_mode_table CRTM1440x900[2];
-/* 1440x900 (CVT Reduce Blanking) */
-extern struct crt_mode_table CRTM1440x900_RB[1];
-/* 1600x900 (CVT) */
-extern struct crt_mode_table CRTM1600x900[1];
-/* 1600x900 (CVT Reduce Blanking) */
-extern struct crt_mode_table CRTM1600x900_RB[1];
-/* 1600x1024 (GTF) */
-extern struct crt_mode_table CRTM1600x1024[1];
-/* 1792x1344 (DMT) */
-extern struct crt_mode_table CRTM1792x1344[1];
-/* 1856x1392 (DMT) */
-extern struct crt_mode_table CRTM1856x1392[1];
-/* 1920x1200 (CVT) */
-extern struct crt_mode_table CRTM1920x1200[1];
-/* 1920x1200 (CVT with Reduce Blanking) */
-extern struct crt_mode_table CRTM1920x1200_RB[1];
-/* 2048x1536 (CVT) */
-extern struct crt_mode_table CRTM2048x1536[1];
-extern struct VideoModeTable CLE266Modes[47];
-extern struct crt_mode_table CEAM1280x720[1];
-extern struct crt_mode_table CEAM1920x1080[1];
-extern struct VideoModeTable CEA_HDMI_Modes[2];
-
-extern struct res_map_refresh res_map_refresh_tbl[61];
-extern struct io_reg CN400_ModeXregs[52];
-extern struct io_reg CN700_ModeXregs[66];
-extern struct io_reg KM400_ModeXregs[55];
-extern struct io_reg CX700_ModeXregs[58];
-extern struct io_reg VX800_ModeXregs[58];
-extern struct io_reg CLE266_ModeXregs[32];
-extern struct io_reg PM1024x768[2];
-extern struct patch_table res_patch_table[1];
-extern struct VPITTable VPIT;
-#endif /* __VIAMODE_H__ */
diff --git a/drivers/video/via/vt1636.c b/drivers/video/via/vt1636.c
deleted file mode 100644
index 322a9f99355..00000000000
--- a/drivers/video/via/vt1636.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include "global.h"
-
-u8 viafb_gpio_i2c_read_lvds(struct lvds_setting_information
- *plvds_setting_info, struct lvds_chip_information *plvds_chip_info,
- u8 index)
-{
- u8 data;
-
- viaparinfo->i2c_stuff.i2c_port = plvds_chip_info->i2c_port;
- viafb_i2c_readbyte(plvds_chip_info->lvds_chip_slave_addr, index, &data);
-
- return data;
-}
-
-void viafb_gpio_i2c_write_mask_lvds(struct lvds_setting_information
- *plvds_setting_info, struct lvds_chip_information
- *plvds_chip_info, struct IODATA io_data)
-{
- int index, data;
-
- viaparinfo->i2c_stuff.i2c_port = plvds_chip_info->i2c_port;
-
- index = io_data.Index;
- data = viafb_gpio_i2c_read_lvds(plvds_setting_info, plvds_chip_info,
- index);
- data = (data & (~io_data.Mask)) | io_data.Data;
-
- viafb_i2c_writebyte(plvds_chip_info->lvds_chip_slave_addr, index, data);
-}
-
-void viafb_init_lvds_vt1636(struct lvds_setting_information
- *plvds_setting_info, struct lvds_chip_information *plvds_chip_info)
-{
- int reg_num, i;
-
- /* Common settings: */
- reg_num = ARRAY_SIZE(COMMON_INIT_TBL_VT1636);
-
- for (i = 0; i < reg_num; i++) {
- viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
- plvds_chip_info,
- COMMON_INIT_TBL_VT1636[i]);
- }
-
- /* Input Data Mode Select */
- if (plvds_setting_info->device_lcd_dualedge) {
- viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
- plvds_chip_info,
- DUAL_CHANNEL_ENABLE_TBL_VT1636[0]);
- } else {
- viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
- plvds_chip_info,
- SINGLE_CHANNEL_ENABLE_TBL_VT1636[0]);
- }
-
- if (plvds_setting_info->LCDDithering) {
- viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
- plvds_chip_info,
- DITHERING_ENABLE_TBL_VT1636[0]);
- } else {
- viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
- plvds_chip_info,
- DITHERING_DISABLE_TBL_VT1636[0]);
- }
-}
-
-void viafb_enable_lvds_vt1636(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
-
- viafb_gpio_i2c_write_mask_lvds(plvds_setting_info, plvds_chip_info,
- VDD_ON_TBL_VT1636[0]);
-
- /* Pad on: */
- switch (plvds_chip_info->output_interface) {
- case INTERFACE_DVP0:
- {
- viafb_write_reg_mask(SR1E, VIASR, 0xC0, 0xC0);
- break;
- }
-
- case INTERFACE_DVP1:
- {
- viafb_write_reg_mask(SR1E, VIASR, 0x30, 0x30);
- break;
- }
-
- case INTERFACE_DFP_LOW:
- {
- viafb_write_reg_mask(SR2A, VIASR, 0x03, 0x03);
- break;
- }
-
- case INTERFACE_DFP_HIGH:
- {
- viafb_write_reg_mask(SR2A, VIASR, 0x03, 0x0C);
- break;
- }
-
- }
-}
-
-void viafb_disable_lvds_vt1636(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
-
- viafb_gpio_i2c_write_mask_lvds(plvds_setting_info, plvds_chip_info,
- VDD_OFF_TBL_VT1636[0]);
-
- /* Pad off: */
- switch (plvds_chip_info->output_interface) {
- case INTERFACE_DVP0:
- {
- viafb_write_reg_mask(SR1E, VIASR, 0x00, 0xC0);
- break;
- }
-
- case INTERFACE_DVP1:
- {
- viafb_write_reg_mask(SR1E, VIASR, 0x00, 0x30);
- break;
- }
-
- case INTERFACE_DFP_LOW:
- {
- viafb_write_reg_mask(SR2A, VIASR, 0x00, 0x03);
- break;
- }
-
- case INTERFACE_DFP_HIGH:
- {
- viafb_write_reg_mask(SR2A, VIASR, 0x00, 0x0C);
- break;
- }
-
- }
-}
-
-bool viafb_lvds_identify_vt1636(void)
-{
- u8 Buffer[2];
-
- DEBUG_MSG(KERN_INFO "viafb_lvds_identify_vt1636.\n");
-
- /* Sense VT1636 LVDS Transmiter */
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_slave_addr =
- VT1636_LVDS_I2C_ADDR;
-
- /* Check vendor ID first: */
- viafb_i2c_readbyte((u8) viaparinfo->chip_info->lvds_chip_info.
- lvds_chip_slave_addr,
- 0x00, &Buffer[0]);
- viafb_i2c_readbyte((u8) viaparinfo->chip_info->lvds_chip_info.
- lvds_chip_slave_addr,
- 0x01, &Buffer[1]);
-
- if (!((Buffer[0] == 0x06) && (Buffer[1] == 0x11)))
- return false;
-
- /* Check Chip ID: */
- viafb_i2c_readbyte((u8) viaparinfo->chip_info->lvds_chip_info.
- lvds_chip_slave_addr,
- 0x02, &Buffer[0]);
- viafb_i2c_readbyte((u8) viaparinfo->chip_info->lvds_chip_info.
- lvds_chip_slave_addr,
- 0x03, &Buffer[1]);
- if ((Buffer[0] == 0x45) && (Buffer[1] == 0x33)) {
- viaparinfo->chip_info->lvds_chip_info.lvds_chip_name =
- VT1636_LVDS;
- return true;
- }
-
- return false;
-}
-
-static int get_clk_range_index(u32 Clk)
-{
- if (Clk < DPA_CLK_30M)
- return DPA_CLK_RANGE_30M;
- else if (Clk < DPA_CLK_50M)
- return DPA_CLK_RANGE_30_50M;
- else if (Clk < DPA_CLK_70M)
- return DPA_CLK_RANGE_50_70M;
- else if (Clk < DPA_CLK_100M)
- return DPA_CLK_RANGE_70_100M;
- else if (Clk < DPA_CLK_150M)
- return DPA_CLK_RANGE_100_150M;
- else
- return DPA_CLK_RANGE_150M;
-}
-
-static int get_lvds_dpa_setting_index(int panel_size_id,
- struct VT1636_DPA_SETTING *p_vt1636_dpasetting_tbl,
- int tbl_size)
-{
- int i;
-
- for (i = 0; i < tbl_size; i++) {
- if (panel_size_id == p_vt1636_dpasetting_tbl->PanelSizeID)
- return i;
-
- p_vt1636_dpasetting_tbl++;
- }
-
- return 0;
-}
-
-static void set_dpa_vt1636(struct lvds_setting_information
- *plvds_setting_info, struct lvds_chip_information *plvds_chip_info,
- struct VT1636_DPA_SETTING *p_vt1636_dpa_setting)
-{
- struct IODATA io_data;
-
- io_data.Index = 0x09;
- io_data.Mask = 0x1F;
- io_data.Data = p_vt1636_dpa_setting->CLK_SEL_ST1;
- viafb_gpio_i2c_write_mask_lvds(plvds_setting_info,
- plvds_chip_info, io_data);
-
- io_data.Index = 0x08;
- io_data.Mask = 0x0F;
- io_data.Data = p_vt1636_dpa_setting->CLK_SEL_ST2;
- viafb_gpio_i2c_write_mask_lvds(plvds_setting_info, plvds_chip_info,
- io_data);
-}
-
-void viafb_vt1636_patch_skew_on_vt3324(
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
- int index, size;
-
- DEBUG_MSG(KERN_INFO "viafb_vt1636_patch_skew_on_vt3324.\n");
-
- /* Graphics DPA settings: */
- index = get_clk_range_index(plvds_setting_info->vclk);
- viafb_set_dpa_gfx(plvds_chip_info->output_interface,
- &GFX_DPA_SETTING_TBL_VT3324[index]);
-
- /* LVDS Transmitter DPA settings: */
- size = ARRAY_SIZE(VT1636_DPA_SETTING_TBL_VT3324);
- index =
- get_lvds_dpa_setting_index(plvds_setting_info->lcd_panel_id,
- VT1636_DPA_SETTING_TBL_VT3324, size);
- set_dpa_vt1636(plvds_setting_info, plvds_chip_info,
- &VT1636_DPA_SETTING_TBL_VT3324[index]);
-}
-
-void viafb_vt1636_patch_skew_on_vt3327(
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
- int index, size;
-
- DEBUG_MSG(KERN_INFO "viafb_vt1636_patch_skew_on_vt3327.\n");
-
- /* Graphics DPA settings: */
- index = get_clk_range_index(plvds_setting_info->vclk);
- viafb_set_dpa_gfx(plvds_chip_info->output_interface,
- &GFX_DPA_SETTING_TBL_VT3327[index]);
-
- /* LVDS Transmitter DPA settings: */
- size = ARRAY_SIZE(VT1636_DPA_SETTING_TBL_VT3327);
- index =
- get_lvds_dpa_setting_index(plvds_setting_info->lcd_panel_id,
- VT1636_DPA_SETTING_TBL_VT3327, size);
- set_dpa_vt1636(plvds_setting_info, plvds_chip_info,
- &VT1636_DPA_SETTING_TBL_VT3327[index]);
-}
-
-void viafb_vt1636_patch_skew_on_vt3364(
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info)
-{
- int index;
-
- DEBUG_MSG(KERN_INFO "viafb_vt1636_patch_skew_on_vt3364.\n");
-
- /* Graphics DPA settings: */
- index = get_clk_range_index(plvds_setting_info->vclk);
- viafb_set_dpa_gfx(plvds_chip_info->output_interface,
- &GFX_DPA_SETTING_TBL_VT3364[index]);
-}
diff --git a/drivers/video/via/vt1636.h b/drivers/video/via/vt1636.h
deleted file mode 100644
index 2a150c58c7e..00000000000
--- a/drivers/video/via/vt1636.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
- * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation;
- * either version 2, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
- * the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.See the GNU General Public License
- * for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef _VT1636_H_
-#define _VT1636_H_
-#include "chip.h"
-bool viafb_lvds_identify_vt1636(void);
-void viafb_init_lvds_vt1636(struct lvds_setting_information
- *plvds_setting_info, struct lvds_chip_information *plvds_chip_info);
-void viafb_enable_lvds_vt1636(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-void viafb_disable_lvds_vt1636(struct lvds_setting_information
- *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-void viafb_vt1636_patch_skew_on_vt3324(
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-void viafb_vt1636_patch_skew_on_vt3327(
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-void viafb_vt1636_patch_skew_on_vt3364(
- struct lvds_setting_information *plvds_setting_info,
- struct lvds_chip_information *plvds_chip_info);
-
-#endif