#
# USB Storage driver configuration
#

comment "NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'"
comment "may also be needed; see USB_STORAGE Help for more information"
	depends on USB

config USB_STORAGE
	tristate "USB Mass Storage support"
	depends on USB
	select SCSI
	---help---
	  Say Y here if you want to connect USB mass storage devices to your
	  computer's USB port. This is the driver you need for USB
	  floppy drives, USB hard disks, USB tape drives, USB CD-ROMs,
	  USB flash devices, and memory sticks, along with
	  similar devices. This driver may also be used for some cameras
	  and card readers.

	  This option 'selects' (turns on, enables) 'SCSI', but you
	  probably also need 'SCSI device support: SCSI disk support'
	  (BLK_DEV_SD) for most USB storage devices.

	  To compile this driver as a module, choose M here: the
	  module will be called usb-storage.

config USB_STORAGE_DEBUG
	bool "USB Mass Storage verbose debug"
	depends on USB_STORAGE
	help
	  Say Y here in order to have the USB Mass Storage code generate
	  verbose debugging messages.

config USB_STORAGE_DATAFAB
	bool "Datafab Compact Flash Reader support (EXPERIMENTAL)"
	depends on USB_STORAGE && EXPERIMENTAL
	help
	  Support for certain Datafab CompactFlash readers.
	  Datafab has a web page at <http://www.datafabusa.com/>.

config USB_STORAGE_FREECOM
	bool "Freecom USB/ATAPI Bridge support"
	depends on USB_STORAGE
	help
	  Support for the Freecom USB to IDE/ATAPI adaptor.
	  Freecom has a web page at <http://www.freecom.de/>.

config USB_STORAGE_ISD200
	bool "ISD-200 USB/ATA Bridge support"
	depends on USB_STORAGE
	depends on BLK_DEV_IDE=y || BLK_DEV_IDE=USB_STORAGE
	---help---
	  Say Y here if you want to use USB Mass Store devices based
	  on the In-Systems Design ISD-200 USB/ATA bridge.

	  Some of the products that use this chip are:

	  - Archos Jukebox 6000
	  - ISD SmartCable for Storage
	  - Taiwan Skymaster CD530U/DEL-0241 IDE bridge
	  - Sony CRX10U CD-R/RW drive
	  - CyQ've CQ8060A CDRW drive
	  - Planex eXtreme Drive RX-25HU USB-IDE cable (not model RX-25U)

config USB_STORAGE_DPCM
	bool "Microtech/ZiO! CompactFlash/SmartMedia support"
	depends on USB_STORAGE
	help
	  Say Y here to support the Microtech/ZiO! CompactFlash reader.
	  There is a web page at <http://www.ziocorp.com/products/>.

config USB_STORAGE_USBAT
	bool "USBAT/USBAT02-based storage support (EXPERIMENTAL)"
	depends on USB_STORAGE && EXPERIMENTAL
	help
	  Say Y here to include additional code to support storage devices
	  based on the SCM/Shuttle USBAT/USBAT02 processors.

	  Devices reported to work with this driver include:
	  - CompactFlash reader included with Kodak DC3800 camera
	  - Dane-Elec Zmate CompactFlash reader
	  - Delkin Efilm reader2
	  - HP 8200e/8210e/8230e CD-Writer Plus drives
	  - I-JAM JS-50U
	  - Jessops CompactFlash JESDCFRU BLACK
	  - Kingston Technology PCREAD-USB/CF
	  - Maxell UA4 CompactFlash reader
	  - Memorex UCF-100
	  - Microtech ZiO! ICS-45 CF2
	  - RCA LYRA MP3 portable
	  - Sandisk ImageMate SDDR-05b

config USB_STORAGE_SDDR09
	bool "SanDisk SDDR-09 (and other SmartMedia) support (EXPERIMENTAL)"
	depends on USB_STORAGE && EXPERIMENTAL
	help
	  Say Y here to include additional code to support the Sandisk SDDR-09
	  SmartMedia reader in the USB Mass Storage driver.
	  Also works for the Microtech Zio! SmartMedia reader.

config USB_STORAGE_SDDR55
	bool "SanDisk SDDR-55 SmartMedia support (EXPERIMENTAL)"
	depends on USB_STORAGE && EXPERIMENTAL
	help
	  Say Y here to include additional code to support the Sandisk SDDR-55
	  SmartMedia reader in the USB Mass Storage driver.

config USB_STORAGE_JUMPSHOT
	bool "Lexar Jumpshot Compact Flash Reader (EXPERIMENTAL)"
	depends on USB_STORAGE && EXPERIMENTAL
	help
	  Say Y here to include additional code to support the Lexar Jumpshot
	  USB CompactFlash reader.

config USB_STORAGE_ALAUDA
	bool "Olympus MAUSB-10/Fuji DPC-R1 support (EXPERIMENTAL)"
	depends on USB_STORAGE && EXPERIMENTAL
	help
	  Say Y here to include additional code to support the Olympus MAUSB-10
	  and Fujifilm DPC-R1 USB Card reader/writer devices.

	  These devices are based on the Alauda chip and support support both
	  XD and SmartMedia cards.

config USB_STORAGE_ONETOUCH
	bool "Support OneTouch Button on Maxtor Hard Drives (EXPERIMENTAL)"
	depends on USB_STORAGE && INPUT_EVDEV && EXPERIMENTAL && !PM
	help
	  Say Y here to include additional code to support the Maxtor OneTouch
	  USB hard drive's onetouch button.

	  This code registers the button on the front of Maxtor OneTouch USB
	  hard drive's as an input device. An action can be associated with
	  this input in any keybinding software. (e.g. gnome's keyboard short-
	  cuts)

config USB_LIBUSUAL
	bool "The shared table of common (or usual) storage devices"
	depends on USB
	help
	  This module contains a table of common (or usual) devices
	  for usb-storage and ub drivers, and allows to switch binding
	  of these devices without rebuilding modules.

	  Typical syntax of /etc/modprobe.conf is:

		options libusual bias="ub"

	  If unsure, say N.
