Currently user space application which has v4l2 file handle has no way to know that uvc function is unbounded from the composition. Later when it tries to release the file handle, we end up accessing stale gadget side data structures. Address this issue by sending an uevent upon unbind. If the user space application has subscribed to this uevent, block the unbind until the last v4l2 file handle is released. The function drivers which use function activate/deactivate method to delay enumeration has no way to keep the de-activations count sync across composition switch. Reset the cdev->deactivations to start from the fresh when a new composition is selected. Change-Id: Id389cf8cc59aba6dbeca7c1fb52a990a25c084de Signed-off-by: Pavankumar Kondeti <quic_pkondeti@quicinc.com>
41 lines
1.1 KiB
C
41 lines
1.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* g_uvc.h -- USB Video Class Gadget driver API
|
|
*
|
|
* Copyright (C) 2009-2010 Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
*/
|
|
|
|
#ifndef __LINUX_USB_G_UVC_H
|
|
#define __LINUX_USB_G_UVC_H
|
|
|
|
#include <linux/ioctl.h>
|
|
#include <linux/types.h>
|
|
#include <linux/usb/ch9.h>
|
|
|
|
#define UVC_EVENT_FIRST (V4L2_EVENT_PRIVATE_START + 0)
|
|
#define UVC_EVENT_CONNECT (V4L2_EVENT_PRIVATE_START + 0)
|
|
#define UVC_EVENT_DISCONNECT (V4L2_EVENT_PRIVATE_START + 1)
|
|
#define UVC_EVENT_STREAMON (V4L2_EVENT_PRIVATE_START + 2)
|
|
#define UVC_EVENT_STREAMOFF (V4L2_EVENT_PRIVATE_START + 3)
|
|
#define UVC_EVENT_SETUP (V4L2_EVENT_PRIVATE_START + 4)
|
|
#define UVC_EVENT_DATA (V4L2_EVENT_PRIVATE_START + 5)
|
|
#define UVC_EVENT_UNBIND (V4L2_EVENT_PRIVATE_START + 6)
|
|
#define UVC_EVENT_LAST (V4L2_EVENT_PRIVATE_START + 6)
|
|
|
|
struct uvc_request_data {
|
|
__s32 length;
|
|
__u8 data[60];
|
|
};
|
|
|
|
struct uvc_event {
|
|
union {
|
|
enum usb_device_speed speed;
|
|
struct usb_ctrlrequest req;
|
|
struct uvc_request_data data;
|
|
};
|
|
};
|
|
|
|
#define UVCIOC_SEND_RESPONSE _IOW('U', 1, struct uvc_request_data)
|
|
|
|
#endif /* __LINUX_USB_G_UVC_H */
|