#
# HID driver configuration
#
menuconfig HID_SUPPORT
	bool "HID Devices"
	depends on INPUT
	default y
	---help---
	  Say Y here to get to see options for various computer-human interface
	  device drivers. This option alone does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and disabled.

if HID_SUPPORT

config HID
	tristate "Generic HID support"
	depends on INPUT
	default y
	---help---
	  A human interface device (HID) is a type of computer device that
	  interacts directly with and takes input from humans. The term "HID"
	  most commonly used to refer to the USB-HID specification, but other
	  devices (such as, but not strictly limited to, Bluetooth) are
	  designed using HID specification (this involves certain keyboards,
	  mice, tablets, etc). This option compiles into kernel the generic
	  HID layer code (parser, usages, etc.), which can then be used by
	  transport-specific HID implementation (like USB or Bluetooth).

	  For docs and specs, see http://www.usb.org/developers/hidpage/

	  If unsure, say Y

config HID_DEBUG
	bool "HID debugging support"
	default y if !EMBEDDED
	depends on HID
	---help---
	This option lets the HID layer output diagnostics about its internal
	state, resolve HID usages, dump HID fields, etc. Individual HID drivers
	use this debugging facility to output information about individual HID
	devices, etc.

	This feature is useful for those who are either debugging the HID parser
	or any HID hardware device.

	If unsure, say N

config HIDRAW
	bool "/dev/hidraw raw HID device support"
	depends on HID
	---help---
	Say Y here if you want to support HID devices (from the USB
	specification standpoint) that aren't strictly user interface
	devices, like monitor controls and Uninterruptable Power Supplies.

	This module supports these devices separately using a separate
	event interface on /dev/hidraw.

	There is also a /dev/hiddev configuration option in the USB HID
	configuration menu. In comparison to hiddev, this device does not process
	the hid events at all (no parsing, no lookups). This lets applications
	to work on raw hid events when they want to, and avoid using transport-specific
	userspace libhid/libusb libraries.

	If unsure, say Y.

source "drivers/hid/usbhid/Kconfig"

menu "Special HID drivers"
	depends on HID

config HID_COMPAT
	bool "Load all HID drivers on hid core load"
	default y
	---help---
	Compatible option for older userspace. If you have system without udev
	support of module loading through aliases and also old
	module-init-tools which can't handle hid bus, choose Y here. Otherwise
	say N. If you say N and your userspace is old enough, the only
	functionality you lose is modules autoloading.

	If unsure, say Y.

config HID_A4TECH
	tristate "A4 tech"
	default m
	depends on USB_HID
	---help---
	Support for A4 tech X5 and WOP-35 / Trust 450L mice.

config HID_APPLE
	tristate "Apple"
	default m
	depends on (USB_HID || BT_HIDP)
	---help---
	Support for some Apple devices which less or more break
	HID specification.

	Say Y here if you want support for the special keys (Fn, Numlock) on
	Apple iBooks, PowerBooks, MacBooks, MacBook Pros and aluminum USB
	keyboards.

	If unsure, say M.

config HID_BELKIN
	tristate "Belkin"
	default m
	depends on USB_HID
	---help---
	Support for Belkin Flip KVM and Wireless keyboard.

config HID_CHERRY
	tristate "Cherry"
	default m
	depends on USB_HID
	---help---
	Support for Cherry Cymotion.

config HID_CHICONY
	tristate "Chicony"
	default m
	depends on USB_HID
	---help---
	Support for Chicony Tactical pad.

config HID_CYPRESS
	tristate "Cypress"
	default m
	depends on USB_HID
	---help---
	Support for Cypress mouse and barcodes.

config HID_DELL
	tristate "Dell"
	default m
	depends on USB_HID
	---help---
	Support for Dell W7658.

config HID_EZKEY
	tristate "Ezkey"
	default m
	depends on USB_HID
	---help---
	Support for Ezkey mouse and barcodes.

config HID_GYRATION
	tristate "Gyration"
	default m
	depends on USB_HID
	---help---
	Support for Gyration remote.

config HID_LOGITECH
	tristate "Logitech"
	default m
	depends on USB_HID
	---help---
	Support for some Logitech devices which breaks less or more
	HID specification.

config LOGITECH_FF
	bool "Logitech force feedback"
	depends on HID_LOGITECH
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you have one of these devices:
	  - Logitech WingMan Cordless RumblePad
	  - Logitech WingMan Cordless RumblePad 2
	  - Logitech WingMan Force 3D
	  - Logitech Formula Force EX
	  - Logitech MOMO Force wheel

	  and if you want to enable force feedback for them.
	  Note: if you say N here, this device will still be supported, but without
	  force feedback.

config LOGIRUMBLEPAD2_FF
	bool "Logitech Rumblepad 2 force feedback"
	depends on HID_LOGITECH
	select INPUT_FF_MEMLESS
	help
	  Say Y here if you want to enable force feedback support for Logitech
	  Rumblepad 2 devices.

config HID_MICROSOFT
	tristate "Microsoft"
	default m
	depends on USB_HID
	---help---
	Support for some Microsoft devices which breaks less or more
	HID specification.

config HID_MONTEREY
	tristate "Monterey"
	default m
	depends on USB_HID
	---help---
	Support for Monterey Genius KB29E.

config HID_PETALYNX
	tristate "Petalynx"
	default m
	depends on USB_HID
	---help---
	Support for Petalynx Maxter remote.

config HID_SAMSUNG
	tristate "Samsung"
	default m
	depends on USB_HID
	---help---
	Support for Samsung IR remote.

config HID_SONY
	tristate "Sony"
	default m
	depends on USB_HID
	---help---
	Support for Sony PS3 controller.

config HID_SUNPLUS
	tristate "Sunplus"
	default m
	depends on USB_HID
	---help---
	Support for Sunplus WDesktop input device.

endmenu

endif # HID_SUPPORT
