#
# Generic video config states
#

config VIDEO_V4L2
	tristate
	depends on VIDEO_DEV && VIDEO_V4L2_COMMON
	default VIDEO_DEV && VIDEO_V4L2_COMMON

config VIDEO_V4L1
	tristate
	depends on VIDEO_DEV && VIDEO_V4L2_COMMON && VIDEO_ALLOW_V4L1
	default VIDEO_DEV && VIDEO_V4L2_COMMON && VIDEO_ALLOW_V4L1

config VIDEOBUF_GEN
	tristate

config VIDEOBUF_DMA_SG
	depends on HAS_DMA
	select VIDEOBUF_GEN
	tristate

config VIDEOBUF_VMALLOC
	select VIDEOBUF_GEN
	tristate

config VIDEOBUF_DMA_CONTIG
	depends on HAS_DMA
	select VIDEOBUF_GEN
	tristate

config VIDEOBUF_DVB
	tristate
	select VIDEOBUF_GEN

config VIDEO_BTCX
	depends on PCI
	tristate

config VIDEO_IR
	tristate
	depends on INPUT

config VIDEO_TVEEPROM
	tristate
	depends on I2C

config VIDEO_TUNER
	tristate
	depends on MEDIA_TUNER

#
# Multimedia Video device configuration
#

menuconfig VIDEO_CAPTURE_DRIVERS
	bool "Video capture adapters"
	depends on VIDEO_V4L2
	default y
	---help---
	  Say Y here to enable selecting the video adapters for
	  webcams, analog TV, and hybrid analog/digital TV.
	  Some of those devices also supports FM radio.

if VIDEO_CAPTURE_DRIVERS && VIDEO_V4L2

config VIDEO_ADV_DEBUG
	bool "Enable advanced debug functionality"
	default n
	---help---
	  Say Y here to enable advanced debugging functionality on some
	  V4L devices.
	  In doubt, say N.

config VIDEO_FIXED_MINOR_RANGES
	bool "Enable old-style fixed minor ranges for video devices"
	default n
	---help---
	  Say Y here to enable the old-style fixed-range minor assignments.
	  Only useful if you rely on the old behavior and use mknod instead of udev.

	  When in doubt, say N.

config VIDEO_HELPER_CHIPS_AUTO
	bool "Autoselect pertinent encoders/decoders and other helper chips"
	default y
	---help---
	  Most video cards may require additional modules to encode or
	  decode audio/video standards. This option will autoselect
	  all pertinent modules to each selected video module.

	  Unselect this only if you know exactly what you are doing, since
	  it may break support on some boards.

	  In doubt, say Y.

config VIDEO_IR_I2C
	tristate "I2C module for IR" if !VIDEO_HELPER_CHIPS_AUTO
	depends on I2C && VIDEO_IR
	default y
	---help---
	  Most boards have an IR chip directly connected via GPIO. However,
	  some video boards have the IR connected via I2C bus.

	  If your board doesn't have an I2C IR chip, you may disable this
	  option.

	  In doubt, say Y.

#
# Encoder / Decoder module configuration
#

menu "Encoders/decoders and other helper chips"
	depends on !VIDEO_HELPER_CHIPS_AUTO

comment "Audio decoders"

config VIDEO_TVAUDIO
	tristate "Simple audio decoder chips"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for several audio decoder chips found on some bt8xx boards:
	  Philips: tda9840, tda9873h, tda9874h/a, tda9850, tda985x, tea6300,
		   tea6320, tea6420, tda8425, ta8874z.
	  Microchip: pic16c54 based design on ProVideo PV951 board.

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

config VIDEO_TDA7432
	tristate "Philips TDA7432 audio processor"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for tda7432 audio decoder chip found on some bt8xx boards.

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

config VIDEO_TDA9840
	tristate "Philips TDA9840 audio processor"
	depends on I2C
	---help---
	  Support for tda9840 audio decoder chip found on some Zoran boards.

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

config VIDEO_TDA9875
	tristate "Philips TDA9875 audio processor"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for tda9875 audio decoder chip found on some bt8xx boards.

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

config VIDEO_TEA6415C
	tristate "Philips TEA6415C audio processor"
	depends on I2C
	---help---
	  Support for tea6415c audio decoder chip found on some bt8xx boards.

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

