#
# USB Storage driver configuration
#

comment "NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may"
comment "also be needed; see USB_STORAGE Help for more info"

config USB_STORAGE
	tristate "USB Mass Storage support"
	depends on 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.

if USB_STORAGE

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

config USB_STORAGE_REALTEK
	tristate "Realtek Card Reader support"
	help
	  Say Y here to include additional code to support the power-saving function
	  for Realtek RTS51xx USB card readers.

	  If this driver is compiled as a module, it will be named ums-realtek.

config REALTEK_AUTOPM
	bool "Realtek Card Reader autosuspend support"
	depends on USB_STORAGE_REALTEK && PM
	default y

config USB_STORAGE_DATAFAB
	tristate "Datafab Compact Flash Reader support"
	help
	  Support for certain Datafab CompactFlash readers.
	  Datafab has a web page at <http://www.datafab.com/>.

	  If this driver is compiled as a module, it will be named ums-datafab.

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

	  If this driver is compiled as a module, it will be named ums-freecom.

config USB_STORAGE_ISD200
	tristate "ISD-200 USB/ATA Bridge support"
	---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)

	  If this driver is compiled as a module, it will be named ums-isd200.

config USB_STORAGE_USBAT
	tristate "USBAT/USBAT02-based storage support"
	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

	  If this driver is compiled as a module, it will be named ums-usbat.

config USB_STORAGE_SDDR09
	tristate "SanDisk SDDR-09 (and other SmartMedia, including DPCM) support"
	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! CompactFlash/SmartMedia reader.

	  If this driver is compiled as a module, it will be named ums-sddr09.

config USB_STORAGE_SDDR55
	tristate "SanDisk SDDR-55 SmartMedia support"
	help
	  Say Y here to include additional code to support the Sandisk SDDR-55
	  SmartMedia reader in the USB Mass Storage driver.

	  If this driver is compiled as a module, it will be named ums-sddr55.

config USB_STORAGE_JUMPSHOT
	tristate "Lexar Jumpshot Compact Flash Reader"
	help
	  Say Y here to include additional code to support the Lexar Jumpshot
	  USB CompactFlash reader.

	  If this driver is compiled as a module, it will be named ums-jumpshot.

config USB_STORAGE_ALAUDA
	tristate "Olympus MAUSB-10/Fuji DPC-R1 support"
	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.

	  If this driver is compiled as a module, it will be named ums-alauda.

config USB_STORAGE_ONETOUCH
	tristate "Support OneTouch Button on Maxtor Hard Drives"
	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)

	  If this driver is compiled as a module, it will be named ums-onetouch.

config USB_STORAGE_KARMA
	tristate "Support for Rio Karma music player"
	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.

	  If this driver is compiled as a module, it will be named ums-karma.

config USB_STORAGE_CYPRESS_ATACB
	tristate "SAT emulation on Cypress USB/ATA Bridge with ATACB"
	---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.

	  If this driver is compiled as a module, it will be named ums-cypress.

config USB_STORAGE_ENE_UB6250
	tristate "USB ENE card reader support"
	---help---
	  Say Y here if you wish to control a ENE SD/MS Card reader.
	  Note that this driver does not support SM cards.

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

endif # USB_STORAGE

config USB_UAS
	tristate "USB Attached SCSI"
	depends on SCSI && USB_STORAGE
	help
	  The USB Attached SCSI protocol is supported by some USB
	  storage devices.  It permits higher performance by supporting
	  multiple outstanding commands.

	  If you don't know whether you have a UAS device, it is safe to
	  say 'Y' or 'M' here and the kernel will use the right driver.

	  If you compile this driver as a module, it will be named uas.
