summaryrefslogtreecommitdiff
path: root/isp/subdev.h
blob: 5bbbe84fef4fb92122b800e283c39e07bd656e61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
/*
 * OMAP3 ISP library - V4L2 sub-devices
 *
 * Copyright (C) 2010-2011 Ideas on board SPRL
 *
 * Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 *
 * This library is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or (at
 * your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#ifndef __SUBDEV_H__
#define __SUBDEV_H__

#include <linux/v4l2-subdev.h>

struct media_entity;

/*
 * v4l2_subdev_open - Open a sub-device
 * @entity: Sub-device media entity
 *
 * Open the V4L2 subdev device node associated with @entity. The file descriptor
 * is stored in the media_entity structure.
 *
 * Return 0 on success, or a negative error code on failure.
 */
int v4l2_subdev_open(struct media_entity *entity);

/*
 * v4l2_subdev_close - Close a sub-device
 * @entity: Sub-device media entity
 *
 * Close the V4L2 subdev device node associated with the @entity and opened by
 * a previous call to v4l2_subdev_open() (either explicit or implicit).
 */
void v4l2_subdev_close(struct media_entity *entity);

/*
 * v4l2_subdev_get_format - Retrieve the format on a pad
 * @entity: Subdev-device media entity
 * @format: Format to be filled
 * @pad: Pad number
 * @which: Identifier of the format to get
 *
 * Retrieve the current format on the @entity @pad and store it in the @format
 * structure.
 *
 * @which is set to V4L2_SUBDEV_FORMAT_TRY to retrieve the try format stored in
 * the file handle, of V4L2_SUBDEV_FORMAT_ACTIVE to retrieve the current active
 * format.
 *
 * Return 0 on success, or a negative error code on failure.
 */
int v4l2_subdev_get_format(struct media_entity *entity,
	struct v4l2_mbus_framefmt *format, unsigned int pad,
	enum v4l2_subdev_format_whence which);

/*
 * v4l2_subdev_set_format - Set the format on a pad
 * @entity: Subdev-device media entity
 * @format: Format
 * @pad: Pad number
 * @which: Identifier of the format to set
 *
 * Set the format on the @entity @pad to @format. The driver is allowed to
 * modify the requested format, in which case @format is updated with the
 * modifications.
 *
 * @which is set to V4L2_SUBDEV_FORMAT_TRY to set the try format stored in the
 * file handle, of V4L2_SUBDEV_FORMAT_ACTIVE to configure the device with an
 * active format.
 *
 * Return 0 on success, or a negative error code on failure.
 */
int v4l2_subdev_set_format(struct media_entity *entity,
	struct v4l2_mbus_framefmt *format, unsigned int pad,
	enum v4l2_subdev_format_whence which);

/*
 * v4l2_subdev_get_crop - Retrieve the crop rectangle on a pad
 * @entity: Subdev-device media entity
 * @rect: Crop rectangle to be filled
 * @pad: Pad number
 * @which: Identifier of the format to get
 *
 * Retrieve the current crop rectangleon the @entity @pad and store it in the
 * @rect structure.
 *
 * @which is set to V4L2_SUBDEV_FORMAT_TRY to retrieve the try crop rectangle
 * stored in the file handle, of V4L2_SUBDEV_FORMAT_ACTIVE to retrieve the
 * current active crop rectangle.
 *
 * Return 0 on success, or a negative error code on failure.
 */
int v4l2_subdev_get_crop(struct media_entity *entity, struct v4l2_rect *rect,
	unsigned int pad, enum v4l2_subdev_format_whence which);

/*
 * v4l2_subdev_set_crop - Set the crop rectangle on a pad
 * @entity: Subdev-device media entity
 * @crop: Crop rectangle
 * @pad: Pad number
 * @which: Identifier of the format to set
 *
 * Set the crop rectangle on the @entity @pad to @rect. The driver is allowed to
 * modify the requested rectangle, in which case @rect is updated with the
 * modifications.
 *
 * @which is set to V4L2_SUBDEV_FORMAT_TRY to set the try crop rectangle stored
 * in the file handle, of V4L2_SUBDEV_FORMAT_ACTIVE to configure the device with
 * an active crop rectangle.
 *
 * Return 0 on success, or a negative error code on failure.
 */
int v4l2_subdev_set_crop(struct media_entity *entity, struct v4l2_rect *rect,
	unsigned int pad, enum v4l2_subdev_format_whence which);

/*
 * v4l2_subdev_set_frame_interval - Set the frame interval on a sub-device
 * @entity: Subdev-device media entity
 * @interval: Frame interval
 *
 * Set the frame interval on subdev @entity to @interval. The driver is allowed
 * to modify the requested frame interval, in which case @interval is updated
 * with the modifications.
 *
 * Frame interval setting is usually supported only on devices at the beginning
 * of video pipelines, such as sensors.
 *
 * Return 0 on success, or a negative error code on failure.
 */
int v4l2_subdev_set_frame_interval(struct media_entity *entity,
	struct v4l2_fract *interval);

/*
 * v4l2_subdev_get_control - Read the value of a control
 * @entity: Subdev-device media entity
 * @id: Control ID
 * @value: Control value to be filled
 *
 * Retrieve the current value of control @id and store it in @value.
 *
 * Return 0 on success or a negative error code on failure.
 */
int v4l2_subdev_get_control(struct media_entity *entity, unsigned int id,
			    int32_t *value);

/*
 * v4l2_subdev_set_control - Write the value of a control
 * @entity: Subdev-device media entity
 * @id: Control ID
 * @value: Control value
 *
 * Set control @id to @value. The device is allowed to modify the requested
 * value, in which case @value is updated to the modified value.
 *
 * Return 0 on success or a negative error code on failure.
 */
int v4l2_subdev_set_control(struct media_entity *entity, unsigned int id,
			    int32_t *value);

/*
 * v4l2_subdev_get_controls - Read the value of multiple controls
 * @entity: Subdev-device media entity
 * @count: Number of controls
 * @ctrls: Controls to be read
 *
 * Retrieve the current value of controls identified by @ctrls.
 *
 * Return 0 on success or a negative error code on failure.
 */
int v4l2_subdev_get_controls(struct media_entity *entity, unsigned int count,
			     struct v4l2_ext_control *ctrls);

/*
 * v4l2_subdev_set_controls - Write the value of multiple controls
 * @entity: Subdev-device media entity
 * @count: Number of controls
 * @ctrls: Controls to be written
 *
 * Set controls identified by @ctrls. The device is allowed to modify the
 * requested values, in which case @ctrls is updated to the modified value.
 *
 * Return 0 on success or a negative error code on failure.
 */
int v4l2_subdev_set_controls(struct media_entity *entity, unsigned int count,
			     struct v4l2_ext_control *ctrls);

#endif