# SPDX-License-Identifier: GPL-2.0

config USB_SISUSBVGA
	tristate "USB 2.0 SVGA dongle support (Net2280/SiS315)"
	depends on (USB_MUSB_HDRC || USB_EHCI_HCD)
	select FONT_SUPPORT if USB_SISUSBVGA_CON
	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
	  work with USB 1.x controllers.

	  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 && BROKEN
	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



