#
# 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 && BLK_DEV_IDE
	---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_ONETOUCH
	bool "Support OneTouch Button on Maxtor Hard Drives (EXPERIMENTAL)"
	depends on USB_STORAGE && INPUT_EVDEV && EXPERIMENTAL
	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)
