1/*
2    V4L2 sub-device support header.
3
4    Copyright (C) 2008  Hans Verkuil <hverkuil@xs4all.nl>
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21#ifndef _V4L2_SUBDEV_H
22#define _V4L2_SUBDEV_H
23
24#include <linux/v4l2-subdev.h>
25#include <media/media-entity.h>
26#include <media/v4l2-common.h>
27#include <media/v4l2-dev.h>
28#include <media/v4l2-fh.h>
29#include <media/v4l2-mediabus.h>
30
31/* generic v4l2_device notify callback notification values */
32#define V4L2_SUBDEV_IR_RX_NOTIFY		_IOW('v', 0, u32)
33#define V4L2_SUBDEV_IR_RX_FIFO_SERVICE_REQ	0x00000001
34#define V4L2_SUBDEV_IR_RX_END_OF_RX_DETECTED	0x00000002
35#define V4L2_SUBDEV_IR_RX_HW_FIFO_OVERRUN	0x00000004
36#define V4L2_SUBDEV_IR_RX_SW_FIFO_OVERRUN	0x00000008
37
38#define V4L2_SUBDEV_IR_TX_NOTIFY		_IOW('v', 1, u32)
39#define V4L2_SUBDEV_IR_TX_FIFO_SERVICE_REQ	0x00000001
40
41struct v4l2_device;
42struct v4l2_ctrl_handler;
43struct v4l2_event_subscription;
44struct v4l2_fh;
45struct v4l2_subdev;
46struct v4l2_subdev_fh;
47struct tuner_setup;
48
49/* decode_vbi_line */
50struct v4l2_decode_vbi_line {
51	u32 is_second_field;	/* Set to 0 for the first (odd) field,
52				   set to 1 for the second (even) field. */
53	u8 *p; 			/* Pointer to the sliced VBI data from the decoder.
54				   On exit points to the start of the payload. */
55	u32 line;		/* Line number of the sliced VBI data (1-23) */
56	u32 type;		/* VBI service type (V4L2_SLICED_*). 0 if no service found */
57};
58
59/* Sub-devices are devices that are connected somehow to the main bridge
60   device. These devices are usually audio/video muxers/encoders/decoders or
61   sensors and webcam controllers.
62
63   Usually these devices are controlled through an i2c bus, but other busses
64   may also be used.
65
66   The v4l2_subdev struct provides a way of accessing these devices in a
67   generic manner. Most operations that these sub-devices support fall in
68   a few categories: core ops, audio ops, video ops and tuner ops.
69
70   More categories can be added if needed, although this should remain a
71   limited set (no more than approx. 8 categories).
72
73   Each category has its own set of ops that subdev drivers can implement.
74
75   A subdev driver can leave the pointer to the category ops NULL if
76   it does not implement them (e.g. an audio subdev will generally not
77   implement the video category ops). The exception is the core category:
78   this must always be present.
79
80   These ops are all used internally so it is no problem to change, remove
81   or add ops or move ops from one to another category. Currently these
82   ops are based on the original ioctls, but since ops are not limited to
83   one argument there is room for improvement here once all i2c subdev
84   drivers are converted to use these ops.
85 */
86
87/* Core ops: it is highly recommended to implement at least these ops:
88
89   g_chip_ident
90   log_status
91   g_register
92   s_register
93
94   This provides basic debugging support.
95
96   The ioctl ops is meant for generic ioctl-like commands. Depending on
97   the use-case it might be better to use subdev-specific ops (currently
98   not yet implemented) since ops provide proper type-checking.
99 */
100
101/* Subdevice external IO pin configuration */
102#define V4L2_SUBDEV_IO_PIN_DISABLE	(1 << 0) /* ENABLE assumed */
103#define V4L2_SUBDEV_IO_PIN_OUTPUT	(1 << 1)
104#define V4L2_SUBDEV_IO_PIN_INPUT	(1 << 2)
105#define V4L2_SUBDEV_IO_PIN_SET_VALUE	(1 << 3) /* Set output value */
106#define V4L2_SUBDEV_IO_PIN_ACTIVE_LOW	(1 << 4) /* ACTIVE HIGH assumed */
107
108struct v4l2_subdev_io_pin_config {
109	u32 flags;	/* V4L2_SUBDEV_IO_PIN_* flags for this pin's config */
110	u8 pin;		/* Chip external IO pin to configure */
111	u8 function;	/* Internal signal pad/function to route to IO pin */
112	u8 value;	/* Initial value for pin - e.g. GPIO output value */
113	u8 strength;	/* Pin drive strength */
114};
115
116/*
117   s_io_pin_config: configure one or more chip I/O pins for chips that
118	multiplex different internal signal pads out to IO pins.  This function
119	takes a pointer to an array of 'n' pin configuration entries, one for
120	each pin being configured.  This function could be called at times
121	other than just subdevice initialization.
122
123   init: initialize the sensor registors to some sort of reasonable default
124	values. Do not use for new drivers and should be removed in existing
125	drivers.
126
127   load_fw: load firmware.
128
129   reset: generic reset command. The argument selects which subsystems to
130	reset. Passing 0 will always reset the whole chip. Do not use for new
131	drivers without discussing this first on the linux-media mailinglist.
132	There should be no reason normally to reset a device.
133
134   s_gpio: set GPIO pins. Very simple right now, might need to be extended with
135	a direction argument if needed.
136
137   s_power: puts subdevice in power saving mode (on == 0) or normal operation
138	mode (on == 1).
139
140   interrupt_service_routine: Called by the bridge chip's interrupt service
141	handler, when an interrupt status has be raised due to this subdev,
142	so that this subdev can handle the details.  It may schedule work to be
143	performed later.  It must not sleep.  *Called from an IRQ context*.
144 */
145struct v4l2_subdev_core_ops {
146	int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip);
147	int (*log_status)(struct v4l2_subdev *sd);
148	int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n,
149				      struct v4l2_subdev_io_pin_config *pincfg);
150	int (*init)(struct v4l2_subdev *sd, u32 val);
151	int (*load_fw)(struct v4l2_subdev *sd);
152	int (*reset)(struct v4l2_subdev *sd, u32 val);
153	int (*s_gpio)(struct v4l2_subdev *sd, u32 val);
154	int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc);
155	int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
156	int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
157	int (*g_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
158	int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
159	int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
160	int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm);
161	int (*g_std)(struct v4l2_subdev *sd, v4l2_std_id *norm);
162	int (*s_std)(struct v4l2_subdev *sd, v4l2_std_id norm);
163	long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
164#ifdef CONFIG_VIDEO_ADV_DEBUG
165	int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg);
166	int (*s_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg);
167#endif
168	int (*s_power)(struct v4l2_subdev *sd, int on);
169	int (*interrupt_service_routine)(struct v4l2_subdev *sd,
170						u32 status, bool *handled);
171	int (*subscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh,
172			       struct v4l2_event_subscription *sub);
173	int (*unsubscribe_event)(struct v4l2_subdev *sd, struct v4l2_fh *fh,
174				 struct v4l2_event_subscription *sub);
175};
176
177/* s_radio: v4l device was opened in radio mode.
178
179   g_frequency: freq->type must be filled in. Normally done by video_ioctl2
180	or the bridge driver.
181
182   g_tuner:
183   s_tuner: vt->type must be filled in. Normally done by video_ioctl2 or the
184	bridge driver.
185
186   s_type_addr: sets tuner type and its I2C addr.
187
188   s_config: sets tda9887 specific stuff, like port1, port2 and qss
189 */
190struct v4l2_subdev_tuner_ops {
191	int (*s_radio)(struct v4l2_subdev *sd);
192	int (*s_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq);
193	int (*g_frequency)(struct v4l2_subdev *sd, struct v4l2_frequency *freq);
194	int (*g_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt);
195	int (*s_tuner)(struct v4l2_subdev *sd, struct v4l2_tuner *vt);
196	int (*g_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm);
197	int (*s_modulator)(struct v4l2_subdev *sd, struct v4l2_modulator *vm);
198	int (*s_type_addr)(struct v4l2_subdev *sd, struct tuner_setup *type);
199	int (*s_config)(struct v4l2_subdev *sd, const struct v4l2_priv_tun_config *config);
200};
201
202/* s_clock_freq: set the frequency (in Hz) of the audio clock output.
203	Used to slave an audio processor to the video decoder, ensuring that
204	audio and video remain synchronized. Usual values for the frequency
205	are 48000, 44100 or 32000 Hz. If the frequency is not supported, then
206	-EINVAL is returned.
207
208   s_i2s_clock_freq: sets I2S speed in bps. This is used to provide a standard
209	way to select I2S clock used by driving digital audio streams at some
210	board designs. Usual values for the frequency are 1024000 and 2048000.
211	If the frequency is not supported, then -EINVAL is returned.
212
213   s_routing: used to define the input and/or output pins of an audio chip,
214	and any additional configuration data.
215	Never attempt to use user-level input IDs (e.g. Composite, S-Video,
216	Tuner) at this level. An i2c device shouldn't know about whether an
217	input pin is connected to a Composite connector, become on another
218	board or platform it might be connected to something else entirely.
219	The calling driver is responsible for mapping a user-level input to
220	the right pins on the i2c device.
221 */
222struct v4l2_subdev_audio_ops {
223	int (*s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
224	int (*s_i2s_clock_freq)(struct v4l2_subdev *sd, u32 freq);
225	int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
226	int (*s_stream)(struct v4l2_subdev *sd, int enable);
227};
228
229/*
230   s_std_output: set v4l2_std_id for video OUTPUT devices. This is ignored by
231	video input devices.
232
233   g_std_output: get current standard for video OUTPUT devices. This is ignored
234	by video input devices.
235
236   g_tvnorms_output: get v4l2_std_id with all standards supported by video
237	OUTPUT device. This is ignored by video input devices.
238
239   s_crystal_freq: sets the frequency of the crystal used to generate the
240	clocks in Hz. An extra flags field allows device specific configuration
241	regarding clock frequency dividers, etc. If not used, then set flags
242	to 0. If the frequency is not supported, then -EINVAL is returned.
243
244   g_input_status: get input status. Same as the status field in the v4l2_input
245	struct.
246
247   s_routing: see s_routing in audio_ops, except this version is for video
248	devices.
249
250   s_dv_preset: set dv (Digital Video) preset in the sub device. Similar to
251	s_std()
252
253   g_dv_preset: get current dv (Digital Video) preset in the sub device.
254
255   query_dv_preset: query dv preset in the sub device. This is similar to
256	querystd()
257
258   s_dv_timings(): Set custom dv timings in the sub device. This is used
259	when sub device is capable of setting detailed timing information
260	in the hardware to generate/detect the video signal.
261
262   g_dv_timings(): Get custom dv timings in the sub device.
263
264   enum_mbus_fmt: enumerate pixel formats, provided by a video data source
265
266   g_mbus_fmt: get the current pixel format, provided by a video data source
267
268   try_mbus_fmt: try to set a pixel format on a video data source
269
270   s_mbus_fmt: set a pixel format on a video data source
271
272   g_mbus_config: get supported mediabus configurations
273
274   s_mbus_config: set a certain mediabus configuration. This operation is added
275	for compatibility with soc-camera drivers and should not be used by new
276	software.
277 */
278struct v4l2_subdev_video_ops {
279	int (*s_routing)(struct v4l2_subdev *sd, u32 input, u32 output, u32 config);
280	int (*s_crystal_freq)(struct v4l2_subdev *sd, u32 freq, u32 flags);
281	int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std);
282	int (*g_std_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
283	int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std);
284	int (*g_tvnorms_output)(struct v4l2_subdev *sd, v4l2_std_id *std);
285	int (*g_input_status)(struct v4l2_subdev *sd, u32 *status);
286	int (*s_stream)(struct v4l2_subdev *sd, int enable);
287	int (*cropcap)(struct v4l2_subdev *sd, struct v4l2_cropcap *cc);
288	int (*g_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop);
289	int (*s_crop)(struct v4l2_subdev *sd, struct v4l2_crop *crop);
290	int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
291	int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
292	int (*g_frame_interval)(struct v4l2_subdev *sd,
293				struct v4l2_subdev_frame_interval *interval);
294	int (*s_frame_interval)(struct v4l2_subdev *sd,
295				struct v4l2_subdev_frame_interval *interval);
296	int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize);
297	int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival);
298	int (*enum_dv_presets) (struct v4l2_subdev *sd,
299			struct v4l2_dv_enum_preset *preset);
300	int (*s_dv_preset)(struct v4l2_subdev *sd,
301			struct v4l2_dv_preset *preset);
302	int (*g_dv_preset)(struct v4l2_subdev *sd,
303			struct v4l2_dv_preset *preset);
304	int (*query_dv_preset)(struct v4l2_subdev *sd,
305			struct v4l2_dv_preset *preset);
306	int (*s_dv_timings)(struct v4l2_subdev *sd,
307			struct v4l2_dv_timings *timings);
308	int (*g_dv_timings)(struct v4l2_subdev *sd,
309			struct v4l2_dv_timings *timings);
310	int (*enum_mbus_fmt)(struct v4l2_subdev *sd, unsigned int index,
311			     enum v4l2_mbus_pixelcode *code);
312	int (*enum_mbus_fsizes)(struct v4l2_subdev *sd,
313			     struct v4l2_frmsizeenum *fsize);
314	int (*g_mbus_fmt)(struct v4l2_subdev *sd,
315			  struct v4l2_mbus_framefmt *fmt);
316	int (*try_mbus_fmt)(struct v4l2_subdev *sd,
317			    struct v4l2_mbus_framefmt *fmt);
318	int (*s_mbus_fmt)(struct v4l2_subdev *sd,
319			  struct v4l2_mbus_framefmt *fmt);
320	int (*g_mbus_config)(struct v4l2_subdev *sd,
321			     struct v4l2_mbus_config *cfg);
322	int (*s_mbus_config)(struct v4l2_subdev *sd,
323			     const struct v4l2_mbus_config *cfg);
324};
325
326/*
327   decode_vbi_line: video decoders that support sliced VBI need to implement
328	this ioctl. Field p of the v4l2_sliced_vbi_line struct is set to the
329	start of the VBI data that was generated by the decoder. The driver
330	then parses the sliced VBI data and sets the other fields in the
331	struct accordingly. The pointer p is updated to point to the start of
332	the payload which can be copied verbatim into the data field of the
333	v4l2_sliced_vbi_data struct. If no valid VBI data was found, then the
334	type field is set to 0 on return.
335
336   s_vbi_data: used to generate VBI signals on a video signal.
337	v4l2_sliced_vbi_data is filled with the data packets that should be
338	output. Note that if you set the line field to 0, then that VBI signal
339	is disabled. If no valid VBI data was found, then the type field is
340	set to 0 on return.
341
342   g_vbi_data: used to obtain the sliced VBI packet from a readback register.
343	Not all video decoders support this. If no data is available because
344	the readback register contains invalid or erroneous data -EIO is
345	returned. Note that you must fill in the 'id' member and the 'field'
346	member (to determine whether CC data from the first or second field
347	should be obtained).
348
349   s_raw_fmt: setup the video encoder/decoder for raw VBI.
350
351   g_sliced_fmt: retrieve the current sliced VBI settings.
352
353   s_sliced_fmt: setup the sliced VBI settings.
354 */
355struct v4l2_subdev_vbi_ops {
356	int (*decode_vbi_line)(struct v4l2_subdev *sd, struct v4l2_decode_vbi_line *vbi_line);
357	int (*s_vbi_data)(struct v4l2_subdev *sd, const struct v4l2_sliced_vbi_data *vbi_data);
358	int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data);
359	int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap);
360	int (*s_raw_fmt)(struct v4l2_subdev *sd, struct v4l2_vbi_format *fmt);
361	int (*g_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt);
362	int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt);
363};
364
365/**
366 * struct v4l2_subdev_sensor_ops - v4l2-subdev sensor operations
367 * @g_skip_top_lines: number of lines at the top of the image to be skipped.
368 *		      This is needed for some sensors, which always corrupt
369 *		      several top lines of the output image, or which send their
370 *		      metadata in them.
371 * @g_skip_frames: number of frames to skip at stream start. This is needed for
372 *		   buggy sensors that generate faulty frames when they are
373 *		   turned on.
374 */
375struct v4l2_subdev_sensor_ops {
376	int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines);
377	int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames);
378};
379
380/*
381   [rt]x_g_parameters: Get the current operating parameters and state of the
382	the IR receiver or transmitter.
383
384   [rt]x_s_parameters: Set the current operating parameters and state of the
385	the IR receiver or transmitter.  It is recommended to call
386	[rt]x_g_parameters first to fill out the current state, and only change
387	the fields that need to be changed.  Upon return, the actual device
388	operating parameters and state will be returned.  Note that hardware
389	limitations may prevent the actual settings from matching the requested
390	settings - e.g. an actual carrier setting of 35,904 Hz when 36,000 Hz
391	was requested.  An exception is when the shutdown parameter is true.
392	The last used operational parameters will be returned, but the actual
393	state of the hardware be different to minimize power consumption and
394	processing when shutdown is true.
395
396   rx_read: Reads received codes or pulse width data.
397	The semantics are similar to a non-blocking read() call.
398
399   tx_write: Writes codes or pulse width data for transmission.
400	The semantics are similar to a non-blocking write() call.
401 */
402
403enum v4l2_subdev_ir_mode {
404	V4L2_SUBDEV_IR_MODE_PULSE_WIDTH, /* uses struct ir_raw_event records */
405};
406
407struct v4l2_subdev_ir_parameters {
408	/* Either Rx or Tx */
409	unsigned int bytes_per_data_element; /* of data in read or write call */
410	enum v4l2_subdev_ir_mode mode;
411
412	bool enable;
413	bool interrupt_enable;
414	bool shutdown; /* true: set hardware to low/no power, false: normal */
415
416	bool modulation;           /* true: uses carrier, false: baseband */
417	u32 max_pulse_width;       /* ns,      valid only for baseband signal */
418	unsigned int carrier_freq; /* Hz,      valid only for modulated signal*/
419	unsigned int duty_cycle;   /* percent, valid only for modulated signal*/
420	bool invert_level;	   /* invert signal level */
421
422	/* Tx only */
423	bool invert_carrier_sense; /* Send 0/space as a carrier burst */
424
425	/* Rx only */
426	u32 noise_filter_min_width;       /* ns, min time of a valid pulse */
427	unsigned int carrier_range_lower; /* Hz, valid only for modulated sig */
428	unsigned int carrier_range_upper; /* Hz, valid only for modulated sig */
429	u32 resolution;                   /* ns */
430};
431
432struct v4l2_subdev_ir_ops {
433	/* Receiver */
434	int (*rx_read)(struct v4l2_subdev *sd, u8 *buf, size_t count,
435				ssize_t *num);
436
437	int (*rx_g_parameters)(struct v4l2_subdev *sd,
438				struct v4l2_subdev_ir_parameters *params);
439	int (*rx_s_parameters)(struct v4l2_subdev *sd,
440				struct v4l2_subdev_ir_parameters *params);
441
442	/* Transmitter */
443	int (*tx_write)(struct v4l2_subdev *sd, u8 *buf, size_t count,
444				ssize_t *num);
445
446	int (*tx_g_parameters)(struct v4l2_subdev *sd,
447				struct v4l2_subdev_ir_parameters *params);
448	int (*tx_s_parameters)(struct v4l2_subdev *sd,
449				struct v4l2_subdev_ir_parameters *params);
450};
451
452struct v4l2_subdev_pad_ops {
453	int (*enum_mbus_code)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
454			      struct v4l2_subdev_mbus_code_enum *code);
455	int (*enum_frame_size)(struct v4l2_subdev *sd,
456			       struct v4l2_subdev_fh *fh,
457			       struct v4l2_subdev_frame_size_enum *fse);
458	int (*enum_frame_interval)(struct v4l2_subdev *sd,
459				   struct v4l2_subdev_fh *fh,
460				   struct v4l2_subdev_frame_interval_enum *fie);
461	int (*get_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
462		       struct v4l2_subdev_format *format);
463	int (*set_fmt)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
464		       struct v4l2_subdev_format *format);
465	int (*set_crop)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
466		       struct v4l2_subdev_crop *crop);
467	int (*get_crop)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
468		       struct v4l2_subdev_crop *crop);
469};
470
471struct v4l2_subdev_ops {
472	const struct v4l2_subdev_core_ops	*core;
473	const struct v4l2_subdev_tuner_ops	*tuner;
474	const struct v4l2_subdev_audio_ops	*audio;
475	const struct v4l2_subdev_video_ops	*video;
476	const struct v4l2_subdev_vbi_ops	*vbi;
477	const struct v4l2_subdev_ir_ops		*ir;
478	const struct v4l2_subdev_sensor_ops	*sensor;
479	const struct v4l2_subdev_pad_ops	*pad;
480};
481
482/*
483 * Internal ops. Never call this from drivers, only the v4l2 framework can call
484 * these ops.
485 *
486 * registered: called when this subdev is registered. When called the v4l2_dev
487 *	field is set to the correct v4l2_device.
488 *
489 * unregistered: called when this subdev is unregistered. When called the
490 *	v4l2_dev field is still set to the correct v4l2_device.
491 *
492 * open: called when the subdev device node is opened by an application.
493 *
494 * close: called when the subdev device node is closed.
495 */
496struct v4l2_subdev_internal_ops {
497	int (*registered)(struct v4l2_subdev *sd);
498	void (*unregistered)(struct v4l2_subdev *sd);
499	int (*open)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh);
500	int (*close)(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh);
501};
502
503#define V4L2_SUBDEV_NAME_SIZE 32
504
505/* Set this flag if this subdev is a i2c device. */
506#define V4L2_SUBDEV_FL_IS_I2C			(1U << 0)
507/* Set this flag if this subdev is a spi device. */
508#define V4L2_SUBDEV_FL_IS_SPI			(1U << 1)
509/* Set this flag if this subdev needs a device node. */
510#define V4L2_SUBDEV_FL_HAS_DEVNODE		(1U << 2)
511/* Set this flag if this subdev generates events. */
512#define V4L2_SUBDEV_FL_HAS_EVENTS		(1U << 3)
513
514/* Each instance of a subdev driver should create this struct, either
515   stand-alone or embedded in a larger struct.
516 */
517struct v4l2_subdev {
518#if defined(CONFIG_MEDIA_CONTROLLER)
519	struct media_entity entity;
520#endif
521	struct list_head list;
522	struct module *owner;
523	u32 flags;
524	struct v4l2_device *v4l2_dev;
525	const struct v4l2_subdev_ops *ops;
526	/* Never call these internal ops from within a driver! */
527	const struct v4l2_subdev_internal_ops *internal_ops;
528	/* The control handler of this subdev. May be NULL. */
529	struct v4l2_ctrl_handler *ctrl_handler;
530	/* name must be unique */
531	char name[V4L2_SUBDEV_NAME_SIZE];
532	/* can be used to group similar subdevs, value is driver-specific */
533	u32 grp_id;
534	/* pointer to private data */
535	void *dev_priv;
536	void *host_priv;
537	/* subdev device node */
538	struct video_device *devnode;
539};
540
541#define media_entity_to_v4l2_subdev(ent) \
542	container_of(ent, struct v4l2_subdev, entity)
543#define vdev_to_v4l2_subdev(vdev) \
544	video_get_drvdata(vdev)
545
546/*
547 * Used for storing subdev information per file handle
548 */
549struct v4l2_subdev_fh {
550	struct v4l2_fh vfh;
551#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
552	struct v4l2_mbus_framefmt *try_fmt;
553	struct v4l2_rect *try_crop;
554#endif
555};
556
557#define to_v4l2_subdev_fh(fh)	\
558	container_of(fh, struct v4l2_subdev_fh, vfh)
559
560#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
561static inline struct v4l2_mbus_framefmt *
562v4l2_subdev_get_try_format(struct v4l2_subdev_fh *fh, unsigned int pad)
563{
564	return &fh->try_fmt[pad];
565}
566
567static inline struct v4l2_rect *
568v4l2_subdev_get_try_crop(struct v4l2_subdev_fh *fh, unsigned int pad)
569{
570	return &fh->try_crop[pad];
571}
572#endif
573
574extern const struct v4l2_file_operations v4l2_subdev_fops;
575
576static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p)
577{
578	sd->dev_priv = p;
579}
580
581static inline void *v4l2_get_subdevdata(const struct v4l2_subdev *sd)
582{
583	return sd->dev_priv;
584}
585
586static inline void v4l2_set_subdev_hostdata(struct v4l2_subdev *sd, void *p)
587{
588	sd->host_priv = p;
589}
590
591static inline void *v4l2_get_subdev_hostdata(const struct v4l2_subdev *sd)
592{
593	return sd->host_priv;
594}
595
596void v4l2_subdev_init(struct v4l2_subdev *sd,
597		      const struct v4l2_subdev_ops *ops);
598
599/* Call an ops of a v4l2_subdev, doing the right checks against
600   NULL pointers.
601
602   Example: err = v4l2_subdev_call(sd, core, g_chip_ident, &chip);
603 */
604#define v4l2_subdev_call(sd, o, f, args...)				\
605	(!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ?	\
606		(sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD))
607
608/* Send a notification to v4l2_device. */
609#define v4l2_subdev_notify(sd, notification, arg)			   \
610	((!(sd) || !(sd)->v4l2_dev || !(sd)->v4l2_dev->notify) ? -ENODEV : \
611	 (sd)->v4l2_dev->notify((sd), (notification), (arg)))
612
613#endif
614