config VIDEO_TEA6420
	tristate "Philips TEA6420 audio processor"
	depends on I2C
	---help---
	  Support for tea6420 audio decoder chip found on some bt8xx boards.

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

config VIDEO_MSP3400
	tristate "Micronas MSP34xx audio decoders"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Micronas MSP34xx series of audio decoders.

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

config VIDEO_CS5345
	tristate "Cirrus Logic CS5345 audio ADC"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Cirrus Logic CS5345 24-bit, 192 kHz
	  stereo A/D converter.

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

config VIDEO_CS53L32A
	tristate "Cirrus Logic CS53L32A audio ADC"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Cirrus Logic CS53L32A low voltage
	  stereo A/D converter.

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

config VIDEO_M52790
	tristate "Mitsubishi M52790 A/V switch"
	depends on VIDEO_V4L2 && I2C
	---help---
	 Support for the Mitsubishi M52790 A/V switch.

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

config VIDEO_TLV320AIC23B
	tristate "Texas Instruments TLV320AIC23B audio codec"
	depends on VIDEO_V4L2 && I2C && EXPERIMENTAL
	---help---
	  Support for the Texas Instruments TLV320AIC23B audio codec.

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

config VIDEO_WM8775
	tristate "Wolfson Microelectronics WM8775 audio ADC with input mixer"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Wolfson Microelectronics WM8775 high
	  performance stereo A/D Converter with a 4 channel input mixer.

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

config VIDEO_WM8739
	tristate "Wolfson Microelectronics WM8739 stereo audio ADC"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Wolfson Microelectronics WM8739
	  stereo A/D Converter.

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

config VIDEO_VP27SMPX
	tristate "Panasonic VP27s internal MPX"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the internal MPX of the Panasonic VP27s tuner.

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

comment "RDS decoders"

config VIDEO_SAA6588
	tristate "SAA6588 Radio Chip RDS decoder support"
	depends on VIDEO_V4L2 && I2C

	help
	  Support for this Radio Data System (RDS) decoder. This allows
	  seeing radio station identification transmitted using this
	  standard.

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

comment "Video decoders"

config VIDEO_BT819
	tristate "BT819A VideoStream decoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for BT819A video decoder.

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

config VIDEO_BT856
	tristate "BT856 VideoStream decoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for BT856 video decoder.

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

config VIDEO_BT866
	tristate "BT866 VideoStream decoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for BT866 video decoder.

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

config VIDEO_KS0127
	tristate "KS0127 video decoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for KS0127 video decoder.

	  This chip is used on AverMedia AVS6EYES Zoran-based MJPEG
	  cards.

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

config VIDEO_OV7670
	tristate "OmniVision OV7670 sensor support"
	depends on I2C && VIDEO_V4L2
	---help---
	  This is a Video4Linux2 sensor-level driver for the OmniVision
	  OV7670 VGA camera.  It currently only works with the M88ALP01
	  controller.

config VIDEO_MT9V011
	tristate "Micron mt9v011 sensor support"
	depends on I2C && VIDEO_V4L2
	---help---
	  This is a Video4Linux2 sensor-level driver for the Micron
	  mt0v011 1.3 Mpixel camera.  It currently only works with the
	  em28xx driver.

config VIDEO_TCM825X
	tristate "TCM825x camera sensor support"
	depends on I2C && VIDEO_V4L2
	---help---
	  This is a driver for the Toshiba TCM825x VGA camera sensor.
	  It is used for example in Nokia N800.

config VIDEO_SAA7110
	tristate "Philips SAA7110 video decoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Philips SAA7110 video decoders.

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

config VIDEO_SAA711X
	tristate "Philips SAA7111/3/4/5 video decoders"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Philips SAA7111/3/4/5 video decoders.

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

config VIDEO_SAA717X
	tristate "Philips SAA7171/3/4 audio/video decoders"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Philips SAA7171/3/4 audio/video decoders.

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

config VIDEO_SAA7191
	tristate "Philips SAA7191 video decoder"
	depends on VIDEO_V4L1 && I2C
	---help---
	  Support for the Philips SAA7191 video decoder.

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

config VIDEO_TVP514X
	tristate "Texas Instruments TVP514x video decoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  This is a Video4Linux2 sensor-level driver for the TI TVP5146/47
	  decoder. It is currently working with the TI OMAP3 camera
	  controller.

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

