V4L/DVB (8234): uvcvideo: Make input device support optional
UVC devices can report button events. The uvcvideo driver depends on CONFIG_INPUT to report events to the input layer. This patch removes the hard dependency by introducing a new CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV option. Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
Родитель
ac0d6df69b
Коммит
6833c917b4
|
@ -0,0 +1,17 @@
|
|||
config USB_VIDEO_CLASS
|
||||
tristate "USB Video Class (UVC)"
|
||||
---help---
|
||||
Support for the USB Video Class (UVC). Currently only video
|
||||
input devices, such as webcams, are supported.
|
||||
|
||||
For more information see: <http://linux-uvc.berlios.de/>
|
||||
|
||||
config USB_VIDEO_CLASS_INPUT_EVDEV
|
||||
bool "UVC input events device support"
|
||||
default y
|
||||
depends on USB_VIDEO_CLASS && INPUT
|
||||
---help---
|
||||
This option makes USB Video Class devices register an input device
|
||||
to report button events.
|
||||
|
||||
If you are in doubt, say Y.
|
|
@ -22,6 +22,7 @@
|
|||
/* --------------------------------------------------------------------------
|
||||
* Input device
|
||||
*/
|
||||
#ifdef CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV
|
||||
static int uvc_input_init(struct uvc_device *dev)
|
||||
{
|
||||
struct usb_device *udev = dev->udev;
|
||||
|
@ -67,6 +68,19 @@ static void uvc_input_cleanup(struct uvc_device *dev)
|
|||
input_unregister_device(dev->input);
|
||||
}
|
||||
|
||||
static void uvc_input_report_key(struct uvc_device *dev, unsigned int code,
|
||||
int value)
|
||||
{
|
||||
if (dev->input)
|
||||
input_report_key(dev->input, code, value);
|
||||
}
|
||||
|
||||
#else
|
||||
#define uvc_input_init(dev)
|
||||
#define uvc_input_cleanup(dev)
|
||||
#define uvc_input_report_key(dev, code, value)
|
||||
#endif /* CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV */
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* Status interrupt endpoint
|
||||
*/
|
||||
|
@ -83,8 +97,7 @@ static void uvc_event_streaming(struct uvc_device *dev, __u8 *data, int len)
|
|||
return;
|
||||
uvc_trace(UVC_TRACE_STATUS, "Button (intf %u) %s len %d\n",
|
||||
data[1], data[3] ? "pressed" : "released", len);
|
||||
if (dev->input)
|
||||
input_report_key(dev->input, BTN_0, data[3]);
|
||||
uvc_input_report_key(dev, BTN_0, data[3]);
|
||||
} else {
|
||||
uvc_trace(UVC_TRACE_STATUS, "Stream %u error event %02x %02x "
|
||||
"len %d.\n", data[1], data[2], data[3], len);
|
||||
|
|
Загрузка…
Ссылка в новой задаче