#
# 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"
	depends on USB_STORAGE
	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
	---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"
	depends on USB_STORAGE
	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"
	depends on USB_STORAGE
	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"
	depends on USB_STORAGE
	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"
	depends on USB_STORAGE
	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"
	depends on USB_STORAGE
	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"
	depends on USB_STORAGE
	depends on INPUT=y || INPUT=USB_STORAGE
	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_STORAGE_CYPRESS_ATACB
	bool "SAT emulation on Cypress USB/ATA Bridge with ATACB"
	depends on USB_STORAGE
	---help---
	  Say Y here if you want to use SAT (ata pass through) on devices based
	  on the Cypress USB/ATA bridge supporting ATACB. This will allow you
	  to use tools to tune and monitor your drive (like hdparm or smartctl).

	  If you say no here your device will still work with the standard usb
	  mass storage class.

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.