config VIDEO_TVP5150
	tristate "Texas Instruments TVP5150 video decoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Texas Instruments TVP5150 video decoder.

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

config VIDEO_VPX3220
	tristate "vpx3220a, vpx3216b & vpx3214c video decoders"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for VPX322x video decoders.

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

comment "Video and audio decoders"

source "drivers/media/video/cx25840/Kconfig"

comment "MPEG video encoders"

config VIDEO_CX2341X
	tristate "Conexant CX2341x MPEG encoders"
	depends on VIDEO_V4L2 && VIDEO_V4L2_COMMON
	---help---
	  Support for the Conexant CX23416 MPEG encoders
	  and CX23415 MPEG encoder/decoders.

	  This module currently supports the encoding functions only.

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

comment "Video encoders"

config VIDEO_SAA7127
	tristate "Philips SAA7127/9 digital video encoders"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Philips SAA7127/9 digital video encoders.

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

config VIDEO_SAA7185
	tristate "Philips SAA7185 video encoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Philips SAA7185 video encoder.

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

config VIDEO_ADV7170
	tristate "Analog Devices ADV7170 video encoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Analog Devices ADV7170 video encoder driver

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

config VIDEO_ADV7175
	tristate "Analog Devices ADV7175 video encoder"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the Analog Devices ADV7175 video encoder driver

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

config VIDEO_THS7303
	tristate "THS7303 Video Amplifier"
	depends on I2C
	help
	  Support for TI THS7303 video amplifier

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

config VIDEO_ADV7343
	tristate "ADV7343 video encoder"
	depends on I2C
	help
	  Support for Analog Devices I2C bus based ADV7343 encoder.

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

comment "Video improvement chips"

config VIDEO_UPD64031A
	tristate "NEC Electronics uPD64031A Ghost Reduction"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the NEC Electronics uPD64031A Ghost Reduction
	  video chip. It is most often found in NTSC TV cards made for
	  Japan and is used to reduce the 'ghosting' effect that can
	  be present in analog TV broadcasts.

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

config VIDEO_UPD64083
	tristate "NEC Electronics uPD64083 3-Dimensional Y/C separation"
	depends on VIDEO_V4L2 && I2C
	---help---
	  Support for the NEC Electronics uPD64083 3-Dimensional Y/C
	  separation video chip. It is used to improve the quality of
	  the colors of a composite signal.

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

endmenu # encoder / decoder chips

config DISPLAY_DAVINCI_DM646X_EVM
	tristate "DM646x EVM Video Display"
	depends on VIDEO_DEV && MACH_DAVINCI_DM6467_EVM
	select VIDEOBUF_DMA_CONTIG
	select VIDEO_DAVINCI_VPIF
	select VIDEO_ADV7343
	select VIDEO_THS7303
	help
	  Support for DM6467 based display device.

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

config CAPTURE_DAVINCI_DM646X_EVM
	tristate "DM646x EVM Video Capture"
	depends on VIDEO_DEV && MACH_DAVINCI_DM6467_EVM
	select VIDEOBUF_DMA_CONTIG
	select VIDEO_DAVINCI_VPIF
	help
	  Support for DM6467 based capture device.

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

config VIDEO_DAVINCI_VPIF
	tristate "DaVinci VPIF Driver"
	depends on DISPLAY_DAVINCI_DM646X_EVM
	help
	  Support for DaVinci VPIF Driver.

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

config VIDEO_VIVI
	tristate "Virtual Video Driver"
	depends on VIDEO_DEV && VIDEO_V4L2 && !SPARC32 && !SPARC64
	select VIDEOBUF_VMALLOC
	default n
	---help---
	  Enables a virtual video driver. This device shows a color bar
	  and a timestamp, as a real device would generate by using V4L2
	  api.
	  Say Y here if you want to test video apps or debug V4L devices.
	  In doubt, say N.

config VIDEO_VPSS_SYSTEM
	tristate "VPSS System module driver"
	depends on ARCH_DAVINCI
	help
	  Support for vpss system module for video driver
	default y

