You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
[PATCH] USB: sisusb[vga] update
here is a new and extended version of the sisusbvga (previously: sisusb) driver. The patch is against 2.6.13 and updates the driver to version 0.0.8. Additions include complete VGA/EGA text console support and a build-in display mode infrastructure for userland applications that don't know about the graphics internals. Fixes include some BE/LE issues and a get/put_dev bug in the previous version. Other changes include a change of the module name from "sisusb" to "sisusbvga". The previous one was too generic IMHO. Please note that the patch also affects the Makefile in drivers/video/console as the driver requires the VGA 8x16 font in case the text console part is selected. Heavily tested, as usual. Please apply. One thing though: I already prepared for removal of the "mode" field and the changed "name" field in the usb_class_driver structure. This will perhaps need some refinement depending on whether you/Linus merge the respective core changes before or after 2.6.14. Signed-off-by: Thomas Winischhofer <thomas@winischhofer.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
80908309ce
commit
1bbb4f2035
@@ -4,11 +4,43 @@ config USB_SISUSBVGA
|
||||
depends on USB && USB_EHCI_HCD
|
||||
---help---
|
||||
Say Y here if you intend to attach a USB2VGA dongle based on a
|
||||
Net2280 and a SiS315 chip.
|
||||
|
||||
Note that this device requires a USB 2.0 host controller. It will not
|
||||
Net2280 and a SiS315 chip.
|
||||
|
||||
Note that this device requires a USB 2.0 host controller. It will not
|
||||
work with USB 1.x controllers.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will be
|
||||
called sisusb. If unsure, say N.
|
||||
To compile this driver as a module, choose M here; the module will be
|
||||
called sisusbvga. If unsure, say N.
|
||||
|
||||
config USB_SISUSBVGA_CON
|
||||
bool "Text console and mode switching support" if USB_SISUSBVGA
|
||||
depends on VT
|
||||
select FONT_8x16
|
||||
---help---
|
||||
Say Y here if you want a VGA text console via the USB dongle or
|
||||
want to support userland applications that utilize the driver's
|
||||
display mode switching capabilities.
|
||||
|
||||
Note that this console supports VGA/EGA text mode only.
|
||||
|
||||
By default, the console part of the driver will not kick in when
|
||||
the driver is initialized. If you want the driver to take over
|
||||
one or more of the consoles, you need to specify the number of
|
||||
the first and last consoles (starting at 1) as driver parameters.
|
||||
|
||||
For example, if the driver is compiled as a module:
|
||||
|
||||
modprobe sisusbvga first=1 last=5
|
||||
|
||||
If you use hotplug, add this to your modutils config files with
|
||||
the "options" keyword, such as eg.
|
||||
|
||||
options sisusbvga first=1 last=5
|
||||
|
||||
If the driver is compiled into the kernel image, the parameters
|
||||
must be given in the kernel command like, such as
|
||||
|
||||
sisusbvga.first=1 sisusbvga.last=5
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,5 +2,7 @@
|
||||
# Makefile for the sisusb driver (if driver is inside kernel tree).
|
||||
#
|
||||
|
||||
obj-$(CONFIG_USB_SISUSBVGA) += sisusb.o
|
||||
obj-$(CONFIG_USB_SISUSBVGA) += sisusbvga.o
|
||||
|
||||
sisusbvga-objs := sisusb.o sisusb_init.o sisusb_con.o
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -46,15 +46,36 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* For older kernels, support for text consoles is by default
|
||||
* off. To ensable text console support, change the following:
|
||||
*/
|
||||
#if 0
|
||||
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,13)
|
||||
#define CONFIG_USB_SISUSBVGA_CON
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Version Information */
|
||||
|
||||
#define SISUSB_VERSION 0
|
||||
#define SISUSB_REVISION 0
|
||||
#define SISUSB_PATCHLEVEL 7
|
||||
#define SISUSB_PATCHLEVEL 8
|
||||
|
||||
/* Include console and mode switching code? */
|
||||
|
||||
#ifdef CONFIG_USB_SISUSBVGA_CON
|
||||
#define INCL_SISUSB_CON 1
|
||||
#endif
|
||||
|
||||
#ifdef INCL_SISUSB_CON
|
||||
#include <linux/console.h>
|
||||
#include <linux/vt_kern.h>
|
||||
#include "sisusb_struct.h"
|
||||
#endif
|
||||
|
||||
/* USB related */
|
||||
|
||||
#define SISUSB_MINOR 133 /* FIXME */
|
||||
#define SISUSB_MINOR 133 /* official */
|
||||
|
||||
/* Size of the sisusb input/output buffers */
|
||||
#define SISUSB_IBUF_SIZE 0x01000
|
||||
@@ -131,6 +152,26 @@ struct sisusb_usb_data {
|
||||
unsigned char gfxinit; /* graphics core initialized? */
|
||||
unsigned short chipid, chipvendor;
|
||||
unsigned short chiprevision;
|
||||
#ifdef INCL_SISUSB_CON
|
||||
struct SiS_Private *SiS_Pr;
|
||||
unsigned long scrbuf;
|
||||
unsigned int scrbuf_size;
|
||||
int haveconsole, con_first, con_last;
|
||||
int havethisconsole[MAX_NR_CONSOLES];
|
||||
int textmodedestroyed;
|
||||
unsigned int sisusb_num_columns; /* real number, not vt's idea */
|
||||
int cur_start_addr, con_rolled_over;
|
||||
int sisusb_cursor_loc, bad_cursor_pos;
|
||||
int sisusb_cursor_size_from;
|
||||
int sisusb_cursor_size_to;
|
||||
int current_font_height, current_font_512;
|
||||
int font_backup_size, font_backup_height, font_backup_512;
|
||||
char *font_backup;
|
||||
int font_slot;
|
||||
struct vc_data *sisusb_display_fg;
|
||||
int is_gfx;
|
||||
int con_blanked;
|
||||
#endif
|
||||
};
|
||||
|
||||
#define to_sisusb_dev(d) container_of(d, struct sisusb_usb_data, kref)
|
||||
@@ -249,7 +290,9 @@ struct sisusb_info {
|
||||
|
||||
__u32 sisusb_fbdevactive; /* != 0 if framebuffer device active */
|
||||
|
||||
__u8 sisusb_reserved[32]; /* for future use */
|
||||
__u32 sisusb_conactive; /* != 0 if console driver active */
|
||||
|
||||
__u8 sisusb_reserved[28]; /* for future use */
|
||||
};
|
||||
|
||||
struct sisusb_command {
|
||||
@@ -261,18 +304,24 @@ struct sisusb_command {
|
||||
__u32 data4; /* for future use */
|
||||
};
|
||||
|
||||
#define SUCMD_GET 0x01 /* for all: data0 = index, data3 = port */
|
||||
#define SUCMD_SET 0x02 /* data1 = value */
|
||||
#define SUCMD_SETOR 0x03 /* data1 = or */
|
||||
#define SUCMD_SETAND 0x04 /* data1 = and */
|
||||
#define SUCMD_SETANDOR 0x05 /* data1 = and, data2 = or */
|
||||
#define SUCMD_SETMASK 0x06 /* data1 = data, data2 = mask */
|
||||
#define SUCMD_GET 0x01 /* for all: data0 = index, data3 = port */
|
||||
#define SUCMD_SET 0x02 /* data1 = value */
|
||||
#define SUCMD_SETOR 0x03 /* data1 = or */
|
||||
#define SUCMD_SETAND 0x04 /* data1 = and */
|
||||
#define SUCMD_SETANDOR 0x05 /* data1 = and, data2 = or */
|
||||
#define SUCMD_SETMASK 0x06 /* data1 = data, data2 = mask */
|
||||
|
||||
#define SUCMD_CLRSCR 0x07 /* data0:1:2 = length, data3 = address */
|
||||
#define SUCMD_CLRSCR 0x07 /* data0:1:2 = length, data3 = address */
|
||||
|
||||
#define SUCMD_HANDLETEXTMODE 0x08 /* Reset/destroy text mode */
|
||||
|
||||
#define SUCMD_SETMODE 0x09 /* Set a display mode (data3 = SiS mode) */
|
||||
#define SUCMD_SETVESAMODE 0x0a /* Set a display mode (data3 = VESA mode) */
|
||||
|
||||
#define SISUSB_COMMAND _IOWR(0xF3,0x3D,struct sisusb_command)
|
||||
#define SISUSB_GET_CONFIG_SIZE _IOR(0xF3,0x3E,__u32)
|
||||
#define SISUSB_GET_CONFIG _IOR(0xF3,0x3F,struct sisusb_info)
|
||||
#define SISUSB_GET_CONFIG_SIZE _IOR(0xF3,0x3E,__u32)
|
||||
#define SISUSB_GET_CONFIG _IOR(0xF3,0x3F,struct sisusb_info)
|
||||
|
||||
|
||||
#endif /* SISUSB_H */
|
||||
|
||||
|
||||
1658
drivers/usb/misc/sisusbvga/sisusb_con.c
Normal file
1658
drivers/usb/misc/sisusbvga/sisusb_con.c
Normal file
File diff suppressed because it is too large
Load Diff
1047
drivers/usb/misc/sisusbvga/sisusb_init.c
Normal file
1047
drivers/usb/misc/sisusbvga/sisusb_init.c
Normal file
File diff suppressed because it is too large
Load Diff
830
drivers/usb/misc/sisusbvga/sisusb_init.h
Normal file
830
drivers/usb/misc/sisusbvga/sisusb_init.h
Normal file
File diff suppressed because it is too large
Load Diff
169
drivers/usb/misc/sisusbvga/sisusb_struct.h
Normal file
169
drivers/usb/misc/sisusbvga/sisusb_struct.h
Normal file
@@ -0,0 +1,169 @@
|
||||
/*
|
||||
* General structure definitions for universal mode switching modules
|
||||
*
|
||||
* Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
|
||||
*
|
||||
* If distributed as part of the Linux kernel, the following license terms
|
||||
* apply:
|
||||
*
|
||||
* * 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 of the named License,
|
||||
* * or any later version.
|
||||
* *
|
||||
* * This program is distributed in the hope that it will be useful,
|
||||
* * but WITHOUT ANY WARRANTY; 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
|
||||
*
|
||||
* Otherwise, the following license terms apply:
|
||||
*
|
||||
* * Redistribution and use in source and binary forms, with or without
|
||||
* * modification, are permitted provided that the following conditions
|
||||
* * are met:
|
||||
* * 1) Redistributions of source code must retain the above copyright
|
||||
* * notice, this list of conditions and the following disclaimer.
|
||||
* * 2) Redistributions in binary form must reproduce the above copyright
|
||||
* * notice, this list of conditions and the following disclaimer in the
|
||||
* * documentation and/or other materials provided with the distribution.
|
||||
* * 3) The name of the author may not be used to endorse or promote products
|
||||
* * derived from this software without specific prior written permission.
|
||||
* *
|
||||
* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Author: Thomas Winischhofer <thomas@winischhofer.net>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SISUSB_STRUCT_H_
|
||||
#define _SISUSB_STRUCT_H_
|
||||
|
||||
struct SiS_St {
|
||||
unsigned char St_ModeID;
|
||||
unsigned short St_ModeFlag;
|
||||
unsigned char St_StTableIndex;
|
||||
unsigned char St_CRT2CRTC;
|
||||
unsigned char St_ResInfo;
|
||||
unsigned char VB_StTVFlickerIndex;
|
||||
unsigned char VB_StTVEdgeIndex;
|
||||
unsigned char VB_StTVYFilterIndex;
|
||||
unsigned char St_PDC;
|
||||
};
|
||||
|
||||
struct SiS_StandTable
|
||||
{
|
||||
unsigned char CRT_COLS;
|
||||
unsigned char ROWS;
|
||||
unsigned char CHAR_HEIGHT;
|
||||
unsigned short CRT_LEN;
|
||||
unsigned char SR[4];
|
||||
unsigned char MISC;
|
||||
unsigned char CRTC[0x19];
|
||||
unsigned char ATTR[0x14];
|
||||
unsigned char GRC[9];
|
||||
};
|
||||
|
||||
struct SiS_StResInfo_S {
|
||||
unsigned short HTotal;
|
||||
unsigned short VTotal;
|
||||
};
|
||||
|
||||
struct SiS_Ext
|
||||
{
|
||||
unsigned char Ext_ModeID;
|
||||
unsigned short Ext_ModeFlag;
|
||||
unsigned short Ext_VESAID;
|
||||
unsigned char Ext_RESINFO;
|
||||
unsigned char VB_ExtTVFlickerIndex;
|
||||
unsigned char VB_ExtTVEdgeIndex;
|
||||
unsigned char VB_ExtTVYFilterIndex;
|
||||
unsigned char VB_ExtTVYFilterIndexROM661;
|
||||
unsigned char REFindex;
|
||||
char ROMMODEIDX661;
|
||||
};
|
||||
|
||||
struct SiS_Ext2
|
||||
{
|
||||
unsigned short Ext_InfoFlag;
|
||||
unsigned char Ext_CRT1CRTC;
|
||||
unsigned char Ext_CRTVCLK;
|
||||
unsigned char Ext_CRT2CRTC;
|
||||
unsigned char Ext_CRT2CRTC_NS;
|
||||
unsigned char ModeID;
|
||||
unsigned short XRes;
|
||||
unsigned short YRes;
|
||||
unsigned char Ext_PDC;
|
||||
unsigned char Ext_FakeCRT2CRTC;
|
||||
unsigned char Ext_FakeCRT2Clk;
|
||||
};
|
||||
|
||||
struct SiS_CRT1Table
|
||||
{
|
||||
unsigned char CR[17];
|
||||
};
|
||||
|
||||
struct SiS_VCLKData
|
||||
{
|
||||
unsigned char SR2B,SR2C;
|
||||
unsigned short CLOCK;
|
||||
};
|
||||
|
||||
struct SiS_ModeResInfo
|
||||
{
|
||||
unsigned short HTotal;
|
||||
unsigned short VTotal;
|
||||
unsigned char XChar;
|
||||
unsigned char YChar;
|
||||
};
|
||||
|
||||
struct SiS_Private
|
||||
{
|
||||
void *sisusb;
|
||||
|
||||
unsigned long IOAddress;
|
||||
|
||||
unsigned long SiS_P3c4;
|
||||
unsigned long SiS_P3d4;
|
||||
unsigned long SiS_P3c0;
|
||||
unsigned long SiS_P3ce;
|
||||
unsigned long SiS_P3c2;
|
||||
unsigned long SiS_P3ca;
|
||||
unsigned long SiS_P3c6;
|
||||
unsigned long SiS_P3c7;
|
||||
unsigned long SiS_P3c8;
|
||||
unsigned long SiS_P3c9;
|
||||
unsigned long SiS_P3cb;
|
||||
unsigned long SiS_P3cc;
|
||||
unsigned long SiS_P3cd;
|
||||
unsigned long SiS_P3da;
|
||||
unsigned long SiS_Part1Port;
|
||||
|
||||
unsigned char SiS_MyCR63;
|
||||
unsigned short SiS_CRT1Mode;
|
||||
unsigned short SiS_ModeType;
|
||||
unsigned short SiS_SetFlag;
|
||||
|
||||
const struct SiS_StandTable *SiS_StandTable;
|
||||
const struct SiS_St *SiS_SModeIDTable;
|
||||
const struct SiS_Ext *SiS_EModeIDTable;
|
||||
const struct SiS_Ext2 *SiS_RefIndex;
|
||||
const struct SiS_CRT1Table *SiS_CRT1Table;
|
||||
struct SiS_VCLKData *SiS_VCLKData;
|
||||
const struct SiS_ModeResInfo *SiS_ModeResInfo;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -137,7 +137,7 @@ config FONT_8x8
|
||||
|
||||
config FONT_8x16
|
||||
bool "VGA 8x16 font" if FONTS
|
||||
depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE=y
|
||||
depends on FRAMEBUFFER_CONSOLE || SGI_NEWPORT_CONSOLE=y || USB_SISUSBVGA_CON
|
||||
default y if !SPARC32 && !SPARC64 && !FONTS
|
||||
help
|
||||
This is the "high resolution" font for the VGA frame buffer (the one
|
||||
|
||||
@@ -33,6 +33,10 @@ endif
|
||||
|
||||
obj-$(CONFIG_FB_STI) += sticore.o font.o
|
||||
|
||||
ifeq ($(CONFIG_USB_SISUSBVGA_CON),y)
|
||||
obj-$(CONFIG_USB_SISUSBVGA) += font.o
|
||||
endif
|
||||
|
||||
# Targets that kbuild needs to know about
|
||||
targets := promcon_tbl.c
|
||||
|
||||
|
||||
Reference in New Issue
Block a user