1/* Copyright (c) 2014, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 * GNU General Public License for more details.
11 */
12#ifndef __UAPI_MSM_FD__
13#define __UAPI_MSM_FD__
14
15#include <linux/videodev2.h>
16
17/*
18 * struct msm_fd_event - Structure contain event info.
19 * @buf_index: Buffer index.
20 * @frame_id: Frame id.
21 * @face_cnt: Detected faces.
22 */
23struct msm_fd_event {
24	__u32 buf_index;
25	__u32 frame_id;
26	__u32 face_cnt;
27};
28
29/*
30 * enum msm_fd_pose - Face pose.
31 */
32enum msm_fd_pose {
33	MSM_FD_POSE_FRONT,
34	MSM_FD_POSE_RIGHT_DIAGONAL,
35	MSM_FD_POSE_RIGHT,
36	MSM_FD_POSE_LEFT_DIAGONAL,
37	MSM_FD_POSE_LEFT,
38};
39
40/*
41 * struct msm_fd_face_data - Structure contain detected face data.
42 * @pose: refer to enum msm_fd_pose.
43 * @angle: Face angle
44 * @confidence: Face confidence level.
45 * @reserved: Reserved data for future use.
46 * @face: Face rectangle.
47 */
48struct msm_fd_face_data {
49	__u32 pose;
50	__u32 angle;
51	__u32 confidence;
52	__u32 reserved;
53	struct v4l2_rect face;
54};
55
56/*
57 * struct msm_fd_result - Structure contain detected faces result.
58 * @frame_id: Frame id of requested result.
59 * @face_cnt: Number of result faces, driver can modify this value (to smaller)
60 * @face_data: Pointer to array of face data structures.
61 *  Array size should not be smaller then face_cnt.
62 */
63struct msm_fd_result {
64	__u32 frame_id;
65	__u32 face_cnt;
66	struct msm_fd_face_data __user *face_data;
67};
68
69#ifdef CONFIG_COMPAT
70/*
71 * struct msm_fd_result32 - Compat structure contain detected faces result.
72 * @frame_id: Frame id of requested result.
73 * @face_cnt: Number of result faces, driver can modify this value (to smaller)
74 * @face_data: Pointer to array of face data structures.
75 *  Array size should not be smaller then face_cnt.
76 */
77struct msm_fd_result32 {
78	__u32 frame_id;
79	__u32 face_cnt;
80	compat_uptr_t face_data;
81};
82
83/* MSM FD compat private ioctl ID */
84#define VIDIOC_MSM_FD_GET_RESULT32 \
85	_IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_fd_result32)
86#endif
87
88/* MSM FD private ioctl ID */
89#define VIDIOC_MSM_FD_GET_RESULT \
90	_IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_fd_result)
91
92/* MSM FD event ID */
93#define MSM_EVENT_FD (V4L2_EVENT_PRIVATE_START)
94
95/* MSM FD control ID's */
96#define V4L2_CID_FD_SPEED                (V4L2_CID_PRIVATE_BASE)
97#define V4L2_CID_FD_FACE_ANGLE           (V4L2_CID_PRIVATE_BASE + 1)
98#define V4L2_CID_FD_MIN_FACE_SIZE        (V4L2_CID_PRIVATE_BASE + 2)
99#define V4L2_CID_FD_FACE_DIRECTION       (V4L2_CID_PRIVATE_BASE + 3)
100#define V4L2_CID_FD_DETECTION_THRESHOLD  (V4L2_CID_PRIVATE_BASE + 4)
101#define V4L2_CID_FD_WORK_MEMORY_SIZE     (V4L2_CID_PRIVATE_BASE + 5)
102#define V4L2_CID_FD_WORK_MEMORY_FD       (V4L2_CID_PRIVATE_BASE + 6)
103
104#endif /* __UAPI_MSM_FD__ */
105