config VIDEO_VPFE_CAPTURE
	tristate "VPFE Video Capture Driver"
	depends on VIDEO_V4L2 && ARCH_DAVINCI
	select VIDEOBUF_DMA_CONTIG
	help
	  Support for DMXXXX VPFE based frame grabber. This is the
	  common V4L2 module for following DMXXX SoCs from Texas
	  Instruments:- DM6446 & DM355.

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

config VIDEO_DM6446_CCDC
	tristate "DM6446 CCDC HW module"
	depends on ARCH_DAVINCI_DM644x && VIDEO_VPFE_CAPTURE
	select VIDEO_VPSS_SYSTEM
	default y
	help
	   Enables DaVinci CCD hw module. DaVinci CCDC hw interfaces
	   with decoder modules such as TVP5146 over BT656 or
	   sensor module such as MT9T001 over a raw interface. This
	   module configures the interface and CCDC/ISIF to do
	   video frame capture from slave decoders.

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

config VIDEO_DM355_CCDC
	tristate "DM355 CCDC HW module"
	depends on ARCH_DAVINCI_DM355 && VIDEO_VPFE_CAPTURE
	select VIDEO_VPSS_SYSTEM
	default y
	help
	   Enables DM355 CCD hw module. DM355 CCDC hw interfaces
	   with decoder modules such as TVP5146 over BT656 or
	   sensor module such as MT9T001 over a raw interface. This
	   module configures the interface and CCDC/ISIF to do
	   video frame capture from a slave decoders

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

source "drivers/media/video/bt8xx/Kconfig"

config VIDEO_PMS
	tristate "Mediavision Pro Movie Studio Video For Linux"
	depends on ISA && VIDEO_V4L1
	help
	  Say Y if you have such a thing.

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

config VIDEO_BWQCAM
	tristate "Quickcam BW Video For Linux"
	depends on PARPORT && VIDEO_V4L1
	help
	  Say Y have if you the black and white version of the QuickCam
	  camera. See the next option for the color version.

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

config VIDEO_CQCAM
	tristate "QuickCam Colour Video For Linux (EXPERIMENTAL)"
	depends on EXPERIMENTAL && PARPORT && VIDEO_V4L1
	help
	  This is the video4linux driver for the colour version of the
	  Connectix QuickCam.  If you have one of these cameras, say Y here,
	  otherwise say N.  This driver does not work with the original
	  monochrome QuickCam, QuickCam VC or QuickClip.  It is also available
	  as a module (c-qcam).
	  Read <file:Documentation/video4linux/CQcam.txt> for more information.

config VIDEO_W9966
	tristate "W9966CF Webcam (FlyCam Supra and others) Video For Linux"
	depends on PARPORT_1284 && PARPORT && VIDEO_V4L1
	help
	  Video4linux driver for Winbond's w9966 based Webcams.
	  Currently tested with the LifeView FlyCam Supra.
	  If you have one of these cameras, say Y here
	  otherwise say N.
	  This driver is also available as a module (w9966).

	  Check out <file:Documentation/video4linux/w9966.txt> for more
	  information.

config VIDEO_CPIA
	tristate "CPiA Video For Linux"
	depends on VIDEO_V4L1
	---help---
	  This is the video4linux driver for cameras based on Vision's CPiA
	  (Colour Processor Interface ASIC), such as the Creative Labs Video
	  Blaster Webcam II. If you have one of these cameras, say Y here
	  and select parallel port and/or USB lowlevel support below,
	  otherwise say N. This will not work with the Creative Webcam III.

	  Please read <file:Documentation/video4linux/README.cpia> for more
	  information.

	  This driver is also available as a module (cpia).

config VIDEO_CPIA_PP
	tristate "CPiA Parallel Port Lowlevel Support"
	depends on PARPORT_1284 && VIDEO_CPIA && PARPORT
	help
	  This is the lowlevel parallel port support for cameras based on
	  Vision's CPiA (Colour Processor Interface ASIC), such as the
	  Creative Webcam II. If you have the parallel port version of one
	  of these cameras, say Y here, otherwise say N. It is also available
	  as a module (cpia_pp).

config VIDEO_CPIA_USB
	tristate "CPiA USB Lowlevel Support"
	depends on VIDEO_CPIA && USB
	help
	  This is the lowlevel USB support for cameras based on Vision's CPiA
	  (Colour Processor Interface ASIC), such as the Creative Webcam II.
	  If you have the USB version of one of these cameras, say Y here,
	  otherwise say N. This will not work with the Creative Webcam III.
	  It is also available as a module (cpia_usb).

