#
# 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 && 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 depends on 'SCSI' support being enabled, 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 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_STORAGE_KARMA
	bool "Support for Rio Karma music player"
	depends on USB_STORAGE
	help
	  Say Y here to include additional code to support the Rio Karma
	  USB interface.

	  This code places the Rio Karma into mass storage mode, enabling
	  it to be mounted as an ordinary filesystem. Performing an eject
	  on the resulting scsi device node returns the Karma to normal
	  operation.

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.
