# SPDX-License-Identifier: GPL-2.0-only
#
# MemoryStick host controller drivers
#

comment "MemoryStick Host Controller Drivers"

config MEMSTICK_TIFM_MS
	tristate "TI Flash Media MemoryStick Interface support "
	depends on PCI
	select TIFM_CORE
	help
	  Say Y here if you want to be able to access MemoryStick cards with
	  the Texas Instruments(R) Flash Media card reader, found in many
	  laptops.
	  This option 'selects' (turns on, enables) 'TIFM_CORE', but you
	  probably also need appropriate card reader host adapter, such as
	  'Misc devices: TI Flash Media PCI74xx/PCI76xx host adapter support
	  (TIFM_7XX1)'.

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

config MEMSTICK_JMICRON_38X
	tristate "JMicron JMB38X MemoryStick interface support"
	depends on PCI

	help
	  Say Y here if you want to be able to access MemoryStick cards with
	  the JMicron(R) JMB38X MemoryStick card reader.

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

config MEMSTICK_R592
	tristate "Ricoh R5C592 MemoryStick interface support"
	depends on PCI

	help
	  Say Y here if you want to be able to access MemoryStick cards with
	  the Ricoh R5C592 MemoryStick card reader (which is part of 5 in one
		multifunction reader)

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

config MEMSTICK_REALTEK_PCI
	tristate "Realtek PCI-E Memstick Card Interface Driver"
	depends on MISC_RTSX_PCI
	help
	  Say Y here to include driver code to support Memstick card interface
	  of Realtek PCI-E card reader

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

config MEMSTICK_REALTEK_USB
	tristate "Realtek USB Memstick Card Interface Driver"
	depends on MISC_RTSX_USB
	help
	  Say Y here to include driver code to support Memstick card interface
	  of Realtek RTS5129/39 series USB card reader

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