source "drivers/media/video/cpia2/Kconfig"

config VIDEO_SAA5246A
	tristate "SAA5246A, SAA5281 Teletext processor"
	depends on I2C && VIDEO_V4L2
	help
	  Support for I2C bus based teletext using the SAA5246A or SAA5281
	  chip. Useful only if you live in Europe.

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

config VIDEO_SAA5249
	tristate "SAA5249 Teletext processor"
	depends on I2C && VIDEO_V4L2
	help
	  Support for I2C bus based teletext using the SAA5249 chip. At the
	  moment this is only useful on some European WinTV cards.

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

config VIDEO_VINO
	tristate "SGI Vino Video For Linux (EXPERIMENTAL)"
	depends on I2C && SGI_IP22 && EXPERIMENTAL && VIDEO_V4L2
	select VIDEO_SAA7191 if VIDEO_HELPER_CHIPS_AUTO
	help
	  Say Y here to build in support for the Vino video input system found
	  on SGI Indy machines.

config VIDEO_STRADIS
	tristate "Stradis 4:2:2 MPEG-2 video driver  (EXPERIMENTAL)"
	depends on EXPERIMENTAL && PCI && VIDEO_V4L1 && VIRT_TO_BUS
	help
	  Say Y here to enable support for the Stradis 4:2:2 MPEG-2 video
	  driver for PCI.  There is a product page at
	  <http://www.stradis.com/>.

source "drivers/media/video/zoran/Kconfig"

config VIDEO_MEYE
	tristate "Sony Vaio Picturebook Motion Eye Video For Linux"
	depends on PCI && SONY_LAPTOP && VIDEO_V4L1
	---help---
	  This is the video4linux driver for the Motion Eye camera found
	  in the Vaio Picturebook laptops. Please read the material in
	  <file:Documentation/video4linux/meye.txt> for more information.

	  If you say Y or M here, you need to say Y or M to "Sony Laptop
	  Extras" in the misc device section.

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

source "drivers/media/video/saa7134/Kconfig"

config VIDEO_MXB
	tristate "Siemens-Nixdorf 'Multimedia eXtension Board'"
	depends on PCI && VIDEO_V4L1 && I2C
	select VIDEO_SAA7146_VV
	select VIDEO_TUNER
	select VIDEO_SAA711X if VIDEO_HELPER_CHIPS_AUTO
	select VIDEO_TDA9840 if VIDEO_HELPER_CHIPS_AUTO
	select VIDEO_TEA6415C if VIDEO_HELPER_CHIPS_AUTO
	select VIDEO_TEA6420 if VIDEO_HELPER_CHIPS_AUTO
	---help---
	  This is a video4linux driver for the 'Multimedia eXtension Board'
	  TV card by Siemens-Nixdorf.

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

config VIDEO_HEXIUM_ORION
	tristate "Hexium HV-PCI6 and Orion frame grabber"
	depends on PCI && VIDEO_V4L2 && I2C
	select VIDEO_SAA7146_VV
	---help---
	  This is a video4linux driver for the Hexium HV-PCI6 and
	  Orion frame grabber cards by Hexium.

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

config VIDEO_HEXIUM_GEMINI
	tristate "Hexium Gemini frame grabber"
	depends on PCI && VIDEO_V4L2 && I2C
	select VIDEO_SAA7146_VV
	---help---
	  This is a video4linux driver for the Hexium Gemini frame
	  grabber card by Hexium. Please note that the Gemini Dual
	  card is *not* fully supported.

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

source "drivers/media/video/cx88/Kconfig"

source "drivers/media/video/cx23885/Kconfig"

source "drivers/media/video/au0828/Kconfig"

source "drivers/media/video/ivtv/Kconfig"

source "drivers/media/video/cx18/Kconfig"

source "drivers/media/video/saa7164/Kconfig"

config VIDEO_M32R_AR
	tristate "AR devices"
	depends on M32R && VIDEO_V4L1
	---help---
	  This is a video4linux driver for the Renesas AR (Artificial Retina)
	  camera module.

config VIDEO_M32R_AR_M64278
	tristate "AR device with color module M64278(VGA)"
	depends on PLAT_M32700UT
	select VIDEO_M32R_AR
	---help---
	  This is a video4linux driver for the Renesas AR (Artificial
	  Retina) with M64278E-800 camera module.
	  This module supports VGA(640x480 pixels) resolutions.

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

config VIDEO_CAFE_CCIC
	tristate "Marvell 88ALP01 (Cafe) CMOS Camera Controller support"
	depends on PCI && I2C && VIDEO_V4L2
	select VIDEO_OV7670
	---help---
	  This is a video4linux2 driver for the Marvell 88ALP01 integrated
	  CMOS camera controller.  This is the controller found on first-
	  generation OLPC systems.

config SOC_CAMERA
	tristate "SoC camera support"
	depends on VIDEO_V4L2 && HAS_DMA && I2C
	select VIDEOBUF_GEN
	help
	  SoC Camera is a common API to several cameras, not connecting
	  over a bus like PCI or USB. For example some i2c camera connected
	  directly to the data bus of an SoC.

config SOC_CAMERA_MT9M001
	tristate "mt9m001 support"
	depends on SOC_CAMERA && I2C
	select GPIO_PCA953X if MT9M001_PCA9536_SWITCH
	help
	  This driver supports MT9M001 cameras from Micron, monochrome
	  and colour models.

config SOC_CAMERA_MT9M111
	tristate "mt9m111 and mt9m112 support"
	depends on SOC_CAMERA && I2C
	help
	  This driver supports MT9M111 and MT9M112 cameras from Micron

config SOC_CAMERA_MT9T031
	tristate "mt9t031 support"
	depends on SOC_CAMERA && I2C
	help
	  This driver supports MT9T031 cameras from Micron.

config SOC_CAMERA_MT9V022
	tristate "mt9v022 support"
	depends on SOC_CAMERA && I2C
	select GPIO_PCA953X if MT9V022_PCA9536_SWITCH
	help
	  This driver supports MT9V022 cameras from Micron

config SOC_CAMERA_TW9910
	tristate "tw9910 support"
	depends on SOC_CAMERA && I2C
	help
	  This is a tw9910 video driver

config SOC_CAMERA_PLATFORM
	tristate "platform camera support"
	depends on SOC_CAMERA
	help
	  This is a generic SoC camera platform driver, useful for testing

config SOC_CAMERA_OV772X
	tristate "ov772x camera support"
	depends on SOC_CAMERA && I2C
	help
	  This is a ov772x camera driver

config MX1_VIDEO
	bool

config VIDEO_MX1
	tristate "i.MX1/i.MXL CMOS Sensor Interface driver"
	depends on VIDEO_DEV && ARCH_MX1 && SOC_CAMERA
	select FIQ
	select VIDEOBUF_DMA_CONTIG
	select MX1_VIDEO
	---help---
	  This is a v4l2 driver for the i.MX1/i.MXL CMOS Sensor Interface

config MX3_VIDEO
	bool

config VIDEO_MX3
	tristate "i.MX3x Camera Sensor Interface driver"
	depends on VIDEO_DEV && MX3_IPU && SOC_CAMERA
	select VIDEOBUF_DMA_CONTIG
	select MX3_VIDEO
	---help---
	  This is a v4l2 driver for the i.MX3x Camera Sensor Interface

config VIDEO_PXA27x
	tristate "PXA27x Quick Capture Interface driver"
	depends on VIDEO_DEV && PXA27x && SOC_CAMERA
	select VIDEOBUF_DMA_SG
	---help---
	  This is a v4l2 driver for the PXA27x Quick Capture Interface

config VIDEO_SH_MOBILE_CEU
	tristate "SuperH Mobile CEU Interface driver"
	depends on VIDEO_DEV && SOC_CAMERA && HAS_DMA && HAVE_CLK
	select VIDEOBUF_DMA_CONTIG
	---help---
	  This is a v4l2 driver for the SuperH Mobile CEU Interface

config VIDEO_OMAP2
	tristate "OMAP2 Camera Capture Interface driver"
	depends on VIDEO_DEV && ARCH_OMAP2
	select VIDEOBUF_DMA_SG
	---help---
	  This is a v4l2 driver for the TI OMAP2 camera capture interface

#
# USB Multimedia device configuration
#

menuconfig V4L_USB_DRIVERS
	bool "V4L USB devices"
	depends on USB
	default y

if V4L_USB_DRIVERS && USB

source "drivers/media/video/uvc/Kconfig"

source "drivers/media/video/gspca/Kconfig"

source "drivers/media/video/pvrusb2/Kconfig"

source "drivers/media/video/hdpvr/Kconfig"

source "drivers/media/video/em28xx/Kconfig"

source "drivers/media/video/cx231xx/Kconfig"

source "drivers/media/video/usbvision/Kconfig"

source "drivers/media/video/usbvideo/Kconfig"

source "drivers/media/video/et61x251/Kconfig"

config VIDEO_OVCAMCHIP
	tristate "OmniVision Camera Chip support"
	depends on I2C && VIDEO_V4L1
	---help---
	  Support for the OmniVision OV6xxx and OV7xxx series of camera chips.
	  This driver is intended to be used with the ov511 and w9968cf USB
	  camera drivers.

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

config USB_W9968CF
	tristate "USB W996[87]CF JPEG Dual Mode Camera support"
	depends on VIDEO_V4L1 && I2C && VIDEO_OVCAMCHIP
	---help---
	  Say Y here if you want support for cameras based on OV681 or
	  Winbond W9967CF/W9968CF JPEG USB Dual Mode Camera Chips.

	  This driver has an optional plugin, which is distributed as a
	  separate module only (released under GPL). It allows to use higher
	  resolutions and framerates, but cannot be included in the official
	  Linux kernel for performance purposes.

	  See <file:Documentation/video4linux/w9968cf.txt> for more info.

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

config USB_OV511
	tristate "USB OV511 Camera support (DEPRECATED)"
	depends on VIDEO_V4L1
	---help---
	  This driver is DEPRECATED please use the gspca ov519 module
	  instead. Note that for the ov511 / ov518 support of the gspca module
	  you need atleast version 0.6.0 of libv4l.

	  Say Y here if you want to connect this type of camera to your
	  computer's USB port. See <file:Documentation/video4linux/ov511.txt>
	  for more information and for a list of supported cameras.

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

config USB_SE401
	tristate "USB SE401 Camera support"
	depends on VIDEO_V4L1
	---help---
	  Say Y here if you want to connect this type of camera to your
	  computer's USB port. See <file:Documentation/video4linux/se401.txt>
	  for more information and for a list of supported cameras.

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

source "drivers/media/video/sn9c102/Kconfig"

config USB_STV680
	tristate "USB STV680 (Pencam) Camera support"
	depends on VIDEO_V4L1
	---help---
	  Say Y here if you want to connect this type of camera to your
	  computer's USB port. This includes the Pencam line of cameras.
	  See <file:Documentation/video4linux/stv680.txt> for more information
	  and for a list of supported cameras.

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

source "drivers/media/video/zc0301/Kconfig"

source "drivers/media/video/pwc/Kconfig"

config USB_ZR364XX
	tristate "USB ZR364XX Camera support"
	depends on VIDEO_V4L2
	select VIDEOBUF_GEN
	select VIDEOBUF_VMALLOC
	---help---
	  Say Y here if you want to connect this type of camera to your
	  computer's USB port.
	  See <file:Documentation/video4linux/zr364xx.txt> for more info
	  and list of supported cameras.

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

config USB_STKWEBCAM
	tristate "USB Syntek DC1125 Camera support"
	depends on VIDEO_V4L2 && EXPERIMENTAL
	---help---
	  Say Y here if you want to use this type of camera.
	  Supported devices are typically found in some Asus laptops,
	  with USB id 174f:a311 and 05e1:0501. Other Syntek cameras
	  may be supported by the stk11xx driver, from which this is
	  derived, see http://stk11xx.sourceforge.net

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

config USB_S2255
	tristate "USB Sensoray 2255 video capture device"
	depends on VIDEO_V4L2
	select VIDEOBUF_VMALLOC
	default n
	help
	  Say Y here if you want support for the Sensoray 2255 USB device.
	  This driver can be compiled as a module, called s2255drv.

endif # V4L_USB_DRIVERS
endif # VIDEO_CAPTURE_DRIVERS
